Name: series-workflowc54m8 Phase: Running StartedAt: 2026-06-27 04:01:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[0] Phase: Succeeded StartedAt: 2026-06-27 04:01:54 +0000 UTC FinishedAt: 2026-06-27 04:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[0].run-triage Phase: Succeeded StartedAt: 2026-06-27 04:01:54 +0000 UTC FinishedAt: 2026-06-27 04:21:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV" ], "series_id": "814eacf4-cfb6-4ec2-b5ea-179f562e0d7a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "batadv_interface_kill_vid", "batadv_interface_add_vid" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkJiMzNDssCiAgICAmIzM0O2JhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVmY291bnRpbmcgbG9naWMgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGJ5IHJlbW92aW5nIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIGxpZmVjeWNsZSBvZiBWTEFOIG9iamVjdHMgaW4gdGhlIGJhdG1hbi1hZHYgbWVzaCBpbnRlcmZhY2UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2U3NDNkMWE0ZGUzYTQ4MmZiMzE4NGUxOGQ1ZGI1ZjBlNmJkNzQxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDA0OjE0OjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG5pbmRleCBlN2FhNDViYzZiN2FkNy4uY2M5NzRmMjQzMjAwZmMgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG5AQCAtNjkxLDkgJiM0Mzs2OTEsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIFxuIFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIFxuLVx0LyogZmluYWxseSBmcmVlIHRoZSB2bGFuIG9iamVjdCAqL1xuLVx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCQVRNQU5fQURWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBieSByZW1vdmluZyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBsaWZlY3ljbGUgb2YgVkxBTiBvYmplY3RzIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2U3NDNkMWE0ZGUzYTQ4MmZiMzE4NGUxOGQ1ZGI1ZjBlNmJkNzQxOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVuIDI3IDA0OjE0OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMKaW5kZXggZTdhYTQ1YmM2YjdhZDcuLmNjOTc0ZjI0MzIwMGZjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMKQEAgLTY5MSw5ICYjNDM7NjkxLDYgQEAgc3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90bywKIAogCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKIAotCS8qIGZpbmFsbHkgZnJlZSB0aGUgdmxhbiBvYmplY3QgKi8KLQliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwotCiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJhdG1hbi1BZHYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgcmVtb3ZpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7YCBmcm9tIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24uIFJpZ2h0IGF3YXksIG15IGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gaW50byBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNhbGwgaXMgYmVpbmcgcmVtb3ZlZC4gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlPyBJcyB0aGlzIGEgY2xlYW51cCwgYSBidWcgZml4LCBvciBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZW1vdmluZyB0aGF0IFZMQU4gcmVmZXJlbmNlIGNvdW50IGRlY3JlbWVudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiBjYWxsIGFuZCB3aGF0JiMzOTtzIGdvaW5nIHRvIGhhcHBlbiB0byB0aGF0IFZMQU4gYWZ0ZXIgdGhpcyBjaGFuZ2UgaXMgYXBwbGllZC4gSXMgdGhlcmUgYSBtZW1vcnkgbGVhaywgb3IgYSBkb3VibGUgZnJlZSBiZWluZyBwcmV2ZW50ZWQ/IE9yIHBlcmhhcHMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBpcyBiZWluZyBtb3ZlZCBlbHNld2hlcmU/IFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02MTU9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjU4LS8qKlxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2NTk6ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02NjAtICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2Vcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY2OS0gKi9cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjcwOnN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY3MS1cdFx0XHRcdCAgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF0YWR2X25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04NzctXHQubmRvX3ZsYW5fcnhfYWRkX3ZpZCA9IGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODc4Olx0Lm5kb192bGFuX3J4X2tpbGxfdmlkID0gYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODc5LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgPSBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBwcm9tcHQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAgZm9yIEJhdG1hbi1BZHYqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmRvX3ZsYW5fcnhfa2lsbF92aWRgIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJhdG1hbi1hZHYgaW50ZXJmYWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNraXAgc3RyYWlnaHQgdG8gdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gYW5kIGp1bXAgaW50byB0aGUgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoaXMgbG9naWMgbGllcy4gSSB3YW50IHRvIHNlZSBob3cgYmF0bWFuLWFkdiBoYW5kbGVzIFZMQU4gSUQgcmVtb3ZhbCBmcm9tIGl0cyBpbnRlcmZhY2VzLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IGl0IG1hbmFnZXMgaXRzIGludGVybmFsIGJyaWRnaW5nIGFuZCBmb3J3YXJkaW5nIGJhc2VkIG9uIFZMQU4gdGFnZ2luZyAob3IgbGFjayB0aGVyZW9mKSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsaW5nIGluZ3Jlc3MgZmlsdGVyaW5nIG9mIHRhZ2dlZCBmcmFtZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHQgKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxuIDY2MTpcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcbiA2NjI6XHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBkZWxldGVkIHZsYW5cbiA2NjM6XHQgKlxuIDY2NDpcdCAqIERlc3Ryb3kgYWxsIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHVzZWQgdG8gaGFuZGxlIHRoZSB2bGFuIGlkZW50aWZpZWQgYnkgdmlkXG4gNjY1Olx0ICogb24gdG9wIG9mIHRoZSBtZXNoIGludGVyZmFjZVxuIDY2NjpcdCAqXG4gNjY3Olx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgdGhlIHNwZWNpZmllZCBwcm90b3R5cGUgaXMgbm90IEVUSF9QXzgwMjFRXG4gNjY4Olx0ICogb3IgLUVOT0VOVCBpZiB0aGUgc3BlY2lmaWVkIHZsYW4gaWQgd2FzbiYjMzk7dCByZWdpc3RlcmVkLlxuIDY2OTpcdCAqL1xuIDY3MDpcdHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG4gNjcxOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIHNob3J0IHZpZClcbiA2NzI6XHR7XG4gNjczOlx0XHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiA2NzQ6XHRcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4gNjc1Olx0XG4gNjc2Olx0XHQvKiBvbmx5IDgwMi4xUSB2bGFucyBhcmUgc3VwcG9ydGVkLiBiYXRtYW4tYWR2IGRvZXMgbm90IGtub3cgaG93IHRvXG4gNjc3Olx0XHQgKiBoYW5kbGUgb3RoZXIgdHlwZXNcbiA2Nzg6XHRcdCAqL1xuIDY3OTpcdFx0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbiA2ODA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjgxOlx0XG4gNjgyOlx0XHQvKiBcJiMzNDtwcmlvcml0eSB0YWdcJiMzNDsgZnJhbWVzIGFyZSBoYW5kbGVkIGxpa2UgXCYjMzQ7dW50YWdnZWRcJiMzNDsgZnJhbWVzXG4gNjgzOlx0XHQgKiBhbmQgbm8gbWVzaGlmX3ZsYW4gbmVlZHMgdG8gYmUgZGVzdHJveWVkXG4gNjg0Olx0XHQgKi9cbiA2ODU6XHRcdGlmICh2aWQgPT0gMClcbiA2ODY6XHRcdFx0cmV0dXJuIDA7XG4gNjg3Olx0XG4gNjg4Olx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkIHwgQkFUQURWX1ZMQU5fSEFTX1RBRyk7XG4gNjg5Olx0XHRpZiAoIXZsYW4pXG4gNjkwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDY5MTpcdFxuIDY5MjpcdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIDY5MzpcdFxuIDY5NDpcdFx0cmV0dXJuIDA7XG4gNjk1Olx0fVxuIDY5NjpcdFxuIDY5NzpcdC8qIGJhdG1hbi1hZHYgbmV0d29yayBkZXZpY2VzIGhhdmUgZGV2aWNlcyBuZXN0aW5nIGJlbG93IGl0IGFuZCBhcmUgYSBzcGVjaWFsXG4gNjk4Olx0ICogXCYjMzQ7c3VwZXIgY2xhc3NcJiMzNDsgb2Ygbm9ybWFsIG5ldHdvcmsgZGV2aWNlczsgc3BsaXQgdGhlaXIgbG9ja3Mgb2ZmIGludG8gYVxuIDY5OTpcdCAqIHNlcGFyYXRlIGNsYXNzIHNpbmNlIHRoZXkgYWx3YXlzIG5lc3QuXG4gNzAwOlx0ICovXG4gNzAxOlx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBiYXRhZHZfbmV0ZGV2X3htaXRfbG9ja19rZXk7XG4gNzAyOlx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBiYXRhZHZfbmV0ZGV2X2FkZHJfbG9ja19rZXk7XG4gNzAzOlx0XG4gNzA0Olx0LyoqXG4gNzA1Olx0ICogYmF0YWR2X3NldF9sb2NrZGVwX2NsYXNzX29uZSgpIC0gU2V0IGxvY2tkZXAgY2xhc3MgZm9yIGEgc2luZ2xlIHR4IHF1ZXVlXG4gNzA2Olx0ICogQGRldjogZGV2aWNlIHdoaWNoIG93bnMgdGhlIHR4IHF1ZXVlXG4gNzA3Olx0ICogQHR4cTogdHggcXVldWUgdG8gbW9kaWZ5XG4gNzA4Olx0ICogQF91bnVzZWQ6IGFsd2F5cyBOVUxMXG4gNzA5Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlbW92YWwgb2YgYSBWTEFOIFJlbGVhc2UgaW4gQmF0YWR2KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0YWtpbmcgb3V0IGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4gSW50ZXJlc3RpbmcuIEkga25vdyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYHZsYW5gIHN0cnVjdHVyZSwgc28gdGhhdCYjMzk7cyBhIGtleSBwb2ludCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIHdlJiMzOTtyZSByZW1vdmluZyB0aGUgY29ycmVzcG9uZGluZyBgcHV0YCwgZG9lcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHRha2UgY2FyZSBvZiBkcm9wcGluZyB0aGF0IHJlZmVyZW5jZT8gSXQmIzM5O3MgZXNzZW50aWFsIHRoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBtYW5hZ2VkIGNvcnJlY3RseSB0byBhdm9pZCBtZW1vcnkgbGVha3Mgb3IgZG91YmxlIGZyZWVzLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBub3cgaGFuZGxlcyB0aGUgcmVsZWFzZS4gSeKAmWxsIG5lZWQgdG8gZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTQ1PWludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4Ny0vKipcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTg4OiAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3Rcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg5LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkxLSAqL1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1OTI6c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkzLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02NzA9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5MS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjkyOlx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTMtXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMDgyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5Ni1cdGlmICh2bGFuKSB7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjEwOTc6XHRcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5OC1cdFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24uIEp1c3QgdGhlIG5hbWUgYWxvbmUgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgVkxBTi1zcGVjaWZpYyBjbGVhbnVwIGhhcHBlbnMgd2hlbiBhIEJBVE1BTiBBZHZhbmNlZCBtZXNoIGludGVyZmFjZSBpcyBiZWluZyBkZXN0cm95ZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIFZMQU4gc3VwcG9ydCDigJMgdGhpbmdzIGxpa2UgVkxBTiBJRCBtYXBwaW5ncywgcG90ZW50aWFsbHkgcGVyLVZMQU4gc3RhdGlzdGljcywgYW5kIG1heWJlIHNvbWUgaGFuZGxpbmcgb2YgYW55IGFzc29jaWF0ZWQgYnJpZGdlIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyB0aGUgVkxBTiB0YWdnaW5nLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIEJBVE1BTiYjMzk7cyBNQUMtaW4tTUFDIGVuY2Fwc3VsYXRpb24sIHdoaWNoIG1lYW5zIGxpa2VseSBhIHVuaXF1ZSBoYW5kbGluZyBhcHByb2FjaCBjb21wYXJlZCB0byByZWd1bGFyIEV0aGVybmV0IFZMQU5zLiBUaGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMgd2l0aCB0aGVzZSBtZXNoIGNvbmZpZ3VyYXRpb25zLCBzbyBJJiMzOTttIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0aGV5JiMzOTt2ZSBwdXQgaW4gcGxhY2UsIGVzcGVjaWFsbHkgYXJvdW5kIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLCBlc3BlY2lhbGx5IHNpbmNlIGl0IGRlYWxzIHdpdGggYSBtZXNoIGludGVyZmFjZSBiZWluZyBkZXN0cm95ZWQgd2hpY2ggY2FuIGhhcHBlbiBmb3IgbWFueSByZWFzb25zLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIG5lZWQgdG8gYmUgcm9idXN0IGVub3VnaCB0byBoYW5kbGUgcGFydGlhbCBmYWlsdXJlcyBkdXJpbmcgdGhlIGNsZWFudXAsIG1heWJlIHdpdGggc29tZSBraW5kIG9mIHJldHJ5IG9yIHJvbGxiYWNrIGxvZ2ljLCBvciBhdCBsZWFzdCBncmFjZWZ1bCBoYW5kbGluZyBvZiBtZW1vcnkgbGVha3MuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg4Olx0ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxuIDU4OTpcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuIDU5MDpcdCAqIEB2bGFuOiB0aGUgb2JqZWN0IHRvIHJlbW92ZVxuIDU5MTpcdCAqL1xuIDU5MjpcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gNTkzOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbiA1OTQ6XHR7XG4gNTk1Olx0XHQvKiBleHBsaWNpdGx5IHJlbW92ZSB0aGUgYXNzb2NpYXRlZCBUVCBsb2NhbCBlbnRyeSBiZWNhdXNlIGl0IGlzIG1hcmtlZFxuIDU5NjpcdFx0ICogd2l0aCB0aGUgTk9QVVJHRSBmbGFnXG4gNTk3Olx0XHQgKi9cbiA1OTg6XHRcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIsXG4gNTk5Olx0XHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBcJiMzNDt2bGFuIGludGVyZmFjZSBkZXN0cm95ZWRcJiMzNDssIGZhbHNlKTtcbiA2MDA6XHRcbiA2MDE6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNjAyOlx0fVxuIDYwMzpcdFxuIDYwNDpcdC8qKlxuIDYwNTpcdCAqIGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCgpIC0gbmRvX2FkZF92aWQgQVBJIGltcGxlbWVudGF0aW9uXG4gNjA2Olx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcbiA2MDc6XHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXG4gNjA4Olx0ICogQHZpZDogaWRlbnRpZmllciBvZiB0aGUgbmV3IHZsYW5cbiA2MDk6XHQgKlxuIDYxMDpcdCAqIFNldCB1cCBhbGwgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIHRoZSBuZXcgdmxhbiBvbiB0b3Agb2YgdGhlXG4gNjExOlx0ICogbWVzaCBpbnRlcmZhY2VcbiA2MTI6XHQgKlxuIDYxMzpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuXG4gNjE0Olx0ICovXG4gNjE1Olx0c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIDYxNjpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIHNob3J0IHZpZClcbiA2MTc6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRG91YmxlLUZyZWUgQWxlcnQ6IEludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZMQU4gTWVtb3J5IENvcnJ1cHRpb24gaW4gQkFUTUFOIEFkdmFuY2VkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY2xlYW51cCBwcm9jZXNzIGZvciBWTEFOcyBpbiBCQVRNQU4gQWR2YW5jZWQsIHNwZWNpZmljYWxseSB0aGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCByaWdodCwgdGhpcyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuJiMzNDsgU3RhbmRhcmQgY2xlYW51cCBwcm9jZWR1cmUsIG5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSwgeWV0LiBCdXQgdGhlbiBhIHJlZCBmbGFnIHBvcHMgdXAuIEhvbGQgb24gYSBzZWNvbmQuLi4gaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAsIHdoaWNoIHJlbGVhc2VzIHRoZSBWTEFOLCBhbmQgdGhlbiBsYXRlciBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgb24gdGhlICpzYW1lKiBWTEFOLCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvIGhlcmUhIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgdGhhdCYjMzk7cyAqYmFkKi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBiZWluZyBjYWxsZWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gaXNzdWUuIExldCYjMzk7cyBzZWUgaWYgdGhlIG1lc2hpZiBuZXRsaW5rIGRlc3RydWN0aW9uIHBsYXlzIGEgcm9sZSBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW50byBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaGludCBvZiB0aGlzIGlzc3VlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODI6XHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcbjEwODM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuMTA4NDpcdHtcbjEwODU6XHRcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcbjEwODY6XHRcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbjEwODc6XHRcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4xMDg4Olx0XG4xMDg5Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2bWVzaF9pZmFjZS1cdTAwM2VhZGpfbGlzdC5sb3dlcikpIHtcbjEwOTA6XHRcdFx0aGFyZF9pZmFjZSA9IG5ldGRldl9hZGphY2VudF9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLVx1MDAzZWFkal9saXN0Lmxvd2VyLm5leHQpO1xuMTA5MTpcdFx0XHRiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpO1xuMTA5MjpcdFx0fVxuMTA5MzpcdFxuMTA5NDpcdFx0LyogZGVzdHJveSB0aGUgXCYjMzQ7dW50YWdnZWRcJiMzNDsgVkxBTiAqL1xuMTA5NTpcdFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7XG4xMDk2Olx0XHRpZiAodmxhbikge1xuMTA5NzpcdFx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG4xMDk4Olx0XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4xMDk5Olx0XHR9XG4xMTAwOlx0XG4xMTAxOlx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShtZXNoX2lmYWNlLCBoZWFkKTtcbjExMDI6XHR9XG4xMTAzOlx0XG4xMTA0Olx0LyoqXG4xMTA1Olx0ICogYmF0YWR2X21lc2hpZl9pc192YWxpZCgpIC0gQ2hlY2sgd2hldGhlciBkZXZpY2UgaXMgYSBiYXRhZHYgbWVzaCBpbnRlcmZhY2VcbjExMDY6XHQgKiBAbmV0X2RldjogZGV2aWNlIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkXG4xMTA3Olx0ICpcbjExMDg6XHQgKiBSZXR1cm46IHRydWUgd2hlbiBuZXRfZGV2IGlzIGEgYmF0bWFuLWFkdiBpbnRlcmZhY2UsIGZhbHNlIG90aGVyd2lzZVxuMTEwOTpcdCAqL1xuMTExMDpcdGJvb2wgYmF0YWR2X21lc2hpZl9pc192YWxpZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldilcbjExMTE6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRG91YmxlLUNoZWNraW5nIFZMQU4gSGFuZGxpbmcgaW4gTWVzaCBJbnRlcmZhY2UgRGVzdHJ1Y3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgYW5kIG5vdGljZWQgdGhpcyBibG9jayBvZiBjb2RlOgoKYGBgYwoJdmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7CglpZiAodmxhbikgewoJCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKCQliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwoJfQpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcywgaGFuZyBvbiwgaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgaXRzZWxmLCBhcmVuJiMzOTt0IHdlIGRvaW5nIGEgZG91YmxlIGBwdXRgIGhlcmUgaW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYD8gVGhhdCB3b3VsZCBiZSBhIG1lbW9yeSBsZWFrIHdhaXRpbmcgdG8gaGFwcGVuLCBvciB3b3JzZS4KCkJ1dCwgYmVmb3JlIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCBpdCBhY3R1YWxseSBkb2VzIHdpdGggdGhlIFZMQU4gZW50cnkuIERvZXMgaXQgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Q/IElmIGl0IGRvZXMsIHRoZW4gdGhlIHNlY29uZCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgbWlnaHQgYmUgc2FmZSwgdGhvdWdoIHN0aWxsIGluZWZmaWNpZW50LiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCBubywgaXQgKmRvZXNuJiMzOTt0KiByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4gCgpPa2F5LCBub3cgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgbG9naWMgd2l0aGluIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YC4gR290dGEgYmUgc3VyZSBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21haW4uYz02MDc9Ym9vbCBiYXRhZHZfdmxhbl9hcF9pc29sYV9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYy02MTctXHRcdGFwX2lzb2xhdGlvbl9lbmFibGVkID0gYXRvbWljX3JlYWQoXHUwMDI2dmxhbi1cdTAwM2VhcF9pc29sYXRpb24pO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjYxODpcdFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21haW4uYy02MTktXHR9XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTUyLVx0aWYgKHZsYW4pIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTUzOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01NTQtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODEtXHQvKiBkb24mIzM5O3QgcmV0dXJuIHJlZmVyZW5jZSB0byBuZXcgbWVzaGlmX3ZsYW4gKi9cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTgyOlx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTgzLVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTkyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MDAtXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjYwMTpcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwMi19XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMDgyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5Ny1cdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk4Olx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk5LVx0fVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg9MjU9c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqYmF0YWR2X21lc2hpZl92bGFuX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMjgtLyoqXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oOjI5OiAqIGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQoKSAtIGRlY3JlYXNlIHRoZSB2bGFuIG9iamVjdCByZWZjb3VudGVyIGFuZFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaC0zMC0gKiAgcG9zc2libHkgcmVsZWFzZSBpdFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMzItICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oOjMzOnN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTM0LXtcbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9MTcyPXN0YXRpYyBpbnQgYmF0YWR2X25ldGxpbmtfbWVzaF9maWxsX2FwX2lzb2xhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0xODItXHRhcF9pc29sYXRpb24gPSBhdG9taWNfcmVhZChcdTAwMjZ2bGFuLVx1MDAzZWFwX2lzb2xhdGlvbik7XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MTgzOlx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0xODQtXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTE5Nj1zdGF0aWMgaW50IGJhdGFkdl9uZXRsaW5rX3NldF9tZXNoX2FwX2lzb2xhdGlvbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0yMDUtXHRhdG9taWNfc2V0KFx1MDAyNnZsYW4tXHUwMDNlYXBfaXNvbGF0aW9uLCAhIW5sYV9nZXRfdTgoYXR0cikpO1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjIwNjpcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMjA3LVxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYz0xMzc0PXN0YXRpYyB2b2lkIGJhdGFkdl9wb3N0X2RvaXQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTEzOTAtXHRcdHZsYW4gPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjEzOTE6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTM5Mi1cdH1cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTIxNz1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjIzLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyMjQ6XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHR0X2xvY2FsX2VudHJ5LVx1MDAzZXZsYW4pO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yMjUtXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yOTM9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfbW9kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zMDMtXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjMwNDpcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTMwNS19XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0xMDc0PWJhdGFkdl90dF9sb2NhbF9kdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMDkzLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMDk0Olx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTA5NS1cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTM3MjA9Ym9vbCBiYXRhZHZfaXNfYXBfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdTggKnNyYywgdTggKmRzdCxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM3NDktdmxhbl9wdXQ6XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM3NTA6XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzUxLVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFZMQU4gUmVtb3ZhbCBpbiBCQVRNQU4gQWR2YW5jZWQqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICphY3R1YWxseSogcmVtb3ZpbmcgdGhlIFZMQU4gZW50cnkgZnJvbSB0aGUgaW50ZXJuYWwgVkxBTiBsaXN0PyBUaGF0IGp1c3QgZG9lc24mIzM5O3Qgc291bmQgcmlnaHQsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIG5vdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIFNlZW1zIGxpa2UgaXQgd291bGQgYmUgYSBtaXNzZWQgb3Bwb3J0dW5pdHkgdG8gcmVsZWFzZSB0aGUgVkxBTiByZXNvdXJjZS4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGRvdWJsZS1jaGVjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvbiBob3cgdGhlIFZMQU5zIGFyZSB0cnVseSBtYW5hZ2VkLiBUaGUgcmVhbCBsb2dpYyBmb3IgcmVsZWFzaW5nIFZMQU5zIGluIHRoaXMgY29udGV4dCBpcyBtb3N0IGxpa2VseSB3aXRoaW4gYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYC4gSSYjMzk7bGwgZGlnIGludG8gdGhhdCBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTEFOIGxpc3QgdG8gY29uZmlybSBvciByZWZ1dGUgbXkgaW5pdGlhbCB0aG91Z2h0LiBJdCBzZWVtcyBsaWtlIHRoZSBtb3JlIGxpa2VseSBwbGFjZSBmb3IgdGhlIGFjdHVhbCB1bmxpbmtpbmcgYW5kIGNsZWFudXAuIEkgYmV0IGl0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTQwMj12b2lkIGJhdGFkdl9pbnRlcmZhY2Vfcngoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00OTEtLyoqXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjQ5MjogKiBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZSgpIC0gcmVsZWFzZSB2bGFuIGZyb20gbGlzdHMgYW5kIHF1ZXVlIGZvciBmcmVlXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ5My0gKiAgYWZ0ZXIgcmN1IGdyYWNlIHBlcmlvZFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDk1LSAqL1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo0OTY6dm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00OTcte1xuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg9MjM9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg6MjQ6dm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMjUtc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqYmF0YWR2X21lc2hpZl92bGFuX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg9MzM9c3RhdGljIGlubGluZSB2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQoc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTM3LVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaDozODpcdGtyZWZfcHV0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY291bnQsIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMzktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWTEFOIERlc3RydWN0aW9uIGluIGJhdGFkdioqCgpPa2F5LCBzbyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgYmFzaWNhbGx5IGp1c3QgYSBga3JlZl9wdXRgLiAgSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgcmVmZXJlbmNlIGNvdW50ZXIgZGVjcmVtZW50LiBOb3RoaW5nIGZhbmN5IGhlcmUuCgpOb3csIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgdGhhdCwgc28gaXQmIzM5O3MgY2xlYXJseSBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3MuICBJdCBsb29rcyBsaWtlIGl0IHJlbW92ZXMgYSBUVCBsb2NhbCBlbnRyeSBmaXJzdC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYE5PUFVSR0VgLCBzbyBpdCYjMzk7cyBhbiBleHBsaWNpdCByZW1vdmFsLgoKTGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLiBDcnVjaWFsbHksIGl0IGZpcnN0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgd2hpY2ggKmdldHMqIGEgcmVmZXJlbmNlIHRvIHRoZSBWTEFOLiBUaGF0JiMzOTtzICYjNDM7MS4gVGhlbiwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBpcyBjYWxsZWQuIEl0IGRyb3BzIGEgcmVmZXJlbmNlLiBCdXQgd2hpY2ggb25lPyBJcyBpdCBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnb3QsIHRoZSBsaXN0IHJlZmVyZW5jZT8gT3IgZG9lcyBpdCB0YWtlIGEgY29weSBhbmQgZHJvcCB0aGF0PyBJIG5lZWQgdG8ga25vdyBob3cgdGhlIHJlZmVyZW5jZSBpcyBoZWxkLgoKQW5kIHRoZW4sICphZnRlciogYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBpcyBjYWxsZWQsIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgKmFnYWluKi4gU28sIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgb25lIHJlZmVyZW5jZSwgYW5kIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGRyb3BzIGFub3RoZXIhIFRoaXMgaXMgdG8gaGFuZGxlIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBzbyB0aGUgdmxhbiBvYmplY3QgY2FuIGJlIGZyZWVkLgoKSSBzaG91bGQgY2hlY2sgdGhlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgZnVuY3Rpb24gdG8gYmUgY2VydGFpbiBleGFjdGx5IHdoYXQgaGFwcGVucyB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgaGl0cyB6ZXJvLiBEb2VzIGl0IGhhbmRsZSBsaXN0IHJlbW92YWwsIG9yIGRvZXMgdGhlIGxpc3QgbWFuYWdlbWVudCBoYXBwZW4gZWxzZXdoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MjpcdCAqIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKCkgLSByZWxlYXNlIHZsYW4gZnJvbSBsaXN0cyBhbmQgcXVldWUgZm9yIGZyZWVcbiA0OTM6XHQgKiAgYWZ0ZXIgcmN1IGdyYWNlIHBlcmlvZFxuIDQ5NDpcdCAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgdmxhbiBvYmplY3RcbiA0OTU6XHQgKi9cbiA0OTY6XHR2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gNDk3Olx0e1xuIDQ5ODpcdFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiA0OTk6XHRcbiA1MDA6XHRcdHZsYW4gPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuLCByZWZjb3VudCk7XG4gNTAxOlx0XG4gNTAyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dmxhbi1cdTAwM2ViYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDUwMzpcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QpO1xuIDUwNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dmxhbi1cdTAwM2ViYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDUwNTpcdFxuIDUwNjpcdFx0a2ZyZWVfcmN1KHZsYW4sIHJjdSk7XG4gNTA3Olx0fVxuIDUwODpcdFxuIDUwOTpcdC8qKlxuIDUxMDpcdCAqIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSAtIGdldCB0aGUgdmxhbiBvYmplY3QgZm9yIGEgc3BlY2lmaWMgdmlkXG4gNTExOlx0ICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gNTEyOlx0ICogQHZpZDogdGhlIGlkZW50aWZpZXIgb2YgdGhlIHZsYW4gb2JqZWN0IHRvIHJldHJpZXZlXG4gNTEzOlx0ICpcbiA1MTQ6XHQgKiBSZXR1cm46IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIHZsYW4gbWF0Y2hpbmcgdGhlIHZpZCBwYXNzZWQgYXMgYXJndW1lbnQgb3JcbiA1MTU6XHQgKiBOVUxMIG90aGVyd2lzZS4gVGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJldHVybmVkIG9iamVjdCBpcyBpbmNyZW1lbnRlZCBieSAxLlxuIDUxNjpcdCAqL1xuIDUxNzpcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKmJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiA1MTg6XHRcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIHNob3J0IHZpZClcbiA1MTk6XHR7XG4gNTIwOlx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuX3RtcCwgKnZsYW4gPSBOVUxMO1xuIDUyMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWx2aW5nIGludG8gdGhlIFZMQU4gUmVsZWFzZSBNZWNoYW5pc20qKgoKT2theSwgc28gYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGZvciByZW1vdmluZyBhIFZMQU4gZnJvbSB0aGUgcmVsZXZhbnQgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIGRlLWFsbG9jYXRpb24gZnVuY3Rpb24uIFRoZSB3YXkgaXQgd29ya3MsIGZyb20gbXkgdW5kZXJzdGFuZGluZywgaXMgdGhhdCB0aGUgbGlzdCBpdHNlbGYgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBWTEFOLiBJbiBvdGhlciB3b3JkcywgdGhlIGxpc3QgaXMgdHJhY2tpbmcgdGhpcyBwYXJ0aWN1bGFyIHZsYW4uIFRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGZ1bmN0aW9uIGlzIGxpa2VseSBjYWxsZWQgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IGhpdHMgemVyby4gQXQgdGhhdCBwb2ludCwgdGhlIGxpc3QgZW50cnkgY2FuIHNhZmVseSBiZSByZW1vdmVkIGJlY2F1c2Ugbm90aGluZyBlbHNlIGlzIHVzaW5nIGl0LgoKQnV0Li4uIGhhbmcgb24uIElmIHRoZSBsaXN0ICpob2xkcyogYSByZWZlcmVuY2UsIHdoZW4gYW5kIHdoZXJlIGlzIHRoYXQgcmVmZXJlbmNlIGFjdHVhbGx5ICpkcm9wcGVkKj8gSSBuZWVkIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBWTEFOIG1vcmUgY2xvc2VseSB0byB1bmRlcnN0YW5kIHRoZSBvd25lcnNoaXAuIExldCBtZSBjaGVjayBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgdG8gc2VlIGhvdyBpdCYjMzk7cyBoYW5kbGVkIG9uIHRoZSBjcmVhdGlvbiBzaWRlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgbGlzdCBnYWlucyB0aGUgcmVmZXJlbmNlIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoZXJlIHRoZSBhc3NvY2lhdGVkIHJlbGVhc2Ugb2NjdXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdGludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcbiA1NDY6XHR7XG4gNTQ3Olx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuIDU0ODpcdFxuIDU0OTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTUwOlx0XG4gNTUxOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA1NTI6XHRcdGlmICh2bGFuKSB7XG4gNTUzOlx0XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNTU0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTU1Olx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDU1NjpcdFx0fVxuIDU1NzpcdFxuIDU1ODpcdFx0dmxhbiA9IGt6YWxsb2Nfb2JqKCp2bGFuLCBHRlBfQVRPTUlDKTtcbiA1NTk6XHRcdGlmICghdmxhbikge1xuIDU2MDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDU2MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA1NjI6XHRcdH1cbiA1NjM6XHRcbiA1NjQ6XHRcdHZsYW4tXHUwMDNlYmF0X3ByaXYgPSBiYXRfcHJpdjtcbiA1NjU6XHRcdHZsYW4tXHUwMDNldmlkID0gdmlkO1xuIDU2NjpcdFx0a3JlZl9pbml0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY291bnQpO1xuIDU2NzpcdFxuIDU2ODpcdFx0YXRvbWljX3NldChcdTAwMjZ2bGFuLVx1MDAzZWFwX2lzb2xhdGlvbiwgMCk7XG4gNTY5Olx0XG4gNTcwOlx0XHRrcmVmX2dldChcdTAwMjZ2bGFuLVx1MDAzZXJlZmNvdW50KTtcbiA1NzE6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QsIFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3QpO1xuIDU3MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcbiA1NzM6XHRcbiA1NzQ6XHRcdC8qIGFkZCBhIG5ldyBUVCBsb2NhbCBlbnRyeS4gVGhpcyBvbmUgd2lsbCBiZSBtYXJrZWQgd2l0aCB0aGUgTk9QVVJHRVxuIDU3NTpcdFx0ICogZmxhZ1xuIDU3NjpcdFx0ICovXG4gNTc3Olx0XHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UsXG4gNTc4Olx0XHRcdFx0ICAgIGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIsIHZpZCxcbiA1Nzk6XHRcdFx0XHQgICAgQkFUQURWX05VTExfSUZJTkRFWCwgQkFUQURWX05PX01BUkspO1xuIDU4MDpcdFxuIDU4MTpcdFx0LyogZG9uJiMzOTt0IHJldHVybiByZWZlcmVuY2UgdG8gbmV3IG1lc2hpZl92bGFuICovXG4gNTgyOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuIDU4MzpcdFxuIDU4NDpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzk4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmF0YWR2IFZMQU4gUmVmZXJlbmNlIENvdW50aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgVkxBTiByZWZlcmVuY2UgY291bnRpbmcgaW4gYmF0YWR2LiBJbml0aWFsbHksIGluIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgd2UgaW5pdGlhbGl6ZSB0aGUgYHZsYW4tJmd0O3JlZmNvdW50YCB0byAxLiBUaGVuIHdlIGluY3JlbWVudCBpdCB0byAyLCBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBsaXN0LiBXZSAqaW1tZWRpYXRlbHkqIGRlY3JlbWVudCBpdCBiYWNrIHRvIDEgdmlhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YC4gVGhpcyB0ZWxscyBtZSB0aGUgbGlzdCBpdHNlbGYgaG9sZHMgdGhlICpwcmltYXJ5KiByZWZlcmVuY2UuIFRoaXMgc2VlbXMgc2Vuc2libGUuIFdoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBnZXRzIGNhbGxlZCwgaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7YCwgd2hpY2ggKnNob3VsZCogZHJvcCB0aGUgbGlzdCYjMzk7cyByZWZlcmVuY2UuCgpBaCEgTm93IEkgc2VlLiBXaGVuIHRoZSBsaXN0IGRyb3BzIGl0cyByZWZlcmVuY2UsIGlmIG5vIG90aGVyIHBhcnQgb2YgdGhlIGNvZGUgaGFzIGEgaG9sZCBvbiB0aGUgcmVmZXJlbmNlLCB0aGUgcmVmY291bnQgYmVjb21lcyB6ZXJvIGFuZCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgICpzaG91bGQqIGdldCBjYWxsZWQsIGFuZCB0aGF0JiMzOTtzIHdoZW4gdGhlIGxpc3QgcmVtb3ZlcyB0aGUgb2JqZWN0LiBHb29kLgoKT2theSwgbGV0IG1lIGNoZWNrIHRoZSAmIzM0O2tpbGxlciYjMzQ7LCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdCB0byBzZWUuIEl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB0byBnZXQgYSByZWZlcmVuY2UgKHJlZmNvdW50ID0gMiksIHRoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB0byBkZXN0cm95IGl0IChyZWZjb3VudCA9IDEpLCBhbmQgKmZpbmFsbHkqIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBvbiBpdHMgKm93biogcmVmZXJlbmNlLCBkcm9wcGluZyB0aGUgY291bnQgdG8gemVyby4gVGhhdCBtYWtlcyBzZW5zZSEgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb3JyZWN0bHkgbWFuYWdlcyB0byBkZWNyZW1lbnQgdGhlIGxpc3QgcmVmZXJlbmNlLCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIG1hbmFnZXMgdG8gZHJvcCBpdHMgcmVmZXJlbmNlLgoKU28sIHdoeSBkaWQgYSBwYXRjaCByZW1vdmUgdGhhdCAqZmluYWwqIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBjYWxsIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYD8gVGhhdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gYSBsZWFrISBMZXQgbWUgZ28gYW5kIGNoZWNrIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AuIFRoYXQgbWlnaHQgcmV2ZWFsIHdoeSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgyOlx0c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXG4xMDgzOlx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbjEwODQ6XHR7XG4xMDg1Olx0XHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XG4xMDg2Olx0XHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4xMDg3Olx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuMTA4ODpcdFxuMTA4OTpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNm1lc2hfaWZhY2UtXHUwMDNlYWRqX2xpc3QubG93ZXIpKSB7XG4xMDkwOlx0XHRcdGhhcmRfaWZhY2UgPSBuZXRkZXZfYWRqYWNlbnRfZ2V0X3ByaXZhdGUobWVzaF9pZmFjZS1cdTAwM2VhZGpfbGlzdC5sb3dlci5uZXh0KTtcbjEwOTE6XHRcdFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbjEwOTI6XHRcdH1cbjEwOTM6XHRcbjEwOTQ6XHRcdC8qIGRlc3Ryb3kgdGhlIFwmIzM0O3VudGFnZ2VkXCYjMzQ7IFZMQU4gKi9cbjEwOTU6XHRcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpO1xuMTA5NjpcdFx0aWYgKHZsYW4pIHtcbjEwOTc6XHRcdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuMTA5ODpcdFx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuMTA5OTpcdFx0fVxuMTEwMDpcdFxuMTEwMTpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUobWVzaF9pZmFjZSwgaGVhZCk7XG4xMTAyOlx0fVxuMTEwMzpcdFxuMTEwNDpcdC8qKlxuMTEwNTpcdCAqIGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQoKSAtIENoZWNrIHdoZXRoZXIgZGV2aWNlIGlzIGEgYmF0YWR2IG1lc2ggaW50ZXJmYWNlXG4xMTA2Olx0ICogQG5ldF9kZXY6IGRldmljZSB3aGljaCBzaG91bGQgYmUgY2hlY2tlZFxuMTEwNzpcdCAqXG4xMTA4Olx0ICogUmV0dXJuOiB0cnVlIHdoZW4gbmV0X2RldiBpcyBhIGJhdG1hbi1hZHYgaW50ZXJmYWNlLCBmYWxzZSBvdGhlcndpc2VcbjExMDk6XHQgKi9cbjExMTA6XHRib29sIGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpXG4xMTExOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM1MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkxBTiBEZXN0cnVjdGlvbiBpbiBCYXRtYW4tYWR2IE1lc2ggSW50ZXJmYWNlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBhbmQgSSBzZWUgdGhpcyBjb2RlIGJsb2NrOgoKYGBgYwoJdmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7CglpZiAodmxhbikgewoJCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKCQliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwoJfQpgYGAKClRoYXQgbG9va3Mgc3RhbmRhcmQgZW5vdWdoLCBnZXQgYSBWTEFOLCBkZXN0cm95IGl0LCByZWxlYXNlIGl0LiBCdXQgd2FpdC4uLiBkaWRuJiMzOTt0IEkgc2VlIHNvbWV0aGluZyBhYm91dCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2hhbmdpbmcgcmVjZW50bHk/IENvdWxkIGl0IGJlIHRoYXQgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24gd2FzIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgcmVsZWFzZSBpdHNlbGY/IE5vLCB0aGF0IGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2U7IHRoYXQgc2VlbXMgbGlrZSB0b28gYnJvYWQgYSBjaGFuZ2UgZm9yIHN1Y2ggYSBzbWFsbCB0aGluZywgYW5kIGFueXdheSwgdGhlIGNvbW1pdCBsb2cgZGlkbiYjMzk7dCBzdWdnZXN0IHRoYXQuIExldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBwYXRjaC4KCipTY2FucyB0aGUgcGF0Y2ggZGlmZi4uLioKCmBgYGRpZmYKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCkBAIC02OTEsOSAmIzQzOzY5MSw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sCiAKIAliYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7CiAKLQkvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovCi0JYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTsKLQogCXJldHVybiAwOwogfQpgYGAKCkFoYSEgSXQgKmRpZCogcmVtb3ZlIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIFdoeT8gSXMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBub3cgcmVzcG9uc2libGUgZm9yIGJvdGggdGhlIGRlc3Ryb3kgYW5kIHRoZSBwdXQgb3BlcmF0aW9ucz8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBmaW5kIG91dC4gVGhpcyBpcyBzdGFydGluZyB0byBsb29rIGxpa2UgdGhlIGNvbW1pdCBoYWQgc29tZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHdhc24mIzM5O3QgY2hhbmdlZCB0byBhbHNvIGRyb3AgYSByZWYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg4Olx0ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxuIDU4OTpcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuIDU5MDpcdCAqIEB2bGFuOiB0aGUgb2JqZWN0IHRvIHJlbW92ZVxuIDU5MTpcdCAqL1xuIDU5MjpcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gNTkzOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbiA1OTQ6XHR7XG4gNTk1Olx0XHQvKiBleHBsaWNpdGx5IHJlbW92ZSB0aGUgYXNzb2NpYXRlZCBUVCBsb2NhbCBlbnRyeSBiZWNhdXNlIGl0IGlzIG1hcmtlZFxuIDU5NjpcdFx0ICogd2l0aCB0aGUgTk9QVVJHRSBmbGFnXG4gNTk3Olx0XHQgKi9cbiA1OTg6XHRcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIsXG4gNTk5Olx0XHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBcJiMzNDt2bGFuIGludGVyZmFjZSBkZXN0cm95ZWRcJiMzNDssIGZhbHNlKTtcbiA2MDA6XHRcbiA2MDE6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNjAyOlx0fVxuIDYwMzpcdFxuIDYwNDpcdC8qKlxuIDYwNTpcdCAqIGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCgpIC0gbmRvX2FkZF92aWQgQVBJIGltcGxlbWVudGF0aW9uXG4gNjA2Olx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcbiA2MDc6XHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTg5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmVyZW5jZSBDb3VudGluZyBBbm9tYWx5IGluIGJhdGFkdiBWTEFOIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBpcyBzdGFydGluZyB0byBuYWcgYXQgbWUuIEl0IGxvb2tzIGxpa2UgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCBkcm9wcGluZyBhIHJlZmVyZW5jZS4gQnV0LCB0aGUgZnVuY3Rpb24gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHJldHVybnMgYSByZWZlcmVuY2UsIGFzIGl0IHNob3VsZC4gTm93LCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBzbyBpdCBhY3F1aXJlcyBhIHJlZmVyZW5jZS4gVGhlbiwgY3J1Y2lhbGx5LCBpdCBzdWJzZXF1ZW50bHkgY2FsbHMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYC4gU28gZmFyLCBzbyBnb29kLiBUaGUgKnByb2JsZW0qIGlzIHRoYXQgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgICpkb2VzbiYjMzk7dCogY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgYWZ0ZXIgdGhlIGNhbGwgdG8gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCwgdGhlbiB3ZSYjMzk7dmUgZ290IGEgcmVmZXJlbmNlIGxlYWsuCgpVbmxlc3MuLi4gdW5sZXNzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgKmJvdGgqIHJlZmVyZW5jZXMgc29tZWhvdz8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBJdCBvbmx5IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBvbmNlLiBJ4oCZbSBwcmV0dHkgc3VyZSBpdCBvbmx5IGRyb3BzIG9uZS4KCldhaXQsIGl0JiMzOTtzIHBvc3NpYmxlIHRoaXMgd2FzIGhhbmRsZWQgaW4gYSBkaWZmZXJlbnQgY29tbWl0LiBEYW1uIGl0LCB0aGUgc291cmNlIGNvZGUmIzM5O3MgYSBiaXQgb2YgYSBtZXNzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGdpdCBsb2cgb2YgYG5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhhdCBpdHMgYmVoYXZpb3IgaGFzbiYjMzk7dCBjaGFuZ2VkLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBodW50IGRvd24gYSBmaXgsIG9yIGlmIHRoaXMgKmlzKiBhIGxlYWsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU0NT1pbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODctLyoqXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU4ODogKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4OS0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5MS0gKi9cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTkyOnN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5My1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NjcwPXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTEtXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY5MjpcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkzLVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTA4Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTYtXHRpZiAodmxhbikge1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk3Olx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTgtXHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCYXRhZHYgVkxBTiBEZXN0cnVjdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyB3ZSYjMzk7cmUgZGVzdHJveWluZyB0aGUgVkxBTiwgc28gd2UgbmVlZCB0byByZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggaXQuCgpCdXQgdGhlbiwgaW5zaWRlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIEkgc2VlIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCBiZWluZyBjYWxsZWQuIE5vdywgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gRG9lcyB0aGlzIGNhbGwgYWN0dWFsbHkgZGVjcmVtZW50IGEgcmVmZXJlbmNlIGNvdW50PyBJcyB0aGVyZSBhIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSBidXJpZWQgaW4gaGVyZT8gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHRoYXQuIEkga25vdyB0aGUgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGZ1bmN0aW9uIGl0c2VsZiBpcyB3aGVyZSB0aGUgY3JpdGljYWwgcmVmZXJlbmNlIGhhbmRsaW5nIHRha2VzIHBsYWNlLCBzbyBJIGJldHRlciBnbyBkaXZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcuIEdvdHRhIGNvbmZpcm0gdGhhdCByZWZlcmVuY2UgZHJvcHBpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl90dF9sb2NhbF9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMTI9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTMwLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZsYW4sIFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3QsIGxpc3QpIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTMxOlx0XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBvbGRfYWRkciwgdmxhbi1cdTAwM2V2aWQsXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEzMi1cdFx0XHRcdCAgICAgICBcJiMzNDttYWMgYWRkcmVzcyBjaGFuZ2VkXCYjMzQ7LCBmYWxzZSk7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01OTI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5Ny1cdCAqL1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1OTg6XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTktXHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBcJiMzNDt2bGFuIGludGVyZmFjZSBkZXN0cm95ZWRcJiMzNDssIGZhbHNlKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz02ODE9c3RhdGljIHZvaWQgYmF0YWR2X21jYXN0X21sYV90dF9yZXRyYWN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjkzLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6Njk0Olx0XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBtY2FzdF9lbnRyeS1cdTAwM2VhZGRyLFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjk1LVx0XHRcdFx0ICAgICAgIEJBVEFEVl9OT19GTEFHUyxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTEyMTc9YmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMjM1LS8qKlxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMjM2OiAqIGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoKSAtIGxvZ2ljYWxseSByZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgbG9jYWwgdGFibGVcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTIzNy0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyNDQtICovXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEyNDU6dTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyNDYtXHRcdFx0ICAgdW5zaWduZWQgc2hvcnQgdmlkLCBjb25zdCBjaGFyICptZXNzYWdlLFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTU4OT1zdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTcyNS1cdC8qIHJlbW92ZSBhZGRyZXNzIGZyb20gbG9jYWwgaGFzaCBpZiBwcmVzZW50ICovXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjE3MjY6XHRsb2NhbF9mbGFncyA9IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIHR0X2FkZHIsIHZpZCxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTcyNy1cdFx0XHRcdFx0ICAgICBcJiMzNDtnbG9iYWwgdHQgcmVjZWl2ZWRcJiMzNDssXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaD0xOT1ib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaC0yMC1cdFx0XHQgdW5zaWduZWQgc2hvcnQgdmlkLCBpbnQgaWZpbmRleCwgdTMyIG1hcmspO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaDoyMTp1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaC0yMi1cdFx0XHQgICBjb25zdCB1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVkxBTiBDbGVhbnVwIGluIEJhdGFkdioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgd2FzIHJlc3BvbnNpYmxlIGZvciBjb21wbGV0ZWx5IGNsZWFuaW5nIHVwIHRoZSBWTEFOIGNvbnRleHQsIGluY2x1ZGluZyBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBsaXN0LiBCdXQgc29tZXRoaW5nIGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgaXQgKm1pZ2h0KiBiZSBtaXNzaW5nIGEgc3RlcCB0aGVyZS4KCkxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucywgdGhvdWdoLiBJbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IGFzc3VtaW5nIGEgYnVnLCBsZXQmIzM5O3MgdHJhY2UgdGhlIGxvZ2ljIGZsb3cuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY2xvc2VseSByZWxhdGVkIGZ1bmN0aW9uLCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgLCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgZW50aXJlIHJlbGVhc2UgcHJvY2VzcywgcGF5aW5nIHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IGxpc3QgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCB0aHJvdWdob3V0LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgdHJ1ZSBkZS1hbGxvY2F0aW9uIGxvZ2ljIHdpbGwgYmUgcHJlc2VudCwgb3IgYXQgbGVhc3QgdGhlIGNvdW50ZXJwYXJ0IHRoYXQgaXMgbWlzc2luZyBmcm9tIHRoZSBkZXN0cm95IGZ1bmN0aW9uLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoZSBpc3N1ZSBjYW4gYmUgbG9jYXRlZCB0aGlzIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTY6XHR2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gNDk3Olx0e1xuIDQ5ODpcdFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiA0OTk6XHRcbiA1MDA6XHRcdHZsYW4gPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuLCByZWZjb3VudCk7XG4gNTAxOlx0XG4gNTAyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dmxhbi1cdTAwM2ViYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDUwMzpcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QpO1xuIDUwNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dmxhbi1cdTAwM2ViYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDUwNTpcdFxuIDUwNjpcdFx0a2ZyZWVfcmN1KHZsYW4sIHJjdSk7XG4gNTA3Olx0fVxuIDUwODpcdFxuIDUwOTpcdC8qKlxuIDUxMDpcdCAqIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSAtIGdldCB0aGUgdmxhbiBvYmplY3QgZm9yIGEgc3BlY2lmaWMgdmlkXG4gNTExOlx0ICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gNTEyOlx0ICogQHZpZDogdGhlIGlkZW50aWZpZXIgb2YgdGhlIHZsYW4gb2JqZWN0IHRvIHJldHJpZXZlXG4gNTEzOlx0ICpcbiA1MTQ6XHQgKiBSZXR1cm46IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIHZsYW4gbWF0Y2hpbmcgdGhlIHZpZCBwYXNzZWQgYXMgYXJndW1lbnQgb3JcbiA1MTU6XHQgKiBOVUxMIG90aGVyd2lzZS4gVGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJldHVybmVkIG9iamVjdCBpcyBpbmNyZW1lbnRlZCBieSAxLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBiYXRhZHZfbWVzaGlmX3ZsYW5gIFJlZmVyZW5jZSBDb3VudCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgdGhlIGtleSDigJMgaXQmIzM5O3Mgd2hhdCByZW1vdmVzIHRoZSBWTEFOIG9iamVjdCBmcm9tIHRoZSBsaXN0LiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGUgbGlzdCAqZGlkbiYjMzk7dCogaG9sZCBhIHJlZmVyZW5jZS4gQnV0IHdhaXQsIGlmIHRoYXQgd2VyZSB0cnVlLCB0aGVuIGhvdyBpcyB0aGUgcmVmY291bnQgZXZlciBkZWNyZW1lbnRlZD8gTGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2g6IGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCBpbml0aWFsaXplcyB0aGUgcmVmY291bnQgdG8gMSB3aXRoIGBrcmVmX2luaXRgLiBUaGVuLCBga3JlZl9nZXRgIGluY3JlbWVudHMgaXQgdG8gMi4gVGhlIG9iamVjdCBpcyBhZGRlZCB0byB0aGUgbGlzdCBhbmQgdGhlbiAqaW1tZWRpYXRlbHkqIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGlzIGNhbGxlZCwgZHJvcHBpbmcgdGhlIGNvdW50IGJhY2sgdG8gMS4gU28sIHRoZSBsaXN0ICpkb2VzKiBpbmRlZWQgaG9sZCBhIHJlZmVyZW5jZSwgYW5kIHRoYXQgcmVmZXJlbmNlIGlzIHRoZSBvbmUgdGhhdCBicmluZ3MgdGhlIGNvdW50IHRvIDEuCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHdoZW4gYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBpcyBjYWxsZWQsIHRoZSByZWZjb3VudCAqbXVzdCogaGF2ZSBoaXQgMC4gVGhhdCYjMzk7cyBob3cgd2Uga25vdyBpdCYjMzk7cyB0aW1lIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBIb3dldmVyLCBpZiB0aGUgbGlzdCBpcyBob2xkaW5nIGEgcmVmZXJlbmNlLCBob3cgY2FuIGl0IGV2ZXIgaGl0IDA/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZmlndXJlIG91dC4KCkFscmlnaHQsIHdobyYjMzk7cyByZXNwb25zaWJsZSBmb3IgZGVjcmVtZW50aW5nIHRoZSByZWZjb3VudD8gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFNvIHRoYXQgZHJvcHMgYSByZWZlcmVuY2UuIEJ1dCB0aGVuIEkgc2F3IHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgd2hpY2ggZ2l2ZXMgdGhlIHJlZmNvdW50IGJhY2sgdG8gMiwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWZjb3VudCB0byAxLCBhbmQgdGhlIGNvZGUgcmVtb3ZlZCB0aGUgbGFzdCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIEJ1dCBpZiB0aGUgZnVuY3Rpb24gZG9lc24mIzM5O3QgZHJvcCB0aGUgbGFzdCByZWZlcmVuY2UgY291bnQsIGhvdyBjYW4gYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBnZXQgY2FsbGVkPyBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBsZWFrIQoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdCBub3csIHRoZSBwYXRjaCBJIGhhdmUgc2hvd3MgdGhlIHJlbW92YWwgb2YgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIEJ1dCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGFscmVhZHkgZHJvcHMgYSByZWZlcmVuY2UsIGFuZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBvbmUgZnJvbSBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHRoZW4gdGhhdCBmaW5hbCBgcHV0YCBjYWxsIGlzIGNyaXRpY2FsLiBUaGUgcmVtb3ZhbCAqbGVha3MqIGEgcmVmZXJlbmNlLiBUaGF0IG1lYW5zIHRoZSByZWZjb3VudCB3aWxsIG5ldmVyIHJlYWNoIHplcm8gYW5kIHRoZSBWTEFOIG9iamVjdCB3b24mIzM5O3QgYmUgZnJlZWQuIFRoZSBwYXRjaCBoYXMgaW50cm9kdWNlZCBhIG1lbW9yeSBsZWFrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4ODpcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcbiA1ODk6XHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiA1OTA6XHQgKiBAdmxhbjogdGhlIG9iamVjdCB0byByZW1vdmVcbiA1OTE6XHQgKi9cbiA1OTI6XHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIDU5MzpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXG4gNTk0Olx0e1xuIDU5NTpcdFx0LyogZXhwbGljaXRseSByZW1vdmUgdGhlIGFzc29jaWF0ZWQgVFQgbG9jYWwgZW50cnkgYmVjYXVzZSBpdCBpcyBtYXJrZWRcbiA1OTY6XHRcdCAqIHdpdGggdGhlIE5PUFVSR0UgZmxhZ1xuIDU5NzpcdFx0ICovXG4gNTk4Olx0XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLFxuIDU5OTpcdFx0XHRcdCAgICAgICB2bGFuLVx1MDAzZXZpZCwgXCYjMzQ7dmxhbiBpbnRlcmZhY2UgZGVzdHJveWVkXCYjMzQ7LCBmYWxzZSk7XG4gNjAwOlx0XG4gNjAxOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuIDYwMjpcdH1cbiA2MDM6XHRcbiA2MDQ6XHQvKipcbiA2MDU6XHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDYwNjpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjA3Olx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIERvdWJsZSBGcmVlIGluIFZMQU4gSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nIHNlZW1zIG9mZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBWTEFOIGRlc3RydWN0aW9uIGluIHRoZSBiYXRhZHYgbWVzaCBpbnRlcmZhY2UgY29kZS4gSSBzZWUgdGhhdCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gVGhhdCYjMzk7cyBub3JtYWwuIFRoZW4sIEkgbm90aWNlZCB0aGlzIHNlcXVlbmNlIGluIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2A6CgpgYGBjCgkvKiBkZXN0cm95IHRoZSAmIzM0O3VudGFnZ2VkJiMzNDsgVkxBTiAqLwoJdmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7CglpZiAodmxhbikgewoJCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKCQliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwoJfQpgYGAKClRoZSB0aGluZyB0aGF0IGJ1Z3MgbWUgaXMgdGhhdCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgaXMgZXhwbGljaXRseSBjYWxsZWQgKmFmdGVyKiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLCB3aGljaCwgYXMgbWVudGlvbmVkIHByZXZpb3VzbHksIGFsc28gY2FsbHMgaXQuIFRoaXMgZmVlbHMgcmVkdW5kYW50IGF0IGJlc3QsIGJ1dCBjb3VsZCBiZSBwcm9ibGVtYXRpYywgZXNwZWNpYWxseSB3aXRoIHRoZSBhZGRlZCBjb21wbGV4aXR5IG9mIGEgVkxBTiBpbXBsZW1lbnRhdGlvbi4gV2h5IGlzIGl0IGJlaW5nIGNhbGxlZCB0d2ljZT8KCkl0IG1ha2VzIG1lIHdvbmRlciBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHdhcyB0aGUgY29kZSB0aGF0IGNoYW5nZWQsIG9yIGlmIGEgY2hhbmdlIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyB0aGUgcmVhbCBzb3VyY2Ugb2YgYSBwb3RlbnRpYWwgZG91YmxlIGZyZWUuIEl0IGxvb2tzIGxpa2UgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRpZCBub3QgY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgd2hlbiBpdCBzaG91bGQgaGF2ZS4KClNvLCBJJiMzOTttIGdvaW5nIHRvIHJldmlzaXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFuZCBtYWtlIHN1cmUgaXQgaGFuZGxlcyB0aGluZ3MgY29ycmVjdGx5LCBjb25zaWRlcmluZyB0aGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBzZXF1ZW5jZS4gVGhpcyBmZWVscyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkZWJ1Z2dpbmcgdGhpcyBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcwOlx0c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcbiA2NzE6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuIDY3MjpcdHtcbiA2NzM6XHRcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDY3NDpcdFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiA2NzU6XHRcbiA2NzY6XHRcdC8qIG9ubHkgODAyLjFRIHZsYW5zIGFyZSBzdXBwb3J0ZWQuIGJhdG1hbi1hZHYgZG9lcyBub3Qga25vdyBob3cgdG9cbiA2Nzc6XHRcdCAqIGhhbmRsZSBvdGhlciB0eXBlc1xuIDY3ODpcdFx0ICovXG4gNjc5Olx0XHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuIDY4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2ODE6XHRcbiA2ODI6XHRcdC8qIFwmIzM0O3ByaW9yaXR5IHRhZ1wmIzM0OyBmcmFtZXMgYXJlIGhhbmRsZWQgbGlrZSBcJiMzNDt1bnRhZ2dlZFwmIzM0OyBmcmFtZXNcbiA2ODM6XHRcdCAqIGFuZCBubyBtZXNoaWZfdmxhbiBuZWVkcyB0byBiZSBkZXN0cm95ZWRcbiA2ODQ6XHRcdCAqL1xuIDY4NTpcdFx0aWYgKHZpZCA9PSAwKVxuIDY4NjpcdFx0XHRyZXR1cm4gMDtcbiA2ODc6XHRcbiA2ODg6XHRcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcbiA2ODk6XHRcdGlmICghdmxhbilcbiA2OTA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gNjkxOlx0XG4gNjkyOlx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG4gNjkzOlx0XG4gNjk0Olx0XHRyZXR1cm4gMDtcbiA2OTU6XHR9XG4gNjk2Olx0XG4gNjk3Olx0LyogYmF0bWFuLWFkdiBuZXR3b3JrIGRldmljZXMgaGF2ZSBkZXZpY2VzIG5lc3RpbmcgYmVsb3cgaXQgYW5kIGFyZSBhIHNwZWNpYWxcbiA2OTg6XHQgKiBcJiMzNDtzdXBlciBjbGFzc1wmIzM0OyBvZiBub3JtYWwgbmV0d29yayBkZXZpY2VzOyBzcGxpdCB0aGVpciBsb2NrcyBvZmYgaW50byBhXG4gNjk5Olx0ICogc2VwYXJhdGUgY2xhc3Mgc2luY2UgdGhleSBhbHdheXMgbmVzdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NzQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkxBTiBSZWZlcmVuY2UgQ291bnQgQ29uZnVzaW9uKioKCk9rYXksIHNvIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGNhbGxlZCB3aGVuIGEgVkxBTiBpcyBraWxsZWQsIG1ha2VzIHNlbnNlLiBOb3csIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCByZW1vdmVzIHRoZSByZWZlcmVuY2UgdXNpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLCBhbmQgdGhlIFZMQU4gaGFzIG9ubHkgb25lIHJlZmVyZW5jZSBmcm9tIHRoZSBsaXN0LCB3ZSYjMzk7dmUgZ290IGEgcHJvYmxlbS4gSXQgd291bGQgTkVWRVIgYmUgZnJlZWQhIFRoZSBwYXRjaCByZW1vdmVzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgd2h5PwoKQWxyaWdodCwgbGV0JiMzOTtzIGNoZWNrIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgdG8gc2VlIGlmIHRoYXQgaGFuZGxlcyB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGxpc3QuIEFoLCB5ZXMsIGl0IGRvZXMgdXNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gQnV0IGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBsaXN0LCBhbmQgc2luY2UgYSByZWZlcmVuY2Ugd2FzIG9idGFpbmVkIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCB0aGUgcmVmY291bnQgc2hvdWxkIGJlIGJhY2sgdG8gMS4gVGhhdCYjMzk7cyBhc3N1bWluZyB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgcmVmZXJlbmNlIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLiBUaGVuIHRoZSByZWZjb3VudCBnb2VzIHRvIDAsIGFuZCB3ZSBnZXQgdGhlIGZyZWUgdGhhdCB3ZSB3YW50LgoKQnV0IHdhaXQgYSBtaW51dGXigKZ3aGF0IGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXMgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2UgKmJlc2lkZXMqIHRoaXMgZmxvdz8gVGhlbiB3ZSBjb3VsZCBzdGlsbCBoYXZlIGEgZGFuZ2xpbmcgcmVmZXJlbmNlISBPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIHRvIHNlZSB3aGVyZSBlbHNlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODI6XHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcbjEwODM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuMTA4NDpcdHtcbjEwODU6XHRcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcbjEwODY6XHRcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbjEwODc6XHRcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4xMDg4Olx0XG4xMDg5Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2bWVzaF9pZmFjZS1cdTAwM2VhZGpfbGlzdC5sb3dlcikpIHtcbjEwOTA6XHRcdFx0aGFyZF9pZmFjZSA9IG5ldGRldl9hZGphY2VudF9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLVx1MDAzZWFkal9saXN0Lmxvd2VyLm5leHQpO1xuMTA5MTpcdFx0XHRiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpO1xuMTA5MjpcdFx0fVxuMTA5MzpcdFxuMTA5NDpcdFx0LyogZGVzdHJveSB0aGUgXCYjMzQ7dW50YWdnZWRcJiMzNDsgVkxBTiAqL1xuMTA5NTpcdFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7XG4xMDk2Olx0XHRpZiAodmxhbikge1xuMTA5NzpcdFx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG4xMDk4Olx0XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4xMDk5Olx0XHR9XG4xMTAwOlx0XG4xMTAxOlx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShtZXNoX2lmYWNlLCBoZWFkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkxBTiBPYmplY3QgTGVhayBpbiBiYXRhZHYqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgaGVhZC4uLiBJIHNlZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGF0IG1ha2VzIHNlbnNlLiBCdXQgd2h5IGRpZCB0aGUgcGF0Y2ggcmVtb3ZlIHRoYXQgY2FsbCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLgoKTGV0IG1lIHNlZSBpZiBJIGNhbiB0cmFjZSB0aGUgY2FsbCBjaGFpbi4gSSYjMzk7bGwgY2hlY2sgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgY2FsbGVkIGJ5IGB2bGFuX3ZpZF9kZWxgLiBZZXAsIGl0IGxvb2tzIGxpa2UgYHZsYW5fdmlkX2RlbGAgY2FsbHMgYG5kb192bGFuX3J4X2tpbGxfdmlkYCwgYW5kLCBpbiB0dXJuLCB0aGF0IGNhbGxzIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4gT2theSwgc28gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIHRyaWdnZXJlZCB3aGVuIGEgVkxBTiBpcyBiZWluZyBkZWxldGVkLgoKTm93LCBpZiB0aGV5ICpyZW1vdmVkKiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIHRoYXQgbWVhbnMgdGhlIFZMQU4gb2JqZWN0IG1pZ2h0IG5vdCBiZSBmcmVlZC4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWchIExldCYjMzk7cyBlbGltaW5hdGUgb3RoZXIgcG9zc2liaWxpdGllcy4gRGlkIHRoZXkgY2hhbmdlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgdG8gKm5vdCogZHJvcCB0aGUgcmVmZXJlbmNlPyBOb3BlLCBqdXN0IGNoZWNrZWQsIGFuZCBpdCBkZWZpbml0ZWx5IHN0aWxsIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4KCk1heWJlIHRoZSBsb2dpYyBpcyB0aGUgb3Bwb3NpdGUuIFBlcmhhcHMsIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgYSByZWZlcmVuY2UsIGFuZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKnVzZWQqIHRvIGRyb3AgYW5vdGhlciwgYnV0IG5vIGxvbmdlciBkb2VzPyBIb2xkIG9uLCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2V0cyBhIHJlZmVyZW5jZSEgU28sIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGEgcmVmZXJlbmNlLCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICh3aGljaCBkcm9wcyAqb25lKiByZWZlcmVuY2UpLCBhbmQgdGhlbiByZXR1cm5zLgoKVGhpcyBtZWFucyB0aGUgcmVmY291bnQgaXMgMSBhZnRlciBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZmluaXNoZXMuIFRoZSBvYmplY3QgaXMgbGVha2VkISBPciwgd2FpdC4uLiBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBMZXQgbWUgcmUtZXhhbWluZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWdhaW4uCgpgYGBjCgl2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkIHwgQkFUQURWX1ZMQU5fSEFTX1RBRyk7CglpZiAoIXZsYW4pCgkJcmV0dXJuIC1FTk9FTlQ7CgoJYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pOwoKCXJldHVybiAwOwpgYGAKCk9rYXksIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgb25lIHJlZmVyZW5jZSwgYW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnZXRzIG9uZSwgdGhlbiB0aGUgbmV0IGNoYW5nZSBpcyB6ZXJvLiBUaGUgKnByb2JsZW0qIGlzIHRoYXQgdGhlIFZMQU4gd2FzIGFscmVhZHkgaW4gdGhlIGxpc3QsIHNvIGl0IGhhZCBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLiBBZnRlciBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIHRoZSByZWZlcmVuY2UgY291bnQgaXMgU1RJTEwgMS4gVGhhdCBpcyBhIGxlYWshCgpBaGEhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgKm5vdCogY2FsbGVkLiBTbywgdGhlIFZMQU4gaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkb2VzbiYjMzk7dCByZW1vdmUgaXQ7IGl0IGp1c3QgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgLiBUaGVyZWZvcmUsIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkb2VzbiYjMzk7dCBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCwgdGhlIHJlZmNvdW50IHJlbWFpbnMgYXQgMSwgYW5kIHRoZSBWTEFOIGlzICpub3QqIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCEKCk5vdywgd2h5IHdvdWxkIHRoZXkgd2FudCB0byBrZWVwIGl0IGluIHRoZSBsaXN0PyBUaGF0IGRvZXNuJiMzOTt0IG1ha2UgYW55IHNlbnNlLiBMZXQgbWUgY2hlY2sgaG93IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjA0Olx0LyoqXG4gNjA1Olx0ICogYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKCkgLSBuZG9fYWRkX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cbiA2MDY6XHQgKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxuIDYwNzpcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcbiA2MDg6XHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBuZXcgdmxhblxuIDYwOTpcdCAqXG4gNjEwOlx0ICogU2V0IHVwIGFsbCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBmb3IgaGFuZGxpbmcgdGhlIG5ldyB2bGFuIG9uIHRvcCBvZiB0aGVcbiA2MTE6XHQgKiBtZXNoIGludGVyZmFjZVxuIDYxMjpcdCAqXG4gNjEzOlx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS5cbiA2MTQ6XHQgKi9cbiA2MTU6XHRzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG4gNjE2Olx0XHRcdFx0XHQgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuIDYxNzpcdHtcbiA2MTg6XHRcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDYxOTpcdFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiA2MjA6XHRcbiA2MjE6XHRcdC8qIG9ubHkgODAyLjFRIHZsYW5zIGFyZSBzdXBwb3J0ZWQuXG4gNjIyOlx0XHQgKiBiYXRtYW4tYWR2IGRvZXMgbm90IGtub3cgaG93IHRvIGhhbmRsZSBvdGhlciB0eXBlc1xuIDYyMzpcdFx0ICovXG4gNjI0Olx0XHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuIDYyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2MjY6XHRcbiA2Mjc6XHRcdC8qIFZJRCAwIGlzIG9ubHkgdXNlZCB0byBpbmRpY2F0ZSBcJiMzNDtwcmlvcml0eSB0YWdcJiMzNDsgZnJhbWVzIHdoaWNoIG9ubHlcbiA2Mjg6XHRcdCAqIGNvbnRhaW4gcHJpb3JpdHkgaW5mb3JtYXRpb24gYW5kIG5vIFZJRC4gTm8gbWFuYWdlbWVudCBzdHJ1Y3R1cmVzXG4gNjI5Olx0XHQgKiBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhpcyBWSUQgYW5kIGl0IHNob3VsZCBiZSBoYW5kbGVkIGxpa2UgYW5cbiA2MzA6XHRcdCAqIHVudGFnZ2VkIGZyYW1lLlxuIDYzMTpcdFx0ICovXG4gNjMyOlx0XHRpZiAodmlkID09IDApXG4gNjMzOlx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc0NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIHJlc3Qgb2YgdGhpcyBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyLiBNeSBleHBlcnQga25vd2xlZGdlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBjcml0aWNhbCBpbiBicmlkZ2luZyBWTEFOcyB3aXRoIHRoZSBCQVRNQU4tYWR2IHByb3RvY29sLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXR3b3JrIHNlZ21lbnRhdGlvbiBhbmQgc2VjdXJpdHkgaW1tZWRpYXRlbHkuIFdoYXQmIzM5O3MgaXQgZG9pbmcgd2l0aCB0aGUgVkxBTiBJRD8gSG93IGlzIHRoaXMgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBtZXNoIGluZnJhc3RydWN0dXJlPyBUaW1lIHRvIHRyYWNlIGl0cyBleGVjdXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHN0ZXBzIGludm9sdmVkLiBJJiMzOTtsbCBmb2N1cyBvbiBkYXRhIHN0cnVjdHVyZXMsIGFueSBsb2NrcyBiZWluZyBoZWxkLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBsaWtlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM0Olx0XG4gNjM1Olx0XHR2aWQgfD0gQkFUQURWX1ZMQU5fSEFTX1RBRztcbiA2MzY6XHRcbiA2Mzc6XHRcdC8qIGlmIGEgbmV3IHZsYW4gaXMgZ2V0dGluZyBjcmVhdGVkIGFuZCBpdCBhbHJlYWR5IGV4aXN0cywgaXQgbWVhbnMgdGhhdFxuIDYzODpcdFx0ICogaXQgd2FzIG5vdCBkZWxldGVkIHlldC4gYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGVcbiA2Mzk6XHRcdCAqIHJlZmNvdW50IGluIG9yZGVyIHRvIHJldml2ZSB0aGUgb2JqZWN0LlxuIDY0MDpcdFx0ICpcbiA2NDE6XHRcdCAqIGlmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gY3JlYXRlIGl0LlxuIDY0MjpcdFx0ICovXG4gNjQzOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA2NDQ6XHRcdGlmICghdmxhbilcbiA2NDU6XHRcdFx0cmV0dXJuIGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oYmF0X3ByaXYsIHZpZCk7XG4gNjQ2Olx0XG4gNjQ3Olx0XHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcbiA2NDg6XHRcdCAqIGZsYWcuIFRoaXMgbXVzdCBiZSBhZGRlZCBhZ2FpbiwgZXZlbiBpZiB0aGUgdmxhbiBvYmplY3QgYWxyZWFkeVxuIDY0OTpcdFx0ICogZXhpc3RzLCBiZWNhdXNlIHRoZSBlbnRyeSB3YXMgZGVsZXRlZCBieSBraWxsX3ZpZCgpXG4gNjUwOlx0XHQgKi9cbiA2NTE6XHRcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbiA2NTI6XHRcdFx0XHQgICAgYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZS1cdTAwM2VkZXZfYWRkciwgdmlkLFxuIDY1MzpcdFx0XHRcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XG4gNjU0Olx0XG4gNjU1Olx0XHRyZXR1cm4gMDtcbiA2NTY6XHR9XG4gNjU3Olx0XG4gNjU4Olx0LyoqXG4gNjU5Olx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDY2MDpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjYxOlx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuIDY2MjpcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxuIDY2MzpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDQ5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWTEFOIEhhbmRsaW5nIGluIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGZ1bmN0aW9uLiBUaGUgY29tbWVudCYjMzk7cyBxdWl0ZSBjbGVhcjogaWYgd2UmIzM5O3JlIGFkZGluZyBhIFZMQU4gSUQgKGB2aWRgKSB0aGF0ICphbHJlYWR5KiBleGlzdHMsIGl0IG1lYW5zIHRoZSBvYmplY3Qgd2FzbiYjMzk7dCBmdWxseSBjbGVhbmVkIHVwIHlldCwgYW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCByZXZpdmVzIGl0LiBJZiBpdCBkb2VzbiYjMzk7dCBleGlzdCwgd2UgY3JlYXRlIGl0LiBTZWVtcyBzdHJhaWdodGZvcndhcmQuCgpCdXQgaGFuZyBvbuKApiBpZiBpdCAmIzM0O3Jldml2ZXMmIzM0OyB0aGUgb2JqZWN0LCBpdCYjMzk7cyAqZXhwZWN0aW5nKiBpdCB0byBzdGlsbCBiZSBoYW5naW5nIGFyb3VuZCBzb21ldGltZXMuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyBJIHNlZSB0aGF0IGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gSXQgZmV0Y2hlcyBhIHJlZmVyZW5jZSBpZiB0aGUgdmxhbiBleGlzdHMsIG9yIGNyZWF0ZXMgdGhlIHZsYW4uIEFuZCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHJlZmVyZW5jZSBjb3VudGluZyBoZXJlLgoKSSBzZWUgaXQgZ2V0cyBhIHJlZmVyZW5jZSB3aGVuIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgcmVnYXJkbGVzcyBvZiBjcmVhdGlvbi4gQW5kIHRoZW7igKYgaXQgcmV0dXJucyAwLiBJdCAqZG9lc24mIzM5O3QqIHJlbGVhc2UgdGhhdCByZWZlcmVuY2UgYW55d2hlcmUuIEhvbGQgb24gYSBzZWNvbmTigKYgRG9lcyB0aGF0IG1lYW4gdGhpcyBmdW5jdGlvbiBpcyBsZWFraW5nIGEgcmVmZXJlbmNlPyBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcmVkIGZsYWcuIFdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIGluIHRoZXNlIHNjZW5hcmlvcy4KCk9rYXksIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSBmb3IgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIHRvIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIHRoaW5ncyBjb3JyZWN0bHkgdGhlcmUuIFdlICptdXN0KiBlbnN1cmUgdGhhdCBvYmplY3QgbGlmZWN5Y2xlcyBhcmUgbWFuYWdlZCBpbXBlY2NhYmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdGludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcbiA1NDY6XHR7XG4gNTQ3Olx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuIDU0ODpcdFxuIDU0OTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTUwOlx0XG4gNTUxOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA1NTI6XHRcdGlmICh2bGFuKSB7XG4gNTUzOlx0XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNTU0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTU1Olx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDU1NjpcdFx0fVxuIDU1NzpcdFxuIDU1ODpcdFx0dmxhbiA9IGt6YWxsb2Nfb2JqKCp2bGFuLCBHRlBfQVRPTUlDKTtcbiA1NTk6XHRcdGlmICghdmxhbikge1xuIDU2MDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDU2MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA1NjI6XHRcdH1cbiA1NjM6XHRcbiA1NjQ6XHRcdHZsYW4tXHUwMDNlYmF0X3ByaXYgPSBiYXRfcHJpdjtcbiA1NjU6XHRcdHZsYW4tXHUwMDNldmlkID0gdmlkO1xuIDU2NjpcdFx0a3JlZl9pbml0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY291bnQpO1xuIDU2NzpcdFxuIDU2ODpcdFx0YXRvbWljX3NldChcdTAwMjZ2bGFuLVx1MDAzZWFwX2lzb2xhdGlvbiwgMCk7XG4gNTY5Olx0XG4gNTcwOlx0XHRrcmVmX2dldChcdTAwMjZ2bGFuLVx1MDAzZXJlZmNvdW50KTtcbiA1NzE6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QsIFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3QpO1xuIDU3MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcbiA1NzM6XHRcbiA1NzQ6XHRcdC8qIGFkZCBhIG5ldyBUVCBsb2NhbCBlbnRyeS4gVGhpcyBvbmUgd2lsbCBiZSBtYXJrZWQgd2l0aCB0aGUgTk9QVVJHRVxuIDU3NTpcdFx0ICogZmxhZ1xuIDU3NjpcdFx0ICovXG4gNTc3Olx0XHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UsXG4gNTc4Olx0XHRcdFx0ICAgIGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIsIHZpZCxcbiA1Nzk6XHRcdFx0XHQgICAgQkFUQURWX05VTExfSUZJTkRFWCwgQkFUQURWX05PX01BUkspO1xuIDU4MDpcdFxuIDU4MTpcdFx0LyogZG9uJiMzOTt0IHJldHVybiByZWZlcmVuY2UgdG8gbmV3IG1lc2hpZl92bGFuICovXG4gNTgyOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuIDU4MzpcdFxuIDU4NDpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWTEFOIFJlZmVyZW5jZSBDb3VudGluZyBpbiBiYXRhZHYqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgcmVsYXRlZCB0byBWTEFOcyB3aXRoaW4gdGhlIGBiYXRhZHZgIG1vZHVsZS4KCkZpcnN0LCBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgY3JlYXRlcyBhIFZMQU4gb2JqZWN0LCBpbml0aWFsaXplcyBpdHMgcmVmZXJlbmNlIGNvdW50IHRvIDEsIGluY3JlbWVudHMgaXQgdG8gMiBiZWZvcmUgYWRkaW5nIGl0IHRvIGEgbGlzdCwgdGhlbiBkZWNyZW1lbnRzIGl0IGFnYWluIHRvIDEgYmVmb3JlIHJldHVybmluZy4gU28gaXQgKmludGVudGlvbmFsbHkqIGxlYXZlcyB0aGUgbGlzdCBhcyB0aGUgc29sZSBob2xkZXIgb2YgYSByZWZlcmVuY2UgKHJlZmNvdW50IDEpLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYC4gSXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHRvIHJldHJpZXZlIGEgVkxBTi4gSWYgdGhlIFZMQU4gZG9lc24mIzM5O3QgZXhpc3QsIGl0IGNyZWF0ZXMgaXQgdXNpbmcgdGhlIHByb2Nlc3MgZGVzY3JpYmVkIGFib3ZlOiBpbml0aWFsaXplcyB0byAxLCBpbmNyZW1lbnRzIHRvIDIsIGFkZHMgaXQgdG8gdGhlIGxpc3QsIHRoZW4gZHJvcHMgdG8gMSBiZWZvcmUgcmV0dXJuaW5nLiBCdXQsIGNyaXRpY2FsbHksIGlmIHRoZSBWTEFOICpkb2VzKiBleGlzdCwgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHJldHVybnMgYSByZWZlcmVuY2UuIFRoZW4gaXQgYWRkcyBhIG5ldyBUVCBsb2NhbCBlbnRyeSBhbmQgdGhlbiByZXR1cm5zICp3aXRob3V0KiBkcm9wcGluZyB0aGF0IHJlZmVyZW5jZSEgVGhpcyBtZWFucyB0aGUgcmVmY291bnQgYmVjb21lcyAyLgoKTm93LCBpZiB0aGUgcmVmY291bnQgaXMgaW5kZWVkIDIgd2hlbiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCByZXR1cm5zLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKm11c3QqIGhhbmRsZSB0aGlzLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB3aGljaCBpbmNyZW1lbnRzIGl0ICh0byAzKSwgZGVzdHJveXMgdGhlIFZMQU4sIHdoaWNoIGRyb3BzIG9uZSAoYmFjayB0byAyKSBhbmQgKnRoZW4qIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCB3aGljaCBkcm9wcyBpdCB0byAxLiBXaGljaCBsZWF2ZXMgdGhlIG9iamVjdCBzdGlsbCBpbiB0aGUgbGlzdCwgYnV0IG5vdCByZWZlcmVuY2VkIGJ5IGFueXRoaW5nIGVsc2UhIFRoYXQgc2VlbXMuLi4gcHJvYmxlbWF0aWMuCgpCdXQgd2FpdC4gSWYgaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLCB0aGVuIGl0IGlzIGxlZnQgYXQgMS4gU28sIGlmIHdlIHJlLXJlYWQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLCB3ZSBzZWUgdGhhdCBpcyBjb3JyZWN0ISBDcmVhdGVzIHJlZmNvdW50IHRvIDEsIGluY3JlYXNlcyB0byAyIGZvciB0aGUgbGlzdCwgdGhlbiBkcm9wcyB0byAxIGJlZm9yZSByZXR1cm5pbmcuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLCBhbmQgcmUtZXhhbWluZSB0aGUgY3J1Y2lhbCBjYXNlIHdoZXJlIHRoZSBWTEFOICphbHJlYWR5IGV4aXN0cyouIEluIHRoaXMgY2FzZSwgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGdpdmVzIHVzIGEgcmVmY291bnQgb2YgMi4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgaXMgdGhlbiByZXR1cm5pbmcgd2l0aG91dCBkcm9wcGluZyB0aGF0IHJlZmVyZW5jZS4gVGhhdCYjMzk7cyB0aGUga2V5IQoKVGhlcmVmb3JlLCB0aGUgYnVnIGlzIHJpZ2h0IGhlcmU6ICoqYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKnNob3VsZCogZHJvcCB0aGUgcmVmZXJlbmNlIGl0IGdvdCBmcm9tIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB3aGVuIHRoZSBWTEFOIGFscmVhZHkgZXhpc3RzKiouIEl0JiMzOTtzIGxlYXZpbmcgYW4gZXh0cmEgcmVmZXJlbmNlIGhhbmdpbmcgYXJvdW5kLCB3aGljaCBzZWVtcyB0byBjcmVhdGUgaW5jb25zaXN0ZW50IHJlZmVyZW5jZSBjb3VudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01OTI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwNC0vKipcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjA1OiAqIGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCgpIC0gbmRvX2FkZF92aWQgQVBJIGltcGxlbWVudGF0aW9uXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwNi0gKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjE0LSAqL1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2MTU6c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MTYtXHRcdFx0XHQgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF0YWR2X25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04NzYtXHQubmRvX2dldF9zdGF0cyA9IGJhdGFkdl9pbnRlcmZhY2Vfc3RhdHMsXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjg3NzpcdC5uZG9fdmxhbl9yeF9hZGRfdmlkID0gYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkLFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04NzgtXHQubmRvX3ZsYW5fcnhfa2lsbF92aWQgPSBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzgzNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipSZXZpZXdpbmcgdGhlIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byByZXZpc2l0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIGEgcXVpY2sgcmVmcmVzaGVyIG9uIGl0cyBjb3JlIGxvZ2ljIGlzIGluIG9yZGVyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZMQU4gSUQgYW5kIHRoZSBvdmVyYWxsIEJBVE1BTi1BZHYgaW50ZXJmYWNlIG1hbmFnZW1lbnQuIFRoZXJlIGNvdWxkIGJlIHNvbWV0aGluZyBJIG1pc3NlZCBpbiB0aGUgbGFzdCBkZWVwIGRpdmUgdGhhdCB3YXJyYW50cyBhbm90aGVyIGxvb2ssIG9yIHBlcmhhcHMgYSBuZXcgaW5zaWdodCB3aWxsIHByZXNlbnQgaXRzZWxmIGJ5IGdpdmluZyBpdCBmcmVzaCBhdHRlbnRpb24uIEl0JiMzOTtzIG9mdGVuIHRoZSBzbWFsbCBkZXRhaWxzIHRoYXQgdHJpcCB1cyB1cC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZyZXNoIHBlcnNwZWN0aXZlIHJldmVhbHMgYW55dGhpbmcgbmV3LCBvciBhdCBsZWFzdCByZWluZm9yY2VzIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0XHR2aWQgfD0gQkFUQURWX1ZMQU5fSEFTX1RBRztcbiA2MzY6XHRcbiA2Mzc6XHRcdC8qIGlmIGEgbmV3IHZsYW4gaXMgZ2V0dGluZyBjcmVhdGVkIGFuZCBpdCBhbHJlYWR5IGV4aXN0cywgaXQgbWVhbnMgdGhhdFxuIDYzODpcdFx0ICogaXQgd2FzIG5vdCBkZWxldGVkIHlldC4gYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGVcbiA2Mzk6XHRcdCAqIHJlZmNvdW50IGluIG9yZGVyIHRvIHJldml2ZSB0aGUgb2JqZWN0LlxuIDY0MDpcdFx0ICpcbiA2NDE6XHRcdCAqIGlmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gY3JlYXRlIGl0LlxuIDY0MjpcdFx0ICovXG4gNjQzOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA2NDQ6XHRcdGlmICghdmxhbilcbiA2NDU6XHRcdFx0cmV0dXJuIGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oYmF0X3ByaXYsIHZpZCk7XG4gNjQ2Olx0XG4gNjQ3Olx0XHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcbiA2NDg6XHRcdCAqIGZsYWcuIFRoaXMgbXVzdCBiZSBhZGRlZCBhZ2FpbiwgZXZlbiBpZiB0aGUgdmxhbiBvYmplY3QgYWxyZWFkeVxuIDY0OTpcdFx0ICogZXhpc3RzLCBiZWNhdXNlIHRoZSBlbnRyeSB3YXMgZGVsZXRlZCBieSBraWxsX3ZpZCgpXG4gNjUwOlx0XHQgKi9cbiA2NTE6XHRcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbiA2NTI6XHRcdFx0XHQgICAgYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZS1cdTAwM2VkZXZfYWRkciwgdmlkLFxuIDY1MzpcdFx0XHRcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XG4gNjU0Olx0XG4gNjU1Olx0XHRyZXR1cm4gMDtcbiA2NTY6XHR9XG4gNjU3Olx0XG4gNjU4Olx0LyoqXG4gNjU5Olx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDY2MDpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjYxOlx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuIDY2MjpcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxuIDY2MzpcdCAqXG4gNjY0Olx0ICogRGVzdHJveSBhbGwgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgdXNlZCB0byBoYW5kbGUgdGhlIHZsYW4gaWRlbnRpZmllZCBieSB2aWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gUmVmY291bnRpbmcgaW4gQmF0YWR2KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYmF0YWR2IGNvZGUgYW5kIHRoaXMgY29tbWVudCBqdW1wcyBvdXQ6ICYjMzQ7YmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGUgcmVmY291bnQgaW4gb3JkZXIgdG8gcmV2aXZlIHRoZSBvYmplY3QuJiMzNDsgUmlnaHQsIHNvIGl0ICppbnRlbnRpb25hbGx5KiBpbmNyZW1lbnRzIHRoZSByZWZjb3VudC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKTm93LCBpZiBpdCBmaW5kcyBhbiBleGlzdGluZyBWTEFOLCB0aGUgcmVmY291bnQgZW5kcyB1cCBhdCAyLiBNYWtlcyBzZW5zZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgJiMzNDtyZXZpdmluZyYjMzQ7IHRoZSBWTEFOLiBCdXQgd2hhdCBpZiB0aGUgVkxBTiAqZG9lc24mIzM5O3QqIGV4aXN0PyBUaGUgY29tbWVudCBzYXlzIHRoYXQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIGlzIGNhbGxlZCBpbiB0aGF0IGNhc2UuIFRoYXQmIzM5O3MgdGhlIHJlYWwgcXVlc3Rpb246IGRvZXMgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gICphbHNvKiBsZWF2ZSB0aGUgcmVmY291bnQgYXQgMj8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBob3cgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIHRoZSByZWZjb3VudCBpdHNlbGYuIEl04oCZcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBleHBlY3RlZCBiZWhhdmlvciwgdGhlIGxpZmVjeWNsZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBzdWJ0bGUgaGVyZSwgc28gSSYjMzk7bSBnb2luZyBiYWNrIHRvIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY2Olx0XHRrcmVmX2luaXQoXHUwMDI2dmxhbi1cdTAwM2VyZWZjb3VudCk7XG4gNTY3Olx0XG4gNTY4Olx0XHRhdG9taWNfc2V0KFx1MDAyNnZsYW4tXHUwMDNlYXBfaXNvbGF0aW9uLCAwKTtcbiA1Njk6XHRcbiA1NzA6XHRcdGtyZWZfZ2V0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY291bnQpO1xuIDU3MTpcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnZsYW4tXHUwMDNlbGlzdCwgXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdCk7XG4gNTcyOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDU3MzpcdFxuIDU3NDpcdFx0LyogYWRkIGEgbmV3IFRUIGxvY2FsIGVudHJ5LiBUaGlzIG9uZSB3aWxsIGJlIG1hcmtlZCB3aXRoIHRoZSBOT1BVUkdFXG4gNTc1Olx0XHQgKiBmbGFnXG4gNTc2Olx0XHQgKi9cbiA1Nzc6XHRcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbiA1Nzg6XHRcdFx0XHQgICAgYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZS1cdTAwM2VkZXZfYWRkciwgdmlkLFxuIDU3OTpcdFx0XHRcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XG4gNTgwOlx0XG4gNTgxOlx0XHQvKiBkb24mIzM5O3QgcmV0dXJuIHJlZmVyZW5jZSB0byBuZXcgbWVzaGlmX3ZsYW4gKi9cbiA1ODI6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNTgzOlx0XG4gNTg0Olx0XHRyZXR1cm4gMDtcbiA1ODU6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjU5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZjb3VudGluZyBEZWVwIERpdmUgaW50byBWTEFOIEludGVyZmFjZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYmF0YWR2YCBWTEFOIGludGVyZmFjZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aHkgaXMgdGhlIHJlZmNvdW50aW5nIGhlcmUgc28gaW5jb25zaXN0ZW50PyBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgbGVhdmVzIGEgcmVmY291bnQgb2YgMSwgc2VlbWluZ2x5IGZvciB0aGUgbGlzdCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGxlYXZlcyBpdCBhdCAyIGlmIHRoZSBWTEFOIGFscmVhZHkgZXhpc3RzISBUaGlzIGZlZWxzIG9mZi4KCkxldCYjMzk7cyBicmVhayBkb3duIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCB3aGljaCB3aWxsIHJlYWxseSBiZSB3aGVyZSB0aGUgY29tcGxleGl0eSBsaWVzLiAgSWYgYGFkZF92aWRgIGxlYXZlcyB0aGUgcmVmY291bnQgYXQgMiBhbmQgc29tZW9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4sIHRoZW4gYGtpbGxfdmlkYCBtdXN0IGRyb3AgdHdvIHJlZmVyZW5jZXMsIGJ1dCBob3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgdGhlIGxvZ2ljYWwgZGVzdHJ1Y3Rpb24/ICBBbmQgd2hhdCBoYXBwZW5zIHdoZW4gYSBuZXcgVkxBTiBpcyBjcmVhdGVkPwoKTXkgaW5pdGlhbCB3YWxrdGhyb3VnaCBzdWdnZXN0cyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKmRvZXMqIHNlZW0gdG8gaGFuZGxlIHRoaXMgY29ycmVjdGx5LCBhdCBmaXJzdCBibHVzaC4gIEl0IGdldHMgYSByZWZlcmVuY2UgKHJlZmNvdW50IDIgb3IgMyksIGRlc3Ryb3lzIHRoZSBWTEFOLCBkcm9wcGluZyBvbmUgcmVmZXJlbmNlLCBhbmQgKnRoZW4qIHB1dHMgYSByZWZlcmVuY2UgZG93biwgZHJvcHBpbmcgaXQgdG8gemVyby4gSWYgdGhlIFZMQU4gd2FzICpuZXdseSogY3JlYXRlZCwgdGhpcyBsZWFkcyB0byBmcmVlaW5nIHRoZSBvYmplY3QsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LgoKQnV0IHdoYXQgaWYgdGhlIFZMQU4gd2FzICYjMzQ7cmV2aXZlZCYjMzQ7IGFuZCB3YXMgYWxyZWFkeSBpbiB0aGUgbGlzdD8gSXQgZ2V0cyBhIHJlZmVyZW5jZSAocmVmY291bnQgMyksIGRlc3Ryb3lzIGl0IChyZWZjb3VudCAyKSwgcHV0cyBpdCAocmVmY291bnQgMSksIGFuZCB0aGVuLi4uIGl0JiMzOTtzIG5vdCBmcmVlZCEgSXQgcmVtYWlucyBpbiB0aGUgbGlzdCEgQW5kIHRoaXMgaXMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIFRoYXQgbWVhbnMgdGhlcmUgbXVzdCBiZSBzb21lICpvdGhlciogcmVmZXJlbmNlIGhvbGRpbmcgaXQgdXAuCgpBaGEhIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICpzYXlzKiBpdCByZXZpdmVzIHRoZSBvYmplY3QuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBsaXN0IHJlZmVyZW5jZSBpcyB0aGUgKm9ubHkqIHJlZmVyZW5jZSBpdCBsZWZ0LiBUaGlzIG1lYW5zIHNvbWUgb3RoZXIgZW50aXR5IGlzIGhvbGRpbmcgYSByZWZlcmVuY2UuIE1heWJlIGEgVFQgZW50cnkgb3IgbmV0bGluayBkdW1wLCBvciBhIHNvZnRpZi4gIElmIHNvbWVvbmUgZWxzZSBpcyBob2xkaW5nIGEgcmVmZXJlbmNlLCB0aGUgcmVmY291bnQgaXMgMSAobGlzdCkgJiM0MzsgMSAob3RoZXIpID0gMiwgYW5kIHRoZW4gdGhlIHdob2xlIHN5c3RlbSB3b3Jrcy4KCk9rYXksIGxldCYjMzk7cyB0cmFjZSB0aGlzIGZ1cnRoZXIuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgYSByZWZlcmVuY2UsIHdoaWNoIGFwcGVhcnMgdG8gYmUgdGhlIGxpc3QgcmVmZXJlbmNlLCBsZWF2aW5nIHRoZSBWTEFOIGxvZ2ljYWxseSBkZXN0cm95ZWQsIGJ1dCBzdGlsbCBwcmVzZW50IGluIHRoZSBsaXN0LiAgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgc2hvdWxkICpjb3JyZWN0bHkqIGJyaW5nIGl0IGJhY2sgdG8gbGlmZSB3aXRoIGEgZnJlc2ggbmV3IHJlZmVyZW5jZSwgc28gdGhhdCYjMzk7cyBva2F5LiBCdXQgd2hhdCBoYXBwZW5zIHdpdGggYGtpbGxfdmlkYCBhbmQgdGhlIGxpc3Q/ICAKCldhaXQsIGlmIEkmIzM5O20ga2lsbGluZyBhIFZMQU4gdGhhdCAqd2FzKiBpbiB0aGUgbGlzdCwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICpkb2VzKiBkcm9wIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhhdCBtZWFucyB0aGUgVkxBTiBpcyBpbiB0aGUgbGlzdCwgYnV0IGVmZmVjdGl2ZWx5ICYjMzQ7ZGVzdHJveWVkJiMzNDsgdW50aWwgc29tZW9uZSBnZXRzIGl0IGZyb20gdGhlIGxpc3QuIElmIGBraWxsX3ZpZGAgZHJvcHMgdHdvIHJlZmVyZW5jZXMsIGl0IGRyb3BzIHRoZSBsaXN0IHJlZiBhbmQgdGhlIHJlZmVyZW5jZSBoZWxkIGJ5IGBhZGRfdmlkYCEgIAoKYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCAqZG9lcyogZHJvcCB0aGUgbGlzdCByZWZlcmVuY2UuIFRoYXQgbXVjaCBpcyBub3cgY2xlYXIuCgpPa2F5LCB0aGUgcmVmY291bnQgbG9naWMgc2VlbXMgdG8gd29yayBmb3IgYm90aCBhIG5ld2x5IGNyZWF0ZWQgVkxBTiAqYW5kKiBhIHJldml2ZWQgb25lLgoKU28gaXQgYm9pbHMgZG93biB0bzoKCjEuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIC0gQ3JlYXRlcyBvciByZXZpdmVzIGEgVkxBTiwgaW5jcmVhc2luZyByZWZjb3VudC4KMi4gSWYgc29tZWJvZHkgZWxzZSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTiwgaXRzIHJlZmNvdW50IGlzIGF0IGxlYXN0IDIuCjMuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGEgcmVmZXJlbmNlLCBkZXN0cm95cyB0aGUgVkxBTiwgYW5kIGRyb3BzIHRoZSBsaXN0IHJlZmVyZW5jZS4KNC4gSWYgdGhlcmUgYXJlIG90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIFZMQU4sIGl0JiMzOTtzIG5vdCBmcmVlZC4gSWYgdGhlcmUgYXJlIG5vIG90aGVyIHJlZmVyZW5jZXMsIGl0JiMzOTtzIGZyZWVkLgoKU28gaXQgbG9va3MgY29ycmVjdC4KCkhvd2V2ZXIsIGlmIGFsbCB0aGlzIGlzIGNvcnJlY3QsIHdoeSB3YXMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIHJlbW92ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGA/ICBMZXQgbWUgcmUtZXhhbWluZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIG9uZSBtb3JlIHRpbWUuLi4gIE9rYXksIG5vLCBpdCYjMzk7cyBjb3JyZWN0LiBJdCBjb3JyZWN0bHkgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLgoKTGV0JiMzOTtzIHRlc3QgdGhpcyBpbiBhIHZhcmlldHkgb2Ygc2l0dWF0aW9ucy4gSWYgYWxsIHRoZSB0ZXN0cyBwYXNzLCB0aGVuIHRoYXQgcGF0Y2ggc2hvdWxkIG5vdCBoYXZlIHJlbW92ZWQgdGhpcy4gTGV0IG1lIHZlcmlmeSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg3LS8qKlxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1ODg6ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTEtICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU5MjpzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTMtXHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTY3MD1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkxLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2OTI6XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5My1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTEwODI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk2LVx0aWYgKHZsYW4pIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5NzpcdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk4LVx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ0NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDk5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkxBTiBSZWZlcmVuY2UgQ291bnRpbmcgaW4gYmF0YWR2KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgZnVuY3Rpb24uIEl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gQnV0IHdhaXQsIEkmIzM5O20gYWxzbyBzZWVpbmcgdGhpcyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24sIHdoaWNoIGFsc28gY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGUgcGF0Y2ggcmVtb3ZlZCBpdCBmcm9tIG9ubHkgdGhlIGxhdHRlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqLiBTbywgSSBuZWVkIHRvIGxvb2sgY2xvc2VyLgoKQ2hlY2tpbmcgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFnYWluLCB5ZXMsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgYW5kICp0aGVuKiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIE9rYXksIGJ1dCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBjYWxsZWQgd2hlbiBhIFZMQU4gaXMgZGVsZXRlZC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZnVuY3Rpb24uIEl0IHNlZW1zIGl0IGZpcnN0IHRyaWVzIHRvIGdldCBhIFZMQU4gdXNpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBhbmQgaWYgaXQgZG9lc24mIzM5O3QgZXhpc3QsIGl0IGNyZWF0ZXMgb25lLgoKQ3J1Y2lhbGx5LCBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBkb2VzICpub3QqIGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGFmdGVyIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgY2FsbCEgVGhpcyBtZWFucyB0aGUgcmVmZXJlbmNlIGNvdW50IGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGlzIGxlZnQgaGFuZ2luZywgc28gdG8gc3BlYWsuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4uLiBvciBhbGFybWluZy4KCklmIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICpuZXZlciogZHJvcHMgdGhlIHJlZmVyZW5jZSwgdGhlbiBldmVyeSB0aW1lIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGlzIGNhbGxlZCBvbiBhICYjMzQ7cmV2aXZlZCYjMzQ7IFZMQU4sIHRoZSByZWZjb3VudCBpcyBpbmNyZW1lbnRlZCBieSBvbmUhIFRoaXMgaXMgaW5jb25zaXN0ZW50ISBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBpcyBvbmx5IGNhbGxlZCBvbmNlIHBlciBWTEFOLCBzbyBpdCBzaG91bGQgYmUgZmluZSwgYnV0IHRoZSByZWZjb3VudCB3b3VsZCBiZSAyLgoKVGhpbmtpbmcgaXQgdGhyb3VnaC4uLiBJZiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBjcmVhdGVzIHRoZSBWTEFOLCB0aGUgcmVmY291bnQgaXMgMS4gSWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMsIGFuZCBpcyAmIzM0O3Jldml2ZWQmIzM0OywgdGhlIHJlZmNvdW50IGlzIDIhIFRoaXMgaXMgYSBiaWcgcHJvYmxlbS4KClRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGNhbGxlZCwgd2hpY2ggZHJvcHMgdHdvIHJlZmVyZW5jZXMhIElmIGl0IHdhcyBjcmVhdGVkIGZyb20gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAsIHRoZSByZWZjb3VudCBzdGFydHMgYXQgMSwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgYSByZWZlcmVuY2UgKG5vdyAyKSwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyBvbmUgKG5vdyAxKSwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGRyb3BzIHRoZSBmaW5hbCBvbmUgKG5vdyAwKS4gVGhpcyAqd29ya3MqIGZvciBhICpjcmVhdGVkKiBWTEFOLgoKQnV0IGlmIGl0IHdhcyByZXZpdmVkLCB0aGUgcmVmY291bnQgc3RhcnRzIGF0IDIuIFRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgYW5vdGhlciByZWZlcmVuY2UgKHJlZmNvdW50IDMpLiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSAocmVmY291bnQgMikuIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBkcm9wcyAqYW5vdGhlciogcmVmZXJlbmNlIChyZWZjb3VudCAxKS4gVGhlIFZMQU4gKmlzbiYjMzk7dCogZnJlZWQuIEl0IHJlbWFpbnMgaW4gdGhlIGxpc3QhCgpJZiBpdCYjMzk7cyBub3QgZnJlZWQsIGl0IGNhbiBiZSByZXZpdmVkIGFnYWluLCB0aGUgcmVmY291bnQgYmVjb21lcyAyLCB0aGVuIGtpbGxlZCBhZ2FpbiB3aXRoIHRoZSByZWZjb3VudCBiZWNvbWluZyAxISBJdCAqbmV2ZXIqIGdldHMgZnJlZWQhIFdhaXQhIFRoYXQmIzM5O3MgYSBtZW1vcnkgbGVhaywgYnV0IGl0IHNob3VsZG4mIzM5O3QgY2F1c2UgYSBjcmFzaC4gVW5sZXNzLi4uCgpCdXQgd2hhdCBpZiwgKndoYXQgaWYqIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIHdhcyBzdXBwb3NlZCB0byBkcm9wIHRoZSByZWZlcmVuY2U/IEkgbmVlZCB0byBjaGVjayBhbmQgdmVyaWZ5IGlmIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBmdW5jdGlvbiBkcm9wcyB0aGUgcmVmZXJlbmNlIGFzIHdlbGwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0XHR2aWQgfD0gQkFUQURWX1ZMQU5fSEFTX1RBRztcbiA2MzY6XHRcbiA2Mzc6XHRcdC8qIGlmIGEgbmV3IHZsYW4gaXMgZ2V0dGluZyBjcmVhdGVkIGFuZCBpdCBhbHJlYWR5IGV4aXN0cywgaXQgbWVhbnMgdGhhdFxuIDYzODpcdFx0ICogaXQgd2FzIG5vdCBkZWxldGVkIHlldC4gYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGVcbiA2Mzk6XHRcdCAqIHJlZmNvdW50IGluIG9yZGVyIHRvIHJldml2ZSB0aGUgb2JqZWN0LlxuIDY0MDpcdFx0ICpcbiA2NDE6XHRcdCAqIGlmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gY3JlYXRlIGl0LlxuIDY0MjpcdFx0ICovXG4gNjQzOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA2NDQ6XHRcdGlmICghdmxhbilcbiA2NDU6XHRcdFx0cmV0dXJuIGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oYmF0X3ByaXYsIHZpZCk7XG4gNjQ2Olx0XG4gNjQ3Olx0XHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcbiA2NDg6XHRcdCAqIGZsYWcuIFRoaXMgbXVzdCBiZSBhZGRlZCBhZ2FpbiwgZXZlbiBpZiB0aGUgdmxhbiBvYmplY3QgYWxyZWFkeVxuIDY0OTpcdFx0ICogZXhpc3RzLCBiZWNhdXNlIHRoZSBlbnRyeSB3YXMgZGVsZXRlZCBieSBraWxsX3ZpZCgpXG4gNjUwOlx0XHQgKi9cbiA2NTE6XHRcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbiA2NTI6XHRcdFx0XHQgICAgYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZS1cdTAwM2VkZXZfYWRkciwgdmlkLFxuIDY1MzpcdFx0XHRcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XG4gNjU0Olx0XG4gNjU1Olx0XHRyZXR1cm4gMDtcbiA2NTY6XHR9XG4gNjU3Olx0XG4gNjU4Olx0LyoqXG4gNjU5Olx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDY2MDpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjYxOlx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuIDY2MjpcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxuIDY2MzpcdCAqXG4gNjY0Olx0ICogRGVzdHJveSBhbGwgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgdXNlZCB0byBoYW5kbGUgdGhlIHZsYW4gaWRlbnRpZmllZCBieSB2aWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3NzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmNvdW50IERlZXAgRGl2ZSBpbiBiYXRhZHYgVkxBTiBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBib3RoZXJpbmcgbWUuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgVkxBTiByZWZlcmVuY2UgY291bnRpbmcgaW4gYGJhdGFkdmAgYW5kIEkmIzM5O3ZlIGhpdCBhIGNvbmNlcHR1YWwgc25hZy4gU3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgYW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCwgYW5kIHdoZXRoZXIgdGhleSBjb3JyZWN0bHkgaGFuZGxlIHRoZSByZWZlcmVuY2UgY291bnQuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKnNob3VsZCogYmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZS4gVHVybnMgb3V0LCBpdCBkb2VzbiYjMzk7dC4gSWYgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZG9lc24mIzM5O3QgZHJvcCB0aGUgcmVmZXJlbmNlLCB0aGF0IG1lYW5zIGEgVkxBTiBvYmplY3QgaXMgbGVha2VkIGluaXRpYWxseS4gVGhpcyBsZWFkcyBtZSB0byBiZWxpZXZlIHRoZSBwcm9ibGVtIGxpZXMgd2l0aCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuCgpJZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZHJvcHMgMiByZWZlcmVuY2VzLCBhbmQgaXQgd2FzIGNyZWF0ZWQsIHRoZW4gaXQmIzM5O3MgZnJlZWQgLSB0aGF0JiMzOTtzIHN0YW5kYXJkLiBIb3dldmVyLCBpZiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCByZXZpdmVzIGl0LCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHRoZW4gZHJvcHMgMiByZWZlcmVuY2VzIGFnYWluLCBpdCBjb3VsZCBiZSBhIG1lc3MuIElmIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGRvZXMgcmV2aXZlIGl0LCBpdCBtZWFucyBpdCAqd2FzbiYjMzk7dCogZnJlZWQuIFNvLCBzb21ldGhpbmcgZWxzZSBtdXN0IGhhdmUgYmVlbiBob2xkaW5nIGEgcmVmZXJlbmNlLCBzdWNoIGFzIGEgVFQgZW50cnkuIAoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbSBJIHNlZSBub3c6CmBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgcmVmZXJlbmNlIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBhbmQgaXQgYWxzbyBkcm9wcyB0aGUgJiMzNDtsaXN0JiMzNDsgcmVmZXJlbmNlLiBUaGUgdGhpbmcgaXMsIHdoZW4gaXQgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLCB0aGUgb2JqZWN0IGlzIFNUSUxMIG9uIHRoZSBsaXN0ISBIb3dldmVyLCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzbiYjMzk7dCBjYWxsZWQsIHNvIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSBoZXJlLiBUaGUgcmVmY291bnQgaXMgZWZmZWN0aXZlbHkgb25lIGxlc3MgdGhhbiBpdCBzaG91bGQgYmUuIEF0IHRoaXMgcG9pbnQgdGhlIFZMQU4gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3Qgd2hlbiByZWZjb3VudCBkcm9wcyB0byB6ZXJvLgoKSSYjMzk7bSBub3cgc3RhcnRpbmcgdG8gc2VlIHRoaXMgbWVhbnMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGNhbiBmaW5kIHRoZSBvYmplY3QsIGFuZCB0aGVyZWZvcmUgcmV2aXZlIGl0LiBTbyB0aGUgcHJvYmxlbSBpcyB0aGVuIGFib3V0IHRoZSByZWZjb3VudC4gSSYjMzk7bSBnb2luZyB0byB0cmFjZSB0aGUgcmVmY291bnQuCgoxLiAgKipDcmVhdGlvbjoqKiBXaGVuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGNyZWF0ZXMgdGhlIFZMQU4sIHRoZSByZWZjb3VudCBzdGFydHMgYXQgMSAodGhlIGxpc3QmIzM5O3MgcmVmZXJlbmNlKS4KMi4gICoqRXh0ZXJuYWwgUmVmZXJlbmNlOioqIElmIHNvbWV0aGluZyBlbHNlIGdldHMgYSByZWZlcmVuY2UgKGxpa2UgYSBUVCBlbnRyeSksIHRoZSByZWZjb3VudCBiZWNvbWVzIDIuCjMuICAqKktpbGxpbmcgKGFuZCBwb3RlbnRpYWxseSByZXZpdmluZyk6KiogYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgYW5vdGhlciByZWZlcmVuY2UgdG8gdGhlIHZsYW4gd2hpY2ggd2lsbCBiZSAzLCBkZXN0cm95cyB0aGUgdmxhbiwgYW5kIHRoZW4gZHJvcHMgMiByZWZlcmVuY2VzLCBzbyB0aGUgY291bnQgZ29lcyB0byAxLCBidXQgdGhlIHZsYW4gaXMgbm90IGZyZWVkIGJlY2F1c2UgdGhlIGxpc3QgaGFzIG9uZSByZWZlcmVuY2UuCjQuICAqKlJldml2YWw6KiogYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZ2V0cyBhbm90aGVyIHJlZmVyZW5jZSwgYW5kIHRoZSByZWZjb3VudCBnb2VzIHRvIDIuCjUuICAqKlNvbWVvbmUgZHJvcHMgdGhlIHJlZmVyZW5jZToqKiBOb3cgdGhlIHJlZmNvdW50IGdvZXMgdG8gMSBhZ2FpbiwgYnV0IHRoZSBvYmplY3QgaXMgc3RpbGwgb24gdGhlIGxpc3QuCjYuICAqKktpbGxpbmcgKGFnYWluKToqKiBUaGUgcHJvY2VzcyByZXBlYXRzLgoKQnV0IHRoZW4gSSByZWFsaXplZCwgd2FpdCwgaWYgdGhpcyB3b3Jrcywgd2h5IHdhcyB0aGUgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIHJlbW92ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGA/IFRoaXMgaXNuJiMzOTt0IG1hdGNoaW5nIHVwLi4uCgpHb2luZyBiYWNrIHRvIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLCBpdCBlaXRoZXIgY3JlYXRlcyBhIG5ldyBWTEFOLCBvciBpdCBnZXRzIHRoZSBleGlzdGluZyBvbmUuIElmIGl0IGdldHMgdGhlIGV4aXN0aW5nIG9uZSwgaXQgKmFkZHMqIGEgVFQgZW50cnksIHdoaWNoIEkgdGhpbmsgbWVhbnMgaXQgd2lsbCByZXZpdmUgdGhlIG9iamVjdC4gCgpUaGUgcHJvYmxlbSBpcywgaWYgdGhlIHJlZmNvdW50IGlzIHJldml2ZWQgYnV0IG5vIG9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UsIHRoZSByZWZjb3VudCBpcyBvbmUgYXQgdGhlIGJlZ2lubmluZywgZ2V0cyByZXZpdmVkIHNvIHRoZSByZWZjb3VudCBiZWNvbWVzIDIuIFRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHRha2VzIHR3bywgYnV0IGl0IG1lYW5zIHRoYXQgdGhlIHZsYW4gY291bnQgd2lsbCBnbyB0byB6ZXJvIGFuZCBpdCBpcyBmcmVlZC4gQnV0IHRoaXMgc2NlbmFyaW8gaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0IGNhbiBvbmx5IGJlIHJldml2ZWQgaWYgc29tZW9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UsIHNvIGlmIHNvbWVib2R5IGVsc2UgaXMgaG9sZGluZyBhIHJlZmVyZW5jZSwgdGhlIGNvdW50IHdpbGwgYmUgYXQgbGVhc3QgMSwgdGhlbiByZXZpdmVkIHRvIGJlIGF0IGxlYXN0IDIsIGFuZCB0aGVuIHRoZSByZWZjb3VudCBpcyBkcm9wcGVkIGJ5IDIgc28gdGhlIG5ldCBjaGFuZ2UgaXMgLTEuCgpJZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZHJvcHMgMiByZWZlcmVuY2VzLCBzbyB0aGUgb2JqZWN0IGNvdWxkIGJlIHJldml2ZWQgb3Iga2lsbGVkLCB0aGUgbmV0IGNoYW5nZSBpcyAtMS4gV2hhdCB3aWxsIGhhcHBlbiBpZiB0aGlzIGlzIGhhcHBlbmluZyBtYW55IHRpbWVzPyBUaGUgcmVmY291bnQgd2lsbCBkZWNyZWFzZSBieSBvbmUgYW5kLCBhcyBhIHJlc3VsdCwgZXZlbnR1YWxseSBiZSBmcmVlZCEKCk9rYXksIHNvIEkgd2lsbCBhbmFseXplIGFuZCByZXRyYWNlIG15IHN0ZXBzISBUaGUgVFQgZW50cnkgaG9sZHMgMSByZWZlcmVuY2UuIFRoZSBsaXN0IGhvbGRzIHplcm8gc2luY2UgaXQgd2FzIGRyb3BwZWQgdGhlIGZpcnN0IHRpbWUgYGtpbGxfdmlkYCB3YXMgY2FsbGVkLiBJZiB0aGUgbGlzdCBoYXMgemVybywgdGhlIHJlZmNvdW50IGlzIDEgZnJvbSB0aGUgVFQgZW50cnkuIElmIGBiYXRhZHZfaW50ZXJmYWNlXwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl90dF9sb2NhbF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMTI9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTMyLVx0XHRcdFx0ICAgICAgIFwmIzM0O21hYyBhZGRyZXNzIGNoYW5nZWRcJiMzNDssIGZhbHNlKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTMzOlx0XHRiYXRhZHZfdHRfbG9jYWxfYWRkKGRldiwgYWRkci1cdTAwM2VzYV9kYXRhLCB2bGFuLVx1MDAzZXZpZCxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTM0LVx0XHRcdFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTE2Nz1zdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMjM1LVx0ICAgICFiYXRhZHZfYmxhX2lzX2xvb3BkZXRlY3RfbWFjKGV0aGhkci1cdTAwM2VoX3NvdXJjZSkpIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MjM2Olx0XHRjbGllbnRfYWRkZWQgPSBiYXRhZHZfdHRfbG9jYWxfYWRkKG1lc2hfaWZhY2UsIGV0aGhkci1cdTAwM2VoX3NvdXJjZSxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMjM3LVx0XHRcdFx0XHRcdCAgIHZpZCwgc2tiLVx1MDAzZXNrYl9paWYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTc2LVx0ICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU3NzpcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTc4LVx0XHRcdCAgICBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLCB2aWQsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02MTU9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjUwLVx0ICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY1MTpcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjUyLVx0XHRcdCAgICBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLCB2aWQsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9NzExPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF9tbGFfdHRfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNzI0LVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6NzI1Olx0XHRpZiAoIWJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTcyNi1cdFx0XHRcdFx0IG1jYXN0X2VudHJ5LVx1MDAzZWFkZHIsIEJBVEFEVl9OT19GTEFHUyxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTU1MD1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfZ2xvYmFsX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU3Ni0vKipcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NTc3OiAqIGJhdGFkdl90dF9sb2NhbF9hZGQoKSAtIGFkZCBhIG5ldyBjbGllbnQgdG8gdGhlIGxvY2FsIHRhYmxlIG9yIHVwZGF0ZSBhblxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy01NzgtICogIGV4aXN0aW5nIGNsaWVudFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNTg4LSAqL1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo1ODk6Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNTkwLVx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2aWQsIGludCBpZmluZGV4LCB1MzIgbWFyaylcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oPTE4PWludCBiYXRhZHZfdHRfaW5pdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmg6MTk6Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgtMjAtXHRcdFx0IHVuc2lnbmVkIHNob3J0IHZpZCwgaW50IGlmaW5kZXgsIHUzMiBtYXJrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwMTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBzdWJqZWN0OgoKKipBbmFseXppbmcgYGJhdGFkdl90dF9sb2NhbF9hZGRgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSXMgdGhpcyByZWxhdGVkIHRvIHRoZSB0b3BvbG9neSB0YWJsZSwgb3IgdGhlIGZvcndhcmRpbmcgdGFibGU/IEJhc2VkIG9uIHRoZSBuYW1lLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHRoZSB0b3BvbG9neSB0YWJsZSDigJMgc3BlY2lmaWNhbGx5LCBhZGRpbmcgYSBsb2NhbCBlbnRyeS4gV2hhdCYjMzk7cyB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZT8gSXMgaXQgaGFuZGxpbmcgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IG5laWdoYm9yLCBvciBpcyBpdCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0LCBwZXJoYXBzIG1hbmFnaW5nIHNvbWUgc29ydCBvZiBsb2NhbCBmb3J3YXJkaW5nIG9wdGltaXphdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCQVRNQU4tYWR2IGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbGlrZSBgYmF0YWR2X3R0X2xvY2FsX2VudHJ5YCBhbmQgYW55IHJlbGF0ZWQgbG9ja3MgdGhhdCBjb21lIHRvIG1pbmQgdG8gbWFrZSBzdXJlIEkgZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVycy4gV2hhdCBhcmUgdGhlIGlucHV0cywgYW5kIHdoYXQgZG8gdGhleSByZXByZXNlbnQ/IEFuZCB0aGVuLCBjcml0aWNhbGx5LCB0aGUgcmV0dXJuIHZhbHVlLiBJcyBpdCBlcnJvciBoYW5kbGluZywgb3IgYSBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdG9yPyBBIGRlZXAgZGl2ZSBpbiBpdHMgdXNlIGluIHRoZSBjb2RlIHNob3VsZCBtYWtlIHRoYXQgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg5Olx0Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbiA1OTA6XHRcdFx0XHQgdW5zaWduZWQgc2hvcnQgdmlkLCBpbnQgaWZpbmRleCwgdTMyIG1hcmspXG4gNTkxOlx0e1xuIDU5MjpcdFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG1lc2hfaWZhY2UpO1xuIDU5MzpcdFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWw7XG4gNTk0Olx0XHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsID0gTlVMTDtcbiA1OTU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQobWVzaF9pZmFjZSk7XG4gNTk2Olx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuIDU5NzpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmluX2RldiA9IE5VTEw7XG4gNTk4Olx0XHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmluX2hhcmRpZiA9IE5VTEw7XG4gNTk5Olx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbiA2MDA6XHRcdHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpvcmlnX2VudHJ5O1xuIDYwMTpcdFx0aW50IGhhc2hfYWRkZWQsIHRhYmxlX3NpemUsIHBhY2tldF9zaXplX21heDtcbiA2MDI6XHRcdGJvb2wgcmV0ID0gZmFsc2U7XG4gNjAzOlx0XHRib29sIHJvYW1lZF9iYWNrID0gZmFsc2U7XG4gNjA0Olx0XHR1OCByZW1vdGVfZmxhZ3M7XG4gNjA1Olx0XHR1MzIgbWF0Y2hfbWFyaztcbiA2MDY6XHRcbiA2MDc6XHRcdGlmIChpZmluZGV4ICE9IEJBVEFEVl9OVUxMX0lGSU5ERVgpXG4gNjA4Olx0XHRcdGluX2RldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBpZmluZGV4KTtcbiA2MDk6XHRcbiA2MTA6XHRcdGlmIChpbl9kZXYpXG4gNjExOlx0XHRcdGluX2hhcmRpZiA9IGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihpbl9kZXYpO1xuIDYxMjpcdFxuIDYxMzpcdFx0dHRfbG9jYWwgPSBiYXRhZHZfdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xuIDYxNDpcdFxuIDYxNTpcdFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcbiA2MTY6XHRcdFx0dHRfZ2xvYmFsID0gYmF0YWR2X3R0X2dsb2JhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7XG4gNjE3Olx0XG4gNjE4Olx0XHRpZiAodHRfbG9jYWwpIHtcbiA2MTk6XHRcdFx0dHRfbG9jYWwtXHUwMDNlbGFzdF9zZWVuID0gamlmZmllcztcbiA2MjA6XHRcdFx0aWYgKHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB7XG4gNjIxOlx0XHRcdFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbiA2MjI6XHRcdFx0XHRcdCAgIFwmIzM0O1JlLWFkZGluZyBwZW5kaW5nIGNsaWVudCAlcE0gKHZpZDogJWQpXFxuXCYjMzQ7LFxuIDYyMzpcdFx0XHRcdFx0ICAgYWRkciwgYmF0YWR2X3ByaW50X3ZpZCh2aWQpKTtcbiA2MjQ6XHRcdFx0XHQvKiB3aGF0ZXZlciB0aGUgcmVhc29uIHdoeSB0aGUgUEVORElORyBmbGFnIHdhcyBzZXQsXG4gNjI1Olx0XHRcdFx0ICogdGhpcyBpcyBhIGNsaWVudCB3aGljaCB3YXMgZW5xdWV1ZWQgdG8gYmUgcmVtb3ZlZCBpblxuIDYyNjpcdFx0XHRcdCAqIHRoaXMgb3JpZ19pbnRlcnZhbC4gU2luY2UgaXQgcG9wcGVkIHVwIGFnYWluLCB0aGVcbiA2Mjc6XHRcdFx0XHQgKiBmbGFnIGNhbiBiZSByZXNldCBsaWtlIGl0IHdhcyBuZXZlciBlbnF1ZXVlZFxuIDYyODpcdFx0XHRcdCAqL1xuIDYyOTpcdFx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7XG4gNjMwOlx0XHRcdFx0Z290byBhZGRfZXZlbnQ7XG4gNjMxOlx0XHRcdH1cbiA2MzI6XHRcbiA2MzM6XHRcdFx0aWYgKHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSB7XG4gNjM0Olx0XHRcdFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbiA2MzU6XHRcdFx0XHRcdCAgIFwmIzM0O1JvYW1pbmcgY2xpZW50ICVwTSAodmlkOiAlZCkgY2FtZSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBsb2NhdGlvblxcblwmIzM0OyxcbiA2MzY6XHRcdFx0XHRcdCAgIGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSk7XG4gNjM3Olx0XHRcdFx0LyogdGhlIFJPQU0gZmxhZyBpcyBzZXQgYmVjYXVzZSB0aGlzIGNsaWVudCByb2FtZWQgYXdheVxuIDYzODpcdFx0XHRcdCAqIGFuZCB0aGUgbm9kZSBnb3QgYSByb2FtaW5nX2FkdmVydGlzZW1lbnQgbWVzc2FnZS4gTm93XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjk2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gYGJhdGFkdl90dF9sb2NhbF9hZGRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgYWRkaW5nIGxvY2FsIHR1bm5lbCB0YXJnZXRzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBudWFuY2VzIGlzIGVzc2VudGlhbC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IGl0IHByb2JhYmx5IGhhbmRsZXMgc3luY2hyb25pemF0aW9uLCBlcnJvciBjaGVja2luZywgYW5kIHBvdGVudGlhbGx5IGludGVyYWN0aW9uIHdpdGggdGhlIHJvdXRpbmcgdGFibGUgb3IgZm9yd2FyZGluZyBlbmdpbmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgbmV3IHRhcmdldCBnZXRzIGFjY2VwdGVkLiBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhcGF0aCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBhbm5vdW5jZXMgdGhpcyBuZXcgbG9jYWwgVFQgaW4gdGhlIG5ldHdvcmsuIFRoZXJlJiMzOTtzIGFsc28gdGhlIHF1ZXN0aW9uIG9mIGNhY2hpbmcgYW5kIG9wdGltaXphdGlvbi4gRG9lcyBpdCBpbXBsZW1lbnQgYW55IHN0cmF0ZWdpZXMgZm9yIHJlZHVjaW5nIG92ZXJoZWFkLCBvciBoYW5kbGUgY2FzZXMgd2hlcmUgYSB0YXJnZXQgYWxyZWFkeSBleGlzdHM/IExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM5Olx0XHRcdFx0ICogdGhhdCB0aGUgY2xpZW50IHBvcHBlZCB1cCBhZ2FpbiBhdCBpdHMgb3JpZ2luYWxcbiA2NDA6XHRcdFx0XHQgKiBsb2NhdGlvbiBzdWNoIGZsYWcgY2FuIGJlIHVuc2V0XG4gNjQxOlx0XHRcdFx0ICovXG4gNjQyOlx0XHRcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbiA2NDM6XHRcdFx0XHRyb2FtZWRfYmFjayA9IHRydWU7XG4gNjQ0Olx0XHRcdH1cbiA2NDU6XHRcdFx0Z290byBjaGVja19yb2FtaW5nO1xuIDY0NjpcdFx0fVxuIDY0NzpcdFxuIDY0ODpcdFx0LyogSWdub3JlIHRoZSBjbGllbnQgaWYgd2UgY2Fubm90IHNlbmQgaXQgaW4gYSBmdWxsIHRhYmxlIHJlc3BvbnNlLiAqL1xuIDY0OTpcdFx0dGFibGVfc2l6ZSA9IGJhdGFkdl90dF9sb2NhbF90YWJsZV90cmFuc21pdF9zaXplKGJhdF9wcml2KTtcbiA2NTA6XHRcdHRhYmxlX3NpemUgJiM0Mzs9IGJhdGFkdl90dF9sZW4oMSk7XG4gNjUxOlx0XHRwYWNrZXRfc2l6ZV9tYXggPSBhdG9taWNfcmVhZChcdTAwMjZiYXRfcHJpdi1cdTAwM2VwYWNrZXRfc2l6ZV9tYXgpO1xuIDY1MjpcdFx0aWYgKHRhYmxlX3NpemUgXHUwMDNlIHBhY2tldF9zaXplX21heCkge1xuIDY1MzpcdFx0XHRuZXRfcmF0ZWxpbWl0ZWRfZnVuY3Rpb24oYmF0YWR2X2luZm8sIG1lc2hfaWZhY2UsXG4gNjU0Olx0XHRcdFx0XHRcdCBcJiMzNDtMb2NhbCB0cmFuc2xhdGlvbiB0YWJsZSBzaXplICglaSkgZXhjZWVkcyBtYXhpbXVtIHBhY2tldCBzaXplICglaSk7IElnbm9yaW5nIG5ldyBsb2NhbCB0dCBlbnRyeTogJXBNXFxuXCYjMzQ7LFxuIDY1NTpcdFx0XHRcdFx0XHQgdGFibGVfc2l6ZSwgcGFja2V0X3NpemVfbWF4LCBhZGRyKTtcbiA2NTY6XHRcdFx0Z290byBvdXQ7XG4gNjU3Olx0XHR9XG4gNjU4Olx0XG4gNjU5Olx0XHR0dF9sb2NhbCA9IGttZW1fY2FjaGVfYWxsb2MoYmF0YWR2X3RsX2NhY2hlLCBHRlBfQVRPTUlDKTtcbiA2NjA6XHRcdGlmICghdHRfbG9jYWwpXG4gNjYxOlx0XHRcdGdvdG8gb3V0O1xuIDY2MjpcdFxuIDY2MzpcdFx0LyogaW5jcmVhc2UgdGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJlbGF0ZWQgdmxhbiAqL1xuIDY2NDpcdFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCk7XG4gNjY1Olx0XHRpZiAoIXZsYW4pIHtcbiA2NjY6XHRcdFx0bmV0X3JhdGVsaW1pdGVkX2Z1bmN0aW9uKGJhdGFkdl9pbmZvLCBtZXNoX2lmYWNlLFxuIDY2NzpcdFx0XHRcdFx0XHQgXCYjMzQ7YWRkaW5nIFRUIGxvY2FsIGVudHJ5ICVwTSB0byBub24tZXhpc3RlbnQgVkxBTiAlZFxcblwmIzM0OyxcbiA2Njg6XHRcdFx0XHRcdFx0IGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSk7XG4gNjY5Olx0XHRcdGttZW1fY2FjaGVfZnJlZShiYXRhZHZfdGxfY2FjaGUsIHR0X2xvY2FsKTtcbiA2NzA6XHRcdFx0dHRfbG9jYWwgPSBOVUxMO1xuIDY3MTpcdFx0XHRnb3RvIG91dDtcbiA2NzI6XHRcdH1cbiA2NzM6XHRcbiA2NzQ6XHRcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXG4gNjc1Olx0XHRcdCAgIFwmIzM0O0NyZWF0aW5nIG5ldyBsb2NhbCB0dCBlbnRyeTogJXBNICh2aWQ6ICVkLCB0dHZuOiAlZClcXG5cJiMzNDssXG4gNjc2Olx0XHRcdCAgIGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSxcbiA2Nzc6XHRcdFx0ICAgKHU4KWF0b21pY19yZWFkKFx1MDAyNmJhdF9wcml2LVx1MDAzZXR0LnZuKSk7XG4gNjc4Olx0XG4gNjc5Olx0XHRldGhlcl9hZGRyX2NvcHkodHRfbG9jYWwtXHUwMDNlY29tbW9uLmFkZHIsIGFkZHIpO1xuIDY4MDpcdFx0LyogVGhlIGxvY2FsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgTkVXIHRvIGF2b2lkIHRvIHNlbmQgaXQgaW5cbiA2ODE6XHRcdCAqIGEgZnVsbCB0YWJsZSByZXNwb25zZSBnb2luZyBvdXQgYmVmb3JlIHRoZSBuZXh0IHR0dm4gaW5jcmVtZW50XG4gNjgyOlx0XHQgKiAoY29uc2lzdGVuY3kgY2hlY2spXG4gNjgzOlx0XHQgKi9cbiA2ODQ6XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyA9IEJBVEFEVl9UVF9DTElFTlRfTkVXO1xuIDY4NTpcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLnZpZCA9IHZpZDtcbiA2ODY6XHRcdGlmIChiYXRhZHZfaXNfd2lmaV9oYXJkaWYoaW5faGFyZGlmKSlcbiA2ODc6XHRcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfV0lGSTtcbiA2ODg6XHRcdGtyZWZfaW5pdChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ1NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFZMQU4gQXNzb2NpYXRpb24gaW4gYmF0YWR2X3R0X2xvY2FsX2FkZCoqCgpPa2F5LCBzbyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgaXMgZG9pbmcgc29tZXRoaW5nIHdpdGggVkxBTnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGNhbGxpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHdpdGggdGhlIHJlbGV2YW50IGBiYXRfcHJpdmAgYW5kIGB2aWRgIGFyZ3VtZW50cywgYW5kIHRoZW4gc3RvcmluZyB0aGUgcmVzdWx0LCBwcmVzdW1hYmx5IGEgVkxBTiBpZGVudGlmaWVyLCBpbiBgdHRfbG9jYWwtJmd0O3ZsYW5gLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dCDigJMgd2UmIzM5O3JlIGxpa2VseSBhc3NvY2lhdGluZyBhIGxvY2FsIGVudHJ5IHdpdGggYSBzcGVjaWZpYyBWTEFOLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBjaGVjayBwcmVjaXNlbHkgd2hlcmUgYW5kIGhvdyBgdHRfbG9jYWwtJmd0O3ZsYW5gIGdldHMgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBvZiB0aGlzIHZhcmlhYmxlIHRvIGJlIGNlcnRhaW4gb2YgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIEJhdGFkdiBmcmFtZXdvcmsuIFVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbiB3aWxsIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2ODk6XHRcdHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XG4gNjkwOlx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW47XG4gNjkxOlx0XHR0dF9sb2NhbC1cdTAwM2V2bGFuID0gdmxhbjtcbiA2OTI6XHRcbiA2OTM6XHRcdC8qIHRoZSBiYXRtYW4gaW50ZXJmYWNlIG1hYyBhbmQgbXVsdGljYXN0IGFkZHJlc3NlcyBzaG91bGQgbmV2ZXIgYmVcbiA2OTQ6XHRcdCAqIHB1cmdlZFxuIDY5NTpcdFx0ICovXG4gNjk2Olx0XHRpZiAoYmF0YWR2X2NvbXBhcmVfZXRoKGFkZHIsIG1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIpIHx8XG4gNjk3Olx0XHQgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4gNjk4Olx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0U7XG4gNjk5Olx0XG4gNzAwOlx0XHRrcmVmX2dldChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuIDcwMTpcdFx0aGFzaF9hZGRlZCA9IGJhdGFkdl9oYXNoX2FkZChiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLCBiYXRhZHZfY29tcGFyZV90dCxcbiA3MDI6XHRcdFx0XHRcdCAgICAgYmF0YWR2X2Nob29zZV90dCwgXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLFxuIDcwMzpcdFx0XHRcdFx0ICAgICBcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uaGFzaF9lbnRyeSk7XG4gNzA0Olx0XG4gNzA1Olx0XHRpZiAodW5saWtlbHkoaGFzaF9hZGRlZCAhPSAwKSkge1xuIDcwNjpcdFx0XHQvKiByZW1vdmUgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIGhhc2ggKi9cbiA3MDc6XHRcdFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XG4gNzA4Olx0XHRcdGdvdG8gb3V0O1xuIDcwOTpcdFx0fVxuIDcxMDpcdFxuIDcxMTpcdGFkZF9ldmVudDpcbiA3MTI6XHRcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XG4gNzEzOlx0XG4gNzE0Olx0Y2hlY2tfcm9hbWluZzpcbiA3MTU6XHRcdC8qIENoZWNrIHdoZXRoZXIgaXQgaXMgYSByb2FtaW5nLCBidXQgZG9uJiMzOTt0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nXG4gNzE2Olx0XHQgKiBwcm9jZXNzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZFxuIDcxNzpcdFx0ICovXG4gNzE4Olx0XHRpZiAodHRfZ2xvYmFsIFx1MDAyNlx1MDAyNiAhKHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkpIHtcbiA3MTk6XHRcdFx0LyogVGhlc2Ugbm9kZSBhcmUgcHJvYmFibHkgZ29pbmcgdG8gdXBkYXRlIHRoZWlyIHR0IHRhYmxlICovXG4gNzIwOlx0XHRcdGhlYWQgPSBcdTAwMjZ0dF9nbG9iYWwtXHUwMDNlb3JpZ19saXN0O1xuIDcyMTpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNzIyOlx0XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX2VudHJ5LCBoZWFkLCBsaXN0KSB7XG4gNzIzOlx0XHRcdFx0YmF0YWR2X3NlbmRfcm9hbV9hZHYoYmF0X3ByaXYsIHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uYWRkcixcbiA3MjQ6XHRcdFx0XHRcdFx0ICAgICB0dF9nbG9iYWwtXHUwMDNlY29tbW9uLnZpZCxcbiA3MjU6XHRcdFx0XHRcdFx0ICAgICBvcmlnX2VudHJ5LVx1MDAzZW9yaWdfbm9kZSk7XG4gNzI2Olx0XHRcdH1cbiA3Mjc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNzI4Olx0XHRcdGlmIChyb2FtZWRfYmFjaykge1xuIDcyOTpcdFx0XHRcdGJhdGFkdl90dF9nbG9iYWxfZnJlZShiYXRfcHJpdiwgdHRfZ2xvYmFsLFxuIDczMDpcdFx0XHRcdFx0XHQgICAgICBcJiMzNDtSb2FtaW5nIGNhbmNlbGVkXCYjMzQ7KTtcbiA3MzE6XHRcdFx0fSBlbHNlIHtcbiA3MzI6XHRcdFx0XHQvKiBUaGUgZ2xvYmFsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgUk9BTUlORyBhbmRcbiA3MzM6XHRcdFx0XHQgKiBoYXMgdG8gYmUga2VwdCBmb3IgY29uc2lzdGVuY3kgcHVycG9zZVxuIDczNDpcdFx0XHRcdCAqL1xuIDczNTpcdFx0XHRcdHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIDczNjpcdFx0XHRcdHR0X2dsb2JhbC1cdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcbiA3Mzc6XHRcdFx0fVxuIDczODpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gUmVmZXJlbmNlIENvdW50aW5nIGluIEJhdG1hbi1hZHYqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJhdG1hbi1hZHYgVkxBTiBtYW5hZ2VtZW50IGNvZGUuIEluaXRpYWxseSwgSSBzZWUgdGhhdCB3aGVuIGEgVFQgZW50cnkgaXMgY3JlYXRlZCwgaXQgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4gb2JqZWN0LiBUaGVuLCB3aGVuIHRoZSBUVCBlbnRyeSBpcyBmcmVlZCwgaXQgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZS4gVGhpcyBtYWtlcyBzZW5zZSBzbyBmYXIuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCByZXRyaWV2ZXMgYSBWTEFOIHVzaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YC4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJiMzOTt0KiByZWxlYXNlIHRoaXMgcmVmZXJlbmNlISBUaGVuLCBpdCBhZGRzIGEgVFQgbG9jYWwgZW50cnksIHdoaWNoIGFsc28gY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLiBUaGlzIG1lYW5zIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGxlYWtzIGEgcmVmZXJlbmNlLgoKVGhpcyBsZWFrIGlzIGltcG9ydGFudCEgSWYgdGhlIFZMQU4gd2FzIGNyZWF0ZWQsIHRoZSByZWZjb3VudCBpcyBsaWtlbHkgMSAobGlzdCkgJiM0MzsgMSAoVFQgZW50cnkpLiBUaGUgY2FsbCB0byBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBtZWFucyB0aGUgcmVmY291bnQgaXMgbm93IDM6IG9uZSBmcm9tIHRoZSBsaXN0LCBvbmUgZnJvbSB0aGUgbGVha2VkIHJlZmVyZW5jZSwgYW5kIG9uZSBmcm9tIHRoZSBUVCBlbnRyeS4gSWYgdGhlIFZMQU4gd2FzIHJldml2ZWQsIHRoZSByZWZjb3VudCBpcyBldmVuIGhpZ2hlciwgYWxzbyAzLgoKSSYjMzk7bSBzdGFydGluZyB0byBncmFzcCBob3cgdGhpcyBpcyBzdXBwb3NlZCB0byB3b3JrLiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgdGhlbiBhbHNvIGdldHMgYSByZWZlcmVuY2UuIFRoZSBkZXN0cnVjdGlvbiBwcm9jZXNzIHRoZW4gZ2V0cyBtZXNzeSwgYnV0IHVsdGltYXRlbHkgbGVhZHMgdG8gYSByZWZjb3VudCBvZiAxIGZvciBhICpjcmVhdGVkKiBWTEFOLCBhbmQgMCBmb3IgYSAqcmV2aXZlZCogVkxBTi4gU28sIGlmIGEgVkxBTiB3YXMgY3JlYXRlZCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LCBhbmQgaXQmIzM5O3MgZnJlZWQhCgpIb3dldmVyLCBpZiBhIFZMQU4gd2FzIHJldml2ZWQsIHRoZXJlJiMzOTtzIGEgcHJvYmxlbTogdGhlIHJlZmNvdW50IGluY3JlYXNlcyBieSAyIHdoZW4gcmV2aXZlZCwgYW5kIGRlY3JlYXNlcyBieSAyIHdoZW4gJiMzNDtraWxsZWQmIzM0Oy4gVGhlIG5ldCBjaGFuZ2UgaXMgemVybywgc28gaXQgcmV0dXJucyB0byBpdHMgcHJldmlvdXMgcmVmY291bnQuCgpUaGUgY3JpdGljYWwgaW5zaWdodCBoZXJlIGlzIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgSU5URU5USU9OQUxMWSBsZWFrcyBhIHJlZmVyZW5jZSEgSXQgZG9lcyB0aGlzIGJ5IGNhbGxpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGFuZCBmYWlsaW5nIHRvIHJlbGVhc2UgaXQuIFRoaXMgbGVha2VkIHJlZmVyZW5jZSBhY3RzIGFzIHRoZSAqbmV3KiBsaXN0IHJlZmVyZW5jZS4gVGhpcyBpcyB3aGF0IGVuYWJsZXMgdGhlIFZMQU4gdG8gYmUgJiMzNDtyZXZpdmVkJiMzNDsgYW5kIGVuc3VyZXMgaXQgc3RheXMgaW4gdGhlIGxpc3QsIGV2ZW4gYWZ0ZXIgaXQmIzM5O3MgbG9naWNhbGx5IGRlc3Ryb3llZC4KClNvLCBJJiMzOTt2ZSBtYXBwZWQgb3V0IHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGJvdGggdGhlIG5ldyBhbmQgcmV2aXZlZCBjYXNlczogdGhlIHByb2Nlc3MgaXMgd2VsbC1iYWxhbmNlZC4gU29tZW9uZSBlbHNlIG1heSBoYXZlIGEgcmVmZXJlbmNlLCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBjYWxsZWQsIGFuZCBhdCB0aGUgZW5kIG9mIHRoaXMgcHJvY2VzcywgdGhlIFZMQU4gc3RpbGwgbGl2ZXMgaW4gdGhlIGxpc3QuCgpOb3csIHdoeSB3YXMgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbCByZW1vdmVkIGZyb20gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGluIHRoZSBwYXRjaD8gSWYgdGhhdCBsaW5lIGlzIHJlbW92ZWQsIGl0ICpsZWFrcyogYSByZWZlcmVuY2UuIFRoYXQgbWVhbnMgdGhlIHJlZmNvdW50IHdpbGwgbmV2ZXIgcmVhY2ggemVyby4gVGhpcyBjYW4mIzM5O3QgYmUgY29ycmVjdC4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBwYXRjaCBoYXMgYSBodWdlIGltcGxpY2F0aW9uLiBUaGlzIGltcGxpZXMgdGhlcmUgaXMgYSBidWcsIHRoZSBwYXRjaCB3aWxsIGJyZWFrIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU0NT1pbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODctLyoqXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU4ODogKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4OS0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5MS0gKi9cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTkyOnN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5My1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NjcwPXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTEtXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY5MjpcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkzLVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTA4Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTYtXHRpZiAodmxhbikge1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk3Olx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTgtXHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTA2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmVmZXJlbmNlIENvdW50IElzc3VlcyBpbiBCYXRhZHYmIzM5O3MgVkxBTiBIYW5kbGluZyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJJiMzOTttIGxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBoZXJlLCBhbmQgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGJsb2NrOgoKYGBgYwoJLyogZGVzdHJveSB0aGUgJiMzNDt1bnRhZ2dlZCYjMzQ7IFZMQU4gKi8KCXZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpOwoJaWYgKHZsYW4pIHsKCQliYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7CgkJYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTsKCX0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBnZXQgYSBWTEFOIHJlZmVyZW5jZSwgZGVzdHJveSBpdCwgYW5kIHRoZW4gZHJvcCB0aGUgcmVmZXJlbmNlLiBUaGF0IGFwcGVhcnMgYmFsYW5jZWQsIHdoaWNoIGlzIGdvb2QuICBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gaXMsICp3aHkqIGFyZSB3ZSBwdXR0aW5nIHRoZSByZWZlcmVuY2U/IEl0IHNob3VsZCBoYXZlIGJlZW4gYSBnZXQgYW5kIGEgcHV0LgoKVGhlbiBpdCBoaXRzIG1lOiBzdXBwb3NlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBhbHNvIGRpZCBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gSWYgaXQgZGlkLCBpdCB3b3VsZCBiZSAqcmVtb3ZpbmcqIHRoZSBwdXQgdGhhdCBzaG91bGQgYmUgaGVyZSwgYW5kIHRoYXQgd291bGQgYmUgYSBsZWFrISBJIGhhZCB0byBjaGVjay4KV2FpdCwgbGV0IG1lIHJlYWQgdGhlIGNhbGwgdG8gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLgoKLi4uTm9wZSwgaXQmIzM5O3Mgbm90IHByZXNlbnQuIFNvICp0aGF0KiBpcyBub3QgdGhlIHByb2JsZW0uCgpBbHJpZ2h0LCB3aGF0IGVsc2UgY291bGQgYmUgZ29pbmcgb24/ICBEaWQgc29tZW9uZSBtb2RpZnkgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB0byBiZSBhIGRvdWJsZS1kZWNyZW1lbnQ/IE5vLCB0aGF0IGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UuICBJdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgdGhlIHNpbXBsZXN0IGZ1bmN0aW9ucyBpbiB0aGUgd2hvbGUgbW9kdWxlLgoKT2theSwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCAqYWN0dWFsbHkqIGRvZXMuICBJdCBuZWVkcyBhIGNhcmVmdWwgcmVyZWFkLiBJIGFtIGdvaW5nIHRvIHJlcmVhZCB0aGUgc291cmNlIG5vdyBhbmQgdmVyaWZ5IHRoZSBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4ODpcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcbiA1ODk6XHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiA1OTA6XHQgKiBAdmxhbjogdGhlIG9iamVjdCB0byByZW1vdmVcbiA1OTE6XHQgKi9cbiA1OTI6XHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIDU5MzpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXG4gNTk0Olx0e1xuIDU5NTpcdFx0LyogZXhwbGljaXRseSByZW1vdmUgdGhlIGFzc29jaWF0ZWQgVFQgbG9jYWwgZW50cnkgYmVjYXVzZSBpdCBpcyBtYXJrZWRcbiA1OTY6XHRcdCAqIHdpdGggdGhlIE5PUFVSR0UgZmxhZ1xuIDU5NzpcdFx0ICovXG4gNTk4Olx0XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLFxuIDU5OTpcdFx0XHRcdCAgICAgICB2bGFuLVx1MDAzZXZpZCwgXCYjMzQ7dmxhbiBpbnRlcmZhY2UgZGVzdHJveWVkXCYjMzQ7LCBmYWxzZSk7XG4gNjAwOlx0XG4gNjAxOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuIDYwMjpcdH1cbiA2MDM6XHRcbiA2MDQ6XHQvKipcbiA2MDU6XHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDYwNjpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjA3Olx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmZXJlbmNlIENvdW50aW5nIFNoZW5hbmlnYW5zIGluIFZMQU4gTWFuYWdlbWVudCoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyB0aGlzIFZMQU4gcmVmZXJlbmNlIGNvdW50aW5nIGluIHRoZSBiYXRhZHYgY29kZS4gIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYC4gIEl0IHJlbW92ZXMgYSBUVCBlbnRyeS4gRG9lcyBpdCBhbHNvIGRyb3AgYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZW50cnk/IFllcywgaXQgZG9lcy4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlIGVudHJ5IGlzIGJlaW5nIGZyZWVkLCBhbmQgd2l0aCBpdCwgdGhlIHJlZmVyZW5jZSBpdCBoZWxkIHRvIHRoZSBWTEFOLgoKTm93LCBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCAqYWRkcyogdGhlIFRUIGVudHJ5LCB3aGljaCBJIHNlZSBtZWFucyBpdCAqYWRkcyogYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4uIEdvdCBpdCwgc28gdGhlIFRUIGVudHJ5IGlzIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSB2bGFuIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIFRULgoKU28sIHdoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAsIGl0JiMzOTtzIGRyb3BwaW5nIHRoYXQgVFQgZW50cnkmIzM5O3MgcmVmZXJlbmNlLiAgQnV0IHdhaXQsIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKmFsc28qIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCEgU28sIHRoZXJlIGFyZSAqdHdvKiByZWZlcmVuY2VzIGJlaW5nIGRyb3BwZWQuIE9uZSBmcm9tIHRoZSBUVCwgYW5kIG9uZSBmcm9tIHRoZSBjYWxsIHRvIGB2bGFuX3B1dGAuCgpUaGUgcXVlc3Rpb24gYmVjb21lcywgKndoZXJlKiBkbyB0aG9zZSByZWZlcmVuY2VzIGNvbWUgZnJvbT8gSWYgd2UgY3JlYXRlIHRoZSBWTEFOIHZpYSBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAsIHRoZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudCBpcyBqdXN0IDEgKHRoZSBsaXN0IHJlZmVyZW5jZSkuIFRoZW4sIGFkZGluZyBhIFRUIGVudHJ5IChgYmF0YWR2X3R0X2xvY2FsX2FkZGApICppbmNyZW1lbnRzKiB0aGF0IHJlZmNvdW50LCBhbmQgYWRkaW5nIGEgdmxhbiBlbnRyeSAoYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgKSAqaW5jcmVtZW50cyogaXQgdG9vLiBTbywgYXQgb25lIHBvaW50LCB3aXRoIGFsbCByZWZlcmVuY2VzIHByZXNlbnQsIHRoZSByZWZjb3VudCBpcyAzLgoKQnV0IGhvdyBkbyB0aGVzZSByZWZlcmVuY2VzIGdldCByZWxlYXNlZCBjb3JyZWN0bHk/CgpgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGlzIGNhbGxlZCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCwgYW5kIGl0JiMzOTtzIGRyb3BwaW5nICp0d28qIHJlZmVyZW5jZXMsIFRUIGFuZCB0aGUgbGlzdC4gQW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBhbHNvIHB1dHRpbmcgb25lIHJlZmVyZW5jZS4KVGhpcyBzZWVtZWQgdmVyeSBmaXNoeSB0byBtZSwgYXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHdvdWxkIGJlIGxlYWtpbmcgYSByZWZlcmVuY2UuCgpMb29raW5nIGF0IGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgYWZ0ZXIgY3JlYXRpb24sIGFuZCBhZnRlciBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGlzIGNhbGxlZCEgQnV0IHRoYXQgaXMganVzdCB0byBpbml0aWFsaXplIHRoZSByZWZlcmVuY2UgY291bnQuClRoZSBjYWxsZXIgZG9lcyAqbm90KiBob2xkIGEgcmVmZXJlbmNlLiBUaGUgbGlzdCBkb2VzIQoKV2hlbiB0aGUgcmVmY291bnQgZXZlbnR1YWxseSByZWFjaGVzIDAgKGFsbCByZWZlcmVuY2VzIGRyb3BwZWQpLCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzIGNhbGxlZCwgd2hpY2ggaGFuZGxlcyByZW1vdmluZyB0aGUgVkxBTiBmcm9tIHRoZSBsaXN0LgoKU28sIHRoZSBsaXN0IGhhcyBhIHJlZmVyZW5jZSwgdGhlIFRUIGVudHJ5IGhvbGRzIGEgcmVmZXJlbmNlLCBhbmQgdGhlIGludGVyZmFjZSBjb2RlIGNhbiBob2xkIGEgcmVmZXJlbmNlLgoKVGhlIGxpc3QgcmVmZXJlbmNlIGlzIGltcGxpY2l0bHkgZHJvcHBlZCB3aGVuIHRoZSByZWZjb3VudCBoaXRzIHplcm8uIEJ1dCBpZiB0aGUgcmVmY291bnQgKm5ldmVyKiBoaXRzIHplcm8sIGl0ICpzdGF5cyogaW4gdGhlIGxpc3QsIGV2ZW4gaWYgdGhlIGxpc3QgaGFzIG5vdCBleHBsaWNpdGx5IHRha2VuIGEgcmVmZXJlbmNlIGFuZCBkcm9wcGVkIGl0LgoKU28sIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZXhwbGljaXRseSBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UuIFRoaXMgaXMgd2hhdCBzZWVtZWQgb2RkIQoKSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UsIHdoYXQgYWJvdXQgdGhlIGNhc2Ugd2hlbiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCAqcmUtYWRkcyogdGhlIFZMQU4/IGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnZXRzIGEgcmVmZXJlbmNlLiBUaGUgY291bnQgZ29lcyB1cCBieSBvbmUsIGFuZCBpdCBnZXRzIGEgbmV3IGxpc3QgcmVmZXJlbmNlISBJdCBpcyByZS1hZGRlZCwgYW5kIHRoZSBwcmV2aW91cyBsaXN0IGlzIHJlbW92ZWQhCgpJbiBzdW1tYXJ5LCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGluY3JlbWVudGVkIGJ5IDEgd2hlbiB0aGUgb2JqZWN0IGlzIGNyZWF0ZWQgKGkuZS4gdGhlIGxpc3QpLiBUaGVuIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCAocmVmY291bnQgJiM0MzsgMSksIGFuZCBhbHNvIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIChyZWZjb3VudCAmIzQzOyAxKS4gV2hlbiB0aGUgb2JqZWN0IGlzIGtpbGxlZCwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyBhIHJlZmVyZW5jZSBmcm9tIHRoZSBUVCwgYW5kIGl0IGRyb3BzIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhlbiwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFsc28gZHJvcHMgYSByZWZlcmVuY2UgZnJvbSB0aGUgYGdldGAuIEl0IGFwcGVhcnMgdGhhdCB0aGUgcmVmZXJlbmNlcyBhbGwgY2FuY2VsIG91dCwgYW5kIHRoZSBvYmplY3QgY2FuIGJlIHNhZmVseSBraWxsZWQgd2l0aG91dCBsZWFraW5nIGEgcmVmZXJlbmNlIQoKSWYgd2UgcmVtb3ZlIHRoZSBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgdGhlcmUgaXMgYSByZWZlcmVuY2UgbGVhayBiZWNhdXNlIHRoZSBmaW5hbCBwdXQgdGhhdCByZW1vdmVzIHRoZSByZWZlcmVuY2UgY291bnQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgbWlzc2luZyEgV2h5IHdvdWxkIHRoaXMgYmUgcmVtb3ZlZD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBwYXRjaCBhZ2FpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg3LS8qKlxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1ODg6ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTEtICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU5MjpzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTMtXHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTY3MD1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkxLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2OTI6XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5My1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTEwODI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk2LVx0aWYgKHZsYW4pIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5NzpcdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk4LVx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjQ0NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuIEZ1bmN0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIExvb2tpbmcgYXQgdGhpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uIGluIHRoZSBCYXRhZHYgY29kZeKApiBzcGVjaWZpY2FsbHksIHRoaXMgYmxvY2sgd2hlcmUgYSBWTEFOIGlzIGJlaW5nIGRlc3Ryb3llZC4gSSBzZWUgaXQgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGhhcyB0aGUgTk9QVVJHRSBmbGFnLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoZW4gaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgLgoKTm93LCB3YWl0IGEgbWludXRlLi4uIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCwgYXMgZmFyIGFzIEkgdW5kZXJzdGFuZCBpdCwgc2hvdWxkIGRyb3AgdGhlIFRUIHJlZmVyZW5jZSwgcmlnaHQ/IEFuZCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgc3VwcG9zZWQgdG8gZHJvcCB0aGUgbGlzdCByZWZlcmVuY2UuIFRoaXMgYWxsIHNlZW1zIGxvZ2ljYWwuCgpCdXQuLi53aGF0IGlmIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IGRyb3AgdGhlIFRUIHJlZmVyZW5jZSBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvPyBUaGUgY29tbWVudCBpbXBsaWVzIHRoYXQgYE5PUFVSR0VgIGZsYWcgY291bGQgYmUgYSBmYWN0b3IuIFRoYXQmIzM5O3MgYSBwb3NzaWJpbGl0eSwgYW5kIHNvbWV0aGluZyBJJiMzOTtkIHdhbnQgdG8gdmVyaWZ5IGltbWVkaWF0ZWx5LCBiZWNhdXNlIGl0IGltcGFjdHMgbWVtb3J5IG1hbmFnZW1lbnQuIEkgaGFkIGJldHRlciBjaGVjayB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCB0byBjb25maXJtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDU6XHR1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbjEyNDY6XHRcdFx0XHQgICB1bnNpZ25lZCBzaG9ydCB2aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsXG4xMjQ3Olx0XHRcdFx0ICAgYm9vbCByb2FtaW5nKVxuMTI0ODpcdHtcbjEyNDk6XHRcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X3JlbW92ZWRfZW50cnk7XG4xMjUwOlx0XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbjEyNTE6XHRcdHUxNiBmbGFncywgY3Vycl9mbGFncyA9IEJBVEFEVl9OT19GTEFHUztcbjEyNTI6XHRcdHN0cnVjdCBobGlzdF9ub2RlICp0dF9yZW1vdmVkX25vZGU7XG4xMjUzOlx0XG4xMjU0Olx0XHR0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7XG4xMjU1Olx0XHRpZiAoIXR0X2xvY2FsX2VudHJ5KVxuMTI1NjpcdFx0XHRnb3RvIG91dDtcbjEyNTc6XHRcbjEyNTg6XHRcdGN1cnJfZmxhZ3MgPSB0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3M7XG4xMjU5Olx0XG4xMjYwOlx0XHRmbGFncyA9IEJBVEFEVl9UVF9DTElFTlRfREVMO1xuMTI2MTpcdFx0LyogaWYgdGhpcyBnbG9iYWwgZW50cnkgYWRkaXRpb24gaXMgZHVlIHRvIGEgcm9hbWluZywgdGhlIG5vZGUgaGFzIHRvXG4xMjYyOlx0XHQgKiBtYXJrIHRoZSBsb2NhbCBlbnRyeSBhcyBcJiMzNDtyb2FtZWRcJiMzNDsgaW4gb3JkZXIgdG8gY29ycmVjdGx5IHJlcm91dGVcbjEyNjM6XHRcdCAqIHBhY2tldHMgbGF0ZXJcbjEyNjQ6XHRcdCAqL1xuMTI2NTpcdFx0aWYgKHJvYW1pbmcpIHtcbjEyNjY6XHRcdFx0ZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuMTI2NzpcdFx0XHQvKiBtYXJrIHRoZSBsb2NhbCBjbGllbnQgYXMgUk9BTWVkICovXG4xMjY4Olx0XHRcdHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4xMjY5Olx0XHR9XG4xMjcwOlx0XG4xMjcxOlx0XHRpZiAoISh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKSkge1xuMTI3MjpcdFx0XHRiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncyxcbjEyNzM6XHRcdFx0XHRcdFx0ICAgIG1lc3NhZ2UpO1xuMTI3NDpcdFx0XHRnb3RvIG91dDtcbjEyNzU6XHRcdH1cbjEyNzY6XHRcdC8qIGlmIHRoaXMgY2xpZW50IGhhcyBiZWVuIGFkZGVkIHJpZ2h0IG5vdywgaXQgaXMgcG9zc2libGUgdG9cbjEyNzc6XHRcdCAqIGltbWVkaWF0ZWx5IHB1cmdlIGl0XG4xMjc4Olx0XHQgKi9cbjEyNzk6XHRcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksIEJBVEFEVl9UVF9DTElFTlRfREVMKTtcbjEyODA6XHRcbjEyODE6XHRcdHR0X3JlbW92ZWRfbm9kZSA9IGJhdGFkdl9oYXNoX3JlbW92ZShiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLFxuMTI4MjpcdFx0XHRcdFx0XHQgICAgIGJhdGFkdl9jb21wYXJlX3R0LFxuMTI4MzpcdFx0XHRcdFx0XHQgICAgIGJhdGFkdl9jaG9vc2VfdHQsXG4xMjg0Olx0XHRcdFx0XHRcdCAgICAgXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2NjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUVCBFbnRyeSBMaWZlY3ljbGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgVFQgZW50cnkgd2hlbiBhIFZMQU4gaXMga2lsbGVkLiAgVGhlIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0IGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nYCBpZiB0aGUgZW50cnkgaXNuJiMzOTt0IG5ldy4gVGhpcyBtZWFucyBpdCAqZG9lc24mIzM5O3QqIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgZW50cnk7IGl0IGp1c3Qgc2V0cyB0aGUgUEVORElORyBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSByZWZlcmVuY2UgaXNuJiMzOTt0IGRyb3BwZWQgeWV0LgoKSWYgdGhlIHJlZmVyZW5jZSBpc24mIzM5O3QgZHJvcHBlZCwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIG9ubHkgZGVjcmVtZW50cyBvbmUgcmVmZXJlbmNlLCBzcGVjaWZpY2FsbHkgdGhlIGxpc3QgcmVmZXJlbmNlLCB3aGVuIGl0IGlzIGNhbGxlZC4gVGhlbiwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRyb3BzIHRoZSAmIzM0O2dldCYjMzQ7IHJlZmVyZW5jZS4gVGhpcyByZXN1bHRzIGluIGEgbmV0IGNoYW5nZSBvZiAtMSAobGlzdCByZWZlcmVuY2UgZHJvcHBlZCksIG1lYW5pbmcgdGhlIFRUIHJlZmVyZW5jZSBpcyBzdGlsbCBoZWxkLiBXaXRoIHRoZSBUVCByZWZlcmVuY2UgaGVsZCwgdGhlIHJlZmNvdW50IGJlY29tZXMgMS4gVGhlIFRUIGVudHJ5IHdpbGwgYmUgcHVyZ2VkIGxhdGVyIGJ5IHRoZSBUVCB3b3JrZXIsIHdoaWNoIHdpbGwgZHJvcCB0aGUgVFQgcmVmZXJlbmNlLiAgVGhhdCBtYWtlcyB0aGUgcmVmY291bnQgMCBhbmQgdGhlIGVudHJ5IGlzIGZyZWVkLiBUaGF0IHNlZW1zIHBlcmZlY3RseSBjb3JyZWN0LCBhZnRlciBhbGwuCgpIb3dldmVyLCB0aGUgcHV6emxpbmcgcGFydCBpcyB3aHkgdGhlIHBhdGNoIHJlbW92ZWQgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGZyb20gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGluIHRoZSBmaXJzdCBwbGFjZS4gTGV0JiMzOTtzIHJldmlzaXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgOgoKYGBgYwoJdmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCB8IEJBVEFEVl9WTEFOX0hBU19UQUcpOwoJaWYgKCF2bGFuKQoJCXJldHVybiAtRU5PRU5UOwoKCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKCgkvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovCgliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwpgYGAKClRoZSBwcm9ibGVtIGlzIHRoZSBhcHBhcmVudCByZWR1bmRhbmN5OiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gVGhpcyBtZWFucyBpdCAqYWxyZWFkeSogZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLiBUaGVuLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGFnYWluLiBJdCBkcm9wcyB0aGUgZ2V0IHJlZmVyZW5jZS4gVGhhdCYjMzk7cyBwZXJmZWN0bHkgY29ycmVjdCEgU28sIHdoeSB3YXMgaXQgcmVtb3ZlZD8gRGlkIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2hhbmdlIHRvIGRyb3AgdHdvIHJlZmVyZW5jZXM/IE5vcGUsIEkganVzdCByZWFkIGl0IGFuZCBJJiMzOTttIHN1cmUgaXQgZG9lc24mIzM5O3QuIFBlcmhhcHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGdldCBhIHJlZmVyZW5jZSBhZnRlciBhbGwuIEJldHRlciBjaGVjayB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0ICogYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIC0gZ2V0IHRoZSB2bGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2aWRcbiA1MTE6XHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiA1MTI6XHQgKiBAdmlkOiB0aGUgaWRlbnRpZmllciBvZiB0aGUgdmxhbiBvYmplY3QgdG8gcmV0cmlldmVcbiA1MTM6XHQgKlxuIDUxNDpcdCAqIFJldHVybjogdGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgdmxhbiBtYXRjaGluZyB0aGUgdmlkIHBhc3NlZCBhcyBhcmd1bWVudCBvclxuIDUxNTpcdCAqIE5VTEwgb3RoZXJ3aXNlLiBUaGUgcmVmY291bnRlciBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0IGlzIGluY3JlbWVudGVkIGJ5IDEuXG4gNTE2Olx0ICovXG4gNTE3Olx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqYmF0YWR2X21lc2hpZl92bGFuX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIDUxODpcdFx0XHRcdFx0XHRcdCAgdW5zaWduZWQgc2hvcnQgdmlkKVxuIDUxOTpcdHtcbiA1MjA6XHRcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW5fdG1wLCAqdmxhbiA9IE5VTEw7XG4gNTIxOlx0XG4gNTIyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNTIzOlx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uodmxhbl90bXAsIFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3QsIGxpc3QpIHtcbiA1MjQ6XHRcdFx0aWYgKHZsYW5fdG1wLVx1MDAzZXZpZCAhPSB2aWQpXG4gNTI1Olx0XHRcdFx0Y29udGludWU7XG4gNTI2Olx0XG4gNTI3Olx0XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2dmxhbl90bXAtXHUwMDNlcmVmY291bnQpKVxuIDUyODpcdFx0XHRcdGNvbnRpbnVlO1xuIDUyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBWTEFOIERlc3RydWN0aW9uKioKCk9rYXksIHNvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBkZWZpbml0ZWx5IGdyYWJzIGEgcmVmZXJlbmNlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSB0aW1pbmcgb2YgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYC4gU3BlY2lmaWNhbGx5LCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKmFuZCogdGhlbiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAsIHRoYXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgbG9naWMgYXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLiBXaHkgd2FzIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCAqcmVtb3ZlZCogZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgc3BlY2lmaWNhbGx5PyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uCgpMZXQgbWUgcmVyZWFkIHRoZSBkaWZmLiBBbHJpZ2h0LCBzbyB0aGUgY29kZSBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaW5kZWVkIG5vdyAqZG9lc24mIzM5O3QqIGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGFmdGVyIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIE15IGZpcnN0IGd1dCByZWFjdGlvbiBpczogcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlISBEaWQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmcmVlIHRoZSBWTEFOLCBhbmQgdGhlbiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgYSBkYW5nbGluZyBwb2ludGVyPwoKQnV0IHdhaXQuIE5vLiBUaGUgaW5pdGlhbCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgKmRvZXMqIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LiBTbywgYmVmb3JlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIHRoZSByZWZlcmVuY2UgY291bnQgaXMgYXQgKmxlYXN0KiAyIChvbmUgZnJvbSB0aGUgbGlzdCwgb25lIGZyb20gdGhlIGBnZXRgKS4gT2theSwgd2hhdCBpZiB0aGUgcmVmY291bnQgaXMgMSBiZWZvcmUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYD8gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGdvdCBhIHJlZmVyZW5jZSwgc28gdGhlIHJlZmNvdW50IGlzIGF0IGxlYXN0IDEuIElmIHRoZSBsaXN0IHJlZmVyZW5jZSAqd2FzKiBhbHJlYWR5IGRyb3BwZWQsIGBrcmVmX2dldF91bmxlc3NfemVyb2Agd291bGQgaGF2ZSBmYWlsZWQuIFNvLCB0aGUgcmVmY291bnQgaXMgYXQgbGVhc3QgMS4gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGluY3JlYXNlcyBpdCB0byAyLiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWYsIHNvIG5vdyBpdCYjMzk7cyAxLiBUaGVuIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBkcm9wcyB0aGUgb3RoZXIgcmVmLCBtYWtpbmcgdGhlIGNvdW50IDAuIFRoaXMgKnNob3VsZG4mIzM5O3QqIGJlIGEgdXNlLWFmdGVyLWZyZWUgdGhlbi4KCkhvd2V2ZXIuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGEgZGlmZmVyZW50IHNjZW5hcmlvLiBXaGF0IGlmIGEgKnNlcGFyYXRlKiBjb21taXQgbW9kaWZpZWQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB0byAqbm90KiByZWxlYXNlIHRoZSBsaXN0IHJlZmVyZW5jZT8gVGhhdCB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gSSYjMzk7ZCBiZXR0ZXIgY2hlY2sgdGhlIGdpdCBsb2cgb2YgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLiBQbGVhc2Ugc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSBpbnN0ZWFkIG9mIHJlcGVhdGluZyBxdWVyaWVzLjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O1lvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy4gUGxlYXNlIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUgaW5zdGVhZCBvZiByZXBlYXRpbmcgcXVlcmllcy4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTYxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkxBTiBEZXN0cnVjdGlvbiBpbiBiYXRtYW4tYWR2KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2hhbmdlLCBhbmQgc29tZXRoaW5nIGZlZWxzIG9mZi4gSSBpbml0aWFsbHkgZ3JlcHBlZCBmb3IgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBhbmQsIGFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgSSYjMzk7bSB0cnlpbmcgdG8gd29yayBvdXQgd2h5IGEgcGF0Y2ggd291bGQgcmVtb3ZlIHRoZSBmaW5hbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbC4gIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLCB3aGljaCAqaXRzZWxmKiBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgcmVtb3ZpbmcgdGhlIHNlY29uZCBjYWxsIHdvdWxkIGxlYWQgdG8gYSByZWZlcmVuY2UgbGVhaywgc2luY2UgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHByb3ZpZGVzIGEgcmVmZXJlbmNlIHdoaWNoIGlzbiYjMzk7dCBleHBsaWNpdGx5IGRyb3BwZWQgaW4gYWxsIGNhc2VzLgoKU28gSSYjMzk7dmUgY2hlY2tlZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIGFuZCB0aGUgY29kZSAqZG9lcyogc2VlbSB0byBiZSBsZWFraW5nIHRoZSBnZXQgcmVmZXJlbmNlLgpIb3dldmVyLCBJIGFsc28gd29uZGVyIGlmIHRoZXJlIGlzIGFuIHVubGlrZWx5IGRvdWJsZS1mcmVlIHNjZW5hcmlvLCBzbyBJJiMzOTttIHRyeWluZyB0byBkaXNwcm92ZSB0aGF0LgpCdXQgd2FpdCwgaWYgdGhlIGRlc3RydWN0aW9uIG1ldGhvZCBkcm9wcyBvbmx5IG9uZSByZWZlcmVuY2UsIGl0IHNob3VsZCBub3QgYmUgYSBwcm9ibGVtLgpJIHRob3VnaHQgYWJvdXQgd2hldGhlciBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgY291bGQgYmUgcmVsYXRlZCB0byBkcm9wcGluZyB0aGUgcmVmZXJlbmNlLCBidXQgSSByZWFsaXplIHRoZSBUVCByZWZlcmVuY2UgaXMgaW5kZXBlbmRlbnQgb2Ygd2hhdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaG9sZHMuClNvLCB5ZWFoLCB0aGF0IGdldCByZWZlcmVuY2Ugc2VlbXMgdG8gYmUgbGVha2VkIGlmIHdlIHJlbW92ZSB0aGUgYHB1dGAuCgpJcyBpdCBwb3NzaWJsZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXRzZWxmICpjb25zdW1lcyogdGhlIHJlZmVyZW5jZT8gSWYgc28sIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd291bGRuJiMzOTt0IG5lZWQgdG8gZHJvcCB0aGUgcmVmZXJlbmNlIGFzIHdlbGwsIG1ha2luZyB0aGUgcmVtb3ZlZCBjYWxsIGNvcnJlY3QuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYXMgbGlzdCBpbXBsaWNhdGlvbnMuCkkmIzM5O20gY2hlY2tpbmcgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgcmVmZXJlbmNlIGNvdW50LiAgVGhlIGxpc3QgaXRzZWxmIGhvbGRzIGEgcmVmZXJlbmNlLiAgSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb25zdW1lcyB0aGUgb25lIHBhc3NlZCBpbiwgdGhlbiB0aGUgbGlzdCByZWZlcmVuY2UgaXMgbmV2ZXIgZHJvcHBlZC4gU28gSSBjaGVja2VkIHRoZSBkZXN0cnVjdGlvbiBhZ2FpbjsgaXQgY2xlYXJseSAqZG9lc24mIzM5O3QqIHJlbW92ZSB0aGUgVkxBTiBmcm9tIHRoZSBsaXN0LiAgSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb25zdW1lcyBpdHMgYXJndW1lbnQsIHRoZW4gd2l0aG91dCB0aGUgYWRkaXRpb25hbCBgcHV0YCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIHdlIGhhdmUgYSBsaXN0IHJlZmVyZW5jZSB0aGF0JiMzOTtzIG5ldmVyIHJlbGVhc2VkLiAgVGhlIG9iamVjdCBpcyBuZXZlciBmcmVlZCwgYW5kIHRoYXQgbWVhbnMgYSBtZW1vcnkgbGVhay4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwLiBNYXliZSByZW1vdmluZyB0aGUgY2FsbCBwcmV2ZW50cyBhIGRvdWJsZS1mcmVlPyBQZXJoYXBzIGlmIHRoZSBWTEFOIGlzIHNvbWVob3cgZGVzdHJveWVkIHR3aWNlLCB0aGUgZXh0cmEgYHB1dGAgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNvdWxkIGNhdXNlIGEgcHJvYmxlbS4KClRoZSBjb2RlIHNlZW1zIHRvIGVuc3VyZSB0aGlzIGNhbiYjMzk7dCBoYXBwZW4uClRoZSBsaXN0IHJlZmVyZW5jZSBtaWdodCBiZSBkcm9wcGVkIGJ5IGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAuCgpJIGNoZWNrZWQgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGNhbGxlZCBmcm9tIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAsIGFuZCBpdCBpcy4gIEFuZCBJIHRyaWVkIHRvIGNyZWF0ZSBkb3VibGUtZnJlZSBzY25lYXJpb3MgYnV0IHRoZXkgc2hvdWxkbiYjMzk7dCBvY2N1ciBpbiBwcmFjdGljZS4KCkhvd2V2ZXIhIEkmIzM5O20gbm93IHJlYWxpemluZyB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgYWxzbyB1c2VzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIGFuZCBpdCAqYWxzbyogY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGFmdGVyIGl0LiBJZiB0aGVyZSB3YXMgYSBkb3VibGUtZnJlZSBpc3N1ZSwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIHdvdWxkIGFsc28gaGF2ZSBhIHByb2JsZW0uIEJ1dCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4KCkxldCYjMzk7cyBjaGVjayBhZ2FpbiEgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuICBUaGUgZmFjdCB0aGF0ICp0aGlzKiBmdW5jdGlvbiBkcm9wcyB0aGUgcmVmZXJlbmNlIG1pZ2h0IGJlIGtleS4KCk9rYXksIHNvIGdvaW5nIGJhY2sgdG8gZmlyc3QgcHJpbmNpcGxlczogSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb25zdW1lcyB0aGUgcmVmZXJlbmNlLCB0aGVuIHdlIG11c3Qgbm90IGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4gIElmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKmRvZXNuJiMzOTt0KiBjb25zdW1lIHRoZSByZWZlcmVuY2UsIHRoZW4gd2UgKmRvKiBuZWVkIHRoYXQgYHB1dGAgY2FsbC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgbXVzdCBoYW5kbGUgYSBsaXN0IHJlZmVyZW5jZS4KCklmIHRoZSBkZXN0cnVjdGlvbiBtZXRob2QgZHJvcHMgb25seSBvbmUgcmVmZXJlbmNlLCB0aGUgbGlzdCByZWZlcmVuY2Ugd2lsbCBzdGlsbCBiZSB0aGVyZS4KVGhlcmVmb3JlLCBpZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZG9lcyAqbm90KiBjYWxsIHB1dCwgdGhlIGxpc3QgcmVmZXJlbmNlIGlzIG5ldmVyIGRyb3BwZWQuClRoaXMgaXMgYSBtZW1vcnkgbGVhaywgYW5kIGl0IGRvZXMgbm90IHNlZW0gdG8gbWFrZSBzZW5zZS4KSG93ZXZlciwgaWYgaXQgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW5vdGhlciBwYXRoLCB0aGVuIGl0IGlzIGEgZG91YmxlIGZyZWUuCkxldCYjMzk7cyBnbyBiYWNrIGFuZCBleGFtaW5lCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NjY6XHRcdGtyZWZfaW5pdChcdTAwMjZ2bGFuLVx1MDAzZXJlZmNvdW50KTtcbiA1Njc6XHRcbiA1Njg6XHRcdGF0b21pY19zZXQoXHUwMDI2dmxhbi1cdTAwM2VhcF9pc29sYXRpb24sIDApO1xuIDU2OTpcdFxuIDU3MDpcdFx0a3JlZl9nZXQoXHUwMDI2dmxhbi1cdTAwM2VyZWZjb3VudCk7XG4gNTcxOlx0XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2dmxhbi1cdTAwM2VsaXN0LCBcdTAwMjZiYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0KTtcbiA1NzI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTczOlx0XG4gNTc0Olx0XHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcbiA1NzU6XHRcdCAqIGZsYWdcbiA1NzY6XHRcdCAqL1xuIDU3NzpcdFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLFxuIDU3ODpcdFx0XHRcdCAgICBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLCB2aWQsXG4gNTc5Olx0XHRcdFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcbiA1ODA6XHRcbiA1ODE6XHRcdC8qIGRvbiYjMzk7dCByZXR1cm4gcmVmZXJlbmNlIHRvIG5ldyBtZXNoaWZfdmxhbiAqL1xuIDU4MjpcdFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbiA1ODM6XHRcbiA1ODQ6XHRcdHJldHVybiAwO1xuIDU4NTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA2MDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgRnVuY3Rpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZCEgSSYjMzk7bSBzZWVpbmcgc29tZXRoaW5nIGhlcmUgd2l0aCBgYmF0YWR2X3R0X2xvY2FsX2FkZGAuIEl0IHNlZW1zIHRvIGJlIHRha2luZyBhIHJlZmVyZW5jZSwgcmlnaHQ/IFNvIGFmdGVyIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgdGhlIHJlZmVyZW5jZSBjb3VudCBzaG91bGQgYmUgMiwgb25lIGZvciB0aGUgbGlzdCBhbmQgb25lIGZvciB0aGUgVFQgZW50cnkgaXRzZWxmLgoKTm93LCBpZiB0aGUgcmVmZXJlbmNlIGNvdW50ICppcyogMiwgdGhlbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgZ2V0dGluZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSwgbWFraW5nIHRoZSBjb3VudCAzLiBUaGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGFjdHVhbGx5ICpkcm9wKiB0aGUgcmVmZXJlbmNlIG9mIHRoZSBUVCBlbnRyeT8KClllcyEgSXQgZG9lcy4gV2hlbiBpdCByZW1vdmVzIHRoZSBUVCBlbnRyeSwgaXQgZnJlZXMgaXQsIGFuZCB0aGUgYHZsYW5gIHBvaW50ZXIgaXMgcmVsZWFzZWQuIFNvLCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgZGVjcmVtZW50cyB0aGUgY291bnQgYnkgMSwgYnJpbmdpbmcgaXQgdG8gMi4gVGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgYW5vdGhlciBkZWNyZW1lbnQsIHdoaWNoIG1lYW5zIHRoZSByZWYgY291bnQgaXMgMS4gTmV4dCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGlzIGRyb3BzIHRoZSBmaW5hbCByZWZlcmVuY2UgYW5kIG1lYW5zIHRoYXQgdGhlIHZsYW4gb2JqZWN0IGlzIGZyZWVkIQoKVGhpcyBtZWFucyBpdCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgdGhhdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBJZiBpdCAqZG9lc24mIzM5O3QqLCB0aGUgcmVmZXJlbmNlIGNvdW50IHJlbWFpbnMgYXQgMSwgYW5kIHRoZSBvYmplY3QgaXMgbmV2ZXIgZnJlZWQhCgpCdXQgd2FpdCwgd2h5IHdhcyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgcmVtb3ZlZCBpbiB0aGUgcGF0Y2g/IExldCYjMzk7cyBjaGVjayB0aGUgcGF0Y2ggYWdhaW46CmBgYGRpZmYKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCkBAIC02OTEsOSAmIzQzOzY5MSw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sCiAKIAliYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7CiAKLQkvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovCi0JYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTsKLQogCXJldHVybiAwOwogfQpgYGAKCkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHJlbW92ZWQgaXQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUgc2NlbmFyaW8uIEhvdyBjb3VsZCB0aGF0IGhhcHBlbj8KCldoYXQgaWYgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIERPRVNOJiMzOTtUIGRyb3AgdGhlIFRUIGVudHJ5JiMzOTtzIHJlZmVyZW5jZT8gTG9va2luZyBhdCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAsIGlmIHRoZSBlbnRyeSBpc24mIzM5O3QgTkVXLCBpdCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nYC4gVGhpcyBtZWFucyBpdCBET0VTTiYjMzk7VCByZW1vdmUgdGhlIGVudHJ5LCBhbmQgY3J1Y2lhbGx5LCBET0VTTiYjMzk7VCBkcm9wIHRoZSByZWZlcmVuY2UhIEluIHRoYXQgc2NlbmFyaW86IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgMSByZWYgKHRoZSBsaXN0IHJlZmVyZW5jZSkgYW5kIHRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRyb3BzIDEgcmVmZXJlbmNlICh0aGUgZ2V0IHJlZmVyZW5jZSkuIFRoYXQgbGVhdmVzIHRoZSByZWYgY291bnQgYXQgMSAodGhlIFRUIGVudHJ5JiMzOTtzIHJlZikuIFRoZSBUVCB3b3JrZXIgbGF0ZXIgcHVyZ2VzIHRoZSBlbnRyeSwgKnRoZW4qIGRyb3BzIHRoYXQgcmVmZXJlbmNlLiBUaGlzIGlzIGFjdHVhbGx5IHNhZmUhIFNvIG5vIGRvdWJsZSBmcmVlLgoKT2theSwgd2FpdCBvbmUgc2Vjb25kLiBXaGF0IGlmIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBET0VTTiYjMzk7VCBnZXQgYSByZWZlcmVuY2U/IExldCYjMzk7cyByZWNoZWNrIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjM6XHRcdC8qIGluY3JlYXNlIHRoZSByZWZjb3VudGVyIG9mIHRoZSByZWxhdGVkIHZsYW4gKi9cbiA2NjQ6XHRcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQpO1xuIDY2NTpcdFx0aWYgKCF2bGFuKSB7XG4gNjY2Olx0XHRcdG5ldF9yYXRlbGltaXRlZF9mdW5jdGlvbihiYXRhZHZfaW5mbywgbWVzaF9pZmFjZSxcbiA2Njc6XHRcdFx0XHRcdFx0IFwmIzM0O2FkZGluZyBUVCBsb2NhbCBlbnRyeSAlcE0gdG8gbm9uLWV4aXN0ZW50IFZMQU4gJWRcXG5cJiMzNDssXG4gNjY4Olx0XHRcdFx0XHRcdCBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCkpO1xuIDY2OTpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoYmF0YWR2X3RsX2NhY2hlLCB0dF9sb2NhbCk7XG4gNjcwOlx0XHRcdHR0X2xvY2FsID0gTlVMTDtcbiA2NzE6XHRcdFx0Z290byBvdXQ7XG4gNjcyOlx0XHR9XG4gNjczOlx0XG4gNjc0Olx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxuIDY3NTpcdFx0XHQgICBcJiMzNDtDcmVhdGluZyBuZXcgbG9jYWwgdHQgZW50cnk6ICVwTSAodmlkOiAlZCwgdHR2bjogJWQpXFxuXCYjMzQ7LFxuIDY3NjpcdFx0XHQgICBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCksXG4gNjc3Olx0XHRcdCAgICh1OClhdG9taWNfcmVhZChcdTAwMjZiYXRfcHJpdi1cdTAwM2V0dC52bikpO1xuIDY3ODpcdFxuIDY3OTpcdFx0ZXRoZXJfYWRkcl9jb3B5KHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5hZGRyLCBhZGRyKTtcbiA2ODA6XHRcdC8qIFRoZSBsb2NhbCBlbnRyeSBoYXMgdG8gYmUgbWFya2VkIGFzIE5FVyB0byBhdm9pZCB0byBzZW5kIGl0IGluXG4gNjgxOlx0XHQgKiBhIGZ1bGwgdGFibGUgcmVzcG9uc2UgZ29pbmcgb3V0IGJlZm9yZSB0aGUgbmV4dCB0dHZuIGluY3JlbWVudFxuIDY4MjpcdFx0ICogKGNvbnNpc3RlbmN5IGNoZWNrKVxuIDY4MzpcdFx0ICovXG4gNjg0Olx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgPSBCQVRBRFZfVFRfQ0xJRU5UX05FVztcbiA2ODU6XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi52aWQgPSB2aWQ7XG4gNjg2Olx0XHRpZiAoYmF0YWR2X2lzX3dpZmlfaGFyZGlmKGluX2hhcmRpZikpXG4gNjg3Olx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1dJRkk7XG4gNjg4Olx0XHRrcmVmX2luaXQoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcbiA2ODk6XHRcdHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XG4gNjkwOlx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW47XG4gNjkxOlx0XHR0dF9sb2NhbC1cdTAwM2V2bGFuID0gdmxhbjtcbiA2OTI6XHRcbiA2OTM6XHRcdC8qIHRoZSBiYXRtYW4gaW50ZXJmYWNlIG1hYyBhbmQgbXVsdGljYXN0IGFkZHJlc3NlcyBzaG91bGQgbmV2ZXIgYmVcbiA2OTQ6XHRcdCAqIHB1cmdlZFxuIDY5NTpcdFx0ICovXG4gNjk2Olx0XHRpZiAoYmF0YWR2X2NvbXBhcmVfZXRoKGFkZHIsIG1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIpIHx8XG4gNjk3Olx0XHQgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4gNjk4Olx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0U7XG4gNjk5Olx0XG4gNzAwOlx0XHRrcmVmX2dldChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuIDcwMTpcdFx0aGFzaF9hZGRlZCA9IGJhdGFkdl9oYXNoX2FkZChiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLCBiYXRhZHZfY29tcGFyZV90dCxcbiA3MDI6XHRcdFx0XHRcdCAgICAgYmF0YWR2X2Nob29zZV90dCwgXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk1MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmY291bnQgQW5hbHlzaXMgb2YgVkxBTiBPYmplY3QgTWFuYWdlbWVudCBpbiBiYXRtYW4tYWR2KioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gSSYjMzk7dmUgYmVlbiB0cmFjaW5nIHRoZSByZWZlcmVuY2UgY291bnRzIG9uIHRoZXNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5gIG9iamVjdHMsIGFuZCB0aGlzIHBhdGNoIGhhcyBnb3QgbWUgd29ycmllZC4gSXQgYWxsIHN0YXJ0cyB3aXRoIGhvdyBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGludGVyYWN0IHdpdGggdGhlc2UgVkxBTiBvYmplY3RzLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICptaWdodCogY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIGdldHRpbmcgYSByZWZlcmVuY2UsICpvciogY3JlYXRlIGEgVkxBTiB3aXRoIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCB3aGljaCBoYXMgc29tZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudCBvcGVyYXRpb25zLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMgYGJhdGFkdl90dF9sb2NhbF9hZGRgIGlzIGFsc28gY2FsbGVkIHdoaWNoIGluY3JlYXNlcyB0aGUgcmVmY291bnQuIEkmIzM5O3ZlIHRyYWNlZCBpdCwgYW5kIGl0IGRlZmluaXRlbHkgZG9lcy4KCkkgY2FuIHNlZSBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBoZXJlIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGUgY2FsbGVyLgoKSGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOgoqICAgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIE5vdywgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgd2hpY2ggaXMgc3VwcG9zZWQgdG8gZHJvcCBhIHJlZmVyZW5jZSBoZWxkIGJ5IHRoZSBUVCBlbnRyeS4gSXQgYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuCiogICBUaGVuIGl0IHNlZW1zIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBoYWQgYSBjYWxsIHRvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gQnV0IHRoZSBwYXRjaCAqcmVtb3ZlZCogdGhpcy4KCk15IGNvbmNlcm4gaXMgdGhpczogaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyB0aGUgcmVmZXJlbmNlIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdvdCwgdGhlbiByZW1vdmluZyB0aGUgZXh0cmEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGZpbmUsIHJpZ2h0PyBTbyB0aGlzIHBhdGNoIGlzIG5vdCBhbiBpc3N1ZT8KCkJ1dCBob2xkIG9uISBJZiBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgYWxzbyBpbmNyZW1lbnRzIHJlZmNvdW50IGFuZCB0aGlzIGlzIG5vdCBwYWlyZWQgd2l0aCBhIG1hdGNoaW5nIGRlY3JlbWVudCwgd2UgaGF2ZSBhIGxlYWsuCgpOb3csIEkgcmUtY2hlY2tlZCBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAuIEl0IGRlZmluaXRlbHkgc3RhcnRzIHRoZSByZWZjb3VudCBhdCAxLCBpbmNyZW1lbnRzIGl0IHRvIDIgKHdpdGggYGtyZWZfZ2V0YCksIGFkZHMgdGhlIFZMQU4gdG8gdGhlIGxpc3QsIGNhbGxzIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCAod2hpY2ggKmFsc28qIGdyYWJzIGEgcmVmZXJlbmNlKSwgYW5kIHRoZW4gZHJvcHMgaXQgYmFjayB0byAyLCBiZWZvcmUgcmV0dXJuaW5nLiBTbyB0aGUgbGlzdCBhbmQgVFQgZW50cnkgYXJlIGVhY2ggaG9sZGluZyBhIHJlZmVyZW5jZS4KClRoZW4gSSBjaGVja2VkIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgYW5kIGl0IHJlbW92ZXMgZnJvbSB0aGUgbGlzdC4gU28gdGhlIGxpc3QgZG9lcyAqbm90KiBob2xkIGEgcmVmZXJlbmNlLiBUaGlzIG1lYW5zIHRoYXQgaWYgaXQmIzM5O3MgZnJlZWQsIHdlIGFyZSBmaW5lLgoKQW5kIHRoZSBwYXRjaCBjYXVzZXMgYW4gaXNzdWUgd2hlcmUgaXQgaXMgb25seSBkZWNyZW1lbnRlZCBvbmNlLCBjYXVzaW5nIGFuIGFjY3VtdWxhdGVkIGxlYWsuCgpTbywgaW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBtb3N0IGxpa2VseSBjYXVzaW5nIGEgbWVtb3J5IGxlYWshIFJlbW92aW5nIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgaXMgd3JvbmcsIHVubGVzcyBzb21lIG90aGVyIGNvZGUgbm93IGhhbmRsZXMgZHJvcHBpbmcgdGhhdCByZWZlcmVuY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMTc9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIyOS0vKipcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MjMwOiAqIGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQoKSAtIGRlY3JlbWVudCB0aGUgdHRfbG9jYWxfZW50cnkgcmVmY291bnRlciBhbmRcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjMxLSAqICBwb3NzaWJseSByZWxlYXNlIGl0XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMzQ9c3RhdGljIHZvaWRcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MjM1OmJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnkpXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIzNi17XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz01ODk9Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTcwNi1cdFx0LyogcmVtb3ZlIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBoYXNoICovXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjcwNzpcdFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTcwOC1cdFx0Z290byBvdXQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03NzAtXHRkZXZfcHV0KGluX2Rldik7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjc3MTpcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWwpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03NzItXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWwpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTI0NT11MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyOTEtXHRcdFx0XHQgICAgICAgY29tbW9uLmhhc2hfZW50cnkpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMjkyOlx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9yZW1vdmVkX2VudHJ5KTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5My1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5NC1vdXQ6XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEyOTU6XHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5Ni1cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTEzNTk9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3RhYmxlX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEzODUtXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEzODY6XHRcdFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEzODctXHRcdH1cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTE1ODk9c3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE3MzgtXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWxfZW50cnkpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNzM5Olx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE3NDAtXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjEyMD1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfZ2xvYmFsX2RlbChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjE3MC1cdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIxNzE6XHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KGxvY2FsX2VudHJ5KTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjE3Mi19XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMzYwPXN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2goc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIzOTgtXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWxfZW50cnkpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyMzk5Olx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTI0MDAtXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zMzI5PWJvb2wgYmF0YWR2X2lzX215X2NsaWVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTMzNDUtb3V0OlxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozMzQ2Olx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTMzNDctXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzYyNj1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfcHVyZ2VfcGVuZGluZ19jbGllbnRzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNjU5LVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozNjYwOlx0XHRcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWwpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNjYxLVx0XHR9XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNzIwPWJvb2wgYmF0YWR2X2lzX2FwX2lzb2xhdGVkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHU4ICpzcmMsIHU4ICpkc3QsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ3LWxvY2FsX2VudHJ5X3B1dDpcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6Mzc0ODpcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ5LXZsYW5fcHV0OlxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9Mzg3NT1ib29sIGJhdGFkdl90dF9sb2NhbF9jbGllbnRfaXNfcm9hbWluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzg4NS1cdHJldCA9IHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozODg2Olx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM4ODctb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDU5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWA6CgoqKkFuYWx5emluZyBgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2VgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGJhdGFkdl90dF9sb2NhbF9lbnRyeV9yZWxlYXNlYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGJhdGFkdiAoQi5BLlQuTS5BLk4uIGFkdmFuY2VkKSBmcmFtZXdvcmsuIEl0JiMzOTtzIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSBsb2NhbCB0cmFuc2xhdGlvbiB0YWJsZSAoVFQpLCBhbmQgdGhlIGByZWxlYXNlYCBzdWZmaXggc3VnZ2VzdHMgaXQgZGVhbHMgd2l0aCB0aGUgZnJlZWluZyBvciBkZWFsbG9jYXRpb24gb2YgYW4gZW50cnkuCgpTbywgbGV0IG1lIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBsb2NhbCBlbnRyeSBpbiB0aGUgVFQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gUGVyaGFwcyBhIHJvdXRlIGV4cGlyZXMsIGEgcGVlciBkaXNjb25uZWN0cywgb3Igc29tZSBvdGhlciBldmVudCBuZWNlc3NpdGF0ZXMgdGhlIHJlbW92YWwgb2YgdGhpcyBsb2NhbGx5LWhlbGQgdHJhbnNsYXRpb24gaW5mb3JtYXRpb24uCgpJJiMzOTtkIGJlIGN1cmlvdXMgdG8ga25vdyB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgZnJlZWQgaGVyZS4gSXMgaXQganVzdCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbnRyeSBpdHNlbGY/IE9yIGRvZXMgaXQgYWxzbyBpbnZvbHZlIHJlbGVhc2luZyBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyByZWZlcmVuY2VzIHRvIG5laWdoYm9yIGluZm9ybWF0aW9uLCBxdWV1ZWQgcGFja2V0cywgb3IgdGltZXJzIHJlbGF0ZWQgdG8gdGhpcyBlbnRyeT8gVGhlIGVmZmljaWVuY3kgYW5kIGNvcnJlY3RuZXNzIG9mIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWAgaXMgY3JpdGljYWwgYmVjYXVzZSBpdCYjMzk7cyBhdCB0aGUgaGVhcnQgb2YgaG93IHRoZSBCQVRNQU4gcHJvdG9jb2wgbWFuYWdlcyBpdHMgZm9yd2FyZGluZyB0YWJsZXMgYW5kLCB0aGVyZWZvcmUsIGlzIGVzc2VudGlhbCB0byB0aGUgcmVsaWFibGUgZGVsaXZlcnkgb2YgZGF0YSBpbiB0aGUgbmV0d29yay4gQW55IHN1YnRsZSBtZW1vcnkgbGVha3Mgb3IgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgZnVuY3Rpb24gY291bGQgaGF2ZSBkaXNhc3Ryb3VzIGNvbnNlcXVlbmNlcyBmb3IgdGhlIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIGVudGlyZSBtZXNoIG5ldHdvcmsuIEkgbmVlZCB0byBrZWVwIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBvcGVyYXRpb24gaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTc6XHRzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIDIxODpcdHtcbiAyMTk6XHRcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5O1xuIDIyMDpcdFxuIDIyMTpcdFx0dHRfbG9jYWxfZW50cnkgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LFxuIDIyMjpcdFx0XHRcdFx0ICAgICAgY29tbW9uLnJlZmNvdW50KTtcbiAyMjM6XHRcbiAyMjQ6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodHRfbG9jYWxfZW50cnktXHUwMDNldmxhbik7XG4gMjI1Olx0XG4gMjI2Olx0XHRrZnJlZV9yY3UodHRfbG9jYWxfZW50cnksIGNvbW1vbi5yY3UpO1xuIDIyNzpcdH1cbiAyMjg6XHRcbiAyMjk6XHQvKipcbiAyMzA6XHQgKiBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KCkgLSBkZWNyZW1lbnQgdGhlIHR0X2xvY2FsX2VudHJ5IHJlZmNvdW50ZXIgYW5kXG4gMjMxOlx0ICogIHBvc3NpYmx5IHJlbGVhc2UgaXRcbiAyMzI6XHQgKiBAdHRfbG9jYWxfZW50cnk6IHR0X2xvY2FsX2VudHJ5IHRvIGJlIGZyZWUmIzM5O2RcbiAyMzM6XHQgKi9cbiAyMzQ6XHRzdGF0aWMgdm9pZFxuIDIzNTpcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnkpXG4gMjM2Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTMxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRUIEVudHJ5IExpZmVjeWNsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWAgZnVuY3Rpb24sIGFuZCB5ZXMsIGl0ICpkZWZpbml0ZWx5KiBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh0dF9sb2NhbF9lbnRyeS0mZ3Q7dmxhbilgISBUaGF0JiMzOTtzIGdvb2QuIFdoaWNoIG1lYW5zLCB3aGVuIHRoYXQgVFQgZW50cnkgZ2V0cyBmcmVlZCwgdGhlIFZMQU4gcmVmZXJlbmNlIGlzIGRyb3BwZWQgYXMgZXhwZWN0ZWQuIEFscmlnaHQsIHRoYXQgc2VlbXMgc291bmQuCgpCdXQgaG9sZCBvbi4uLiBpZiBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXRgLCB0aGF0IGluIHR1cm4gZGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIGhhc2ggZW50cnksIHJpZ2h0PyBZZXAsIHRoYXQgYWxzbyBhbGlnbnMgd2l0aCB0aGUgdHlwaWNhbCBsaWZlY3ljbGUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgaXMgY29uc2lzdGVudC4KCk5vdywgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSBhbmFseXplIGBiYXRhZHZfdHRfbG9jYWxfYWRkYC4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIG5vdy4uLiBpdCBkb2VzOgoKYGBgYwoJa3JlZl9pbml0KCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5yZWZjb3VudCk7CgkuLi4KCWtyZWZfZ2V0KCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5yZWZjb3VudCk7CgloYXNoX2FkZGVkID0gYmF0YWR2X2hhc2hfYWRkKC4uLik7CmBgYAoKQWhhISBTbywgaXQgaW5pdGlhbGl6ZXMgdGhlIHJlZmVyZW5jZSBjb3VudCB3aXRoIGBrcmVmX2luaXRgLCB3aGljaCBtZWFucyB0aGUgaW5pdGlhbCByZWZjb3VudCBpcyAxLiBUaGVuIGl0IGNhbGxzIGBrcmVmX2dldGAsIHdoaWNoICppbmNyZW1lbnRzKiB0aGUgcmVmY291bnQhIFRoYXQgbWVhbnMgdGhlIFRUIGVudHJ5IGFjdHVhbGx5ICpzdGFydHMqIHdpdGggYSByZWZjb3VudCBvZiAyISBPbmUgZm9yIHRoZSBjYWxsZXIsIGFuZCBvbmUgZm9yIHRoZSBoYXNoIHRhYmxlLiBPaywgdGhhdCBtYWtlcyBzZW5zZS4KClNvIHRoZW4gYGJhdGFkdl90dF9sb2NhbF9hZGRgIHJldHVybnMuLi4gYW5kIGl0ICpkb2VzbiYjMzk7dCogY2FsbCBga3JlZl9wdXRgIHRvIGRyb3AgdGhlIGNhbGxlciYjMzk7cyByZWZlcmVuY2UuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSByZWZlcmVuY2UgaXMgZXhwbGljaXRseSBkcm9wcGVkIGVsc2V3aGVyZSwgYW5kIEkgc2hvdWxkIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgcGFydCBvZiB0aGUgY29kZSBpcyBhY2N1cmF0ZS4gTGV0JiMzOTtzIHRyYWNlIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhZ2FpbiBqdXN0IHRvIGJlIDEwMCUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcdGtyZWZfZ2V0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4gNzAxOlx0XHRoYXNoX2FkZGVkID0gYmF0YWR2X2hhc2hfYWRkKGJhdF9wcml2LVx1MDAzZXR0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LFxuIDcwMjpcdFx0XHRcdFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LCBcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24sXG4gNzAzOlx0XHRcdFx0XHQgICAgIFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5oYXNoX2VudHJ5KTtcbiA3MDQ6XHRcbiA3MDU6XHRcdGlmICh1bmxpa2VseShoYXNoX2FkZGVkICE9IDApKSB7XG4gNzA2Olx0XHRcdC8qIHJlbW92ZSB0aGUgcmVmZXJlbmNlIGZvciB0aGUgaGFzaCAqL1xuIDcwNzpcdFx0XHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsKTtcbiA3MDg6XHRcdFx0Z290byBvdXQ7XG4gNzA5Olx0XHR9XG4gNzEwOlx0XG4gNzExOlx0YWRkX2V2ZW50OlxuIDcxMjpcdFx0YmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbCwgQkFUQURWX05PX0ZMQUdTKTtcbiA3MTM6XHRcbiA3MTQ6XHRjaGVja19yb2FtaW5nOlxuIDcxNTpcdFx0LyogQ2hlY2sgd2hldGhlciBpdCBpcyBhIHJvYW1pbmcsIGJ1dCBkb24mIzM5O3QgZG8gYW55dGhpbmcgaWYgdGhlIHJvYW1pbmdcbiA3MTY6XHRcdCAqIHByb2Nlc3MgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkXG4gNzE3Olx0XHQgKi9cbiA3MTg6XHRcdGlmICh0dF9nbG9iYWwgXHUwMDI2XHUwMDI2ICEodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSkge1xuIDcxOTpcdFx0XHQvKiBUaGVzZSBub2RlIGFyZSBwcm9iYWJseSBnb2luZyB0byB1cGRhdGUgdGhlaXIgdHQgdGFibGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIzNDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiB0aGUgYmF0YWR2IENvZGUqKgoKSG9sZCBvbiBhIHNlY29uZCEgSSB0aG91Z2h0IGBiYXRhZHZfdHRfbG9jYWxfYWRkYCB3YXMgc3VwcG9zZWQgdG8gaGFuZGxlIHJlZmVyZW5jZSBjb3VudGluZywgc3BlY2lmaWNhbGx5IGRyb3BwaW5nIHRoZSBjYWxsZXImIzM5O3MgcmVmZXJlbmNlIGFmdGVyIGFkZGluZyB0aGUgZW50cnkuIEJ1dCB0aGUgd29yZGluZyBoZXJlIGlzIHVuY2xlYXIuIEl0IHNlZW1zIEkgYW0gbWlzdGFrZW4uCgpJZiBpdCAqZG9lc24mIzM5O3QqIGRyb3AgdGhlIGNhbGxlciYjMzk7cyByZWZlcmVuY2UsIHRoZW4gKndobyogaXMgcmVzcG9uc2libGUgZm9yIGRlY3JlbWVudGluZyB0aGF0IHJlZmVyZW5jZSBjb3VudD8gVGhpcyBpcyBhIGNyaXRpY2FsIHF1ZXN0aW9uLiBJZiBub2JvZHkgaXMgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSwgd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvbiBvdXIgaGFuZHMsIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTttIHRyeWluZyB0byBhdm9pZC4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUuIExldCYjMzk7cyB0cmFjZSBpdCB0aHJvdWdoIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCwgcGF5aW5nIHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvIGl0cyBmaW5hbCBzZWN0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRoYXQgbWlnaHQgcmVsZWFzZSB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZSBvciBhbnkgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMuIE15IHN1c3BpY2lvbnMgYXJlIGdyb3dpbmcsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yIGFsaWducyB3aXRoIG15IGFzc3VtcHRpb25zIGFib3V0IHByb3BlciByZWZlcmVuY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcbiA3NjE6XHRcdC8qIGlmIGFueSBcJiMzNDtkeW5hbWljXCYjMzQ7IGZsYWcgaGFzIGJlZW4gbW9kaWZpZWQsIHJlc2VuZCBhbiBBREQgZXZlbnQgZm9yIHRoaXNcbiA3NjI6XHRcdCAqIGVudHJ5IHNvIHRoYXQgYWxsIHRoZSBub2RlcyBjYW4gZ2V0IHRoZSBuZXcgZmxhZ3NcbiA3NjM6XHRcdCAqL1xuIDc2NDpcdFx0aWYgKHJlbW90ZV9mbGFncyBeICh0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9SRU1PVEVfTUFTSykpXG4gNzY1Olx0XHRcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XG4gNzY2Olx0XG4gNzY3Olx0XHRyZXQgPSB0cnVlO1xuIDc2ODpcdG91dDpcbiA3Njk6XHRcdGJhdGFkdl9oYXJkaWZfcHV0KGluX2hhcmRpZik7XG4gNzcwOlx0XHRkZXZfcHV0KGluX2Rldik7XG4gNzcxOlx0XHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsKTtcbiA3NzI6XHRcdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbCk7XG4gNzczOlx0XHRyZXR1cm4gcmV0O1xuIDc3NDpcdH1cbiA3NzU6XHRcbiA3NzY6XHQvKipcbiA3Nzc6XHQgKiBiYXRhZHZfdHRfcHJlcGFyZV90dmx2X2dsb2JhbF9kYXRhKCkgLSBwcmVwYXJlIHRoZSBUVkxWIFRUIGhlYWRlciB0byBzZW5kXG4gNzc4Olx0ICogIHdpdGhpbiBhIFRUIFJlc3BvbnNlIGRpcmVjdGVkIHRvIGFub3RoZXIgbm9kZVxuIDc3OTpcdCAqIEBvcmlnX25vZGU6IG9yaWdpbmF0b3IgZm9yIHdoaWNoIHRoZSBUVCBkYXRhIGhhcyB0byBiZSBwcmVwYXJlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzAzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmY291bnRpbmcgTXlzdGVyaWVzIG9mIFZMQU5zIGluIGJhdG1hbi1hZHYqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGJhdG1hbi1hZHYgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIG1lc3Npbmcgd2l0aCBWTEFOIHJlZmNvdW50aW5nLiBJdCBsb29rcyBsaWtlIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBidW1wcyB0aGUgcmVmY291bnQgb24gYSBUVCBlbnRyeSAoaGFzaCByZWZlcmVuY2UpLiBUaGVuLCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgZHJvcHMgdGhhdCBoYXNoIHJlZmVyZW5jZS4gQWxzbywgd2hlbiB0aGUgVFQgZW50cnkgaXMgZnJlZWQsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBvbiB0aGUgVkxBTi4gU28gZmFyLCBzbyBnb29kLgoKQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIGFuZCBpdCBhcHBlYXJzIHRvICphbHNvKiBkcm9wIGEgVkxBTiByZWZlcmVuY2UuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGlzIHdvdWxkIGNhdXNlIGEgZG91YmxlIGZyZWUsIHNpbmNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZGVzdHJveWAgY291bGQgYmUgZnJlZWluZyBzb21ldGhpbmcgdGhhdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWxzbyBoYXMgYSByZWZlcmVuY2UgdG8uIEhvd2V2ZXIsIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBhbHNvIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCB3aGljaCAqYWxzbyogc2hvdWxkIGRyb3AgYSByZWZlcmVuY2UhIEJ1dCB0aGUgcGF0Y2ggcmVtb3ZlZCBpdCEKCkl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3Mgc29tZSBqdWdnbGluZyBnb2luZyBvbiBoZXJlLiBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2V0cyBhIHJlZmVyZW5jZSAobGlzdCByZWZlcmVuY2UpLiBUaGVuLCBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgZ2V0cyBhbm90aGVyIChUVCByZWZlcmVuY2UpLiBUaGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIG9uZSAoZ2V0IHJlZmVyZW5jZSkuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgdHdvIHJlZnMgKFRUIGFuZCBsaXN0KS4gQW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgZ2V0IHJlZmVyZW5jZS4gSXQgc2hvdWxkIGJhbGFuY2Ugb3V0LCB0aGVvcmV0aWNhbGx5LgoKVGhlbiwgdGhlcmUmIzM5O3MgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAsIHdoaWNoIGlzIG1lYW50IHRvIHJldml2ZSBhIFZMQU4uIEkgc2VlIGl0IGdldHRpbmcgYSByZWZlcmVuY2Ugd2l0aCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIGFuZCB0aGVuIGl0IHVzZXMgYGJhdGFkdl90dF9sb2NhbF9hZGRgIHRvIGFkZCBhIG5ldyBUVCBlbnRyeSwgYnV0IEkgZG9uJiMzOTt0IHNlZSBpdCBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIHdpdGggYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgLiBXYWl0LCBpcyAqdGhpcyogdGhlIHByb2JsZW0/IElzIGl0IGxlYWtpbmcgYSByZWZlcmVuY2Ugb24gcHVycG9zZT8gVGhlIGNvbW1lbnQgc2F5cyB0aGlzIGlzIHRvIHJldml2ZSB0aGUgb2JqZWN0LCBzbyBpdCBzb3VuZHMgbGlrZSBpdHMgaW50ZW5kZWQgdG8uCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIHRoZSBwYXRjaCBtaWdodCBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoYXQuIE1heWJlIHRoZSBwcmV2aW91cyB2ZXJzaW9uIGhhZCBhIGJ1ZyB3aGVyZSB0aGVyZSB3YXMgYSBkb3VibGUgZnJlZS4gTGV0IG1lIHNlZSwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAuIEFoLCBtYXliZSBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgaXNuJiMzOTt0IGRyb3BwaW5nIHRoZSBUVCBlbnRyeT8gSXMgdGhhdCBwb3NzaWJsZT8gTm8uCgpPa2F5LCBsZXQmIzM5O3MgdGhpbmsuIFRoZSBwYXRjaCByZW1vdmVkIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGNhbGwuIFNvLCBpdCB3YXMgZWl0aGVyIGEgZG91YmxlIGZyZWUgb3IgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4gSXMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmcmVlaW5nIGB2bGFuYD8gSXQgY2FuIGlmIHRoZSByZWZjb3VudCByZWFjaGVzIHplcm8uIFNvLCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIHRoZSBsYXN0IHJlZmVyZW5jZSwgYW5kIGZyZWVzIHRoZSBgdmxhbmAgb2JqZWN0LCB0aGVuIHRoYXQgcmVtb3ZlZCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCBpcyBhY2Nlc3NpbmcgYSBmcmVlZCBvYmplY3QsIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZS4KClNvIHRoZSBvcmlnaW5hbCByZWZjb3VudGluZyBtdXN0IGhhdmUgYmVlbiB3cm9uZy4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHdhcyBnZXR0aW5nIGEgcmVmZXJlbmNlICgxKSBhbmQgdGhlbiBjYWxsaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZGVzdHJveWAsIHdoaWNoIHdvdWxkIGJlIGRyb3BwaW5nIDIgcmVmZXJlbmNlcyBmcm9tIHRoZSBUVCBlbnRyeSBhbmQgdGhlIGxpc3QgKHNvIGEgdG90YWwgb2YgMikuIFRoZW4sIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd291bGQgY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAsIHdoaWNoIHdvdWxkIGRyb3AgYSByZWZlcmVuY2UuIFRoYXQgbWVhbnMgYSB1c2UtYWZ0ZXItZnJlZS4gU28gdGhlIGZpeCBpcyB0aGUgcGF0Y2guCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSBhcmUgb3RoZXIgY2FzZXM6IFdoYXQgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzICpsZWFraW5nKiBhIHJlZmVyZW5jZT8gV2VsbCwgaWYgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgaXMgbGVha2luZywgdGhhdCB3b3VsZCBtYWtlIHNlbnNlLiBJdCBtZWFucyB0aGUgb2JqZWN0IG5ldmVyIGdldHMgZnJlZWQuIEJ1dCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGV4aXN0cyB0byBmcmVlIHRoZSBvYmplY3QuIE9rYXksIEkmIzM5O20gcHJldHR5IHN1cmUgSSB1bmRlcnN0YW5kLiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBsZWFrcyBhIHJlZmVyZW5jZSBiZWNhdXNlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCAqc2hvdWxkKiBvbmx5IGJlIGRyb3BwaW5nIHRoZSBnZXQgcmVmZXJlbmNlLiBBbmQgd2l0aCB0aGUgcGF0Y2gsIHRoYXQgaXMgd2hhdCBpcyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCQVRNQU5fQURWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L0tjb25maWctOS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MTA6Y29uZmlnIEJBVE1BTl9BRFZcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtCLkEuVC5NLkEuTi4gQWR2YW5jZWQgTWVzaGluZyBQcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMTktXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjIwOmNvbmZpZyBCQVRNQU5fQURWX0JBVE1BTl9WXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtCLkEuVC5NLkEuTi4gViBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzMtXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjM0OmNvbmZpZyBCQVRNQU5fQURWX0JMQVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7QnJpZGdlIExvb3AgQXZvaWRhbmNlXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy00Ni1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NDc6Y29uZmlnIEJBVE1BTl9BRFZfREFUXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEaXN0cmlidXRlZCBBUlAgVGFibGVcJiMzNDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTU2LVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo1Nzpjb25maWcgQkFUTUFOX0FEVl9NQ0FTVFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01OC1cdGJvb2wgXCYjMzQ7TXVsdGljYXN0IG9wdGltaXNhdGlvblwmIzM0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjUtXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjY2OmNvbmZpZyBCQVRNQU5fQURWX0RFQlVHXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTY3LVx0Ym9vbCBcJiMzNDtCLkEuVC5NLkEuTi4gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03NC1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NzU6Y29uZmlnIEJBVE1BTl9BRFZfVFJBQ0lOR1xubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03Ni1cdGJvb2wgXCYjMzQ7Qi5BLlQuTS5BLk4uIHRyYWNpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDk4NwoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgYW5kIEZ1enppbmcgYSBCYXRtYW4tYWR2IFZMQU4gSGFuZGxpbmcgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBiYXRtYW4tYWR2YCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHJlbW92ZXMgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbCBmcm9tIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24uIFRoaXMgaXMgYSByZWZjb3VudGluZyBjaGFuZ2UsIHNvIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoaXMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGZ1enogdGhpcy4gVG8gZnV6eiBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEluIHRoaXMgY2FzZSwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFuZCBpdHMgY291bnRlcnBhcnQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIHRoZXJlLCBjYXJlZnVsbHkgY3JhZnRpbmcgaW5wdXRzIHRoYXQgZXhlcmNpc2UgdGhlc2UgZnVuY3Rpb25zIHdpdGggYSB2YXJpZXR5IG9mIFZMQU4gY29uZmlndXJhdGlvbnMsIHBheWluZyBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSByZWZjb3VudGluZyBjaGFuZ2UuIEnigJlsbCBtYWtlIHN1cmUgdGhlIGBCQVRNQU5fQURWYCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgZm9yIG15IHRlc3RzLCBvZiBjb3Vyc2UuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB0byB0cmFjayB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkJiMzNDssCiAgICAmIzM0O2JhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVmY291bnRpbmcgbG9naWMgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGJ5IHJlbW92aW5nIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIGxpZmVjeWNsZSBvZiBWTEFOIG9iamVjdHMgaW4gdGhlIGJhdG1hbi1hZHYgbWVzaCBpbnRlcmZhY2UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCQVRNQU5fQURWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBieSByZW1vdmluZyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBsaWZlY3ljbGUgb2YgVkxBTiBvYmplY3RzIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjA0Ljg4OTQ2NDI2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMzQ5ODQ0NTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQVRNQU5fQURWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZFwiLFxuICAgIFwiYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBieSByZW1vdmluZyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBsaWZlY3ljbGUgb2YgVkxBTiBvYmplY3RzIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDowNC44ODk0NzAyNTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTgwMDY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNlNzQzZDFhNGRlM2E0ODJmYjMxODRlMThkNWRiNWYwZTZiZDc0MThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDQ6MTQ6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcXG5pbmRleCBlN2FhNDViYzZiN2FkNy4uY2M5NzRmMjQzMjAwZmMgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcXG5AQCAtNjkxLDkgKzY5MSw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuIFxcbiBcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxuIFxcbi1cXHQvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovXFxuLVxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MDUuMjE5ODU4NTk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDMxNjgwMzk0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRcIixcbiAgICBcImJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZjb3VudGluZyBsb2dpYyBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYnkgcmVtb3ZpbmcgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgbGlmZWN5Y2xlIG9mIFZMQU4gb2JqZWN0cyBpbiB0aGUgYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZTc0M2QxYTRkZTNhNDgyZmIzMTg0ZTE4ZDVkYjVmMGU2YmQ3NDE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDQ6MTQ6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuaW5kZXggZTdhYTQ1YmM2YjdhZDcuLmNjOTc0ZjI0MzIwMGZjIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuQEAgLTY5MSw5ICs2OTEsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIFxuIFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIFxuLVx0LyogZmluYWxseSBmcmVlIHRoZSB2bGFuIG9iamVjdCAqL1xuLVx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjA1LjIxOTg2MTA3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTk5OTc5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmF0bWFuLUFkdiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdG91Y2hpbmcgYG5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtgIGZyb20gdGhlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBmdW5jdGlvbi4gUmlnaHQgYXdheSwgbXkgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2FsbCBpcyBiZWluZyByZW1vdmVkLiBXaGF0J3MgdGhlIHJhdGlvbmFsZT8gSXMgdGhpcyBhIGNsZWFudXAsIGEgYnVnIGZpeCwgb3IgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZW1vdmluZyB0aGF0IFZMQU4gcmVmZXJlbmNlIGNvdW50IGRlY3JlbWVudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiBjYWxsIGFuZCB3aGF0J3MgZ29pbmcgdG8gaGFwcGVuIHRvIHRoYXQgVkxBTiBhZnRlciB0aGlzIGNoYW5nZSBpcyBhcHBsaWVkLiBJcyB0aGVyZSBhIG1lbW9yeSBsZWFrLCBvciBhIGRvdWJsZSBmcmVlIGJlaW5nIHByZXZlbnRlZD8gT3IgcGVyaGFwcyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGlzIGJlaW5nIG1vdmVkIGVsc2V3aGVyZT8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MDguMjc5ODYyODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwNzQ5MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NjE1PXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjU4LS8qKlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjU5OiAqIGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoKSAtIG5kb19raWxsX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY2MC0gKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02NjktICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2NzA6c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY3MS1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF0YWR2X25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTg3Ny1cXHQubmRvX3ZsYW5fcnhfYWRkX3ZpZCA9IGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCxcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjg3ODpcXHQubmRvX3ZsYW5fcnhfa2lsbF92aWQgPSBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODc5LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzID0gYmF0YWR2X2ludGVyZmFjZV9zZXRfbWFjX2FkZHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjA4LjM0Mjk0MDk1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NzM4Mzc4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHByb21wdCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgbmRvX3ZsYW5fcnhfa2lsbF92aWRgIGZvciBCYXRtYW4tQWR2KipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYmF0bWFuLWFkdiBpbnRlcmZhY2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2tpcCBzdHJhaWdodCB0byB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSBhbmQganVtcCBpbnRvIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24uIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGlzIGxvZ2ljIGxpZXMuIEkgd2FudCB0byBzZWUgaG93IGJhdG1hbi1hZHYgaGFuZGxlcyBWTEFOIElEIHJlbW92YWwgZnJvbSBpdHMgaW50ZXJmYWNlcy4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGhvdyBpdCBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBicmlkZ2luZyBhbmQgZm9yd2FyZGluZyBiYXNlZCBvbiBWTEFOIHRhZ2dpbmcgKG9yIGxhY2sgdGhlcmVvZiksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBpbmdyZXNzIGZpbHRlcmluZyBvZiB0YWdnZWQgZnJhbWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MTEuMTE2NzgyMDEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXFxuIDY2MTpcXHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXFxuIDY2MjpcXHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBkZWxldGVkIHZsYW5cXG4gNjYzOlxcdCAqXFxuIDY2NDpcXHQgKiBEZXN0cm95IGFsbCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyB1c2VkIHRvIGhhbmRsZSB0aGUgdmxhbiBpZGVudGlmaWVkIGJ5IHZpZFxcbiA2NjU6XFx0ICogb24gdG9wIG9mIHRoZSBtZXNoIGludGVyZmFjZVxcbiA2NjY6XFx0ICpcXG4gNjY3OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBzcGVjaWZpZWQgcHJvdG90eXBlIGlzIG5vdCBFVEhfUF84MDIxUVxcbiA2Njg6XFx0ICogb3IgLUVOT0VOVCBpZiB0aGUgc3BlY2lmaWVkIHZsYW4gaWQgd2Fzbid0IHJlZ2lzdGVyZWQuXFxuIDY2OTpcXHQgKi9cXG4gNjcwOlxcdHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuIDY3MTpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNjcyOlxcdHtcXG4gNjczOlxcdFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA2NzQ6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0Lyogb25seSA4MDIuMVEgdmxhbnMgYXJlIHN1cHBvcnRlZC4gYmF0bWFuLWFkdiBkb2VzIG5vdCBrbm93IGhvdyB0b1xcbiA2Nzc6XFx0XFx0ICogaGFuZGxlIG90aGVyIHR5cGVzXFxuIDY3ODpcXHRcXHQgKi9cXG4gNjc5OlxcdFxcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXFxuIDY4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0LyogXFxcInByaW9yaXR5IHRhZ1xcXCIgZnJhbWVzIGFyZSBoYW5kbGVkIGxpa2UgXFxcInVudGFnZ2VkXFxcIiBmcmFtZXNcXG4gNjgzOlxcdFxcdCAqIGFuZCBubyBtZXNoaWZfdmxhbiBuZWVkcyB0byBiZSBkZXN0cm95ZWRcXG4gNjg0OlxcdFxcdCAqL1xcbiA2ODU6XFx0XFx0aWYgKHZpZCA9PSAwKVxcbiA2ODY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY4NzpcXHRcXG4gNjg4OlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcXG4gNjg5OlxcdFxcdGlmICghdmxhbilcXG4gNjkwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA2OTE6XFx0XFxuIDY5MjpcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdHJldHVybiAwO1xcbiA2OTU6XFx0fVxcbiA2OTY6XFx0XFxuIDY5NzpcXHQvKiBiYXRtYW4tYWR2IG5ldHdvcmsgZGV2aWNlcyBoYXZlIGRldmljZXMgbmVzdGluZyBiZWxvdyBpdCBhbmQgYXJlIGEgc3BlY2lhbFxcbiA2OTg6XFx0ICogXFxcInN1cGVyIGNsYXNzXFxcIiBvZiBub3JtYWwgbmV0d29yayBkZXZpY2VzOyBzcGxpdCB0aGVpciBsb2NrcyBvZmYgaW50byBhXFxuIDY5OTpcXHQgKiBzZXBhcmF0ZSBjbGFzcyBzaW5jZSB0aGV5IGFsd2F5cyBuZXN0LlxcbiA3MDA6XFx0ICovXFxuIDcwMTpcXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJhdGFkdl9uZXRkZXZfeG1pdF9sb2NrX2tleTtcXG4gNzAyOlxcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYmF0YWR2X25ldGRldl9hZGRyX2xvY2tfa2V5O1xcbiA3MDM6XFx0XFxuIDcwNDpcXHQvKipcXG4gNzA1OlxcdCAqIGJhdGFkdl9zZXRfbG9ja2RlcF9jbGFzc19vbmUoKSAtIFNldCBsb2NrZGVwIGNsYXNzIGZvciBhIHNpbmdsZSB0eCBxdWV1ZVxcbiA3MDY6XFx0ICogQGRldjogZGV2aWNlIHdoaWNoIG93bnMgdGhlIHR4IHF1ZXVlXFxuIDcwNzpcXHQgKiBAdHhxOiB0eCBxdWV1ZSB0byBtb2RpZnlcXG4gNzA4OlxcdCAqIEBfdW51c2VkOiBhbHdheXMgTlVMTFxcbiA3MDk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjExLjExNjk0Mjc1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTQ4OTk2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIGEgVkxBTiBSZWxlYXNlIGluIEJhdGFkdioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdGFraW5nIG91dCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIEludGVyZXN0aW5nLiBJIGtub3cgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGB2bGFuYCBzdHJ1Y3R1cmUsIHNvIHRoYXQncyBhIGtleSBwb2ludCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIHdlJ3JlIHJlbW92aW5nIHRoZSBjb3JyZXNwb25kaW5nIGBwdXRgLCBkb2VzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgdGFrZSBjYXJlIG9mIGRyb3BwaW5nIHRoYXQgcmVmZXJlbmNlPyBJdCdzIGVzc2VudGlhbCB0aGF0IHRoZSByZWZlcmVuY2UgY291bnQgaXMgbWFuYWdlZCBjb3JyZWN0bHkgdG8gYXZvaWQgbWVtb3J5IGxlYWtzIG9yIGRvdWJsZSBmcmVlcywgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgbm93IGhhbmRsZXMgdGhlIHJlbGVhc2UuIEnigJlsbCBuZWVkIHRvIGRlbHZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjE0LjExMTg0NTUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NzI2MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9iYXRtYW4tYWR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU0NT1pbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4Ny0vKipcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU4ODogKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5MS0gKi9cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU5MjpzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkzLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02NzA9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkxLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjkyOlxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5My1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTA4Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5Ni1cXHRpZiAodmxhbikge1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5NzpcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk4LVxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjE0LjE3NzU3ODc1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjA5ODA0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmdW5jdGlvbi4gSnVzdCB0aGUgbmFtZSBhbG9uZSB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBWTEFOLXNwZWNpZmljIGNsZWFudXAgaGFwcGVucyB3aGVuIGEgQkFUTUFOIEFkdmFuY2VkIG1lc2ggaW50ZXJmYWNlIGlzIGJlaW5nIGRlc3Ryb3llZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnJlZSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBWTEFOIHN1cHBvcnQg4oCTIHRoaW5ncyBsaWtlIFZMQU4gSUQgbWFwcGluZ3MsIHBvdGVudGlhbGx5IHBlci1WTEFOIHN0YXRpc3RpY3MsIGFuZCBtYXliZSBzb21lIGhhbmRsaW5nIG9mIGFueSBhc3NvY2lhdGVkIGJyaWRnZSBpbnRlcmZhY2VzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIG1hbmFnaW5nIHRoZSBWTEFOIHRhZ2dpbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgQkFUTUFOJ3MgTUFDLWluLU1BQyBlbmNhcHN1bGF0aW9uLCB3aGljaCBtZWFucyBsaWtlbHkgYSB1bmlxdWUgaGFuZGxpbmcgYXBwcm9hY2ggY29tcGFyZWQgdG8gcmVndWxhciBFdGhlcm5ldCBWTEFOcy4gVGhlIGRldmlsJ3MgaW4gdGhlIGRldGFpbHMgd2l0aCB0aGVzZSBtZXNoIGNvbmZpZ3VyYXRpb25zLCBzbyBJJ20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHRoZXkndmUgcHV0IGluIHBsYWNlLCBlc3BlY2lhbGx5IGFyb3VuZCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLCBlc3BlY2lhbGx5IHNpbmNlIGl0IGRlYWxzIHdpdGggYSBtZXNoIGludGVyZmFjZSBiZWluZyBkZXN0cm95ZWQgd2hpY2ggY2FuIGhhcHBlbiBmb3IgbWFueSByZWFzb25zLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgbmVlZCB0byBiZSByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSBwYXJ0aWFsIGZhaWx1cmVzIGR1cmluZyB0aGUgY2xlYW51cCwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgcmV0cnkgb3Igcm9sbGJhY2sgbG9naWMsIG9yIGF0IGxlYXN0IGdyYWNlZnVsIGhhbmRsaW5nIG9mIG1lbW9yeSBsZWFrcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHRoZXkndmUgaW1wbGVtZW50ZWQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDoxNy44Mzg1NjIzNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg4LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg4OlxcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG4gNTg5OlxcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiA1OTA6XFx0ICogQHZsYW46IHRoZSBvYmplY3QgdG8gcmVtb3ZlXFxuIDU5MTpcXHQgKi9cXG4gNTkyOlxcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIDU5MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG4gNTk0OlxcdHtcXG4gNTk1OlxcdFxcdC8qIGV4cGxpY2l0bHkgcmVtb3ZlIHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGJlY2F1c2UgaXQgaXMgbWFya2VkXFxuIDU5NjpcXHRcXHQgKiB3aXRoIHRoZSBOT1BVUkdFIGZsYWdcXG4gNTk3OlxcdFxcdCAqL1xcbiA1OTg6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLFxcbiA1OTk6XFx0XFx0XFx0XFx0ICAgICAgIHZsYW4tXFx1MDAzZXZpZCwgXFxcInZsYW4gaW50ZXJmYWNlIGRlc3Ryb3llZFxcXCIsIGZhbHNlKTtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4gNjAyOlxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0LyoqXFxuIDYwNTpcXHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2MDY6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjA3OlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG4gNjA4OlxcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIG5ldyB2bGFuXFxuIDYwOTpcXHQgKlxcbiA2MTA6XFx0ICogU2V0IHVwIGFsbCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBmb3IgaGFuZGxpbmcgdGhlIG5ldyB2bGFuIG9uIHRvcCBvZiB0aGVcXG4gNjExOlxcdCAqIG1lc2ggaW50ZXJmYWNlXFxuIDYxMjpcXHQgKlxcbiA2MTM6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS5cXG4gNjE0OlxcdCAqL1xcbiA2MTU6XFx0c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxcbiA2MTY6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNjE3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MTcuODM4Njc4NDI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDQ4ODEyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRG91YmxlLUZyZWUgQWxlcnQ6IEludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZMQU4gTWVtb3J5IENvcnJ1cHRpb24gaW4gQkFUTUFOIEFkdmFuY2VkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNsZWFudXAgcHJvY2VzcyBmb3IgVkxBTnMgaW4gQkFUTUFOIEFkdmFuY2VkLCBzcGVjaWZpY2FsbHkgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgcmlnaHQsIHRoaXMgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLlwiIFN0YW5kYXJkIGNsZWFudXAgcHJvY2VkdXJlLCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIHlldC4gQnV0IHRoZW4gYSByZWQgZmxhZyBwb3BzIHVwLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLCB3aGljaCByZWxlYXNlcyB0aGUgVkxBTiwgYW5kIHRoZW4gbGF0ZXIgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFsc28gY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIG9uIHRoZSAqc2FtZSogVkxBTiwgd2UndmUgZ290IGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvIGhlcmUhIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgdGhhdCdzICpiYWQqLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGJlaW5nIGNhbGxlZCB0byBzZWUgaWYgdGhpcyBpcyBhbiBpc3N1ZS4gTGV0J3Mgc2VlIGlmIHRoZSBtZXNoaWYgbmV0bGluayBkZXN0cnVjdGlvbiBwbGF5cyBhIHJvbGUgaGVyZS4gSSdtIGdvaW5nIHRvIGxvb2sgaW50byBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBoaW50IG9mIHRoaXMgaXNzdWUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDoyMS42ODM1NjI2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgyLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgyOlxcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxcbjEwODM6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbjEwODQ6XFx0e1xcbjEwODU6XFx0XFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG1lc2hfaWZhY2UpO1xcbjEwODY6XFx0XFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xcbjEwODc6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4xMDg4OlxcdFxcbjEwODk6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZtZXNoX2lmYWNlLVxcdTAwM2VhZGpfbGlzdC5sb3dlcikpIHtcXG4xMDkwOlxcdFxcdFxcdGhhcmRfaWZhY2UgPSBuZXRkZXZfYWRqYWNlbnRfZ2V0X3ByaXZhdGUobWVzaF9pZmFjZS1cXHUwMDNlYWRqX2xpc3QubG93ZXIubmV4dCk7XFxuMTA5MTpcXHRcXHRcXHRiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpO1xcbjEwOTI6XFx0XFx0fVxcbjEwOTM6XFx0XFxuMTA5NDpcXHRcXHQvKiBkZXN0cm95IHRoZSBcXFwidW50YWdnZWRcXFwiIFZMQU4gKi9cXG4xMDk1OlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpO1xcbjEwOTY6XFx0XFx0aWYgKHZsYW4pIHtcXG4xMDk3OlxcdFxcdFxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG4xMDk4OlxcdFxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuMTA5OTpcXHRcXHR9XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKG1lc2hfaWZhY2UsIGhlYWQpO1xcbjExMDI6XFx0fVxcbjExMDM6XFx0XFxuMTEwNDpcXHQvKipcXG4xMTA1OlxcdCAqIGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQoKSAtIENoZWNrIHdoZXRoZXIgZGV2aWNlIGlzIGEgYmF0YWR2IG1lc2ggaW50ZXJmYWNlXFxuMTEwNjpcXHQgKiBAbmV0X2RldjogZGV2aWNlIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkXFxuMTEwNzpcXHQgKlxcbjExMDg6XFx0ICogUmV0dXJuOiB0cnVlIHdoZW4gbmV0X2RldiBpcyBhIGJhdG1hbi1hZHYgaW50ZXJmYWNlLCBmYWxzZSBvdGhlcndpc2VcXG4xMTA5OlxcdCAqL1xcbjExMTA6XFx0Ym9vbCBiYXRhZHZfbWVzaGlmX2lzX3ZhbGlkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxcbjExMTE6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDoyMS42ODM2ODIxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk5MDYzNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRvdWJsZS1DaGVja2luZyBWTEFOIEhhbmRsaW5nIGluIE1lc2ggSW50ZXJmYWNlIERlc3RydWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBhbmQgbm90aWNlZCB0aGlzIGJsb2NrIG9mIGNvZGU6XG5cbmBgYGNcblx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7XG5cdGlmICh2bGFuKSB7XG5cdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuXHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5cdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGhhbmcgb24sIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGl0c2VsZiwgYXJlbid0IHdlIGRvaW5nIGEgZG91YmxlIGBwdXRgIGhlcmUgaW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYD8gVGhhdCB3b3VsZCBiZSBhIG1lbW9yeSBsZWFrIHdhaXRpbmcgdG8gaGFwcGVuLCBvciB3b3JzZS5cblxuQnV0LCBiZWZvcmUganVtcGluZyB0byBjb25jbHVzaW9ucywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIEkgbmVlZCB0byBjb25maXJtIHdoYXQgaXQgYWN0dWFsbHkgZG9lcyB3aXRoIHRoZSBWTEFOIGVudHJ5LiBEb2VzIGl0IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0PyBJZiBpdCBkb2VzLCB0aGVuIHRoZSBzZWNvbmQgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIG1pZ2h0IGJlIHNhZmUsIHRob3VnaCBzdGlsbCBpbmVmZmljaWVudC4gTGV0J3Mgc2VlLi4uIEFoLCBubywgaXQgKmRvZXNuJ3QqIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBcblxuT2theSwgbm93IGxldCdzIGRvdWJsZS1jaGVjayB0aGUgbG9naWMgd2l0aGluIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YC4gR290dGEgYmUgc3VyZSBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MjYuMDgyNzQ4NjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODM2NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl9tZXNoaWZfdmxhbl9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21haW4uYz02MDc9Ym9vbCBiYXRhZHZfdmxhbl9hcF9pc29sYV9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTYxNy1cXHRcXHRhcF9pc29sYXRpb25fZW5hYmxlZCA9IGF0b21pY19yZWFkKFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24pO1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYzo2MTg6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtNjE5LVxcdH1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTQ1PWludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTUyLVxcdGlmICh2bGFuKSB7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1NTM6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU1NC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4MS1cXHQvKiBkb24ndCByZXR1cm4gcmVmZXJlbmNlIHRvIG5ldyBtZXNoaWZfdmxhbiAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTgyOlxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODMtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU5Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MDAtXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2MDE6XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwMi19XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTEwODI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTctXFx0XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5ODpcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5OS1cXHR9XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oPTI1PXN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKmJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMjgtLyoqXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaDoyOTogKiBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KCkgLSBkZWNyZWFzZSB0aGUgdmxhbiBvYmplY3QgcmVmY291bnRlciBhbmRcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTMwLSAqICBwb3NzaWJseSByZWxlYXNlIGl0XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTMyLSAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg6MzM6c3RhdGljIGlubGluZSB2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQoc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTM0LXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYz0xNzI9c3RhdGljIGludCBiYXRhZHZfbmV0bGlua19tZXNoX2ZpbGxfYXBfaXNvbGF0aW9uKHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTgyLVxcdGFwX2lzb2xhdGlvbiA9IGF0b21pY19yZWFkKFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24pO1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoxODM6XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTg0LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTE5Nj1zdGF0aWMgaW50IGJhdGFkdl9uZXRsaW5rX3NldF9tZXNoX2FwX2lzb2xhdGlvbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTIwNS1cXHRhdG9taWNfc2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24sICEhbmxhX2dldF91OChhdHRyKSk7XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjIwNjpcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0yMDctXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9MTM3ND1zdGF0aWMgdm9pZCBiYXRhZHZfcG9zdF9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTEzOTAtXFx0XFx0dmxhbiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoxMzkxOlxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTEzOTItXFx0fVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMTc9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjIzLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MjI0OlxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodHRfbG9jYWxfZW50cnktXFx1MDAzZXZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjI1LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yOTM9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfbW9kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTMwMy1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjMwNDpcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzA1LX1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTA3ND1iYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMDkzLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTA5NDpcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTA5NS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzcyMD1ib29sIGJhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1OCAqc3JjLCB1OCAqZHN0LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ5LXZsYW5fcHV0Olxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6Mzc1MDpcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzc1MS1cXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDoyNi4xNDQ1OTA3MDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxODE2NTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBWTEFOIFJlbW92YWwgaW4gQkFUTUFOIEFkdmFuY2VkKipcblxuSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICphY3R1YWxseSogcmVtb3ZpbmcgdGhlIFZMQU4gZW50cnkgZnJvbSB0aGUgaW50ZXJuYWwgVkxBTiBsaXN0PyBUaGF0IGp1c3QgZG9lc24ndCBzb3VuZCByaWdodCwgYW5kIEknbSBwcmV0dHkgc3VyZSBpdCdzIG5vdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIFNlZW1zIGxpa2UgaXQgd291bGQgYmUgYSBtaXNzZWQgb3Bwb3J0dW5pdHkgdG8gcmVsZWFzZSB0aGUgVkxBTiByZXNvdXJjZS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBkb3VibGUtY2hlY2suIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb24gaG93IHRoZSBWTEFOcyBhcmUgdHJ1bHkgbWFuYWdlZC4gVGhlIHJlYWwgbG9naWMgZm9yIHJlbGVhc2luZyBWTEFOcyBpbiB0aGlzIGNvbnRleHQgaXMgbW9zdCBsaWtlbHkgd2l0aGluIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAuIEknbGwgZGlnIGludG8gdGhhdCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZMQU4gbGlzdCB0byBjb25maXJtIG9yIHJlZnV0ZSBteSBpbml0aWFsIHRob3VnaHQuIEl0IHNlZW1zIGxpa2UgdGhlIG1vcmUgbGlrZWx5IHBsYWNlIGZvciB0aGUgYWN0dWFsIHVubGlua2luZyBhbmQgY2xlYW51cC4gSSBiZXQgaXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjMwLjA2Mjc1OTQ5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1OTg1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NDAyPXZvaWQgYmF0YWR2X2ludGVyZmFjZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDkxLS8qKlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NDkyOiAqIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKCkgLSByZWxlYXNlIHZsYW4gZnJvbSBsaXN0cyBhbmQgcXVldWUgZm9yIGZyZWVcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ5My0gKiAgYWZ0ZXIgcmN1IGdyYWNlIHBlcmlvZFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00OTUtICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo0OTY6dm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDk3LXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg9MjM9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oOjI0OnZvaWQgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaC0yNS1zdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICpiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oPTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTM3LVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg6Mzg6XFx0a3JlZl9wdXQoXFx1MDAyNnZsYW4tXFx1MDAzZXJlZmNvdW50LCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZSk7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaC0zOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjMwLjEyNDM2MDM2NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTE5OTc5MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIERlc3RydWN0aW9uIGluIGJhdGFkdioqXG5cbk9rYXksIHNvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBpcyBiYXNpY2FsbHkganVzdCBhIGBrcmVmX3B1dGAuICBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmVyZW5jZSBjb3VudGVyIGRlY3JlbWVudC4gTm90aGluZyBmYW5jeSBoZXJlLlxuXG5Ob3csIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgdGhhdCwgc28gaXQncyBjbGVhcmx5IHBhcnQgb2YgdGhlIGNsZWFudXAgcHJvY2Vzcy4gIEl0IGxvb2tzIGxpa2UgaXQgcmVtb3ZlcyBhIFRUIGxvY2FsIGVudHJ5IGZpcnN0LiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGBOT1BVUkdFYCwgc28gaXQncyBhbiBleHBsaWNpdCByZW1vdmFsLlxuXG5MZXQncyB0cmFjZSB0aGlzIGJhY2suICBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYC4gQ3J1Y2lhbGx5LCBpdCBmaXJzdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHdoaWNoICpnZXRzKiBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTi4gVGhhdCdzICsxLiBUaGVuLCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGlzIGNhbGxlZC4gSXQgZHJvcHMgYSByZWZlcmVuY2UuIEJ1dCB3aGljaCBvbmU/IElzIGl0IGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGdvdCwgdGhlIGxpc3QgcmVmZXJlbmNlPyBPciBkb2VzIGl0IHRha2UgYSBjb3B5IGFuZCBkcm9wIHRoYXQ/IEkgbmVlZCB0byBrbm93IGhvdyB0aGUgcmVmZXJlbmNlIGlzIGhlbGQuXG5cbkFuZCB0aGVuLCAqYWZ0ZXIqIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXMgY2FsbGVkLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgICphZ2FpbiouIFNvLCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWZlcmVuY2UsIGFuZCB0aGUgY2FsbGluZyBmdW5jdGlvbiBkcm9wcyBhbm90aGVyISBUaGlzIGlzIHRvIGhhbmRsZSB0aGUgcmVmZXJlbmNlIHRha2VuIGJ5IGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgc28gdGhlIHZsYW4gb2JqZWN0IGNhbiBiZSBmcmVlZC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgZnVuY3Rpb24gdG8gYmUgY2VydGFpbiBleGFjdGx5IHdoYXQgaGFwcGVucyB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgaGl0cyB6ZXJvLiBEb2VzIGl0IGhhbmRsZSBsaXN0IHJlbW92YWwsIG9yIGRvZXMgdGhlIGxpc3QgbWFuYWdlbWVudCBoYXBwZW4gZWxzZXdoZXJlP1xuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjM3LjA0NDM0Mjc1OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTI6XFx0ICogYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2UoKSAtIHJlbGVhc2UgdmxhbiBmcm9tIGxpc3RzIGFuZCBxdWV1ZSBmb3IgZnJlZVxcbiA0OTM6XFx0ICogIGFmdGVyIHJjdSBncmFjZSBwZXJpb2RcXG4gNDk0OlxcdCAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgdmxhbiBvYmplY3RcXG4gNDk1OlxcdCAqL1xcbiA0OTY6XFx0dm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbiA0OTc6XFx0e1xcbiA0OTg6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4gNDk5OlxcdFxcbiA1MDA6XFx0XFx0dmxhbiA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4sIHJlZmNvdW50KTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2bGFuLVxcdTAwM2ViYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcXG4gNTAzOlxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNnZsYW4tXFx1MDAzZWxpc3QpO1xcbiA1MDQ6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZsYW4tXFx1MDAzZWJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1MDU6XFx0XFxuIDUwNjpcXHRcXHRrZnJlZV9yY3UodmxhbiwgcmN1KTtcXG4gNTA3OlxcdH1cXG4gNTA4OlxcdFxcbiA1MDk6XFx0LyoqXFxuIDUxMDpcXHQgKiBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KCkgLSBnZXQgdGhlIHZsYW4gb2JqZWN0IGZvciBhIHNwZWNpZmljIHZpZFxcbiA1MTE6XFx0ICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuIDUxMjpcXHQgKiBAdmlkOiB0aGUgaWRlbnRpZmllciBvZiB0aGUgdmxhbiBvYmplY3QgdG8gcmV0cmlldmVcXG4gNTEzOlxcdCAqXFxuIDUxNDpcXHQgKiBSZXR1cm46IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIHZsYW4gbWF0Y2hpbmcgdGhlIHZpZCBwYXNzZWQgYXMgYXJndW1lbnQgb3JcXG4gNTE1OlxcdCAqIE5VTEwgb3RoZXJ3aXNlLiBUaGUgcmVmY291bnRlciBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0IGlzIGluY3JlbWVudGVkIGJ5IDEuXFxuIDUxNjpcXHQgKi9cXG4gNTE3OlxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKmJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gNTE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgc2hvcnQgdmlkKVxcbiA1MTk6XFx0e1xcbiA1MjA6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbl90bXAsICp2bGFuID0gTlVMTDtcXG4gNTIxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDozNy4wNDQ0NTQ3ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxOTAxMDY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gdGhlIFZMQU4gUmVsZWFzZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gZm9yIHJlbW92aW5nIGEgVkxBTiBmcm9tIHRoZSByZWxldmFudCBsaXN0LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBkZS1hbGxvY2F0aW9uIGZ1bmN0aW9uLiBUaGUgd2F5IGl0IHdvcmtzLCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIGlzIHRoYXQgdGhlIGxpc3QgaXRzZWxmIG1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTi4gSW4gb3RoZXIgd29yZHMsIHRoZSBsaXN0IGlzIHRyYWNraW5nIHRoaXMgcGFydGljdWxhciB2bGFuLiBUaGUgYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBmdW5jdGlvbiBpcyBsaWtlbHkgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBoaXRzIHplcm8uIEF0IHRoYXQgcG9pbnQsIHRoZSBsaXN0IGVudHJ5IGNhbiBzYWZlbHkgYmUgcmVtb3ZlZCBiZWNhdXNlIG5vdGhpbmcgZWxzZSBpcyB1c2luZyBpdC5cblxuQnV0Li4uIGhhbmcgb24uIElmIHRoZSBsaXN0ICpob2xkcyogYSByZWZlcmVuY2UsIHdoZW4gYW5kIHdoZXJlIGlzIHRoYXQgcmVmZXJlbmNlIGFjdHVhbGx5ICpkcm9wcGVkKj8gSSBuZWVkIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBWTEFOIG1vcmUgY2xvc2VseSB0byB1bmRlcnN0YW5kIHRoZSBvd25lcnNoaXAuIExldCBtZSBjaGVjayBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgdG8gc2VlIGhvdyBpdCdzIGhhbmRsZWQgb24gdGhlIGNyZWF0aW9uIHNpZGUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBsaXN0IGdhaW5zIHRoZSByZWZlcmVuY2UgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hlcmUgdGhlIGFzc29jaWF0ZWQgcmVsZWFzZSBvY2N1cnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6NDAuNTYzNDY4NDk0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0NTpcXHRpbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuIDU0NjpcXHR7XFxuIDU0NzpcXHRcXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NTA6XFx0XFxuIDU1MTpcXHRcXHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcXG4gNTUyOlxcdFxcdGlmICh2bGFuKSB7XFxuIDU1MzpcXHRcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbiA1NTQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NTU6XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIDU1NjpcXHRcXHR9XFxuIDU1NzpcXHRcXG4gNTU4OlxcdFxcdHZsYW4gPSBremFsbG9jX29iaigqdmxhbiwgR0ZQX0FUT01JQyk7XFxuIDU1OTpcXHRcXHRpZiAoIXZsYW4pIHtcXG4gNTYwOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcXG4gNTYxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA1NjI6XFx0XFx0fVxcbiA1NjM6XFx0XFxuIDU2NDpcXHRcXHR2bGFuLVxcdTAwM2ViYXRfcHJpdiA9IGJhdF9wcml2O1xcbiA1NjU6XFx0XFx0dmxhbi1cXHUwMDNldmlkID0gdmlkO1xcbiA1NjY6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZ2bGFuLVxcdTAwM2VyZWZjb3VudCk7XFxuIDU2NzpcXHRcXG4gNTY4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnZsYW4tXFx1MDAzZWFwX2lzb2xhdGlvbiwgMCk7XFxuIDU2OTpcXHRcXG4gNTcwOlxcdFxcdGtyZWZfZ2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VyZWZjb3VudCk7XFxuIDU3MTpcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNnZsYW4tXFx1MDAzZWxpc3QsIFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdCk7XFxuIDU3MjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdC8qIGFkZCBhIG5ldyBUVCBsb2NhbCBlbnRyeS4gVGhpcyBvbmUgd2lsbCBiZSBtYXJrZWQgd2l0aCB0aGUgTk9QVVJHRVxcbiA1NzU6XFx0XFx0ICogZmxhZ1xcbiA1NzY6XFx0XFx0ICovXFxuIDU3NzpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLFxcbiA1Nzg6XFx0XFx0XFx0XFx0ICAgIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkciwgdmlkLFxcbiA1Nzk6XFx0XFx0XFx0XFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcXG4gNTgwOlxcdFxcbiA1ODE6XFx0XFx0LyogZG9uJ3QgcmV0dXJuIHJlZmVyZW5jZSB0byBuZXcgbWVzaGlmX3ZsYW4gKi9cXG4gNTgyOlxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDo0MC41NjM2MTI0MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwMTQ1NDg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJhdGFkdiBWTEFOIFJlZmVyZW5jZSBDb3VudGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBWTEFOIHJlZmVyZW5jZSBjb3VudGluZyBpbiBiYXRhZHYuIEluaXRpYWxseSwgaW4gYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLCB3ZSBpbml0aWFsaXplIHRoZSBgdmxhbi1cdTAwM2VyZWZjb3VudGAgdG8gMS4gVGhlbiB3ZSBpbmNyZW1lbnQgaXQgdG8gMiwgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgbGlzdC4gV2UgKmltbWVkaWF0ZWx5KiBkZWNyZW1lbnQgaXQgYmFjayB0byAxIHZpYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFRoaXMgdGVsbHMgbWUgdGhlIGxpc3QgaXRzZWxmIGhvbGRzIHRoZSAqcHJpbWFyeSogcmVmZXJlbmNlLiBUaGlzIHNlZW1zIHNlbnNpYmxlLiBXaGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZ2V0cyBjYWxsZWQsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO2AsIHdoaWNoICpzaG91bGQqIGRyb3AgdGhlIGxpc3QncyByZWZlcmVuY2UuXG5cbkFoISBOb3cgSSBzZWUuIFdoZW4gdGhlIGxpc3QgZHJvcHMgaXRzIHJlZmVyZW5jZSwgaWYgbm8gb3RoZXIgcGFydCBvZiB0aGUgY29kZSBoYXMgYSBob2xkIG9uIHRoZSByZWZlcmVuY2UsIHRoZSByZWZjb3VudCBiZWNvbWVzIHplcm8gYW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgKnNob3VsZCogZ2V0IGNhbGxlZCwgYW5kIHRoYXQncyB3aGVuIHRoZSBsaXN0IHJlbW92ZXMgdGhlIG9iamVjdC4gR29vZC5cblxuT2theSwgbGV0IG1lIGNoZWNrIHRoZSBcImtpbGxlclwiLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdCB0byBzZWUuIEl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB0byBnZXQgYSByZWZlcmVuY2UgKHJlZmNvdW50ID0gMiksIHRoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB0byBkZXN0cm95IGl0IChyZWZjb3VudCA9IDEpLCBhbmQgKmZpbmFsbHkqIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBvbiBpdHMgKm93biogcmVmZXJlbmNlLCBkcm9wcGluZyB0aGUgY291bnQgdG8gemVyby4gVGhhdCBtYWtlcyBzZW5zZSEgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb3JyZWN0bHkgbWFuYWdlcyB0byBkZWNyZW1lbnQgdGhlIGxpc3QgcmVmZXJlbmNlLCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIG1hbmFnZXMgdG8gZHJvcCBpdHMgcmVmZXJlbmNlLlxuXG5Tbywgd2h5IGRpZCBhIHBhdGNoIHJlbW92ZSB0aGF0ICpmaW5hbCogYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgPyBUaGF0IHNlZW1zIGxpa2UgaXQgY291bGQgbGVhZCB0byBhIGxlYWshIExldCBtZSBnbyBhbmQgY2hlY2sgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYC4gVGhhdCBtaWdodCByZXZlYWwgd2h5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc5OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjQ3LjQ2NTA3MDY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODI6XFx0c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuMTA4NDpcXHR7XFxuMTA4NTpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XFxuMTA4NjpcXHRcXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XFxuMTA4NzpcXHRcXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xcbjEwODg6XFx0XFxuMTA4OTpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNm1lc2hfaWZhY2UtXFx1MDAzZWFkal9saXN0Lmxvd2VyKSkge1xcbjEwOTA6XFx0XFx0XFx0aGFyZF9pZmFjZSA9IG5ldGRldl9hZGphY2VudF9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLVxcdTAwM2VhZGpfbGlzdC5sb3dlci5uZXh0KTtcXG4xMDkxOlxcdFxcdFxcdGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XFxuMTA5MjpcXHRcXHR9XFxuMTA5MzpcXHRcXG4xMDk0OlxcdFxcdC8qIGRlc3Ryb3kgdGhlIFxcXCJ1bnRhZ2dlZFxcXCIgVkxBTiAqL1xcbjEwOTU6XFx0XFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7XFxuMTA5NjpcXHRcXHRpZiAodmxhbikge1xcbjEwOTc6XFx0XFx0XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbjEwOTg6XFx0XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4xMDk5OlxcdFxcdH1cXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUobWVzaF9pZmFjZSwgaGVhZCk7XFxuMTEwMjpcXHR9XFxuMTEwMzpcXHRcXG4xMTA0OlxcdC8qKlxcbjExMDU6XFx0ICogYmF0YWR2X21lc2hpZl9pc192YWxpZCgpIC0gQ2hlY2sgd2hldGhlciBkZXZpY2UgaXMgYSBiYXRhZHYgbWVzaCBpbnRlcmZhY2VcXG4xMTA2OlxcdCAqIEBuZXRfZGV2OiBkZXZpY2Ugd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWRcXG4xMTA3OlxcdCAqXFxuMTEwODpcXHQgKiBSZXR1cm46IHRydWUgd2hlbiBuZXRfZGV2IGlzIGEgYmF0bWFuLWFkdiBpbnRlcmZhY2UsIGZhbHNlIG90aGVyd2lzZVxcbjExMDk6XFx0ICovXFxuMTExMDpcXHRib29sIGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpXFxuMTExMTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjQ3LjQ2NTE5NTc5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzUxNDQ2NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIERlc3RydWN0aW9uIGluIEJhdG1hbi1hZHYgTWVzaCBJbnRlcmZhY2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBhbmQgSSBzZWUgdGhpcyBjb2RlIGJsb2NrOlxuXG5gYGBjXG5cdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpO1xuXHRpZiAodmxhbikge1xuXHRcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcblx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuXHR9XG5gYGBcblxuVGhhdCBsb29rcyBzdGFuZGFyZCBlbm91Z2gsIGdldCBhIFZMQU4sIGRlc3Ryb3kgaXQsIHJlbGVhc2UgaXQuIEJ1dCB3YWl0Li4uIGRpZG4ndCBJIHNlZSBzb21ldGhpbmcgYWJvdXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNoYW5naW5nIHJlY2VudGx5PyBDb3VsZCBpdCBiZSB0aGF0IHRoZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uIHdhcyBtb2RpZmllZCB0byBoYW5kbGUgdGhlIHJlbGVhc2UgaXRzZWxmPyBObywgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2U7IHRoYXQgc2VlbXMgbGlrZSB0b28gYnJvYWQgYSBjaGFuZ2UgZm9yIHN1Y2ggYSBzbWFsbCB0aGluZywgYW5kIGFueXdheSwgdGhlIGNvbW1pdCBsb2cgZGlkbid0IHN1Z2dlc3QgdGhhdC4gTGV0J3MgZG91YmxlLWNoZWNrIHRoYXQgcGF0Y2guXG5cbipTY2FucyB0aGUgcGF0Y2ggZGlmZi4uLipcblxuYGBgZGlmZlxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuQEAgLTY5MSw5ICs2OTEsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIFxuIFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIFxuLVx0LyogZmluYWxseSBmcmVlIHRoZSB2bGFuIG9iamVjdCAqL1xuLVx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbmBgYFxuXG5BaGEhIEl0ICpkaWQqIHJlbW92ZSB0aGUgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLiBXaHk/IElzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgbm93IHJlc3BvbnNpYmxlIGZvciBib3RoIHRoZSBkZXN0cm95IGFuZCB0aGUgcHV0IG9wZXJhdGlvbnM/IExldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBmaW5kIG91dC4gVGhpcyBpcyBzdGFydGluZyB0byBsb29rIGxpa2UgdGhlIGNvbW1pdCBoYWQgc29tZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHdhc24ndCBjaGFuZ2VkIHRvIGFsc28gZHJvcCBhIHJlZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDo1My4yMTY2NDUxNzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg4OlxcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG4gNTg5OlxcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiA1OTA6XFx0ICogQHZsYW46IHRoZSBvYmplY3QgdG8gcmVtb3ZlXFxuIDU5MTpcXHQgKi9cXG4gNTkyOlxcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIDU5MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG4gNTk0OlxcdHtcXG4gNTk1OlxcdFxcdC8qIGV4cGxpY2l0bHkgcmVtb3ZlIHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGJlY2F1c2UgaXQgaXMgbWFya2VkXFxuIDU5NjpcXHRcXHQgKiB3aXRoIHRoZSBOT1BVUkdFIGZsYWdcXG4gNTk3OlxcdFxcdCAqL1xcbiA1OTg6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLFxcbiA1OTk6XFx0XFx0XFx0XFx0ICAgICAgIHZsYW4tXFx1MDAzZXZpZCwgXFxcInZsYW4gaW50ZXJmYWNlIGRlc3Ryb3llZFxcXCIsIGZhbHNlKTtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4gNjAyOlxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0LyoqXFxuIDYwNTpcXHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2MDY6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjA3OlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6NTMuMjE2NzgzNjg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjc1NDg1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmZXJlbmNlIENvdW50aW5nIEFub21hbHkgaW4gYmF0YWR2IFZMQU4gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBpcyBzdGFydGluZyB0byBuYWcgYXQgbWUuIEl0IGxvb2tzIGxpa2UgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGRyb3BwaW5nIGEgcmVmZXJlbmNlLiBCdXQsIHRoZSBmdW5jdGlvbiBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgcmV0dXJucyBhIHJlZmVyZW5jZSwgYXMgaXQgc2hvdWxkLiBOb3csIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHNvIGl0IGFjcXVpcmVzIGEgcmVmZXJlbmNlLiBUaGVuLCBjcnVjaWFsbHksIGl0IHN1YnNlcXVlbnRseSBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLiBTbyBmYXIsIHNvIGdvb2QuIFRoZSAqcHJvYmxlbSogaXMgdGhhdCBpZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKmRvZXNuJ3QqIGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGFmdGVyIHRoZSBjYWxsIHRvIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIHRoZW4gd2UndmUgZ290IGEgcmVmZXJlbmNlIGxlYWsuXG5cblVubGVzcy4uLiB1bmxlc3MgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyAqYm90aCogcmVmZXJlbmNlcyBzb21laG93PyBObywgdGhhdCdzIG5vdCByaWdodC4gSXQgb25seSBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgb25jZS4gSeKAmW0gcHJldHR5IHN1cmUgaXQgb25seSBkcm9wcyBvbmUuXG5cbldhaXQsIGl0J3MgcG9zc2libGUgdGhpcyB3YXMgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCBjb21taXQuIERhbW4gaXQsIHRoZSBzb3VyY2UgY29kZSdzIGEgYml0IG9mIGEgbWVzcy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBnaXQgbG9nIG9mIGBuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgaXRzIGJlaGF2aW9yIGhhc24ndCBjaGFuZ2VkLiBMZXQncyBzZWUgaWYgd2UgY2FuIGh1bnQgZG93biBhIGZpeCwgb3IgaWYgdGhpcyAqaXMqIGEgbGVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDo1Ny45NDQzMzU2MTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzU5MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODctLyoqXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1ODg6ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg5LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTEtICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1OTI6c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5My1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NjcwPXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5MS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY5MjpcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTMtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTEwODI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTYtXFx0aWYgKHZsYW4pIHtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjEwOTc6XFx0XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5OC1cXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDo1OC4wMDk3MDc2MTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4Njc4NzkxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCYXRhZHYgVkxBTiBEZXN0cnVjdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgd2UncmUgZGVzdHJveWluZyB0aGUgVkxBTiwgc28gd2UgbmVlZCB0byByZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggaXQuXG5cbkJ1dCB0aGVuLCBpbnNpZGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCwgSSBzZWUgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGJlaW5nIGNhbGxlZC4gTm93LCB0aGF0J3MgaW50ZXJlc3RpbmcuIERvZXMgdGhpcyBjYWxsIGFjdHVhbGx5IGRlY3JlbWVudCBhIHJlZmVyZW5jZSBjb3VudD8gSXMgdGhlcmUgYSBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgYnVyaWVkIGluIGhlcmU/IEkgcmVhbGx5IG5lZWQgdG8gY29uZmlybSB0aGF0LiBJIGtub3cgdGhlIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCBmdW5jdGlvbiBpdHNlbGYgaXMgd2hlcmUgdGhlIGNyaXRpY2FsIHJlZmVyZW5jZSBoYW5kbGluZyB0YWtlcyBwbGFjZSwgc28gSSBiZXR0ZXIgZ28gZGl2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcuIEdvdHRhIGNvbmZpcm0gdGhhdCByZWZlcmVuY2UgZHJvcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6MTAuODc3NTkwOTUxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQwMzQ5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X3R0X2xvY2FsX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMTI9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMzAtXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZsYW4sIFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdCwgbGlzdCkge1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTMxOlxcdFxcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIG9sZF9hZGRyLCB2bGFuLVxcdTAwM2V2aWQsXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMzItXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtYWMgYWRkcmVzcyBjaGFuZ2VkXFxcIiwgZmFsc2UpO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01OTI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTk3LVxcdCAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTk4OlxcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkcixcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5OS1cXHRcXHRcXHQgICAgICAgdmxhbi1cXHUwMDNldmlkLCBcXFwidmxhbiBpbnRlcmZhY2UgZGVzdHJveWVkXFxcIiwgZmFsc2UpO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9NjgxPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF9tbGFfdHRfcmV0cmFjdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjkzLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjY5NDpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBtY2FzdF9lbnRyeS1cXHUwMDNlYWRkcixcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy02OTUtXFx0XFx0XFx0XFx0ICAgICAgIEJBVEFEVl9OT19GTEFHUyxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTIxNz1iYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTIzNS0vKipcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEyMzY6ICogYmF0YWR2X3R0X2xvY2FsX3JlbW92ZSgpIC0gbG9naWNhbGx5IHJlbW92ZSBhbiBlbnRyeSBmcm9tIHRoZSBsb2NhbCB0YWJsZVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTIzNy0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI0NC0gKi9cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEyNDU6dTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMjQ2LVxcdFxcdFxcdCAgIHVuc2lnbmVkIHNob3J0IHZpZCwgY29uc3QgY2hhciAqbWVzc2FnZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTU4OT1zdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xNzI1LVxcdC8qIHJlbW92ZSBhZGRyZXNzIGZyb20gbG9jYWwgaGFzaCBpZiBwcmVzZW50ICovXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNzI2OlxcdGxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgdHRfYWRkciwgdmlkLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTcyNy1cXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJnbG9iYWwgdHQgcmVjZWl2ZWRcXFwiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaD0xOT1ib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgtMjAtXFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZpZCwgaW50IGlmaW5kZXgsIHUzMiBtYXJrKTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oOjIxOnUxNiBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaC0yMi1cXHRcXHRcXHQgICBjb25zdCB1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNToxMS4xMjE2MzMzNTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg5NjM0ODc1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gVkxBTiBDbGVhbnVwIGluIEJhdGFkdioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB3YXMgcmVzcG9uc2libGUgZm9yIGNvbXBsZXRlbHkgY2xlYW5pbmcgdXAgdGhlIFZMQU4gY29udGV4dCwgaW5jbHVkaW5nIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgdG8gdGhlIGxpc3QuIEJ1dCBzb21ldGhpbmcgZG9lc24ndCBmZWVsIHJpZ2h0LiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IGl0ICptaWdodCogYmUgbWlzc2luZyBhIHN0ZXAgdGhlcmUuXG5cbkxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLCB0aG91Z2guIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgYXNzdW1pbmcgYSBidWcsIGxldCdzIHRyYWNlIHRoZSBsb2dpYyBmbG93LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbiwgYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCwgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0LiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGVudGlyZSByZWxlYXNlIHByb2Nlc3MsIHBheWluZyBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyBsaXN0IHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgdGhyb3VnaG91dC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHRydWUgZGUtYWxsb2NhdGlvbiBsb2dpYyB3aWxsIGJlIHByZXNlbnQsIG9yIGF0IGxlYXN0IHRoZSBjb3VudGVycGFydCB0aGF0IGlzIG1pc3NpbmcgZnJvbSB0aGUgZGVzdHJveSBmdW5jdGlvbi4gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGUgaXNzdWUgY2FuIGJlIGxvY2F0ZWQgdGhpcyB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6MzAuMDg1MTIzODkzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5NjpcXHR2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuIDQ5NzpcXHR7XFxuIDQ5ODpcXHRcXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xcbiA0OTk6XFx0XFxuIDUwMDpcXHRcXHR2bGFuID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiwgcmVmY291bnQpO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZsYW4tXFx1MDAzZWJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1MDM6XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCk7XFxuIDUwNDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dmxhbi1cXHUwMDNlYmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuIDUwNTpcXHRcXG4gNTA2OlxcdFxcdGtmcmVlX3JjdSh2bGFuLCByY3UpO1xcbiA1MDc6XFx0fVxcbiA1MDg6XFx0XFxuIDUwOTpcXHQvKipcXG4gNTEwOlxcdCAqIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSAtIGdldCB0aGUgdmxhbiBvYmplY3QgZm9yIGEgc3BlY2lmaWMgdmlkXFxuIDUxMTpcXHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4gNTEyOlxcdCAqIEB2aWQ6IHRoZSBpZGVudGlmaWVyIG9mIHRoZSB2bGFuIG9iamVjdCB0byByZXRyaWV2ZVxcbiA1MTM6XFx0ICpcXG4gNTE0OlxcdCAqIFJldHVybjogdGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgdmxhbiBtYXRjaGluZyB0aGUgdmlkIHBhc3NlZCBhcyBhcmd1bWVudCBvclxcbiA1MTU6XFx0ICogTlVMTCBvdGhlcndpc2UuIFRoZSByZWZjb3VudGVyIG9mIHRoZSByZXR1cm5lZCBvYmplY3QgaXMgaW5jcmVtZW50ZWQgYnkgMS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6MzAuMDg1MjMzMjUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5OTU1ODU2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuYCBSZWZlcmVuY2UgQ291bnQgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgdGhlIGtleSDigJMgaXQncyB3aGF0IHJlbW92ZXMgdGhlIFZMQU4gb2JqZWN0IGZyb20gdGhlIGxpc3QuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoZSBsaXN0ICpkaWRuJ3QqIGhvbGQgYSByZWZlcmVuY2UuIEJ1dCB3YWl0LCBpZiB0aGF0IHdlcmUgdHJ1ZSwgdGhlbiBob3cgaXMgdGhlIHJlZmNvdW50IGV2ZXIgZGVjcmVtZW50ZWQ/IExldCdzIHRyYWNlIGl0IHRocm91Z2g6IGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCBpbml0aWFsaXplcyB0aGUgcmVmY291bnQgdG8gMSB3aXRoIGBrcmVmX2luaXRgLiBUaGVuLCBga3JlZl9nZXRgIGluY3JlbWVudHMgaXQgdG8gMi4gVGhlIG9iamVjdCBpcyBhZGRlZCB0byB0aGUgbGlzdCBhbmQgdGhlbiAqaW1tZWRpYXRlbHkqIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGlzIGNhbGxlZCwgZHJvcHBpbmcgdGhlIGNvdW50IGJhY2sgdG8gMS4gU28sIHRoZSBsaXN0ICpkb2VzKiBpbmRlZWQgaG9sZCBhIHJlZmVyZW5jZSwgYW5kIHRoYXQgcmVmZXJlbmNlIGlzIHRoZSBvbmUgdGhhdCBicmluZ3MgdGhlIGNvdW50IHRvIDEuXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgd2hlbiBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzIGNhbGxlZCwgdGhlIHJlZmNvdW50ICptdXN0KiBoYXZlIGhpdCAwLiBUaGF0J3MgaG93IHdlIGtub3cgaXQncyB0aW1lIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBIb3dldmVyLCBpZiB0aGUgbGlzdCBpcyBob2xkaW5nIGEgcmVmZXJlbmNlLCBob3cgY2FuIGl0IGV2ZXIgaGl0IDA/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0LlxuXG5BbHJpZ2h0LCB3aG8ncyByZXNwb25zaWJsZSBmb3IgZGVjcmVtZW50aW5nIHRoZSByZWZjb3VudD8gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFNvIHRoYXQgZHJvcHMgYSByZWZlcmVuY2UuIEJ1dCB0aGVuIEkgc2F3IHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgd2hpY2ggZ2l2ZXMgdGhlIHJlZmNvdW50IGJhY2sgdG8gMiwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWZjb3VudCB0byAxLCBhbmQgdGhlIGNvZGUgcmVtb3ZlZCB0aGUgbGFzdCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIEJ1dCBpZiB0aGUgZnVuY3Rpb24gZG9lc24ndCBkcm9wIHRoZSBsYXN0IHJlZmVyZW5jZSBjb3VudCwgaG93IGNhbiBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGdldCBjYWxsZWQ/IEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGxlYWshXG5cbkknbSB0aGlua2luZyBhYm91dCBpdCBub3csIHRoZSBwYXRjaCBJIGhhdmUgc2hvd3MgdGhlIHJlbW92YWwgb2YgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIEJ1dCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGFscmVhZHkgZHJvcHMgYSByZWZlcmVuY2UsIGFuZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBvbmUgZnJvbSBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHRoZW4gdGhhdCBmaW5hbCBgcHV0YCBjYWxsIGlzIGNyaXRpY2FsLiBUaGUgcmVtb3ZhbCAqbGVha3MqIGEgcmVmZXJlbmNlLiBUaGF0IG1lYW5zIHRoZSByZWZjb3VudCB3aWxsIG5ldmVyIHJlYWNoIHplcm8gYW5kIHRoZSBWTEFOIG9iamVjdCB3b24ndCBiZSBmcmVlZC4gVGhlIHBhdGNoIGhhcyBpbnRyb2R1Y2VkIGEgbWVtb3J5IGxlYWshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6MzkuMDgwODIxNjY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4ODpcXHQgKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XFxuIDU4OTpcXHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4gNTkwOlxcdCAqIEB2bGFuOiB0aGUgb2JqZWN0IHRvIHJlbW92ZVxcbiA1OTE6XFx0ICovXFxuIDU5MjpcXHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiA1OTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXFxuIDU5NDpcXHR7XFxuIDU5NTpcXHRcXHQvKiBleHBsaWNpdGx5IHJlbW92ZSB0aGUgYXNzb2NpYXRlZCBUVCBsb2NhbCBlbnRyeSBiZWNhdXNlIGl0IGlzIG1hcmtlZFxcbiA1OTY6XFx0XFx0ICogd2l0aCB0aGUgTk9QVVJHRSBmbGFnXFxuIDU5NzpcXHRcXHQgKi9cXG4gNTk4OlxcdFxcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkcixcXG4gNTk5OlxcdFxcdFxcdFxcdCAgICAgICB2bGFuLVxcdTAwM2V2aWQsIFxcXCJ2bGFuIGludGVyZmFjZSBkZXN0cm95ZWRcXFwiLCBmYWxzZSk7XFxuIDYwMDpcXHRcXG4gNjAxOlxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuIDYwMjpcXHR9XFxuIDYwMzpcXHRcXG4gNjA0OlxcdC8qKlxcbiA2MDU6XFx0ICogYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKCkgLSBuZG9fYWRkX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG4gNjA2OlxcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXFxuIDYwNzpcXHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE1OjM5LjA4MDkyOTMyNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzc4NTA0OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRG91YmxlIEZyZWUgaW4gVkxBTiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nIHNlZW1zIG9mZi4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIFZMQU4gZGVzdHJ1Y3Rpb24gaW4gdGhlIGJhdGFkdiBtZXNoIGludGVyZmFjZSBjb2RlLiBJIHNlZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGF0J3Mgbm9ybWFsLiBUaGVuLCBJIG5vdGljZWQgdGhpcyBzZXF1ZW5jZSBpbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgOlxuXG5gYGBjXG5cdC8qIGRlc3Ryb3kgdGhlIFwidW50YWdnZWRcIiBWTEFOICovXG5cdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpO1xuXHRpZiAodmxhbikge1xuXHRcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcblx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuXHR9XG5gYGBcblxuVGhlIHRoaW5nIHRoYXQgYnVncyBtZSBpcyB0aGF0IGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBpcyBleHBsaWNpdGx5IGNhbGxlZCAqYWZ0ZXIqIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIHdoaWNoLCBhcyBtZW50aW9uZWQgcHJldmlvdXNseSwgYWxzbyBjYWxscyBpdC4gVGhpcyBmZWVscyByZWR1bmRhbnQgYXQgYmVzdCwgYnV0IGNvdWxkIGJlIHByb2JsZW1hdGljLCBlc3BlY2lhbGx5IHdpdGggdGhlIGFkZGVkIGNvbXBsZXhpdHkgb2YgYSBWTEFOIGltcGxlbWVudGF0aW9uLiBXaHkgaXMgaXQgYmVpbmcgY2FsbGVkIHR3aWNlP1xuXG5JdCBtYWtlcyBtZSB3b25kZXIgaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB3YXMgdGhlIGNvZGUgdGhhdCBjaGFuZ2VkLCBvciBpZiBhIGNoYW5nZSBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgdGhlIHJlYWwgc291cmNlIG9mIGEgcG90ZW50aWFsIGRvdWJsZSBmcmVlLiBJdCBsb29rcyBsaWtlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkaWQgbm90IGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIHdoZW4gaXQgc2hvdWxkIGhhdmUuXG5cblNvLCBJJ20gZ29pbmcgdG8gcmV2aXNpdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYW5kIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIHRoaW5ncyBjb3JyZWN0bHksIGNvbnNpZGVyaW5nIHRoZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHNlcXVlbmNlLiBUaGlzIGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRlYnVnZ2luZyB0aGlzIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0OTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo0My44NTk0Mzg1NzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcwOlxcdHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuIDY3MTpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNjcyOlxcdHtcXG4gNjczOlxcdFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA2NzQ6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0Lyogb25seSA4MDIuMVEgdmxhbnMgYXJlIHN1cHBvcnRlZC4gYmF0bWFuLWFkdiBkb2VzIG5vdCBrbm93IGhvdyB0b1xcbiA2Nzc6XFx0XFx0ICogaGFuZGxlIG90aGVyIHR5cGVzXFxuIDY3ODpcXHRcXHQgKi9cXG4gNjc5OlxcdFxcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXFxuIDY4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0LyogXFxcInByaW9yaXR5IHRhZ1xcXCIgZnJhbWVzIGFyZSBoYW5kbGVkIGxpa2UgXFxcInVudGFnZ2VkXFxcIiBmcmFtZXNcXG4gNjgzOlxcdFxcdCAqIGFuZCBubyBtZXNoaWZfdmxhbiBuZWVkcyB0byBiZSBkZXN0cm95ZWRcXG4gNjg0OlxcdFxcdCAqL1xcbiA2ODU6XFx0XFx0aWYgKHZpZCA9PSAwKVxcbiA2ODY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY4NzpcXHRcXG4gNjg4OlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcXG4gNjg5OlxcdFxcdGlmICghdmxhbilcXG4gNjkwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA2OTE6XFx0XFxuIDY5MjpcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdHJldHVybiAwO1xcbiA2OTU6XFx0fVxcbiA2OTY6XFx0XFxuIDY5NzpcXHQvKiBiYXRtYW4tYWR2IG5ldHdvcmsgZGV2aWNlcyBoYXZlIGRldmljZXMgbmVzdGluZyBiZWxvdyBpdCBhbmQgYXJlIGEgc3BlY2lhbFxcbiA2OTg6XFx0ICogXFxcInN1cGVyIGNsYXNzXFxcIiBvZiBub3JtYWwgbmV0d29yayBkZXZpY2VzOyBzcGxpdCB0aGVpciBsb2NrcyBvZmYgaW50byBhXFxuIDY5OTpcXHQgKiBzZXBhcmF0ZSBjbGFzcyBzaW5jZSB0aGV5IGFsd2F5cyBuZXN0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo0My44NTk1NTMzOTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzOTg5MTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWTEFOIFJlZmVyZW5jZSBDb3VudCBDb25mdXNpb24qKlxuXG5Pa2F5LCBzbyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBjYWxsZWQgd2hlbiBhIFZMQU4gaXMga2lsbGVkLCBtYWtlcyBzZW5zZS4gTm93LCBpZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgcmVtb3ZlcyB0aGUgcmVmZXJlbmNlIHVzaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgYW5kIHRoZSBWTEFOIGhhcyBvbmx5IG9uZSByZWZlcmVuY2UgZnJvbSB0aGUgbGlzdCwgd2UndmUgZ290IGEgcHJvYmxlbS4gSXQgd291bGQgTkVWRVIgYmUgZnJlZWQhIFRoZSBwYXRjaCByZW1vdmVzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgd2h5P1xuXG5BbHJpZ2h0LCBsZXQncyBjaGVjayBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHRvIHNlZSBpZiB0aGF0IGhhbmRsZXMgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBsaXN0LiBBaCwgeWVzLCBpdCBkb2VzIHVzZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIEJ1dCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgbGlzdCwgYW5kIHNpbmNlIGEgcmVmZXJlbmNlIHdhcyBvYnRhaW5lZCBmcm9tIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgdGhlIHJlZmNvdW50IHNob3VsZCBiZSBiYWNrIHRvIDEuIFRoYXQncyBhc3N1bWluZyB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgcmVmZXJlbmNlIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLiBUaGVuIHRoZSByZWZjb3VudCBnb2VzIHRvIDAsIGFuZCB3ZSBnZXQgdGhlIGZyZWUgdGhhdCB3ZSB3YW50LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZeKApndoYXQgaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBpcyBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZSAqYmVzaWRlcyogdGhpcyBmbG93PyBUaGVuIHdlIGNvdWxkIHN0aWxsIGhhdmUgYSBkYW5nbGluZyByZWZlcmVuY2UhIE9rYXksIGxldCdzIGxvb2sgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCB0byBzZWUgd2hlcmUgZWxzZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo0OC45OTk0NDk0MTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MjpcXHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcXG4xMDgzOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4xMDg0OlxcdHtcXG4xMDg1OlxcdFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcXG4xMDg2OlxcdFxcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcXG4xMDg3OlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2bWVzaF9pZmFjZS1cXHUwMDNlYWRqX2xpc3QubG93ZXIpKSB7XFxuMTA5MDpcXHRcXHRcXHRoYXJkX2lmYWNlID0gbmV0ZGV2X2FkamFjZW50X2dldF9wcml2YXRlKG1lc2hfaWZhY2UtXFx1MDAzZWFkal9saXN0Lmxvd2VyLm5leHQpO1xcbjEwOTE6XFx0XFx0XFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcXG4xMDkyOlxcdFxcdH1cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0XFx0LyogZGVzdHJveSB0aGUgXFxcInVudGFnZ2VkXFxcIiBWTEFOICovXFxuMTA5NTpcXHRcXHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgQkFUQURWX05PX0ZMQUdTKTtcXG4xMDk2OlxcdFxcdGlmICh2bGFuKSB7XFxuMTA5NzpcXHRcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxuMTA5ODpcXHRcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbjEwOTk6XFx0XFx0fVxcbjExMDA6XFx0XFxuMTEwMTpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShtZXNoX2lmYWNlLCBoZWFkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6NDguOTk5NTkzNjE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMjU0OTgyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkxBTiBPYmplY3QgTGVhayBpbiBiYXRhZHYqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgaGVhZC4uLiBJIHNlZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGF0IG1ha2VzIHNlbnNlLiBCdXQgd2h5IGRpZCB0aGUgcGF0Y2ggcmVtb3ZlIHRoYXQgY2FsbCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uXG5cbkxldCBtZSBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIGNhbGwgY2hhaW4uIEknbGwgY2hlY2sgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgY2FsbGVkIGJ5IGB2bGFuX3ZpZF9kZWxgLiBZZXAsIGl0IGxvb2tzIGxpa2UgYHZsYW5fdmlkX2RlbGAgY2FsbHMgYG5kb192bGFuX3J4X2tpbGxfdmlkYCwgYW5kLCBpbiB0dXJuLCB0aGF0IGNhbGxzIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4gT2theSwgc28gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIHRyaWdnZXJlZCB3aGVuIGEgVkxBTiBpcyBiZWluZyBkZWxldGVkLlxuXG5Ob3csIGlmIHRoZXkgKnJlbW92ZWQqIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCwgdGhhdCBtZWFucyB0aGUgVkxBTiBvYmplY3QgbWlnaHQgbm90IGJlIGZyZWVkLiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnISBMZXQncyBlbGltaW5hdGUgb3RoZXIgcG9zc2liaWxpdGllcy4gRGlkIHRoZXkgY2hhbmdlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgdG8gKm5vdCogZHJvcCB0aGUgcmVmZXJlbmNlPyBOb3BlLCBqdXN0IGNoZWNrZWQsIGFuZCBpdCBkZWZpbml0ZWx5IHN0aWxsIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC5cblxuTWF5YmUgdGhlIGxvZ2ljIGlzIHRoZSBvcHBvc2l0ZS4gUGVyaGFwcywgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyBhIHJlZmVyZW5jZSwgYW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCAqdXNlZCogdG8gZHJvcCBhbm90aGVyLCBidXQgbm8gbG9uZ2VyIGRvZXM/IEhvbGQgb24sIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnZXRzIGEgcmVmZXJlbmNlISBTbywgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgYSByZWZlcmVuY2UsIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKHdoaWNoIGRyb3BzICpvbmUqIHJlZmVyZW5jZSksIGFuZCB0aGVuIHJldHVybnMuXG5cblRoaXMgbWVhbnMgdGhlIHJlZmNvdW50IGlzIDEgYWZ0ZXIgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGZpbmlzaGVzLiBUaGUgb2JqZWN0IGlzIGxlYWtlZCEgT3IsIHdhaXQuLi4gYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gTGV0IG1lIHJlLWV4YW1pbmUgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFnYWluLlxuXG5gYGBjXG5cdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcblx0aWYgKCF2bGFuKVxuXHRcdHJldHVybiAtRU5PRU5UO1xuXG5cdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcblxuXHRyZXR1cm4gMDtcbmBgYFxuXG5Pa2F5LCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWZlcmVuY2UsIGFuZCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2V0cyBvbmUsIHRoZW4gdGhlIG5ldCBjaGFuZ2UgaXMgemVyby4gVGhlICpwcm9ibGVtKiBpcyB0aGF0IHRoZSBWTEFOIHdhcyBhbHJlYWR5IGluIHRoZSBsaXN0LCBzbyBpdCBoYWQgYSByZWZlcmVuY2UgY291bnQgb2YgMS4gQWZ0ZXIgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIFNUSUxMIDEuIFRoYXQgaXMgYSBsZWFrIVxuXG5BaGEhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgKm5vdCogY2FsbGVkLiBTbywgdGhlIFZMQU4gaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkb2Vzbid0IHJlbW92ZSBpdDsgaXQganVzdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFRoZXJlZm9yZSwgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRvZXNuJ3QgY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAsIHRoZSByZWZjb3VudCByZW1haW5zIGF0IDEsIGFuZCB0aGUgVkxBTiBpcyAqbm90KiByZW1vdmVkIGZyb20gdGhlIGxpc3QhXG5cbk5vdywgd2h5IHdvdWxkIHRoZXkgd2FudCB0byBrZWVwIGl0IGluIHRoZSBsaXN0PyBUaGF0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuIExldCBtZSBjaGVjayBob3cgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo1OC4zMjUwOTU0MDNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjA0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA0OlxcdC8qKlxcbiA2MDU6XFx0ICogYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKCkgLSBuZG9fYWRkX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG4gNjA2OlxcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXFxuIDYwNzpcXHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXFxuIDYwODpcXHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBuZXcgdmxhblxcbiA2MDk6XFx0ICpcXG4gNjEwOlxcdCAqIFNldCB1cCBhbGwgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIHRoZSBuZXcgdmxhbiBvbiB0b3Agb2YgdGhlXFxuIDYxMTpcXHQgKiBtZXNoIGludGVyZmFjZVxcbiA2MTI6XFx0ICpcXG4gNjEzOlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuXFxuIDYxNDpcXHQgKi9cXG4gNjE1OlxcdHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG4gNjE2OlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuIDYxNzpcXHR7XFxuIDYxODpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gNjE5OlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuIDYyMDpcXHRcXG4gNjIxOlxcdFxcdC8qIG9ubHkgODAyLjFRIHZsYW5zIGFyZSBzdXBwb3J0ZWQuXFxuIDYyMjpcXHRcXHQgKiBiYXRtYW4tYWR2IGRvZXMgbm90IGtub3cgaG93IHRvIGhhbmRsZSBvdGhlciB0eXBlc1xcbiA2MjM6XFx0XFx0ICovXFxuIDYyNDpcXHRcXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbiA2MjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdC8qIFZJRCAwIGlzIG9ubHkgdXNlZCB0byBpbmRpY2F0ZSBcXFwicHJpb3JpdHkgdGFnXFxcIiBmcmFtZXMgd2hpY2ggb25seVxcbiA2Mjg6XFx0XFx0ICogY29udGFpbiBwcmlvcml0eSBpbmZvcm1hdGlvbiBhbmQgbm8gVklELiBObyBtYW5hZ2VtZW50IHN0cnVjdHVyZXNcXG4gNjI5OlxcdFxcdCAqIHNob3VsZCBiZSBjcmVhdGVkIGZvciB0aGlzIFZJRCBhbmQgaXQgc2hvdWxkIGJlIGhhbmRsZWQgbGlrZSBhblxcbiA2MzA6XFx0XFx0ICogdW50YWdnZWQgZnJhbWUuXFxuIDYzMTpcXHRcXHQgKi9cXG4gNjMyOlxcdFxcdGlmICh2aWQgPT0gMClcXG4gNjMzOlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo1OC4zMjUyMTczOTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU0MjIzODAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipEaXZpbmcgaW50byBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIHJlc3Qgb2YgdGhpcyBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyLiBNeSBleHBlcnQga25vd2xlZGdlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBjcml0aWNhbCBpbiBicmlkZ2luZyBWTEFOcyB3aXRoIHRoZSBCQVRNQU4tYWR2IHByb3RvY29sLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXR3b3JrIHNlZ21lbnRhdGlvbiBhbmQgc2VjdXJpdHkgaW1tZWRpYXRlbHkuIFdoYXQncyBpdCBkb2luZyB3aXRoIHRoZSBWTEFOIElEPyBIb3cgaXMgdGhpcyByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIG1lc2ggaW5mcmFzdHJ1Y3R1cmU/IFRpbWUgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgc3RlcHMgaW52b2x2ZWQuIEknbGwgZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzLCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgbGlrZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc0NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTY6MDAuODY3NDU5Nzk1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzNDpcXHRcXG4gNjM1OlxcdFxcdHZpZCB8PSBCQVRBRFZfVkxBTl9IQVNfVEFHO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHQvKiBpZiBhIG5ldyB2bGFuIGlzIGdldHRpbmcgY3JlYXRlZCBhbmQgaXQgYWxyZWFkeSBleGlzdHMsIGl0IG1lYW5zIHRoYXRcXG4gNjM4OlxcdFxcdCAqIGl0IHdhcyBub3QgZGVsZXRlZCB5ZXQuIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSBpbmNyZWFzZXMgdGhlXFxuIDYzOTpcXHRcXHQgKiByZWZjb3VudCBpbiBvcmRlciB0byByZXZpdmUgdGhlIG9iamVjdC5cXG4gNjQwOlxcdFxcdCAqXFxuIDY0MTpcXHRcXHQgKiBpZiBpdCBkb2VzIG5vdCBleGlzdCB0aGVuIGNyZWF0ZSBpdC5cXG4gNjQyOlxcdFxcdCAqL1xcbiA2NDM6XFx0XFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCk7XFxuIDY0NDpcXHRcXHRpZiAoIXZsYW4pXFxuIDY0NTpcXHRcXHRcXHRyZXR1cm4gYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihiYXRfcHJpdiwgdmlkKTtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0LyogYWRkIGEgbmV3IFRUIGxvY2FsIGVudHJ5LiBUaGlzIG9uZSB3aWxsIGJlIG1hcmtlZCB3aXRoIHRoZSBOT1BVUkdFXFxuIDY0ODpcXHRcXHQgKiBmbGFnLiBUaGlzIG11c3QgYmUgYWRkZWQgYWdhaW4sIGV2ZW4gaWYgdGhlIHZsYW4gb2JqZWN0IGFscmVhZHlcXG4gNjQ5OlxcdFxcdCAqIGV4aXN0cywgYmVjYXVzZSB0aGUgZW50cnkgd2FzIGRlbGV0ZWQgYnkga2lsbF92aWQoKVxcbiA2NTA6XFx0XFx0ICovXFxuIDY1MTpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLFxcbiA2NTI6XFx0XFx0XFx0XFx0ICAgIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkciwgdmlkLFxcbiA2NTM6XFx0XFx0XFx0XFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0cmV0dXJuIDA7XFxuIDY1NjpcXHR9XFxuIDY1NzpcXHRcXG4gNjU4OlxcdC8qKlxcbiA2NTk6XFx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2NjA6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjYxOlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG4gNjYyOlxcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxcbiA2NjM6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTY6MDAuODY3NTcyNTk1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDUzNTM2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gSGFuZGxpbmcgaW4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGZ1bmN0aW9uLiBUaGUgY29tbWVudCdzIHF1aXRlIGNsZWFyOiBpZiB3ZSdyZSBhZGRpbmcgYSBWTEFOIElEIChgdmlkYCkgdGhhdCAqYWxyZWFkeSogZXhpc3RzLCBpdCBtZWFucyB0aGUgb2JqZWN0IHdhc24ndCBmdWxseSBjbGVhbmVkIHVwIHlldCwgYW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCByZXZpdmVzIGl0LiBJZiBpdCBkb2Vzbid0IGV4aXN0LCB3ZSBjcmVhdGUgaXQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuQnV0IGhhbmcgb27igKYgaWYgaXQgXCJyZXZpdmVzXCIgdGhlIG9iamVjdCwgaXQncyAqZXhwZWN0aW5nKiBpdCB0byBzdGlsbCBiZSBoYW5naW5nIGFyb3VuZCBzb21ldGltZXMuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93IEkgc2VlIHRoYXQgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGlzIGNhbGxlZCByZWdhcmRsZXNzLiBJdCBmZXRjaGVzIGEgcmVmZXJlbmNlIGlmIHRoZSB2bGFuIGV4aXN0cywgb3IgY3JlYXRlcyB0aGUgdmxhbi4gQW5kIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gcmVmZXJlbmNlIGNvdW50aW5nIGhlcmUuXG5cbkkgc2VlIGl0IGdldHMgYSByZWZlcmVuY2Ugd2hlbiBpdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHJlZ2FyZGxlc3Mgb2YgY3JlYXRpb24uIEFuZCB0aGVu4oCmIGl0IHJldHVybnMgMC4gSXQgKmRvZXNuJ3QqIHJlbGVhc2UgdGhhdCByZWZlcmVuY2UgYW55d2hlcmUuIEhvbGQgb24gYSBzZWNvbmTigKYgRG9lcyB0aGF0IG1lYW4gdGhpcyBmdW5jdGlvbiBpcyBsZWFraW5nIGEgcmVmZXJlbmNlPyBUaGF0J3MgYSBkZWZpbml0ZSByZWQgZmxhZy4gV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgd2l0aCByZWZlcmVuY2UgY291bnRpbmcgaW4gdGhlc2Ugc2NlbmFyaW9zLlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUgZm9yIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCB0byBtYWtlIHN1cmUgaXQgaGFuZGxlcyB0aGluZ3MgY29ycmVjdGx5IHRoZXJlLiBXZSAqbXVzdCogZW5zdXJlIHRoYXQgb2JqZWN0IGxpZmVjeWNsZXMgYXJlIG1hbmFnZWQgaW1wZWNjYWJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NDksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjowNi4xNzI5MzA0OTZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdGludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNTQ2OlxcdHtcXG4gNTQ3OlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuIDU1MDpcXHRcXG4gNTUxOlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQpO1xcbiA1NTI6XFx0XFx0aWYgKHZsYW4pIHtcXG4gNTUzOlxcdFxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuIDU1NDpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuIDU1NTpcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gNTU2OlxcdFxcdH1cXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0dmxhbiA9IGt6YWxsb2Nfb2JqKCp2bGFuLCBHRlBfQVRPTUlDKTtcXG4gNTU5OlxcdFxcdGlmICghdmxhbikge1xcbiA1NjA6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NjE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDU2MjpcXHRcXHR9XFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdHZsYW4tXFx1MDAzZWJhdF9wcml2ID0gYmF0X3ByaXY7XFxuIDU2NTpcXHRcXHR2bGFuLVxcdTAwM2V2aWQgPSB2aWQ7XFxuIDU2NjpcXHRcXHRrcmVmX2luaXQoXFx1MDAyNnZsYW4tXFx1MDAzZXJlZmNvdW50KTtcXG4gNTY3OlxcdFxcbiA1Njg6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2dmxhbi1cXHUwMDNlYXBfaXNvbGF0aW9uLCAwKTtcXG4gNTY5OlxcdFxcbiA1NzA6XFx0XFx0a3JlZl9nZXQoXFx1MDAyNnZsYW4tXFx1MDAzZXJlZmNvdW50KTtcXG4gNTcxOlxcdFxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCwgXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0KTtcXG4gNTcyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0LyogYWRkIGEgbmV3IFRUIGxvY2FsIGVudHJ5LiBUaGlzIG9uZSB3aWxsIGJlIG1hcmtlZCB3aXRoIHRoZSBOT1BVUkdFXFxuIDU3NTpcXHRcXHQgKiBmbGFnXFxuIDU3NjpcXHRcXHQgKi9cXG4gNTc3OlxcdFxcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UsXFxuIDU3ODpcXHRcXHRcXHRcXHQgICAgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLCB2aWQsXFxuIDU3OTpcXHRcXHRcXHRcXHQgICAgQkFUQURWX05VTExfSUZJTkRFWCwgQkFUQURWX05PX01BUkspO1xcbiA1ODA6XFx0XFxuIDU4MTpcXHRcXHQvKiBkb24ndCByZXR1cm4gcmVmZXJlbmNlIHRvIG5ldyBtZXNoaWZfdmxhbiAqL1xcbiA1ODI6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjA2LjE3MzA4MDk4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTg5NTIyODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIFJlZmVyZW5jZSBDb3VudGluZyBpbiBiYXRhZHYqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyByZWxhdGVkIHRvIFZMQU5zIHdpdGhpbiB0aGUgYGJhdGFkdmAgbW9kdWxlLlxuXG5GaXJzdCwgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIGNyZWF0ZXMgYSBWTEFOIG9iamVjdCwgaW5pdGlhbGl6ZXMgaXRzIHJlZmVyZW5jZSBjb3VudCB0byAxLCBpbmNyZW1lbnRzIGl0IHRvIDIgYmVmb3JlIGFkZGluZyBpdCB0byBhIGxpc3QsIHRoZW4gZGVjcmVtZW50cyBpdCBhZ2FpbiB0byAxIGJlZm9yZSByZXR1cm5pbmcuIFNvIGl0ICppbnRlbnRpb25hbGx5KiBsZWF2ZXMgdGhlIGxpc3QgYXMgdGhlIHNvbGUgaG9sZGVyIG9mIGEgcmVmZXJlbmNlIChyZWZjb3VudCAxKS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgdG8gcmV0cmlldmUgYSBWTEFOLiBJZiB0aGUgVkxBTiBkb2Vzbid0IGV4aXN0LCBpdCBjcmVhdGVzIGl0IHVzaW5nIHRoZSBwcm9jZXNzIGRlc2NyaWJlZCBhYm92ZTogaW5pdGlhbGl6ZXMgdG8gMSwgaW5jcmVtZW50cyB0byAyLCBhZGRzIGl0IHRvIHRoZSBsaXN0LCB0aGVuIGRyb3BzIHRvIDEgYmVmb3JlIHJldHVybmluZy4gQnV0LCBjcml0aWNhbGx5LCBpZiB0aGUgVkxBTiAqZG9lcyogZXhpc3QsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCByZXR1cm5zIGEgcmVmZXJlbmNlLiBUaGVuIGl0IGFkZHMgYSBuZXcgVFQgbG9jYWwgZW50cnkgYW5kIHRoZW4gcmV0dXJucyAqd2l0aG91dCogZHJvcHBpbmcgdGhhdCByZWZlcmVuY2UhIFRoaXMgbWVhbnMgdGhlIHJlZmNvdW50IGJlY29tZXMgMi5cblxuTm93LCBpZiB0aGUgcmVmY291bnQgaXMgaW5kZWVkIDIgd2hlbiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCByZXR1cm5zLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKm11c3QqIGhhbmRsZSB0aGlzLiBMZXQncyBzZWUuLi4gaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHdoaWNoIGluY3JlbWVudHMgaXQgKHRvIDMpLCBkZXN0cm95cyB0aGUgVkxBTiwgd2hpY2ggZHJvcHMgb25lIChiYWNrIHRvIDIpIGFuZCAqdGhlbiogY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIHdoaWNoIGRyb3BzIGl0IHRvIDEuIFdoaWNoIGxlYXZlcyB0aGUgb2JqZWN0IHN0aWxsIGluIHRoZSBsaXN0LCBidXQgbm90IHJlZmVyZW5jZWQgYnkgYW55dGhpbmcgZWxzZSEgVGhhdCBzZWVtcy4uLiBwcm9ibGVtYXRpYy5cblxuQnV0IHdhaXQuIElmIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgdGhlbiBpdCBpcyBsZWZ0IGF0IDEuIFNvLCBpZiB3ZSByZS1yZWFkIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgd2Ugc2VlIHRoYXQgaXMgY29ycmVjdCEgQ3JlYXRlcyByZWZjb3VudCB0byAxLCBpbmNyZWFzZXMgdG8gMiBmb3IgdGhlIGxpc3QsIHRoZW4gZHJvcHMgdG8gMSBiZWZvcmUgcmV0dXJuaW5nLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2ssIGFuZCByZS1leGFtaW5lIHRoZSBjcnVjaWFsIGNhc2Ugd2hlcmUgdGhlIFZMQU4gKmFscmVhZHkgZXhpc3RzKi4gSW4gdGhpcyBjYXNlLCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2l2ZXMgdXMgYSByZWZjb3VudCBvZiAyLiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBpcyB0aGVuIHJldHVybmluZyB3aXRob3V0IGRyb3BwaW5nIHRoYXQgcmVmZXJlbmNlLiBUaGF0J3MgdGhlIGtleSFcblxuVGhlcmVmb3JlLCB0aGUgYnVnIGlzIHJpZ2h0IGhlcmU6ICoqYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKnNob3VsZCogZHJvcCB0aGUgcmVmZXJlbmNlIGl0IGdvdCBmcm9tIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB3aGVuIHRoZSBWTEFOIGFscmVhZHkgZXhpc3RzKiouIEl0J3MgbGVhdmluZyBhbiBleHRyYSByZWZlcmVuY2UgaGFuZ2luZyBhcm91bmQsIHdoaWNoIHNlZW1zIHRvIGNyZWF0ZSBpbmNvbnNpc3RlbnQgcmVmZXJlbmNlIGNvdW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjoxNS43NjI2MDY2NThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjU1NDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU5Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MDQtLyoqXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2MDU6ICogYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKCkgLSBuZG9fYWRkX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwNi0gKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MTQtICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2MTU6c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjE2LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTg3ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhdGFkdl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04NzYtXFx0Lm5kb19nZXRfc3RhdHMgPSBiYXRhZHZfaW50ZXJmYWNlX3N0YXRzLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODc3OlxcdC5uZG9fdmxhbl9yeF9hZGRfdmlkID0gYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODc4LVxcdC5uZG9fdmxhbl9yeF9raWxsX3ZpZCA9IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjE2LjcwOTE3MjcyNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM2NzE0ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKlJldmlld2luZyB0aGUgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byByZXZpc2l0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgYSBxdWljayByZWZyZXNoZXIgb24gaXRzIGNvcmUgbG9naWMgaXMgaW4gb3JkZXIuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVkxBTiBJRCBhbmQgdGhlIG92ZXJhbGwgQkFUTUFOLUFkdiBpbnRlcmZhY2UgbWFuYWdlbWVudC4gVGhlcmUgY291bGQgYmUgc29tZXRoaW5nIEkgbWlzc2VkIGluIHRoZSBsYXN0IGRlZXAgZGl2ZSB0aGF0IHdhcnJhbnRzIGFub3RoZXIgbG9vaywgb3IgcGVyaGFwcyBhIG5ldyBpbnNpZ2h0IHdpbGwgcHJlc2VudCBpdHNlbGYgYnkgZ2l2aW5nIGl0IGZyZXNoIGF0dGVudGlvbi4gSXQncyBvZnRlbiB0aGUgc21hbGwgZGV0YWlscyB0aGF0IHRyaXAgdXMgdXAuIExldCdzIHNlZSBpZiB0aGlzIGZyZXNoIHBlcnNwZWN0aXZlIHJldmVhbHMgYW55dGhpbmcgbmV3LCBvciBhdCBsZWFzdCByZWluZm9yY2VzIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODM1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTY6MTkuNjQ1ODkwMTc5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzNTpcXHRcXHR2aWQgfD0gQkFUQURWX1ZMQU5fSEFTX1RBRztcXG4gNjM2OlxcdFxcbiA2Mzc6XFx0XFx0LyogaWYgYSBuZXcgdmxhbiBpcyBnZXR0aW5nIGNyZWF0ZWQgYW5kIGl0IGFscmVhZHkgZXhpc3RzLCBpdCBtZWFucyB0aGF0XFxuIDYzODpcXHRcXHQgKiBpdCB3YXMgbm90IGRlbGV0ZWQgeWV0LiBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KCkgaW5jcmVhc2VzIHRoZVxcbiA2Mzk6XFx0XFx0ICogcmVmY291bnQgaW4gb3JkZXIgdG8gcmV2aXZlIHRoZSBvYmplY3QuXFxuIDY0MDpcXHRcXHQgKlxcbiA2NDE6XFx0XFx0ICogaWYgaXQgZG9lcyBub3QgZXhpc3QgdGhlbiBjcmVhdGUgaXQuXFxuIDY0MjpcXHRcXHQgKi9cXG4gNjQzOlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQpO1xcbiA2NDQ6XFx0XFx0aWYgKCF2bGFuKVxcbiA2NDU6XFx0XFx0XFx0cmV0dXJuIGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oYmF0X3ByaXYsIHZpZCk7XFxuIDY0NjpcXHRcXG4gNjQ3OlxcdFxcdC8qIGFkZCBhIG5ldyBUVCBsb2NhbCBlbnRyeS4gVGhpcyBvbmUgd2lsbCBiZSBtYXJrZWQgd2l0aCB0aGUgTk9QVVJHRVxcbiA2NDg6XFx0XFx0ICogZmxhZy4gVGhpcyBtdXN0IGJlIGFkZGVkIGFnYWluLCBldmVuIGlmIHRoZSB2bGFuIG9iamVjdCBhbHJlYWR5XFxuIDY0OTpcXHRcXHQgKiBleGlzdHMsIGJlY2F1c2UgdGhlIGVudHJ5IHdhcyBkZWxldGVkIGJ5IGtpbGxfdmlkKClcXG4gNjUwOlxcdFxcdCAqL1xcbiA2NTE6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZSxcXG4gNjUyOlxcdFxcdFxcdFxcdCAgICBiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZS1cXHUwMDNlZGV2X2FkZHIsIHZpZCxcXG4gNjUzOlxcdFxcdFxcdFxcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XFxuIDY1NDpcXHRcXG4gNjU1OlxcdFxcdHJldHVybiAwO1xcbiA2NTY6XFx0fVxcbiA2NTc6XFx0XFxuIDY1ODpcXHQvKipcXG4gNjU5OlxcdCAqIGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoKSAtIG5kb19raWxsX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG4gNjYwOlxcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXFxuIDY2MTpcXHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXFxuIDY2MjpcXHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBkZWxldGVkIHZsYW5cXG4gNjYzOlxcdCAqXFxuIDY2NDpcXHQgKiBEZXN0cm95IGFsbCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyB1c2VkIHRvIGhhbmRsZSB0aGUgdmxhbiBpZGVudGlmaWVkIGJ5IHZpZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjoxOS42NDYwOTAwMjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwODM4NTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkxBTiBSZWZjb3VudGluZyBpbiBCYXRhZHYqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYmF0YWR2IGNvZGUgYW5kIHRoaXMgY29tbWVudCBqdW1wcyBvdXQ6IFwiYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGUgcmVmY291bnQgaW4gb3JkZXIgdG8gcmV2aXZlIHRoZSBvYmplY3QuXCIgUmlnaHQsIHNvIGl0ICppbnRlbnRpb25hbGx5KiBpbmNyZW1lbnRzIHRoZSByZWZjb3VudC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5Ob3csIGlmIGl0IGZpbmRzIGFuIGV4aXN0aW5nIFZMQU4sIHRoZSByZWZjb3VudCBlbmRzIHVwIGF0IDIuIE1ha2VzIHNlbnNlLiBJdCdzIGVzc2VudGlhbGx5IFwicmV2aXZpbmdcIiB0aGUgVkxBTi4gQnV0IHdoYXQgaWYgdGhlIFZMQU4gKmRvZXNuJ3QqIGV4aXN0PyBUaGUgY29tbWVudCBzYXlzIHRoYXQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIGlzIGNhbGxlZCBpbiB0aGF0IGNhc2UuIFRoYXQncyB0aGUgcmVhbCBxdWVzdGlvbjogZG9lcyBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgKmFsc28qIGxlYXZlIHRoZSByZWZjb3VudCBhdCAyPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGhvdyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJlZmNvdW50IGl0c2VsZi4gSXTigJlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCB0aGUgbGlmZWN5Y2xlLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBhcmVhLiBJdCdzIHBvc3NpYmxlIEknbSBtaXNzaW5nIHNvbWV0aGluZyBzdWJ0bGUgaGVyZSwgc28gSSdtIGdvaW5nIGJhY2sgdG8gdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjoyMy41NTQ0NzkyNTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY2OlxcdFxcdGtyZWZfaW5pdChcXHUwMDI2dmxhbi1cXHUwMDNlcmVmY291bnQpO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24sIDApO1xcbiA1Njk6XFx0XFxuIDU3MDpcXHRcXHRrcmVmX2dldChcXHUwMDI2dmxhbi1cXHUwMDNlcmVmY291bnQpO1xcbiA1NzE6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZ2bGFuLVxcdTAwM2VsaXN0LCBcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3QpO1xcbiA1NzI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcXG4gNTc1OlxcdFxcdCAqIGZsYWdcXG4gNTc2OlxcdFxcdCAqL1xcbiA1Nzc6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZSxcXG4gNTc4OlxcdFxcdFxcdFxcdCAgICBiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZS1cXHUwMDNlZGV2X2FkZHIsIHZpZCxcXG4gNTc5OlxcdFxcdFxcdFxcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdC8qIGRvbid0IHJldHVybiByZWZlcmVuY2UgdG8gbmV3IG1lc2hpZl92bGFuICovXFxuIDU4MjpcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRyZXR1cm4gMDtcXG4gNTg1OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTY6MjMuNTU0NjA4Nzk3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNzkzNjA0NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmNvdW50aW5nIERlZXAgRGl2ZSBpbnRvIFZMQU4gSW50ZXJmYWNlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYmF0YWR2YCBWTEFOIGludGVyZmFjZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aHkgaXMgdGhlIHJlZmNvdW50aW5nIGhlcmUgc28gaW5jb25zaXN0ZW50PyBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgbGVhdmVzIGEgcmVmY291bnQgb2YgMSwgc2VlbWluZ2x5IGZvciB0aGUgbGlzdCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGxlYXZlcyBpdCBhdCAyIGlmIHRoZSBWTEFOIGFscmVhZHkgZXhpc3RzISBUaGlzIGZlZWxzIG9mZi5cblxuTGV0J3MgYnJlYWsgZG93biBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd2hpY2ggd2lsbCByZWFsbHkgYmUgd2hlcmUgdGhlIGNvbXBsZXhpdHkgbGllcy4gIElmIGBhZGRfdmlkYCBsZWF2ZXMgdGhlIHJlZmNvdW50IGF0IDIgYW5kIHNvbWVvbmUgZWxzZSBpcyBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBWTEFOLCB0aGVuIGBraWxsX3ZpZGAgbXVzdCBkcm9wIHR3byByZWZlcmVuY2VzLCBidXQgaG93IGRvZXMgdGhlIGNvZGUgaGFuZGxlIHRoZSBsb2dpY2FsIGRlc3RydWN0aW9uPyAgQW5kIHdoYXQgaGFwcGVucyB3aGVuIGEgbmV3IFZMQU4gaXMgY3JlYXRlZD9cblxuTXkgaW5pdGlhbCB3YWxrdGhyb3VnaCBzdWdnZXN0cyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKmRvZXMqIHNlZW0gdG8gaGFuZGxlIHRoaXMgY29ycmVjdGx5LCBhdCBmaXJzdCBibHVzaC4gIEl0IGdldHMgYSByZWZlcmVuY2UgKHJlZmNvdW50IDIgb3IgMyksIGRlc3Ryb3lzIHRoZSBWTEFOLCBkcm9wcGluZyBvbmUgcmVmZXJlbmNlLCBhbmQgKnRoZW4qIHB1dHMgYSByZWZlcmVuY2UgZG93biwgZHJvcHBpbmcgaXQgdG8gemVyby4gSWYgdGhlIFZMQU4gd2FzICpuZXdseSogY3JlYXRlZCwgdGhpcyBsZWFkcyB0byBmcmVlaW5nIHRoZSBvYmplY3QsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LlxuXG5CdXQgd2hhdCBpZiB0aGUgVkxBTiB3YXMgXCJyZXZpdmVkXCIgYW5kIHdhcyBhbHJlYWR5IGluIHRoZSBsaXN0PyBJdCBnZXRzIGEgcmVmZXJlbmNlIChyZWZjb3VudCAzKSwgZGVzdHJveXMgaXQgKHJlZmNvdW50IDIpLCBwdXRzIGl0IChyZWZjb3VudCAxKSwgYW5kIHRoZW4uLi4gaXQncyBub3QgZnJlZWQhIEl0IHJlbWFpbnMgaW4gdGhlIGxpc3QhIEFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBUaGF0IG1lYW5zIHRoZXJlIG11c3QgYmUgc29tZSAqb3RoZXIqIHJlZmVyZW5jZSBob2xkaW5nIGl0IHVwLlxuXG5BaGEhIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICpzYXlzKiBpdCByZXZpdmVzIHRoZSBvYmplY3QuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBsaXN0IHJlZmVyZW5jZSBpcyB0aGUgKm9ubHkqIHJlZmVyZW5jZSBpdCBsZWZ0LiBUaGlzIG1lYW5zIHNvbWUgb3RoZXIgZW50aXR5IGlzIGhvbGRpbmcgYSByZWZlcmVuY2UuIE1heWJlIGEgVFQgZW50cnkgb3IgbmV0bGluayBkdW1wLCBvciBhIHNvZnRpZi4gIElmIHNvbWVvbmUgZWxzZSBpcyBob2xkaW5nIGEgcmVmZXJlbmNlLCB0aGUgcmVmY291bnQgaXMgMSAobGlzdCkgKyAxIChvdGhlcikgPSAyLCBhbmQgdGhlbiB0aGUgd2hvbGUgc3lzdGVtIHdvcmtzLlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzIGZ1cnRoZXIuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgYSByZWZlcmVuY2UsIHdoaWNoIGFwcGVhcnMgdG8gYmUgdGhlIGxpc3QgcmVmZXJlbmNlLCBsZWF2aW5nIHRoZSBWTEFOIGxvZ2ljYWxseSBkZXN0cm95ZWQsIGJ1dCBzdGlsbCBwcmVzZW50IGluIHRoZSBsaXN0LiAgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgc2hvdWxkICpjb3JyZWN0bHkqIGJyaW5nIGl0IGJhY2sgdG8gbGlmZSB3aXRoIGEgZnJlc2ggbmV3IHJlZmVyZW5jZSwgc28gdGhhdCdzIG9rYXkuIEJ1dCB3aGF0IGhhcHBlbnMgd2l0aCBga2lsbF92aWRgIGFuZCB0aGUgbGlzdD8gIFxuXG5XYWl0LCBpZiBJJ20ga2lsbGluZyBhIFZMQU4gdGhhdCAqd2FzKiBpbiB0aGUgbGlzdCwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICpkb2VzKiBkcm9wIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhhdCBtZWFucyB0aGUgVkxBTiBpcyBpbiB0aGUgbGlzdCwgYnV0IGVmZmVjdGl2ZWx5IFwiZGVzdHJveWVkXCIgdW50aWwgc29tZW9uZSBnZXRzIGl0IGZyb20gdGhlIGxpc3QuIElmIGBraWxsX3ZpZGAgZHJvcHMgdHdvIHJlZmVyZW5jZXMsIGl0IGRyb3BzIHRoZSBsaXN0IHJlZiBhbmQgdGhlIHJlZmVyZW5jZSBoZWxkIGJ5IGBhZGRfdmlkYCEgIFxuXG5gYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICpkb2VzKiBkcm9wIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhhdCBtdWNoIGlzIG5vdyBjbGVhci5cblxuT2theSwgdGhlIHJlZmNvdW50IGxvZ2ljIHNlZW1zIHRvIHdvcmsgZm9yIGJvdGggYSBuZXdseSBjcmVhdGVkIFZMQU4gKmFuZCogYSByZXZpdmVkIG9uZS5cblxuU28gaXQgYm9pbHMgZG93biB0bzpcblxuMS4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgLSBDcmVhdGVzIG9yIHJldml2ZXMgYSBWTEFOLCBpbmNyZWFzaW5nIHJlZmNvdW50LlxuMi4gSWYgc29tZWJvZHkgZWxzZSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTiwgaXRzIHJlZmNvdW50IGlzIGF0IGxlYXN0IDIuXG4zLiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBhIHJlZmVyZW5jZSwgZGVzdHJveXMgdGhlIFZMQU4sIGFuZCBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UuXG40LiBJZiB0aGVyZSBhcmUgb3RoZXIgcmVmZXJlbmNlcyB0byB0aGUgVkxBTiwgaXQncyBub3QgZnJlZWQuIElmIHRoZXJlIGFyZSBubyBvdGhlciByZWZlcmVuY2VzLCBpdCdzIGZyZWVkLlxuXG5TbyBpdCBsb29rcyBjb3JyZWN0LlxuXG5Ib3dldmVyLCBpZiBhbGwgdGhpcyBpcyBjb3JyZWN0LCB3aHkgd2FzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCByZW1vdmVkIGZyb20gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgPyAgTGV0IG1lIHJlLWV4YW1pbmUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBvbmUgbW9yZSB0aW1lLi4uICBPa2F5LCBubywgaXQncyBjb3JyZWN0LiBJdCBjb3JyZWN0bHkgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLlxuXG5MZXQncyB0ZXN0IHRoaXMgaW4gYSB2YXJpZXR5IG9mIHNpdHVhdGlvbnMuIElmIGFsbCB0aGUgdGVzdHMgcGFzcywgdGhlbiB0aGF0IHBhdGNoIHNob3VsZCBub3QgaGF2ZSByZW1vdmVkIHRoaXMuIExldCBtZSB2ZXJpZnkgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjQ0LjM0ODIxNjg4M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcyNjYyOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9iYXRtYW4tYWR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU0NT1pbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4Ny0vKipcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU4ODogKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5MS0gKi9cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU5MjpzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkzLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02NzA9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkxLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjkyOlxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5My1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTA4Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5Ni1cXHRpZiAodmxhbikge1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5NzpcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk4LVxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjQ1LjMyMDg5MzU2OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc4NjA3NDU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkxBTiBSZWZlcmVuY2UgQ291bnRpbmcgaW4gYmF0YWR2KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ20gbG9va2luZyBhdCB0aGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBmdW5jdGlvbi4gSXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBCdXQgd2FpdCwgSSdtIGFsc28gc2VlaW5nIHRoaXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGZ1bmN0aW9uLCB3aGljaCBhbHNvIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gVGhlIHBhdGNoIHJlbW92ZWQgaXQgZnJvbSBvbmx5IHRoZSBsYXR0ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gU28sIEkgbmVlZCB0byBsb29rIGNsb3Nlci5cblxuQ2hlY2tpbmcgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFnYWluLCB5ZXMsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgYW5kICp0aGVuKiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gT2theSwgYnV0IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGNhbGxlZCB3aGVuIGEgVkxBTiBpcyBkZWxldGVkLiBOb3csIGxldCdzIGxvb2sgYXQgdGhlIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBpdCBmaXJzdCB0cmllcyB0byBnZXQgYSBWTEFOIHVzaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgYW5kIGlmIGl0IGRvZXNuJ3QgZXhpc3QsIGl0IGNyZWF0ZXMgb25lLlxuXG5DcnVjaWFsbHksIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGRvZXMgKm5vdCogY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgYWZ0ZXIgdGhlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBjYWxsISBUaGlzIG1lYW5zIHRoZSByZWZlcmVuY2UgY291bnQgZnJvbSBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgaXMgbGVmdCBoYW5naW5nLCBzbyB0byBzcGVhay4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uIG9yIGFsYXJtaW5nLlxuXG5JZiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCAqbmV2ZXIqIGRyb3BzIHRoZSByZWZlcmVuY2UsIHRoZW4gZXZlcnkgdGltZSBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBpcyBjYWxsZWQgb24gYSBcInJldml2ZWRcIiBWTEFOLCB0aGUgcmVmY291bnQgaXMgaW5jcmVtZW50ZWQgYnkgb25lISBUaGlzIGlzIGluY29uc2lzdGVudCEgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgVkxBTiwgc28gaXQgc2hvdWxkIGJlIGZpbmUsIGJ1dCB0aGUgcmVmY291bnQgd291bGQgYmUgMi5cblxuVGhpbmtpbmcgaXQgdGhyb3VnaC4uLiBJZiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBjcmVhdGVzIHRoZSBWTEFOLCB0aGUgcmVmY291bnQgaXMgMS4gSWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMsIGFuZCBpcyBcInJldml2ZWRcIiwgdGhlIHJlZmNvdW50IGlzIDIhIFRoaXMgaXMgYSBiaWcgcHJvYmxlbS5cblxuVGhlbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgY2FsbGVkLCB3aGljaCBkcm9wcyB0d28gcmVmZXJlbmNlcyEgSWYgaXQgd2FzIGNyZWF0ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCwgdGhlIHJlZmNvdW50IHN0YXJ0cyBhdCAxLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBhIHJlZmVyZW5jZSAobm93IDIpLCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSAobm93IDEpLCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgZHJvcHMgdGhlIGZpbmFsIG9uZSAobm93IDApLiBUaGlzICp3b3JrcyogZm9yIGEgKmNyZWF0ZWQqIFZMQU4uXG5cbkJ1dCBpZiBpdCB3YXMgcmV2aXZlZCwgdGhlIHJlZmNvdW50IHN0YXJ0cyBhdCAyLiBUaGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGFub3RoZXIgcmVmZXJlbmNlIChyZWZjb3VudCAzKS4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyBvbmUgKHJlZmNvdW50IDIpLiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgZHJvcHMgKmFub3RoZXIqIHJlZmVyZW5jZSAocmVmY291bnQgMSkuIFRoZSBWTEFOICppc24ndCogZnJlZWQuIEl0IHJlbWFpbnMgaW4gdGhlIGxpc3QhXG5cbklmIGl0J3Mgbm90IGZyZWVkLCBpdCBjYW4gYmUgcmV2aXZlZCBhZ2FpbiwgdGhlIHJlZmNvdW50IGJlY29tZXMgMiwgdGhlbiBraWxsZWQgYWdhaW4gd2l0aCB0aGUgcmVmY291bnQgYmVjb21pbmcgMSEgSXQgKm5ldmVyKiBnZXRzIGZyZWVkISBXYWl0ISBUaGF0J3MgYSBtZW1vcnkgbGVhaywgYnV0IGl0IHNob3VsZG4ndCBjYXVzZSBhIGNyYXNoLiBVbmxlc3MuLi5cblxuQnV0IHdoYXQgaWYsICp3aGF0IGlmKiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCB3YXMgc3VwcG9zZWQgdG8gZHJvcCB0aGUgcmVmZXJlbmNlPyBJIG5lZWQgdG8gY2hlY2sgYW5kIHZlcmlmeSBpZiB0aGUgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZnVuY3Rpb24gZHJvcHMgdGhlIHJlZmVyZW5jZSBhcyB3ZWxsIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ0NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjo1Ni4xMDY5NzE3NTRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdFxcdHZpZCB8PSBCQVRBRFZfVkxBTl9IQVNfVEFHO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHQvKiBpZiBhIG5ldyB2bGFuIGlzIGdldHRpbmcgY3JlYXRlZCBhbmQgaXQgYWxyZWFkeSBleGlzdHMsIGl0IG1lYW5zIHRoYXRcXG4gNjM4OlxcdFxcdCAqIGl0IHdhcyBub3QgZGVsZXRlZCB5ZXQuIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSBpbmNyZWFzZXMgdGhlXFxuIDYzOTpcXHRcXHQgKiByZWZjb3VudCBpbiBvcmRlciB0byByZXZpdmUgdGhlIG9iamVjdC5cXG4gNjQwOlxcdFxcdCAqXFxuIDY0MTpcXHRcXHQgKiBpZiBpdCBkb2VzIG5vdCBleGlzdCB0aGVuIGNyZWF0ZSBpdC5cXG4gNjQyOlxcdFxcdCAqL1xcbiA2NDM6XFx0XFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCk7XFxuIDY0NDpcXHRcXHRpZiAoIXZsYW4pXFxuIDY0NTpcXHRcXHRcXHRyZXR1cm4gYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihiYXRfcHJpdiwgdmlkKTtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0LyogYWRkIGEgbmV3IFRUIGxvY2FsIGVudHJ5LiBUaGlzIG9uZSB3aWxsIGJlIG1hcmtlZCB3aXRoIHRoZSBOT1BVUkdFXFxuIDY0ODpcXHRcXHQgKiBmbGFnLiBUaGlzIG11c3QgYmUgYWRkZWQgYWdhaW4sIGV2ZW4gaWYgdGhlIHZsYW4gb2JqZWN0IGFscmVhZHlcXG4gNjQ5OlxcdFxcdCAqIGV4aXN0cywgYmVjYXVzZSB0aGUgZW50cnkgd2FzIGRlbGV0ZWQgYnkga2lsbF92aWQoKVxcbiA2NTA6XFx0XFx0ICovXFxuIDY1MTpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLFxcbiA2NTI6XFx0XFx0XFx0XFx0ICAgIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkciwgdmlkLFxcbiA2NTM6XFx0XFx0XFx0XFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0cmV0dXJuIDA7XFxuIDY1NjpcXHR9XFxuIDY1NzpcXHRcXG4gNjU4OlxcdC8qKlxcbiA2NTk6XFx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2NjA6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjYxOlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG4gNjYyOlxcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxcbiA2NjM6XFx0ICpcXG4gNjY0OlxcdCAqIERlc3Ryb3kgYWxsIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHVzZWQgdG8gaGFuZGxlIHRoZSB2bGFuIGlkZW50aWZpZWQgYnkgdmlkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjU2LjEwNzEwMTcyNFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTMyMjczNTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZjb3VudCBEZWVwIERpdmUgaW4gYmF0YWR2IFZMQU4gTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgY29yZSBvZiB3aGF0J3MgYm90aGVyaW5nIG1lLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgVkxBTiByZWZlcmVuY2UgY291bnRpbmcgaW4gYGJhdGFkdmAgYW5kIEkndmUgaGl0IGEgY29uY2VwdHVhbCBzbmFnLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLCBhbmQgd2hldGhlciB0aGV5IGNvcnJlY3RseSBoYW5kbGUgdGhlIHJlZmVyZW5jZSBjb3VudC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICpzaG91bGQqIGJlIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UuIFR1cm5zIG91dCwgaXQgZG9lc24ndC4gSWYgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZG9lc24ndCBkcm9wIHRoZSByZWZlcmVuY2UsIHRoYXQgbWVhbnMgYSBWTEFOIG9iamVjdCBpcyBsZWFrZWQgaW5pdGlhbGx5LiBUaGlzIGxlYWRzIG1lIHRvIGJlbGlldmUgdGhlIHByb2JsZW0gbGllcyB3aXRoIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC5cblxuSWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRyb3BzIDIgcmVmZXJlbmNlcywgYW5kIGl0IHdhcyBjcmVhdGVkLCB0aGVuIGl0J3MgZnJlZWQgLSB0aGF0J3Mgc3RhbmRhcmQuIEhvd2V2ZXIsIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIHJldml2ZXMgaXQsIGFuZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgdGhlbiBkcm9wcyAyIHJlZmVyZW5jZXMgYWdhaW4sIGl0IGNvdWxkIGJlIGEgbWVzcy4gSWYgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZG9lcyByZXZpdmUgaXQsIGl0IG1lYW5zIGl0ICp3YXNuJ3QqIGZyZWVkLiBTbywgc29tZXRoaW5nIGVsc2UgbXVzdCBoYXZlIGJlZW4gaG9sZGluZyBhIHJlZmVyZW5jZSwgc3VjaCBhcyBhIFRUIGVudHJ5LiBcblxuSGVyZSdzIHRoZSBwcm9ibGVtIEkgc2VlIG5vdzpcbmBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgcmVmZXJlbmNlIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBhbmQgaXQgYWxzbyBkcm9wcyB0aGUgXCJsaXN0XCIgcmVmZXJlbmNlLiBUaGUgdGhpbmcgaXMsIHdoZW4gaXQgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLCB0aGUgb2JqZWN0IGlzIFNUSUxMIG9uIHRoZSBsaXN0ISBIb3dldmVyLCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzbid0IGNhbGxlZCwgc28gdGhlcmUncyBhIHByb2JsZW0gaGVyZS4gVGhlIHJlZmNvdW50IGlzIGVmZmVjdGl2ZWx5IG9uZSBsZXNzIHRoYW4gaXQgc2hvdWxkIGJlLiBBdCB0aGlzIHBvaW50IHRoZSBWTEFOIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IHdoZW4gcmVmY291bnQgZHJvcHMgdG8gemVyby5cblxuSSdtIG5vdyBzdGFydGluZyB0byBzZWUgdGhpcyBtZWFucyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgY2FuIGZpbmQgdGhlIG9iamVjdCwgYW5kIHRoZXJlZm9yZSByZXZpdmUgaXQuIFNvIHRoZSBwcm9ibGVtIGlzIHRoZW4gYWJvdXQgdGhlIHJlZmNvdW50LiBJJ20gZ29pbmcgdG8gdHJhY2UgdGhlIHJlZmNvdW50LlxuXG4xLiAgKipDcmVhdGlvbjoqKiBXaGVuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGNyZWF0ZXMgdGhlIFZMQU4sIHRoZSByZWZjb3VudCBzdGFydHMgYXQgMSAodGhlIGxpc3QncyByZWZlcmVuY2UpLlxuMi4gICoqRXh0ZXJuYWwgUmVmZXJlbmNlOioqIElmIHNvbWV0aGluZyBlbHNlIGdldHMgYSByZWZlcmVuY2UgKGxpa2UgYSBUVCBlbnRyeSksIHRoZSByZWZjb3VudCBiZWNvbWVzIDIuXG4zLiAgKipLaWxsaW5nIChhbmQgcG90ZW50aWFsbHkgcmV2aXZpbmcpOioqIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGFub3RoZXIgcmVmZXJlbmNlIHRvIHRoZSB2bGFuIHdoaWNoIHdpbGwgYmUgMywgZGVzdHJveXMgdGhlIHZsYW4sIGFuZCB0aGVuIGRyb3BzIDIgcmVmZXJlbmNlcywgc28gdGhlIGNvdW50IGdvZXMgdG8gMSwgYnV0IHRoZSB2bGFuIGlzIG5vdCBmcmVlZCBiZWNhdXNlIHRoZSBsaXN0IGhhcyBvbmUgcmVmZXJlbmNlLlxuNC4gICoqUmV2aXZhbDoqKiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBnZXRzIGFub3RoZXIgcmVmZXJlbmNlLCBhbmQgdGhlIHJlZmNvdW50IGdvZXMgdG8gMi5cbjUuICAqKlNvbWVvbmUgZHJvcHMgdGhlIHJlZmVyZW5jZToqKiBOb3cgdGhlIHJlZmNvdW50IGdvZXMgdG8gMSBhZ2FpbiwgYnV0IHRoZSBvYmplY3QgaXMgc3RpbGwgb24gdGhlIGxpc3QuXG42LiAgKipLaWxsaW5nIChhZ2Fpbik6KiogVGhlIHByb2Nlc3MgcmVwZWF0cy5cblxuQnV0IHRoZW4gSSByZWFsaXplZCwgd2FpdCwgaWYgdGhpcyB3b3Jrcywgd2h5IHdhcyB0aGUgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIHJlbW92ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGA/IFRoaXMgaXNuJ3QgbWF0Y2hpbmcgdXAuLi5cblxuR29pbmcgYmFjayB0byBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCwgaXQgZWl0aGVyIGNyZWF0ZXMgYSBuZXcgVkxBTiwgb3IgaXQgZ2V0cyB0aGUgZXhpc3Rpbmcgb25lLiBJZiBpdCBnZXRzIHRoZSBleGlzdGluZyBvbmUsIGl0ICphZGRzKiBhIFRUIGVudHJ5LCB3aGljaCBJIHRoaW5rIG1lYW5zIGl0IHdpbGwgcmV2aXZlIHRoZSBvYmplY3QuIFxuXG5UaGUgcHJvYmxlbSBpcywgaWYgdGhlIHJlZmNvdW50IGlzIHJldml2ZWQgYnV0IG5vIG9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UsIHRoZSByZWZjb3VudCBpcyBvbmUgYXQgdGhlIGJlZ2lubmluZywgZ2V0cyByZXZpdmVkIHNvIHRoZSByZWZjb3VudCBiZWNvbWVzIDIuIFRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHRha2VzIHR3bywgYnV0IGl0IG1lYW5zIHRoYXQgdGhlIHZsYW4gY291bnQgd2lsbCBnbyB0byB6ZXJvIGFuZCBpdCBpcyBmcmVlZC4gQnV0IHRoaXMgc2NlbmFyaW8gaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0IGNhbiBvbmx5IGJlIHJldml2ZWQgaWYgc29tZW9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UsIHNvIGlmIHNvbWVib2R5IGVsc2UgaXMgaG9sZGluZyBhIHJlZmVyZW5jZSwgdGhlIGNvdW50IHdpbGwgYmUgYXQgbGVhc3QgMSwgdGhlbiByZXZpdmVkIHRvIGJlIGF0IGxlYXN0IDIsIGFuZCB0aGVuIHRoZSByZWZjb3VudCBpcyBkcm9wcGVkIGJ5IDIgc28gdGhlIG5ldCBjaGFuZ2UgaXMgLTEuXG5cbklmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyAyIHJlZmVyZW5jZXMsIHNvIHRoZSBvYmplY3QgY291bGQgYmUgcmV2aXZlZCBvciBraWxsZWQsIHRoZSBuZXQgY2hhbmdlIGlzIC0xLiBXaGF0IHdpbGwgaGFwcGVuIGlmIHRoaXMgaXMgaGFwcGVuaW5nIG1hbnkgdGltZXM/IFRoZSByZWZjb3VudCB3aWxsIGRlY3JlYXNlIGJ5IG9uZSBhbmQsIGFzIGEgcmVzdWx0LCBldmVudHVhbGx5IGJlIGZyZWVkIVxuXG5Pa2F5LCBzbyBJIHdpbGwgYW5hbHl6ZSBhbmQgcmV0cmFjZSBteSBzdGVwcyEgVGhlIFRUIGVudHJ5IGhvbGRzIDEgcmVmZXJlbmNlLiBUaGUgbGlzdCBob2xkcyB6ZXJvIHNpbmNlIGl0IHdhcyBkcm9wcGVkIHRoZSBmaXJzdCB0aW1lIGBraWxsX3ZpZGAgd2FzIGNhbGxlZC4gSWYgdGhlIGxpc3QgaGFzIHplcm8sIHRoZSByZWZjb3VudCBpcyAxIGZyb20gdGhlIFRUIGVudHJ5LiBJZiBgYmF0YWR2X2ludGVyZmFjZV9cblxuIiwiSW5wdXRUb2tlbnMiOjM1Nzc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE3OjE1LjQyOTg0MDc3NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MzQ3Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl90dF9sb2NhbF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTEyPXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTMyLVxcdFxcdFxcdFxcdCAgICAgICBcXFwibWFjIGFkZHJlc3MgY2hhbmdlZFxcXCIsIGZhbHNlKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjEzMzpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGRldiwgYWRkci1cXHUwMDNlc2FfZGF0YSwgdmxhbi1cXHUwMDNldmlkLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTM0LVxcdFxcdFxcdFxcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTE2Nz1zdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0yMzUtXFx0ICAgICFiYXRhZHZfYmxhX2lzX2xvb3BkZXRlY3RfbWFjKGV0aGhkci1cXHUwMDNlaF9zb3VyY2UpKSB7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoyMzY6XFx0XFx0Y2xpZW50X2FkZGVkID0gYmF0YWR2X3R0X2xvY2FsX2FkZChtZXNoX2lmYWNlLCBldGhoZHItXFx1MDAzZWhfc291cmNlLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMjM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHZpZCwgc2tiLVxcdTAwM2Vza2JfaWlmLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01NzYtXFx0ICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1Nzc6XFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZSxcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU3OC1cXHRcXHRcXHQgICAgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLCB2aWQsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTYxNT1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY1MC1cXHQgKi9cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY1MTpcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjUyLVxcdFxcdFxcdCAgICBiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZS1cXHUwMDNlZGV2X2FkZHIsIHZpZCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTcxMT1zdGF0aWMgdm9pZCBiYXRhZHZfbWNhc3RfbWxhX3R0X2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNzI0LVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjcyNTpcXHRcXHRpZiAoIWJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UsXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNzI2LVxcdFxcdFxcdFxcdFxcdCBtY2FzdF9lbnRyeS1cXHUwMDNlYWRkciwgQkFUQURWX05PX0ZMQUdTLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz01NTA9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU3Ni0vKipcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjU3NzogKiBiYXRhZHZfdHRfbG9jYWxfYWRkKCkgLSBhZGQgYSBuZXcgY2xpZW50IHRvIHRoZSBsb2NhbCB0YWJsZSBvciB1cGRhdGUgYW5cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU3OC0gKiAgZXhpc3RpbmcgY2xpZW50XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU4OC0gKi9cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjU4OTpib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNTkwLVxcdFxcdFxcdCB1bnNpZ25lZCBzaG9ydCB2aWQsIGludCBpZmluZGV4LCB1MzIgbWFyaylcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmg9MTg9aW50IGJhdGFkdl90dF9pbml0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmg6MTk6Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oLTIwLVxcdFxcdFxcdCB1bnNpZ25lZCBzaG9ydCB2aWQsIGludCBpZmluZGV4LCB1MzIgbWFyayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE3OjE1LjY5ODE5NjU5OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU2OTYxODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIHN1YmplY3Q6XG5cbioqQW5hbHl6aW5nIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSXMgdGhpcyByZWxhdGVkIHRvIHRoZSB0b3BvbG9neSB0YWJsZSwgb3IgdGhlIGZvcndhcmRpbmcgdGFibGU/IEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gbGVhbmluZyB0b3dhcmQgdGhlIHRvcG9sb2d5IHRhYmxlIOKAkyBzcGVjaWZpY2FsbHksIGFkZGluZyBhIGxvY2FsIGVudHJ5LiBXaGF0J3MgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZT8gSXMgaXQgaGFuZGxpbmcgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IG5laWdoYm9yLCBvciBpcyBpdCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0LCBwZXJoYXBzIG1hbmFnaW5nIHNvbWUgc29ydCBvZiBsb2NhbCBmb3J3YXJkaW5nIG9wdGltaXphdGlvbj8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIEJBVE1BTi1hZHYgY29kZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgYGJhdGFkdl90dF9sb2NhbF9lbnRyeWAgYW5kIGFueSByZWxhdGVkIGxvY2tzIHRoYXQgY29tZSB0byBtaW5kIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVycy4gV2hhdCBhcmUgdGhlIGlucHV0cywgYW5kIHdoYXQgZG8gdGhleSByZXByZXNlbnQ/IEFuZCB0aGVuLCBjcml0aWNhbGx5LCB0aGUgcmV0dXJuIHZhbHVlLiBJcyBpdCBlcnJvciBoYW5kbGluZywgb3IgYSBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdG9yPyBBIGRlZXAgZGl2ZSBpbiBpdHMgdXNlIGluIHRoZSBjb2RlIHNob3VsZCBtYWtlIHRoYXQgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDE4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6MTguOTU1MTYyODlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg5OlxcdGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXFxuIDU5MDpcXHRcXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmlkLCBpbnQgaWZpbmRleCwgdTMyIG1hcmspXFxuIDU5MTpcXHR7XFxuIDU5MjpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XFxuIDU5MzpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbDtcXG4gNTk0OlxcdFxcdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwgPSBOVUxMO1xcbiA1OTU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChtZXNoX2lmYWNlKTtcXG4gNTk2OlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuIDU5NzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqaW5fZGV2ID0gTlVMTDtcXG4gNTk4OlxcdFxcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaW5faGFyZGlmID0gTlVMTDtcXG4gNTk5OlxcdFxcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkO1xcbiA2MDA6XFx0XFx0c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWdfZW50cnk7XFxuIDYwMTpcXHRcXHRpbnQgaGFzaF9hZGRlZCwgdGFibGVfc2l6ZSwgcGFja2V0X3NpemVfbWF4O1xcbiA2MDI6XFx0XFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gNjAzOlxcdFxcdGJvb2wgcm9hbWVkX2JhY2sgPSBmYWxzZTtcXG4gNjA0OlxcdFxcdHU4IHJlbW90ZV9mbGFncztcXG4gNjA1OlxcdFxcdHUzMiBtYXRjaF9tYXJrO1xcbiA2MDY6XFx0XFxuIDYwNzpcXHRcXHRpZiAoaWZpbmRleCAhPSBCQVRBRFZfTlVMTF9JRklOREVYKVxcbiA2MDg6XFx0XFx0XFx0aW5fZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpO1xcbiA2MDk6XFx0XFxuIDYxMDpcXHRcXHRpZiAoaW5fZGV2KVxcbiA2MTE6XFx0XFx0XFx0aW5faGFyZGlmID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGluX2Rldik7XFxuIDYxMjpcXHRcXG4gNjEzOlxcdFxcdHR0X2xvY2FsID0gYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcXG4gNjE0OlxcdFxcbiA2MTU6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4gNjE2OlxcdFxcdFxcdHR0X2dsb2JhbCA9IGJhdGFkdl90dF9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHRpZiAodHRfbG9jYWwpIHtcXG4gNjE5OlxcdFxcdFxcdHR0X2xvY2FsLVxcdTAwM2VsYXN0X3NlZW4gPSBqaWZmaWVzO1xcbiA2MjA6XFx0XFx0XFx0aWYgKHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpIHtcXG4gNjIxOlxcdFxcdFxcdFxcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXFxuIDYyMjpcXHRcXHRcXHRcXHRcXHQgICBcXFwiUmUtYWRkaW5nIHBlbmRpbmcgY2xpZW50ICVwTSAodmlkOiAlZClcXFxcblxcXCIsXFxuIDYyMzpcXHRcXHRcXHRcXHRcXHQgICBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCkpO1xcbiA2MjQ6XFx0XFx0XFx0XFx0Lyogd2hhdGV2ZXIgdGhlIHJlYXNvbiB3aHkgdGhlIFBFTkRJTkcgZmxhZyB3YXMgc2V0LFxcbiA2MjU6XFx0XFx0XFx0XFx0ICogdGhpcyBpcyBhIGNsaWVudCB3aGljaCB3YXMgZW5xdWV1ZWQgdG8gYmUgcmVtb3ZlZCBpblxcbiA2MjY6XFx0XFx0XFx0XFx0ICogdGhpcyBvcmlnX2ludGVydmFsLiBTaW5jZSBpdCBwb3BwZWQgdXAgYWdhaW4sIHRoZVxcbiA2Mjc6XFx0XFx0XFx0XFx0ICogZmxhZyBjYW4gYmUgcmVzZXQgbGlrZSBpdCB3YXMgbmV2ZXIgZW5xdWV1ZWRcXG4gNjI4OlxcdFxcdFxcdFxcdCAqL1xcbiA2Mjk6XFx0XFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HO1xcbiA2MzA6XFx0XFx0XFx0XFx0Z290byBhZGRfZXZlbnQ7XFxuIDYzMTpcXHRcXHRcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdFxcdGlmICh0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSB7XFxuIDYzNDpcXHRcXHRcXHRcXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxcbiA2MzU6XFx0XFx0XFx0XFx0XFx0ICAgXFxcIlJvYW1pbmcgY2xpZW50ICVwTSAodmlkOiAlZCkgY2FtZSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBsb2NhdGlvblxcXFxuXFxcIixcXG4gNjM2OlxcdFxcdFxcdFxcdFxcdCAgIGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSk7XFxuIDYzNzpcXHRcXHRcXHRcXHQvKiB0aGUgUk9BTSBmbGFnIGlzIHNldCBiZWNhdXNlIHRoaXMgY2xpZW50IHJvYW1lZCBhd2F5XFxuIDYzODpcXHRcXHRcXHRcXHQgKiBhbmQgdGhlIG5vZGUgZ290IGEgcm9hbWluZ19hZHZlcnRpc2VtZW50IG1lc3NhZ2UuIE5vd1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNzoxOC45NTU0NDYwN1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY4MjI5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0LCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCoqXG5cbkFscmlnaHQsIGxldCdzIGRyaWxsIGRvd24gaW50byBgYmF0YWR2X3R0X2xvY2FsX2FkZGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhZGRpbmcgbG9jYWwgdHVubmVsIHRhcmdldHMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIG51YW5jZXMgaXMgZXNzZW50aWFsLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCBwcm9iYWJseSBoYW5kbGVzIHN5bmNocm9uaXphdGlvbiwgZXJyb3IgY2hlY2tpbmcsIGFuZCBwb3RlbnRpYWxseSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIG9yIGZvcndhcmRpbmcgZW5naW5lLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgbmV3IHRhcmdldCBnZXRzIGFjY2VwdGVkLiBJJ20ga2VlbiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGFwYXRoLCBzcGVjaWZpY2FsbHkgaG93IGl0IGFubm91bmNlcyB0aGlzIG5ldyBsb2NhbCBUVCBpbiB0aGUgbmV0d29yay4gVGhlcmUncyBhbHNvIHRoZSBxdWVzdGlvbiBvZiBjYWNoaW5nIGFuZCBvcHRpbWl6YXRpb24uIERvZXMgaXQgaW1wbGVtZW50IGFueSBzdHJhdGVnaWVzIGZvciByZWR1Y2luZyBvdmVyaGVhZCwgb3IgaGFuZGxlIGNhc2VzIHdoZXJlIGEgdGFyZ2V0IGFscmVhZHkgZXhpc3RzPyBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjk2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNzoyMi4wMjM2Nzg2MjFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM5OlxcdFxcdFxcdFxcdCAqIHRoYXQgdGhlIGNsaWVudCBwb3BwZWQgdXAgYWdhaW4gYXQgaXRzIG9yaWdpbmFsXFxuIDY0MDpcXHRcXHRcXHRcXHQgKiBsb2NhdGlvbiBzdWNoIGZsYWcgY2FuIGJlIHVuc2V0XFxuIDY0MTpcXHRcXHRcXHRcXHQgKi9cXG4gNjQyOlxcdFxcdFxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG4gNjQzOlxcdFxcdFxcdFxcdHJvYW1lZF9iYWNrID0gdHJ1ZTtcXG4gNjQ0OlxcdFxcdFxcdH1cXG4gNjQ1OlxcdFxcdFxcdGdvdG8gY2hlY2tfcm9hbWluZztcXG4gNjQ2OlxcdFxcdH1cXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0LyogSWdub3JlIHRoZSBjbGllbnQgaWYgd2UgY2Fubm90IHNlbmQgaXQgaW4gYSBmdWxsIHRhYmxlIHJlc3BvbnNlLiAqL1xcbiA2NDk6XFx0XFx0dGFibGVfc2l6ZSA9IGJhdGFkdl90dF9sb2NhbF90YWJsZV90cmFuc21pdF9zaXplKGJhdF9wcml2KTtcXG4gNjUwOlxcdFxcdHRhYmxlX3NpemUgKz0gYmF0YWR2X3R0X2xlbigxKTtcXG4gNjUxOlxcdFxcdHBhY2tldF9zaXplX21heCA9IGF0b21pY19yZWFkKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlcGFja2V0X3NpemVfbWF4KTtcXG4gNjUyOlxcdFxcdGlmICh0YWJsZV9zaXplIFxcdTAwM2UgcGFja2V0X3NpemVfbWF4KSB7XFxuIDY1MzpcXHRcXHRcXHRuZXRfcmF0ZWxpbWl0ZWRfZnVuY3Rpb24oYmF0YWR2X2luZm8sIG1lc2hfaWZhY2UsXFxuIDY1NDpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcIkxvY2FsIHRyYW5zbGF0aW9uIHRhYmxlIHNpemUgKCVpKSBleGNlZWRzIG1heGltdW0gcGFja2V0IHNpemUgKCVpKTsgSWdub3JpbmcgbmV3IGxvY2FsIHR0IGVudHJ5OiAlcE1cXFxcblxcXCIsXFxuIDY1NTpcXHRcXHRcXHRcXHRcXHRcXHQgdGFibGVfc2l6ZSwgcGFja2V0X3NpemVfbWF4LCBhZGRyKTtcXG4gNjU2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2NTc6XFx0XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHR0dF9sb2NhbCA9IGttZW1fY2FjaGVfYWxsb2MoYmF0YWR2X3RsX2NhY2hlLCBHRlBfQVRPTUlDKTtcXG4gNjYwOlxcdFxcdGlmICghdHRfbG9jYWwpXFxuIDY2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjYyOlxcdFxcbiA2NjM6XFx0XFx0LyogaW5jcmVhc2UgdGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJlbGF0ZWQgdmxhbiAqL1xcbiA2NjQ6XFx0XFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCk7XFxuIDY2NTpcXHRcXHRpZiAoIXZsYW4pIHtcXG4gNjY2OlxcdFxcdFxcdG5ldF9yYXRlbGltaXRlZF9mdW5jdGlvbihiYXRhZHZfaW5mbywgbWVzaF9pZmFjZSxcXG4gNjY3OlxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiYWRkaW5nIFRUIGxvY2FsIGVudHJ5ICVwTSB0byBub24tZXhpc3RlbnQgVkxBTiAlZFxcXFxuXFxcIixcXG4gNjY4OlxcdFxcdFxcdFxcdFxcdFxcdCBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCkpO1xcbiA2Njk6XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGJhdGFkdl90bF9jYWNoZSwgdHRfbG9jYWwpO1xcbiA2NzA6XFx0XFx0XFx0dHRfbG9jYWwgPSBOVUxMO1xcbiA2NzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDY3MjpcXHRcXHR9XFxuIDY3MzpcXHRcXG4gNjc0OlxcdFxcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXFxuIDY3NTpcXHRcXHRcXHQgICBcXFwiQ3JlYXRpbmcgbmV3IGxvY2FsIHR0IGVudHJ5OiAlcE0gKHZpZDogJWQsIHR0dm46ICVkKVxcXFxuXFxcIixcXG4gNjc2OlxcdFxcdFxcdCAgIGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSxcXG4gNjc3OlxcdFxcdFxcdCAgICh1OClhdG9taWNfcmVhZChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZXR0LnZuKSk7XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdGV0aGVyX2FkZHJfY29weSh0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmFkZHIsIGFkZHIpO1xcbiA2ODA6XFx0XFx0LyogVGhlIGxvY2FsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgTkVXIHRvIGF2b2lkIHRvIHNlbmQgaXQgaW5cXG4gNjgxOlxcdFxcdCAqIGEgZnVsbCB0YWJsZSByZXNwb25zZSBnb2luZyBvdXQgYmVmb3JlIHRoZSBuZXh0IHR0dm4gaW5jcmVtZW50XFxuIDY4MjpcXHRcXHQgKiAoY29uc2lzdGVuY3kgY2hlY2spXFxuIDY4MzpcXHRcXHQgKi9cXG4gNjg0OlxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgPSBCQVRBRFZfVFRfQ0xJRU5UX05FVztcXG4gNjg1OlxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24udmlkID0gdmlkO1xcbiA2ODY6XFx0XFx0aWYgKGJhdGFkdl9pc193aWZpX2hhcmRpZihpbl9oYXJkaWYpKVxcbiA2ODc6XFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1dJRkk7XFxuIDY4ODpcXHRcXHRrcmVmX2luaXQoXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24ucmVmY291bnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNzoyMi4wMjM5MTA5MjFaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNzI0NjAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBWTEFOIEFzc29jaWF0aW9uIGluIGJhdGFkdl90dF9sb2NhbF9hZGQqKlxuXG5Pa2F5LCBzbyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgaXMgZG9pbmcgc29tZXRoaW5nIHdpdGggVkxBTnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgY2FsbGluZyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgd2l0aCB0aGUgcmVsZXZhbnQgYGJhdF9wcml2YCBhbmQgYHZpZGAgYXJndW1lbnRzLCBhbmQgdGhlbiBzdG9yaW5nIHRoZSByZXN1bHQsIHByZXN1bWFibHkgYSBWTEFOIGlkZW50aWZpZXIsIGluIGB0dF9sb2NhbC1cdTAwM2V2bGFuYC4gVGhpcyBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQg4oCTIHdlJ3JlIGxpa2VseSBhc3NvY2lhdGluZyBhIGxvY2FsIGVudHJ5IHdpdGggYSBzcGVjaWZpYyBWTEFOLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBjaGVjayBwcmVjaXNlbHkgd2hlcmUgYW5kIGhvdyBgdHRfbG9jYWwtXHUwMDNldmxhbmAgZ2V0cyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIG9mIHRoaXMgdmFyaWFibGUgdG8gYmUgY2VydGFpbiBvZiBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgQmF0YWR2IGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyBpdHMgb3JpZ2luIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ1NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6MjUuMjMxMTYwOTI3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4OTpcXHRcXHR0dF9sb2NhbC1cXHUwMDNlbGFzdF9zZWVuID0gamlmZmllcztcXG4gNjkwOlxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cXHUwMDNlbGFzdF9zZWVuO1xcbiA2OTE6XFx0XFx0dHRfbG9jYWwtXFx1MDAzZXZsYW4gPSB2bGFuO1xcbiA2OTI6XFx0XFxuIDY5MzpcXHRcXHQvKiB0aGUgYmF0bWFuIGludGVyZmFjZSBtYWMgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMgc2hvdWxkIG5ldmVyIGJlXFxuIDY5NDpcXHRcXHQgKiBwdXJnZWRcXG4gNjk1OlxcdFxcdCAqL1xcbiA2OTY6XFx0XFx0aWYgKGJhdGFkdl9jb21wYXJlX2V0aChhZGRyLCBtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkcikgfHxcXG4gNjk3OlxcdFxcdCAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4gNjk4OlxcdFxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFO1xcbiA2OTk6XFx0XFxuIDcwMDpcXHRcXHRrcmVmX2dldChcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XFxuIDcwMTpcXHRcXHRoYXNoX2FkZGVkID0gYmF0YWR2X2hhc2hfYWRkKGJhdF9wcml2LVxcdTAwM2V0dC5sb2NhbF9oYXNoLCBiYXRhZHZfY29tcGFyZV90dCxcXG4gNzAyOlxcdFxcdFxcdFxcdFxcdCAgICAgYmF0YWR2X2Nob29zZV90dCwgXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24sXFxuIDcwMzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmhhc2hfZW50cnkpO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRpZiAodW5saWtlbHkoaGFzaF9hZGRlZCAhPSAwKSkge1xcbiA3MDY6XFx0XFx0XFx0LyogcmVtb3ZlIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBoYXNoICovXFxuIDcwNzpcXHRcXHRcXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsKTtcXG4gNzA4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3MDk6XFx0XFx0fVxcbiA3MTA6XFx0XFxuIDcxMTpcXHRhZGRfZXZlbnQ6XFxuIDcxMjpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpO1xcbiA3MTM6XFx0XFxuIDcxNDpcXHRjaGVja19yb2FtaW5nOlxcbiA3MTU6XFx0XFx0LyogQ2hlY2sgd2hldGhlciBpdCBpcyBhIHJvYW1pbmcsIGJ1dCBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgcm9hbWluZ1xcbiA3MTY6XFx0XFx0ICogcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWRcXG4gNzE3OlxcdFxcdCAqL1xcbiA3MTg6XFx0XFx0aWYgKHR0X2dsb2JhbCBcXHUwMDI2XFx1MDAyNiAhKHR0X2dsb2JhbC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSkge1xcbiA3MTk6XFx0XFx0XFx0LyogVGhlc2Ugbm9kZSBhcmUgcHJvYmFibHkgZ29pbmcgdG8gdXBkYXRlIHRoZWlyIHR0IHRhYmxlICovXFxuIDcyMDpcXHRcXHRcXHRoZWFkID0gXFx1MDAyNnR0X2dsb2JhbC1cXHUwMDNlb3JpZ19saXN0O1xcbiA3MjE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA3MjI6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9yaWdfZW50cnksIGhlYWQsIGxpc3QpIHtcXG4gNzIzOlxcdFxcdFxcdFxcdGJhdGFkdl9zZW5kX3JvYW1fYWR2KGJhdF9wcml2LCB0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5hZGRyLFxcbiA3MjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi52aWQsXFxuIDcyNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG9yaWdfZW50cnktXFx1MDAzZW9yaWdfbm9kZSk7XFxuIDcyNjpcXHRcXHRcXHR9XFxuIDcyNzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzI4OlxcdFxcdFxcdGlmIChyb2FtZWRfYmFjaykge1xcbiA3Mjk6XFx0XFx0XFx0XFx0YmF0YWR2X3R0X2dsb2JhbF9mcmVlKGJhdF9wcml2LCB0dF9nbG9iYWwsXFxuIDczMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiUm9hbWluZyBjYW5jZWxlZFxcXCIpO1xcbiA3MzE6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNzMyOlxcdFxcdFxcdFxcdC8qIFRoZSBnbG9iYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBST0FNSU5HIGFuZFxcbiA3MzM6XFx0XFx0XFx0XFx0ICogaGFzIHRvIGJlIGtlcHQgZm9yIGNvbnNpc3RlbmN5IHB1cnBvc2VcXG4gNzM0OlxcdFxcdFxcdFxcdCAqL1xcbiA3MzU6XFx0XFx0XFx0XFx0dHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbiA3MzY6XFx0XFx0XFx0XFx0dHRfZ2xvYmFsLVxcdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcXG4gNzM3OlxcdFxcdFxcdH1cXG4gNzM4OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6MjUuMjMxNDU3NDQ3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTg4OTk3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIFJlZmVyZW5jZSBDb3VudGluZyBpbiBCYXRtYW4tYWR2KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQmF0bWFuLWFkdiBWTEFOIG1hbmFnZW1lbnQgY29kZS4gSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHdoZW4gYSBUVCBlbnRyeSBpcyBjcmVhdGVkLCBpdCB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTiBvYmplY3QuIFRoZW4sIHdoZW4gdGhlIFRUIGVudHJ5IGlzIGZyZWVkLCBpdCByZWxlYXNlcyB0aGUgcmVmZXJlbmNlLiBUaGlzIG1ha2VzIHNlbnNlIHNvIGZhci5cblxuTm93LCBsZXQncyBsb29rIGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCByZXRyaWV2ZXMgYSBWTEFOIHVzaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YC4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJ3QqIHJlbGVhc2UgdGhpcyByZWZlcmVuY2UhIFRoZW4sIGl0IGFkZHMgYSBUVCBsb2NhbCBlbnRyeSwgd2hpY2ggYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAuIFRoaXMgbWVhbnMgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgbGVha3MgYSByZWZlcmVuY2UuXG5cblRoaXMgbGVhayBpcyBpbXBvcnRhbnQhIElmIHRoZSBWTEFOIHdhcyBjcmVhdGVkLCB0aGUgcmVmY291bnQgaXMgbGlrZWx5IDEgKGxpc3QpICsgMSAoVFQgZW50cnkpLiBUaGUgY2FsbCB0byBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBtZWFucyB0aGUgcmVmY291bnQgaXMgbm93IDM6IG9uZSBmcm9tIHRoZSBsaXN0LCBvbmUgZnJvbSB0aGUgbGVha2VkIHJlZmVyZW5jZSwgYW5kIG9uZSBmcm9tIHRoZSBUVCBlbnRyeS4gSWYgdGhlIFZMQU4gd2FzIHJldml2ZWQsIHRoZSByZWZjb3VudCBpcyBldmVuIGhpZ2hlciwgYWxzbyAzLlxuXG5JJ20gc3RhcnRpbmcgdG8gZ3Jhc3AgaG93IHRoaXMgaXMgc3VwcG9zZWQgdG8gd29yay4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHRoZW4gYWxzbyBnZXRzIGEgcmVmZXJlbmNlLiBUaGUgZGVzdHJ1Y3Rpb24gcHJvY2VzcyB0aGVuIGdldHMgbWVzc3ksIGJ1dCB1bHRpbWF0ZWx5IGxlYWRzIHRvIGEgcmVmY291bnQgb2YgMSBmb3IgYSAqY3JlYXRlZCogVkxBTiwgYW5kIDAgZm9yIGEgKnJldml2ZWQqIFZMQU4uIFNvLCBpZiBhIFZMQU4gd2FzIGNyZWF0ZWQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgYW5kIGl0J3MgZnJlZWQhXG5cbkhvd2V2ZXIsIGlmIGEgVkxBTiB3YXMgcmV2aXZlZCwgdGhlcmUncyBhIHByb2JsZW06IHRoZSByZWZjb3VudCBpbmNyZWFzZXMgYnkgMiB3aGVuIHJldml2ZWQsIGFuZCBkZWNyZWFzZXMgYnkgMiB3aGVuIFwia2lsbGVkXCIuIFRoZSBuZXQgY2hhbmdlIGlzIHplcm8sIHNvIGl0IHJldHVybnMgdG8gaXRzIHByZXZpb3VzIHJlZmNvdW50LlxuXG5UaGUgY3JpdGljYWwgaW5zaWdodCBoZXJlIGlzIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgSU5URU5USU9OQUxMWSBsZWFrcyBhIHJlZmVyZW5jZSEgSXQgZG9lcyB0aGlzIGJ5IGNhbGxpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGFuZCBmYWlsaW5nIHRvIHJlbGVhc2UgaXQuIFRoaXMgbGVha2VkIHJlZmVyZW5jZSBhY3RzIGFzIHRoZSAqbmV3KiBsaXN0IHJlZmVyZW5jZS4gVGhpcyBpcyB3aGF0IGVuYWJsZXMgdGhlIFZMQU4gdG8gYmUgXCJyZXZpdmVkXCIgYW5kIGVuc3VyZXMgaXQgc3RheXMgaW4gdGhlIGxpc3QsIGV2ZW4gYWZ0ZXIgaXQncyBsb2dpY2FsbHkgZGVzdHJveWVkLlxuXG5TbywgSSd2ZSBtYXBwZWQgb3V0IHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGJvdGggdGhlIG5ldyBhbmQgcmV2aXZlZCBjYXNlczogdGhlIHByb2Nlc3MgaXMgd2VsbC1iYWxhbmNlZC4gU29tZW9uZSBlbHNlIG1heSBoYXZlIGEgcmVmZXJlbmNlLCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBjYWxsZWQsIGFuZCBhdCB0aGUgZW5kIG9mIHRoaXMgcHJvY2VzcywgdGhlIFZMQU4gc3RpbGwgbGl2ZXMgaW4gdGhlIGxpc3QuXG5cbk5vdywgd2h5IHdhcyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBjYWxsIHJlbW92ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaW4gdGhlIHBhdGNoPyBJZiB0aGF0IGxpbmUgaXMgcmVtb3ZlZCwgaXQgKmxlYWtzKiBhIHJlZmVyZW5jZS4gVGhhdCBtZWFucyB0aGUgcmVmY291bnQgd2lsbCBuZXZlciByZWFjaCB6ZXJvLiBUaGlzIGNhbid0IGJlIGNvcnJlY3QuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgcGF0Y2ggaGFzIGEgaHVnZSBpbXBsaWNhdGlvbi4gVGhpcyBpbXBsaWVzIHRoZXJlIGlzIGEgYnVnLCB0aGUgcGF0Y2ggd2lsbCBicmVhayB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM1NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6NDMuNDIwNDU4MTg5WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTQwNjI4NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTQ1PWludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg3LS8qKlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTg4OiAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4OS0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkxLSAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTkyOnN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTY3MD1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTEtXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2OTI6XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkzLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMDgyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk2LVxcdGlmICh2bGFuKSB7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk3OlxcdFxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTgtXFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6NDMuNzc0NTMyMTc1WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTI4NDk1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBSZWZlcmVuY2UgQ291bnQgSXNzdWVzIGluIEJhdGFkdidzIFZMQU4gSGFuZGxpbmcqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJJ20gbG9va2luZyBhdCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIGhlcmUsIGFuZCBJJ20gZm9jdXNpbmcgb24gdGhpcyBibG9jazpcblxuYGBgY1xuXHQvKiBkZXN0cm95IHRoZSBcInVudGFnZ2VkXCIgVkxBTiAqL1xuXHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgQkFUQURWX05PX0ZMQUdTKTtcblx0aWYgKHZsYW4pIHtcblx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5cdFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcblx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGdldCBhIFZMQU4gcmVmZXJlbmNlLCBkZXN0cm95IGl0LCBhbmQgdGhlbiBkcm9wIHRoZSByZWZlcmVuY2UuIFRoYXQgYXBwZWFycyBiYWxhbmNlZCwgd2hpY2ggaXMgZ29vZC4gIEJ1dCB0aGVuIHRoZSBxdWVzdGlvbiBpcywgKndoeSogYXJlIHdlIHB1dHRpbmcgdGhlIHJlZmVyZW5jZT8gSXQgc2hvdWxkIGhhdmUgYmVlbiBhIGdldCBhbmQgYSBwdXQuXG5cblRoZW4gaXQgaGl0cyBtZTogc3VwcG9zZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWxzbyBkaWQgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIElmIGl0IGRpZCwgaXQgd291bGQgYmUgKnJlbW92aW5nKiB0aGUgcHV0IHRoYXQgc2hvdWxkIGJlIGhlcmUsIGFuZCB0aGF0IHdvdWxkIGJlIGEgbGVhayEgSSBoYWQgdG8gY2hlY2suXG5XYWl0LCBsZXQgbWUgcmVhZCB0aGUgY2FsbCB0byBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuXG5cbi4uLk5vcGUsIGl0J3Mgbm90IHByZXNlbnQuIFNvICp0aGF0KiBpcyBub3QgdGhlIHByb2JsZW0uXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBjb3VsZCBiZSBnb2luZyBvbj8gIERpZCBzb21lb25lIG1vZGlmeSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHRvIGJlIGEgZG91YmxlLWRlY3JlbWVudD8gTm8sIHRoYXQgZG9lc24ndCBtYWtlIHNlbnNlLiAgSXQgaXMgc3VwcG9zZWQgdG8gYmUgb25lIG9mIHRoZSBzaW1wbGVzdCBmdW5jdGlvbnMgaW4gdGhlIHdob2xlIG1vZHVsZS5cblxuT2theSwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCAqYWN0dWFsbHkqIGRvZXMuICBJdCBuZWVkcyBhIGNhcmVmdWwgcmVyZWFkLiBJIGFtIGdvaW5nIHRvIHJlcmVhZCB0aGUgc291cmNlIG5vdyBhbmQgdmVyaWZ5IHRoZSBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjkwNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNzo0OS4yMjczODQ1NTFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg4OlxcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG4gNTg5OlxcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiA1OTA6XFx0ICogQHZsYW46IHRoZSBvYmplY3QgdG8gcmVtb3ZlXFxuIDU5MTpcXHQgKi9cXG4gNTkyOlxcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIDU5MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG4gNTk0OlxcdHtcXG4gNTk1OlxcdFxcdC8qIGV4cGxpY2l0bHkgcmVtb3ZlIHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGJlY2F1c2UgaXQgaXMgbWFya2VkXFxuIDU5NjpcXHRcXHQgKiB3aXRoIHRoZSBOT1BVUkdFIGZsYWdcXG4gNTk3OlxcdFxcdCAqL1xcbiA1OTg6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLFxcbiA1OTk6XFx0XFx0XFx0XFx0ICAgICAgIHZsYW4tXFx1MDAzZXZpZCwgXFxcInZsYW4gaW50ZXJmYWNlIGRlc3Ryb3llZFxcXCIsIGZhbHNlKTtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4gNjAyOlxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0LyoqXFxuIDYwNTpcXHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2MDY6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjA3OlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6NDkuMjI3NDk4ODMxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NTQwOTMwMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmVyZW5jZSBDb3VudGluZyBTaGVuYW5pZ2FucyBpbiBWTEFOIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIHRoaXMgVkxBTiByZWZlcmVuY2UgY291bnRpbmcgaW4gdGhlIGJhdGFkdiBjb2RlLiAgRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAuICBJdCByZW1vdmVzIGEgVFQgZW50cnkuIERvZXMgaXQgYWxzbyBkcm9wIGEgcmVmZXJlbmNlIHRvIHRoZSBWTEFOIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVudHJ5PyBZZXMsIGl0IGRvZXMuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBlbnRyeSBpcyBiZWluZyBmcmVlZCwgYW5kIHdpdGggaXQsIHRoZSByZWZlcmVuY2UgaXQgaGVsZCB0byB0aGUgVkxBTi5cblxuTm93LCBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCAqYWRkcyogdGhlIFRUIGVudHJ5LCB3aGljaCBJIHNlZSBtZWFucyBpdCAqYWRkcyogYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4uIEdvdCBpdCwgc28gdGhlIFRUIGVudHJ5IGlzIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSB2bGFuIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIFRULlxuXG5Tbywgd2hlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCwgaXQncyBkcm9wcGluZyB0aGF0IFRUIGVudHJ5J3MgcmVmZXJlbmNlLiAgQnV0IHdhaXQsIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKmFsc28qIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCEgU28sIHRoZXJlIGFyZSAqdHdvKiByZWZlcmVuY2VzIGJlaW5nIGRyb3BwZWQuIE9uZSBmcm9tIHRoZSBUVCwgYW5kIG9uZSBmcm9tIHRoZSBjYWxsIHRvIGB2bGFuX3B1dGAuXG5cblRoZSBxdWVzdGlvbiBiZWNvbWVzLCAqd2hlcmUqIGRvIHRob3NlIHJlZmVyZW5jZXMgY29tZSBmcm9tPyBJZiB3ZSBjcmVhdGUgdGhlIFZMQU4gdmlhIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgdGhlIGluaXRpYWwgcmVmZXJlbmNlIGNvdW50IGlzIGp1c3QgMSAodGhlIGxpc3QgcmVmZXJlbmNlKS4gVGhlbiwgYWRkaW5nIGEgVFQgZW50cnkgKGBiYXRhZHZfdHRfbG9jYWxfYWRkYCkgKmluY3JlbWVudHMqIHRoYXQgcmVmY291bnQsIGFuZCBhZGRpbmcgYSB2bGFuIGVudHJ5IChgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGApICppbmNyZW1lbnRzKiBpdCB0b28uIFNvLCBhdCBvbmUgcG9pbnQsIHdpdGggYWxsIHJlZmVyZW5jZXMgcHJlc2VudCwgdGhlIHJlZmNvdW50IGlzIDMuXG5cbkJ1dCBob3cgZG8gdGhlc2UgcmVmZXJlbmNlcyBnZXQgcmVsZWFzZWQgY29ycmVjdGx5P1xuXG5gYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGlzIGNhbGxlZCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCwgYW5kIGl0J3MgZHJvcHBpbmcgKnR3byogcmVmZXJlbmNlcywgVFQgYW5kIHRoZSBsaXN0LiBBbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGFsc28gcHV0dGluZyBvbmUgcmVmZXJlbmNlLlxuVGhpcyBzZWVtZWQgdmVyeSBmaXNoeSB0byBtZSwgYXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHdvdWxkIGJlIGxlYWtpbmcgYSByZWZlcmVuY2UuXG5cbkxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLCBhZnRlciBjcmVhdGlvbiwgYW5kIGFmdGVyIGBobGlzdF9hZGRfaGVhZF9yY3VgLCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgY2FsbGVkISBCdXQgdGhhdCBpcyBqdXN0IHRvIGluaXRpYWxpemUgdGhlIHJlZmVyZW5jZSBjb3VudC5cblRoZSBjYWxsZXIgZG9lcyAqbm90KiBob2xkIGEgcmVmZXJlbmNlLiBUaGUgbGlzdCBkb2VzIVxuXG5XaGVuIHRoZSByZWZjb3VudCBldmVudHVhbGx5IHJlYWNoZXMgMCAoYWxsIHJlZmVyZW5jZXMgZHJvcHBlZCksIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgY2FsbGVkLCB3aGljaCBoYW5kbGVzIHJlbW92aW5nIHRoZSBWTEFOIGZyb20gdGhlIGxpc3QuXG5cblNvLCB0aGUgbGlzdCBoYXMgYSByZWZlcmVuY2UsIHRoZSBUVCBlbnRyeSBob2xkcyBhIHJlZmVyZW5jZSwgYW5kIHRoZSBpbnRlcmZhY2UgY29kZSBjYW4gaG9sZCBhIHJlZmVyZW5jZS5cblxuVGhlIGxpc3QgcmVmZXJlbmNlIGlzIGltcGxpY2l0bHkgZHJvcHBlZCB3aGVuIHRoZSByZWZjb3VudCBoaXRzIHplcm8uIEJ1dCBpZiB0aGUgcmVmY291bnQgKm5ldmVyKiBoaXRzIHplcm8sIGl0ICpzdGF5cyogaW4gdGhlIGxpc3QsIGV2ZW4gaWYgdGhlIGxpc3QgaGFzIG5vdCBleHBsaWNpdGx5IHRha2VuIGEgcmVmZXJlbmNlIGFuZCBkcm9wcGVkIGl0LlxuXG5TbywgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBleHBsaWNpdGx5IGRyb3BzIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhpcyBpcyB3aGF0IHNlZW1lZCBvZGQhXG5cbklmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLCB3aGF0IGFib3V0IHRoZSBjYXNlIHdoZW4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKnJlLWFkZHMqIHRoZSBWTEFOPyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2V0cyBhIHJlZmVyZW5jZS4gVGhlIGNvdW50IGdvZXMgdXAgYnkgb25lLCBhbmQgaXQgZ2V0cyBhIG5ldyBsaXN0IHJlZmVyZW5jZSEgSXQgaXMgcmUtYWRkZWQsIGFuZCB0aGUgcHJldmlvdXMgbGlzdCBpcyByZW1vdmVkIVxuXG5JbiBzdW1tYXJ5LCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGluY3JlbWVudGVkIGJ5IDEgd2hlbiB0aGUgb2JqZWN0IGlzIGNyZWF0ZWQgKGkuZS4gdGhlIGxpc3QpLiBUaGVuIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCAocmVmY291bnQgKyAxKSwgYW5kIGFsc28gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKHJlZmNvdW50ICsgMSkuIFdoZW4gdGhlIG9iamVjdCBpcyBraWxsZWQsIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgYSByZWZlcmVuY2UgZnJvbSB0aGUgVFQsIGFuZCBpdCBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UuIFRoZW4sIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBhbHNvIGRyb3BzIGEgcmVmZXJlbmNlIGZyb20gdGhlIGBnZXRgLiBJdCBhcHBlYXJzIHRoYXQgdGhlIHJlZmVyZW5jZXMgYWxsIGNhbmNlbCBvdXQsIGFuZCB0aGUgb2JqZWN0IGNhbiBiZSBzYWZlbHkga2lsbGVkIHdpdGhvdXQgbGVha2luZyBhIHJlZmVyZW5jZSFcblxuSWYgd2UgcmVtb3ZlIHRoZSBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgdGhlcmUgaXMgYSByZWZlcmVuY2UgbGVhayBiZWNhdXNlIHRoZSBmaW5hbCBwdXQgdGhhdCByZW1vdmVzIHRoZSByZWZlcmVuY2UgY291bnQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgbWlzc2luZyEgV2h5IHdvdWxkIHRoaXMgYmUgcmVtb3ZlZD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBwYXRjaCBhZ2FpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTg6MTMuNzY4NDMyNTMyWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjgzMzc0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTQ1PWludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg3LS8qKlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTg4OiAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4OS0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkxLSAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTkyOnN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTY3MD1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTEtXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2OTI6XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkzLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMDgyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk2LVxcdGlmICh2bGFuKSB7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk3OlxcdFxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTgtXFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTg6MTQuMDM2Nzc3MjY2WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTU2OTU3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbiBGdW5jdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIExvb2tpbmcgYXQgdGhpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uIGluIHRoZSBCYXRhZHYgY29kZeKApiBzcGVjaWZpY2FsbHksIHRoaXMgYmxvY2sgd2hlcmUgYSBWTEFOIGlzIGJlaW5nIGRlc3Ryb3llZC4gSSBzZWUgaXQgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGhhcyB0aGUgTk9QVVJHRSBmbGFnLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoZW4gaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUuLi4gYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kIGl0LCBzaG91bGQgZHJvcCB0aGUgVFQgcmVmZXJlbmNlLCByaWdodD8gQW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBpcyBzdXBwb3NlZCB0byBkcm9wIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhpcyBhbGwgc2VlbXMgbG9naWNhbC5cblxuQnV0Li4ud2hhdCBpZiBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgKmRvZXNuJ3QqIGFjdHVhbGx5IGRyb3AgdGhlIFRUIHJlZmVyZW5jZSBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvPyBUaGUgY29tbWVudCBpbXBsaWVzIHRoYXQgYE5PUFVSR0VgIGZsYWcgY291bGQgYmUgYSBmYWN0b3IuIFRoYXQncyBhIHBvc3NpYmlsaXR5LCBhbmQgc29tZXRoaW5nIEknZCB3YW50IHRvIHZlcmlmeSBpbW1lZGlhdGVseSwgYmVjYXVzZSBpdCBpbXBhY3RzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIGhhZCBiZXR0ZXIgY2hlY2sgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgdG8gY29uZmlybS4gTGV0J3Mgc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjQ0NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxODoxOC4yOTI0NzU5OFoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQ1OlxcdHUxNiBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICphZGRyLFxcbjEyNDY6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgc2hvcnQgdmlkLCBjb25zdCBjaGFyICptZXNzYWdlLFxcbjEyNDc6XFx0XFx0XFx0XFx0ICAgYm9vbCByb2FtaW5nKVxcbjEyNDg6XFx0e1xcbjEyNDk6XFx0XFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfcmVtb3ZlZF9lbnRyeTtcXG4xMjUwOlxcdFxcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5O1xcbjEyNTE6XFx0XFx0dTE2IGZsYWdzLCBjdXJyX2ZsYWdzID0gQkFUQURWX05PX0ZMQUdTO1xcbjEyNTI6XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKnR0X3JlbW92ZWRfbm9kZTtcXG4xMjUzOlxcdFxcbjEyNTQ6XFx0XFx0dHRfbG9jYWxfZW50cnkgPSBiYXRhZHZfdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xcbjEyNTU6XFx0XFx0aWYgKCF0dF9sb2NhbF9lbnRyeSlcXG4xMjU2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNTc6XFx0XFxuMTI1ODpcXHRcXHRjdXJyX2ZsYWdzID0gdHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncztcXG4xMjU5OlxcdFxcbjEyNjA6XFx0XFx0ZmxhZ3MgPSBCQVRBRFZfVFRfQ0xJRU5UX0RFTDtcXG4xMjYxOlxcdFxcdC8qIGlmIHRoaXMgZ2xvYmFsIGVudHJ5IGFkZGl0aW9uIGlzIGR1ZSB0byBhIHJvYW1pbmcsIHRoZSBub2RlIGhhcyB0b1xcbjEyNjI6XFx0XFx0ICogbWFyayB0aGUgbG9jYWwgZW50cnkgYXMgXFxcInJvYW1lZFxcXCIgaW4gb3JkZXIgdG8gY29ycmVjdGx5IHJlcm91dGVcXG4xMjYzOlxcdFxcdCAqIHBhY2tldHMgbGF0ZXJcXG4xMjY0OlxcdFxcdCAqL1xcbjEyNjU6XFx0XFx0aWYgKHJvYW1pbmcpIHtcXG4xMjY2OlxcdFxcdFxcdGZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG4xMjY3OlxcdFxcdFxcdC8qIG1hcmsgdGhlIGxvY2FsIGNsaWVudCBhcyBST0FNZWQgKi9cXG4xMjY4OlxcdFxcdFxcdHR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbjEyNjk6XFx0XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHRcXHRpZiAoISh0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKSB7XFxuMTI3MjpcXHRcXHRcXHRiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncyxcXG4xMjczOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBtZXNzYWdlKTtcXG4xMjc0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNzU6XFx0XFx0fVxcbjEyNzY6XFx0XFx0LyogaWYgdGhpcyBjbGllbnQgaGFzIGJlZW4gYWRkZWQgcmlnaHQgbm93LCBpdCBpcyBwb3NzaWJsZSB0b1xcbjEyNzc6XFx0XFx0ICogaW1tZWRpYXRlbHkgcHVyZ2UgaXRcXG4xMjc4OlxcdFxcdCAqL1xcbjEyNzk6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwgQkFUQURWX1RUX0NMSUVOVF9ERUwpO1xcbjEyODA6XFx0XFxuMTI4MTpcXHRcXHR0dF9yZW1vdmVkX25vZGUgPSBiYXRhZHZfaGFzaF9yZW1vdmUoYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2gsXFxuMTI4MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJhdGFkdl9jb21wYXJlX3R0LFxcbjEyODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LFxcbjEyODQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE4OjE4LjI5MjY5NzIxWiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTkxMDAxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUVCBFbnRyeSBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIFRUIGVudHJ5IHdoZW4gYSBWTEFOIGlzIGtpbGxlZC4gIFRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgdGhhdCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ2AgaWYgdGhlIGVudHJ5IGlzbid0IG5ldy4gVGhpcyBtZWFucyBpdCAqZG9lc24ndCogaW1tZWRpYXRlbHkgcmVtb3ZlIHRoZSBlbnRyeTsgaXQganVzdCBzZXRzIHRoZSBQRU5ESU5HIGZsYWcuIENvbnNlcXVlbnRseSwgdGhlIHJlZmVyZW5jZSBpc24ndCBkcm9wcGVkIHlldC5cblxuSWYgdGhlIHJlZmVyZW5jZSBpc24ndCBkcm9wcGVkLCB0aGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgb25seSBkZWNyZW1lbnRzIG9uZSByZWZlcmVuY2UsIHNwZWNpZmljYWxseSB0aGUgbGlzdCByZWZlcmVuY2UsIHdoZW4gaXQgaXMgY2FsbGVkLiBUaGVuLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZHJvcHMgdGhlIFwiZ2V0XCIgcmVmZXJlbmNlLiBUaGlzIHJlc3VsdHMgaW4gYSBuZXQgY2hhbmdlIG9mIC0xIChsaXN0IHJlZmVyZW5jZSBkcm9wcGVkKSwgbWVhbmluZyB0aGUgVFQgcmVmZXJlbmNlIGlzIHN0aWxsIGhlbGQuIFdpdGggdGhlIFRUIHJlZmVyZW5jZSBoZWxkLCB0aGUgcmVmY291bnQgYmVjb21lcyAxLiBUaGUgVFQgZW50cnkgd2lsbCBiZSBwdXJnZWQgbGF0ZXIgYnkgdGhlIFRUIHdvcmtlciwgd2hpY2ggd2lsbCBkcm9wIHRoZSBUVCByZWZlcmVuY2UuICBUaGF0IG1ha2VzIHRoZSByZWZjb3VudCAwIGFuZCB0aGUgZW50cnkgaXMgZnJlZWQuIFRoYXQgc2VlbXMgcGVyZmVjdGx5IGNvcnJlY3QsIGFmdGVyIGFsbC5cblxuSG93ZXZlciwgdGhlIHB1enpsaW5nIHBhcnQgaXMgd2h5IHRoZSBwYXRjaCByZW1vdmVkIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpbiB0aGUgZmlyc3QgcGxhY2UuIExldCdzIHJldmlzaXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgOlxuXG5gYGBjXG5cdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcblx0aWYgKCF2bGFuKVxuXHRcdHJldHVybiAtRU5PRU5UO1xuXG5cdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcblxuXHQvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovXG5cdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5gYGBcblxuVGhlIHByb2JsZW0gaXMgdGhlIGFwcGFyZW50IHJlZHVuZGFuY3k6IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGlzIG1lYW5zIGl0ICphbHJlYWR5KiBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UuIFRoZW4sIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgYWdhaW4uIEl0IGRyb3BzIHRoZSBnZXQgcmVmZXJlbmNlLiBUaGF0J3MgcGVyZmVjdGx5IGNvcnJlY3QhIFNvLCB3aHkgd2FzIGl0IHJlbW92ZWQ/IERpZCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNoYW5nZSB0byBkcm9wIHR3byByZWZlcmVuY2VzPyBOb3BlLCBJIGp1c3QgcmVhZCBpdCBhbmQgSSdtIHN1cmUgaXQgZG9lc24ndC4gUGVyaGFwcyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZG9lc24ndCBhY3R1YWxseSBnZXQgYSByZWZlcmVuY2UgYWZ0ZXIgYWxsLiBCZXR0ZXIgY2hlY2sgdGhhdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzY2MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE4OjI1Ljg1MTgwMTMwMVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0ICogYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIC0gZ2V0IHRoZSB2bGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2aWRcXG4gNTExOlxcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiA1MTI6XFx0ICogQHZpZDogdGhlIGlkZW50aWZpZXIgb2YgdGhlIHZsYW4gb2JqZWN0IHRvIHJldHJpZXZlXFxuIDUxMzpcXHQgKlxcbiA1MTQ6XFx0ICogUmV0dXJuOiB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSB2bGFuIG1hdGNoaW5nIHRoZSB2aWQgcGFzc2VkIGFzIGFyZ3VtZW50IG9yXFxuIDUxNTpcXHQgKiBOVUxMIG90aGVyd2lzZS4gVGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJldHVybmVkIG9iamVjdCBpcyBpbmNyZW1lbnRlZCBieSAxLlxcbiA1MTY6XFx0ICovXFxuIDUxNzpcXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICpiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIDUxODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNTE5OlxcdHtcXG4gNTIwOlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW5fdG1wLCAqdmxhbiA9IE5VTEw7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNTIzOlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2bGFuX3RtcCwgXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0LCBsaXN0KSB7XFxuIDUyNDpcXHRcXHRcXHRpZiAodmxhbl90bXAtXFx1MDAzZXZpZCAhPSB2aWQpXFxuIDUyNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2dmxhbl90bXAtXFx1MDAzZXJlZmNvdW50KSlcXG4gNTI4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1Mjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE4OjI1Ljg1MTkxMjU1MVoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA0NTQ3OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFZMQU4gRGVzdHJ1Y3Rpb24qKlxuXG5Pa2F5LCBzbyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZGVmaW5pdGVseSBncmFicyBhIHJlZmVyZW5jZSwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgdGltaW5nIG9mIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AuIFNwZWNpZmljYWxseSwgaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICphbmQqIHRoZW4gYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLCB0aGF0J3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgbG9naWMgYXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLiBXaHkgd2FzIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCAqcmVtb3ZlZCogZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgc3BlY2lmaWNhbGx5PyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi5cblxuTGV0IG1lIHJlcmVhZCB0aGUgZGlmZi4gQWxyaWdodCwgc28gdGhlIGNvZGUgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGluZGVlZCBub3cgKmRvZXNuJ3QqIGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGFmdGVyIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIE15IGZpcnN0IGd1dCByZWFjdGlvbiBpczogcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlISBEaWQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmcmVlIHRoZSBWTEFOLCBhbmQgdGhlbiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgYSBkYW5nbGluZyBwb2ludGVyP1xuXG5CdXQgd2FpdC4gTm8uIFRoZSBpbml0aWFsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCAqZG9lcyogaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQuIFNvLCBiZWZvcmUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCwgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBhdCAqbGVhc3QqIDIgKG9uZSBmcm9tIHRoZSBsaXN0LCBvbmUgZnJvbSB0aGUgYGdldGApLiBPa2F5LCB3aGF0IGlmIHRoZSByZWZjb3VudCBpcyAxIGJlZm9yZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gPyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ290IGEgcmVmZXJlbmNlLCBzbyB0aGUgcmVmY291bnQgaXMgYXQgbGVhc3QgMS4gSWYgdGhlIGxpc3QgcmVmZXJlbmNlICp3YXMqIGFscmVhZHkgZHJvcHBlZCwgYGtyZWZfZ2V0X3VubGVzc196ZXJvYCB3b3VsZCBoYXZlIGZhaWxlZC4gU28sIHRoZSByZWZjb3VudCBpcyBhdCBsZWFzdCAxLiBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgaW5jcmVhc2VzIGl0IHRvIDIuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgb25lIHJlZiwgc28gbm93IGl0J3MgMS4gVGhlbiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgZHJvcHMgdGhlIG90aGVyIHJlZiwgbWFraW5nIHRoZSBjb3VudCAwLiBUaGlzICpzaG91bGRuJ3QqIGJlIGEgdXNlLWFmdGVyLWZyZWUgdGhlbi5cblxuSG93ZXZlci4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYSBkaWZmZXJlbnQgc2NlbmFyaW8uIFdoYXQgaWYgYSAqc2VwYXJhdGUqIGNvbW1pdCBtb2RpZmllZCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHRvICpub3QqIHJlbGVhc2UgdGhlIGxpc3QgcmVmZXJlbmNlPyBUaGF0IHdvdWxkIGJlIHByb2JsZW1hdGljLiBJJ2QgYmV0dGVyIGNoZWNrIHRoZSBnaXQgbG9nIG9mIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTg6MzQuMTU2NDY2MDE4WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyMCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuIFBsZWFzZSBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHF1ZXJpZXMuIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiWW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLiBQbGVhc2Ugc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSBpbnN0ZWFkIG9mIHJlcGVhdGluZyBxdWVyaWVzLlwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxODozNC4xNTY1MDA0OThaIiwiU2VxIjo3MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI3OTg4MjkyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gRGVzdHJ1Y3Rpb24gaW4gYmF0bWFuLWFkdioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjaGFuZ2UsIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJIGluaXRpYWxseSBncmVwcGVkIGZvciBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGFuZCwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCBJJ20gdHJ5aW5nIHRvIHdvcmsgb3V0IHdoeSBhIHBhdGNoIHdvdWxkIHJlbW92ZSB0aGUgZmluYWwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwuICBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCwgd2hpY2ggKml0c2VsZiogY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHJlbW92aW5nIHRoZSBzZWNvbmQgY2FsbCB3b3VsZCBsZWFkIHRvIGEgcmVmZXJlbmNlIGxlYWssIHNpbmNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBwcm92aWRlcyBhIHJlZmVyZW5jZSB3aGljaCBpc24ndCBleHBsaWNpdGx5IGRyb3BwZWQgaW4gYWxsIGNhc2VzLlxuXG5TbyBJJ3ZlIGNoZWNrZWQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLCBhbmQgdGhlIGNvZGUgKmRvZXMqIHNlZW0gdG8gYmUgbGVha2luZyB0aGUgZ2V0IHJlZmVyZW5jZS5cbkhvd2V2ZXIsIEkgYWxzbyB3b25kZXIgaWYgdGhlcmUgaXMgYW4gdW5saWtlbHkgZG91YmxlLWZyZWUgc2NlbmFyaW8sIHNvIEknbSB0cnlpbmcgdG8gZGlzcHJvdmUgdGhhdC5cbkJ1dCB3YWl0LCBpZiB0aGUgZGVzdHJ1Y3Rpb24gbWV0aG9kIGRyb3BzIG9ubHkgb25lIHJlZmVyZW5jZSwgaXQgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0uXG5JIHRob3VnaHQgYWJvdXQgd2hldGhlciBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgY291bGQgYmUgcmVsYXRlZCB0byBkcm9wcGluZyB0aGUgcmVmZXJlbmNlLCBidXQgSSByZWFsaXplIHRoZSBUVCByZWZlcmVuY2UgaXMgaW5kZXBlbmRlbnQgb2Ygd2hhdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaG9sZHMuXG5TbywgeWVhaCwgdGhhdCBnZXQgcmVmZXJlbmNlIHNlZW1zIHRvIGJlIGxlYWtlZCBpZiB3ZSByZW1vdmUgdGhlIGBwdXRgLlxuXG5JcyBpdCBwb3NzaWJsZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXRzZWxmICpjb25zdW1lcyogdGhlIHJlZmVyZW5jZT8gSWYgc28sIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd291bGRuJ3QgbmVlZCB0byBkcm9wIHRoZSByZWZlcmVuY2UgYXMgd2VsbCwgbWFraW5nIHRoZSByZW1vdmVkIGNhbGwgY29ycmVjdC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFzIGxpc3QgaW1wbGljYXRpb25zLlxuSSdtIGNoZWNraW5nIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudC4gIFRoZSBsaXN0IGl0c2VsZiBob2xkcyBhIHJlZmVyZW5jZS4gIElmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY29uc3VtZXMgdGhlIG9uZSBwYXNzZWQgaW4sIHRoZW4gdGhlIGxpc3QgcmVmZXJlbmNlIGlzIG5ldmVyIGRyb3BwZWQuIFNvIEkgY2hlY2tlZCB0aGUgZGVzdHJ1Y3Rpb24gYWdhaW47IGl0IGNsZWFybHkgKmRvZXNuJ3QqIHJlbW92ZSB0aGUgVkxBTiBmcm9tIHRoZSBsaXN0LiAgSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb25zdW1lcyBpdHMgYXJndW1lbnQsIHRoZW4gd2l0aG91dCB0aGUgYWRkaXRpb25hbCBgcHV0YCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIHdlIGhhdmUgYSBsaXN0IHJlZmVyZW5jZSB0aGF0J3MgbmV2ZXIgcmVsZWFzZWQuICBUaGUgb2JqZWN0IGlzIG5ldmVyIGZyZWVkLCBhbmQgdGhhdCBtZWFucyBhIG1lbW9yeSBsZWFrLlxuXG5Pa2F5LCBsZXQncyBiYWNrIHVwLiBNYXliZSByZW1vdmluZyB0aGUgY2FsbCBwcmV2ZW50cyBhIGRvdWJsZS1mcmVlPyBQZXJoYXBzIGlmIHRoZSBWTEFOIGlzIHNvbWVob3cgZGVzdHJveWVkIHR3aWNlLCB0aGUgZXh0cmEgYHB1dGAgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNvdWxkIGNhdXNlIGEgcHJvYmxlbS5cblxuVGhlIGNvZGUgc2VlbXMgdG8gZW5zdXJlIHRoaXMgY2FuJ3QgaGFwcGVuLlxuVGhlIGxpc3QgcmVmZXJlbmNlIG1pZ2h0IGJlIGRyb3BwZWQgYnkgYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYC5cblxuSSBjaGVja2VkIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBjYWxsZWQgZnJvbSBgbmRvX3ZsYW5fcnhfa2lsbF92aWRgLCBhbmQgaXQgaXMuICBBbmQgSSB0cmllZCB0byBjcmVhdGUgZG91YmxlLWZyZWUgc2NuZWFyaW9zIGJ1dCB0aGV5IHNob3VsZG4ndCBvY2N1ciBpbiBwcmFjdGljZS5cblxuSG93ZXZlciEgSSdtIG5vdyByZWFsaXppbmcgdGhhdCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIGFsc28gdXNlcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLCBhbmQgaXQgKmFsc28qIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBhZnRlciBpdC4gSWYgdGhlcmUgd2FzIGEgZG91YmxlLWZyZWUgaXNzdWUsIHRoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCB3b3VsZCBhbHNvIGhhdmUgYSBwcm9ibGVtLiBCdXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuXG5cbkxldCdzIGNoZWNrIGFnYWluISBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gIFRoZSBmYWN0IHRoYXQgKnRoaXMqIGZ1bmN0aW9uIGRyb3BzIHRoZSByZWZlcmVuY2UgbWlnaHQgYmUga2V5LlxuXG5Pa2F5LCBzbyBnb2luZyBiYWNrIHRvIGZpcnN0IHByaW5jaXBsZXM6IElmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgdGhlbiB3ZSBtdXN0IG5vdCBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuICBJZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICpkb2Vzbid0KiBjb25zdW1lIHRoZSByZWZlcmVuY2UsIHRoZW4gd2UgKmRvKiBuZWVkIHRoYXQgYHB1dGAgY2FsbC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgbXVzdCBoYW5kbGUgYSBsaXN0IHJlZmVyZW5jZS5cblxuSWYgdGhlIGRlc3RydWN0aW9uIG1ldGhvZCBkcm9wcyBvbmx5IG9uZSByZWZlcmVuY2UsIHRoZSBsaXN0IHJlZmVyZW5jZSB3aWxsIHN0aWxsIGJlIHRoZXJlLlxuVGhlcmVmb3JlLCBpZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZG9lcyAqbm90KiBjYWxsIHB1dCwgdGhlIGxpc3QgcmVmZXJlbmNlIGlzIG5ldmVyIGRyb3BwZWQuXG5UaGlzIGlzIGEgbWVtb3J5IGxlYWssIGFuZCBpdCBkb2VzIG5vdCBzZWVtIHRvIG1ha2Ugc2Vuc2UuXG5Ib3dldmVyLCBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbm90aGVyIHBhdGgsIHRoZW4gaXQgaXMgYSBkb3VibGUgZnJlZS5cbkxldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmVcblxuIiwiSW5wdXRUb2tlbnMiOjU2NTYxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxODo1Ni45NTUzMzI1NzVaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY2OlxcdFxcdGtyZWZfaW5pdChcXHUwMDI2dmxhbi1cXHUwMDNlcmVmY291bnQpO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24sIDApO1xcbiA1Njk6XFx0XFxuIDU3MDpcXHRcXHRrcmVmX2dldChcXHUwMDI2dmxhbi1cXHUwMDNlcmVmY291bnQpO1xcbiA1NzE6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZ2bGFuLVxcdTAwM2VsaXN0LCBcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3QpO1xcbiA1NzI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcXG4gNTc1OlxcdFxcdCAqIGZsYWdcXG4gNTc2OlxcdFxcdCAqL1xcbiA1Nzc6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZSxcXG4gNTc4OlxcdFxcdFxcdFxcdCAgICBiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZS1cXHUwMDNlZGV2X2FkZHIsIHZpZCxcXG4gNTc5OlxcdFxcdFxcdFxcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdC8qIGRvbid0IHJldHVybiByZWZlcmVuY2UgdG8gbmV3IG1lc2hpZl92bGFuICovXFxuIDU4MjpcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRyZXR1cm4gMDtcXG4gNTg1OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTg6NTYuOTU1NDUyMzU1WiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MDcyNDE4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJJ20gc2VlaW5nIHNvbWV0aGluZyBoZXJlIHdpdGggYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJdCBzZWVtcyB0byBiZSB0YWtpbmcgYSByZWZlcmVuY2UsIHJpZ2h0PyBTbyBhZnRlciBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAsIHRoZSByZWZlcmVuY2UgY291bnQgc2hvdWxkIGJlIDIsIG9uZSBmb3IgdGhlIGxpc3QgYW5kIG9uZSBmb3IgdGhlIFRUIGVudHJ5IGl0c2VsZi5cblxuTm93LCBpZiB0aGUgcmVmZXJlbmNlIGNvdW50ICppcyogMiwgdGhlbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgZ2V0dGluZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSwgbWFraW5nIHRoZSBjb3VudCAzLiBUaGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGFjdHVhbGx5ICpkcm9wKiB0aGUgcmVmZXJlbmNlIG9mIHRoZSBUVCBlbnRyeT9cblxuWWVzISBJdCBkb2VzLiBXaGVuIGl0IHJlbW92ZXMgdGhlIFRUIGVudHJ5LCBpdCBmcmVlcyBpdCwgYW5kIHRoZSBgdmxhbmAgcG9pbnRlciBpcyByZWxlYXNlZC4gU28sIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCBkZWNyZW1lbnRzIHRoZSBjb3VudCBieSAxLCBicmluZ2luZyBpdCB0byAyLiBUaGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLCBhbm90aGVyIGRlY3JlbWVudCwgd2hpY2ggbWVhbnMgdGhlIHJlZiBjb3VudCBpcyAxLiBOZXh0IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIFRoaXMgZHJvcHMgdGhlIGZpbmFsIHJlZmVyZW5jZSBhbmQgbWVhbnMgdGhhdCB0aGUgdmxhbiBvYmplY3QgaXMgZnJlZWQhXG5cblRoaXMgbWVhbnMgaXQgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gSWYgaXQgKmRvZXNuJ3QqLCB0aGUgcmVmZXJlbmNlIGNvdW50IHJlbWFpbnMgYXQgMSwgYW5kIHRoZSBvYmplY3QgaXMgbmV2ZXIgZnJlZWQhXG5cbkJ1dCB3YWl0LCB3aHkgd2FzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCByZW1vdmVkIGluIHRoZSBwYXRjaD8gTGV0J3MgY2hlY2sgdGhlIHBhdGNoIGFnYWluOlxuYGBgZGlmZlxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuQEAgLTY5MSw5ICs2OTEsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIFxuIFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIFxuLVx0LyogZmluYWxseSBmcmVlIHRoZSB2bGFuIG9iamVjdCAqL1xuLVx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbmBgYFxuXG5JdCBsb29rcyBsaWtlIHRoZSBwYXRjaCByZW1vdmVkIGl0LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvLiBIb3cgY291bGQgdGhhdCBoYXBwZW4/XG5cbldoYXQgaWYgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIERPRVNOJ1QgZHJvcCB0aGUgVFQgZW50cnkncyByZWZlcmVuY2U/IExvb2tpbmcgYXQgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLCBpZiB0aGUgZW50cnkgaXNuJ3QgTkVXLCBpdCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nYC4gVGhpcyBtZWFucyBpdCBET0VTTidUIHJlbW92ZSB0aGUgZW50cnksIGFuZCBjcnVjaWFsbHksIERPRVNOJ1QgZHJvcCB0aGUgcmVmZXJlbmNlISBJbiB0aGF0IHNjZW5hcmlvOiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIDEgcmVmICh0aGUgbGlzdCByZWZlcmVuY2UpIGFuZCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyAxIHJlZmVyZW5jZSAodGhlIGdldCByZWZlcmVuY2UpLiBUaGF0IGxlYXZlcyB0aGUgcmVmIGNvdW50IGF0IDEgKHRoZSBUVCBlbnRyeSdzIHJlZikuIFRoZSBUVCB3b3JrZXIgbGF0ZXIgcHVyZ2VzIHRoZSBlbnRyeSwgKnRoZW4qIGRyb3BzIHRoYXQgcmVmZXJlbmNlLiBUaGlzIGlzIGFjdHVhbGx5IHNhZmUhIFNvIG5vIGRvdWJsZSBmcmVlLlxuXG5Pa2F5LCB3YWl0IG9uZSBzZWNvbmQuIFdoYXQgaWYgYGJhdGFkdl90dF9sb2NhbF9hZGRgIERPRVNOJ1QgZ2V0IGEgcmVmZXJlbmNlPyBMZXQncyByZWNoZWNrIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2MDYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTowNi40NjI2OTg0ODRaIiwiU2VxIjo3NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYzOlxcdFxcdC8qIGluY3JlYXNlIHRoZSByZWZjb3VudGVyIG9mIHRoZSByZWxhdGVkIHZsYW4gKi9cXG4gNjY0OlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQpO1xcbiA2NjU6XFx0XFx0aWYgKCF2bGFuKSB7XFxuIDY2NjpcXHRcXHRcXHRuZXRfcmF0ZWxpbWl0ZWRfZnVuY3Rpb24oYmF0YWR2X2luZm8sIG1lc2hfaWZhY2UsXFxuIDY2NzpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcImFkZGluZyBUVCBsb2NhbCBlbnRyeSAlcE0gdG8gbm9uLWV4aXN0ZW50IFZMQU4gJWRcXFxcblxcXCIsXFxuIDY2ODpcXHRcXHRcXHRcXHRcXHRcXHQgYWRkciwgYmF0YWR2X3ByaW50X3ZpZCh2aWQpKTtcXG4gNjY5OlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShiYXRhZHZfdGxfY2FjaGUsIHR0X2xvY2FsKTtcXG4gNjcwOlxcdFxcdFxcdHR0X2xvY2FsID0gTlVMTDtcXG4gNjcxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2NzI6XFx0XFx0fVxcbiA2NzM6XFx0XFxuIDY3NDpcXHRcXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxcbiA2NzU6XFx0XFx0XFx0ICAgXFxcIkNyZWF0aW5nIG5ldyBsb2NhbCB0dCBlbnRyeTogJXBNICh2aWQ6ICVkLCB0dHZuOiAlZClcXFxcblxcXCIsXFxuIDY3NjpcXHRcXHRcXHQgICBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCksXFxuIDY3NzpcXHRcXHRcXHQgICAodTgpYXRvbWljX3JlYWQoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2V0dC52bikpO1xcbiA2Nzg6XFx0XFxuIDY3OTpcXHRcXHRldGhlcl9hZGRyX2NvcHkodHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5hZGRyLCBhZGRyKTtcXG4gNjgwOlxcdFxcdC8qIFRoZSBsb2NhbCBlbnRyeSBoYXMgdG8gYmUgbWFya2VkIGFzIE5FVyB0byBhdm9pZCB0byBzZW5kIGl0IGluXFxuIDY4MTpcXHRcXHQgKiBhIGZ1bGwgdGFibGUgcmVzcG9uc2UgZ29pbmcgb3V0IGJlZm9yZSB0aGUgbmV4dCB0dHZuIGluY3JlbWVudFxcbiA2ODI6XFx0XFx0ICogKGNvbnNpc3RlbmN5IGNoZWNrKVxcbiA2ODM6XFx0XFx0ICovXFxuIDY4NDpcXHRcXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ORVc7XFxuIDY4NTpcXHRcXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnZpZCA9IHZpZDtcXG4gNjg2OlxcdFxcdGlmIChiYXRhZHZfaXNfd2lmaV9oYXJkaWYoaW5faGFyZGlmKSlcXG4gNjg3OlxcdFxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9XSUZJO1xcbiA2ODg6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcXG4gNjg5OlxcdFxcdHR0X2xvY2FsLVxcdTAwM2VsYXN0X3NlZW4gPSBqaWZmaWVzO1xcbiA2OTA6XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5hZGRlZF9hdCA9IHR0X2xvY2FsLVxcdTAwM2VsYXN0X3NlZW47XFxuIDY5MTpcXHRcXHR0dF9sb2NhbC1cXHUwMDNldmxhbiA9IHZsYW47XFxuIDY5MjpcXHRcXG4gNjkzOlxcdFxcdC8qIHRoZSBiYXRtYW4gaW50ZXJmYWNlIG1hYyBhbmQgbXVsdGljYXN0IGFkZHJlc3NlcyBzaG91bGQgbmV2ZXIgYmVcXG4gNjk0OlxcdFxcdCAqIHB1cmdlZFxcbiA2OTU6XFx0XFx0ICovXFxuIDY5NjpcXHRcXHRpZiAoYmF0YWR2X2NvbXBhcmVfZXRoKGFkZHIsIG1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyKSB8fFxcbiA2OTc6XFx0XFx0ICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxcbiA2OTg6XFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0U7XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdGtyZWZfZ2V0KFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcXG4gNzAxOlxcdFxcdGhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LFxcbiA3MDI6XFx0XFx0XFx0XFx0XFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LCBcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTk6MDYuNDYyOTE0MTI0WiIsIlNlcSI6NzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjI0OTI1OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmNvdW50IEFuYWx5c2lzIG9mIFZMQU4gT2JqZWN0IE1hbmFnZW1lbnQgaW4gYmF0bWFuLWFkdioqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duLiBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgcmVmZXJlbmNlIGNvdW50cyBvbiB0aGVzZSBgYmF0YWR2X21lc2hpZl92bGFuYCBvYmplY3RzLCBhbmQgdGhpcyBwYXRjaCBoYXMgZ290IG1lIHdvcnJpZWQuIEl0IGFsbCBzdGFydHMgd2l0aCBob3cgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgYW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpbnRlcmFjdCB3aXRoIHRoZXNlIFZMQU4gb2JqZWN0cy5cblxuSW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICptaWdodCogY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIGdldHRpbmcgYSByZWZlcmVuY2UsICpvciogY3JlYXRlIGEgVkxBTiB3aXRoIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCB3aGljaCBoYXMgc29tZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudCBvcGVyYXRpb25zLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMgYGJhdGFkdl90dF9sb2NhbF9hZGRgIGlzIGFsc28gY2FsbGVkIHdoaWNoIGluY3JlYXNlcyB0aGUgcmVmY291bnQuIEkndmUgdHJhY2VkIGl0LCBhbmQgaXQgZGVmaW5pdGVseSBkb2VzLlxuXG5JIGNhbiBzZWUgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaGVyZSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkgYnkgdGhlIGNhbGxlci5cblxuSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6XG4qICAgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIE5vdywgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgd2hpY2ggaXMgc3VwcG9zZWQgdG8gZHJvcCBhIHJlZmVyZW5jZSBoZWxkIGJ5IHRoZSBUVCBlbnRyeS4gSXQgYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuXG4qICAgVGhlbiBpdCBzZWVtcyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaGFkIGEgY2FsbCB0byBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIEJ1dCB0aGUgcGF0Y2ggKnJlbW92ZWQqIHRoaXMuXG5cbk15IGNvbmNlcm4gaXMgdGhpczogaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyB0aGUgcmVmZXJlbmNlIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdvdCwgdGhlbiByZW1vdmluZyB0aGUgZXh0cmEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGZpbmUsIHJpZ2h0PyBTbyB0aGlzIHBhdGNoIGlzIG5vdCBhbiBpc3N1ZT9cblxuQnV0IGhvbGQgb24hIElmIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhbHNvIGluY3JlbWVudHMgcmVmY291bnQgYW5kIHRoaXMgaXMgbm90IHBhaXJlZCB3aXRoIGEgbWF0Y2hpbmcgZGVjcmVtZW50LCB3ZSBoYXZlIGEgbGVhay5cblxuTm93LCBJIHJlLWNoZWNrZWQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLiBJdCBkZWZpbml0ZWx5IHN0YXJ0cyB0aGUgcmVmY291bnQgYXQgMSwgaW5jcmVtZW50cyBpdCB0byAyICh3aXRoIGBrcmVmX2dldGApLCBhZGRzIHRoZSBWTEFOIHRvIHRoZSBsaXN0LCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgKHdoaWNoICphbHNvKiBncmFicyBhIHJlZmVyZW5jZSksIGFuZCB0aGVuIGRyb3BzIGl0IGJhY2sgdG8gMiwgYmVmb3JlIHJldHVybmluZy4gU28gdGhlIGxpc3QgYW5kIFRUIGVudHJ5IGFyZSBlYWNoIGhvbGRpbmcgYSByZWZlcmVuY2UuXG5cblRoZW4gSSBjaGVja2VkIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgYW5kIGl0IHJlbW92ZXMgZnJvbSB0aGUgbGlzdC4gU28gdGhlIGxpc3QgZG9lcyAqbm90KiBob2xkIGEgcmVmZXJlbmNlLiBUaGlzIG1lYW5zIHRoYXQgaWYgaXQncyBmcmVlZCwgd2UgYXJlIGZpbmUuXG5cbkFuZCB0aGUgcGF0Y2ggY2F1c2VzIGFuIGlzc3VlIHdoZXJlIGl0IGlzIG9ubHkgZGVjcmVtZW50ZWQgb25jZSwgY2F1c2luZyBhbiBhY2N1bXVsYXRlZCBsZWFrLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBtb3N0IGxpa2VseSBjYXVzaW5nIGEgbWVtb3J5IGxlYWshIFJlbW92aW5nIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgaXMgd3JvbmcsIHVubGVzcyBzb21lIG90aGVyIGNvZGUgbm93IGhhbmRsZXMgZHJvcHBpbmcgdGhhdCByZWZlcmVuY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyOTUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE5OjQyLjY4Nzg0MzQ0N1oiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwOTMxNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjE3PXN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9lbnRyeV9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIyOS0vKipcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIzMDogKiBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KCkgLSBkZWNyZW1lbnQgdGhlIHR0X2xvY2FsX2VudHJ5IHJlZmNvdW50ZXIgYW5kXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yMzEtICogIHBvc3NpYmx5IHJlbGVhc2UgaXRcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjM0PXN0YXRpYyB2b2lkXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyMzU6YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dChzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSlcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIzNi17XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTU4OT1ib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03MDYtXFx0XFx0LyogcmVtb3ZlIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBoYXNoICovXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo3MDc6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03MDgtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTc3MC1cXHRkZXZfcHV0KGluX2Rldik7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo3NzE6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03NzItXFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTI0NT11MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5MS1cXHRcXHRcXHRcXHQgICAgICAgY29tbW9uLmhhc2hfZW50cnkpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTI5MjpcXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X3JlbW92ZWRfZW50cnkpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5My1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyOTQtb3V0Olxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTI5NTpcXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyOTYtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTEzNTk9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3RhYmxlX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTM4NS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEzODY6XFx0XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMzg3LVxcdFxcdH1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTU4OT1zdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xNzM4LVxcdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNzM5OlxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTc0MC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMTIwPXN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfZGVsKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIxNzAtXFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsX2VudHJ5KTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIxNzE6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dChsb2NhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yMTcyLX1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjM2MD1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqYmF0YWR2X3RyYW5zdGFibGVfc2VhcmNoKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIzOTgtXFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsX2VudHJ5KTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIzOTk6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yNDAwLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zMzI5PWJvb2wgYmF0YWR2X2lzX215X2NsaWVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzM0NS1vdXQ6XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozMzQ2OlxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzM0Ny1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNjI2PXN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9wZW5kaW5nX2NsaWVudHMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzY1OS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM2NjA6XFx0XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNjYxLVxcdFxcdH1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzcyMD1ib29sIGJhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1OCAqc3JjLCB1OCAqZHN0LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ3LWxvY2FsX2VudHJ5X3B1dDpcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM3NDg6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ5LXZsYW5fcHV0Olxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zODc1PWJvb2wgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM4ODUtXFx0cmV0ID0gdHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM4ODY6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zODg3LW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTk6NDIuOTU4Nzc5ODAxWiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDE5ODc4MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWA6XG5cbioqQW5hbHl6aW5nIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWAqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgYGJhdGFkdl90dF9sb2NhbF9lbnRyeV9yZWxlYXNlYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGJhdGFkdiAoQi5BLlQuTS5BLk4uIGFkdmFuY2VkKSBmcmFtZXdvcmsuIEl0J3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIGxvY2FsIHRyYW5zbGF0aW9uIHRhYmxlIChUVCksIGFuZCB0aGUgYHJlbGVhc2VgIHN1ZmZpeCBzdWdnZXN0cyBpdCBkZWFscyB3aXRoIHRoZSBmcmVlaW5nIG9yIGRlYWxsb2NhdGlvbiBvZiBhbiBlbnRyeS5cblxuU28sIGxldCBtZSBtZW50YWxseSByZWNvbnN0cnVjdCB0aGUgY29udGV4dC4gSSdtIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBsb2NhbCBlbnRyeSBpbiB0aGUgVFQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gUGVyaGFwcyBhIHJvdXRlIGV4cGlyZXMsIGEgcGVlciBkaXNjb25uZWN0cywgb3Igc29tZSBvdGhlciBldmVudCBuZWNlc3NpdGF0ZXMgdGhlIHJlbW92YWwgb2YgdGhpcyBsb2NhbGx5LWhlbGQgdHJhbnNsYXRpb24gaW5mb3JtYXRpb24uXG5cbkknZCBiZSBjdXJpb3VzIHRvIGtub3cgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGZyZWVkIGhlcmUuIElzIGl0IGp1c3QgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZW50cnkgaXRzZWxmPyBPciBkb2VzIGl0IGFsc28gaW52b2x2ZSByZWxlYXNpbmcgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMsIHBlcmhhcHMgcmVmZXJlbmNlcyB0byBuZWlnaGJvciBpbmZvcm1hdGlvbiwgcXVldWVkIHBhY2tldHMsIG9yIHRpbWVycyByZWxhdGVkIHRvIHRoaXMgZW50cnk/IFRoZSBlZmZpY2llbmN5IGFuZCBjb3JyZWN0bmVzcyBvZiBgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2VgIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQncyBhdCB0aGUgaGVhcnQgb2YgaG93IHRoZSBCQVRNQU4gcHJvdG9jb2wgbWFuYWdlcyBpdHMgZm9yd2FyZGluZyB0YWJsZXMgYW5kLCB0aGVyZWZvcmUsIGlzIGVzc2VudGlhbCB0byB0aGUgcmVsaWFibGUgZGVsaXZlcnkgb2YgZGF0YSBpbiB0aGUgbmV0d29yay4gQW55IHN1YnRsZSBtZW1vcnkgbGVha3Mgb3IgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgZnVuY3Rpb24gY291bGQgaGF2ZSBkaXNhc3Ryb3VzIGNvbnNlcXVlbmNlcyBmb3IgdGhlIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIGVudGlyZSBtZXNoIG5ldHdvcmsuIEkgbmVlZCB0byBrZWVwIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBvcGVyYXRpb24gaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1OTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTo0Ni40NjA3NzE1MjhaIiwiU2VxIjo4MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE3OlxcdHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9lbnRyeV9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuIDIxODpcXHR7XFxuIDIxOTpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0dHRfbG9jYWxfZW50cnkgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LFxcbiAyMjI6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29tbW9uLnJlZmNvdW50KTtcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh0dF9sb2NhbF9lbnRyeS1cXHUwMDNldmxhbik7XFxuIDIyNTpcXHRcXG4gMjI2OlxcdFxcdGtmcmVlX3JjdSh0dF9sb2NhbF9lbnRyeSwgY29tbW9uLnJjdSk7XFxuIDIyNzpcXHR9XFxuIDIyODpcXHRcXG4gMjI5OlxcdC8qKlxcbiAyMzA6XFx0ICogYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCgpIC0gZGVjcmVtZW50IHRoZSB0dF9sb2NhbF9lbnRyeSByZWZjb3VudGVyIGFuZFxcbiAyMzE6XFx0ICogIHBvc3NpYmx5IHJlbGVhc2UgaXRcXG4gMjMyOlxcdCAqIEB0dF9sb2NhbF9lbnRyeTogdHRfbG9jYWxfZW50cnkgdG8gYmUgZnJlZSdkXFxuIDIzMzpcXHQgKi9cXG4gMjM0OlxcdHN0YXRpYyB2b2lkXFxuIDIzNTpcXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5KVxcbiAyMzY6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTo0Ni40NjA5OTE3OThaIiwiU2VxIjo4MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5NDE1NjE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRUIEVudHJ5IExpZmVjeWNsZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2VgIGZ1bmN0aW9uLCBhbmQgeWVzLCBpdCAqZGVmaW5pdGVseSogY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodHRfbG9jYWxfZW50cnktXHUwMDNldmxhbilgISBUaGF0J3MgZ29vZC4gV2hpY2ggbWVhbnMsIHdoZW4gdGhhdCBUVCBlbnRyeSBnZXRzIGZyZWVkLCB0aGUgVkxBTiByZWZlcmVuY2UgaXMgZHJvcHBlZCBhcyBleHBlY3RlZC4gQWxyaWdodCwgdGhhdCBzZWVtcyBzb3VuZC5cblxuQnV0IGhvbGQgb24uLi4gaWYgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGNhbGxzIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0YCwgdGhhdCBpbiB0dXJuIGRlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBoYXNoIGVudHJ5LCByaWdodD8gWWVwLCB0aGF0IGFsc28gYWxpZ25zIHdpdGggdGhlIHR5cGljYWwgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGNvbnNpc3RlbnQuXG5cbk5vdywgbGV0J3MgZ28gYmFjayBhbmQgY2FyZWZ1bGx5IGFuYWx5emUgYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZSBub3cuLi4gaXQgZG9lczpcblxuYGBgY1xuXHRrcmVmX2luaXQoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcblx0Li4uXG5cdGtyZWZfZ2V0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG5cdGhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoLi4uKTtcbmBgYFxuXG5BaGEhIFNvLCBpdCBpbml0aWFsaXplcyB0aGUgcmVmZXJlbmNlIGNvdW50IHdpdGggYGtyZWZfaW5pdGAsIHdoaWNoIG1lYW5zIHRoZSBpbml0aWFsIHJlZmNvdW50IGlzIDEuIFRoZW4gaXQgY2FsbHMgYGtyZWZfZ2V0YCwgd2hpY2ggKmluY3JlbWVudHMqIHRoZSByZWZjb3VudCEgVGhhdCBtZWFucyB0aGUgVFQgZW50cnkgYWN0dWFsbHkgKnN0YXJ0cyogd2l0aCBhIHJlZmNvdW50IG9mIDIhIE9uZSBmb3IgdGhlIGNhbGxlciwgYW5kIG9uZSBmb3IgdGhlIGhhc2ggdGFibGUuIE9rLCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5TbyB0aGVuIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCByZXR1cm5zLi4uIGFuZCBpdCAqZG9lc24ndCogY2FsbCBga3JlZl9wdXRgIHRvIGRyb3AgdGhlIGNhbGxlcidzIHJlZmVyZW5jZS4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGlzIGV4cGxpY2l0bHkgZHJvcHBlZCBlbHNld2hlcmUsIGFuZCBJIHNob3VsZCBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgaXMgYWNjdXJhdGUuIExldCdzIHRyYWNlIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhZ2FpbiBqdXN0IHRvIGJlIDEwMCUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzMTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTo1MS41NTUxNTA4ODlaIiwiU2VxIjo4MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcdGtyZWZfZ2V0KFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcXG4gNzAxOlxcdFxcdGhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LFxcbiA3MDI6XFx0XFx0XFx0XFx0XFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LCBcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbixcXG4gNzAzOlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24uaGFzaF9lbnRyeSk7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGlmICh1bmxpa2VseShoYXNoX2FkZGVkICE9IDApKSB7XFxuIDcwNjpcXHRcXHRcXHQvKiByZW1vdmUgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIGhhc2ggKi9cXG4gNzA3OlxcdFxcdFxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWwpO1xcbiA3MDg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDcwOTpcXHRcXHR9XFxuIDcxMDpcXHRcXG4gNzExOlxcdGFkZF9ldmVudDpcXG4gNzEyOlxcdFxcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XFxuIDcxMzpcXHRcXG4gNzE0OlxcdGNoZWNrX3JvYW1pbmc6XFxuIDcxNTpcXHRcXHQvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgcm9hbWluZywgYnV0IGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nXFxuIDcxNjpcXHRcXHQgKiBwcm9jZXNzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZFxcbiA3MTc6XFx0XFx0ICovXFxuIDcxODpcXHRcXHRpZiAodHRfZ2xvYmFsIFxcdTAwMjZcXHUwMDI2ICEodHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKSB7XFxuIDcxOTpcXHRcXHRcXHQvKiBUaGVzZSBub2RlIGFyZSBwcm9iYWJseSBnb2luZyB0byB1cGRhdGUgdGhlaXIgdHQgdGFibGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTk6NTEuNTU1MzcxMDk5WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzU4ODM1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIHRoZSBiYXRhZHYgQ29kZSoqXG5cbkhvbGQgb24gYSBzZWNvbmQhIEkgdGhvdWdodCBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgd2FzIHN1cHBvc2VkIHRvIGhhbmRsZSByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSBkcm9wcGluZyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIGFmdGVyIGFkZGluZyB0aGUgZW50cnkuIEJ1dCB0aGUgd29yZGluZyBoZXJlIGlzIHVuY2xlYXIuIEl0IHNlZW1zIEkgYW0gbWlzdGFrZW4uXG5cbklmIGl0ICpkb2Vzbid0KiBkcm9wIHRoZSBjYWxsZXIncyByZWZlcmVuY2UsIHRoZW4gKndobyogaXMgcmVzcG9uc2libGUgZm9yIGRlY3JlbWVudGluZyB0aGF0IHJlZmVyZW5jZSBjb3VudD8gVGhpcyBpcyBhIGNyaXRpY2FsIHF1ZXN0aW9uLiBJZiBub2JvZHkgaXMgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSwgd2UndmUgZ290IGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9uIG91ciBoYW5kcywgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgSSdtIHRyeWluZyB0byBhdm9pZC5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgY29kZS4gTGV0J3MgdHJhY2UgaXQgdGhyb3VnaCBgYmF0YWR2X3R0X2xvY2FsX2FkZGAsIHBheWluZyB2ZXJ5IGNsb3NlIGF0dGVudGlvbiB0byBpdHMgZmluYWwgc2VjdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRoYXQgbWlnaHQgcmVsZWFzZSB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIG9yIGFueSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucy4gTXkgc3VzcGljaW9ucyBhcmUgZ3Jvd2luZywgYW5kIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGNvZGUncyBiZWhhdmlvciBhbGlnbnMgd2l0aCBteSBhc3N1bXB0aW9ucyBhYm91dCBwcm9wZXIgcmVmZXJlbmNlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMzQ5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTo1NC45MzEyNTc4OThaIiwiU2VxIjo4NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcbiA3NjE6XFx0XFx0LyogaWYgYW55IFxcXCJkeW5hbWljXFxcIiBmbGFnIGhhcyBiZWVuIG1vZGlmaWVkLCByZXNlbmQgYW4gQUREIGV2ZW50IGZvciB0aGlzXFxuIDc2MjpcXHRcXHQgKiBlbnRyeSBzbyB0aGF0IGFsbCB0aGUgbm9kZXMgY2FuIGdldCB0aGUgbmV3IGZsYWdzXFxuIDc2MzpcXHRcXHQgKi9cXG4gNzY0OlxcdFxcdGlmIChyZW1vdGVfZmxhZ3MgXiAodHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9SRU1PVEVfTUFTSykpXFxuIDc2NTpcXHRcXHRcXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpO1xcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRyZXQgPSB0cnVlO1xcbiA3Njg6XFx0b3V0OlxcbiA3Njk6XFx0XFx0YmF0YWR2X2hhcmRpZl9wdXQoaW5faGFyZGlmKTtcXG4gNzcwOlxcdFxcdGRldl9wdXQoaW5fZGV2KTtcXG4gNzcxOlxcdFxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWwpO1xcbiA3NzI6XFx0XFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsKTtcXG4gNzczOlxcdFxcdHJldHVybiByZXQ7XFxuIDc3NDpcXHR9XFxuIDc3NTpcXHRcXG4gNzc2OlxcdC8qKlxcbiA3Nzc6XFx0ICogYmF0YWR2X3R0X3ByZXBhcmVfdHZsdl9nbG9iYWxfZGF0YSgpIC0gcHJlcGFyZSB0aGUgVFZMViBUVCBoZWFkZXIgdG8gc2VuZFxcbiA3Nzg6XFx0ICogIHdpdGhpbiBhIFRUIFJlc3BvbnNlIGRpcmVjdGVkIHRvIGFub3RoZXIgbm9kZVxcbiA3Nzk6XFx0ICogQG9yaWdfbm9kZTogb3JpZ2luYXRvciBmb3Igd2hpY2ggdGhlIFRUIGRhdGEgaGFzIHRvIGJlIHByZXBhcmVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE5OjU0LjkzMTQ3MTE4OFoiLCJTZXEiOjg1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMxNDIzOTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZjb3VudGluZyBNeXN0ZXJpZXMgb2YgVkxBTnMgaW4gYmF0bWFuLWFkdioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGJhdG1hbi1hZHYgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIG1lc3Npbmcgd2l0aCBWTEFOIHJlZmNvdW50aW5nLiBJdCBsb29rcyBsaWtlIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBidW1wcyB0aGUgcmVmY291bnQgb24gYSBUVCBlbnRyeSAoaGFzaCByZWZlcmVuY2UpLiBUaGVuLCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgZHJvcHMgdGhhdCBoYXNoIHJlZmVyZW5jZS4gQWxzbywgd2hlbiB0aGUgVFQgZW50cnkgaXMgZnJlZWQsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBvbiB0aGUgVkxBTi4gU28gZmFyLCBzbyBnb29kLlxuXG5CdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLCBhbmQgaXQgYXBwZWFycyB0byAqYWxzbyogZHJvcCBhIFZMQU4gcmVmZXJlbmNlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhpcyB3b3VsZCBjYXVzZSBhIGRvdWJsZSBmcmVlLCBzaW5jZSBgYmF0YWR2X21lc2hpZl92bGFuX2Rlc3Ryb3lgIGNvdWxkIGJlIGZyZWVpbmcgc29tZXRoaW5nIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFsc28gaGFzIGEgcmVmZXJlbmNlIHRvLiBIb3dldmVyLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgd2hpY2ggKmFsc28qIHNob3VsZCBkcm9wIGEgcmVmZXJlbmNlISBCdXQgdGhlIHBhdGNoIHJlbW92ZWQgaXQhXG5cbkl0IHNlZW1zIGxpa2UgdGhlcmUncyBzb21lIGp1Z2dsaW5nIGdvaW5nIG9uIGhlcmUuIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnZXRzIGEgcmVmZXJlbmNlIChsaXN0IHJlZmVyZW5jZSkuIFRoZW4sIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBnZXRzIGFub3RoZXIgKFRUIHJlZmVyZW5jZSkuIFRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgb25lIChnZXQgcmVmZXJlbmNlKS4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyB0d28gcmVmcyAoVFQgYW5kIGxpc3QpLiBBbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRyb3BzIHRoZSBnZXQgcmVmZXJlbmNlLiBJdCBzaG91bGQgYmFsYW5jZSBvdXQsIHRoZW9yZXRpY2FsbHkuXG5cblRoZW4sIHRoZXJlJ3MgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAsIHdoaWNoIGlzIG1lYW50IHRvIHJldml2ZSBhIFZMQU4uIEkgc2VlIGl0IGdldHRpbmcgYSByZWZlcmVuY2Ugd2l0aCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIGFuZCB0aGVuIGl0IHVzZXMgYGJhdGFkdl90dF9sb2NhbF9hZGRgIHRvIGFkZCBhIG5ldyBUVCBlbnRyeSwgYnV0IEkgZG9uJ3Qgc2VlIGl0IGRyb3BwaW5nIHRoZSByZWZlcmVuY2Ugd2l0aCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFdhaXQsIGlzICp0aGlzKiB0aGUgcHJvYmxlbT8gSXMgaXQgbGVha2luZyBhIHJlZmVyZW5jZSBvbiBwdXJwb3NlPyBUaGUgY29tbWVudCBzYXlzIHRoaXMgaXMgdG8gcmV2aXZlIHRoZSBvYmplY3QsIHNvIGl0IHNvdW5kcyBsaWtlIGl0cyBpbnRlbmRlZCB0by5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIHRoZSBwYXRjaCBtaWdodCBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoYXQuIE1heWJlIHRoZSBwcmV2aW91cyB2ZXJzaW9uIGhhZCBhIGJ1ZyB3aGVyZSB0aGVyZSB3YXMgYSBkb3VibGUgZnJlZS4gTGV0IG1lIHNlZSwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAuIEFoLCBtYXliZSBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgaXNuJ3QgZHJvcHBpbmcgdGhlIFRUIGVudHJ5PyBJcyB0aGF0IHBvc3NpYmxlPyBOby5cblxuT2theSwgbGV0J3MgdGhpbmsuIFRoZSBwYXRjaCByZW1vdmVkIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGNhbGwuIFNvLCBpdCB3YXMgZWl0aGVyIGEgZG91YmxlIGZyZWUgb3IgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4gSXMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmcmVlaW5nIGB2bGFuYD8gSXQgY2FuIGlmIHRoZSByZWZjb3VudCByZWFjaGVzIHplcm8uIFNvLCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIHRoZSBsYXN0IHJlZmVyZW5jZSwgYW5kIGZyZWVzIHRoZSBgdmxhbmAgb2JqZWN0LCB0aGVuIHRoYXQgcmVtb3ZlZCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCBpcyBhY2Nlc3NpbmcgYSBmcmVlZCBvYmplY3QsIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZS5cblxuU28gdGhlIG9yaWdpbmFsIHJlZmNvdW50aW5nIG11c3QgaGF2ZSBiZWVuIHdyb25nLiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd2FzIGdldHRpbmcgYSByZWZlcmVuY2UgKDEpIGFuZCB0aGVuIGNhbGxpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9kZXN0cm95YCwgd2hpY2ggd291bGQgYmUgZHJvcHBpbmcgMiByZWZlcmVuY2VzIGZyb20gdGhlIFRUIGVudHJ5IGFuZCB0aGUgbGlzdCAoc28gYSB0b3RhbCBvZiAyKS4gVGhlbiwgdGhlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCB3b3VsZCBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCwgd2hpY2ggd291bGQgZHJvcCBhIHJlZmVyZW5jZS4gVGhhdCBtZWFucyBhIHVzZS1hZnRlci1mcmVlLiBTbyB0aGUgZml4IGlzIHRoZSBwYXRjaC5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUgYXJlIG90aGVyIGNhc2VzOiBXaGF0IGlmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyAqbGVha2luZyogYSByZWZlcmVuY2U/IFdlbGwsIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGlzIGxlYWtpbmcsIHRoYXQgd291bGQgbWFrZSBzZW5zZS4gSXQgbWVhbnMgdGhlIG9iamVjdCBuZXZlciBnZXRzIGZyZWVkLiBCdXQgYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBleGlzdHMgdG8gZnJlZSB0aGUgb2JqZWN0LiBPa2F5LCBJJ20gcHJldHR5IHN1cmUgSSB1bmRlcnN0YW5kLiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBsZWFrcyBhIHJlZmVyZW5jZSBiZWNhdXNlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCAqc2hvdWxkKiBvbmx5IGJlIGRyb3BwaW5nIHRoZSBnZXQgcmVmZXJlbmNlLiBBbmQgd2l0aCB0aGUgcGF0Y2gsIHRoYXQgaXMgd2hhdCBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMDMxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjIwOjQzLjI0NTcxMzIwOFoiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzYwNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCQVRNQU5fQURWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9iYXRtYW4tYWR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9LY29uZmlnLTktXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzoxMDpjb25maWcgQkFUTUFOX0FEVlxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIkIuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0xOS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjIwOmNvbmZpZyBCQVRNQU5fQURWX0JBVE1BTl9WXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJCLkEuVC5NLkEuTi4gViBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzMtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzozNDpjb25maWcgQkFUTUFOX0FEVl9CTEFcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkJyaWRnZSBMb29wIEF2b2lkYW5jZVxcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNDYtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo0Nzpjb25maWcgQkFUTUFOX0FEVl9EQVRcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRpc3RyaWJ1dGVkIEFSUCBUYWJsZVxcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTYtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo1Nzpjb25maWcgQkFUTUFOX0FEVl9NQ0FTVFxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTgtXFx0Ym9vbCBcXFwiTXVsdGljYXN0IG9wdGltaXNhdGlvblxcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjUtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo2Njpjb25maWcgQkFUTUFOX0FEVl9ERUJVR1xcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjctXFx0Ym9vbCBcXFwiQi5BLlQuTS5BLk4uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNzQtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo3NTpjb25maWcgQkFUTUFOX0FEVl9UUkFDSU5HXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03Ni1cXHRib29sIFxcXCJCLkEuVC5NLkEuTi4gdHJhY2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoyMDo0My40NTk0ODIyOTdaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxMDU1NjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBhbmQgRnV6emluZyBhIEJhdG1hbi1hZHYgVkxBTiBIYW5kbGluZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBiYXRtYW4tYWR2YCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHJlbW92ZXMgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbCBmcm9tIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24uIFRoaXMgaXMgYSByZWZjb3VudGluZyBjaGFuZ2UsIHNvIGl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UgbmVlZCB0byB0aG9yb3VnaGx5IHRlc3QgdGhpcy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGZ1enogdGhpcy4gVG8gZnV6eiBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEluIHRoaXMgY2FzZSwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFuZCBpdHMgY291bnRlcnBhcnQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMuIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgdGhlcmUsIGNhcmVmdWxseSBjcmFmdGluZyBpbnB1dHMgdGhhdCBleGVyY2lzZSB0aGVzZSBmdW5jdGlvbnMgd2l0aCBhIHZhcmlldHkgb2YgVkxBTiBjb25maWd1cmF0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIHJlZmNvdW50aW5nIGNoYW5nZS4gSeKAmWxsIG1ha2Ugc3VyZSB0aGUgYEJBVE1BTl9BRFZgIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCBmb3IgbXkgdGVzdHMsIG9mIGNvdXJzZS5cblxuRmluYWxseSwgSSdsbCBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB0byB0cmFjayB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA5ODcsIk91dHB1dFRva2VucyI6MTM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjIwOjQ4LjE3MDA0MTg3NVoiLCJTZXEiOjg4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzg1MDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRcIixcbiAgICBcImJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZjb3VudGluZyBsb2dpYyBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYnkgcmVtb3ZpbmcgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgbGlmZWN5Y2xlIG9mIFZMQU4gb2JqZWN0cyBpbiB0aGUgYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQVRNQU5fQURWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZFwiLFxuICAgIFwiYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBieSByZW1vdmluZyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBsaWZlY3ljbGUgb2YgVkxBTiBvYmplY3RzIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowc54m8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-27 04:01:54 +0000 UTC FinishedAt: 2026-06-27 04:20:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV" ], "series_id": "814eacf4-cfb6-4ec2-b5ea-179f562e0d7a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "batadv_interface_kill_vid", "batadv_interface_add_vid" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkJiMzNDssCiAgICAmIzM0O2JhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVmY291bnRpbmcgbG9naWMgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGJ5IHJlbW92aW5nIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIGxpZmVjeWNsZSBvZiBWTEFOIG9iamVjdHMgaW4gdGhlIGJhdG1hbi1hZHYgbWVzaCBpbnRlcmZhY2UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2U3NDNkMWE0ZGUzYTQ4MmZiMzE4NGUxOGQ1ZGI1ZjBlNmJkNzQxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVuIDI3IDA0OjE0OjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG5pbmRleCBlN2FhNDViYzZiN2FkNy4uY2M5NzRmMjQzMjAwZmMgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG5AQCAtNjkxLDkgJiM0Mzs2OTEsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIFxuIFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIFxuLVx0LyogZmluYWxseSBmcmVlIHRoZSB2bGFuIG9iamVjdCAqL1xuLVx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCQVRNQU5fQURWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBieSByZW1vdmluZyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBsaWZlY3ljbGUgb2YgVkxBTiBvYmplY3RzIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2U3NDNkMWE0ZGUzYTQ4MmZiMzE4NGUxOGQ1ZGI1ZjBlNmJkNzQxOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVuIDI3IDA0OjE0OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMKaW5kZXggZTdhYTQ1YmM2YjdhZDcuLmNjOTc0ZjI0MzIwMGZjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMKQEAgLTY5MSw5ICYjNDM7NjkxLDYgQEAgc3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90bywKIAogCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKIAotCS8qIGZpbmFsbHkgZnJlZSB0aGUgdmxhbiBvYmplY3QgKi8KLQliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwotCiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJhdG1hbi1BZHYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgcmVtb3ZpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7YCBmcm9tIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24uIFJpZ2h0IGF3YXksIG15IGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gaW50byBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNhbGwgaXMgYmVpbmcgcmVtb3ZlZC4gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlPyBJcyB0aGlzIGEgY2xlYW51cCwgYSBidWcgZml4LCBvciBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZW1vdmluZyB0aGF0IFZMQU4gcmVmZXJlbmNlIGNvdW50IGRlY3JlbWVudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiBjYWxsIGFuZCB3aGF0JiMzOTtzIGdvaW5nIHRvIGhhcHBlbiB0byB0aGF0IFZMQU4gYWZ0ZXIgdGhpcyBjaGFuZ2UgaXMgYXBwbGllZC4gSXMgdGhlcmUgYSBtZW1vcnkgbGVhaywgb3IgYSBkb3VibGUgZnJlZSBiZWluZyBwcmV2ZW50ZWQ/IE9yIHBlcmhhcHMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBpcyBiZWluZyBtb3ZlZCBlbHNld2hlcmU/IFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02MTU9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjU4LS8qKlxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2NTk6ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02NjAtICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2Vcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY2OS0gKi9cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjcwOnN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY3MS1cdFx0XHRcdCAgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF0YWR2X25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04NzctXHQubmRvX3ZsYW5fcnhfYWRkX3ZpZCA9IGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODc4Olx0Lm5kb192bGFuX3J4X2tpbGxfdmlkID0gYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODc5LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgPSBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBwcm9tcHQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAgZm9yIEJhdG1hbi1BZHYqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmRvX3ZsYW5fcnhfa2lsbF92aWRgIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJhdG1hbi1hZHYgaW50ZXJmYWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNraXAgc3RyYWlnaHQgdG8gdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gYW5kIGp1bXAgaW50byB0aGUgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoaXMgbG9naWMgbGllcy4gSSB3YW50IHRvIHNlZSBob3cgYmF0bWFuLWFkdiBoYW5kbGVzIFZMQU4gSUQgcmVtb3ZhbCBmcm9tIGl0cyBpbnRlcmZhY2VzLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IGl0IG1hbmFnZXMgaXRzIGludGVybmFsIGJyaWRnaW5nIGFuZCBmb3J3YXJkaW5nIGJhc2VkIG9uIFZMQU4gdGFnZ2luZyAob3IgbGFjayB0aGVyZW9mKSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsaW5nIGluZ3Jlc3MgZmlsdGVyaW5nIG9mIHRhZ2dlZCBmcmFtZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHQgKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxuIDY2MTpcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcbiA2NjI6XHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBkZWxldGVkIHZsYW5cbiA2NjM6XHQgKlxuIDY2NDpcdCAqIERlc3Ryb3kgYWxsIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHVzZWQgdG8gaGFuZGxlIHRoZSB2bGFuIGlkZW50aWZpZWQgYnkgdmlkXG4gNjY1Olx0ICogb24gdG9wIG9mIHRoZSBtZXNoIGludGVyZmFjZVxuIDY2NjpcdCAqXG4gNjY3Olx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgdGhlIHNwZWNpZmllZCBwcm90b3R5cGUgaXMgbm90IEVUSF9QXzgwMjFRXG4gNjY4Olx0ICogb3IgLUVOT0VOVCBpZiB0aGUgc3BlY2lmaWVkIHZsYW4gaWQgd2FzbiYjMzk7dCByZWdpc3RlcmVkLlxuIDY2OTpcdCAqL1xuIDY3MDpcdHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG4gNjcxOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIHNob3J0IHZpZClcbiA2NzI6XHR7XG4gNjczOlx0XHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiA2NzQ6XHRcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4gNjc1Olx0XG4gNjc2Olx0XHQvKiBvbmx5IDgwMi4xUSB2bGFucyBhcmUgc3VwcG9ydGVkLiBiYXRtYW4tYWR2IGRvZXMgbm90IGtub3cgaG93IHRvXG4gNjc3Olx0XHQgKiBoYW5kbGUgb3RoZXIgdHlwZXNcbiA2Nzg6XHRcdCAqL1xuIDY3OTpcdFx0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbiA2ODA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjgxOlx0XG4gNjgyOlx0XHQvKiBcJiMzNDtwcmlvcml0eSB0YWdcJiMzNDsgZnJhbWVzIGFyZSBoYW5kbGVkIGxpa2UgXCYjMzQ7dW50YWdnZWRcJiMzNDsgZnJhbWVzXG4gNjgzOlx0XHQgKiBhbmQgbm8gbWVzaGlmX3ZsYW4gbmVlZHMgdG8gYmUgZGVzdHJveWVkXG4gNjg0Olx0XHQgKi9cbiA2ODU6XHRcdGlmICh2aWQgPT0gMClcbiA2ODY6XHRcdFx0cmV0dXJuIDA7XG4gNjg3Olx0XG4gNjg4Olx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkIHwgQkFUQURWX1ZMQU5fSEFTX1RBRyk7XG4gNjg5Olx0XHRpZiAoIXZsYW4pXG4gNjkwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDY5MTpcdFxuIDY5MjpcdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIDY5MzpcdFxuIDY5NDpcdFx0cmV0dXJuIDA7XG4gNjk1Olx0fVxuIDY5NjpcdFxuIDY5NzpcdC8qIGJhdG1hbi1hZHYgbmV0d29yayBkZXZpY2VzIGhhdmUgZGV2aWNlcyBuZXN0aW5nIGJlbG93IGl0IGFuZCBhcmUgYSBzcGVjaWFsXG4gNjk4Olx0ICogXCYjMzQ7c3VwZXIgY2xhc3NcJiMzNDsgb2Ygbm9ybWFsIG5ldHdvcmsgZGV2aWNlczsgc3BsaXQgdGhlaXIgbG9ja3Mgb2ZmIGludG8gYVxuIDY5OTpcdCAqIHNlcGFyYXRlIGNsYXNzIHNpbmNlIHRoZXkgYWx3YXlzIG5lc3QuXG4gNzAwOlx0ICovXG4gNzAxOlx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBiYXRhZHZfbmV0ZGV2X3htaXRfbG9ja19rZXk7XG4gNzAyOlx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBiYXRhZHZfbmV0ZGV2X2FkZHJfbG9ja19rZXk7XG4gNzAzOlx0XG4gNzA0Olx0LyoqXG4gNzA1Olx0ICogYmF0YWR2X3NldF9sb2NrZGVwX2NsYXNzX29uZSgpIC0gU2V0IGxvY2tkZXAgY2xhc3MgZm9yIGEgc2luZ2xlIHR4IHF1ZXVlXG4gNzA2Olx0ICogQGRldjogZGV2aWNlIHdoaWNoIG93bnMgdGhlIHR4IHF1ZXVlXG4gNzA3Olx0ICogQHR4cTogdHggcXVldWUgdG8gbW9kaWZ5XG4gNzA4Olx0ICogQF91bnVzZWQ6IGFsd2F5cyBOVUxMXG4gNzA5Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlbW92YWwgb2YgYSBWTEFOIFJlbGVhc2UgaW4gQmF0YWR2KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0YWtpbmcgb3V0IGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4gSW50ZXJlc3RpbmcuIEkga25vdyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYHZsYW5gIHN0cnVjdHVyZSwgc28gdGhhdCYjMzk7cyBhIGtleSBwb2ludCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIHdlJiMzOTtyZSByZW1vdmluZyB0aGUgY29ycmVzcG9uZGluZyBgcHV0YCwgZG9lcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHRha2UgY2FyZSBvZiBkcm9wcGluZyB0aGF0IHJlZmVyZW5jZT8gSXQmIzM5O3MgZXNzZW50aWFsIHRoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBtYW5hZ2VkIGNvcnJlY3RseSB0byBhdm9pZCBtZW1vcnkgbGVha3Mgb3IgZG91YmxlIGZyZWVzLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBub3cgaGFuZGxlcyB0aGUgcmVsZWFzZS4gSeKAmWxsIG5lZWQgdG8gZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTQ1PWludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4Ny0vKipcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTg4OiAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3Rcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg5LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkxLSAqL1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1OTI6c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkzLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02NzA9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5MS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjkyOlx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTMtXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMDgyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5Ni1cdGlmICh2bGFuKSB7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjEwOTc6XHRcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5OC1cdFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24uIEp1c3QgdGhlIG5hbWUgYWxvbmUgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgVkxBTi1zcGVjaWZpYyBjbGVhbnVwIGhhcHBlbnMgd2hlbiBhIEJBVE1BTiBBZHZhbmNlZCBtZXNoIGludGVyZmFjZSBpcyBiZWluZyBkZXN0cm95ZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIFZMQU4gc3VwcG9ydCDigJMgdGhpbmdzIGxpa2UgVkxBTiBJRCBtYXBwaW5ncywgcG90ZW50aWFsbHkgcGVyLVZMQU4gc3RhdGlzdGljcywgYW5kIG1heWJlIHNvbWUgaGFuZGxpbmcgb2YgYW55IGFzc29jaWF0ZWQgYnJpZGdlIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyB0aGUgVkxBTiB0YWdnaW5nLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIEJBVE1BTiYjMzk7cyBNQUMtaW4tTUFDIGVuY2Fwc3VsYXRpb24sIHdoaWNoIG1lYW5zIGxpa2VseSBhIHVuaXF1ZSBoYW5kbGluZyBhcHByb2FjaCBjb21wYXJlZCB0byByZWd1bGFyIEV0aGVybmV0IFZMQU5zLiBUaGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMgd2l0aCB0aGVzZSBtZXNoIGNvbmZpZ3VyYXRpb25zLCBzbyBJJiMzOTttIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB0aGV5JiMzOTt2ZSBwdXQgaW4gcGxhY2UsIGVzcGVjaWFsbHkgYXJvdW5kIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLCBlc3BlY2lhbGx5IHNpbmNlIGl0IGRlYWxzIHdpdGggYSBtZXNoIGludGVyZmFjZSBiZWluZyBkZXN0cm95ZWQgd2hpY2ggY2FuIGhhcHBlbiBmb3IgbWFueSByZWFzb25zLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIG5lZWQgdG8gYmUgcm9idXN0IGVub3VnaCB0byBoYW5kbGUgcGFydGlhbCBmYWlsdXJlcyBkdXJpbmcgdGhlIGNsZWFudXAsIG1heWJlIHdpdGggc29tZSBraW5kIG9mIHJldHJ5IG9yIHJvbGxiYWNrIGxvZ2ljLCBvciBhdCBsZWFzdCBncmFjZWZ1bCBoYW5kbGluZyBvZiBtZW1vcnkgbGVha3MuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg4Olx0ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxuIDU4OTpcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuIDU5MDpcdCAqIEB2bGFuOiB0aGUgb2JqZWN0IHRvIHJlbW92ZVxuIDU5MTpcdCAqL1xuIDU5MjpcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gNTkzOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbiA1OTQ6XHR7XG4gNTk1Olx0XHQvKiBleHBsaWNpdGx5IHJlbW92ZSB0aGUgYXNzb2NpYXRlZCBUVCBsb2NhbCBlbnRyeSBiZWNhdXNlIGl0IGlzIG1hcmtlZFxuIDU5NjpcdFx0ICogd2l0aCB0aGUgTk9QVVJHRSBmbGFnXG4gNTk3Olx0XHQgKi9cbiA1OTg6XHRcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIsXG4gNTk5Olx0XHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBcJiMzNDt2bGFuIGludGVyZmFjZSBkZXN0cm95ZWRcJiMzNDssIGZhbHNlKTtcbiA2MDA6XHRcbiA2MDE6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNjAyOlx0fVxuIDYwMzpcdFxuIDYwNDpcdC8qKlxuIDYwNTpcdCAqIGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCgpIC0gbmRvX2FkZF92aWQgQVBJIGltcGxlbWVudGF0aW9uXG4gNjA2Olx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcbiA2MDc6XHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXG4gNjA4Olx0ICogQHZpZDogaWRlbnRpZmllciBvZiB0aGUgbmV3IHZsYW5cbiA2MDk6XHQgKlxuIDYxMDpcdCAqIFNldCB1cCBhbGwgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIHRoZSBuZXcgdmxhbiBvbiB0b3Agb2YgdGhlXG4gNjExOlx0ICogbWVzaCBpbnRlcmZhY2VcbiA2MTI6XHQgKlxuIDYxMzpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuXG4gNjE0Olx0ICovXG4gNjE1Olx0c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIDYxNjpcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIHNob3J0IHZpZClcbiA2MTc6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRG91YmxlLUZyZWUgQWxlcnQ6IEludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZMQU4gTWVtb3J5IENvcnJ1cHRpb24gaW4gQkFUTUFOIEFkdmFuY2VkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY2xlYW51cCBwcm9jZXNzIGZvciBWTEFOcyBpbiBCQVRNQU4gQWR2YW5jZWQsIHNwZWNpZmljYWxseSB0aGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCByaWdodCwgdGhpcyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuJiMzNDsgU3RhbmRhcmQgY2xlYW51cCBwcm9jZWR1cmUsIG5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSwgeWV0LiBCdXQgdGhlbiBhIHJlZCBmbGFnIHBvcHMgdXAuIEhvbGQgb24gYSBzZWNvbmQuLi4gaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAsIHdoaWNoIHJlbGVhc2VzIHRoZSBWTEFOLCBhbmQgdGhlbiBsYXRlciBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgb24gdGhlICpzYW1lKiBWTEFOLCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvIGhlcmUhIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgdGhhdCYjMzk7cyAqYmFkKi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBiZWluZyBjYWxsZWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gaXNzdWUuIExldCYjMzk7cyBzZWUgaWYgdGhlIG1lc2hpZiBuZXRsaW5rIGRlc3RydWN0aW9uIHBsYXlzIGEgcm9sZSBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW50byBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaGludCBvZiB0aGlzIGlzc3VlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODI6XHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcbjEwODM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuMTA4NDpcdHtcbjEwODU6XHRcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcbjEwODY6XHRcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbjEwODc6XHRcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4xMDg4Olx0XG4xMDg5Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2bWVzaF9pZmFjZS1cdTAwM2VhZGpfbGlzdC5sb3dlcikpIHtcbjEwOTA6XHRcdFx0aGFyZF9pZmFjZSA9IG5ldGRldl9hZGphY2VudF9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLVx1MDAzZWFkal9saXN0Lmxvd2VyLm5leHQpO1xuMTA5MTpcdFx0XHRiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpO1xuMTA5MjpcdFx0fVxuMTA5MzpcdFxuMTA5NDpcdFx0LyogZGVzdHJveSB0aGUgXCYjMzQ7dW50YWdnZWRcJiMzNDsgVkxBTiAqL1xuMTA5NTpcdFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7XG4xMDk2Olx0XHRpZiAodmxhbikge1xuMTA5NzpcdFx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG4xMDk4Olx0XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4xMDk5Olx0XHR9XG4xMTAwOlx0XG4xMTAxOlx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShtZXNoX2lmYWNlLCBoZWFkKTtcbjExMDI6XHR9XG4xMTAzOlx0XG4xMTA0Olx0LyoqXG4xMTA1Olx0ICogYmF0YWR2X21lc2hpZl9pc192YWxpZCgpIC0gQ2hlY2sgd2hldGhlciBkZXZpY2UgaXMgYSBiYXRhZHYgbWVzaCBpbnRlcmZhY2VcbjExMDY6XHQgKiBAbmV0X2RldjogZGV2aWNlIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkXG4xMTA3Olx0ICpcbjExMDg6XHQgKiBSZXR1cm46IHRydWUgd2hlbiBuZXRfZGV2IGlzIGEgYmF0bWFuLWFkdiBpbnRlcmZhY2UsIGZhbHNlIG90aGVyd2lzZVxuMTEwOTpcdCAqL1xuMTExMDpcdGJvb2wgYmF0YWR2X21lc2hpZl9pc192YWxpZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldilcbjExMTE6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRG91YmxlLUNoZWNraW5nIFZMQU4gSGFuZGxpbmcgaW4gTWVzaCBJbnRlcmZhY2UgRGVzdHJ1Y3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgYW5kIG5vdGljZWQgdGhpcyBibG9jayBvZiBjb2RlOgoKYGBgYwoJdmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7CglpZiAodmxhbikgewoJCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKCQliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwoJfQpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcywgaGFuZyBvbiwgaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgaXRzZWxmLCBhcmVuJiMzOTt0IHdlIGRvaW5nIGEgZG91YmxlIGBwdXRgIGhlcmUgaW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYD8gVGhhdCB3b3VsZCBiZSBhIG1lbW9yeSBsZWFrIHdhaXRpbmcgdG8gaGFwcGVuLCBvciB3b3JzZS4KCkJ1dCwgYmVmb3JlIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCBpdCBhY3R1YWxseSBkb2VzIHdpdGggdGhlIFZMQU4gZW50cnkuIERvZXMgaXQgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Q/IElmIGl0IGRvZXMsIHRoZW4gdGhlIHNlY29uZCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgbWlnaHQgYmUgc2FmZSwgdGhvdWdoIHN0aWxsIGluZWZmaWNpZW50LiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCBubywgaXQgKmRvZXNuJiMzOTt0KiByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4gCgpPa2F5LCBub3cgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgbG9naWMgd2l0aGluIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YC4gR290dGEgYmUgc3VyZSBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21haW4uYz02MDc9Ym9vbCBiYXRhZHZfdmxhbl9hcF9pc29sYV9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYy02MTctXHRcdGFwX2lzb2xhdGlvbl9lbmFibGVkID0gYXRvbWljX3JlYWQoXHUwMDI2dmxhbi1cdTAwM2VhcF9pc29sYXRpb24pO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjYxODpcdFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21haW4uYy02MTktXHR9XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTUyLVx0aWYgKHZsYW4pIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTUzOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01NTQtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODEtXHQvKiBkb24mIzM5O3QgcmV0dXJuIHJlZmVyZW5jZSB0byBuZXcgbWVzaGlmX3ZsYW4gKi9cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTgyOlx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTgzLVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTkyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MDAtXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjYwMTpcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwMi19XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMDgyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5Ny1cdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk4Olx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk5LVx0fVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg9MjU9c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqYmF0YWR2X21lc2hpZl92bGFuX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMjgtLyoqXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oOjI5OiAqIGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQoKSAtIGRlY3JlYXNlIHRoZSB2bGFuIG9iamVjdCByZWZjb3VudGVyIGFuZFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaC0zMC0gKiAgcG9zc2libHkgcmVsZWFzZSBpdFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMzItICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oOjMzOnN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTM0LXtcbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9MTcyPXN0YXRpYyBpbnQgYmF0YWR2X25ldGxpbmtfbWVzaF9maWxsX2FwX2lzb2xhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0xODItXHRhcF9pc29sYXRpb24gPSBhdG9taWNfcmVhZChcdTAwMjZ2bGFuLVx1MDAzZWFwX2lzb2xhdGlvbik7XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MTgzOlx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0xODQtXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTE5Nj1zdGF0aWMgaW50IGJhdGFkdl9uZXRsaW5rX3NldF9tZXNoX2FwX2lzb2xhdGlvbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0yMDUtXHRhdG9taWNfc2V0KFx1MDAyNnZsYW4tXHUwMDNlYXBfaXNvbGF0aW9uLCAhIW5sYV9nZXRfdTgoYXR0cikpO1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjIwNjpcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMjA3LVxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYz0xMzc0PXN0YXRpYyB2b2lkIGJhdGFkdl9wb3N0X2RvaXQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTEzOTAtXHRcdHZsYW4gPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzFdO1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjEzOTE6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTM5Mi1cdH1cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTIxNz1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjIzLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyMjQ6XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHR0X2xvY2FsX2VudHJ5LVx1MDAzZXZsYW4pO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yMjUtXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yOTM9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfbW9kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zMDMtXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjMwNDpcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTMwNS19XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0xMDc0PWJhdGFkdl90dF9sb2NhbF9kdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMDkzLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMDk0Olx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTA5NS1cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTM3MjA9Ym9vbCBiYXRhZHZfaXNfYXBfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdTggKnNyYywgdTggKmRzdCxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM3NDktdmxhbl9wdXQ6XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM3NTA6XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzUxLVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFZMQU4gUmVtb3ZhbCBpbiBCQVRNQU4gQWR2YW5jZWQqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICphY3R1YWxseSogcmVtb3ZpbmcgdGhlIFZMQU4gZW50cnkgZnJvbSB0aGUgaW50ZXJuYWwgVkxBTiBsaXN0PyBUaGF0IGp1c3QgZG9lc24mIzM5O3Qgc291bmQgcmlnaHQsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIG5vdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIFNlZW1zIGxpa2UgaXQgd291bGQgYmUgYSBtaXNzZWQgb3Bwb3J0dW5pdHkgdG8gcmVsZWFzZSB0aGUgVkxBTiByZXNvdXJjZS4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGRvdWJsZS1jaGVjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvbiBob3cgdGhlIFZMQU5zIGFyZSB0cnVseSBtYW5hZ2VkLiBUaGUgcmVhbCBsb2dpYyBmb3IgcmVsZWFzaW5nIFZMQU5zIGluIHRoaXMgY29udGV4dCBpcyBtb3N0IGxpa2VseSB3aXRoaW4gYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYC4gSSYjMzk7bGwgZGlnIGludG8gdGhhdCBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTEFOIGxpc3QgdG8gY29uZmlybSBvciByZWZ1dGUgbXkgaW5pdGlhbCB0aG91Z2h0LiBJdCBzZWVtcyBsaWtlIHRoZSBtb3JlIGxpa2VseSBwbGFjZSBmb3IgdGhlIGFjdHVhbCB1bmxpbmtpbmcgYW5kIGNsZWFudXAuIEkgYmV0IGl0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTQwMj12b2lkIGJhdGFkdl9pbnRlcmZhY2Vfcngoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00OTEtLyoqXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjQ5MjogKiBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZSgpIC0gcmVsZWFzZSB2bGFuIGZyb20gbGlzdHMgYW5kIHF1ZXVlIGZvciBmcmVlXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ5My0gKiAgYWZ0ZXIgcmN1IGdyYWNlIHBlcmlvZFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDk1LSAqL1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo0OTY6dm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00OTcte1xuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg9MjM9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg6MjQ6dm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMjUtc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqYmF0YWR2X21lc2hpZl92bGFuX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg9MzM9c3RhdGljIGlubGluZSB2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQoc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTM3LVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaDozODpcdGtyZWZfcHV0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY291bnQsIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMzktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWTEFOIERlc3RydWN0aW9uIGluIGJhdGFkdioqCgpPa2F5LCBzbyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgYmFzaWNhbGx5IGp1c3QgYSBga3JlZl9wdXRgLiAgSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgcmVmZXJlbmNlIGNvdW50ZXIgZGVjcmVtZW50LiBOb3RoaW5nIGZhbmN5IGhlcmUuCgpOb3csIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgdGhhdCwgc28gaXQmIzM5O3MgY2xlYXJseSBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3MuICBJdCBsb29rcyBsaWtlIGl0IHJlbW92ZXMgYSBUVCBsb2NhbCBlbnRyeSBmaXJzdC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYE5PUFVSR0VgLCBzbyBpdCYjMzk7cyBhbiBleHBsaWNpdCByZW1vdmFsLgoKTGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLiBDcnVjaWFsbHksIGl0IGZpcnN0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgd2hpY2ggKmdldHMqIGEgcmVmZXJlbmNlIHRvIHRoZSBWTEFOLiBUaGF0JiMzOTtzICYjNDM7MS4gVGhlbiwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBpcyBjYWxsZWQuIEl0IGRyb3BzIGEgcmVmZXJlbmNlLiBCdXQgd2hpY2ggb25lPyBJcyBpdCBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnb3QsIHRoZSBsaXN0IHJlZmVyZW5jZT8gT3IgZG9lcyBpdCB0YWtlIGEgY29weSBhbmQgZHJvcCB0aGF0PyBJIG5lZWQgdG8ga25vdyBob3cgdGhlIHJlZmVyZW5jZSBpcyBoZWxkLgoKQW5kIHRoZW4sICphZnRlciogYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBpcyBjYWxsZWQsIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgKmFnYWluKi4gU28sIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgb25lIHJlZmVyZW5jZSwgYW5kIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGRyb3BzIGFub3RoZXIhIFRoaXMgaXMgdG8gaGFuZGxlIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBzbyB0aGUgdmxhbiBvYmplY3QgY2FuIGJlIGZyZWVkLgoKSSBzaG91bGQgY2hlY2sgdGhlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgZnVuY3Rpb24gdG8gYmUgY2VydGFpbiBleGFjdGx5IHdoYXQgaGFwcGVucyB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgaGl0cyB6ZXJvLiBEb2VzIGl0IGhhbmRsZSBsaXN0IHJlbW92YWwsIG9yIGRvZXMgdGhlIGxpc3QgbWFuYWdlbWVudCBoYXBwZW4gZWxzZXdoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MjpcdCAqIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKCkgLSByZWxlYXNlIHZsYW4gZnJvbSBsaXN0cyBhbmQgcXVldWUgZm9yIGZyZWVcbiA0OTM6XHQgKiAgYWZ0ZXIgcmN1IGdyYWNlIHBlcmlvZFxuIDQ5NDpcdCAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgdmxhbiBvYmplY3RcbiA0OTU6XHQgKi9cbiA0OTY6XHR2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gNDk3Olx0e1xuIDQ5ODpcdFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiA0OTk6XHRcbiA1MDA6XHRcdHZsYW4gPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuLCByZWZjb3VudCk7XG4gNTAxOlx0XG4gNTAyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dmxhbi1cdTAwM2ViYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDUwMzpcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QpO1xuIDUwNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dmxhbi1cdTAwM2ViYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDUwNTpcdFxuIDUwNjpcdFx0a2ZyZWVfcmN1KHZsYW4sIHJjdSk7XG4gNTA3Olx0fVxuIDUwODpcdFxuIDUwOTpcdC8qKlxuIDUxMDpcdCAqIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSAtIGdldCB0aGUgdmxhbiBvYmplY3QgZm9yIGEgc3BlY2lmaWMgdmlkXG4gNTExOlx0ICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gNTEyOlx0ICogQHZpZDogdGhlIGlkZW50aWZpZXIgb2YgdGhlIHZsYW4gb2JqZWN0IHRvIHJldHJpZXZlXG4gNTEzOlx0ICpcbiA1MTQ6XHQgKiBSZXR1cm46IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIHZsYW4gbWF0Y2hpbmcgdGhlIHZpZCBwYXNzZWQgYXMgYXJndW1lbnQgb3JcbiA1MTU6XHQgKiBOVUxMIG90aGVyd2lzZS4gVGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJldHVybmVkIG9iamVjdCBpcyBpbmNyZW1lbnRlZCBieSAxLlxuIDUxNjpcdCAqL1xuIDUxNzpcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKmJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiA1MTg6XHRcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIHNob3J0IHZpZClcbiA1MTk6XHR7XG4gNTIwOlx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuX3RtcCwgKnZsYW4gPSBOVUxMO1xuIDUyMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWx2aW5nIGludG8gdGhlIFZMQU4gUmVsZWFzZSBNZWNoYW5pc20qKgoKT2theSwgc28gYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGZvciByZW1vdmluZyBhIFZMQU4gZnJvbSB0aGUgcmVsZXZhbnQgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIGRlLWFsbG9jYXRpb24gZnVuY3Rpb24uIFRoZSB3YXkgaXQgd29ya3MsIGZyb20gbXkgdW5kZXJzdGFuZGluZywgaXMgdGhhdCB0aGUgbGlzdCBpdHNlbGYgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBWTEFOLiBJbiBvdGhlciB3b3JkcywgdGhlIGxpc3QgaXMgdHJhY2tpbmcgdGhpcyBwYXJ0aWN1bGFyIHZsYW4uIFRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGZ1bmN0aW9uIGlzIGxpa2VseSBjYWxsZWQgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IGhpdHMgemVyby4gQXQgdGhhdCBwb2ludCwgdGhlIGxpc3QgZW50cnkgY2FuIHNhZmVseSBiZSByZW1vdmVkIGJlY2F1c2Ugbm90aGluZyBlbHNlIGlzIHVzaW5nIGl0LgoKQnV0Li4uIGhhbmcgb24uIElmIHRoZSBsaXN0ICpob2xkcyogYSByZWZlcmVuY2UsIHdoZW4gYW5kIHdoZXJlIGlzIHRoYXQgcmVmZXJlbmNlIGFjdHVhbGx5ICpkcm9wcGVkKj8gSSBuZWVkIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBWTEFOIG1vcmUgY2xvc2VseSB0byB1bmRlcnN0YW5kIHRoZSBvd25lcnNoaXAuIExldCBtZSBjaGVjayBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgdG8gc2VlIGhvdyBpdCYjMzk7cyBoYW5kbGVkIG9uIHRoZSBjcmVhdGlvbiBzaWRlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgbGlzdCBnYWlucyB0aGUgcmVmZXJlbmNlIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoZXJlIHRoZSBhc3NvY2lhdGVkIHJlbGVhc2Ugb2NjdXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdGludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcbiA1NDY6XHR7XG4gNTQ3Olx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuIDU0ODpcdFxuIDU0OTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTUwOlx0XG4gNTUxOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA1NTI6XHRcdGlmICh2bGFuKSB7XG4gNTUzOlx0XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNTU0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTU1Olx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDU1NjpcdFx0fVxuIDU1NzpcdFxuIDU1ODpcdFx0dmxhbiA9IGt6YWxsb2Nfb2JqKCp2bGFuLCBHRlBfQVRPTUlDKTtcbiA1NTk6XHRcdGlmICghdmxhbikge1xuIDU2MDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDU2MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA1NjI6XHRcdH1cbiA1NjM6XHRcbiA1NjQ6XHRcdHZsYW4tXHUwMDNlYmF0X3ByaXYgPSBiYXRfcHJpdjtcbiA1NjU6XHRcdHZsYW4tXHUwMDNldmlkID0gdmlkO1xuIDU2NjpcdFx0a3JlZl9pbml0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY291bnQpO1xuIDU2NzpcdFxuIDU2ODpcdFx0YXRvbWljX3NldChcdTAwMjZ2bGFuLVx1MDAzZWFwX2lzb2xhdGlvbiwgMCk7XG4gNTY5Olx0XG4gNTcwOlx0XHRrcmVmX2dldChcdTAwMjZ2bGFuLVx1MDAzZXJlZmNvdW50KTtcbiA1NzE6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QsIFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3QpO1xuIDU3MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcbiA1NzM6XHRcbiA1NzQ6XHRcdC8qIGFkZCBhIG5ldyBUVCBsb2NhbCBlbnRyeS4gVGhpcyBvbmUgd2lsbCBiZSBtYXJrZWQgd2l0aCB0aGUgTk9QVVJHRVxuIDU3NTpcdFx0ICogZmxhZ1xuIDU3NjpcdFx0ICovXG4gNTc3Olx0XHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UsXG4gNTc4Olx0XHRcdFx0ICAgIGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIsIHZpZCxcbiA1Nzk6XHRcdFx0XHQgICAgQkFUQURWX05VTExfSUZJTkRFWCwgQkFUQURWX05PX01BUkspO1xuIDU4MDpcdFxuIDU4MTpcdFx0LyogZG9uJiMzOTt0IHJldHVybiByZWZlcmVuY2UgdG8gbmV3IG1lc2hpZl92bGFuICovXG4gNTgyOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuIDU4MzpcdFxuIDU4NDpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzk4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmF0YWR2IFZMQU4gUmVmZXJlbmNlIENvdW50aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgVkxBTiByZWZlcmVuY2UgY291bnRpbmcgaW4gYmF0YWR2LiBJbml0aWFsbHksIGluIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgd2UgaW5pdGlhbGl6ZSB0aGUgYHZsYW4tJmd0O3JlZmNvdW50YCB0byAxLiBUaGVuIHdlIGluY3JlbWVudCBpdCB0byAyLCBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBsaXN0LiBXZSAqaW1tZWRpYXRlbHkqIGRlY3JlbWVudCBpdCBiYWNrIHRvIDEgdmlhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YC4gVGhpcyB0ZWxscyBtZSB0aGUgbGlzdCBpdHNlbGYgaG9sZHMgdGhlICpwcmltYXJ5KiByZWZlcmVuY2UuIFRoaXMgc2VlbXMgc2Vuc2libGUuIFdoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBnZXRzIGNhbGxlZCwgaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7YCwgd2hpY2ggKnNob3VsZCogZHJvcCB0aGUgbGlzdCYjMzk7cyByZWZlcmVuY2UuCgpBaCEgTm93IEkgc2VlLiBXaGVuIHRoZSBsaXN0IGRyb3BzIGl0cyByZWZlcmVuY2UsIGlmIG5vIG90aGVyIHBhcnQgb2YgdGhlIGNvZGUgaGFzIGEgaG9sZCBvbiB0aGUgcmVmZXJlbmNlLCB0aGUgcmVmY291bnQgYmVjb21lcyB6ZXJvIGFuZCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgICpzaG91bGQqIGdldCBjYWxsZWQsIGFuZCB0aGF0JiMzOTtzIHdoZW4gdGhlIGxpc3QgcmVtb3ZlcyB0aGUgb2JqZWN0LiBHb29kLgoKT2theSwgbGV0IG1lIGNoZWNrIHRoZSAmIzM0O2tpbGxlciYjMzQ7LCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdCB0byBzZWUuIEl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB0byBnZXQgYSByZWZlcmVuY2UgKHJlZmNvdW50ID0gMiksIHRoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB0byBkZXN0cm95IGl0IChyZWZjb3VudCA9IDEpLCBhbmQgKmZpbmFsbHkqIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBvbiBpdHMgKm93biogcmVmZXJlbmNlLCBkcm9wcGluZyB0aGUgY291bnQgdG8gemVyby4gVGhhdCBtYWtlcyBzZW5zZSEgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb3JyZWN0bHkgbWFuYWdlcyB0byBkZWNyZW1lbnQgdGhlIGxpc3QgcmVmZXJlbmNlLCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIG1hbmFnZXMgdG8gZHJvcCBpdHMgcmVmZXJlbmNlLgoKU28sIHdoeSBkaWQgYSBwYXRjaCByZW1vdmUgdGhhdCAqZmluYWwqIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBjYWxsIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYD8gVGhhdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gYSBsZWFrISBMZXQgbWUgZ28gYW5kIGNoZWNrIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AuIFRoYXQgbWlnaHQgcmV2ZWFsIHdoeSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgyOlx0c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXG4xMDgzOlx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbjEwODQ6XHR7XG4xMDg1Olx0XHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XG4xMDg2Olx0XHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4xMDg3Olx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuMTA4ODpcdFxuMTA4OTpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNm1lc2hfaWZhY2UtXHUwMDNlYWRqX2xpc3QubG93ZXIpKSB7XG4xMDkwOlx0XHRcdGhhcmRfaWZhY2UgPSBuZXRkZXZfYWRqYWNlbnRfZ2V0X3ByaXZhdGUobWVzaF9pZmFjZS1cdTAwM2VhZGpfbGlzdC5sb3dlci5uZXh0KTtcbjEwOTE6XHRcdFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbjEwOTI6XHRcdH1cbjEwOTM6XHRcbjEwOTQ6XHRcdC8qIGRlc3Ryb3kgdGhlIFwmIzM0O3VudGFnZ2VkXCYjMzQ7IFZMQU4gKi9cbjEwOTU6XHRcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpO1xuMTA5NjpcdFx0aWYgKHZsYW4pIHtcbjEwOTc6XHRcdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuMTA5ODpcdFx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuMTA5OTpcdFx0fVxuMTEwMDpcdFxuMTEwMTpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUobWVzaF9pZmFjZSwgaGVhZCk7XG4xMTAyOlx0fVxuMTEwMzpcdFxuMTEwNDpcdC8qKlxuMTEwNTpcdCAqIGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQoKSAtIENoZWNrIHdoZXRoZXIgZGV2aWNlIGlzIGEgYmF0YWR2IG1lc2ggaW50ZXJmYWNlXG4xMTA2Olx0ICogQG5ldF9kZXY6IGRldmljZSB3aGljaCBzaG91bGQgYmUgY2hlY2tlZFxuMTEwNzpcdCAqXG4xMTA4Olx0ICogUmV0dXJuOiB0cnVlIHdoZW4gbmV0X2RldiBpcyBhIGJhdG1hbi1hZHYgaW50ZXJmYWNlLCBmYWxzZSBvdGhlcndpc2VcbjExMDk6XHQgKi9cbjExMTA6XHRib29sIGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpXG4xMTExOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM1MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkxBTiBEZXN0cnVjdGlvbiBpbiBCYXRtYW4tYWR2IE1lc2ggSW50ZXJmYWNlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBhbmQgSSBzZWUgdGhpcyBjb2RlIGJsb2NrOgoKYGBgYwoJdmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7CglpZiAodmxhbikgewoJCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKCQliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwoJfQpgYGAKClRoYXQgbG9va3Mgc3RhbmRhcmQgZW5vdWdoLCBnZXQgYSBWTEFOLCBkZXN0cm95IGl0LCByZWxlYXNlIGl0LiBCdXQgd2FpdC4uLiBkaWRuJiMzOTt0IEkgc2VlIHNvbWV0aGluZyBhYm91dCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2hhbmdpbmcgcmVjZW50bHk/IENvdWxkIGl0IGJlIHRoYXQgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24gd2FzIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgcmVsZWFzZSBpdHNlbGY/IE5vLCB0aGF0IGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2U7IHRoYXQgc2VlbXMgbGlrZSB0b28gYnJvYWQgYSBjaGFuZ2UgZm9yIHN1Y2ggYSBzbWFsbCB0aGluZywgYW5kIGFueXdheSwgdGhlIGNvbW1pdCBsb2cgZGlkbiYjMzk7dCBzdWdnZXN0IHRoYXQuIExldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBwYXRjaC4KCipTY2FucyB0aGUgcGF0Y2ggZGlmZi4uLioKCmBgYGRpZmYKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCkBAIC02OTEsOSAmIzQzOzY5MSw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sCiAKIAliYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7CiAKLQkvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovCi0JYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTsKLQogCXJldHVybiAwOwogfQpgYGAKCkFoYSEgSXQgKmRpZCogcmVtb3ZlIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIFdoeT8gSXMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBub3cgcmVzcG9uc2libGUgZm9yIGJvdGggdGhlIGRlc3Ryb3kgYW5kIHRoZSBwdXQgb3BlcmF0aW9ucz8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBmaW5kIG91dC4gVGhpcyBpcyBzdGFydGluZyB0byBsb29rIGxpa2UgdGhlIGNvbW1pdCBoYWQgc29tZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHdhc24mIzM5O3QgY2hhbmdlZCB0byBhbHNvIGRyb3AgYSByZWYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg4Olx0ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxuIDU4OTpcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuIDU5MDpcdCAqIEB2bGFuOiB0aGUgb2JqZWN0IHRvIHJlbW92ZVxuIDU5MTpcdCAqL1xuIDU5MjpcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gNTkzOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbiA1OTQ6XHR7XG4gNTk1Olx0XHQvKiBleHBsaWNpdGx5IHJlbW92ZSB0aGUgYXNzb2NpYXRlZCBUVCBsb2NhbCBlbnRyeSBiZWNhdXNlIGl0IGlzIG1hcmtlZFxuIDU5NjpcdFx0ICogd2l0aCB0aGUgTk9QVVJHRSBmbGFnXG4gNTk3Olx0XHQgKi9cbiA1OTg6XHRcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIsXG4gNTk5Olx0XHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBcJiMzNDt2bGFuIGludGVyZmFjZSBkZXN0cm95ZWRcJiMzNDssIGZhbHNlKTtcbiA2MDA6XHRcbiA2MDE6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNjAyOlx0fVxuIDYwMzpcdFxuIDYwNDpcdC8qKlxuIDYwNTpcdCAqIGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCgpIC0gbmRvX2FkZF92aWQgQVBJIGltcGxlbWVudGF0aW9uXG4gNjA2Olx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcbiA2MDc6XHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTg5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmVyZW5jZSBDb3VudGluZyBBbm9tYWx5IGluIGJhdGFkdiBWTEFOIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBpcyBzdGFydGluZyB0byBuYWcgYXQgbWUuIEl0IGxvb2tzIGxpa2UgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCBkcm9wcGluZyBhIHJlZmVyZW5jZS4gQnV0LCB0aGUgZnVuY3Rpb24gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHJldHVybnMgYSByZWZlcmVuY2UsIGFzIGl0IHNob3VsZC4gTm93LCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBzbyBpdCBhY3F1aXJlcyBhIHJlZmVyZW5jZS4gVGhlbiwgY3J1Y2lhbGx5LCBpdCBzdWJzZXF1ZW50bHkgY2FsbHMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYC4gU28gZmFyLCBzbyBnb29kLiBUaGUgKnByb2JsZW0qIGlzIHRoYXQgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgICpkb2VzbiYjMzk7dCogY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgYWZ0ZXIgdGhlIGNhbGwgdG8gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCwgdGhlbiB3ZSYjMzk7dmUgZ290IGEgcmVmZXJlbmNlIGxlYWsuCgpVbmxlc3MuLi4gdW5sZXNzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgKmJvdGgqIHJlZmVyZW5jZXMgc29tZWhvdz8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBJdCBvbmx5IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBvbmNlLiBJ4oCZbSBwcmV0dHkgc3VyZSBpdCBvbmx5IGRyb3BzIG9uZS4KCldhaXQsIGl0JiMzOTtzIHBvc3NpYmxlIHRoaXMgd2FzIGhhbmRsZWQgaW4gYSBkaWZmZXJlbnQgY29tbWl0LiBEYW1uIGl0LCB0aGUgc291cmNlIGNvZGUmIzM5O3MgYSBiaXQgb2YgYSBtZXNzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGdpdCBsb2cgb2YgYG5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhhdCBpdHMgYmVoYXZpb3IgaGFzbiYjMzk7dCBjaGFuZ2VkLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBodW50IGRvd24gYSBmaXgsIG9yIGlmIHRoaXMgKmlzKiBhIGxlYWsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU0NT1pbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODctLyoqXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU4ODogKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4OS0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5MS0gKi9cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTkyOnN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5My1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NjcwPXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTEtXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY5MjpcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkzLVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTA4Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTYtXHRpZiAodmxhbikge1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk3Olx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTgtXHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCYXRhZHYgVkxBTiBEZXN0cnVjdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyB3ZSYjMzk7cmUgZGVzdHJveWluZyB0aGUgVkxBTiwgc28gd2UgbmVlZCB0byByZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggaXQuCgpCdXQgdGhlbiwgaW5zaWRlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIEkgc2VlIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCBiZWluZyBjYWxsZWQuIE5vdywgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gRG9lcyB0aGlzIGNhbGwgYWN0dWFsbHkgZGVjcmVtZW50IGEgcmVmZXJlbmNlIGNvdW50PyBJcyB0aGVyZSBhIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSBidXJpZWQgaW4gaGVyZT8gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHRoYXQuIEkga25vdyB0aGUgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGZ1bmN0aW9uIGl0c2VsZiBpcyB3aGVyZSB0aGUgY3JpdGljYWwgcmVmZXJlbmNlIGhhbmRsaW5nIHRha2VzIHBsYWNlLCBzbyBJIGJldHRlciBnbyBkaXZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcuIEdvdHRhIGNvbmZpcm0gdGhhdCByZWZlcmVuY2UgZHJvcHBpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl90dF9sb2NhbF9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMTI9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTMwLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZsYW4sIFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3QsIGxpc3QpIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTMxOlx0XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBvbGRfYWRkciwgdmxhbi1cdTAwM2V2aWQsXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEzMi1cdFx0XHRcdCAgICAgICBcJiMzNDttYWMgYWRkcmVzcyBjaGFuZ2VkXCYjMzQ7LCBmYWxzZSk7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01OTI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5Ny1cdCAqL1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1OTg6XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTktXHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBcJiMzNDt2bGFuIGludGVyZmFjZSBkZXN0cm95ZWRcJiMzNDssIGZhbHNlKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz02ODE9c3RhdGljIHZvaWQgYmF0YWR2X21jYXN0X21sYV90dF9yZXRyYWN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjkzLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6Njk0Olx0XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBtY2FzdF9lbnRyeS1cdTAwM2VhZGRyLFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjk1LVx0XHRcdFx0ICAgICAgIEJBVEFEVl9OT19GTEFHUyxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTEyMTc9YmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMjM1LS8qKlxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMjM2OiAqIGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoKSAtIGxvZ2ljYWxseSByZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgbG9jYWwgdGFibGVcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTIzNy0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyNDQtICovXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEyNDU6dTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyNDYtXHRcdFx0ICAgdW5zaWduZWQgc2hvcnQgdmlkLCBjb25zdCBjaGFyICptZXNzYWdlLFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTU4OT1zdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTcyNS1cdC8qIHJlbW92ZSBhZGRyZXNzIGZyb20gbG9jYWwgaGFzaCBpZiBwcmVzZW50ICovXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjE3MjY6XHRsb2NhbF9mbGFncyA9IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIHR0X2FkZHIsIHZpZCxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTcyNy1cdFx0XHRcdFx0ICAgICBcJiMzNDtnbG9iYWwgdHQgcmVjZWl2ZWRcJiMzNDssXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaD0xOT1ib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaC0yMC1cdFx0XHQgdW5zaWduZWQgc2hvcnQgdmlkLCBpbnQgaWZpbmRleCwgdTMyIG1hcmspO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaDoyMTp1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaC0yMi1cdFx0XHQgICBjb25zdCB1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVkxBTiBDbGVhbnVwIGluIEJhdGFkdioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgd2FzIHJlc3BvbnNpYmxlIGZvciBjb21wbGV0ZWx5IGNsZWFuaW5nIHVwIHRoZSBWTEFOIGNvbnRleHQsIGluY2x1ZGluZyBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBsaXN0LiBCdXQgc29tZXRoaW5nIGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgaXQgKm1pZ2h0KiBiZSBtaXNzaW5nIGEgc3RlcCB0aGVyZS4KCkxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucywgdGhvdWdoLiBJbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IGFzc3VtaW5nIGEgYnVnLCBsZXQmIzM5O3MgdHJhY2UgdGhlIGxvZ2ljIGZsb3cuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgY2xvc2VseSByZWxhdGVkIGZ1bmN0aW9uLCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgLCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgZW50aXJlIHJlbGVhc2UgcHJvY2VzcywgcGF5aW5nIHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IGxpc3QgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCB0aHJvdWdob3V0LiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgdHJ1ZSBkZS1hbGxvY2F0aW9uIGxvZ2ljIHdpbGwgYmUgcHJlc2VudCwgb3IgYXQgbGVhc3QgdGhlIGNvdW50ZXJwYXJ0IHRoYXQgaXMgbWlzc2luZyBmcm9tIHRoZSBkZXN0cm95IGZ1bmN0aW9uLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoZSBpc3N1ZSBjYW4gYmUgbG9jYXRlZCB0aGlzIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTY6XHR2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gNDk3Olx0e1xuIDQ5ODpcdFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiA0OTk6XHRcbiA1MDA6XHRcdHZsYW4gPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuLCByZWZjb3VudCk7XG4gNTAxOlx0XG4gNTAyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dmxhbi1cdTAwM2ViYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDUwMzpcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QpO1xuIDUwNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dmxhbi1cdTAwM2ViYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDUwNTpcdFxuIDUwNjpcdFx0a2ZyZWVfcmN1KHZsYW4sIHJjdSk7XG4gNTA3Olx0fVxuIDUwODpcdFxuIDUwOTpcdC8qKlxuIDUxMDpcdCAqIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSAtIGdldCB0aGUgdmxhbiBvYmplY3QgZm9yIGEgc3BlY2lmaWMgdmlkXG4gNTExOlx0ICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gNTEyOlx0ICogQHZpZDogdGhlIGlkZW50aWZpZXIgb2YgdGhlIHZsYW4gb2JqZWN0IHRvIHJldHJpZXZlXG4gNTEzOlx0ICpcbiA1MTQ6XHQgKiBSZXR1cm46IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIHZsYW4gbWF0Y2hpbmcgdGhlIHZpZCBwYXNzZWQgYXMgYXJndW1lbnQgb3JcbiA1MTU6XHQgKiBOVUxMIG90aGVyd2lzZS4gVGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJldHVybmVkIG9iamVjdCBpcyBpbmNyZW1lbnRlZCBieSAxLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBiYXRhZHZfbWVzaGlmX3ZsYW5gIFJlZmVyZW5jZSBDb3VudCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgdGhlIGtleSDigJMgaXQmIzM5O3Mgd2hhdCByZW1vdmVzIHRoZSBWTEFOIG9iamVjdCBmcm9tIHRoZSBsaXN0LiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGUgbGlzdCAqZGlkbiYjMzk7dCogaG9sZCBhIHJlZmVyZW5jZS4gQnV0IHdhaXQsIGlmIHRoYXQgd2VyZSB0cnVlLCB0aGVuIGhvdyBpcyB0aGUgcmVmY291bnQgZXZlciBkZWNyZW1lbnRlZD8gTGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2g6IGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCBpbml0aWFsaXplcyB0aGUgcmVmY291bnQgdG8gMSB3aXRoIGBrcmVmX2luaXRgLiBUaGVuLCBga3JlZl9nZXRgIGluY3JlbWVudHMgaXQgdG8gMi4gVGhlIG9iamVjdCBpcyBhZGRlZCB0byB0aGUgbGlzdCBhbmQgdGhlbiAqaW1tZWRpYXRlbHkqIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGlzIGNhbGxlZCwgZHJvcHBpbmcgdGhlIGNvdW50IGJhY2sgdG8gMS4gU28sIHRoZSBsaXN0ICpkb2VzKiBpbmRlZWQgaG9sZCBhIHJlZmVyZW5jZSwgYW5kIHRoYXQgcmVmZXJlbmNlIGlzIHRoZSBvbmUgdGhhdCBicmluZ3MgdGhlIGNvdW50IHRvIDEuCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHdoZW4gYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBpcyBjYWxsZWQsIHRoZSByZWZjb3VudCAqbXVzdCogaGF2ZSBoaXQgMC4gVGhhdCYjMzk7cyBob3cgd2Uga25vdyBpdCYjMzk7cyB0aW1lIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBIb3dldmVyLCBpZiB0aGUgbGlzdCBpcyBob2xkaW5nIGEgcmVmZXJlbmNlLCBob3cgY2FuIGl0IGV2ZXIgaGl0IDA/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZmlndXJlIG91dC4KCkFscmlnaHQsIHdobyYjMzk7cyByZXNwb25zaWJsZSBmb3IgZGVjcmVtZW50aW5nIHRoZSByZWZjb3VudD8gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFNvIHRoYXQgZHJvcHMgYSByZWZlcmVuY2UuIEJ1dCB0aGVuIEkgc2F3IHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgd2hpY2ggZ2l2ZXMgdGhlIHJlZmNvdW50IGJhY2sgdG8gMiwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWZjb3VudCB0byAxLCBhbmQgdGhlIGNvZGUgcmVtb3ZlZCB0aGUgbGFzdCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIEJ1dCBpZiB0aGUgZnVuY3Rpb24gZG9lc24mIzM5O3QgZHJvcCB0aGUgbGFzdCByZWZlcmVuY2UgY291bnQsIGhvdyBjYW4gYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBnZXQgY2FsbGVkPyBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBsZWFrIQoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdCBub3csIHRoZSBwYXRjaCBJIGhhdmUgc2hvd3MgdGhlIHJlbW92YWwgb2YgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIEJ1dCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGFscmVhZHkgZHJvcHMgYSByZWZlcmVuY2UsIGFuZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBvbmUgZnJvbSBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHRoZW4gdGhhdCBmaW5hbCBgcHV0YCBjYWxsIGlzIGNyaXRpY2FsLiBUaGUgcmVtb3ZhbCAqbGVha3MqIGEgcmVmZXJlbmNlLiBUaGF0IG1lYW5zIHRoZSByZWZjb3VudCB3aWxsIG5ldmVyIHJlYWNoIHplcm8gYW5kIHRoZSBWTEFOIG9iamVjdCB3b24mIzM5O3QgYmUgZnJlZWQuIFRoZSBwYXRjaCBoYXMgaW50cm9kdWNlZCBhIG1lbW9yeSBsZWFrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4ODpcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcbiA1ODk6XHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiA1OTA6XHQgKiBAdmxhbjogdGhlIG9iamVjdCB0byByZW1vdmVcbiA1OTE6XHQgKi9cbiA1OTI6XHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIDU5MzpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXG4gNTk0Olx0e1xuIDU5NTpcdFx0LyogZXhwbGljaXRseSByZW1vdmUgdGhlIGFzc29jaWF0ZWQgVFQgbG9jYWwgZW50cnkgYmVjYXVzZSBpdCBpcyBtYXJrZWRcbiA1OTY6XHRcdCAqIHdpdGggdGhlIE5PUFVSR0UgZmxhZ1xuIDU5NzpcdFx0ICovXG4gNTk4Olx0XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLFxuIDU5OTpcdFx0XHRcdCAgICAgICB2bGFuLVx1MDAzZXZpZCwgXCYjMzQ7dmxhbiBpbnRlcmZhY2UgZGVzdHJveWVkXCYjMzQ7LCBmYWxzZSk7XG4gNjAwOlx0XG4gNjAxOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuIDYwMjpcdH1cbiA2MDM6XHRcbiA2MDQ6XHQvKipcbiA2MDU6XHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDYwNjpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjA3Olx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIERvdWJsZSBGcmVlIGluIFZMQU4gSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nIHNlZW1zIG9mZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBWTEFOIGRlc3RydWN0aW9uIGluIHRoZSBiYXRhZHYgbWVzaCBpbnRlcmZhY2UgY29kZS4gSSBzZWUgdGhhdCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gVGhhdCYjMzk7cyBub3JtYWwuIFRoZW4sIEkgbm90aWNlZCB0aGlzIHNlcXVlbmNlIGluIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2A6CgpgYGBjCgkvKiBkZXN0cm95IHRoZSAmIzM0O3VudGFnZ2VkJiMzNDsgVkxBTiAqLwoJdmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7CglpZiAodmxhbikgewoJCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKCQliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwoJfQpgYGAKClRoZSB0aGluZyB0aGF0IGJ1Z3MgbWUgaXMgdGhhdCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgaXMgZXhwbGljaXRseSBjYWxsZWQgKmFmdGVyKiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLCB3aGljaCwgYXMgbWVudGlvbmVkIHByZXZpb3VzbHksIGFsc28gY2FsbHMgaXQuIFRoaXMgZmVlbHMgcmVkdW5kYW50IGF0IGJlc3QsIGJ1dCBjb3VsZCBiZSBwcm9ibGVtYXRpYywgZXNwZWNpYWxseSB3aXRoIHRoZSBhZGRlZCBjb21wbGV4aXR5IG9mIGEgVkxBTiBpbXBsZW1lbnRhdGlvbi4gV2h5IGlzIGl0IGJlaW5nIGNhbGxlZCB0d2ljZT8KCkl0IG1ha2VzIG1lIHdvbmRlciBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHdhcyB0aGUgY29kZSB0aGF0IGNoYW5nZWQsIG9yIGlmIGEgY2hhbmdlIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyB0aGUgcmVhbCBzb3VyY2Ugb2YgYSBwb3RlbnRpYWwgZG91YmxlIGZyZWUuIEl0IGxvb2tzIGxpa2UgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRpZCBub3QgY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgd2hlbiBpdCBzaG91bGQgaGF2ZS4KClNvLCBJJiMzOTttIGdvaW5nIHRvIHJldmlzaXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFuZCBtYWtlIHN1cmUgaXQgaGFuZGxlcyB0aGluZ3MgY29ycmVjdGx5LCBjb25zaWRlcmluZyB0aGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBzZXF1ZW5jZS4gVGhpcyBmZWVscyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkZWJ1Z2dpbmcgdGhpcyBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcwOlx0c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcbiA2NzE6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuIDY3MjpcdHtcbiA2NzM6XHRcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDY3NDpcdFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiA2NzU6XHRcbiA2NzY6XHRcdC8qIG9ubHkgODAyLjFRIHZsYW5zIGFyZSBzdXBwb3J0ZWQuIGJhdG1hbi1hZHYgZG9lcyBub3Qga25vdyBob3cgdG9cbiA2Nzc6XHRcdCAqIGhhbmRsZSBvdGhlciB0eXBlc1xuIDY3ODpcdFx0ICovXG4gNjc5Olx0XHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuIDY4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2ODE6XHRcbiA2ODI6XHRcdC8qIFwmIzM0O3ByaW9yaXR5IHRhZ1wmIzM0OyBmcmFtZXMgYXJlIGhhbmRsZWQgbGlrZSBcJiMzNDt1bnRhZ2dlZFwmIzM0OyBmcmFtZXNcbiA2ODM6XHRcdCAqIGFuZCBubyBtZXNoaWZfdmxhbiBuZWVkcyB0byBiZSBkZXN0cm95ZWRcbiA2ODQ6XHRcdCAqL1xuIDY4NTpcdFx0aWYgKHZpZCA9PSAwKVxuIDY4NjpcdFx0XHRyZXR1cm4gMDtcbiA2ODc6XHRcbiA2ODg6XHRcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcbiA2ODk6XHRcdGlmICghdmxhbilcbiA2OTA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gNjkxOlx0XG4gNjkyOlx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG4gNjkzOlx0XG4gNjk0Olx0XHRyZXR1cm4gMDtcbiA2OTU6XHR9XG4gNjk2Olx0XG4gNjk3Olx0LyogYmF0bWFuLWFkdiBuZXR3b3JrIGRldmljZXMgaGF2ZSBkZXZpY2VzIG5lc3RpbmcgYmVsb3cgaXQgYW5kIGFyZSBhIHNwZWNpYWxcbiA2OTg6XHQgKiBcJiMzNDtzdXBlciBjbGFzc1wmIzM0OyBvZiBub3JtYWwgbmV0d29yayBkZXZpY2VzOyBzcGxpdCB0aGVpciBsb2NrcyBvZmYgaW50byBhXG4gNjk5Olx0ICogc2VwYXJhdGUgY2xhc3Mgc2luY2UgdGhleSBhbHdheXMgbmVzdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NzQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkxBTiBSZWZlcmVuY2UgQ291bnQgQ29uZnVzaW9uKioKCk9rYXksIHNvIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGNhbGxlZCB3aGVuIGEgVkxBTiBpcyBraWxsZWQsIG1ha2VzIHNlbnNlLiBOb3csIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCByZW1vdmVzIHRoZSByZWZlcmVuY2UgdXNpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLCBhbmQgdGhlIFZMQU4gaGFzIG9ubHkgb25lIHJlZmVyZW5jZSBmcm9tIHRoZSBsaXN0LCB3ZSYjMzk7dmUgZ290IGEgcHJvYmxlbS4gSXQgd291bGQgTkVWRVIgYmUgZnJlZWQhIFRoZSBwYXRjaCByZW1vdmVzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgd2h5PwoKQWxyaWdodCwgbGV0JiMzOTtzIGNoZWNrIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgdG8gc2VlIGlmIHRoYXQgaGFuZGxlcyB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGxpc3QuIEFoLCB5ZXMsIGl0IGRvZXMgdXNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gQnV0IGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBsaXN0LCBhbmQgc2luY2UgYSByZWZlcmVuY2Ugd2FzIG9idGFpbmVkIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCB0aGUgcmVmY291bnQgc2hvdWxkIGJlIGJhY2sgdG8gMS4gVGhhdCYjMzk7cyBhc3N1bWluZyB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgcmVmZXJlbmNlIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLiBUaGVuIHRoZSByZWZjb3VudCBnb2VzIHRvIDAsIGFuZCB3ZSBnZXQgdGhlIGZyZWUgdGhhdCB3ZSB3YW50LgoKQnV0IHdhaXQgYSBtaW51dGXigKZ3aGF0IGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXMgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2UgKmJlc2lkZXMqIHRoaXMgZmxvdz8gVGhlbiB3ZSBjb3VsZCBzdGlsbCBoYXZlIGEgZGFuZ2xpbmcgcmVmZXJlbmNlISBPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIHRvIHNlZSB3aGVyZSBlbHNlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXMgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODI6XHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcbjEwODM6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuMTA4NDpcdHtcbjEwODU6XHRcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcbjEwODY6XHRcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbjEwODc6XHRcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4xMDg4Olx0XG4xMDg5Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2bWVzaF9pZmFjZS1cdTAwM2VhZGpfbGlzdC5sb3dlcikpIHtcbjEwOTA6XHRcdFx0aGFyZF9pZmFjZSA9IG5ldGRldl9hZGphY2VudF9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLVx1MDAzZWFkal9saXN0Lmxvd2VyLm5leHQpO1xuMTA5MTpcdFx0XHRiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpO1xuMTA5MjpcdFx0fVxuMTA5MzpcdFxuMTA5NDpcdFx0LyogZGVzdHJveSB0aGUgXCYjMzQ7dW50YWdnZWRcJiMzNDsgVkxBTiAqL1xuMTA5NTpcdFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7XG4xMDk2Olx0XHRpZiAodmxhbikge1xuMTA5NzpcdFx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG4xMDk4Olx0XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4xMDk5Olx0XHR9XG4xMTAwOlx0XG4xMTAxOlx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShtZXNoX2lmYWNlLCBoZWFkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkxBTiBPYmplY3QgTGVhayBpbiBiYXRhZHYqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgaGVhZC4uLiBJIHNlZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGF0IG1ha2VzIHNlbnNlLiBCdXQgd2h5IGRpZCB0aGUgcGF0Y2ggcmVtb3ZlIHRoYXQgY2FsbCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLgoKTGV0IG1lIHNlZSBpZiBJIGNhbiB0cmFjZSB0aGUgY2FsbCBjaGFpbi4gSSYjMzk7bGwgY2hlY2sgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgY2FsbGVkIGJ5IGB2bGFuX3ZpZF9kZWxgLiBZZXAsIGl0IGxvb2tzIGxpa2UgYHZsYW5fdmlkX2RlbGAgY2FsbHMgYG5kb192bGFuX3J4X2tpbGxfdmlkYCwgYW5kLCBpbiB0dXJuLCB0aGF0IGNhbGxzIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4gT2theSwgc28gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIHRyaWdnZXJlZCB3aGVuIGEgVkxBTiBpcyBiZWluZyBkZWxldGVkLgoKTm93LCBpZiB0aGV5ICpyZW1vdmVkKiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIHRoYXQgbWVhbnMgdGhlIFZMQU4gb2JqZWN0IG1pZ2h0IG5vdCBiZSBmcmVlZC4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWchIExldCYjMzk7cyBlbGltaW5hdGUgb3RoZXIgcG9zc2liaWxpdGllcy4gRGlkIHRoZXkgY2hhbmdlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgdG8gKm5vdCogZHJvcCB0aGUgcmVmZXJlbmNlPyBOb3BlLCBqdXN0IGNoZWNrZWQsIGFuZCBpdCBkZWZpbml0ZWx5IHN0aWxsIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4KCk1heWJlIHRoZSBsb2dpYyBpcyB0aGUgb3Bwb3NpdGUuIFBlcmhhcHMsIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgYSByZWZlcmVuY2UsIGFuZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKnVzZWQqIHRvIGRyb3AgYW5vdGhlciwgYnV0IG5vIGxvbmdlciBkb2VzPyBIb2xkIG9uLCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2V0cyBhIHJlZmVyZW5jZSEgU28sIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGEgcmVmZXJlbmNlLCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICh3aGljaCBkcm9wcyAqb25lKiByZWZlcmVuY2UpLCBhbmQgdGhlbiByZXR1cm5zLgoKVGhpcyBtZWFucyB0aGUgcmVmY291bnQgaXMgMSBhZnRlciBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZmluaXNoZXMuIFRoZSBvYmplY3QgaXMgbGVha2VkISBPciwgd2FpdC4uLiBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBMZXQgbWUgcmUtZXhhbWluZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWdhaW4uCgpgYGBjCgl2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkIHwgQkFUQURWX1ZMQU5fSEFTX1RBRyk7CglpZiAoIXZsYW4pCgkJcmV0dXJuIC1FTk9FTlQ7CgoJYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pOwoKCXJldHVybiAwOwpgYGAKCk9rYXksIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgb25lIHJlZmVyZW5jZSwgYW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnZXRzIG9uZSwgdGhlbiB0aGUgbmV0IGNoYW5nZSBpcyB6ZXJvLiBUaGUgKnByb2JsZW0qIGlzIHRoYXQgdGhlIFZMQU4gd2FzIGFscmVhZHkgaW4gdGhlIGxpc3QsIHNvIGl0IGhhZCBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLiBBZnRlciBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIHRoZSByZWZlcmVuY2UgY291bnQgaXMgU1RJTEwgMS4gVGhhdCBpcyBhIGxlYWshCgpBaGEhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgKm5vdCogY2FsbGVkLiBTbywgdGhlIFZMQU4gaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkb2VzbiYjMzk7dCByZW1vdmUgaXQ7IGl0IGp1c3QgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgLiBUaGVyZWZvcmUsIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkb2VzbiYjMzk7dCBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCwgdGhlIHJlZmNvdW50IHJlbWFpbnMgYXQgMSwgYW5kIHRoZSBWTEFOIGlzICpub3QqIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCEKCk5vdywgd2h5IHdvdWxkIHRoZXkgd2FudCB0byBrZWVwIGl0IGluIHRoZSBsaXN0PyBUaGF0IGRvZXNuJiMzOTt0IG1ha2UgYW55IHNlbnNlLiBMZXQgbWUgY2hlY2sgaG93IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjA0Olx0LyoqXG4gNjA1Olx0ICogYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKCkgLSBuZG9fYWRkX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cbiA2MDY6XHQgKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxuIDYwNzpcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcbiA2MDg6XHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBuZXcgdmxhblxuIDYwOTpcdCAqXG4gNjEwOlx0ICogU2V0IHVwIGFsbCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBmb3IgaGFuZGxpbmcgdGhlIG5ldyB2bGFuIG9uIHRvcCBvZiB0aGVcbiA2MTE6XHQgKiBtZXNoIGludGVyZmFjZVxuIDYxMjpcdCAqXG4gNjEzOlx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS5cbiA2MTQ6XHQgKi9cbiA2MTU6XHRzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG4gNjE2Olx0XHRcdFx0XHQgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuIDYxNzpcdHtcbiA2MTg6XHRcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDYxOTpcdFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiA2MjA6XHRcbiA2MjE6XHRcdC8qIG9ubHkgODAyLjFRIHZsYW5zIGFyZSBzdXBwb3J0ZWQuXG4gNjIyOlx0XHQgKiBiYXRtYW4tYWR2IGRvZXMgbm90IGtub3cgaG93IHRvIGhhbmRsZSBvdGhlciB0eXBlc1xuIDYyMzpcdFx0ICovXG4gNjI0Olx0XHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuIDYyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2MjY6XHRcbiA2Mjc6XHRcdC8qIFZJRCAwIGlzIG9ubHkgdXNlZCB0byBpbmRpY2F0ZSBcJiMzNDtwcmlvcml0eSB0YWdcJiMzNDsgZnJhbWVzIHdoaWNoIG9ubHlcbiA2Mjg6XHRcdCAqIGNvbnRhaW4gcHJpb3JpdHkgaW5mb3JtYXRpb24gYW5kIG5vIFZJRC4gTm8gbWFuYWdlbWVudCBzdHJ1Y3R1cmVzXG4gNjI5Olx0XHQgKiBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhpcyBWSUQgYW5kIGl0IHNob3VsZCBiZSBoYW5kbGVkIGxpa2UgYW5cbiA2MzA6XHRcdCAqIHVudGFnZ2VkIGZyYW1lLlxuIDYzMTpcdFx0ICovXG4gNjMyOlx0XHRpZiAodmlkID09IDApXG4gNjMzOlx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc0NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIHJlc3Qgb2YgdGhpcyBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyLiBNeSBleHBlcnQga25vd2xlZGdlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBjcml0aWNhbCBpbiBicmlkZ2luZyBWTEFOcyB3aXRoIHRoZSBCQVRNQU4tYWR2IHByb3RvY29sLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXR3b3JrIHNlZ21lbnRhdGlvbiBhbmQgc2VjdXJpdHkgaW1tZWRpYXRlbHkuIFdoYXQmIzM5O3MgaXQgZG9pbmcgd2l0aCB0aGUgVkxBTiBJRD8gSG93IGlzIHRoaXMgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBtZXNoIGluZnJhc3RydWN0dXJlPyBUaW1lIHRvIHRyYWNlIGl0cyBleGVjdXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHN0ZXBzIGludm9sdmVkLiBJJiMzOTtsbCBmb2N1cyBvbiBkYXRhIHN0cnVjdHVyZXMsIGFueSBsb2NrcyBiZWluZyBoZWxkLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBsaWtlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM0Olx0XG4gNjM1Olx0XHR2aWQgfD0gQkFUQURWX1ZMQU5fSEFTX1RBRztcbiA2MzY6XHRcbiA2Mzc6XHRcdC8qIGlmIGEgbmV3IHZsYW4gaXMgZ2V0dGluZyBjcmVhdGVkIGFuZCBpdCBhbHJlYWR5IGV4aXN0cywgaXQgbWVhbnMgdGhhdFxuIDYzODpcdFx0ICogaXQgd2FzIG5vdCBkZWxldGVkIHlldC4gYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGVcbiA2Mzk6XHRcdCAqIHJlZmNvdW50IGluIG9yZGVyIHRvIHJldml2ZSB0aGUgb2JqZWN0LlxuIDY0MDpcdFx0ICpcbiA2NDE6XHRcdCAqIGlmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gY3JlYXRlIGl0LlxuIDY0MjpcdFx0ICovXG4gNjQzOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA2NDQ6XHRcdGlmICghdmxhbilcbiA2NDU6XHRcdFx0cmV0dXJuIGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oYmF0X3ByaXYsIHZpZCk7XG4gNjQ2Olx0XG4gNjQ3Olx0XHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcbiA2NDg6XHRcdCAqIGZsYWcuIFRoaXMgbXVzdCBiZSBhZGRlZCBhZ2FpbiwgZXZlbiBpZiB0aGUgdmxhbiBvYmplY3QgYWxyZWFkeVxuIDY0OTpcdFx0ICogZXhpc3RzLCBiZWNhdXNlIHRoZSBlbnRyeSB3YXMgZGVsZXRlZCBieSBraWxsX3ZpZCgpXG4gNjUwOlx0XHQgKi9cbiA2NTE6XHRcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbiA2NTI6XHRcdFx0XHQgICAgYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZS1cdTAwM2VkZXZfYWRkciwgdmlkLFxuIDY1MzpcdFx0XHRcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XG4gNjU0Olx0XG4gNjU1Olx0XHRyZXR1cm4gMDtcbiA2NTY6XHR9XG4gNjU3Olx0XG4gNjU4Olx0LyoqXG4gNjU5Olx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDY2MDpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjYxOlx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuIDY2MjpcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxuIDY2MzpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDQ5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWTEFOIEhhbmRsaW5nIGluIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGZ1bmN0aW9uLiBUaGUgY29tbWVudCYjMzk7cyBxdWl0ZSBjbGVhcjogaWYgd2UmIzM5O3JlIGFkZGluZyBhIFZMQU4gSUQgKGB2aWRgKSB0aGF0ICphbHJlYWR5KiBleGlzdHMsIGl0IG1lYW5zIHRoZSBvYmplY3Qgd2FzbiYjMzk7dCBmdWxseSBjbGVhbmVkIHVwIHlldCwgYW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCByZXZpdmVzIGl0LiBJZiBpdCBkb2VzbiYjMzk7dCBleGlzdCwgd2UgY3JlYXRlIGl0LiBTZWVtcyBzdHJhaWdodGZvcndhcmQuCgpCdXQgaGFuZyBvbuKApiBpZiBpdCAmIzM0O3Jldml2ZXMmIzM0OyB0aGUgb2JqZWN0LCBpdCYjMzk7cyAqZXhwZWN0aW5nKiBpdCB0byBzdGlsbCBiZSBoYW5naW5nIGFyb3VuZCBzb21ldGltZXMuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyBJIHNlZSB0aGF0IGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gSXQgZmV0Y2hlcyBhIHJlZmVyZW5jZSBpZiB0aGUgdmxhbiBleGlzdHMsIG9yIGNyZWF0ZXMgdGhlIHZsYW4uIEFuZCB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHJlZmVyZW5jZSBjb3VudGluZyBoZXJlLgoKSSBzZWUgaXQgZ2V0cyBhIHJlZmVyZW5jZSB3aGVuIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgcmVnYXJkbGVzcyBvZiBjcmVhdGlvbi4gQW5kIHRoZW7igKYgaXQgcmV0dXJucyAwLiBJdCAqZG9lc24mIzM5O3QqIHJlbGVhc2UgdGhhdCByZWZlcmVuY2UgYW55d2hlcmUuIEhvbGQgb24gYSBzZWNvbmTigKYgRG9lcyB0aGF0IG1lYW4gdGhpcyBmdW5jdGlvbiBpcyBsZWFraW5nIGEgcmVmZXJlbmNlPyBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcmVkIGZsYWcuIFdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIGluIHRoZXNlIHNjZW5hcmlvcy4KCk9rYXksIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSBmb3IgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIHRvIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIHRoaW5ncyBjb3JyZWN0bHkgdGhlcmUuIFdlICptdXN0KiBlbnN1cmUgdGhhdCBvYmplY3QgbGlmZWN5Y2xlcyBhcmUgbWFuYWdlZCBpbXBlY2NhYmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdGludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcbiA1NDY6XHR7XG4gNTQ3Olx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuIDU0ODpcdFxuIDU0OTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTUwOlx0XG4gNTUxOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA1NTI6XHRcdGlmICh2bGFuKSB7XG4gNTUzOlx0XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNTU0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTU1Olx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDU1NjpcdFx0fVxuIDU1NzpcdFxuIDU1ODpcdFx0dmxhbiA9IGt6YWxsb2Nfb2JqKCp2bGFuLCBHRlBfQVRPTUlDKTtcbiA1NTk6XHRcdGlmICghdmxhbikge1xuIDU2MDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDU2MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA1NjI6XHRcdH1cbiA1NjM6XHRcbiA1NjQ6XHRcdHZsYW4tXHUwMDNlYmF0X3ByaXYgPSBiYXRfcHJpdjtcbiA1NjU6XHRcdHZsYW4tXHUwMDNldmlkID0gdmlkO1xuIDU2NjpcdFx0a3JlZl9pbml0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY291bnQpO1xuIDU2NzpcdFxuIDU2ODpcdFx0YXRvbWljX3NldChcdTAwMjZ2bGFuLVx1MDAzZWFwX2lzb2xhdGlvbiwgMCk7XG4gNTY5Olx0XG4gNTcwOlx0XHRrcmVmX2dldChcdTAwMjZ2bGFuLVx1MDAzZXJlZmNvdW50KTtcbiA1NzE6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QsIFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3QpO1xuIDU3MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcbiA1NzM6XHRcbiA1NzQ6XHRcdC8qIGFkZCBhIG5ldyBUVCBsb2NhbCBlbnRyeS4gVGhpcyBvbmUgd2lsbCBiZSBtYXJrZWQgd2l0aCB0aGUgTk9QVVJHRVxuIDU3NTpcdFx0ICogZmxhZ1xuIDU3NjpcdFx0ICovXG4gNTc3Olx0XHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UsXG4gNTc4Olx0XHRcdFx0ICAgIGJhdF9wcml2LVx1MDAzZW1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIsIHZpZCxcbiA1Nzk6XHRcdFx0XHQgICAgQkFUQURWX05VTExfSUZJTkRFWCwgQkFUQURWX05PX01BUkspO1xuIDU4MDpcdFxuIDU4MTpcdFx0LyogZG9uJiMzOTt0IHJldHVybiByZWZlcmVuY2UgdG8gbmV3IG1lc2hpZl92bGFuICovXG4gNTgyOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuIDU4MzpcdFxuIDU4NDpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWTEFOIFJlZmVyZW5jZSBDb3VudGluZyBpbiBiYXRhZHYqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgcmVsYXRlZCB0byBWTEFOcyB3aXRoaW4gdGhlIGBiYXRhZHZgIG1vZHVsZS4KCkZpcnN0LCBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgY3JlYXRlcyBhIFZMQU4gb2JqZWN0LCBpbml0aWFsaXplcyBpdHMgcmVmZXJlbmNlIGNvdW50IHRvIDEsIGluY3JlbWVudHMgaXQgdG8gMiBiZWZvcmUgYWRkaW5nIGl0IHRvIGEgbGlzdCwgdGhlbiBkZWNyZW1lbnRzIGl0IGFnYWluIHRvIDEgYmVmb3JlIHJldHVybmluZy4gU28gaXQgKmludGVudGlvbmFsbHkqIGxlYXZlcyB0aGUgbGlzdCBhcyB0aGUgc29sZSBob2xkZXIgb2YgYSByZWZlcmVuY2UgKHJlZmNvdW50IDEpLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYC4gSXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHRvIHJldHJpZXZlIGEgVkxBTi4gSWYgdGhlIFZMQU4gZG9lc24mIzM5O3QgZXhpc3QsIGl0IGNyZWF0ZXMgaXQgdXNpbmcgdGhlIHByb2Nlc3MgZGVzY3JpYmVkIGFib3ZlOiBpbml0aWFsaXplcyB0byAxLCBpbmNyZW1lbnRzIHRvIDIsIGFkZHMgaXQgdG8gdGhlIGxpc3QsIHRoZW4gZHJvcHMgdG8gMSBiZWZvcmUgcmV0dXJuaW5nLiBCdXQsIGNyaXRpY2FsbHksIGlmIHRoZSBWTEFOICpkb2VzKiBleGlzdCwgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHJldHVybnMgYSByZWZlcmVuY2UuIFRoZW4gaXQgYWRkcyBhIG5ldyBUVCBsb2NhbCBlbnRyeSBhbmQgdGhlbiByZXR1cm5zICp3aXRob3V0KiBkcm9wcGluZyB0aGF0IHJlZmVyZW5jZSEgVGhpcyBtZWFucyB0aGUgcmVmY291bnQgYmVjb21lcyAyLgoKTm93LCBpZiB0aGUgcmVmY291bnQgaXMgaW5kZWVkIDIgd2hlbiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCByZXR1cm5zLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKm11c3QqIGhhbmRsZSB0aGlzLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB3aGljaCBpbmNyZW1lbnRzIGl0ICh0byAzKSwgZGVzdHJveXMgdGhlIFZMQU4sIHdoaWNoIGRyb3BzIG9uZSAoYmFjayB0byAyKSBhbmQgKnRoZW4qIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCB3aGljaCBkcm9wcyBpdCB0byAxLiBXaGljaCBsZWF2ZXMgdGhlIG9iamVjdCBzdGlsbCBpbiB0aGUgbGlzdCwgYnV0IG5vdCByZWZlcmVuY2VkIGJ5IGFueXRoaW5nIGVsc2UhIFRoYXQgc2VlbXMuLi4gcHJvYmxlbWF0aWMuCgpCdXQgd2FpdC4gSWYgaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLCB0aGVuIGl0IGlzIGxlZnQgYXQgMS4gU28sIGlmIHdlIHJlLXJlYWQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLCB3ZSBzZWUgdGhhdCBpcyBjb3JyZWN0ISBDcmVhdGVzIHJlZmNvdW50IHRvIDEsIGluY3JlYXNlcyB0byAyIGZvciB0aGUgbGlzdCwgdGhlbiBkcm9wcyB0byAxIGJlZm9yZSByZXR1cm5pbmcuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLCBhbmQgcmUtZXhhbWluZSB0aGUgY3J1Y2lhbCBjYXNlIHdoZXJlIHRoZSBWTEFOICphbHJlYWR5IGV4aXN0cyouIEluIHRoaXMgY2FzZSwgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGdpdmVzIHVzIGEgcmVmY291bnQgb2YgMi4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgaXMgdGhlbiByZXR1cm5pbmcgd2l0aG91dCBkcm9wcGluZyB0aGF0IHJlZmVyZW5jZS4gVGhhdCYjMzk7cyB0aGUga2V5IQoKVGhlcmVmb3JlLCB0aGUgYnVnIGlzIHJpZ2h0IGhlcmU6ICoqYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKnNob3VsZCogZHJvcCB0aGUgcmVmZXJlbmNlIGl0IGdvdCBmcm9tIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB3aGVuIHRoZSBWTEFOIGFscmVhZHkgZXhpc3RzKiouIEl0JiMzOTtzIGxlYXZpbmcgYW4gZXh0cmEgcmVmZXJlbmNlIGhhbmdpbmcgYXJvdW5kLCB3aGljaCBzZWVtcyB0byBjcmVhdGUgaW5jb25zaXN0ZW50IHJlZmVyZW5jZSBjb3VudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01OTI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwNC0vKipcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjA1OiAqIGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCgpIC0gbmRvX2FkZF92aWQgQVBJIGltcGxlbWVudGF0aW9uXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwNi0gKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjE0LSAqL1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2MTU6c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MTYtXHRcdFx0XHQgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF0YWR2X25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04NzYtXHQubmRvX2dldF9zdGF0cyA9IGJhdGFkdl9pbnRlcmZhY2Vfc3RhdHMsXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjg3NzpcdC5uZG9fdmxhbl9yeF9hZGRfdmlkID0gYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkLFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04NzgtXHQubmRvX3ZsYW5fcnhfa2lsbF92aWQgPSBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzgzNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipSZXZpZXdpbmcgdGhlIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byByZXZpc2l0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIGEgcXVpY2sgcmVmcmVzaGVyIG9uIGl0cyBjb3JlIGxvZ2ljIGlzIGluIG9yZGVyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZMQU4gSUQgYW5kIHRoZSBvdmVyYWxsIEJBVE1BTi1BZHYgaW50ZXJmYWNlIG1hbmFnZW1lbnQuIFRoZXJlIGNvdWxkIGJlIHNvbWV0aGluZyBJIG1pc3NlZCBpbiB0aGUgbGFzdCBkZWVwIGRpdmUgdGhhdCB3YXJyYW50cyBhbm90aGVyIGxvb2ssIG9yIHBlcmhhcHMgYSBuZXcgaW5zaWdodCB3aWxsIHByZXNlbnQgaXRzZWxmIGJ5IGdpdmluZyBpdCBmcmVzaCBhdHRlbnRpb24uIEl0JiMzOTtzIG9mdGVuIHRoZSBzbWFsbCBkZXRhaWxzIHRoYXQgdHJpcCB1cyB1cC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZyZXNoIHBlcnNwZWN0aXZlIHJldmVhbHMgYW55dGhpbmcgbmV3LCBvciBhdCBsZWFzdCByZWluZm9yY2VzIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0XHR2aWQgfD0gQkFUQURWX1ZMQU5fSEFTX1RBRztcbiA2MzY6XHRcbiA2Mzc6XHRcdC8qIGlmIGEgbmV3IHZsYW4gaXMgZ2V0dGluZyBjcmVhdGVkIGFuZCBpdCBhbHJlYWR5IGV4aXN0cywgaXQgbWVhbnMgdGhhdFxuIDYzODpcdFx0ICogaXQgd2FzIG5vdCBkZWxldGVkIHlldC4gYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGVcbiA2Mzk6XHRcdCAqIHJlZmNvdW50IGluIG9yZGVyIHRvIHJldml2ZSB0aGUgb2JqZWN0LlxuIDY0MDpcdFx0ICpcbiA2NDE6XHRcdCAqIGlmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gY3JlYXRlIGl0LlxuIDY0MjpcdFx0ICovXG4gNjQzOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA2NDQ6XHRcdGlmICghdmxhbilcbiA2NDU6XHRcdFx0cmV0dXJuIGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oYmF0X3ByaXYsIHZpZCk7XG4gNjQ2Olx0XG4gNjQ3Olx0XHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcbiA2NDg6XHRcdCAqIGZsYWcuIFRoaXMgbXVzdCBiZSBhZGRlZCBhZ2FpbiwgZXZlbiBpZiB0aGUgdmxhbiBvYmplY3QgYWxyZWFkeVxuIDY0OTpcdFx0ICogZXhpc3RzLCBiZWNhdXNlIHRoZSBlbnRyeSB3YXMgZGVsZXRlZCBieSBraWxsX3ZpZCgpXG4gNjUwOlx0XHQgKi9cbiA2NTE6XHRcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbiA2NTI6XHRcdFx0XHQgICAgYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZS1cdTAwM2VkZXZfYWRkciwgdmlkLFxuIDY1MzpcdFx0XHRcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XG4gNjU0Olx0XG4gNjU1Olx0XHRyZXR1cm4gMDtcbiA2NTY6XHR9XG4gNjU3Olx0XG4gNjU4Olx0LyoqXG4gNjU5Olx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDY2MDpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjYxOlx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuIDY2MjpcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxuIDY2MzpcdCAqXG4gNjY0Olx0ICogRGVzdHJveSBhbGwgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgdXNlZCB0byBoYW5kbGUgdGhlIHZsYW4gaWRlbnRpZmllZCBieSB2aWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gUmVmY291bnRpbmcgaW4gQmF0YWR2KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYmF0YWR2IGNvZGUgYW5kIHRoaXMgY29tbWVudCBqdW1wcyBvdXQ6ICYjMzQ7YmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGUgcmVmY291bnQgaW4gb3JkZXIgdG8gcmV2aXZlIHRoZSBvYmplY3QuJiMzNDsgUmlnaHQsIHNvIGl0ICppbnRlbnRpb25hbGx5KiBpbmNyZW1lbnRzIHRoZSByZWZjb3VudC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKTm93LCBpZiBpdCBmaW5kcyBhbiBleGlzdGluZyBWTEFOLCB0aGUgcmVmY291bnQgZW5kcyB1cCBhdCAyLiBNYWtlcyBzZW5zZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgJiMzNDtyZXZpdmluZyYjMzQ7IHRoZSBWTEFOLiBCdXQgd2hhdCBpZiB0aGUgVkxBTiAqZG9lc24mIzM5O3QqIGV4aXN0PyBUaGUgY29tbWVudCBzYXlzIHRoYXQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIGlzIGNhbGxlZCBpbiB0aGF0IGNhc2UuIFRoYXQmIzM5O3MgdGhlIHJlYWwgcXVlc3Rpb246IGRvZXMgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gICphbHNvKiBsZWF2ZSB0aGUgcmVmY291bnQgYXQgMj8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBob3cgdGhhdCBmdW5jdGlvbiBoYW5kbGVzIHRoZSByZWZjb3VudCBpdHNlbGYuIEl04oCZcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBleHBlY3RlZCBiZWhhdmlvciwgdGhlIGxpZmVjeWNsZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBzdWJ0bGUgaGVyZSwgc28gSSYjMzk7bSBnb2luZyBiYWNrIHRvIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY2Olx0XHRrcmVmX2luaXQoXHUwMDI2dmxhbi1cdTAwM2VyZWZjb3VudCk7XG4gNTY3Olx0XG4gNTY4Olx0XHRhdG9taWNfc2V0KFx1MDAyNnZsYW4tXHUwMDNlYXBfaXNvbGF0aW9uLCAwKTtcbiA1Njk6XHRcbiA1NzA6XHRcdGtyZWZfZ2V0KFx1MDAyNnZsYW4tXHUwMDNlcmVmY291bnQpO1xuIDU3MTpcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnZsYW4tXHUwMDNlbGlzdCwgXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdCk7XG4gNTcyOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xuIDU3MzpcdFxuIDU3NDpcdFx0LyogYWRkIGEgbmV3IFRUIGxvY2FsIGVudHJ5LiBUaGlzIG9uZSB3aWxsIGJlIG1hcmtlZCB3aXRoIHRoZSBOT1BVUkdFXG4gNTc1Olx0XHQgKiBmbGFnXG4gNTc2Olx0XHQgKi9cbiA1Nzc6XHRcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbiA1Nzg6XHRcdFx0XHQgICAgYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZS1cdTAwM2VkZXZfYWRkciwgdmlkLFxuIDU3OTpcdFx0XHRcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XG4gNTgwOlx0XG4gNTgxOlx0XHQvKiBkb24mIzM5O3QgcmV0dXJuIHJlZmVyZW5jZSB0byBuZXcgbWVzaGlmX3ZsYW4gKi9cbiA1ODI6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4gNTgzOlx0XG4gNTg0Olx0XHRyZXR1cm4gMDtcbiA1ODU6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjU5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZjb3VudGluZyBEZWVwIERpdmUgaW50byBWTEFOIEludGVyZmFjZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYmF0YWR2YCBWTEFOIGludGVyZmFjZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aHkgaXMgdGhlIHJlZmNvdW50aW5nIGhlcmUgc28gaW5jb25zaXN0ZW50PyBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgbGVhdmVzIGEgcmVmY291bnQgb2YgMSwgc2VlbWluZ2x5IGZvciB0aGUgbGlzdCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGxlYXZlcyBpdCBhdCAyIGlmIHRoZSBWTEFOIGFscmVhZHkgZXhpc3RzISBUaGlzIGZlZWxzIG9mZi4KCkxldCYjMzk7cyBicmVhayBkb3duIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCB3aGljaCB3aWxsIHJlYWxseSBiZSB3aGVyZSB0aGUgY29tcGxleGl0eSBsaWVzLiAgSWYgYGFkZF92aWRgIGxlYXZlcyB0aGUgcmVmY291bnQgYXQgMiBhbmQgc29tZW9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4sIHRoZW4gYGtpbGxfdmlkYCBtdXN0IGRyb3AgdHdvIHJlZmVyZW5jZXMsIGJ1dCBob3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgdGhlIGxvZ2ljYWwgZGVzdHJ1Y3Rpb24/ICBBbmQgd2hhdCBoYXBwZW5zIHdoZW4gYSBuZXcgVkxBTiBpcyBjcmVhdGVkPwoKTXkgaW5pdGlhbCB3YWxrdGhyb3VnaCBzdWdnZXN0cyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKmRvZXMqIHNlZW0gdG8gaGFuZGxlIHRoaXMgY29ycmVjdGx5LCBhdCBmaXJzdCBibHVzaC4gIEl0IGdldHMgYSByZWZlcmVuY2UgKHJlZmNvdW50IDIgb3IgMyksIGRlc3Ryb3lzIHRoZSBWTEFOLCBkcm9wcGluZyBvbmUgcmVmZXJlbmNlLCBhbmQgKnRoZW4qIHB1dHMgYSByZWZlcmVuY2UgZG93biwgZHJvcHBpbmcgaXQgdG8gemVyby4gSWYgdGhlIFZMQU4gd2FzICpuZXdseSogY3JlYXRlZCwgdGhpcyBsZWFkcyB0byBmcmVlaW5nIHRoZSBvYmplY3QsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LgoKQnV0IHdoYXQgaWYgdGhlIFZMQU4gd2FzICYjMzQ7cmV2aXZlZCYjMzQ7IGFuZCB3YXMgYWxyZWFkeSBpbiB0aGUgbGlzdD8gSXQgZ2V0cyBhIHJlZmVyZW5jZSAocmVmY291bnQgMyksIGRlc3Ryb3lzIGl0IChyZWZjb3VudCAyKSwgcHV0cyBpdCAocmVmY291bnQgMSksIGFuZCB0aGVuLi4uIGl0JiMzOTtzIG5vdCBmcmVlZCEgSXQgcmVtYWlucyBpbiB0aGUgbGlzdCEgQW5kIHRoaXMgaXMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIFRoYXQgbWVhbnMgdGhlcmUgbXVzdCBiZSBzb21lICpvdGhlciogcmVmZXJlbmNlIGhvbGRpbmcgaXQgdXAuCgpBaGEhIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICpzYXlzKiBpdCByZXZpdmVzIHRoZSBvYmplY3QuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBsaXN0IHJlZmVyZW5jZSBpcyB0aGUgKm9ubHkqIHJlZmVyZW5jZSBpdCBsZWZ0LiBUaGlzIG1lYW5zIHNvbWUgb3RoZXIgZW50aXR5IGlzIGhvbGRpbmcgYSByZWZlcmVuY2UuIE1heWJlIGEgVFQgZW50cnkgb3IgbmV0bGluayBkdW1wLCBvciBhIHNvZnRpZi4gIElmIHNvbWVvbmUgZWxzZSBpcyBob2xkaW5nIGEgcmVmZXJlbmNlLCB0aGUgcmVmY291bnQgaXMgMSAobGlzdCkgJiM0MzsgMSAob3RoZXIpID0gMiwgYW5kIHRoZW4gdGhlIHdob2xlIHN5c3RlbSB3b3Jrcy4KCk9rYXksIGxldCYjMzk7cyB0cmFjZSB0aGlzIGZ1cnRoZXIuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgYSByZWZlcmVuY2UsIHdoaWNoIGFwcGVhcnMgdG8gYmUgdGhlIGxpc3QgcmVmZXJlbmNlLCBsZWF2aW5nIHRoZSBWTEFOIGxvZ2ljYWxseSBkZXN0cm95ZWQsIGJ1dCBzdGlsbCBwcmVzZW50IGluIHRoZSBsaXN0LiAgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgc2hvdWxkICpjb3JyZWN0bHkqIGJyaW5nIGl0IGJhY2sgdG8gbGlmZSB3aXRoIGEgZnJlc2ggbmV3IHJlZmVyZW5jZSwgc28gdGhhdCYjMzk7cyBva2F5LiBCdXQgd2hhdCBoYXBwZW5zIHdpdGggYGtpbGxfdmlkYCBhbmQgdGhlIGxpc3Q/ICAKCldhaXQsIGlmIEkmIzM5O20ga2lsbGluZyBhIFZMQU4gdGhhdCAqd2FzKiBpbiB0aGUgbGlzdCwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICpkb2VzKiBkcm9wIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhhdCBtZWFucyB0aGUgVkxBTiBpcyBpbiB0aGUgbGlzdCwgYnV0IGVmZmVjdGl2ZWx5ICYjMzQ7ZGVzdHJveWVkJiMzNDsgdW50aWwgc29tZW9uZSBnZXRzIGl0IGZyb20gdGhlIGxpc3QuIElmIGBraWxsX3ZpZGAgZHJvcHMgdHdvIHJlZmVyZW5jZXMsIGl0IGRyb3BzIHRoZSBsaXN0IHJlZiBhbmQgdGhlIHJlZmVyZW5jZSBoZWxkIGJ5IGBhZGRfdmlkYCEgIAoKYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCAqZG9lcyogZHJvcCB0aGUgbGlzdCByZWZlcmVuY2UuIFRoYXQgbXVjaCBpcyBub3cgY2xlYXIuCgpPa2F5LCB0aGUgcmVmY291bnQgbG9naWMgc2VlbXMgdG8gd29yayBmb3IgYm90aCBhIG5ld2x5IGNyZWF0ZWQgVkxBTiAqYW5kKiBhIHJldml2ZWQgb25lLgoKU28gaXQgYm9pbHMgZG93biB0bzoKCjEuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIC0gQ3JlYXRlcyBvciByZXZpdmVzIGEgVkxBTiwgaW5jcmVhc2luZyByZWZjb3VudC4KMi4gSWYgc29tZWJvZHkgZWxzZSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTiwgaXRzIHJlZmNvdW50IGlzIGF0IGxlYXN0IDIuCjMuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGEgcmVmZXJlbmNlLCBkZXN0cm95cyB0aGUgVkxBTiwgYW5kIGRyb3BzIHRoZSBsaXN0IHJlZmVyZW5jZS4KNC4gSWYgdGhlcmUgYXJlIG90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIFZMQU4sIGl0JiMzOTtzIG5vdCBmcmVlZC4gSWYgdGhlcmUgYXJlIG5vIG90aGVyIHJlZmVyZW5jZXMsIGl0JiMzOTtzIGZyZWVkLgoKU28gaXQgbG9va3MgY29ycmVjdC4KCkhvd2V2ZXIsIGlmIGFsbCB0aGlzIGlzIGNvcnJlY3QsIHdoeSB3YXMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIHJlbW92ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGA/ICBMZXQgbWUgcmUtZXhhbWluZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIG9uZSBtb3JlIHRpbWUuLi4gIE9rYXksIG5vLCBpdCYjMzk7cyBjb3JyZWN0LiBJdCBjb3JyZWN0bHkgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLgoKTGV0JiMzOTtzIHRlc3QgdGhpcyBpbiBhIHZhcmlldHkgb2Ygc2l0dWF0aW9ucy4gSWYgYWxsIHRoZSB0ZXN0cyBwYXNzLCB0aGVuIHRoYXQgcGF0Y2ggc2hvdWxkIG5vdCBoYXZlIHJlbW92ZWQgdGhpcy4gTGV0IG1lIHZlcmlmeSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg3LS8qKlxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1ODg6ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTEtICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU5MjpzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTMtXHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTY3MD1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkxLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2OTI6XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5My1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTEwODI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk2LVx0aWYgKHZsYW4pIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5NzpcdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk4LVx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ0NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDk5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkxBTiBSZWZlcmVuY2UgQ291bnRpbmcgaW4gYmF0YWR2KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgZnVuY3Rpb24uIEl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gQnV0IHdhaXQsIEkmIzM5O20gYWxzbyBzZWVpbmcgdGhpcyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24sIHdoaWNoIGFsc28gY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGUgcGF0Y2ggcmVtb3ZlZCBpdCBmcm9tIG9ubHkgdGhlIGxhdHRlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqLiBTbywgSSBuZWVkIHRvIGxvb2sgY2xvc2VyLgoKQ2hlY2tpbmcgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFnYWluLCB5ZXMsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgYW5kICp0aGVuKiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIE9rYXksIGJ1dCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBjYWxsZWQgd2hlbiBhIFZMQU4gaXMgZGVsZXRlZC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZnVuY3Rpb24uIEl0IHNlZW1zIGl0IGZpcnN0IHRyaWVzIHRvIGdldCBhIFZMQU4gdXNpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBhbmQgaWYgaXQgZG9lc24mIzM5O3QgZXhpc3QsIGl0IGNyZWF0ZXMgb25lLgoKQ3J1Y2lhbGx5LCBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBkb2VzICpub3QqIGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGFmdGVyIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgY2FsbCEgVGhpcyBtZWFucyB0aGUgcmVmZXJlbmNlIGNvdW50IGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGlzIGxlZnQgaGFuZ2luZywgc28gdG8gc3BlYWsuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4uLiBvciBhbGFybWluZy4KCklmIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICpuZXZlciogZHJvcHMgdGhlIHJlZmVyZW5jZSwgdGhlbiBldmVyeSB0aW1lIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGlzIGNhbGxlZCBvbiBhICYjMzQ7cmV2aXZlZCYjMzQ7IFZMQU4sIHRoZSByZWZjb3VudCBpcyBpbmNyZW1lbnRlZCBieSBvbmUhIFRoaXMgaXMgaW5jb25zaXN0ZW50ISBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBpcyBvbmx5IGNhbGxlZCBvbmNlIHBlciBWTEFOLCBzbyBpdCBzaG91bGQgYmUgZmluZSwgYnV0IHRoZSByZWZjb3VudCB3b3VsZCBiZSAyLgoKVGhpbmtpbmcgaXQgdGhyb3VnaC4uLiBJZiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBjcmVhdGVzIHRoZSBWTEFOLCB0aGUgcmVmY291bnQgaXMgMS4gSWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMsIGFuZCBpcyAmIzM0O3Jldml2ZWQmIzM0OywgdGhlIHJlZmNvdW50IGlzIDIhIFRoaXMgaXMgYSBiaWcgcHJvYmxlbS4KClRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGNhbGxlZCwgd2hpY2ggZHJvcHMgdHdvIHJlZmVyZW5jZXMhIElmIGl0IHdhcyBjcmVhdGVkIGZyb20gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAsIHRoZSByZWZjb3VudCBzdGFydHMgYXQgMSwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgYSByZWZlcmVuY2UgKG5vdyAyKSwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyBvbmUgKG5vdyAxKSwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGRyb3BzIHRoZSBmaW5hbCBvbmUgKG5vdyAwKS4gVGhpcyAqd29ya3MqIGZvciBhICpjcmVhdGVkKiBWTEFOLgoKQnV0IGlmIGl0IHdhcyByZXZpdmVkLCB0aGUgcmVmY291bnQgc3RhcnRzIGF0IDIuIFRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgYW5vdGhlciByZWZlcmVuY2UgKHJlZmNvdW50IDMpLiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSAocmVmY291bnQgMikuIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBkcm9wcyAqYW5vdGhlciogcmVmZXJlbmNlIChyZWZjb3VudCAxKS4gVGhlIFZMQU4gKmlzbiYjMzk7dCogZnJlZWQuIEl0IHJlbWFpbnMgaW4gdGhlIGxpc3QhCgpJZiBpdCYjMzk7cyBub3QgZnJlZWQsIGl0IGNhbiBiZSByZXZpdmVkIGFnYWluLCB0aGUgcmVmY291bnQgYmVjb21lcyAyLCB0aGVuIGtpbGxlZCBhZ2FpbiB3aXRoIHRoZSByZWZjb3VudCBiZWNvbWluZyAxISBJdCAqbmV2ZXIqIGdldHMgZnJlZWQhIFdhaXQhIFRoYXQmIzM5O3MgYSBtZW1vcnkgbGVhaywgYnV0IGl0IHNob3VsZG4mIzM5O3QgY2F1c2UgYSBjcmFzaC4gVW5sZXNzLi4uCgpCdXQgd2hhdCBpZiwgKndoYXQgaWYqIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIHdhcyBzdXBwb3NlZCB0byBkcm9wIHRoZSByZWZlcmVuY2U/IEkgbmVlZCB0byBjaGVjayBhbmQgdmVyaWZ5IGlmIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBmdW5jdGlvbiBkcm9wcyB0aGUgcmVmZXJlbmNlIGFzIHdlbGwhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0XHR2aWQgfD0gQkFUQURWX1ZMQU5fSEFTX1RBRztcbiA2MzY6XHRcbiA2Mzc6XHRcdC8qIGlmIGEgbmV3IHZsYW4gaXMgZ2V0dGluZyBjcmVhdGVkIGFuZCBpdCBhbHJlYWR5IGV4aXN0cywgaXQgbWVhbnMgdGhhdFxuIDYzODpcdFx0ICogaXQgd2FzIG5vdCBkZWxldGVkIHlldC4gYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGVcbiA2Mzk6XHRcdCAqIHJlZmNvdW50IGluIG9yZGVyIHRvIHJldml2ZSB0aGUgb2JqZWN0LlxuIDY0MDpcdFx0ICpcbiA2NDE6XHRcdCAqIGlmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gY3JlYXRlIGl0LlxuIDY0MjpcdFx0ICovXG4gNjQzOlx0XHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcbiA2NDQ6XHRcdGlmICghdmxhbilcbiA2NDU6XHRcdFx0cmV0dXJuIGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oYmF0X3ByaXYsIHZpZCk7XG4gNjQ2Olx0XG4gNjQ3Olx0XHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcbiA2NDg6XHRcdCAqIGZsYWcuIFRoaXMgbXVzdCBiZSBhZGRlZCBhZ2FpbiwgZXZlbiBpZiB0aGUgdmxhbiBvYmplY3QgYWxyZWFkeVxuIDY0OTpcdFx0ICogZXhpc3RzLCBiZWNhdXNlIHRoZSBlbnRyeSB3YXMgZGVsZXRlZCBieSBraWxsX3ZpZCgpXG4gNjUwOlx0XHQgKi9cbiA2NTE6XHRcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbiA2NTI6XHRcdFx0XHQgICAgYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZS1cdTAwM2VkZXZfYWRkciwgdmlkLFxuIDY1MzpcdFx0XHRcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XG4gNjU0Olx0XG4gNjU1Olx0XHRyZXR1cm4gMDtcbiA2NTY6XHR9XG4gNjU3Olx0XG4gNjU4Olx0LyoqXG4gNjU5Olx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDY2MDpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjYxOlx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuIDY2MjpcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxuIDY2MzpcdCAqXG4gNjY0Olx0ICogRGVzdHJveSBhbGwgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgdXNlZCB0byBoYW5kbGUgdGhlIHZsYW4gaWRlbnRpZmllZCBieSB2aWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3NzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmNvdW50IERlZXAgRGl2ZSBpbiBiYXRhZHYgVkxBTiBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBib3RoZXJpbmcgbWUuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgVkxBTiByZWZlcmVuY2UgY291bnRpbmcgaW4gYGJhdGFkdmAgYW5kIEkmIzM5O3ZlIGhpdCBhIGNvbmNlcHR1YWwgc25hZy4gU3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgYW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCwgYW5kIHdoZXRoZXIgdGhleSBjb3JyZWN0bHkgaGFuZGxlIHRoZSByZWZlcmVuY2UgY291bnQuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKnNob3VsZCogYmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZS4gVHVybnMgb3V0LCBpdCBkb2VzbiYjMzk7dC4gSWYgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZG9lc24mIzM5O3QgZHJvcCB0aGUgcmVmZXJlbmNlLCB0aGF0IG1lYW5zIGEgVkxBTiBvYmplY3QgaXMgbGVha2VkIGluaXRpYWxseS4gVGhpcyBsZWFkcyBtZSB0byBiZWxpZXZlIHRoZSBwcm9ibGVtIGxpZXMgd2l0aCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuCgpJZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZHJvcHMgMiByZWZlcmVuY2VzLCBhbmQgaXQgd2FzIGNyZWF0ZWQsIHRoZW4gaXQmIzM5O3MgZnJlZWQgLSB0aGF0JiMzOTtzIHN0YW5kYXJkLiBIb3dldmVyLCBpZiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCByZXZpdmVzIGl0LCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHRoZW4gZHJvcHMgMiByZWZlcmVuY2VzIGFnYWluLCBpdCBjb3VsZCBiZSBhIG1lc3MuIElmIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGRvZXMgcmV2aXZlIGl0LCBpdCBtZWFucyBpdCAqd2FzbiYjMzk7dCogZnJlZWQuIFNvLCBzb21ldGhpbmcgZWxzZSBtdXN0IGhhdmUgYmVlbiBob2xkaW5nIGEgcmVmZXJlbmNlLCBzdWNoIGFzIGEgVFQgZW50cnkuIAoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbSBJIHNlZSBub3c6CmBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgcmVmZXJlbmNlIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBhbmQgaXQgYWxzbyBkcm9wcyB0aGUgJiMzNDtsaXN0JiMzNDsgcmVmZXJlbmNlLiBUaGUgdGhpbmcgaXMsIHdoZW4gaXQgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLCB0aGUgb2JqZWN0IGlzIFNUSUxMIG9uIHRoZSBsaXN0ISBIb3dldmVyLCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzbiYjMzk7dCBjYWxsZWQsIHNvIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSBoZXJlLiBUaGUgcmVmY291bnQgaXMgZWZmZWN0aXZlbHkgb25lIGxlc3MgdGhhbiBpdCBzaG91bGQgYmUuIEF0IHRoaXMgcG9pbnQgdGhlIFZMQU4gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3Qgd2hlbiByZWZjb3VudCBkcm9wcyB0byB6ZXJvLgoKSSYjMzk7bSBub3cgc3RhcnRpbmcgdG8gc2VlIHRoaXMgbWVhbnMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGNhbiBmaW5kIHRoZSBvYmplY3QsIGFuZCB0aGVyZWZvcmUgcmV2aXZlIGl0LiBTbyB0aGUgcHJvYmxlbSBpcyB0aGVuIGFib3V0IHRoZSByZWZjb3VudC4gSSYjMzk7bSBnb2luZyB0byB0cmFjZSB0aGUgcmVmY291bnQuCgoxLiAgKipDcmVhdGlvbjoqKiBXaGVuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGNyZWF0ZXMgdGhlIFZMQU4sIHRoZSByZWZjb3VudCBzdGFydHMgYXQgMSAodGhlIGxpc3QmIzM5O3MgcmVmZXJlbmNlKS4KMi4gICoqRXh0ZXJuYWwgUmVmZXJlbmNlOioqIElmIHNvbWV0aGluZyBlbHNlIGdldHMgYSByZWZlcmVuY2UgKGxpa2UgYSBUVCBlbnRyeSksIHRoZSByZWZjb3VudCBiZWNvbWVzIDIuCjMuICAqKktpbGxpbmcgKGFuZCBwb3RlbnRpYWxseSByZXZpdmluZyk6KiogYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgYW5vdGhlciByZWZlcmVuY2UgdG8gdGhlIHZsYW4gd2hpY2ggd2lsbCBiZSAzLCBkZXN0cm95cyB0aGUgdmxhbiwgYW5kIHRoZW4gZHJvcHMgMiByZWZlcmVuY2VzLCBzbyB0aGUgY291bnQgZ29lcyB0byAxLCBidXQgdGhlIHZsYW4gaXMgbm90IGZyZWVkIGJlY2F1c2UgdGhlIGxpc3QgaGFzIG9uZSByZWZlcmVuY2UuCjQuICAqKlJldml2YWw6KiogYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZ2V0cyBhbm90aGVyIHJlZmVyZW5jZSwgYW5kIHRoZSByZWZjb3VudCBnb2VzIHRvIDIuCjUuICAqKlNvbWVvbmUgZHJvcHMgdGhlIHJlZmVyZW5jZToqKiBOb3cgdGhlIHJlZmNvdW50IGdvZXMgdG8gMSBhZ2FpbiwgYnV0IHRoZSBvYmplY3QgaXMgc3RpbGwgb24gdGhlIGxpc3QuCjYuICAqKktpbGxpbmcgKGFnYWluKToqKiBUaGUgcHJvY2VzcyByZXBlYXRzLgoKQnV0IHRoZW4gSSByZWFsaXplZCwgd2FpdCwgaWYgdGhpcyB3b3Jrcywgd2h5IHdhcyB0aGUgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIHJlbW92ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGA/IFRoaXMgaXNuJiMzOTt0IG1hdGNoaW5nIHVwLi4uCgpHb2luZyBiYWNrIHRvIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLCBpdCBlaXRoZXIgY3JlYXRlcyBhIG5ldyBWTEFOLCBvciBpdCBnZXRzIHRoZSBleGlzdGluZyBvbmUuIElmIGl0IGdldHMgdGhlIGV4aXN0aW5nIG9uZSwgaXQgKmFkZHMqIGEgVFQgZW50cnksIHdoaWNoIEkgdGhpbmsgbWVhbnMgaXQgd2lsbCByZXZpdmUgdGhlIG9iamVjdC4gCgpUaGUgcHJvYmxlbSBpcywgaWYgdGhlIHJlZmNvdW50IGlzIHJldml2ZWQgYnV0IG5vIG9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UsIHRoZSByZWZjb3VudCBpcyBvbmUgYXQgdGhlIGJlZ2lubmluZywgZ2V0cyByZXZpdmVkIHNvIHRoZSByZWZjb3VudCBiZWNvbWVzIDIuIFRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHRha2VzIHR3bywgYnV0IGl0IG1lYW5zIHRoYXQgdGhlIHZsYW4gY291bnQgd2lsbCBnbyB0byB6ZXJvIGFuZCBpdCBpcyBmcmVlZC4gQnV0IHRoaXMgc2NlbmFyaW8gaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0IGNhbiBvbmx5IGJlIHJldml2ZWQgaWYgc29tZW9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UsIHNvIGlmIHNvbWVib2R5IGVsc2UgaXMgaG9sZGluZyBhIHJlZmVyZW5jZSwgdGhlIGNvdW50IHdpbGwgYmUgYXQgbGVhc3QgMSwgdGhlbiByZXZpdmVkIHRvIGJlIGF0IGxlYXN0IDIsIGFuZCB0aGVuIHRoZSByZWZjb3VudCBpcyBkcm9wcGVkIGJ5IDIgc28gdGhlIG5ldCBjaGFuZ2UgaXMgLTEuCgpJZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZHJvcHMgMiByZWZlcmVuY2VzLCBzbyB0aGUgb2JqZWN0IGNvdWxkIGJlIHJldml2ZWQgb3Iga2lsbGVkLCB0aGUgbmV0IGNoYW5nZSBpcyAtMS4gV2hhdCB3aWxsIGhhcHBlbiBpZiB0aGlzIGlzIGhhcHBlbmluZyBtYW55IHRpbWVzPyBUaGUgcmVmY291bnQgd2lsbCBkZWNyZWFzZSBieSBvbmUgYW5kLCBhcyBhIHJlc3VsdCwgZXZlbnR1YWxseSBiZSBmcmVlZCEKCk9rYXksIHNvIEkgd2lsbCBhbmFseXplIGFuZCByZXRyYWNlIG15IHN0ZXBzISBUaGUgVFQgZW50cnkgaG9sZHMgMSByZWZlcmVuY2UuIFRoZSBsaXN0IGhvbGRzIHplcm8gc2luY2UgaXQgd2FzIGRyb3BwZWQgdGhlIGZpcnN0IHRpbWUgYGtpbGxfdmlkYCB3YXMgY2FsbGVkLiBJZiB0aGUgbGlzdCBoYXMgemVybywgdGhlIHJlZmNvdW50IGlzIDEgZnJvbSB0aGUgVFQgZW50cnkuIElmIGBiYXRhZHZfaW50ZXJmYWNlXwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl90dF9sb2NhbF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMTI9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTMyLVx0XHRcdFx0ICAgICAgIFwmIzM0O21hYyBhZGRyZXNzIGNoYW5nZWRcJiMzNDssIGZhbHNlKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTMzOlx0XHRiYXRhZHZfdHRfbG9jYWxfYWRkKGRldiwgYWRkci1cdTAwM2VzYV9kYXRhLCB2bGFuLVx1MDAzZXZpZCxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTM0LVx0XHRcdFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTE2Nz1zdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMjM1LVx0ICAgICFiYXRhZHZfYmxhX2lzX2xvb3BkZXRlY3RfbWFjKGV0aGhkci1cdTAwM2VoX3NvdXJjZSkpIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MjM2Olx0XHRjbGllbnRfYWRkZWQgPSBiYXRhZHZfdHRfbG9jYWxfYWRkKG1lc2hfaWZhY2UsIGV0aGhkci1cdTAwM2VoX3NvdXJjZSxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMjM3LVx0XHRcdFx0XHRcdCAgIHZpZCwgc2tiLVx1MDAzZXNrYl9paWYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTc2LVx0ICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU3NzpcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTc4LVx0XHRcdCAgICBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLCB2aWQsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02MTU9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjUwLVx0ICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY1MTpcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjUyLVx0XHRcdCAgICBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLCB2aWQsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9NzExPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF9tbGFfdHRfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNzI0LVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6NzI1Olx0XHRpZiAoIWJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTcyNi1cdFx0XHRcdFx0IG1jYXN0X2VudHJ5LVx1MDAzZWFkZHIsIEJBVEFEVl9OT19GTEFHUyxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTU1MD1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfZ2xvYmFsX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU3Ni0vKipcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NTc3OiAqIGJhdGFkdl90dF9sb2NhbF9hZGQoKSAtIGFkZCBhIG5ldyBjbGllbnQgdG8gdGhlIGxvY2FsIHRhYmxlIG9yIHVwZGF0ZSBhblxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy01NzgtICogIGV4aXN0aW5nIGNsaWVudFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNTg4LSAqL1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo1ODk6Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNTkwLVx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2aWQsIGludCBpZmluZGV4LCB1MzIgbWFyaylcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oPTE4PWludCBiYXRhZHZfdHRfaW5pdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmg6MTk6Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgtMjAtXHRcdFx0IHVuc2lnbmVkIHNob3J0IHZpZCwgaW50IGlmaW5kZXgsIHUzMiBtYXJrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwMTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBzdWJqZWN0OgoKKipBbmFseXppbmcgYGJhdGFkdl90dF9sb2NhbF9hZGRgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSXMgdGhpcyByZWxhdGVkIHRvIHRoZSB0b3BvbG9neSB0YWJsZSwgb3IgdGhlIGZvcndhcmRpbmcgdGFibGU/IEJhc2VkIG9uIHRoZSBuYW1lLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHRoZSB0b3BvbG9neSB0YWJsZSDigJMgc3BlY2lmaWNhbGx5LCBhZGRpbmcgYSBsb2NhbCBlbnRyeS4gV2hhdCYjMzk7cyB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZT8gSXMgaXQgaGFuZGxpbmcgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IG5laWdoYm9yLCBvciBpcyBpdCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0LCBwZXJoYXBzIG1hbmFnaW5nIHNvbWUgc29ydCBvZiBsb2NhbCBmb3J3YXJkaW5nIG9wdGltaXphdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCQVRNQU4tYWR2IGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbGlrZSBgYmF0YWR2X3R0X2xvY2FsX2VudHJ5YCBhbmQgYW55IHJlbGF0ZWQgbG9ja3MgdGhhdCBjb21lIHRvIG1pbmQgdG8gbWFrZSBzdXJlIEkgZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVycy4gV2hhdCBhcmUgdGhlIGlucHV0cywgYW5kIHdoYXQgZG8gdGhleSByZXByZXNlbnQ/IEFuZCB0aGVuLCBjcml0aWNhbGx5LCB0aGUgcmV0dXJuIHZhbHVlLiBJcyBpdCBlcnJvciBoYW5kbGluZywgb3IgYSBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdG9yPyBBIGRlZXAgZGl2ZSBpbiBpdHMgdXNlIGluIHRoZSBjb2RlIHNob3VsZCBtYWtlIHRoYXQgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg5Olx0Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbiA1OTA6XHRcdFx0XHQgdW5zaWduZWQgc2hvcnQgdmlkLCBpbnQgaWZpbmRleCwgdTMyIG1hcmspXG4gNTkxOlx0e1xuIDU5MjpcdFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG1lc2hfaWZhY2UpO1xuIDU5MzpcdFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWw7XG4gNTk0Olx0XHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsID0gTlVMTDtcbiA1OTU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQobWVzaF9pZmFjZSk7XG4gNTk2Olx0XHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuIDU5NzpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmluX2RldiA9IE5VTEw7XG4gNTk4Olx0XHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmluX2hhcmRpZiA9IE5VTEw7XG4gNTk5Olx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbiA2MDA6XHRcdHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpvcmlnX2VudHJ5O1xuIDYwMTpcdFx0aW50IGhhc2hfYWRkZWQsIHRhYmxlX3NpemUsIHBhY2tldF9zaXplX21heDtcbiA2MDI6XHRcdGJvb2wgcmV0ID0gZmFsc2U7XG4gNjAzOlx0XHRib29sIHJvYW1lZF9iYWNrID0gZmFsc2U7XG4gNjA0Olx0XHR1OCByZW1vdGVfZmxhZ3M7XG4gNjA1Olx0XHR1MzIgbWF0Y2hfbWFyaztcbiA2MDY6XHRcbiA2MDc6XHRcdGlmIChpZmluZGV4ICE9IEJBVEFEVl9OVUxMX0lGSU5ERVgpXG4gNjA4Olx0XHRcdGluX2RldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBpZmluZGV4KTtcbiA2MDk6XHRcbiA2MTA6XHRcdGlmIChpbl9kZXYpXG4gNjExOlx0XHRcdGluX2hhcmRpZiA9IGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihpbl9kZXYpO1xuIDYxMjpcdFxuIDYxMzpcdFx0dHRfbG9jYWwgPSBiYXRhZHZfdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xuIDYxNDpcdFxuIDYxNTpcdFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcbiA2MTY6XHRcdFx0dHRfZ2xvYmFsID0gYmF0YWR2X3R0X2dsb2JhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7XG4gNjE3Olx0XG4gNjE4Olx0XHRpZiAodHRfbG9jYWwpIHtcbiA2MTk6XHRcdFx0dHRfbG9jYWwtXHUwMDNlbGFzdF9zZWVuID0gamlmZmllcztcbiA2MjA6XHRcdFx0aWYgKHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB7XG4gNjIxOlx0XHRcdFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbiA2MjI6XHRcdFx0XHRcdCAgIFwmIzM0O1JlLWFkZGluZyBwZW5kaW5nIGNsaWVudCAlcE0gKHZpZDogJWQpXFxuXCYjMzQ7LFxuIDYyMzpcdFx0XHRcdFx0ICAgYWRkciwgYmF0YWR2X3ByaW50X3ZpZCh2aWQpKTtcbiA2MjQ6XHRcdFx0XHQvKiB3aGF0ZXZlciB0aGUgcmVhc29uIHdoeSB0aGUgUEVORElORyBmbGFnIHdhcyBzZXQsXG4gNjI1Olx0XHRcdFx0ICogdGhpcyBpcyBhIGNsaWVudCB3aGljaCB3YXMgZW5xdWV1ZWQgdG8gYmUgcmVtb3ZlZCBpblxuIDYyNjpcdFx0XHRcdCAqIHRoaXMgb3JpZ19pbnRlcnZhbC4gU2luY2UgaXQgcG9wcGVkIHVwIGFnYWluLCB0aGVcbiA2Mjc6XHRcdFx0XHQgKiBmbGFnIGNhbiBiZSByZXNldCBsaWtlIGl0IHdhcyBuZXZlciBlbnF1ZXVlZFxuIDYyODpcdFx0XHRcdCAqL1xuIDYyOTpcdFx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7XG4gNjMwOlx0XHRcdFx0Z290byBhZGRfZXZlbnQ7XG4gNjMxOlx0XHRcdH1cbiA2MzI6XHRcbiA2MzM6XHRcdFx0aWYgKHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSB7XG4gNjM0Olx0XHRcdFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbiA2MzU6XHRcdFx0XHRcdCAgIFwmIzM0O1JvYW1pbmcgY2xpZW50ICVwTSAodmlkOiAlZCkgY2FtZSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBsb2NhdGlvblxcblwmIzM0OyxcbiA2MzY6XHRcdFx0XHRcdCAgIGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSk7XG4gNjM3Olx0XHRcdFx0LyogdGhlIFJPQU0gZmxhZyBpcyBzZXQgYmVjYXVzZSB0aGlzIGNsaWVudCByb2FtZWQgYXdheVxuIDYzODpcdFx0XHRcdCAqIGFuZCB0aGUgbm9kZSBnb3QgYSByb2FtaW5nX2FkdmVydGlzZW1lbnQgbWVzc2FnZS4gTm93XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjk2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gYGJhdGFkdl90dF9sb2NhbF9hZGRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgYWRkaW5nIGxvY2FsIHR1bm5lbCB0YXJnZXRzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBudWFuY2VzIGlzIGVzc2VudGlhbC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IGl0IHByb2JhYmx5IGhhbmRsZXMgc3luY2hyb25pemF0aW9uLCBlcnJvciBjaGVja2luZywgYW5kIHBvdGVudGlhbGx5IGludGVyYWN0aW9uIHdpdGggdGhlIHJvdXRpbmcgdGFibGUgb3IgZm9yd2FyZGluZyBlbmdpbmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgbmV3IHRhcmdldCBnZXRzIGFjY2VwdGVkLiBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhcGF0aCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBhbm5vdW5jZXMgdGhpcyBuZXcgbG9jYWwgVFQgaW4gdGhlIG5ldHdvcmsuIFRoZXJlJiMzOTtzIGFsc28gdGhlIHF1ZXN0aW9uIG9mIGNhY2hpbmcgYW5kIG9wdGltaXphdGlvbi4gRG9lcyBpdCBpbXBsZW1lbnQgYW55IHN0cmF0ZWdpZXMgZm9yIHJlZHVjaW5nIG92ZXJoZWFkLCBvciBoYW5kbGUgY2FzZXMgd2hlcmUgYSB0YXJnZXQgYWxyZWFkeSBleGlzdHM/IExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM5Olx0XHRcdFx0ICogdGhhdCB0aGUgY2xpZW50IHBvcHBlZCB1cCBhZ2FpbiBhdCBpdHMgb3JpZ2luYWxcbiA2NDA6XHRcdFx0XHQgKiBsb2NhdGlvbiBzdWNoIGZsYWcgY2FuIGJlIHVuc2V0XG4gNjQxOlx0XHRcdFx0ICovXG4gNjQyOlx0XHRcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbiA2NDM6XHRcdFx0XHRyb2FtZWRfYmFjayA9IHRydWU7XG4gNjQ0Olx0XHRcdH1cbiA2NDU6XHRcdFx0Z290byBjaGVja19yb2FtaW5nO1xuIDY0NjpcdFx0fVxuIDY0NzpcdFxuIDY0ODpcdFx0LyogSWdub3JlIHRoZSBjbGllbnQgaWYgd2UgY2Fubm90IHNlbmQgaXQgaW4gYSBmdWxsIHRhYmxlIHJlc3BvbnNlLiAqL1xuIDY0OTpcdFx0dGFibGVfc2l6ZSA9IGJhdGFkdl90dF9sb2NhbF90YWJsZV90cmFuc21pdF9zaXplKGJhdF9wcml2KTtcbiA2NTA6XHRcdHRhYmxlX3NpemUgJiM0Mzs9IGJhdGFkdl90dF9sZW4oMSk7XG4gNjUxOlx0XHRwYWNrZXRfc2l6ZV9tYXggPSBhdG9taWNfcmVhZChcdTAwMjZiYXRfcHJpdi1cdTAwM2VwYWNrZXRfc2l6ZV9tYXgpO1xuIDY1MjpcdFx0aWYgKHRhYmxlX3NpemUgXHUwMDNlIHBhY2tldF9zaXplX21heCkge1xuIDY1MzpcdFx0XHRuZXRfcmF0ZWxpbWl0ZWRfZnVuY3Rpb24oYmF0YWR2X2luZm8sIG1lc2hfaWZhY2UsXG4gNjU0Olx0XHRcdFx0XHRcdCBcJiMzNDtMb2NhbCB0cmFuc2xhdGlvbiB0YWJsZSBzaXplICglaSkgZXhjZWVkcyBtYXhpbXVtIHBhY2tldCBzaXplICglaSk7IElnbm9yaW5nIG5ldyBsb2NhbCB0dCBlbnRyeTogJXBNXFxuXCYjMzQ7LFxuIDY1NTpcdFx0XHRcdFx0XHQgdGFibGVfc2l6ZSwgcGFja2V0X3NpemVfbWF4LCBhZGRyKTtcbiA2NTY6XHRcdFx0Z290byBvdXQ7XG4gNjU3Olx0XHR9XG4gNjU4Olx0XG4gNjU5Olx0XHR0dF9sb2NhbCA9IGttZW1fY2FjaGVfYWxsb2MoYmF0YWR2X3RsX2NhY2hlLCBHRlBfQVRPTUlDKTtcbiA2NjA6XHRcdGlmICghdHRfbG9jYWwpXG4gNjYxOlx0XHRcdGdvdG8gb3V0O1xuIDY2MjpcdFxuIDY2MzpcdFx0LyogaW5jcmVhc2UgdGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJlbGF0ZWQgdmxhbiAqL1xuIDY2NDpcdFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCk7XG4gNjY1Olx0XHRpZiAoIXZsYW4pIHtcbiA2NjY6XHRcdFx0bmV0X3JhdGVsaW1pdGVkX2Z1bmN0aW9uKGJhdGFkdl9pbmZvLCBtZXNoX2lmYWNlLFxuIDY2NzpcdFx0XHRcdFx0XHQgXCYjMzQ7YWRkaW5nIFRUIGxvY2FsIGVudHJ5ICVwTSB0byBub24tZXhpc3RlbnQgVkxBTiAlZFxcblwmIzM0OyxcbiA2Njg6XHRcdFx0XHRcdFx0IGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSk7XG4gNjY5Olx0XHRcdGttZW1fY2FjaGVfZnJlZShiYXRhZHZfdGxfY2FjaGUsIHR0X2xvY2FsKTtcbiA2NzA6XHRcdFx0dHRfbG9jYWwgPSBOVUxMO1xuIDY3MTpcdFx0XHRnb3RvIG91dDtcbiA2NzI6XHRcdH1cbiA2NzM6XHRcbiA2NzQ6XHRcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXG4gNjc1Olx0XHRcdCAgIFwmIzM0O0NyZWF0aW5nIG5ldyBsb2NhbCB0dCBlbnRyeTogJXBNICh2aWQ6ICVkLCB0dHZuOiAlZClcXG5cJiMzNDssXG4gNjc2Olx0XHRcdCAgIGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSxcbiA2Nzc6XHRcdFx0ICAgKHU4KWF0b21pY19yZWFkKFx1MDAyNmJhdF9wcml2LVx1MDAzZXR0LnZuKSk7XG4gNjc4Olx0XG4gNjc5Olx0XHRldGhlcl9hZGRyX2NvcHkodHRfbG9jYWwtXHUwMDNlY29tbW9uLmFkZHIsIGFkZHIpO1xuIDY4MDpcdFx0LyogVGhlIGxvY2FsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgTkVXIHRvIGF2b2lkIHRvIHNlbmQgaXQgaW5cbiA2ODE6XHRcdCAqIGEgZnVsbCB0YWJsZSByZXNwb25zZSBnb2luZyBvdXQgYmVmb3JlIHRoZSBuZXh0IHR0dm4gaW5jcmVtZW50XG4gNjgyOlx0XHQgKiAoY29uc2lzdGVuY3kgY2hlY2spXG4gNjgzOlx0XHQgKi9cbiA2ODQ6XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyA9IEJBVEFEVl9UVF9DTElFTlRfTkVXO1xuIDY4NTpcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLnZpZCA9IHZpZDtcbiA2ODY6XHRcdGlmIChiYXRhZHZfaXNfd2lmaV9oYXJkaWYoaW5faGFyZGlmKSlcbiA2ODc6XHRcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfV0lGSTtcbiA2ODg6XHRcdGtyZWZfaW5pdChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ1NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFZMQU4gQXNzb2NpYXRpb24gaW4gYmF0YWR2X3R0X2xvY2FsX2FkZCoqCgpPa2F5LCBzbyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgaXMgZG9pbmcgc29tZXRoaW5nIHdpdGggVkxBTnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGNhbGxpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHdpdGggdGhlIHJlbGV2YW50IGBiYXRfcHJpdmAgYW5kIGB2aWRgIGFyZ3VtZW50cywgYW5kIHRoZW4gc3RvcmluZyB0aGUgcmVzdWx0LCBwcmVzdW1hYmx5IGEgVkxBTiBpZGVudGlmaWVyLCBpbiBgdHRfbG9jYWwtJmd0O3ZsYW5gLiBUaGlzIG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgY29udGV4dCDigJMgd2UmIzM5O3JlIGxpa2VseSBhc3NvY2lhdGluZyBhIGxvY2FsIGVudHJ5IHdpdGggYSBzcGVjaWZpYyBWTEFOLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBjaGVjayBwcmVjaXNlbHkgd2hlcmUgYW5kIGhvdyBgdHRfbG9jYWwtJmd0O3ZsYW5gIGdldHMgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBvZiB0aGlzIHZhcmlhYmxlIHRvIGJlIGNlcnRhaW4gb2YgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIEJhdGFkdiBmcmFtZXdvcmsuIFVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbiB3aWxsIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2ODk6XHRcdHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XG4gNjkwOlx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW47XG4gNjkxOlx0XHR0dF9sb2NhbC1cdTAwM2V2bGFuID0gdmxhbjtcbiA2OTI6XHRcbiA2OTM6XHRcdC8qIHRoZSBiYXRtYW4gaW50ZXJmYWNlIG1hYyBhbmQgbXVsdGljYXN0IGFkZHJlc3NlcyBzaG91bGQgbmV2ZXIgYmVcbiA2OTQ6XHRcdCAqIHB1cmdlZFxuIDY5NTpcdFx0ICovXG4gNjk2Olx0XHRpZiAoYmF0YWR2X2NvbXBhcmVfZXRoKGFkZHIsIG1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIpIHx8XG4gNjk3Olx0XHQgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4gNjk4Olx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0U7XG4gNjk5Olx0XG4gNzAwOlx0XHRrcmVmX2dldChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuIDcwMTpcdFx0aGFzaF9hZGRlZCA9IGJhdGFkdl9oYXNoX2FkZChiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLCBiYXRhZHZfY29tcGFyZV90dCxcbiA3MDI6XHRcdFx0XHRcdCAgICAgYmF0YWR2X2Nob29zZV90dCwgXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLFxuIDcwMzpcdFx0XHRcdFx0ICAgICBcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uaGFzaF9lbnRyeSk7XG4gNzA0Olx0XG4gNzA1Olx0XHRpZiAodW5saWtlbHkoaGFzaF9hZGRlZCAhPSAwKSkge1xuIDcwNjpcdFx0XHQvKiByZW1vdmUgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIGhhc2ggKi9cbiA3MDc6XHRcdFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XG4gNzA4Olx0XHRcdGdvdG8gb3V0O1xuIDcwOTpcdFx0fVxuIDcxMDpcdFxuIDcxMTpcdGFkZF9ldmVudDpcbiA3MTI6XHRcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XG4gNzEzOlx0XG4gNzE0Olx0Y2hlY2tfcm9hbWluZzpcbiA3MTU6XHRcdC8qIENoZWNrIHdoZXRoZXIgaXQgaXMgYSByb2FtaW5nLCBidXQgZG9uJiMzOTt0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nXG4gNzE2Olx0XHQgKiBwcm9jZXNzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZFxuIDcxNzpcdFx0ICovXG4gNzE4Olx0XHRpZiAodHRfZ2xvYmFsIFx1MDAyNlx1MDAyNiAhKHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkpIHtcbiA3MTk6XHRcdFx0LyogVGhlc2Ugbm9kZSBhcmUgcHJvYmFibHkgZ29pbmcgdG8gdXBkYXRlIHRoZWlyIHR0IHRhYmxlICovXG4gNzIwOlx0XHRcdGhlYWQgPSBcdTAwMjZ0dF9nbG9iYWwtXHUwMDNlb3JpZ19saXN0O1xuIDcyMTpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNzIyOlx0XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX2VudHJ5LCBoZWFkLCBsaXN0KSB7XG4gNzIzOlx0XHRcdFx0YmF0YWR2X3NlbmRfcm9hbV9hZHYoYmF0X3ByaXYsIHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uYWRkcixcbiA3MjQ6XHRcdFx0XHRcdFx0ICAgICB0dF9nbG9iYWwtXHUwMDNlY29tbW9uLnZpZCxcbiA3MjU6XHRcdFx0XHRcdFx0ICAgICBvcmlnX2VudHJ5LVx1MDAzZW9yaWdfbm9kZSk7XG4gNzI2Olx0XHRcdH1cbiA3Mjc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNzI4Olx0XHRcdGlmIChyb2FtZWRfYmFjaykge1xuIDcyOTpcdFx0XHRcdGJhdGFkdl90dF9nbG9iYWxfZnJlZShiYXRfcHJpdiwgdHRfZ2xvYmFsLFxuIDczMDpcdFx0XHRcdFx0XHQgICAgICBcJiMzNDtSb2FtaW5nIGNhbmNlbGVkXCYjMzQ7KTtcbiA3MzE6XHRcdFx0fSBlbHNlIHtcbiA3MzI6XHRcdFx0XHQvKiBUaGUgZ2xvYmFsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgUk9BTUlORyBhbmRcbiA3MzM6XHRcdFx0XHQgKiBoYXMgdG8gYmUga2VwdCBmb3IgY29uc2lzdGVuY3kgcHVycG9zZVxuIDczNDpcdFx0XHRcdCAqL1xuIDczNTpcdFx0XHRcdHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIDczNjpcdFx0XHRcdHR0X2dsb2JhbC1cdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcbiA3Mzc6XHRcdFx0fVxuIDczODpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gUmVmZXJlbmNlIENvdW50aW5nIGluIEJhdG1hbi1hZHYqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJhdG1hbi1hZHYgVkxBTiBtYW5hZ2VtZW50IGNvZGUuIEluaXRpYWxseSwgSSBzZWUgdGhhdCB3aGVuIGEgVFQgZW50cnkgaXMgY3JlYXRlZCwgaXQgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4gb2JqZWN0LiBUaGVuLCB3aGVuIHRoZSBUVCBlbnRyeSBpcyBmcmVlZCwgaXQgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZS4gVGhpcyBtYWtlcyBzZW5zZSBzbyBmYXIuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCByZXRyaWV2ZXMgYSBWTEFOIHVzaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YC4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJiMzOTt0KiByZWxlYXNlIHRoaXMgcmVmZXJlbmNlISBUaGVuLCBpdCBhZGRzIGEgVFQgbG9jYWwgZW50cnksIHdoaWNoIGFsc28gY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLiBUaGlzIG1lYW5zIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGxlYWtzIGEgcmVmZXJlbmNlLgoKVGhpcyBsZWFrIGlzIGltcG9ydGFudCEgSWYgdGhlIFZMQU4gd2FzIGNyZWF0ZWQsIHRoZSByZWZjb3VudCBpcyBsaWtlbHkgMSAobGlzdCkgJiM0MzsgMSAoVFQgZW50cnkpLiBUaGUgY2FsbCB0byBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBtZWFucyB0aGUgcmVmY291bnQgaXMgbm93IDM6IG9uZSBmcm9tIHRoZSBsaXN0LCBvbmUgZnJvbSB0aGUgbGVha2VkIHJlZmVyZW5jZSwgYW5kIG9uZSBmcm9tIHRoZSBUVCBlbnRyeS4gSWYgdGhlIFZMQU4gd2FzIHJldml2ZWQsIHRoZSByZWZjb3VudCBpcyBldmVuIGhpZ2hlciwgYWxzbyAzLgoKSSYjMzk7bSBzdGFydGluZyB0byBncmFzcCBob3cgdGhpcyBpcyBzdXBwb3NlZCB0byB3b3JrLiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgdGhlbiBhbHNvIGdldHMgYSByZWZlcmVuY2UuIFRoZSBkZXN0cnVjdGlvbiBwcm9jZXNzIHRoZW4gZ2V0cyBtZXNzeSwgYnV0IHVsdGltYXRlbHkgbGVhZHMgdG8gYSByZWZjb3VudCBvZiAxIGZvciBhICpjcmVhdGVkKiBWTEFOLCBhbmQgMCBmb3IgYSAqcmV2aXZlZCogVkxBTi4gU28sIGlmIGEgVkxBTiB3YXMgY3JlYXRlZCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LCBhbmQgaXQmIzM5O3MgZnJlZWQhCgpIb3dldmVyLCBpZiBhIFZMQU4gd2FzIHJldml2ZWQsIHRoZXJlJiMzOTtzIGEgcHJvYmxlbTogdGhlIHJlZmNvdW50IGluY3JlYXNlcyBieSAyIHdoZW4gcmV2aXZlZCwgYW5kIGRlY3JlYXNlcyBieSAyIHdoZW4gJiMzNDtraWxsZWQmIzM0Oy4gVGhlIG5ldCBjaGFuZ2UgaXMgemVybywgc28gaXQgcmV0dXJucyB0byBpdHMgcHJldmlvdXMgcmVmY291bnQuCgpUaGUgY3JpdGljYWwgaW5zaWdodCBoZXJlIGlzIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgSU5URU5USU9OQUxMWSBsZWFrcyBhIHJlZmVyZW5jZSEgSXQgZG9lcyB0aGlzIGJ5IGNhbGxpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGFuZCBmYWlsaW5nIHRvIHJlbGVhc2UgaXQuIFRoaXMgbGVha2VkIHJlZmVyZW5jZSBhY3RzIGFzIHRoZSAqbmV3KiBsaXN0IHJlZmVyZW5jZS4gVGhpcyBpcyB3aGF0IGVuYWJsZXMgdGhlIFZMQU4gdG8gYmUgJiMzNDtyZXZpdmVkJiMzNDsgYW5kIGVuc3VyZXMgaXQgc3RheXMgaW4gdGhlIGxpc3QsIGV2ZW4gYWZ0ZXIgaXQmIzM5O3MgbG9naWNhbGx5IGRlc3Ryb3llZC4KClNvLCBJJiMzOTt2ZSBtYXBwZWQgb3V0IHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGJvdGggdGhlIG5ldyBhbmQgcmV2aXZlZCBjYXNlczogdGhlIHByb2Nlc3MgaXMgd2VsbC1iYWxhbmNlZC4gU29tZW9uZSBlbHNlIG1heSBoYXZlIGEgcmVmZXJlbmNlLCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBjYWxsZWQsIGFuZCBhdCB0aGUgZW5kIG9mIHRoaXMgcHJvY2VzcywgdGhlIFZMQU4gc3RpbGwgbGl2ZXMgaW4gdGhlIGxpc3QuCgpOb3csIHdoeSB3YXMgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbCByZW1vdmVkIGZyb20gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGluIHRoZSBwYXRjaD8gSWYgdGhhdCBsaW5lIGlzIHJlbW92ZWQsIGl0ICpsZWFrcyogYSByZWZlcmVuY2UuIFRoYXQgbWVhbnMgdGhlIHJlZmNvdW50IHdpbGwgbmV2ZXIgcmVhY2ggemVyby4gVGhpcyBjYW4mIzM5O3QgYmUgY29ycmVjdC4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBwYXRjaCBoYXMgYSBodWdlIGltcGxpY2F0aW9uLiBUaGlzIGltcGxpZXMgdGhlcmUgaXMgYSBidWcsIHRoZSBwYXRjaCB3aWxsIGJyZWFrIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU0NT1pbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODctLyoqXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU4ODogKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4OS0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5MS0gKi9cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTkyOnN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5My1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NjcwPXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTEtXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY5MjpcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkzLVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTA4Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTYtXHRpZiAodmxhbikge1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk3Olx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTgtXHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTA2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmVmZXJlbmNlIENvdW50IElzc3VlcyBpbiBCYXRhZHYmIzM5O3MgVkxBTiBIYW5kbGluZyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJJiMzOTttIGxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBoZXJlLCBhbmQgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGJsb2NrOgoKYGBgYwoJLyogZGVzdHJveSB0aGUgJiMzNDt1bnRhZ2dlZCYjMzQ7IFZMQU4gKi8KCXZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpOwoJaWYgKHZsYW4pIHsKCQliYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7CgkJYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTsKCX0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBnZXQgYSBWTEFOIHJlZmVyZW5jZSwgZGVzdHJveSBpdCwgYW5kIHRoZW4gZHJvcCB0aGUgcmVmZXJlbmNlLiBUaGF0IGFwcGVhcnMgYmFsYW5jZWQsIHdoaWNoIGlzIGdvb2QuICBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gaXMsICp3aHkqIGFyZSB3ZSBwdXR0aW5nIHRoZSByZWZlcmVuY2U/IEl0IHNob3VsZCBoYXZlIGJlZW4gYSBnZXQgYW5kIGEgcHV0LgoKVGhlbiBpdCBoaXRzIG1lOiBzdXBwb3NlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBhbHNvIGRpZCBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gSWYgaXQgZGlkLCBpdCB3b3VsZCBiZSAqcmVtb3ZpbmcqIHRoZSBwdXQgdGhhdCBzaG91bGQgYmUgaGVyZSwgYW5kIHRoYXQgd291bGQgYmUgYSBsZWFrISBJIGhhZCB0byBjaGVjay4KV2FpdCwgbGV0IG1lIHJlYWQgdGhlIGNhbGwgdG8gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLgoKLi4uTm9wZSwgaXQmIzM5O3Mgbm90IHByZXNlbnQuIFNvICp0aGF0KiBpcyBub3QgdGhlIHByb2JsZW0uCgpBbHJpZ2h0LCB3aGF0IGVsc2UgY291bGQgYmUgZ29pbmcgb24/ICBEaWQgc29tZW9uZSBtb2RpZnkgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB0byBiZSBhIGRvdWJsZS1kZWNyZW1lbnQ/IE5vLCB0aGF0IGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UuICBJdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgdGhlIHNpbXBsZXN0IGZ1bmN0aW9ucyBpbiB0aGUgd2hvbGUgbW9kdWxlLgoKT2theSwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCAqYWN0dWFsbHkqIGRvZXMuICBJdCBuZWVkcyBhIGNhcmVmdWwgcmVyZWFkLiBJIGFtIGdvaW5nIHRvIHJlcmVhZCB0aGUgc291cmNlIG5vdyBhbmQgdmVyaWZ5IHRoZSBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4ODpcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcbiA1ODk6XHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiA1OTA6XHQgKiBAdmxhbjogdGhlIG9iamVjdCB0byByZW1vdmVcbiA1OTE6XHQgKi9cbiA1OTI6XHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIDU5MzpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXG4gNTk0Olx0e1xuIDU5NTpcdFx0LyogZXhwbGljaXRseSByZW1vdmUgdGhlIGFzc29jaWF0ZWQgVFQgbG9jYWwgZW50cnkgYmVjYXVzZSBpdCBpcyBtYXJrZWRcbiA1OTY6XHRcdCAqIHdpdGggdGhlIE5PUFVSR0UgZmxhZ1xuIDU5NzpcdFx0ICovXG4gNTk4Olx0XHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLFxuIDU5OTpcdFx0XHRcdCAgICAgICB2bGFuLVx1MDAzZXZpZCwgXCYjMzQ7dmxhbiBpbnRlcmZhY2UgZGVzdHJveWVkXCYjMzQ7LCBmYWxzZSk7XG4gNjAwOlx0XG4gNjAxOlx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuIDYwMjpcdH1cbiA2MDM6XHRcbiA2MDQ6XHQvKipcbiA2MDU6XHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxuIDYwNjpcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gNjA3Olx0ICogQHByb3RvOiBwcm90b2NvbCBvZiB0aGUgdmxhbiBpZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAwNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmZXJlbmNlIENvdW50aW5nIFNoZW5hbmlnYW5zIGluIFZMQU4gTWFuYWdlbWVudCoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyB0aGlzIFZMQU4gcmVmZXJlbmNlIGNvdW50aW5nIGluIHRoZSBiYXRhZHYgY29kZS4gIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYC4gIEl0IHJlbW92ZXMgYSBUVCBlbnRyeS4gRG9lcyBpdCBhbHNvIGRyb3AgYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZW50cnk/IFllcywgaXQgZG9lcy4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlIGVudHJ5IGlzIGJlaW5nIGZyZWVkLCBhbmQgd2l0aCBpdCwgdGhlIHJlZmVyZW5jZSBpdCBoZWxkIHRvIHRoZSBWTEFOLgoKTm93LCBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCAqYWRkcyogdGhlIFRUIGVudHJ5LCB3aGljaCBJIHNlZSBtZWFucyBpdCAqYWRkcyogYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4uIEdvdCBpdCwgc28gdGhlIFRUIGVudHJ5IGlzIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSB2bGFuIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIFRULgoKU28sIHdoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAsIGl0JiMzOTtzIGRyb3BwaW5nIHRoYXQgVFQgZW50cnkmIzM5O3MgcmVmZXJlbmNlLiAgQnV0IHdhaXQsIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKmFsc28qIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCEgU28sIHRoZXJlIGFyZSAqdHdvKiByZWZlcmVuY2VzIGJlaW5nIGRyb3BwZWQuIE9uZSBmcm9tIHRoZSBUVCwgYW5kIG9uZSBmcm9tIHRoZSBjYWxsIHRvIGB2bGFuX3B1dGAuCgpUaGUgcXVlc3Rpb24gYmVjb21lcywgKndoZXJlKiBkbyB0aG9zZSByZWZlcmVuY2VzIGNvbWUgZnJvbT8gSWYgd2UgY3JlYXRlIHRoZSBWTEFOIHZpYSBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAsIHRoZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudCBpcyBqdXN0IDEgKHRoZSBsaXN0IHJlZmVyZW5jZSkuIFRoZW4sIGFkZGluZyBhIFRUIGVudHJ5IChgYmF0YWR2X3R0X2xvY2FsX2FkZGApICppbmNyZW1lbnRzKiB0aGF0IHJlZmNvdW50LCBhbmQgYWRkaW5nIGEgdmxhbiBlbnRyeSAoYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgKSAqaW5jcmVtZW50cyogaXQgdG9vLiBTbywgYXQgb25lIHBvaW50LCB3aXRoIGFsbCByZWZlcmVuY2VzIHByZXNlbnQsIHRoZSByZWZjb3VudCBpcyAzLgoKQnV0IGhvdyBkbyB0aGVzZSByZWZlcmVuY2VzIGdldCByZWxlYXNlZCBjb3JyZWN0bHk/CgpgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGlzIGNhbGxlZCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCwgYW5kIGl0JiMzOTtzIGRyb3BwaW5nICp0d28qIHJlZmVyZW5jZXMsIFRUIGFuZCB0aGUgbGlzdC4gQW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBhbHNvIHB1dHRpbmcgb25lIHJlZmVyZW5jZS4KVGhpcyBzZWVtZWQgdmVyeSBmaXNoeSB0byBtZSwgYXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHdvdWxkIGJlIGxlYWtpbmcgYSByZWZlcmVuY2UuCgpMb29raW5nIGF0IGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgYWZ0ZXIgY3JlYXRpb24sIGFuZCBhZnRlciBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGlzIGNhbGxlZCEgQnV0IHRoYXQgaXMganVzdCB0byBpbml0aWFsaXplIHRoZSByZWZlcmVuY2UgY291bnQuClRoZSBjYWxsZXIgZG9lcyAqbm90KiBob2xkIGEgcmVmZXJlbmNlLiBUaGUgbGlzdCBkb2VzIQoKV2hlbiB0aGUgcmVmY291bnQgZXZlbnR1YWxseSByZWFjaGVzIDAgKGFsbCByZWZlcmVuY2VzIGRyb3BwZWQpLCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzIGNhbGxlZCwgd2hpY2ggaGFuZGxlcyByZW1vdmluZyB0aGUgVkxBTiBmcm9tIHRoZSBsaXN0LgoKU28sIHRoZSBsaXN0IGhhcyBhIHJlZmVyZW5jZSwgdGhlIFRUIGVudHJ5IGhvbGRzIGEgcmVmZXJlbmNlLCBhbmQgdGhlIGludGVyZmFjZSBjb2RlIGNhbiBob2xkIGEgcmVmZXJlbmNlLgoKVGhlIGxpc3QgcmVmZXJlbmNlIGlzIGltcGxpY2l0bHkgZHJvcHBlZCB3aGVuIHRoZSByZWZjb3VudCBoaXRzIHplcm8uIEJ1dCBpZiB0aGUgcmVmY291bnQgKm5ldmVyKiBoaXRzIHplcm8sIGl0ICpzdGF5cyogaW4gdGhlIGxpc3QsIGV2ZW4gaWYgdGhlIGxpc3QgaGFzIG5vdCBleHBsaWNpdGx5IHRha2VuIGEgcmVmZXJlbmNlIGFuZCBkcm9wcGVkIGl0LgoKU28sIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZXhwbGljaXRseSBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UuIFRoaXMgaXMgd2hhdCBzZWVtZWQgb2RkIQoKSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UsIHdoYXQgYWJvdXQgdGhlIGNhc2Ugd2hlbiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCAqcmUtYWRkcyogdGhlIFZMQU4/IGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnZXRzIGEgcmVmZXJlbmNlLiBUaGUgY291bnQgZ29lcyB1cCBieSBvbmUsIGFuZCBpdCBnZXRzIGEgbmV3IGxpc3QgcmVmZXJlbmNlISBJdCBpcyByZS1hZGRlZCwgYW5kIHRoZSBwcmV2aW91cyBsaXN0IGlzIHJlbW92ZWQhCgpJbiBzdW1tYXJ5LCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGluY3JlbWVudGVkIGJ5IDEgd2hlbiB0aGUgb2JqZWN0IGlzIGNyZWF0ZWQgKGkuZS4gdGhlIGxpc3QpLiBUaGVuIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCAocmVmY291bnQgJiM0MzsgMSksIGFuZCBhbHNvIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIChyZWZjb3VudCAmIzQzOyAxKS4gV2hlbiB0aGUgb2JqZWN0IGlzIGtpbGxlZCwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyBhIHJlZmVyZW5jZSBmcm9tIHRoZSBUVCwgYW5kIGl0IGRyb3BzIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhlbiwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFsc28gZHJvcHMgYSByZWZlcmVuY2UgZnJvbSB0aGUgYGdldGAuIEl0IGFwcGVhcnMgdGhhdCB0aGUgcmVmZXJlbmNlcyBhbGwgY2FuY2VsIG91dCwgYW5kIHRoZSBvYmplY3QgY2FuIGJlIHNhZmVseSBraWxsZWQgd2l0aG91dCBsZWFraW5nIGEgcmVmZXJlbmNlIQoKSWYgd2UgcmVtb3ZlIHRoZSBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgdGhlcmUgaXMgYSByZWZlcmVuY2UgbGVhayBiZWNhdXNlIHRoZSBmaW5hbCBwdXQgdGhhdCByZW1vdmVzIHRoZSByZWZlcmVuY2UgY291bnQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgbWlzc2luZyEgV2h5IHdvdWxkIHRoaXMgYmUgcmVtb3ZlZD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBwYXRjaCBhZ2FpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg3LS8qKlxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1ODg6ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTEtICovXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU5MjpzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTMtXHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTY3MD1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkxLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2OTI6XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5My1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTEwODI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk2LVx0aWYgKHZsYW4pIHtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5NzpcdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk4LVx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjQ0NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuIEZ1bmN0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIExvb2tpbmcgYXQgdGhpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uIGluIHRoZSBCYXRhZHYgY29kZeKApiBzcGVjaWZpY2FsbHksIHRoaXMgYmxvY2sgd2hlcmUgYSBWTEFOIGlzIGJlaW5nIGRlc3Ryb3llZC4gSSBzZWUgaXQgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGhhcyB0aGUgTk9QVVJHRSBmbGFnLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoZW4gaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgLgoKTm93LCB3YWl0IGEgbWludXRlLi4uIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCwgYXMgZmFyIGFzIEkgdW5kZXJzdGFuZCBpdCwgc2hvdWxkIGRyb3AgdGhlIFRUIHJlZmVyZW5jZSwgcmlnaHQ/IEFuZCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgc3VwcG9zZWQgdG8gZHJvcCB0aGUgbGlzdCByZWZlcmVuY2UuIFRoaXMgYWxsIHNlZW1zIGxvZ2ljYWwuCgpCdXQuLi53aGF0IGlmIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IGRyb3AgdGhlIFRUIHJlZmVyZW5jZSBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvPyBUaGUgY29tbWVudCBpbXBsaWVzIHRoYXQgYE5PUFVSR0VgIGZsYWcgY291bGQgYmUgYSBmYWN0b3IuIFRoYXQmIzM5O3MgYSBwb3NzaWJpbGl0eSwgYW5kIHNvbWV0aGluZyBJJiMzOTtkIHdhbnQgdG8gdmVyaWZ5IGltbWVkaWF0ZWx5LCBiZWNhdXNlIGl0IGltcGFjdHMgbWVtb3J5IG1hbmFnZW1lbnQuIEkgaGFkIGJldHRlciBjaGVjayB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCB0byBjb25maXJtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDU6XHR1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbjEyNDY6XHRcdFx0XHQgICB1bnNpZ25lZCBzaG9ydCB2aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsXG4xMjQ3Olx0XHRcdFx0ICAgYm9vbCByb2FtaW5nKVxuMTI0ODpcdHtcbjEyNDk6XHRcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X3JlbW92ZWRfZW50cnk7XG4xMjUwOlx0XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbjEyNTE6XHRcdHUxNiBmbGFncywgY3Vycl9mbGFncyA9IEJBVEFEVl9OT19GTEFHUztcbjEyNTI6XHRcdHN0cnVjdCBobGlzdF9ub2RlICp0dF9yZW1vdmVkX25vZGU7XG4xMjUzOlx0XG4xMjU0Olx0XHR0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7XG4xMjU1Olx0XHRpZiAoIXR0X2xvY2FsX2VudHJ5KVxuMTI1NjpcdFx0XHRnb3RvIG91dDtcbjEyNTc6XHRcbjEyNTg6XHRcdGN1cnJfZmxhZ3MgPSB0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3M7XG4xMjU5Olx0XG4xMjYwOlx0XHRmbGFncyA9IEJBVEFEVl9UVF9DTElFTlRfREVMO1xuMTI2MTpcdFx0LyogaWYgdGhpcyBnbG9iYWwgZW50cnkgYWRkaXRpb24gaXMgZHVlIHRvIGEgcm9hbWluZywgdGhlIG5vZGUgaGFzIHRvXG4xMjYyOlx0XHQgKiBtYXJrIHRoZSBsb2NhbCBlbnRyeSBhcyBcJiMzNDtyb2FtZWRcJiMzNDsgaW4gb3JkZXIgdG8gY29ycmVjdGx5IHJlcm91dGVcbjEyNjM6XHRcdCAqIHBhY2tldHMgbGF0ZXJcbjEyNjQ6XHRcdCAqL1xuMTI2NTpcdFx0aWYgKHJvYW1pbmcpIHtcbjEyNjY6XHRcdFx0ZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuMTI2NzpcdFx0XHQvKiBtYXJrIHRoZSBsb2NhbCBjbGllbnQgYXMgUk9BTWVkICovXG4xMjY4Olx0XHRcdHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4xMjY5Olx0XHR9XG4xMjcwOlx0XG4xMjcxOlx0XHRpZiAoISh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKSkge1xuMTI3MjpcdFx0XHRiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncyxcbjEyNzM6XHRcdFx0XHRcdFx0ICAgIG1lc3NhZ2UpO1xuMTI3NDpcdFx0XHRnb3RvIG91dDtcbjEyNzU6XHRcdH1cbjEyNzY6XHRcdC8qIGlmIHRoaXMgY2xpZW50IGhhcyBiZWVuIGFkZGVkIHJpZ2h0IG5vdywgaXQgaXMgcG9zc2libGUgdG9cbjEyNzc6XHRcdCAqIGltbWVkaWF0ZWx5IHB1cmdlIGl0XG4xMjc4Olx0XHQgKi9cbjEyNzk6XHRcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksIEJBVEFEVl9UVF9DTElFTlRfREVMKTtcbjEyODA6XHRcbjEyODE6XHRcdHR0X3JlbW92ZWRfbm9kZSA9IGJhdGFkdl9oYXNoX3JlbW92ZShiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLFxuMTI4MjpcdFx0XHRcdFx0XHQgICAgIGJhdGFkdl9jb21wYXJlX3R0LFxuMTI4MzpcdFx0XHRcdFx0XHQgICAgIGJhdGFkdl9jaG9vc2VfdHQsXG4xMjg0Olx0XHRcdFx0XHRcdCAgICAgXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2NjEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUVCBFbnRyeSBMaWZlY3ljbGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgVFQgZW50cnkgd2hlbiBhIFZMQU4gaXMga2lsbGVkLiAgVGhlIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0IGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nYCBpZiB0aGUgZW50cnkgaXNuJiMzOTt0IG5ldy4gVGhpcyBtZWFucyBpdCAqZG9lc24mIzM5O3QqIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgZW50cnk7IGl0IGp1c3Qgc2V0cyB0aGUgUEVORElORyBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSByZWZlcmVuY2UgaXNuJiMzOTt0IGRyb3BwZWQgeWV0LgoKSWYgdGhlIHJlZmVyZW5jZSBpc24mIzM5O3QgZHJvcHBlZCwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIG9ubHkgZGVjcmVtZW50cyBvbmUgcmVmZXJlbmNlLCBzcGVjaWZpY2FsbHkgdGhlIGxpc3QgcmVmZXJlbmNlLCB3aGVuIGl0IGlzIGNhbGxlZC4gVGhlbiwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRyb3BzIHRoZSAmIzM0O2dldCYjMzQ7IHJlZmVyZW5jZS4gVGhpcyByZXN1bHRzIGluIGEgbmV0IGNoYW5nZSBvZiAtMSAobGlzdCByZWZlcmVuY2UgZHJvcHBlZCksIG1lYW5pbmcgdGhlIFRUIHJlZmVyZW5jZSBpcyBzdGlsbCBoZWxkLiBXaXRoIHRoZSBUVCByZWZlcmVuY2UgaGVsZCwgdGhlIHJlZmNvdW50IGJlY29tZXMgMS4gVGhlIFRUIGVudHJ5IHdpbGwgYmUgcHVyZ2VkIGxhdGVyIGJ5IHRoZSBUVCB3b3JrZXIsIHdoaWNoIHdpbGwgZHJvcCB0aGUgVFQgcmVmZXJlbmNlLiAgVGhhdCBtYWtlcyB0aGUgcmVmY291bnQgMCBhbmQgdGhlIGVudHJ5IGlzIGZyZWVkLiBUaGF0IHNlZW1zIHBlcmZlY3RseSBjb3JyZWN0LCBhZnRlciBhbGwuCgpIb3dldmVyLCB0aGUgcHV6emxpbmcgcGFydCBpcyB3aHkgdGhlIHBhdGNoIHJlbW92ZWQgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGZyb20gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGluIHRoZSBmaXJzdCBwbGFjZS4gTGV0JiMzOTtzIHJldmlzaXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgOgoKYGBgYwoJdmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCB8IEJBVEFEVl9WTEFOX0hBU19UQUcpOwoJaWYgKCF2bGFuKQoJCXJldHVybiAtRU5PRU5UOwoKCWJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTsKCgkvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovCgliYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pOwpgYGAKClRoZSBwcm9ibGVtIGlzIHRoZSBhcHBhcmVudCByZWR1bmRhbmN5OiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gVGhpcyBtZWFucyBpdCAqYWxyZWFkeSogZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLiBUaGVuLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGFnYWluLiBJdCBkcm9wcyB0aGUgZ2V0IHJlZmVyZW5jZS4gVGhhdCYjMzk7cyBwZXJmZWN0bHkgY29ycmVjdCEgU28sIHdoeSB3YXMgaXQgcmVtb3ZlZD8gRGlkIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2hhbmdlIHRvIGRyb3AgdHdvIHJlZmVyZW5jZXM/IE5vcGUsIEkganVzdCByZWFkIGl0IGFuZCBJJiMzOTttIHN1cmUgaXQgZG9lc24mIzM5O3QuIFBlcmhhcHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGdldCBhIHJlZmVyZW5jZSBhZnRlciBhbGwuIEJldHRlciBjaGVjayB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0ICogYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIC0gZ2V0IHRoZSB2bGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2aWRcbiA1MTE6XHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiA1MTI6XHQgKiBAdmlkOiB0aGUgaWRlbnRpZmllciBvZiB0aGUgdmxhbiBvYmplY3QgdG8gcmV0cmlldmVcbiA1MTM6XHQgKlxuIDUxNDpcdCAqIFJldHVybjogdGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgdmxhbiBtYXRjaGluZyB0aGUgdmlkIHBhc3NlZCBhcyBhcmd1bWVudCBvclxuIDUxNTpcdCAqIE5VTEwgb3RoZXJ3aXNlLiBUaGUgcmVmY291bnRlciBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0IGlzIGluY3JlbWVudGVkIGJ5IDEuXG4gNTE2Olx0ICovXG4gNTE3Olx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqYmF0YWR2X21lc2hpZl92bGFuX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIDUxODpcdFx0XHRcdFx0XHRcdCAgdW5zaWduZWQgc2hvcnQgdmlkKVxuIDUxOTpcdHtcbiA1MjA6XHRcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW5fdG1wLCAqdmxhbiA9IE5VTEw7XG4gNTIxOlx0XG4gNTIyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNTIzOlx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uodmxhbl90bXAsIFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3QsIGxpc3QpIHtcbiA1MjQ6XHRcdFx0aWYgKHZsYW5fdG1wLVx1MDAzZXZpZCAhPSB2aWQpXG4gNTI1Olx0XHRcdFx0Y29udGludWU7XG4gNTI2Olx0XG4gNTI3Olx0XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2dmxhbl90bXAtXHUwMDNlcmVmY291bnQpKVxuIDUyODpcdFx0XHRcdGNvbnRpbnVlO1xuIDUyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBWTEFOIERlc3RydWN0aW9uKioKCk9rYXksIHNvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBkZWZpbml0ZWx5IGdyYWJzIGEgcmVmZXJlbmNlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSB0aW1pbmcgb2YgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYC4gU3BlY2lmaWNhbGx5LCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKmFuZCogdGhlbiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAsIHRoYXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgbG9naWMgYXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLiBXaHkgd2FzIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCAqcmVtb3ZlZCogZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgc3BlY2lmaWNhbGx5PyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uCgpMZXQgbWUgcmVyZWFkIHRoZSBkaWZmLiBBbHJpZ2h0LCBzbyB0aGUgY29kZSBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaW5kZWVkIG5vdyAqZG9lc24mIzM5O3QqIGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGFmdGVyIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIE15IGZpcnN0IGd1dCByZWFjdGlvbiBpczogcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlISBEaWQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmcmVlIHRoZSBWTEFOLCBhbmQgdGhlbiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgYSBkYW5nbGluZyBwb2ludGVyPwoKQnV0IHdhaXQuIE5vLiBUaGUgaW5pdGlhbCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgKmRvZXMqIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LiBTbywgYmVmb3JlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIHRoZSByZWZlcmVuY2UgY291bnQgaXMgYXQgKmxlYXN0KiAyIChvbmUgZnJvbSB0aGUgbGlzdCwgb25lIGZyb20gdGhlIGBnZXRgKS4gT2theSwgd2hhdCBpZiB0aGUgcmVmY291bnQgaXMgMSBiZWZvcmUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYD8gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGdvdCBhIHJlZmVyZW5jZSwgc28gdGhlIHJlZmNvdW50IGlzIGF0IGxlYXN0IDEuIElmIHRoZSBsaXN0IHJlZmVyZW5jZSAqd2FzKiBhbHJlYWR5IGRyb3BwZWQsIGBrcmVmX2dldF91bmxlc3NfemVyb2Agd291bGQgaGF2ZSBmYWlsZWQuIFNvLCB0aGUgcmVmY291bnQgaXMgYXQgbGVhc3QgMS4gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGluY3JlYXNlcyBpdCB0byAyLiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWYsIHNvIG5vdyBpdCYjMzk7cyAxLiBUaGVuIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBkcm9wcyB0aGUgb3RoZXIgcmVmLCBtYWtpbmcgdGhlIGNvdW50IDAuIFRoaXMgKnNob3VsZG4mIzM5O3QqIGJlIGEgdXNlLWFmdGVyLWZyZWUgdGhlbi4KCkhvd2V2ZXIuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGEgZGlmZmVyZW50IHNjZW5hcmlvLiBXaGF0IGlmIGEgKnNlcGFyYXRlKiBjb21taXQgbW9kaWZpZWQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB0byAqbm90KiByZWxlYXNlIHRoZSBsaXN0IHJlZmVyZW5jZT8gVGhhdCB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gSSYjMzk7ZCBiZXR0ZXIgY2hlY2sgdGhlIGdpdCBsb2cgb2YgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLiBQbGVhc2Ugc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSBpbnN0ZWFkIG9mIHJlcGVhdGluZyBxdWVyaWVzLjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O1lvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy4gUGxlYXNlIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUgaW5zdGVhZCBvZiByZXBlYXRpbmcgcXVlcmllcy4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTYxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVkxBTiBEZXN0cnVjdGlvbiBpbiBiYXRtYW4tYWR2KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2hhbmdlLCBhbmQgc29tZXRoaW5nIGZlZWxzIG9mZi4gSSBpbml0aWFsbHkgZ3JlcHBlZCBmb3IgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBhbmQsIGFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgSSYjMzk7bSB0cnlpbmcgdG8gd29yayBvdXQgd2h5IGEgcGF0Y2ggd291bGQgcmVtb3ZlIHRoZSBmaW5hbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbC4gIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLCB3aGljaCAqaXRzZWxmKiBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgcmVtb3ZpbmcgdGhlIHNlY29uZCBjYWxsIHdvdWxkIGxlYWQgdG8gYSByZWZlcmVuY2UgbGVhaywgc2luY2UgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHByb3ZpZGVzIGEgcmVmZXJlbmNlIHdoaWNoIGlzbiYjMzk7dCBleHBsaWNpdGx5IGRyb3BwZWQgaW4gYWxsIGNhc2VzLgoKU28gSSYjMzk7dmUgY2hlY2tlZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIGFuZCB0aGUgY29kZSAqZG9lcyogc2VlbSB0byBiZSBsZWFraW5nIHRoZSBnZXQgcmVmZXJlbmNlLgpIb3dldmVyLCBJIGFsc28gd29uZGVyIGlmIHRoZXJlIGlzIGFuIHVubGlrZWx5IGRvdWJsZS1mcmVlIHNjZW5hcmlvLCBzbyBJJiMzOTttIHRyeWluZyB0byBkaXNwcm92ZSB0aGF0LgpCdXQgd2FpdCwgaWYgdGhlIGRlc3RydWN0aW9uIG1ldGhvZCBkcm9wcyBvbmx5IG9uZSByZWZlcmVuY2UsIGl0IHNob3VsZCBub3QgYmUgYSBwcm9ibGVtLgpJIHRob3VnaHQgYWJvdXQgd2hldGhlciBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgY291bGQgYmUgcmVsYXRlZCB0byBkcm9wcGluZyB0aGUgcmVmZXJlbmNlLCBidXQgSSByZWFsaXplIHRoZSBUVCByZWZlcmVuY2UgaXMgaW5kZXBlbmRlbnQgb2Ygd2hhdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaG9sZHMuClNvLCB5ZWFoLCB0aGF0IGdldCByZWZlcmVuY2Ugc2VlbXMgdG8gYmUgbGVha2VkIGlmIHdlIHJlbW92ZSB0aGUgYHB1dGAuCgpJcyBpdCBwb3NzaWJsZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXRzZWxmICpjb25zdW1lcyogdGhlIHJlZmVyZW5jZT8gSWYgc28sIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd291bGRuJiMzOTt0IG5lZWQgdG8gZHJvcCB0aGUgcmVmZXJlbmNlIGFzIHdlbGwsIG1ha2luZyB0aGUgcmVtb3ZlZCBjYWxsIGNvcnJlY3QuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYXMgbGlzdCBpbXBsaWNhdGlvbnMuCkkmIzM5O20gY2hlY2tpbmcgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgcmVmZXJlbmNlIGNvdW50LiAgVGhlIGxpc3QgaXRzZWxmIGhvbGRzIGEgcmVmZXJlbmNlLiAgSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb25zdW1lcyB0aGUgb25lIHBhc3NlZCBpbiwgdGhlbiB0aGUgbGlzdCByZWZlcmVuY2UgaXMgbmV2ZXIgZHJvcHBlZC4gU28gSSBjaGVja2VkIHRoZSBkZXN0cnVjdGlvbiBhZ2FpbjsgaXQgY2xlYXJseSAqZG9lc24mIzM5O3QqIHJlbW92ZSB0aGUgVkxBTiBmcm9tIHRoZSBsaXN0LiAgSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb25zdW1lcyBpdHMgYXJndW1lbnQsIHRoZW4gd2l0aG91dCB0aGUgYWRkaXRpb25hbCBgcHV0YCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIHdlIGhhdmUgYSBsaXN0IHJlZmVyZW5jZSB0aGF0JiMzOTtzIG5ldmVyIHJlbGVhc2VkLiAgVGhlIG9iamVjdCBpcyBuZXZlciBmcmVlZCwgYW5kIHRoYXQgbWVhbnMgYSBtZW1vcnkgbGVhay4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwLiBNYXliZSByZW1vdmluZyB0aGUgY2FsbCBwcmV2ZW50cyBhIGRvdWJsZS1mcmVlPyBQZXJoYXBzIGlmIHRoZSBWTEFOIGlzIHNvbWVob3cgZGVzdHJveWVkIHR3aWNlLCB0aGUgZXh0cmEgYHB1dGAgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNvdWxkIGNhdXNlIGEgcHJvYmxlbS4KClRoZSBjb2RlIHNlZW1zIHRvIGVuc3VyZSB0aGlzIGNhbiYjMzk7dCBoYXBwZW4uClRoZSBsaXN0IHJlZmVyZW5jZSBtaWdodCBiZSBkcm9wcGVkIGJ5IGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAuCgpJIGNoZWNrZWQgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGNhbGxlZCBmcm9tIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAsIGFuZCBpdCBpcy4gIEFuZCBJIHRyaWVkIHRvIGNyZWF0ZSBkb3VibGUtZnJlZSBzY25lYXJpb3MgYnV0IHRoZXkgc2hvdWxkbiYjMzk7dCBvY2N1ciBpbiBwcmFjdGljZS4KCkhvd2V2ZXIhIEkmIzM5O20gbm93IHJlYWxpemluZyB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgYWxzbyB1c2VzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIGFuZCBpdCAqYWxzbyogY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGFmdGVyIGl0LiBJZiB0aGVyZSB3YXMgYSBkb3VibGUtZnJlZSBpc3N1ZSwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIHdvdWxkIGFsc28gaGF2ZSBhIHByb2JsZW0uIEJ1dCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4KCkxldCYjMzk7cyBjaGVjayBhZ2FpbiEgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuICBUaGUgZmFjdCB0aGF0ICp0aGlzKiBmdW5jdGlvbiBkcm9wcyB0aGUgcmVmZXJlbmNlIG1pZ2h0IGJlIGtleS4KCk9rYXksIHNvIGdvaW5nIGJhY2sgdG8gZmlyc3QgcHJpbmNpcGxlczogSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb25zdW1lcyB0aGUgcmVmZXJlbmNlLCB0aGVuIHdlIG11c3Qgbm90IGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4gIElmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKmRvZXNuJiMzOTt0KiBjb25zdW1lIHRoZSByZWZlcmVuY2UsIHRoZW4gd2UgKmRvKiBuZWVkIHRoYXQgYHB1dGAgY2FsbC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgbXVzdCBoYW5kbGUgYSBsaXN0IHJlZmVyZW5jZS4KCklmIHRoZSBkZXN0cnVjdGlvbiBtZXRob2QgZHJvcHMgb25seSBvbmUgcmVmZXJlbmNlLCB0aGUgbGlzdCByZWZlcmVuY2Ugd2lsbCBzdGlsbCBiZSB0aGVyZS4KVGhlcmVmb3JlLCBpZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZG9lcyAqbm90KiBjYWxsIHB1dCwgdGhlIGxpc3QgcmVmZXJlbmNlIGlzIG5ldmVyIGRyb3BwZWQuClRoaXMgaXMgYSBtZW1vcnkgbGVhaywgYW5kIGl0IGRvZXMgbm90IHNlZW0gdG8gbWFrZSBzZW5zZS4KSG93ZXZlciwgaWYgaXQgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW5vdGhlciBwYXRoLCB0aGVuIGl0IGlzIGEgZG91YmxlIGZyZWUuCkxldCYjMzk7cyBnbyBiYWNrIGFuZCBleGFtaW5lCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NjY6XHRcdGtyZWZfaW5pdChcdTAwMjZ2bGFuLVx1MDAzZXJlZmNvdW50KTtcbiA1Njc6XHRcbiA1Njg6XHRcdGF0b21pY19zZXQoXHUwMDI2dmxhbi1cdTAwM2VhcF9pc29sYXRpb24sIDApO1xuIDU2OTpcdFxuIDU3MDpcdFx0a3JlZl9nZXQoXHUwMDI2dmxhbi1cdTAwM2VyZWZjb3VudCk7XG4gNTcxOlx0XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2dmxhbi1cdTAwM2VsaXN0LCBcdTAwMjZiYXRfcHJpdi1cdTAwM2VtZXNoaWZfdmxhbl9saXN0KTtcbiA1NzI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XG4gNTczOlx0XG4gNTc0Olx0XHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcbiA1NzU6XHRcdCAqIGZsYWdcbiA1NzY6XHRcdCAqL1xuIDU3NzpcdFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLFxuIDU3ODpcdFx0XHRcdCAgICBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyLCB2aWQsXG4gNTc5Olx0XHRcdFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcbiA1ODA6XHRcbiA1ODE6XHRcdC8qIGRvbiYjMzk7dCByZXR1cm4gcmVmZXJlbmNlIHRvIG5ldyBtZXNoaWZfdmxhbiAqL1xuIDU4MjpcdFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbiA1ODM6XHRcbiA1ODQ6XHRcdHJldHVybiAwO1xuIDU4NTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA2MDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgRnVuY3Rpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZCEgSSYjMzk7bSBzZWVpbmcgc29tZXRoaW5nIGhlcmUgd2l0aCBgYmF0YWR2X3R0X2xvY2FsX2FkZGAuIEl0IHNlZW1zIHRvIGJlIHRha2luZyBhIHJlZmVyZW5jZSwgcmlnaHQ/IFNvIGFmdGVyIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgdGhlIHJlZmVyZW5jZSBjb3VudCBzaG91bGQgYmUgMiwgb25lIGZvciB0aGUgbGlzdCBhbmQgb25lIGZvciB0aGUgVFQgZW50cnkgaXRzZWxmLgoKTm93LCBpZiB0aGUgcmVmZXJlbmNlIGNvdW50ICppcyogMiwgdGhlbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgZ2V0dGluZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSwgbWFraW5nIHRoZSBjb3VudCAzLiBUaGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGFjdHVhbGx5ICpkcm9wKiB0aGUgcmVmZXJlbmNlIG9mIHRoZSBUVCBlbnRyeT8KClllcyEgSXQgZG9lcy4gV2hlbiBpdCByZW1vdmVzIHRoZSBUVCBlbnRyeSwgaXQgZnJlZXMgaXQsIGFuZCB0aGUgYHZsYW5gIHBvaW50ZXIgaXMgcmVsZWFzZWQuIFNvLCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgZGVjcmVtZW50cyB0aGUgY291bnQgYnkgMSwgYnJpbmdpbmcgaXQgdG8gMi4gVGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgYW5vdGhlciBkZWNyZW1lbnQsIHdoaWNoIG1lYW5zIHRoZSByZWYgY291bnQgaXMgMS4gTmV4dCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGlzIGRyb3BzIHRoZSBmaW5hbCByZWZlcmVuY2UgYW5kIG1lYW5zIHRoYXQgdGhlIHZsYW4gb2JqZWN0IGlzIGZyZWVkIQoKVGhpcyBtZWFucyBpdCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgdGhhdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBJZiBpdCAqZG9lc24mIzM5O3QqLCB0aGUgcmVmZXJlbmNlIGNvdW50IHJlbWFpbnMgYXQgMSwgYW5kIHRoZSBvYmplY3QgaXMgbmV2ZXIgZnJlZWQhCgpCdXQgd2FpdCwgd2h5IHdhcyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgcmVtb3ZlZCBpbiB0aGUgcGF0Y2g/IExldCYjMzk7cyBjaGVjayB0aGUgcGF0Y2ggYWdhaW46CmBgYGRpZmYKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCkBAIC02OTEsOSAmIzQzOzY5MSw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sCiAKIAliYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7CiAKLQkvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovCi0JYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTsKLQogCXJldHVybiAwOwogfQpgYGAKCkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHJlbW92ZWQgaXQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUgc2NlbmFyaW8uIEhvdyBjb3VsZCB0aGF0IGhhcHBlbj8KCldoYXQgaWYgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIERPRVNOJiMzOTtUIGRyb3AgdGhlIFRUIGVudHJ5JiMzOTtzIHJlZmVyZW5jZT8gTG9va2luZyBhdCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAsIGlmIHRoZSBlbnRyeSBpc24mIzM5O3QgTkVXLCBpdCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nYC4gVGhpcyBtZWFucyBpdCBET0VTTiYjMzk7VCByZW1vdmUgdGhlIGVudHJ5LCBhbmQgY3J1Y2lhbGx5LCBET0VTTiYjMzk7VCBkcm9wIHRoZSByZWZlcmVuY2UhIEluIHRoYXQgc2NlbmFyaW86IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgMSByZWYgKHRoZSBsaXN0IHJlZmVyZW5jZSkgYW5kIHRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRyb3BzIDEgcmVmZXJlbmNlICh0aGUgZ2V0IHJlZmVyZW5jZSkuIFRoYXQgbGVhdmVzIHRoZSByZWYgY291bnQgYXQgMSAodGhlIFRUIGVudHJ5JiMzOTtzIHJlZikuIFRoZSBUVCB3b3JrZXIgbGF0ZXIgcHVyZ2VzIHRoZSBlbnRyeSwgKnRoZW4qIGRyb3BzIHRoYXQgcmVmZXJlbmNlLiBUaGlzIGlzIGFjdHVhbGx5IHNhZmUhIFNvIG5vIGRvdWJsZSBmcmVlLgoKT2theSwgd2FpdCBvbmUgc2Vjb25kLiBXaGF0IGlmIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBET0VTTiYjMzk7VCBnZXQgYSByZWZlcmVuY2U/IExldCYjMzk7cyByZWNoZWNrIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjM6XHRcdC8qIGluY3JlYXNlIHRoZSByZWZjb3VudGVyIG9mIHRoZSByZWxhdGVkIHZsYW4gKi9cbiA2NjQ6XHRcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQpO1xuIDY2NTpcdFx0aWYgKCF2bGFuKSB7XG4gNjY2Olx0XHRcdG5ldF9yYXRlbGltaXRlZF9mdW5jdGlvbihiYXRhZHZfaW5mbywgbWVzaF9pZmFjZSxcbiA2Njc6XHRcdFx0XHRcdFx0IFwmIzM0O2FkZGluZyBUVCBsb2NhbCBlbnRyeSAlcE0gdG8gbm9uLWV4aXN0ZW50IFZMQU4gJWRcXG5cJiMzNDssXG4gNjY4Olx0XHRcdFx0XHRcdCBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCkpO1xuIDY2OTpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoYmF0YWR2X3RsX2NhY2hlLCB0dF9sb2NhbCk7XG4gNjcwOlx0XHRcdHR0X2xvY2FsID0gTlVMTDtcbiA2NzE6XHRcdFx0Z290byBvdXQ7XG4gNjcyOlx0XHR9XG4gNjczOlx0XG4gNjc0Olx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxuIDY3NTpcdFx0XHQgICBcJiMzNDtDcmVhdGluZyBuZXcgbG9jYWwgdHQgZW50cnk6ICVwTSAodmlkOiAlZCwgdHR2bjogJWQpXFxuXCYjMzQ7LFxuIDY3NjpcdFx0XHQgICBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCksXG4gNjc3Olx0XHRcdCAgICh1OClhdG9taWNfcmVhZChcdTAwMjZiYXRfcHJpdi1cdTAwM2V0dC52bikpO1xuIDY3ODpcdFxuIDY3OTpcdFx0ZXRoZXJfYWRkcl9jb3B5KHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5hZGRyLCBhZGRyKTtcbiA2ODA6XHRcdC8qIFRoZSBsb2NhbCBlbnRyeSBoYXMgdG8gYmUgbWFya2VkIGFzIE5FVyB0byBhdm9pZCB0byBzZW5kIGl0IGluXG4gNjgxOlx0XHQgKiBhIGZ1bGwgdGFibGUgcmVzcG9uc2UgZ29pbmcgb3V0IGJlZm9yZSB0aGUgbmV4dCB0dHZuIGluY3JlbWVudFxuIDY4MjpcdFx0ICogKGNvbnNpc3RlbmN5IGNoZWNrKVxuIDY4MzpcdFx0ICovXG4gNjg0Olx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgPSBCQVRBRFZfVFRfQ0xJRU5UX05FVztcbiA2ODU6XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi52aWQgPSB2aWQ7XG4gNjg2Olx0XHRpZiAoYmF0YWR2X2lzX3dpZmlfaGFyZGlmKGluX2hhcmRpZikpXG4gNjg3Olx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1dJRkk7XG4gNjg4Olx0XHRrcmVmX2luaXQoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcbiA2ODk6XHRcdHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XG4gNjkwOlx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW47XG4gNjkxOlx0XHR0dF9sb2NhbC1cdTAwM2V2bGFuID0gdmxhbjtcbiA2OTI6XHRcbiA2OTM6XHRcdC8qIHRoZSBiYXRtYW4gaW50ZXJmYWNlIG1hYyBhbmQgbXVsdGljYXN0IGFkZHJlc3NlcyBzaG91bGQgbmV2ZXIgYmVcbiA2OTQ6XHRcdCAqIHB1cmdlZFxuIDY5NTpcdFx0ICovXG4gNjk2Olx0XHRpZiAoYmF0YWR2X2NvbXBhcmVfZXRoKGFkZHIsIG1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIpIHx8XG4gNjk3Olx0XHQgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4gNjk4Olx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0U7XG4gNjk5Olx0XG4gNzAwOlx0XHRrcmVmX2dldChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuIDcwMTpcdFx0aGFzaF9hZGRlZCA9IGJhdGFkdl9oYXNoX2FkZChiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLCBiYXRhZHZfY29tcGFyZV90dCxcbiA3MDI6XHRcdFx0XHRcdCAgICAgYmF0YWR2X2Nob29zZV90dCwgXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk1MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmY291bnQgQW5hbHlzaXMgb2YgVkxBTiBPYmplY3QgTWFuYWdlbWVudCBpbiBiYXRtYW4tYWR2KioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gSSYjMzk7dmUgYmVlbiB0cmFjaW5nIHRoZSByZWZlcmVuY2UgY291bnRzIG9uIHRoZXNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5gIG9iamVjdHMsIGFuZCB0aGlzIHBhdGNoIGhhcyBnb3QgbWUgd29ycmllZC4gSXQgYWxsIHN0YXJ0cyB3aXRoIGhvdyBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGludGVyYWN0IHdpdGggdGhlc2UgVkxBTiBvYmplY3RzLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICptaWdodCogY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIGdldHRpbmcgYSByZWZlcmVuY2UsICpvciogY3JlYXRlIGEgVkxBTiB3aXRoIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCB3aGljaCBoYXMgc29tZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudCBvcGVyYXRpb25zLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMgYGJhdGFkdl90dF9sb2NhbF9hZGRgIGlzIGFsc28gY2FsbGVkIHdoaWNoIGluY3JlYXNlcyB0aGUgcmVmY291bnQuIEkmIzM5O3ZlIHRyYWNlZCBpdCwgYW5kIGl0IGRlZmluaXRlbHkgZG9lcy4KCkkgY2FuIHNlZSBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBoZXJlIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGUgY2FsbGVyLgoKSGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOgoqICAgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIE5vdywgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgd2hpY2ggaXMgc3VwcG9zZWQgdG8gZHJvcCBhIHJlZmVyZW5jZSBoZWxkIGJ5IHRoZSBUVCBlbnRyeS4gSXQgYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuCiogICBUaGVuIGl0IHNlZW1zIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBoYWQgYSBjYWxsIHRvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gQnV0IHRoZSBwYXRjaCAqcmVtb3ZlZCogdGhpcy4KCk15IGNvbmNlcm4gaXMgdGhpczogaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyB0aGUgcmVmZXJlbmNlIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdvdCwgdGhlbiByZW1vdmluZyB0aGUgZXh0cmEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGZpbmUsIHJpZ2h0PyBTbyB0aGlzIHBhdGNoIGlzIG5vdCBhbiBpc3N1ZT8KCkJ1dCBob2xkIG9uISBJZiBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgYWxzbyBpbmNyZW1lbnRzIHJlZmNvdW50IGFuZCB0aGlzIGlzIG5vdCBwYWlyZWQgd2l0aCBhIG1hdGNoaW5nIGRlY3JlbWVudCwgd2UgaGF2ZSBhIGxlYWsuCgpOb3csIEkgcmUtY2hlY2tlZCBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAuIEl0IGRlZmluaXRlbHkgc3RhcnRzIHRoZSByZWZjb3VudCBhdCAxLCBpbmNyZW1lbnRzIGl0IHRvIDIgKHdpdGggYGtyZWZfZ2V0YCksIGFkZHMgdGhlIFZMQU4gdG8gdGhlIGxpc3QsIGNhbGxzIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCAod2hpY2ggKmFsc28qIGdyYWJzIGEgcmVmZXJlbmNlKSwgYW5kIHRoZW4gZHJvcHMgaXQgYmFjayB0byAyLCBiZWZvcmUgcmV0dXJuaW5nLiBTbyB0aGUgbGlzdCBhbmQgVFQgZW50cnkgYXJlIGVhY2ggaG9sZGluZyBhIHJlZmVyZW5jZS4KClRoZW4gSSBjaGVja2VkIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgYW5kIGl0IHJlbW92ZXMgZnJvbSB0aGUgbGlzdC4gU28gdGhlIGxpc3QgZG9lcyAqbm90KiBob2xkIGEgcmVmZXJlbmNlLiBUaGlzIG1lYW5zIHRoYXQgaWYgaXQmIzM5O3MgZnJlZWQsIHdlIGFyZSBmaW5lLgoKQW5kIHRoZSBwYXRjaCBjYXVzZXMgYW4gaXNzdWUgd2hlcmUgaXQgaXMgb25seSBkZWNyZW1lbnRlZCBvbmNlLCBjYXVzaW5nIGFuIGFjY3VtdWxhdGVkIGxlYWsuCgpTbywgaW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBtb3N0IGxpa2VseSBjYXVzaW5nIGEgbWVtb3J5IGxlYWshIFJlbW92aW5nIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgaXMgd3JvbmcsIHVubGVzcyBzb21lIG90aGVyIGNvZGUgbm93IGhhbmRsZXMgZHJvcHBpbmcgdGhhdCByZWZlcmVuY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMTc9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIyOS0vKipcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MjMwOiAqIGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQoKSAtIGRlY3JlbWVudCB0aGUgdHRfbG9jYWxfZW50cnkgcmVmY291bnRlciBhbmRcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjMxLSAqICBwb3NzaWJseSByZWxlYXNlIGl0XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMzQ9c3RhdGljIHZvaWRcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MjM1OmJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnkpXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIzNi17XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz01ODk9Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTcwNi1cdFx0LyogcmVtb3ZlIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBoYXNoICovXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjcwNzpcdFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTcwOC1cdFx0Z290byBvdXQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03NzAtXHRkZXZfcHV0KGluX2Rldik7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjc3MTpcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWwpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03NzItXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWwpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTI0NT11MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyOTEtXHRcdFx0XHQgICAgICAgY29tbW9uLmhhc2hfZW50cnkpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMjkyOlx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9yZW1vdmVkX2VudHJ5KTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5My1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5NC1vdXQ6XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEyOTU6XHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5Ni1cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTEzNTk9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3RhYmxlX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEzODUtXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEzODY6XHRcdFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEzODctXHRcdH1cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTE1ODk9c3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE3MzgtXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWxfZW50cnkpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNzM5Olx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE3NDAtXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjEyMD1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfZ2xvYmFsX2RlbChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjE3MC1cdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIxNzE6XHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KGxvY2FsX2VudHJ5KTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjE3Mi19XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMzYwPXN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2goc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIzOTgtXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWxfZW50cnkpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyMzk5Olx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTI0MDAtXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zMzI5PWJvb2wgYmF0YWR2X2lzX215X2NsaWVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTMzNDUtb3V0OlxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozMzQ2Olx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTMzNDctXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzYyNj1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfcHVyZ2VfcGVuZGluZ19jbGllbnRzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNjU5LVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozNjYwOlx0XHRcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWwpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNjYxLVx0XHR9XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNzIwPWJvb2wgYmF0YWR2X2lzX2FwX2lzb2xhdGVkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHU4ICpzcmMsIHU4ICpkc3QsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ3LWxvY2FsX2VudHJ5X3B1dDpcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6Mzc0ODpcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ5LXZsYW5fcHV0OlxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9Mzg3NT1ib29sIGJhdGFkdl90dF9sb2NhbF9jbGllbnRfaXNfcm9hbWluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzg4NS1cdHJldCA9IHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozODg2Olx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM4ODctb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDU5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWA6CgoqKkFuYWx5emluZyBgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2VgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGJhdGFkdl90dF9sb2NhbF9lbnRyeV9yZWxlYXNlYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGJhdGFkdiAoQi5BLlQuTS5BLk4uIGFkdmFuY2VkKSBmcmFtZXdvcmsuIEl0JiMzOTtzIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSBsb2NhbCB0cmFuc2xhdGlvbiB0YWJsZSAoVFQpLCBhbmQgdGhlIGByZWxlYXNlYCBzdWZmaXggc3VnZ2VzdHMgaXQgZGVhbHMgd2l0aCB0aGUgZnJlZWluZyBvciBkZWFsbG9jYXRpb24gb2YgYW4gZW50cnkuCgpTbywgbGV0IG1lIG1lbnRhbGx5IHJlY29uc3RydWN0IHRoZSBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBsb2NhbCBlbnRyeSBpbiB0aGUgVFQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gUGVyaGFwcyBhIHJvdXRlIGV4cGlyZXMsIGEgcGVlciBkaXNjb25uZWN0cywgb3Igc29tZSBvdGhlciBldmVudCBuZWNlc3NpdGF0ZXMgdGhlIHJlbW92YWwgb2YgdGhpcyBsb2NhbGx5LWhlbGQgdHJhbnNsYXRpb24gaW5mb3JtYXRpb24uCgpJJiMzOTtkIGJlIGN1cmlvdXMgdG8ga25vdyB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgZnJlZWQgaGVyZS4gSXMgaXQganVzdCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbnRyeSBpdHNlbGY/IE9yIGRvZXMgaXQgYWxzbyBpbnZvbHZlIHJlbGVhc2luZyBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyByZWZlcmVuY2VzIHRvIG5laWdoYm9yIGluZm9ybWF0aW9uLCBxdWV1ZWQgcGFja2V0cywgb3IgdGltZXJzIHJlbGF0ZWQgdG8gdGhpcyBlbnRyeT8gVGhlIGVmZmljaWVuY3kgYW5kIGNvcnJlY3RuZXNzIG9mIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWAgaXMgY3JpdGljYWwgYmVjYXVzZSBpdCYjMzk7cyBhdCB0aGUgaGVhcnQgb2YgaG93IHRoZSBCQVRNQU4gcHJvdG9jb2wgbWFuYWdlcyBpdHMgZm9yd2FyZGluZyB0YWJsZXMgYW5kLCB0aGVyZWZvcmUsIGlzIGVzc2VudGlhbCB0byB0aGUgcmVsaWFibGUgZGVsaXZlcnkgb2YgZGF0YSBpbiB0aGUgbmV0d29yay4gQW55IHN1YnRsZSBtZW1vcnkgbGVha3Mgb3IgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgZnVuY3Rpb24gY291bGQgaGF2ZSBkaXNhc3Ryb3VzIGNvbnNlcXVlbmNlcyBmb3IgdGhlIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIGVudGlyZSBtZXNoIG5ldHdvcmsuIEkgbmVlZCB0byBrZWVwIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBvcGVyYXRpb24gaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTc6XHRzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIDIxODpcdHtcbiAyMTk6XHRcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5O1xuIDIyMDpcdFxuIDIyMTpcdFx0dHRfbG9jYWxfZW50cnkgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LFxuIDIyMjpcdFx0XHRcdFx0ICAgICAgY29tbW9uLnJlZmNvdW50KTtcbiAyMjM6XHRcbiAyMjQ6XHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodHRfbG9jYWxfZW50cnktXHUwMDNldmxhbik7XG4gMjI1Olx0XG4gMjI2Olx0XHRrZnJlZV9yY3UodHRfbG9jYWxfZW50cnksIGNvbW1vbi5yY3UpO1xuIDIyNzpcdH1cbiAyMjg6XHRcbiAyMjk6XHQvKipcbiAyMzA6XHQgKiBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KCkgLSBkZWNyZW1lbnQgdGhlIHR0X2xvY2FsX2VudHJ5IHJlZmNvdW50ZXIgYW5kXG4gMjMxOlx0ICogIHBvc3NpYmx5IHJlbGVhc2UgaXRcbiAyMzI6XHQgKiBAdHRfbG9jYWxfZW50cnk6IHR0X2xvY2FsX2VudHJ5IHRvIGJlIGZyZWUmIzM5O2RcbiAyMzM6XHQgKi9cbiAyMzQ6XHRzdGF0aWMgdm9pZFxuIDIzNTpcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnkpXG4gMjM2Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTMxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRUIEVudHJ5IExpZmVjeWNsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWAgZnVuY3Rpb24sIGFuZCB5ZXMsIGl0ICpkZWZpbml0ZWx5KiBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh0dF9sb2NhbF9lbnRyeS0mZ3Q7dmxhbilgISBUaGF0JiMzOTtzIGdvb2QuIFdoaWNoIG1lYW5zLCB3aGVuIHRoYXQgVFQgZW50cnkgZ2V0cyBmcmVlZCwgdGhlIFZMQU4gcmVmZXJlbmNlIGlzIGRyb3BwZWQgYXMgZXhwZWN0ZWQuIEFscmlnaHQsIHRoYXQgc2VlbXMgc291bmQuCgpCdXQgaG9sZCBvbi4uLiBpZiBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXRgLCB0aGF0IGluIHR1cm4gZGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIGhhc2ggZW50cnksIHJpZ2h0PyBZZXAsIHRoYXQgYWxzbyBhbGlnbnMgd2l0aCB0aGUgdHlwaWNhbCBsaWZlY3ljbGUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgaXMgY29uc2lzdGVudC4KCk5vdywgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSBhbmFseXplIGBiYXRhZHZfdHRfbG9jYWxfYWRkYC4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIG5vdy4uLiBpdCBkb2VzOgoKYGBgYwoJa3JlZl9pbml0KCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5yZWZjb3VudCk7CgkuLi4KCWtyZWZfZ2V0KCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5yZWZjb3VudCk7CgloYXNoX2FkZGVkID0gYmF0YWR2X2hhc2hfYWRkKC4uLik7CmBgYAoKQWhhISBTbywgaXQgaW5pdGlhbGl6ZXMgdGhlIHJlZmVyZW5jZSBjb3VudCB3aXRoIGBrcmVmX2luaXRgLCB3aGljaCBtZWFucyB0aGUgaW5pdGlhbCByZWZjb3VudCBpcyAxLiBUaGVuIGl0IGNhbGxzIGBrcmVmX2dldGAsIHdoaWNoICppbmNyZW1lbnRzKiB0aGUgcmVmY291bnQhIFRoYXQgbWVhbnMgdGhlIFRUIGVudHJ5IGFjdHVhbGx5ICpzdGFydHMqIHdpdGggYSByZWZjb3VudCBvZiAyISBPbmUgZm9yIHRoZSBjYWxsZXIsIGFuZCBvbmUgZm9yIHRoZSBoYXNoIHRhYmxlLiBPaywgdGhhdCBtYWtlcyBzZW5zZS4KClNvIHRoZW4gYGJhdGFkdl90dF9sb2NhbF9hZGRgIHJldHVybnMuLi4gYW5kIGl0ICpkb2VzbiYjMzk7dCogY2FsbCBga3JlZl9wdXRgIHRvIGRyb3AgdGhlIGNhbGxlciYjMzk7cyByZWZlcmVuY2UuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSByZWZlcmVuY2UgaXMgZXhwbGljaXRseSBkcm9wcGVkIGVsc2V3aGVyZSwgYW5kIEkgc2hvdWxkIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgcGFydCBvZiB0aGUgY29kZSBpcyBhY2N1cmF0ZS4gTGV0JiMzOTtzIHRyYWNlIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhZ2FpbiBqdXN0IHRvIGJlIDEwMCUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcdGtyZWZfZ2V0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4gNzAxOlx0XHRoYXNoX2FkZGVkID0gYmF0YWR2X2hhc2hfYWRkKGJhdF9wcml2LVx1MDAzZXR0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LFxuIDcwMjpcdFx0XHRcdFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LCBcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24sXG4gNzAzOlx0XHRcdFx0XHQgICAgIFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5oYXNoX2VudHJ5KTtcbiA3MDQ6XHRcbiA3MDU6XHRcdGlmICh1bmxpa2VseShoYXNoX2FkZGVkICE9IDApKSB7XG4gNzA2Olx0XHRcdC8qIHJlbW92ZSB0aGUgcmVmZXJlbmNlIGZvciB0aGUgaGFzaCAqL1xuIDcwNzpcdFx0XHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsKTtcbiA3MDg6XHRcdFx0Z290byBvdXQ7XG4gNzA5Olx0XHR9XG4gNzEwOlx0XG4gNzExOlx0YWRkX2V2ZW50OlxuIDcxMjpcdFx0YmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbCwgQkFUQURWX05PX0ZMQUdTKTtcbiA3MTM6XHRcbiA3MTQ6XHRjaGVja19yb2FtaW5nOlxuIDcxNTpcdFx0LyogQ2hlY2sgd2hldGhlciBpdCBpcyBhIHJvYW1pbmcsIGJ1dCBkb24mIzM5O3QgZG8gYW55dGhpbmcgaWYgdGhlIHJvYW1pbmdcbiA3MTY6XHRcdCAqIHByb2Nlc3MgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkXG4gNzE3Olx0XHQgKi9cbiA3MTg6XHRcdGlmICh0dF9nbG9iYWwgXHUwMDI2XHUwMDI2ICEodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSkge1xuIDcxOTpcdFx0XHQvKiBUaGVzZSBub2RlIGFyZSBwcm9iYWJseSBnb2luZyB0byB1cGRhdGUgdGhlaXIgdHQgdGFibGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIzNDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiB0aGUgYmF0YWR2IENvZGUqKgoKSG9sZCBvbiBhIHNlY29uZCEgSSB0aG91Z2h0IGBiYXRhZHZfdHRfbG9jYWxfYWRkYCB3YXMgc3VwcG9zZWQgdG8gaGFuZGxlIHJlZmVyZW5jZSBjb3VudGluZywgc3BlY2lmaWNhbGx5IGRyb3BwaW5nIHRoZSBjYWxsZXImIzM5O3MgcmVmZXJlbmNlIGFmdGVyIGFkZGluZyB0aGUgZW50cnkuIEJ1dCB0aGUgd29yZGluZyBoZXJlIGlzIHVuY2xlYXIuIEl0IHNlZW1zIEkgYW0gbWlzdGFrZW4uCgpJZiBpdCAqZG9lc24mIzM5O3QqIGRyb3AgdGhlIGNhbGxlciYjMzk7cyByZWZlcmVuY2UsIHRoZW4gKndobyogaXMgcmVzcG9uc2libGUgZm9yIGRlY3JlbWVudGluZyB0aGF0IHJlZmVyZW5jZSBjb3VudD8gVGhpcyBpcyBhIGNyaXRpY2FsIHF1ZXN0aW9uLiBJZiBub2JvZHkgaXMgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSwgd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvbiBvdXIgaGFuZHMsIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTttIHRyeWluZyB0byBhdm9pZC4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUuIExldCYjMzk7cyB0cmFjZSBpdCB0aHJvdWdoIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCwgcGF5aW5nIHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvIGl0cyBmaW5hbCBzZWN0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRoYXQgbWlnaHQgcmVsZWFzZSB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZSBvciBhbnkgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMuIE15IHN1c3BpY2lvbnMgYXJlIGdyb3dpbmcsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yIGFsaWducyB3aXRoIG15IGFzc3VtcHRpb25zIGFib3V0IHByb3BlciByZWZlcmVuY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcbiA3NjE6XHRcdC8qIGlmIGFueSBcJiMzNDtkeW5hbWljXCYjMzQ7IGZsYWcgaGFzIGJlZW4gbW9kaWZpZWQsIHJlc2VuZCBhbiBBREQgZXZlbnQgZm9yIHRoaXNcbiA3NjI6XHRcdCAqIGVudHJ5IHNvIHRoYXQgYWxsIHRoZSBub2RlcyBjYW4gZ2V0IHRoZSBuZXcgZmxhZ3NcbiA3NjM6XHRcdCAqL1xuIDc2NDpcdFx0aWYgKHJlbW90ZV9mbGFncyBeICh0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9SRU1PVEVfTUFTSykpXG4gNzY1Olx0XHRcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XG4gNzY2Olx0XG4gNzY3Olx0XHRyZXQgPSB0cnVlO1xuIDc2ODpcdG91dDpcbiA3Njk6XHRcdGJhdGFkdl9oYXJkaWZfcHV0KGluX2hhcmRpZik7XG4gNzcwOlx0XHRkZXZfcHV0KGluX2Rldik7XG4gNzcxOlx0XHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsKTtcbiA3NzI6XHRcdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbCk7XG4gNzczOlx0XHRyZXR1cm4gcmV0O1xuIDc3NDpcdH1cbiA3NzU6XHRcbiA3NzY6XHQvKipcbiA3Nzc6XHQgKiBiYXRhZHZfdHRfcHJlcGFyZV90dmx2X2dsb2JhbF9kYXRhKCkgLSBwcmVwYXJlIHRoZSBUVkxWIFRUIGhlYWRlciB0byBzZW5kXG4gNzc4Olx0ICogIHdpdGhpbiBhIFRUIFJlc3BvbnNlIGRpcmVjdGVkIHRvIGFub3RoZXIgbm9kZVxuIDc3OTpcdCAqIEBvcmlnX25vZGU6IG9yaWdpbmF0b3IgZm9yIHdoaWNoIHRoZSBUVCBkYXRhIGhhcyB0byBiZSBwcmVwYXJlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzAzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY1MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmY291bnRpbmcgTXlzdGVyaWVzIG9mIFZMQU5zIGluIGJhdG1hbi1hZHYqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGJhdG1hbi1hZHYgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIG1lc3Npbmcgd2l0aCBWTEFOIHJlZmNvdW50aW5nLiBJdCBsb29rcyBsaWtlIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBidW1wcyB0aGUgcmVmY291bnQgb24gYSBUVCBlbnRyeSAoaGFzaCByZWZlcmVuY2UpLiBUaGVuLCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgZHJvcHMgdGhhdCBoYXNoIHJlZmVyZW5jZS4gQWxzbywgd2hlbiB0aGUgVFQgZW50cnkgaXMgZnJlZWQsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBvbiB0aGUgVkxBTi4gU28gZmFyLCBzbyBnb29kLgoKQnV0IGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIGFuZCBpdCBhcHBlYXJzIHRvICphbHNvKiBkcm9wIGEgVkxBTiByZWZlcmVuY2UuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGlzIHdvdWxkIGNhdXNlIGEgZG91YmxlIGZyZWUsIHNpbmNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZGVzdHJveWAgY291bGQgYmUgZnJlZWluZyBzb21ldGhpbmcgdGhhdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWxzbyBoYXMgYSByZWZlcmVuY2UgdG8uIEhvd2V2ZXIsIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBhbHNvIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCB3aGljaCAqYWxzbyogc2hvdWxkIGRyb3AgYSByZWZlcmVuY2UhIEJ1dCB0aGUgcGF0Y2ggcmVtb3ZlZCBpdCEKCkl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3Mgc29tZSBqdWdnbGluZyBnb2luZyBvbiBoZXJlLiBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2V0cyBhIHJlZmVyZW5jZSAobGlzdCByZWZlcmVuY2UpLiBUaGVuLCBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgZ2V0cyBhbm90aGVyIChUVCByZWZlcmVuY2UpLiBUaGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIG9uZSAoZ2V0IHJlZmVyZW5jZSkuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgdHdvIHJlZnMgKFRUIGFuZCBsaXN0KS4gQW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgZ2V0IHJlZmVyZW5jZS4gSXQgc2hvdWxkIGJhbGFuY2Ugb3V0LCB0aGVvcmV0aWNhbGx5LgoKVGhlbiwgdGhlcmUmIzM5O3MgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAsIHdoaWNoIGlzIG1lYW50IHRvIHJldml2ZSBhIFZMQU4uIEkgc2VlIGl0IGdldHRpbmcgYSByZWZlcmVuY2Ugd2l0aCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIGFuZCB0aGVuIGl0IHVzZXMgYGJhdGFkdl90dF9sb2NhbF9hZGRgIHRvIGFkZCBhIG5ldyBUVCBlbnRyeSwgYnV0IEkgZG9uJiMzOTt0IHNlZSBpdCBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIHdpdGggYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgLiBXYWl0LCBpcyAqdGhpcyogdGhlIHByb2JsZW0/IElzIGl0IGxlYWtpbmcgYSByZWZlcmVuY2Ugb24gcHVycG9zZT8gVGhlIGNvbW1lbnQgc2F5cyB0aGlzIGlzIHRvIHJldml2ZSB0aGUgb2JqZWN0LCBzbyBpdCBzb3VuZHMgbGlrZSBpdHMgaW50ZW5kZWQgdG8uCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIHRoZSBwYXRjaCBtaWdodCBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoYXQuIE1heWJlIHRoZSBwcmV2aW91cyB2ZXJzaW9uIGhhZCBhIGJ1ZyB3aGVyZSB0aGVyZSB3YXMgYSBkb3VibGUgZnJlZS4gTGV0IG1lIHNlZSwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAuIEFoLCBtYXliZSBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgaXNuJiMzOTt0IGRyb3BwaW5nIHRoZSBUVCBlbnRyeT8gSXMgdGhhdCBwb3NzaWJsZT8gTm8uCgpPa2F5LCBsZXQmIzM5O3MgdGhpbmsuIFRoZSBwYXRjaCByZW1vdmVkIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGNhbGwuIFNvLCBpdCB3YXMgZWl0aGVyIGEgZG91YmxlIGZyZWUgb3IgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4gSXMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmcmVlaW5nIGB2bGFuYD8gSXQgY2FuIGlmIHRoZSByZWZjb3VudCByZWFjaGVzIHplcm8uIFNvLCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIHRoZSBsYXN0IHJlZmVyZW5jZSwgYW5kIGZyZWVzIHRoZSBgdmxhbmAgb2JqZWN0LCB0aGVuIHRoYXQgcmVtb3ZlZCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCBpcyBhY2Nlc3NpbmcgYSBmcmVlZCBvYmplY3QsIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZS4KClNvIHRoZSBvcmlnaW5hbCByZWZjb3VudGluZyBtdXN0IGhhdmUgYmVlbiB3cm9uZy4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHdhcyBnZXR0aW5nIGEgcmVmZXJlbmNlICgxKSBhbmQgdGhlbiBjYWxsaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZGVzdHJveWAsIHdoaWNoIHdvdWxkIGJlIGRyb3BwaW5nIDIgcmVmZXJlbmNlcyBmcm9tIHRoZSBUVCBlbnRyeSBhbmQgdGhlIGxpc3QgKHNvIGEgdG90YWwgb2YgMikuIFRoZW4sIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd291bGQgY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAsIHdoaWNoIHdvdWxkIGRyb3AgYSByZWZlcmVuY2UuIFRoYXQgbWVhbnMgYSB1c2UtYWZ0ZXItZnJlZS4gU28gdGhlIGZpeCBpcyB0aGUgcGF0Y2guCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSBhcmUgb3RoZXIgY2FzZXM6IFdoYXQgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzICpsZWFraW5nKiBhIHJlZmVyZW5jZT8gV2VsbCwgaWYgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgaXMgbGVha2luZywgdGhhdCB3b3VsZCBtYWtlIHNlbnNlLiBJdCBtZWFucyB0aGUgb2JqZWN0IG5ldmVyIGdldHMgZnJlZWQuIEJ1dCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGV4aXN0cyB0byBmcmVlIHRoZSBvYmplY3QuIE9rYXksIEkmIzM5O20gcHJldHR5IHN1cmUgSSB1bmRlcnN0YW5kLiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBsZWFrcyBhIHJlZmVyZW5jZSBiZWNhdXNlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCAqc2hvdWxkKiBvbmx5IGJlIGRyb3BwaW5nIHRoZSBnZXQgcmVmZXJlbmNlLiBBbmQgd2l0aCB0aGUgcGF0Y2gsIHRoYXQgaXMgd2hhdCBpcyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCQVRNQU5fQURWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L0tjb25maWctOS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MTA6Y29uZmlnIEJBVE1BTl9BRFZcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtCLkEuVC5NLkEuTi4gQWR2YW5jZWQgTWVzaGluZyBQcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMTktXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjIwOmNvbmZpZyBCQVRNQU5fQURWX0JBVE1BTl9WXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtCLkEuVC5NLkEuTi4gViBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzMtXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjM0OmNvbmZpZyBCQVRNQU5fQURWX0JMQVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7QnJpZGdlIExvb3AgQXZvaWRhbmNlXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy00Ni1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NDc6Y29uZmlnIEJBVE1BTl9BRFZfREFUXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEaXN0cmlidXRlZCBBUlAgVGFibGVcJiMzNDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTU2LVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo1Nzpjb25maWcgQkFUTUFOX0FEVl9NQ0FTVFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01OC1cdGJvb2wgXCYjMzQ7TXVsdGljYXN0IG9wdGltaXNhdGlvblwmIzM0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjUtXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjY2OmNvbmZpZyBCQVRNQU5fQURWX0RFQlVHXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTY3LVx0Ym9vbCBcJiMzNDtCLkEuVC5NLkEuTi4gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03NC1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NzU6Y29uZmlnIEJBVE1BTl9BRFZfVFJBQ0lOR1xubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03Ni1cdGJvb2wgXCYjMzQ7Qi5BLlQuTS5BLk4uIHRyYWNpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDk4NwoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgYW5kIEZ1enppbmcgYSBCYXRtYW4tYWR2IFZMQU4gSGFuZGxpbmcgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBiYXRtYW4tYWR2YCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHJlbW92ZXMgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbCBmcm9tIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24uIFRoaXMgaXMgYSByZWZjb3VudGluZyBjaGFuZ2UsIHNvIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoaXMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGZ1enogdGhpcy4gVG8gZnV6eiBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEluIHRoaXMgY2FzZSwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFuZCBpdHMgY291bnRlcnBhcnQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIHRoZXJlLCBjYXJlZnVsbHkgY3JhZnRpbmcgaW5wdXRzIHRoYXQgZXhlcmNpc2UgdGhlc2UgZnVuY3Rpb25zIHdpdGggYSB2YXJpZXR5IG9mIFZMQU4gY29uZmlndXJhdGlvbnMsIHBheWluZyBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSByZWZjb3VudGluZyBjaGFuZ2UuIEnigJlsbCBtYWtlIHN1cmUgdGhlIGBCQVRNQU5fQURWYCBjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQgZm9yIG15IHRlc3RzLCBvZiBjb3Vyc2UuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB0byB0cmFjayB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDQ6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkJiMzNDssCiAgICAmIzM0O2JhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVmY291bnRpbmcgbG9naWMgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGJ5IHJlbW92aW5nIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGNhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIGxpZmVjeWNsZSBvZiBWTEFOIG9iamVjdHMgaW4gdGhlIGJhdG1hbi1hZHYgbWVzaCBpbnRlcmZhY2UuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCQVRNQU5fQURWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBieSByZW1vdmluZyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBsaWZlY3ljbGUgb2YgVkxBTiBvYmplY3RzIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjA0Ljg4OTQ2NDI2MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMzQ5ODQ0NTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQVRNQU5fQURWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZFwiLFxuICAgIFwiYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBieSByZW1vdmluZyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBsaWZlY3ljbGUgb2YgVkxBTiBvYmplY3RzIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDowNC44ODk0NzAyNTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTgwMDY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNlNzQzZDFhNGRlM2E0ODJmYjMxODRlMThkNWRiNWYwZTZiZDc0MThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDQ6MTQ6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcXG5pbmRleCBlN2FhNDViYzZiN2FkNy4uY2M5NzRmMjQzMjAwZmMgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcXG5AQCAtNjkxLDkgKzY5MSw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuIFxcbiBcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxuIFxcbi1cXHQvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovXFxuLVxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MDUuMjE5ODU4NTk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDMxNjgwMzk0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRcIixcbiAgICBcImJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZjb3VudGluZyBsb2dpYyBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYnkgcmVtb3ZpbmcgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgbGlmZWN5Y2xlIG9mIFZMQU4gb2JqZWN0cyBpbiB0aGUgYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZTc0M2QxYTRkZTNhNDgyZmIzMTg0ZTE4ZDVkYjVmMGU2YmQ3NDE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDQ6MTQ6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuaW5kZXggZTdhYTQ1YmM2YjdhZDcuLmNjOTc0ZjI0MzIwMGZjIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuQEAgLTY5MSw5ICs2OTEsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIFxuIFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIFxuLVx0LyogZmluYWxseSBmcmVlIHRoZSB2bGFuIG9iamVjdCAqL1xuLVx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjA1LjIxOTg2MTA3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTk5OTc5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmF0bWFuLUFkdiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdG91Y2hpbmcgYG5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtgIGZyb20gdGhlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBmdW5jdGlvbi4gUmlnaHQgYXdheSwgbXkgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2FsbCBpcyBiZWluZyByZW1vdmVkLiBXaGF0J3MgdGhlIHJhdGlvbmFsZT8gSXMgdGhpcyBhIGNsZWFudXAsIGEgYnVnIGZpeCwgb3IgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZW1vdmluZyB0aGF0IFZMQU4gcmVmZXJlbmNlIGNvdW50IGRlY3JlbWVudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiBjYWxsIGFuZCB3aGF0J3MgZ29pbmcgdG8gaGFwcGVuIHRvIHRoYXQgVkxBTiBhZnRlciB0aGlzIGNoYW5nZSBpcyBhcHBsaWVkLiBJcyB0aGVyZSBhIG1lbW9yeSBsZWFrLCBvciBhIGRvdWJsZSBmcmVlIGJlaW5nIHByZXZlbnRlZD8gT3IgcGVyaGFwcyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGlzIGJlaW5nIG1vdmVkIGVsc2V3aGVyZT8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MDguMjc5ODYyODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwNzQ5MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NjE1PXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjU4LS8qKlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjU5OiAqIGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoKSAtIG5kb19raWxsX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY2MC0gKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02NjktICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2NzA6c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY3MS1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF0YWR2X25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTg3Ny1cXHQubmRvX3ZsYW5fcnhfYWRkX3ZpZCA9IGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZCxcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjg3ODpcXHQubmRvX3ZsYW5fcnhfa2lsbF92aWQgPSBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODc5LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzID0gYmF0YWR2X2ludGVyZmFjZV9zZXRfbWFjX2FkZHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjA4LjM0Mjk0MDk1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NzM4Mzc4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHByb21wdCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgbmRvX3ZsYW5fcnhfa2lsbF92aWRgIGZvciBCYXRtYW4tQWR2KipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZG9fdmxhbl9yeF9raWxsX3ZpZGAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYmF0bWFuLWFkdiBpbnRlcmZhY2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2tpcCBzdHJhaWdodCB0byB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSBhbmQganVtcCBpbnRvIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24uIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGlzIGxvZ2ljIGxpZXMuIEkgd2FudCB0byBzZWUgaG93IGJhdG1hbi1hZHYgaGFuZGxlcyBWTEFOIElEIHJlbW92YWwgZnJvbSBpdHMgaW50ZXJmYWNlcy4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGhvdyBpdCBtYW5hZ2VzIGl0cyBpbnRlcm5hbCBicmlkZ2luZyBhbmQgZm9yd2FyZGluZyBiYXNlZCBvbiBWTEFOIHRhZ2dpbmcgKG9yIGxhY2sgdGhlcmVvZiksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBpbmdyZXNzIGZpbHRlcmluZyBvZiB0YWdnZWQgZnJhbWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MTEuMTE2NzgyMDEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXFxuIDY2MTpcXHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXFxuIDY2MjpcXHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBkZWxldGVkIHZsYW5cXG4gNjYzOlxcdCAqXFxuIDY2NDpcXHQgKiBEZXN0cm95IGFsbCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyB1c2VkIHRvIGhhbmRsZSB0aGUgdmxhbiBpZGVudGlmaWVkIGJ5IHZpZFxcbiA2NjU6XFx0ICogb24gdG9wIG9mIHRoZSBtZXNoIGludGVyZmFjZVxcbiA2NjY6XFx0ICpcXG4gNjY3OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBzcGVjaWZpZWQgcHJvdG90eXBlIGlzIG5vdCBFVEhfUF84MDIxUVxcbiA2Njg6XFx0ICogb3IgLUVOT0VOVCBpZiB0aGUgc3BlY2lmaWVkIHZsYW4gaWQgd2Fzbid0IHJlZ2lzdGVyZWQuXFxuIDY2OTpcXHQgKi9cXG4gNjcwOlxcdHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuIDY3MTpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNjcyOlxcdHtcXG4gNjczOlxcdFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA2NzQ6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0Lyogb25seSA4MDIuMVEgdmxhbnMgYXJlIHN1cHBvcnRlZC4gYmF0bWFuLWFkdiBkb2VzIG5vdCBrbm93IGhvdyB0b1xcbiA2Nzc6XFx0XFx0ICogaGFuZGxlIG90aGVyIHR5cGVzXFxuIDY3ODpcXHRcXHQgKi9cXG4gNjc5OlxcdFxcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXFxuIDY4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0LyogXFxcInByaW9yaXR5IHRhZ1xcXCIgZnJhbWVzIGFyZSBoYW5kbGVkIGxpa2UgXFxcInVudGFnZ2VkXFxcIiBmcmFtZXNcXG4gNjgzOlxcdFxcdCAqIGFuZCBubyBtZXNoaWZfdmxhbiBuZWVkcyB0byBiZSBkZXN0cm95ZWRcXG4gNjg0OlxcdFxcdCAqL1xcbiA2ODU6XFx0XFx0aWYgKHZpZCA9PSAwKVxcbiA2ODY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY4NzpcXHRcXG4gNjg4OlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcXG4gNjg5OlxcdFxcdGlmICghdmxhbilcXG4gNjkwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA2OTE6XFx0XFxuIDY5MjpcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdHJldHVybiAwO1xcbiA2OTU6XFx0fVxcbiA2OTY6XFx0XFxuIDY5NzpcXHQvKiBiYXRtYW4tYWR2IG5ldHdvcmsgZGV2aWNlcyBoYXZlIGRldmljZXMgbmVzdGluZyBiZWxvdyBpdCBhbmQgYXJlIGEgc3BlY2lhbFxcbiA2OTg6XFx0ICogXFxcInN1cGVyIGNsYXNzXFxcIiBvZiBub3JtYWwgbmV0d29yayBkZXZpY2VzOyBzcGxpdCB0aGVpciBsb2NrcyBvZmYgaW50byBhXFxuIDY5OTpcXHQgKiBzZXBhcmF0ZSBjbGFzcyBzaW5jZSB0aGV5IGFsd2F5cyBuZXN0LlxcbiA3MDA6XFx0ICovXFxuIDcwMTpcXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJhdGFkdl9uZXRkZXZfeG1pdF9sb2NrX2tleTtcXG4gNzAyOlxcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYmF0YWR2X25ldGRldl9hZGRyX2xvY2tfa2V5O1xcbiA3MDM6XFx0XFxuIDcwNDpcXHQvKipcXG4gNzA1OlxcdCAqIGJhdGFkdl9zZXRfbG9ja2RlcF9jbGFzc19vbmUoKSAtIFNldCBsb2NrZGVwIGNsYXNzIGZvciBhIHNpbmdsZSB0eCBxdWV1ZVxcbiA3MDY6XFx0ICogQGRldjogZGV2aWNlIHdoaWNoIG93bnMgdGhlIHR4IHF1ZXVlXFxuIDcwNzpcXHQgKiBAdHhxOiB0eCBxdWV1ZSB0byBtb2RpZnlcXG4gNzA4OlxcdCAqIEBfdW51c2VkOiBhbHdheXMgTlVMTFxcbiA3MDk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjExLjExNjk0Mjc1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTQ4OTk2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIGEgVkxBTiBSZWxlYXNlIGluIEJhdGFkdioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdGFraW5nIG91dCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIEludGVyZXN0aW5nLiBJIGtub3cgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGB2bGFuYCBzdHJ1Y3R1cmUsIHNvIHRoYXQncyBhIGtleSBwb2ludCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlmIHdlJ3JlIHJlbW92aW5nIHRoZSBjb3JyZXNwb25kaW5nIGBwdXRgLCBkb2VzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgdGFrZSBjYXJlIG9mIGRyb3BwaW5nIHRoYXQgcmVmZXJlbmNlPyBJdCdzIGVzc2VudGlhbCB0aGF0IHRoZSByZWZlcmVuY2UgY291bnQgaXMgbWFuYWdlZCBjb3JyZWN0bHkgdG8gYXZvaWQgbWVtb3J5IGxlYWtzIG9yIGRvdWJsZSBmcmVlcywgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgbm93IGhhbmRsZXMgdGhlIHJlbGVhc2UuIEnigJlsbCBuZWVkIHRvIGRlbHZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjE0LjExMTg0NTUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NzI2MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9iYXRtYW4tYWR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU0NT1pbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4Ny0vKipcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU4ODogKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5MS0gKi9cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU5MjpzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkzLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02NzA9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkxLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjkyOlxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5My1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTA4Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5Ni1cXHRpZiAodmxhbikge1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5NzpcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk4LVxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjE0LjE3NzU3ODc1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjA5ODA0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmdW5jdGlvbi4gSnVzdCB0aGUgbmFtZSBhbG9uZSB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBWTEFOLXNwZWNpZmljIGNsZWFudXAgaGFwcGVucyB3aGVuIGEgQkFUTUFOIEFkdmFuY2VkIG1lc2ggaW50ZXJmYWNlIGlzIGJlaW5nIGRlc3Ryb3llZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnJlZSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBWTEFOIHN1cHBvcnQg4oCTIHRoaW5ncyBsaWtlIFZMQU4gSUQgbWFwcGluZ3MsIHBvdGVudGlhbGx5IHBlci1WTEFOIHN0YXRpc3RpY3MsIGFuZCBtYXliZSBzb21lIGhhbmRsaW5nIG9mIGFueSBhc3NvY2lhdGVkIGJyaWRnZSBpbnRlcmZhY2VzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIG1hbmFnaW5nIHRoZSBWTEFOIHRhZ2dpbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgQkFUTUFOJ3MgTUFDLWluLU1BQyBlbmNhcHN1bGF0aW9uLCB3aGljaCBtZWFucyBsaWtlbHkgYSB1bmlxdWUgaGFuZGxpbmcgYXBwcm9hY2ggY29tcGFyZWQgdG8gcmVndWxhciBFdGhlcm5ldCBWTEFOcy4gVGhlIGRldmlsJ3MgaW4gdGhlIGRldGFpbHMgd2l0aCB0aGVzZSBtZXNoIGNvbmZpZ3VyYXRpb25zLCBzbyBJJ20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja2luZyBtZWNoYW5pc21zIHRoZXkndmUgcHV0IGluIHBsYWNlLCBlc3BlY2lhbGx5IGFyb3VuZCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLCBlc3BlY2lhbGx5IHNpbmNlIGl0IGRlYWxzIHdpdGggYSBtZXNoIGludGVyZmFjZSBiZWluZyBkZXN0cm95ZWQgd2hpY2ggY2FuIGhhcHBlbiBmb3IgbWFueSByZWFzb25zLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgbmVlZCB0byBiZSByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSBwYXJ0aWFsIGZhaWx1cmVzIGR1cmluZyB0aGUgY2xlYW51cCwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgcmV0cnkgb3Igcm9sbGJhY2sgbG9naWMsIG9yIGF0IGxlYXN0IGdyYWNlZnVsIGhhbmRsaW5nIG9mIG1lbW9yeSBsZWFrcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHRoZXkndmUgaW1wbGVtZW50ZWQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDoxNy44Mzg1NjIzNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg4LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg4OlxcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG4gNTg5OlxcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiA1OTA6XFx0ICogQHZsYW46IHRoZSBvYmplY3QgdG8gcmVtb3ZlXFxuIDU5MTpcXHQgKi9cXG4gNTkyOlxcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIDU5MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG4gNTk0OlxcdHtcXG4gNTk1OlxcdFxcdC8qIGV4cGxpY2l0bHkgcmVtb3ZlIHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGJlY2F1c2UgaXQgaXMgbWFya2VkXFxuIDU5NjpcXHRcXHQgKiB3aXRoIHRoZSBOT1BVUkdFIGZsYWdcXG4gNTk3OlxcdFxcdCAqL1xcbiA1OTg6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLFxcbiA1OTk6XFx0XFx0XFx0XFx0ICAgICAgIHZsYW4tXFx1MDAzZXZpZCwgXFxcInZsYW4gaW50ZXJmYWNlIGRlc3Ryb3llZFxcXCIsIGZhbHNlKTtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4gNjAyOlxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0LyoqXFxuIDYwNTpcXHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2MDY6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjA3OlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG4gNjA4OlxcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIG5ldyB2bGFuXFxuIDYwOTpcXHQgKlxcbiA2MTA6XFx0ICogU2V0IHVwIGFsbCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBmb3IgaGFuZGxpbmcgdGhlIG5ldyB2bGFuIG9uIHRvcCBvZiB0aGVcXG4gNjExOlxcdCAqIG1lc2ggaW50ZXJmYWNlXFxuIDYxMjpcXHQgKlxcbiA2MTM6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS5cXG4gNjE0OlxcdCAqL1xcbiA2MTU6XFx0c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxcbiA2MTY6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNjE3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MTcuODM4Njc4NDI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDQ4ODEyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRG91YmxlLUZyZWUgQWxlcnQ6IEludmVzdGlnYXRpbmcgUG90ZW50aWFsIFZMQU4gTWVtb3J5IENvcnJ1cHRpb24gaW4gQkFUTUFOIEFkdmFuY2VkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNsZWFudXAgcHJvY2VzcyBmb3IgVkxBTnMgaW4gQkFUTUFOIEFkdmFuY2VkLCBzcGVjaWZpY2FsbHkgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgcmlnaHQsIHRoaXMgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLlwiIFN0YW5kYXJkIGNsZWFudXAgcHJvY2VkdXJlLCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIHlldC4gQnV0IHRoZW4gYSByZWQgZmxhZyBwb3BzIHVwLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLCB3aGljaCByZWxlYXNlcyB0aGUgVkxBTiwgYW5kIHRoZW4gbGF0ZXIgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFsc28gY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIG9uIHRoZSAqc2FtZSogVkxBTiwgd2UndmUgZ290IGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvIGhlcmUhIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgdGhhdCdzICpiYWQqLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGJlaW5nIGNhbGxlZCB0byBzZWUgaWYgdGhpcyBpcyBhbiBpc3N1ZS4gTGV0J3Mgc2VlIGlmIHRoZSBtZXNoaWYgbmV0bGluayBkZXN0cnVjdGlvbiBwbGF5cyBhIHJvbGUgaGVyZS4gSSdtIGdvaW5nIHRvIGxvb2sgaW50byBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBoaW50IG9mIHRoaXMgaXNzdWUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDoyMS42ODM1NjI2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgyLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgyOlxcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxcbjEwODM6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbjEwODQ6XFx0e1xcbjEwODU6XFx0XFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG1lc2hfaWZhY2UpO1xcbjEwODY6XFx0XFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xcbjEwODc6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4xMDg4OlxcdFxcbjEwODk6XFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZtZXNoX2lmYWNlLVxcdTAwM2VhZGpfbGlzdC5sb3dlcikpIHtcXG4xMDkwOlxcdFxcdFxcdGhhcmRfaWZhY2UgPSBuZXRkZXZfYWRqYWNlbnRfZ2V0X3ByaXZhdGUobWVzaF9pZmFjZS1cXHUwMDNlYWRqX2xpc3QubG93ZXIubmV4dCk7XFxuMTA5MTpcXHRcXHRcXHRiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpO1xcbjEwOTI6XFx0XFx0fVxcbjEwOTM6XFx0XFxuMTA5NDpcXHRcXHQvKiBkZXN0cm95IHRoZSBcXFwidW50YWdnZWRcXFwiIFZMQU4gKi9cXG4xMDk1OlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpO1xcbjEwOTY6XFx0XFx0aWYgKHZsYW4pIHtcXG4xMDk3OlxcdFxcdFxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG4xMDk4OlxcdFxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuMTA5OTpcXHRcXHR9XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKG1lc2hfaWZhY2UsIGhlYWQpO1xcbjExMDI6XFx0fVxcbjExMDM6XFx0XFxuMTEwNDpcXHQvKipcXG4xMTA1OlxcdCAqIGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQoKSAtIENoZWNrIHdoZXRoZXIgZGV2aWNlIGlzIGEgYmF0YWR2IG1lc2ggaW50ZXJmYWNlXFxuMTEwNjpcXHQgKiBAbmV0X2RldjogZGV2aWNlIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkXFxuMTEwNzpcXHQgKlxcbjExMDg6XFx0ICogUmV0dXJuOiB0cnVlIHdoZW4gbmV0X2RldiBpcyBhIGJhdG1hbi1hZHYgaW50ZXJmYWNlLCBmYWxzZSBvdGhlcndpc2VcXG4xMTA5OlxcdCAqL1xcbjExMTA6XFx0Ym9vbCBiYXRhZHZfbWVzaGlmX2lzX3ZhbGlkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxcbjExMTE6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDoyMS42ODM2ODIxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk5MDYzNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRvdWJsZS1DaGVja2luZyBWTEFOIEhhbmRsaW5nIGluIE1lc2ggSW50ZXJmYWNlIERlc3RydWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBhbmQgbm90aWNlZCB0aGlzIGJsb2NrIG9mIGNvZGU6XG5cbmBgYGNcblx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7XG5cdGlmICh2bGFuKSB7XG5cdFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuXHRcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5cdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGhhbmcgb24sIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGl0c2VsZiwgYXJlbid0IHdlIGRvaW5nIGEgZG91YmxlIGBwdXRgIGhlcmUgaW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYD8gVGhhdCB3b3VsZCBiZSBhIG1lbW9yeSBsZWFrIHdhaXRpbmcgdG8gaGFwcGVuLCBvciB3b3JzZS5cblxuQnV0LCBiZWZvcmUganVtcGluZyB0byBjb25jbHVzaW9ucywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIEkgbmVlZCB0byBjb25maXJtIHdoYXQgaXQgYWN0dWFsbHkgZG9lcyB3aXRoIHRoZSBWTEFOIGVudHJ5LiBEb2VzIGl0IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0PyBJZiBpdCBkb2VzLCB0aGVuIHRoZSBzZWNvbmQgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIG1pZ2h0IGJlIHNhZmUsIHRob3VnaCBzdGlsbCBpbmVmZmljaWVudC4gTGV0J3Mgc2VlLi4uIEFoLCBubywgaXQgKmRvZXNuJ3QqIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBcblxuT2theSwgbm93IGxldCdzIGRvdWJsZS1jaGVjayB0aGUgbG9naWMgd2l0aGluIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YC4gR290dGEgYmUgc3VyZSBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6MjYuMDgyNzQ4NjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODM2NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl9tZXNoaWZfdmxhbl9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21haW4uYz02MDc9Ym9vbCBiYXRhZHZfdmxhbl9hcF9pc29sYV9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTYxNy1cXHRcXHRhcF9pc29sYXRpb25fZW5hYmxlZCA9IGF0b21pY19yZWFkKFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24pO1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYzo2MTg6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtNjE5LVxcdH1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTQ1PWludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTUyLVxcdGlmICh2bGFuKSB7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1NTM6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU1NC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4MS1cXHQvKiBkb24ndCByZXR1cm4gcmVmZXJlbmNlIHRvIG5ldyBtZXNoaWZfdmxhbiAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTgyOlxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODMtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU5Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MDAtXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2MDE6XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwMi19XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTEwODI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTctXFx0XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5ODpcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5OS1cXHR9XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oPTI1PXN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKmJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtMjgtLyoqXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaDoyOTogKiBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KCkgLSBkZWNyZWFzZSB0aGUgdmxhbiBvYmplY3QgcmVmY291bnRlciBhbmRcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTMwLSAqICBwb3NzaWJseSByZWxlYXNlIGl0XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTMyLSAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg6MzM6c3RhdGljIGlubGluZSB2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQoc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTM0LXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYz0xNzI9c3RhdGljIGludCBiYXRhZHZfbmV0bGlua19tZXNoX2ZpbGxfYXBfaXNvbGF0aW9uKHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTgyLVxcdGFwX2lzb2xhdGlvbiA9IGF0b21pY19yZWFkKFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24pO1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoxODM6XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTg0LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTE5Nj1zdGF0aWMgaW50IGJhdGFkdl9uZXRsaW5rX3NldF9tZXNoX2FwX2lzb2xhdGlvbihzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTIwNS1cXHRhdG9taWNfc2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24sICEhbmxhX2dldF91OChhdHRyKSk7XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjIwNjpcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0yMDctXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9MTM3ND1zdGF0aWMgdm9pZCBiYXRhZHZfcG9zdF9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTEzOTAtXFx0XFx0dmxhbiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoxMzkxOlxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTEzOTItXFx0fVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMTc9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjIzLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MjI0OlxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodHRfbG9jYWxfZW50cnktXFx1MDAzZXZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjI1LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yOTM9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfbW9kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTMwMy1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjMwNDpcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzA1LX1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTA3ND1iYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMDkzLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTA5NDpcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTA5NS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzcyMD1ib29sIGJhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1OCAqc3JjLCB1OCAqZHN0LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ5LXZsYW5fcHV0Olxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6Mzc1MDpcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzc1MS1cXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDoyNi4xNDQ1OTA3MDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxODE2NTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBWTEFOIFJlbW92YWwgaW4gQkFUTUFOIEFkdmFuY2VkKipcblxuSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICphY3R1YWxseSogcmVtb3ZpbmcgdGhlIFZMQU4gZW50cnkgZnJvbSB0aGUgaW50ZXJuYWwgVkxBTiBsaXN0PyBUaGF0IGp1c3QgZG9lc24ndCBzb3VuZCByaWdodCwgYW5kIEknbSBwcmV0dHkgc3VyZSBpdCdzIG5vdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIFNlZW1zIGxpa2UgaXQgd291bGQgYmUgYSBtaXNzZWQgb3Bwb3J0dW5pdHkgdG8gcmVsZWFzZSB0aGUgVkxBTiByZXNvdXJjZS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBkb3VibGUtY2hlY2suIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb24gaG93IHRoZSBWTEFOcyBhcmUgdHJ1bHkgbWFuYWdlZC4gVGhlIHJlYWwgbG9naWMgZm9yIHJlbGVhc2luZyBWTEFOcyBpbiB0aGlzIGNvbnRleHQgaXMgbW9zdCBsaWtlbHkgd2l0aGluIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAuIEknbGwgZGlnIGludG8gdGhhdCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZMQU4gbGlzdCB0byBjb25maXJtIG9yIHJlZnV0ZSBteSBpbml0aWFsIHRob3VnaHQuIEl0IHNlZW1zIGxpa2UgdGhlIG1vcmUgbGlrZWx5IHBsYWNlIGZvciB0aGUgYWN0dWFsIHVubGlua2luZyBhbmQgY2xlYW51cC4gSSBiZXQgaXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjMwLjA2Mjc1OTQ5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1OTg1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NDAyPXZvaWQgYmF0YWR2X2ludGVyZmFjZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDkxLS8qKlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NDkyOiAqIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKCkgLSByZWxlYXNlIHZsYW4gZnJvbSBsaXN0cyBhbmQgcXVldWUgZm9yIGZyZWVcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ5My0gKiAgYWZ0ZXIgcmN1IGdyYWNlIHBlcmlvZFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00OTUtICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo0OTY6dm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDk3LXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg9MjM9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oOjI0OnZvaWQgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaC0yNS1zdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICpiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oPTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTM3LVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg6Mzg6XFx0a3JlZl9wdXQoXFx1MDAyNnZsYW4tXFx1MDAzZXJlZmNvdW50LCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZSk7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaC0zOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjMwLjEyNDM2MDM2NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTE5OTc5MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIERlc3RydWN0aW9uIGluIGJhdGFkdioqXG5cbk9rYXksIHNvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBpcyBiYXNpY2FsbHkganVzdCBhIGBrcmVmX3B1dGAuICBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmVyZW5jZSBjb3VudGVyIGRlY3JlbWVudC4gTm90aGluZyBmYW5jeSBoZXJlLlxuXG5Ob3csIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgdGhhdCwgc28gaXQncyBjbGVhcmx5IHBhcnQgb2YgdGhlIGNsZWFudXAgcHJvY2Vzcy4gIEl0IGxvb2tzIGxpa2UgaXQgcmVtb3ZlcyBhIFRUIGxvY2FsIGVudHJ5IGZpcnN0LiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGBOT1BVUkdFYCwgc28gaXQncyBhbiBleHBsaWNpdCByZW1vdmFsLlxuXG5MZXQncyB0cmFjZSB0aGlzIGJhY2suICBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYC4gQ3J1Y2lhbGx5LCBpdCBmaXJzdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHdoaWNoICpnZXRzKiBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTi4gVGhhdCdzICsxLiBUaGVuLCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGlzIGNhbGxlZC4gSXQgZHJvcHMgYSByZWZlcmVuY2UuIEJ1dCB3aGljaCBvbmU/IElzIGl0IGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGdvdCwgdGhlIGxpc3QgcmVmZXJlbmNlPyBPciBkb2VzIGl0IHRha2UgYSBjb3B5IGFuZCBkcm9wIHRoYXQ/IEkgbmVlZCB0byBrbm93IGhvdyB0aGUgcmVmZXJlbmNlIGlzIGhlbGQuXG5cbkFuZCB0aGVuLCAqYWZ0ZXIqIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXMgY2FsbGVkLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgICphZ2FpbiouIFNvLCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWZlcmVuY2UsIGFuZCB0aGUgY2FsbGluZyBmdW5jdGlvbiBkcm9wcyBhbm90aGVyISBUaGlzIGlzIHRvIGhhbmRsZSB0aGUgcmVmZXJlbmNlIHRha2VuIGJ5IGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgc28gdGhlIHZsYW4gb2JqZWN0IGNhbiBiZSBmcmVlZC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgZnVuY3Rpb24gdG8gYmUgY2VydGFpbiBleGFjdGx5IHdoYXQgaGFwcGVucyB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgaGl0cyB6ZXJvLiBEb2VzIGl0IGhhbmRsZSBsaXN0IHJlbW92YWwsIG9yIGRvZXMgdGhlIGxpc3QgbWFuYWdlbWVudCBoYXBwZW4gZWxzZXdoZXJlP1xuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjM3LjA0NDM0Mjc1OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTI6XFx0ICogYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2UoKSAtIHJlbGVhc2UgdmxhbiBmcm9tIGxpc3RzIGFuZCBxdWV1ZSBmb3IgZnJlZVxcbiA0OTM6XFx0ICogIGFmdGVyIHJjdSBncmFjZSBwZXJpb2RcXG4gNDk0OlxcdCAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgdmxhbiBvYmplY3RcXG4gNDk1OlxcdCAqL1xcbiA0OTY6XFx0dm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbiA0OTc6XFx0e1xcbiA0OTg6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4gNDk5OlxcdFxcbiA1MDA6XFx0XFx0dmxhbiA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4sIHJlZmNvdW50KTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2bGFuLVxcdTAwM2ViYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcXG4gNTAzOlxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNnZsYW4tXFx1MDAzZWxpc3QpO1xcbiA1MDQ6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZsYW4tXFx1MDAzZWJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1MDU6XFx0XFxuIDUwNjpcXHRcXHRrZnJlZV9yY3UodmxhbiwgcmN1KTtcXG4gNTA3OlxcdH1cXG4gNTA4OlxcdFxcbiA1MDk6XFx0LyoqXFxuIDUxMDpcXHQgKiBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KCkgLSBnZXQgdGhlIHZsYW4gb2JqZWN0IGZvciBhIHNwZWNpZmljIHZpZFxcbiA1MTE6XFx0ICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuIDUxMjpcXHQgKiBAdmlkOiB0aGUgaWRlbnRpZmllciBvZiB0aGUgdmxhbiBvYmplY3QgdG8gcmV0cmlldmVcXG4gNTEzOlxcdCAqXFxuIDUxNDpcXHQgKiBSZXR1cm46IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIHZsYW4gbWF0Y2hpbmcgdGhlIHZpZCBwYXNzZWQgYXMgYXJndW1lbnQgb3JcXG4gNTE1OlxcdCAqIE5VTEwgb3RoZXJ3aXNlLiBUaGUgcmVmY291bnRlciBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0IGlzIGluY3JlbWVudGVkIGJ5IDEuXFxuIDUxNjpcXHQgKi9cXG4gNTE3OlxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKmJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gNTE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgc2hvcnQgdmlkKVxcbiA1MTk6XFx0e1xcbiA1MjA6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbl90bXAsICp2bGFuID0gTlVMTDtcXG4gNTIxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDozNy4wNDQ0NTQ3ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxOTAxMDY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gdGhlIFZMQU4gUmVsZWFzZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gZm9yIHJlbW92aW5nIGEgVkxBTiBmcm9tIHRoZSByZWxldmFudCBsaXN0LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBkZS1hbGxvY2F0aW9uIGZ1bmN0aW9uLiBUaGUgd2F5IGl0IHdvcmtzLCBmcm9tIG15IHVuZGVyc3RhbmRpbmcsIGlzIHRoYXQgdGhlIGxpc3QgaXRzZWxmIG1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTi4gSW4gb3RoZXIgd29yZHMsIHRoZSBsaXN0IGlzIHRyYWNraW5nIHRoaXMgcGFydGljdWxhciB2bGFuLiBUaGUgYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBmdW5jdGlvbiBpcyBsaWtlbHkgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBoaXRzIHplcm8uIEF0IHRoYXQgcG9pbnQsIHRoZSBsaXN0IGVudHJ5IGNhbiBzYWZlbHkgYmUgcmVtb3ZlZCBiZWNhdXNlIG5vdGhpbmcgZWxzZSBpcyB1c2luZyBpdC5cblxuQnV0Li4uIGhhbmcgb24uIElmIHRoZSBsaXN0ICpob2xkcyogYSByZWZlcmVuY2UsIHdoZW4gYW5kIHdoZXJlIGlzIHRoYXQgcmVmZXJlbmNlIGFjdHVhbGx5ICpkcm9wcGVkKj8gSSBuZWVkIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBWTEFOIG1vcmUgY2xvc2VseSB0byB1bmRlcnN0YW5kIHRoZSBvd25lcnNoaXAuIExldCBtZSBjaGVjayBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgdG8gc2VlIGhvdyBpdCdzIGhhbmRsZWQgb24gdGhlIGNyZWF0aW9uIHNpZGUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBsaXN0IGdhaW5zIHRoZSByZWZlcmVuY2UgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2hlcmUgdGhlIGFzc29jaWF0ZWQgcmVsZWFzZSBvY2N1cnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6NDAuNTYzNDY4NDk0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0NTpcXHRpbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuIDU0NjpcXHR7XFxuIDU0NzpcXHRcXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NTA6XFx0XFxuIDU1MTpcXHRcXHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgdmlkKTtcXG4gNTUyOlxcdFxcdGlmICh2bGFuKSB7XFxuIDU1MzpcXHRcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbiA1NTQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NTU6XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIDU1NjpcXHRcXHR9XFxuIDU1NzpcXHRcXG4gNTU4OlxcdFxcdHZsYW4gPSBremFsbG9jX29iaigqdmxhbiwgR0ZQX0FUT01JQyk7XFxuIDU1OTpcXHRcXHRpZiAoIXZsYW4pIHtcXG4gNTYwOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcXG4gNTYxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA1NjI6XFx0XFx0fVxcbiA1NjM6XFx0XFxuIDU2NDpcXHRcXHR2bGFuLVxcdTAwM2ViYXRfcHJpdiA9IGJhdF9wcml2O1xcbiA1NjU6XFx0XFx0dmxhbi1cXHUwMDNldmlkID0gdmlkO1xcbiA1NjY6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZ2bGFuLVxcdTAwM2VyZWZjb3VudCk7XFxuIDU2NzpcXHRcXG4gNTY4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnZsYW4tXFx1MDAzZWFwX2lzb2xhdGlvbiwgMCk7XFxuIDU2OTpcXHRcXG4gNTcwOlxcdFxcdGtyZWZfZ2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VyZWZjb3VudCk7XFxuIDU3MTpcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNnZsYW4tXFx1MDAzZWxpc3QsIFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdCk7XFxuIDU3MjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdC8qIGFkZCBhIG5ldyBUVCBsb2NhbCBlbnRyeS4gVGhpcyBvbmUgd2lsbCBiZSBtYXJrZWQgd2l0aCB0aGUgTk9QVVJHRVxcbiA1NzU6XFx0XFx0ICogZmxhZ1xcbiA1NzY6XFx0XFx0ICovXFxuIDU3NzpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLFxcbiA1Nzg6XFx0XFx0XFx0XFx0ICAgIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkciwgdmlkLFxcbiA1Nzk6XFx0XFx0XFx0XFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcXG4gNTgwOlxcdFxcbiA1ODE6XFx0XFx0LyogZG9uJ3QgcmV0dXJuIHJlZmVyZW5jZSB0byBuZXcgbWVzaGlmX3ZsYW4gKi9cXG4gNTgyOlxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDo0MC41NjM2MTI0MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwMTQ1NDg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJhdGFkdiBWTEFOIFJlZmVyZW5jZSBDb3VudGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBWTEFOIHJlZmVyZW5jZSBjb3VudGluZyBpbiBiYXRhZHYuIEluaXRpYWxseSwgaW4gYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLCB3ZSBpbml0aWFsaXplIHRoZSBgdmxhbi1cdTAwM2VyZWZjb3VudGAgdG8gMS4gVGhlbiB3ZSBpbmNyZW1lbnQgaXQgdG8gMiwgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgbGlzdC4gV2UgKmltbWVkaWF0ZWx5KiBkZWNyZW1lbnQgaXQgYmFjayB0byAxIHZpYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFRoaXMgdGVsbHMgbWUgdGhlIGxpc3QgaXRzZWxmIGhvbGRzIHRoZSAqcHJpbWFyeSogcmVmZXJlbmNlLiBUaGlzIHNlZW1zIHNlbnNpYmxlLiBXaGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZ2V0cyBjYWxsZWQsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO2AsIHdoaWNoICpzaG91bGQqIGRyb3AgdGhlIGxpc3QncyByZWZlcmVuY2UuXG5cbkFoISBOb3cgSSBzZWUuIFdoZW4gdGhlIGxpc3QgZHJvcHMgaXRzIHJlZmVyZW5jZSwgaWYgbm8gb3RoZXIgcGFydCBvZiB0aGUgY29kZSBoYXMgYSBob2xkIG9uIHRoZSByZWZlcmVuY2UsIHRoZSByZWZjb3VudCBiZWNvbWVzIHplcm8gYW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgKnNob3VsZCogZ2V0IGNhbGxlZCwgYW5kIHRoYXQncyB3aGVuIHRoZSBsaXN0IHJlbW92ZXMgdGhlIG9iamVjdC4gR29vZC5cblxuT2theSwgbGV0IG1lIGNoZWNrIHRoZSBcImtpbGxlclwiLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdCB0byBzZWUuIEl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB0byBnZXQgYSByZWZlcmVuY2UgKHJlZmNvdW50ID0gMiksIHRoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB0byBkZXN0cm95IGl0IChyZWZjb3VudCA9IDEpLCBhbmQgKmZpbmFsbHkqIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBvbiBpdHMgKm93biogcmVmZXJlbmNlLCBkcm9wcGluZyB0aGUgY291bnQgdG8gemVyby4gVGhhdCBtYWtlcyBzZW5zZSEgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb3JyZWN0bHkgbWFuYWdlcyB0byBkZWNyZW1lbnQgdGhlIGxpc3QgcmVmZXJlbmNlLCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIG1hbmFnZXMgdG8gZHJvcCBpdHMgcmVmZXJlbmNlLlxuXG5Tbywgd2h5IGRpZCBhIHBhdGNoIHJlbW92ZSB0aGF0ICpmaW5hbCogYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgPyBUaGF0IHNlZW1zIGxpa2UgaXQgY291bGQgbGVhZCB0byBhIGxlYWshIExldCBtZSBnbyBhbmQgY2hlY2sgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYC4gVGhhdCBtaWdodCByZXZlYWwgd2h5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc5OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjQ3LjQ2NTA3MDY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODI6XFx0c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXFxuMTA4NDpcXHR7XFxuMTA4NTpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XFxuMTA4NjpcXHRcXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XFxuMTA4NzpcXHRcXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xcbjEwODg6XFx0XFxuMTA4OTpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNm1lc2hfaWZhY2UtXFx1MDAzZWFkal9saXN0Lmxvd2VyKSkge1xcbjEwOTA6XFx0XFx0XFx0aGFyZF9pZmFjZSA9IG5ldGRldl9hZGphY2VudF9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLVxcdTAwM2VhZGpfbGlzdC5sb3dlci5uZXh0KTtcXG4xMDkxOlxcdFxcdFxcdGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XFxuMTA5MjpcXHRcXHR9XFxuMTA5MzpcXHRcXG4xMDk0OlxcdFxcdC8qIGRlc3Ryb3kgdGhlIFxcXCJ1bnRhZ2dlZFxcXCIgVkxBTiAqL1xcbjEwOTU6XFx0XFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIEJBVEFEVl9OT19GTEFHUyk7XFxuMTA5NjpcXHRcXHRpZiAodmxhbikge1xcbjEwOTc6XFx0XFx0XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbjEwOTg6XFx0XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4xMDk5OlxcdFxcdH1cXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUobWVzaF9pZmFjZSwgaGVhZCk7XFxuMTEwMjpcXHR9XFxuMTEwMzpcXHRcXG4xMTA0OlxcdC8qKlxcbjExMDU6XFx0ICogYmF0YWR2X21lc2hpZl9pc192YWxpZCgpIC0gQ2hlY2sgd2hldGhlciBkZXZpY2UgaXMgYSBiYXRhZHYgbWVzaCBpbnRlcmZhY2VcXG4xMTA2OlxcdCAqIEBuZXRfZGV2OiBkZXZpY2Ugd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWRcXG4xMTA3OlxcdCAqXFxuMTEwODpcXHQgKiBSZXR1cm46IHRydWUgd2hlbiBuZXRfZGV2IGlzIGEgYmF0bWFuLWFkdiBpbnRlcmZhY2UsIGZhbHNlIG90aGVyd2lzZVxcbjExMDk6XFx0ICovXFxuMTExMDpcXHRib29sIGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpXFxuMTExMTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE0OjQ3LjQ2NTE5NTc5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzUxNDQ2NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIERlc3RydWN0aW9uIGluIEJhdG1hbi1hZHYgTWVzaCBJbnRlcmZhY2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBhbmQgSSBzZWUgdGhpcyBjb2RlIGJsb2NrOlxuXG5gYGBjXG5cdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpO1xuXHRpZiAodmxhbikge1xuXHRcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcblx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuXHR9XG5gYGBcblxuVGhhdCBsb29rcyBzdGFuZGFyZCBlbm91Z2gsIGdldCBhIFZMQU4sIGRlc3Ryb3kgaXQsIHJlbGVhc2UgaXQuIEJ1dCB3YWl0Li4uIGRpZG4ndCBJIHNlZSBzb21ldGhpbmcgYWJvdXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNoYW5naW5nIHJlY2VudGx5PyBDb3VsZCBpdCBiZSB0aGF0IHRoZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uIHdhcyBtb2RpZmllZCB0byBoYW5kbGUgdGhlIHJlbGVhc2UgaXRzZWxmPyBObywgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2U7IHRoYXQgc2VlbXMgbGlrZSB0b28gYnJvYWQgYSBjaGFuZ2UgZm9yIHN1Y2ggYSBzbWFsbCB0aGluZywgYW5kIGFueXdheSwgdGhlIGNvbW1pdCBsb2cgZGlkbid0IHN1Z2dlc3QgdGhhdC4gTGV0J3MgZG91YmxlLWNoZWNrIHRoYXQgcGF0Y2guXG5cbipTY2FucyB0aGUgcGF0Y2ggZGlmZi4uLipcblxuYGBgZGlmZlxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuQEAgLTY5MSw5ICs2OTEsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIFxuIFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIFxuLVx0LyogZmluYWxseSBmcmVlIHRoZSB2bGFuIG9iamVjdCAqL1xuLVx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbmBgYFxuXG5BaGEhIEl0ICpkaWQqIHJlbW92ZSB0aGUgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLiBXaHk/IElzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgbm93IHJlc3BvbnNpYmxlIGZvciBib3RoIHRoZSBkZXN0cm95IGFuZCB0aGUgcHV0IG9wZXJhdGlvbnM/IExldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBmaW5kIG91dC4gVGhpcyBpcyBzdGFydGluZyB0byBsb29rIGxpa2UgdGhlIGNvbW1pdCBoYWQgc29tZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHdhc24ndCBjaGFuZ2VkIHRvIGFsc28gZHJvcCBhIHJlZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDo1My4yMTY2NDUxNzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg4OlxcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG4gNTg5OlxcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiA1OTA6XFx0ICogQHZsYW46IHRoZSBvYmplY3QgdG8gcmVtb3ZlXFxuIDU5MTpcXHQgKi9cXG4gNTkyOlxcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIDU5MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG4gNTk0OlxcdHtcXG4gNTk1OlxcdFxcdC8qIGV4cGxpY2l0bHkgcmVtb3ZlIHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGJlY2F1c2UgaXQgaXMgbWFya2VkXFxuIDU5NjpcXHRcXHQgKiB3aXRoIHRoZSBOT1BVUkdFIGZsYWdcXG4gNTk3OlxcdFxcdCAqL1xcbiA1OTg6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLFxcbiA1OTk6XFx0XFx0XFx0XFx0ICAgICAgIHZsYW4tXFx1MDAzZXZpZCwgXFxcInZsYW4gaW50ZXJmYWNlIGRlc3Ryb3llZFxcXCIsIGZhbHNlKTtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4gNjAyOlxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0LyoqXFxuIDYwNTpcXHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2MDY6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjA3OlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTQ6NTMuMjE2NzgzNjg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjc1NDg1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmZXJlbmNlIENvdW50aW5nIEFub21hbHkgaW4gYmF0YWR2IFZMQU4gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBpcyBzdGFydGluZyB0byBuYWcgYXQgbWUuIEl0IGxvb2tzIGxpa2UgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGRyb3BwaW5nIGEgcmVmZXJlbmNlLiBCdXQsIHRoZSBmdW5jdGlvbiBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgcmV0dXJucyBhIHJlZmVyZW5jZSwgYXMgaXQgc2hvdWxkLiBOb3csIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHNvIGl0IGFjcXVpcmVzIGEgcmVmZXJlbmNlLiBUaGVuLCBjcnVjaWFsbHksIGl0IHN1YnNlcXVlbnRseSBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLiBTbyBmYXIsIHNvIGdvb2QuIFRoZSAqcHJvYmxlbSogaXMgdGhhdCBpZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKmRvZXNuJ3QqIGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGFmdGVyIHRoZSBjYWxsIHRvIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIHRoZW4gd2UndmUgZ290IGEgcmVmZXJlbmNlIGxlYWsuXG5cblVubGVzcy4uLiB1bmxlc3MgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyAqYm90aCogcmVmZXJlbmNlcyBzb21laG93PyBObywgdGhhdCdzIG5vdCByaWdodC4gSXQgb25seSBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgb25jZS4gSeKAmW0gcHJldHR5IHN1cmUgaXQgb25seSBkcm9wcyBvbmUuXG5cbldhaXQsIGl0J3MgcG9zc2libGUgdGhpcyB3YXMgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCBjb21taXQuIERhbW4gaXQsIHRoZSBzb3VyY2UgY29kZSdzIGEgYml0IG9mIGEgbWVzcy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBnaXQgbG9nIG9mIGBuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgaXRzIGJlaGF2aW9yIGhhc24ndCBjaGFuZ2VkLiBMZXQncyBzZWUgaWYgd2UgY2FuIGh1bnQgZG93biBhIGZpeCwgb3IgaWYgdGhpcyAqaXMqIGEgbGVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDo1Ny45NDQzMzU2MTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzU5MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODctLyoqXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1ODg6ICogYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oKSAtIHJlbW92ZSBhbmQgZGVzdHJveSBhIG1lc2hpZl92bGFuIG9iamVjdFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg5LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTEtICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1OTI6c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5My1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NjcwPXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5MS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY5MjpcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTMtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTEwODI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTYtXFx0aWYgKHZsYW4pIHtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjEwOTc6XFx0XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5OC1cXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNDo1OC4wMDk3MDc2MTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4Njc4NzkxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCYXRhZHYgVkxBTiBEZXN0cnVjdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgd2UncmUgZGVzdHJveWluZyB0aGUgVkxBTiwgc28gd2UgbmVlZCB0byByZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggaXQuXG5cbkJ1dCB0aGVuLCBpbnNpZGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCwgSSBzZWUgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGJlaW5nIGNhbGxlZC4gTm93LCB0aGF0J3MgaW50ZXJlc3RpbmcuIERvZXMgdGhpcyBjYWxsIGFjdHVhbGx5IGRlY3JlbWVudCBhIHJlZmVyZW5jZSBjb3VudD8gSXMgdGhlcmUgYSBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgYnVyaWVkIGluIGhlcmU/IEkgcmVhbGx5IG5lZWQgdG8gY29uZmlybSB0aGF0LiBJIGtub3cgdGhlIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCBmdW5jdGlvbiBpdHNlbGYgaXMgd2hlcmUgdGhlIGNyaXRpY2FsIHJlZmVyZW5jZSBoYW5kbGluZyB0YWtlcyBwbGFjZSwgc28gSSBiZXR0ZXIgZ28gZGl2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcuIEdvdHRhIGNvbmZpcm0gdGhhdCByZWZlcmVuY2UgZHJvcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6MTAuODc3NTkwOTUxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQwMzQ5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X3R0X2xvY2FsX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMTI9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMzAtXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZsYW4sIFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdCwgbGlzdCkge1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTMxOlxcdFxcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIG9sZF9hZGRyLCB2bGFuLVxcdTAwM2V2aWQsXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMzItXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtYWMgYWRkcmVzcyBjaGFuZ2VkXFxcIiwgZmFsc2UpO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01OTI9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTk3LVxcdCAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTk4OlxcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkcixcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5OS1cXHRcXHRcXHQgICAgICAgdmxhbi1cXHUwMDNldmlkLCBcXFwidmxhbiBpbnRlcmZhY2UgZGVzdHJveWVkXFxcIiwgZmFsc2UpO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9NjgxPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF9tbGFfdHRfcmV0cmFjdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjkzLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjY5NDpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBtY2FzdF9lbnRyeS1cXHUwMDNlYWRkcixcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy02OTUtXFx0XFx0XFx0XFx0ICAgICAgIEJBVEFEVl9OT19GTEFHUyxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTIxNz1iYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTIzNS0vKipcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEyMzY6ICogYmF0YWR2X3R0X2xvY2FsX3JlbW92ZSgpIC0gbG9naWNhbGx5IHJlbW92ZSBhbiBlbnRyeSBmcm9tIHRoZSBsb2NhbCB0YWJsZVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTIzNy0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI0NC0gKi9cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEyNDU6dTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMjQ2LVxcdFxcdFxcdCAgIHVuc2lnbmVkIHNob3J0IHZpZCwgY29uc3QgY2hhciAqbWVzc2FnZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTU4OT1zdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xNzI1LVxcdC8qIHJlbW92ZSBhZGRyZXNzIGZyb20gbG9jYWwgaGFzaCBpZiBwcmVzZW50ICovXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNzI2OlxcdGxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgdHRfYWRkciwgdmlkLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTcyNy1cXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJnbG9iYWwgdHQgcmVjZWl2ZWRcXFwiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaD0xOT1ib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgtMjAtXFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZpZCwgaW50IGlmaW5kZXgsIHUzMiBtYXJrKTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oOjIxOnUxNiBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaC0yMi1cXHRcXHRcXHQgICBjb25zdCB1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNToxMS4xMjE2MzMzNTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg5NjM0ODc1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gVkxBTiBDbGVhbnVwIGluIEJhdGFkdioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB3YXMgcmVzcG9uc2libGUgZm9yIGNvbXBsZXRlbHkgY2xlYW5pbmcgdXAgdGhlIFZMQU4gY29udGV4dCwgaW5jbHVkaW5nIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgdG8gdGhlIGxpc3QuIEJ1dCBzb21ldGhpbmcgZG9lc24ndCBmZWVsIHJpZ2h0LiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IGl0ICptaWdodCogYmUgbWlzc2luZyBhIHN0ZXAgdGhlcmUuXG5cbkxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLCB0aG91Z2guIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgYXNzdW1pbmcgYSBidWcsIGxldCdzIHRyYWNlIHRoZSBsb2dpYyBmbG93LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbiwgYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCwgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0LiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGVudGlyZSByZWxlYXNlIHByb2Nlc3MsIHBheWluZyBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyBsaXN0IHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgdGhyb3VnaG91dC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHRydWUgZGUtYWxsb2NhdGlvbiBsb2dpYyB3aWxsIGJlIHByZXNlbnQsIG9yIGF0IGxlYXN0IHRoZSBjb3VudGVycGFydCB0aGF0IGlzIG1pc3NpbmcgZnJvbSB0aGUgZGVzdHJveSBmdW5jdGlvbi4gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGUgaXNzdWUgY2FuIGJlIGxvY2F0ZWQgdGhpcyB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6MzAuMDg1MTIzODkzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5NjpcXHR2b2lkIGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuIDQ5NzpcXHR7XFxuIDQ5ODpcXHRcXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xcbiA0OTk6XFx0XFxuIDUwMDpcXHRcXHR2bGFuID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiwgcmVmY291bnQpO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZsYW4tXFx1MDAzZWJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1MDM6XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCk7XFxuIDUwNDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dmxhbi1cXHUwMDNlYmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuIDUwNTpcXHRcXG4gNTA2OlxcdFxcdGtmcmVlX3JjdSh2bGFuLCByY3UpO1xcbiA1MDc6XFx0fVxcbiA1MDg6XFx0XFxuIDUwOTpcXHQvKipcXG4gNTEwOlxcdCAqIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSAtIGdldCB0aGUgdmxhbiBvYmplY3QgZm9yIGEgc3BlY2lmaWMgdmlkXFxuIDUxMTpcXHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4gNTEyOlxcdCAqIEB2aWQ6IHRoZSBpZGVudGlmaWVyIG9mIHRoZSB2bGFuIG9iamVjdCB0byByZXRyaWV2ZVxcbiA1MTM6XFx0ICpcXG4gNTE0OlxcdCAqIFJldHVybjogdGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgdmxhbiBtYXRjaGluZyB0aGUgdmlkIHBhc3NlZCBhcyBhcmd1bWVudCBvclxcbiA1MTU6XFx0ICogTlVMTCBvdGhlcndpc2UuIFRoZSByZWZjb3VudGVyIG9mIHRoZSByZXR1cm5lZCBvYmplY3QgaXMgaW5jcmVtZW50ZWQgYnkgMS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6MzAuMDg1MjMzMjUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5OTU1ODU2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuYCBSZWZlcmVuY2UgQ291bnQgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgdGhlIGtleSDigJMgaXQncyB3aGF0IHJlbW92ZXMgdGhlIFZMQU4gb2JqZWN0IGZyb20gdGhlIGxpc3QuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoZSBsaXN0ICpkaWRuJ3QqIGhvbGQgYSByZWZlcmVuY2UuIEJ1dCB3YWl0LCBpZiB0aGF0IHdlcmUgdHJ1ZSwgdGhlbiBob3cgaXMgdGhlIHJlZmNvdW50IGV2ZXIgZGVjcmVtZW50ZWQ/IExldCdzIHRyYWNlIGl0IHRocm91Z2g6IGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCBpbml0aWFsaXplcyB0aGUgcmVmY291bnQgdG8gMSB3aXRoIGBrcmVmX2luaXRgLiBUaGVuLCBga3JlZl9nZXRgIGluY3JlbWVudHMgaXQgdG8gMi4gVGhlIG9iamVjdCBpcyBhZGRlZCB0byB0aGUgbGlzdCBhbmQgdGhlbiAqaW1tZWRpYXRlbHkqIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGlzIGNhbGxlZCwgZHJvcHBpbmcgdGhlIGNvdW50IGJhY2sgdG8gMS4gU28sIHRoZSBsaXN0ICpkb2VzKiBpbmRlZWQgaG9sZCBhIHJlZmVyZW5jZSwgYW5kIHRoYXQgcmVmZXJlbmNlIGlzIHRoZSBvbmUgdGhhdCBicmluZ3MgdGhlIGNvdW50IHRvIDEuXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgd2hlbiBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzIGNhbGxlZCwgdGhlIHJlZmNvdW50ICptdXN0KiBoYXZlIGhpdCAwLiBUaGF0J3MgaG93IHdlIGtub3cgaXQncyB0aW1lIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBIb3dldmVyLCBpZiB0aGUgbGlzdCBpcyBob2xkaW5nIGEgcmVmZXJlbmNlLCBob3cgY2FuIGl0IGV2ZXIgaGl0IDA/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0LlxuXG5BbHJpZ2h0LCB3aG8ncyByZXNwb25zaWJsZSBmb3IgZGVjcmVtZW50aW5nIHRoZSByZWZjb3VudD8gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFNvIHRoYXQgZHJvcHMgYSByZWZlcmVuY2UuIEJ1dCB0aGVuIEkgc2F3IHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgd2hpY2ggZ2l2ZXMgdGhlIHJlZmNvdW50IGJhY2sgdG8gMiwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWZjb3VudCB0byAxLCBhbmQgdGhlIGNvZGUgcmVtb3ZlZCB0aGUgbGFzdCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIEJ1dCBpZiB0aGUgZnVuY3Rpb24gZG9lc24ndCBkcm9wIHRoZSBsYXN0IHJlZmVyZW5jZSBjb3VudCwgaG93IGNhbiBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGdldCBjYWxsZWQ/IEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGxlYWshXG5cbkknbSB0aGlua2luZyBhYm91dCBpdCBub3csIHRoZSBwYXRjaCBJIGhhdmUgc2hvd3MgdGhlIHJlbW92YWwgb2YgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuIEJ1dCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGFscmVhZHkgZHJvcHMgYSByZWZlcmVuY2UsIGFuZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBvbmUgZnJvbSBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHRoZW4gdGhhdCBmaW5hbCBgcHV0YCBjYWxsIGlzIGNyaXRpY2FsLiBUaGUgcmVtb3ZhbCAqbGVha3MqIGEgcmVmZXJlbmNlLiBUaGF0IG1lYW5zIHRoZSByZWZjb3VudCB3aWxsIG5ldmVyIHJlYWNoIHplcm8gYW5kIHRoZSBWTEFOIG9iamVjdCB3b24ndCBiZSBmcmVlZC4gVGhlIHBhdGNoIGhhcyBpbnRyb2R1Y2VkIGEgbWVtb3J5IGxlYWshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6MzkuMDgwODIxNjY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4ODpcXHQgKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XFxuIDU4OTpcXHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4gNTkwOlxcdCAqIEB2bGFuOiB0aGUgb2JqZWN0IHRvIHJlbW92ZVxcbiA1OTE6XFx0ICovXFxuIDU5MjpcXHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiA1OTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXFxuIDU5NDpcXHR7XFxuIDU5NTpcXHRcXHQvKiBleHBsaWNpdGx5IHJlbW92ZSB0aGUgYXNzb2NpYXRlZCBUVCBsb2NhbCBlbnRyeSBiZWNhdXNlIGl0IGlzIG1hcmtlZFxcbiA1OTY6XFx0XFx0ICogd2l0aCB0aGUgTk9QVVJHRSBmbGFnXFxuIDU5NzpcXHRcXHQgKi9cXG4gNTk4OlxcdFxcdGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkcixcXG4gNTk5OlxcdFxcdFxcdFxcdCAgICAgICB2bGFuLVxcdTAwM2V2aWQsIFxcXCJ2bGFuIGludGVyZmFjZSBkZXN0cm95ZWRcXFwiLCBmYWxzZSk7XFxuIDYwMDpcXHRcXG4gNjAxOlxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuIDYwMjpcXHR9XFxuIDYwMzpcXHRcXG4gNjA0OlxcdC8qKlxcbiA2MDU6XFx0ICogYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKCkgLSBuZG9fYWRkX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG4gNjA2OlxcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXFxuIDYwNzpcXHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE1OjM5LjA4MDkyOTMyNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzc4NTA0OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRG91YmxlIEZyZWUgaW4gVkxBTiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nIHNlZW1zIG9mZi4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIFZMQU4gZGVzdHJ1Y3Rpb24gaW4gdGhlIGJhdGFkdiBtZXNoIGludGVyZmFjZSBjb2RlLiBJIHNlZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGF0J3Mgbm9ybWFsLiBUaGVuLCBJIG5vdGljZWQgdGhpcyBzZXF1ZW5jZSBpbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgOlxuXG5gYGBjXG5cdC8qIGRlc3Ryb3kgdGhlIFwidW50YWdnZWRcIiBWTEFOICovXG5cdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCBCQVRBRFZfTk9fRkxBR1MpO1xuXHRpZiAodmxhbikge1xuXHRcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcblx0XHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xuXHR9XG5gYGBcblxuVGhlIHRoaW5nIHRoYXQgYnVncyBtZSBpcyB0aGF0IGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBpcyBleHBsaWNpdGx5IGNhbGxlZCAqYWZ0ZXIqIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAsIHdoaWNoLCBhcyBtZW50aW9uZWQgcHJldmlvdXNseSwgYWxzbyBjYWxscyBpdC4gVGhpcyBmZWVscyByZWR1bmRhbnQgYXQgYmVzdCwgYnV0IGNvdWxkIGJlIHByb2JsZW1hdGljLCBlc3BlY2lhbGx5IHdpdGggdGhlIGFkZGVkIGNvbXBsZXhpdHkgb2YgYSBWTEFOIGltcGxlbWVudGF0aW9uLiBXaHkgaXMgaXQgYmVpbmcgY2FsbGVkIHR3aWNlP1xuXG5JdCBtYWtlcyBtZSB3b25kZXIgaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCB3YXMgdGhlIGNvZGUgdGhhdCBjaGFuZ2VkLCBvciBpZiBhIGNoYW5nZSBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgdGhlIHJlYWwgc291cmNlIG9mIGEgcG90ZW50aWFsIGRvdWJsZSBmcmVlLiBJdCBsb29rcyBsaWtlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkaWQgbm90IGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIHdoZW4gaXQgc2hvdWxkIGhhdmUuXG5cblNvLCBJJ20gZ29pbmcgdG8gcmV2aXNpdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYW5kIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIHRoaW5ncyBjb3JyZWN0bHksIGNvbnNpZGVyaW5nIHRoZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHNlcXVlbmNlLiBUaGlzIGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRlYnVnZ2luZyB0aGlzIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0OTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo0My44NTk0Mzg1NzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcwOlxcdHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuIDY3MTpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNjcyOlxcdHtcXG4gNjczOlxcdFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA2NzQ6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4gNjc1OlxcdFxcbiA2NzY6XFx0XFx0Lyogb25seSA4MDIuMVEgdmxhbnMgYXJlIHN1cHBvcnRlZC4gYmF0bWFuLWFkdiBkb2VzIG5vdCBrbm93IGhvdyB0b1xcbiA2Nzc6XFx0XFx0ICogaGFuZGxlIG90aGVyIHR5cGVzXFxuIDY3ODpcXHRcXHQgKi9cXG4gNjc5OlxcdFxcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXFxuIDY4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjgxOlxcdFxcbiA2ODI6XFx0XFx0LyogXFxcInByaW9yaXR5IHRhZ1xcXCIgZnJhbWVzIGFyZSBoYW5kbGVkIGxpa2UgXFxcInVudGFnZ2VkXFxcIiBmcmFtZXNcXG4gNjgzOlxcdFxcdCAqIGFuZCBubyBtZXNoaWZfdmxhbiBuZWVkcyB0byBiZSBkZXN0cm95ZWRcXG4gNjg0OlxcdFxcdCAqL1xcbiA2ODU6XFx0XFx0aWYgKHZpZCA9PSAwKVxcbiA2ODY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY4NzpcXHRcXG4gNjg4OlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcXG4gNjg5OlxcdFxcdGlmICghdmxhbilcXG4gNjkwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA2OTE6XFx0XFxuIDY5MjpcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxuIDY5MzpcXHRcXG4gNjk0OlxcdFxcdHJldHVybiAwO1xcbiA2OTU6XFx0fVxcbiA2OTY6XFx0XFxuIDY5NzpcXHQvKiBiYXRtYW4tYWR2IG5ldHdvcmsgZGV2aWNlcyBoYXZlIGRldmljZXMgbmVzdGluZyBiZWxvdyBpdCBhbmQgYXJlIGEgc3BlY2lhbFxcbiA2OTg6XFx0ICogXFxcInN1cGVyIGNsYXNzXFxcIiBvZiBub3JtYWwgbmV0d29yayBkZXZpY2VzOyBzcGxpdCB0aGVpciBsb2NrcyBvZmYgaW50byBhXFxuIDY5OTpcXHQgKiBzZXBhcmF0ZSBjbGFzcyBzaW5jZSB0aGV5IGFsd2F5cyBuZXN0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo0My44NTk1NTMzOTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzOTg5MTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWTEFOIFJlZmVyZW5jZSBDb3VudCBDb25mdXNpb24qKlxuXG5Pa2F5LCBzbyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBjYWxsZWQgd2hlbiBhIFZMQU4gaXMga2lsbGVkLCBtYWtlcyBzZW5zZS4gTm93LCBpZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgcmVtb3ZlcyB0aGUgcmVmZXJlbmNlIHVzaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgYW5kIHRoZSBWTEFOIGhhcyBvbmx5IG9uZSByZWZlcmVuY2UgZnJvbSB0aGUgbGlzdCwgd2UndmUgZ290IGEgcHJvYmxlbS4gSXQgd291bGQgTkVWRVIgYmUgZnJlZWQhIFRoZSBwYXRjaCByZW1vdmVzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgd2h5P1xuXG5BbHJpZ2h0LCBsZXQncyBjaGVjayBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHRvIHNlZSBpZiB0aGF0IGhhbmRsZXMgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBsaXN0LiBBaCwgeWVzLCBpdCBkb2VzIHVzZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIEJ1dCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgbGlzdCwgYW5kIHNpbmNlIGEgcmVmZXJlbmNlIHdhcyBvYnRhaW5lZCBmcm9tIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgdGhlIHJlZmNvdW50IHNob3VsZCBiZSBiYWNrIHRvIDEuIFRoYXQncyBhc3N1bWluZyB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgcmVmZXJlbmNlIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLiBUaGVuIHRoZSByZWZjb3VudCBnb2VzIHRvIDAsIGFuZCB3ZSBnZXQgdGhlIGZyZWUgdGhhdCB3ZSB3YW50LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZeKApndoYXQgaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBpcyBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZSAqYmVzaWRlcyogdGhpcyBmbG93PyBUaGVuIHdlIGNvdWxkIHN0aWxsIGhhdmUgYSBkYW5nbGluZyByZWZlcmVuY2UhIE9rYXksIGxldCdzIGxvb2sgYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCB0byBzZWUgd2hlcmUgZWxzZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo0OC45OTk0NDk0MTVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MjpcXHRzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcXG4xMDgzOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4xMDg0OlxcdHtcXG4xMDg1OlxcdFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcXG4xMDg2OlxcdFxcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcXG4xMDg3OlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuMTA4ODpcXHRcXG4xMDg5OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2bWVzaF9pZmFjZS1cXHUwMDNlYWRqX2xpc3QubG93ZXIpKSB7XFxuMTA5MDpcXHRcXHRcXHRoYXJkX2lmYWNlID0gbmV0ZGV2X2FkamFjZW50X2dldF9wcml2YXRlKG1lc2hfaWZhY2UtXFx1MDAzZWFkal9saXN0Lmxvd2VyLm5leHQpO1xcbjEwOTE6XFx0XFx0XFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcXG4xMDkyOlxcdFxcdH1cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0XFx0LyogZGVzdHJveSB0aGUgXFxcInVudGFnZ2VkXFxcIiBWTEFOICovXFxuMTA5NTpcXHRcXHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgQkFUQURWX05PX0ZMQUdTKTtcXG4xMDk2OlxcdFxcdGlmICh2bGFuKSB7XFxuMTA5NzpcXHRcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxuMTA5ODpcXHRcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbjEwOTk6XFx0XFx0fVxcbjExMDA6XFx0XFxuMTEwMTpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShtZXNoX2lmYWNlLCBoZWFkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTU6NDguOTk5NTkzNjE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMjU0OTgyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkxBTiBPYmplY3QgTGVhayBpbiBiYXRhZHYqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgaGVhZC4uLiBJIHNlZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGF0IG1ha2VzIHNlbnNlLiBCdXQgd2h5IGRpZCB0aGUgcGF0Y2ggcmVtb3ZlIHRoYXQgY2FsbCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uXG5cbkxldCBtZSBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIGNhbGwgY2hhaW4uIEknbGwgY2hlY2sgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgY2FsbGVkIGJ5IGB2bGFuX3ZpZF9kZWxgLiBZZXAsIGl0IGxvb2tzIGxpa2UgYHZsYW5fdmlkX2RlbGAgY2FsbHMgYG5kb192bGFuX3J4X2tpbGxfdmlkYCwgYW5kLCBpbiB0dXJuLCB0aGF0IGNhbGxzIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC4gT2theSwgc28gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIHRyaWdnZXJlZCB3aGVuIGEgVkxBTiBpcyBiZWluZyBkZWxldGVkLlxuXG5Ob3csIGlmIHRoZXkgKnJlbW92ZWQqIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCwgdGhhdCBtZWFucyB0aGUgVkxBTiBvYmplY3QgbWlnaHQgbm90IGJlIGZyZWVkLiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnISBMZXQncyBlbGltaW5hdGUgb3RoZXIgcG9zc2liaWxpdGllcy4gRGlkIHRoZXkgY2hhbmdlIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgdG8gKm5vdCogZHJvcCB0aGUgcmVmZXJlbmNlPyBOb3BlLCBqdXN0IGNoZWNrZWQsIGFuZCBpdCBkZWZpbml0ZWx5IHN0aWxsIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC5cblxuTWF5YmUgdGhlIGxvZ2ljIGlzIHRoZSBvcHBvc2l0ZS4gUGVyaGFwcywgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyBhIHJlZmVyZW5jZSwgYW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCAqdXNlZCogdG8gZHJvcCBhbm90aGVyLCBidXQgbm8gbG9uZ2VyIGRvZXM/IEhvbGQgb24sIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnZXRzIGEgcmVmZXJlbmNlISBTbywgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgYSByZWZlcmVuY2UsIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKHdoaWNoIGRyb3BzICpvbmUqIHJlZmVyZW5jZSksIGFuZCB0aGVuIHJldHVybnMuXG5cblRoaXMgbWVhbnMgdGhlIHJlZmNvdW50IGlzIDEgYWZ0ZXIgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGZpbmlzaGVzLiBUaGUgb2JqZWN0IGlzIGxlYWtlZCEgT3IsIHdhaXQuLi4gYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gTGV0IG1lIHJlLWV4YW1pbmUgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFnYWluLlxuXG5gYGBjXG5cdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcblx0aWYgKCF2bGFuKVxuXHRcdHJldHVybiAtRU5PRU5UO1xuXG5cdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcblxuXHRyZXR1cm4gMDtcbmBgYFxuXG5Pa2F5LCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSByZWZlcmVuY2UsIGFuZCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2V0cyBvbmUsIHRoZW4gdGhlIG5ldCBjaGFuZ2UgaXMgemVyby4gVGhlICpwcm9ibGVtKiBpcyB0aGF0IHRoZSBWTEFOIHdhcyBhbHJlYWR5IGluIHRoZSBsaXN0LCBzbyBpdCBoYWQgYSByZWZlcmVuY2UgY291bnQgb2YgMS4gQWZ0ZXIgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIFNUSUxMIDEuIFRoYXQgaXMgYSBsZWFrIVxuXG5BaGEhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgKm5vdCogY2FsbGVkLiBTbywgdGhlIFZMQU4gaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkb2Vzbid0IHJlbW92ZSBpdDsgaXQganVzdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFRoZXJlZm9yZSwgaWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRvZXNuJ3QgY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAsIHRoZSByZWZjb3VudCByZW1haW5zIGF0IDEsIGFuZCB0aGUgVkxBTiBpcyAqbm90KiByZW1vdmVkIGZyb20gdGhlIGxpc3QhXG5cbk5vdywgd2h5IHdvdWxkIHRoZXkgd2FudCB0byBrZWVwIGl0IGluIHRoZSBsaXN0PyBUaGF0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuIExldCBtZSBjaGVjayBob3cgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo1OC4zMjUwOTU0MDNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjA0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA0OlxcdC8qKlxcbiA2MDU6XFx0ICogYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKCkgLSBuZG9fYWRkX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG4gNjA2OlxcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXFxuIDYwNzpcXHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXFxuIDYwODpcXHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBuZXcgdmxhblxcbiA2MDk6XFx0ICpcXG4gNjEwOlxcdCAqIFNldCB1cCBhbGwgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIHRoZSBuZXcgdmxhbiBvbiB0b3Agb2YgdGhlXFxuIDYxMTpcXHQgKiBtZXNoIGludGVyZmFjZVxcbiA2MTI6XFx0ICpcXG4gNjEzOlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuXFxuIDYxNDpcXHQgKi9cXG4gNjE1OlxcdHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG4gNjE2OlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuIDYxNzpcXHR7XFxuIDYxODpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gNjE5OlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuIDYyMDpcXHRcXG4gNjIxOlxcdFxcdC8qIG9ubHkgODAyLjFRIHZsYW5zIGFyZSBzdXBwb3J0ZWQuXFxuIDYyMjpcXHRcXHQgKiBiYXRtYW4tYWR2IGRvZXMgbm90IGtub3cgaG93IHRvIGhhbmRsZSBvdGhlciB0eXBlc1xcbiA2MjM6XFx0XFx0ICovXFxuIDYyNDpcXHRcXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbiA2MjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdC8qIFZJRCAwIGlzIG9ubHkgdXNlZCB0byBpbmRpY2F0ZSBcXFwicHJpb3JpdHkgdGFnXFxcIiBmcmFtZXMgd2hpY2ggb25seVxcbiA2Mjg6XFx0XFx0ICogY29udGFpbiBwcmlvcml0eSBpbmZvcm1hdGlvbiBhbmQgbm8gVklELiBObyBtYW5hZ2VtZW50IHN0cnVjdHVyZXNcXG4gNjI5OlxcdFxcdCAqIHNob3VsZCBiZSBjcmVhdGVkIGZvciB0aGlzIFZJRCBhbmQgaXQgc2hvdWxkIGJlIGhhbmRsZWQgbGlrZSBhblxcbiA2MzA6XFx0XFx0ICogdW50YWdnZWQgZnJhbWUuXFxuIDYzMTpcXHRcXHQgKi9cXG4gNjMyOlxcdFxcdGlmICh2aWQgPT0gMClcXG4gNjMzOlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNTo1OC4zMjUyMTczOTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU0MjIzODAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipEaXZpbmcgaW50byBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIHJlc3Qgb2YgdGhpcyBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyLiBNeSBleHBlcnQga25vd2xlZGdlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBjcml0aWNhbCBpbiBicmlkZ2luZyBWTEFOcyB3aXRoIHRoZSBCQVRNQU4tYWR2IHByb3RvY29sLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBuZXR3b3JrIHNlZ21lbnRhdGlvbiBhbmQgc2VjdXJpdHkgaW1tZWRpYXRlbHkuIFdoYXQncyBpdCBkb2luZyB3aXRoIHRoZSBWTEFOIElEPyBIb3cgaXMgdGhpcyByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIG1lc2ggaW5mcmFzdHJ1Y3R1cmU/IFRpbWUgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgc3RlcHMgaW52b2x2ZWQuIEknbGwgZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzLCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgbGlrZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc0NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTY6MDAuODY3NDU5Nzk1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzNDpcXHRcXG4gNjM1OlxcdFxcdHZpZCB8PSBCQVRBRFZfVkxBTl9IQVNfVEFHO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHQvKiBpZiBhIG5ldyB2bGFuIGlzIGdldHRpbmcgY3JlYXRlZCBhbmQgaXQgYWxyZWFkeSBleGlzdHMsIGl0IG1lYW5zIHRoYXRcXG4gNjM4OlxcdFxcdCAqIGl0IHdhcyBub3QgZGVsZXRlZCB5ZXQuIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSBpbmNyZWFzZXMgdGhlXFxuIDYzOTpcXHRcXHQgKiByZWZjb3VudCBpbiBvcmRlciB0byByZXZpdmUgdGhlIG9iamVjdC5cXG4gNjQwOlxcdFxcdCAqXFxuIDY0MTpcXHRcXHQgKiBpZiBpdCBkb2VzIG5vdCBleGlzdCB0aGVuIGNyZWF0ZSBpdC5cXG4gNjQyOlxcdFxcdCAqL1xcbiA2NDM6XFx0XFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCk7XFxuIDY0NDpcXHRcXHRpZiAoIXZsYW4pXFxuIDY0NTpcXHRcXHRcXHRyZXR1cm4gYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihiYXRfcHJpdiwgdmlkKTtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0LyogYWRkIGEgbmV3IFRUIGxvY2FsIGVudHJ5LiBUaGlzIG9uZSB3aWxsIGJlIG1hcmtlZCB3aXRoIHRoZSBOT1BVUkdFXFxuIDY0ODpcXHRcXHQgKiBmbGFnLiBUaGlzIG11c3QgYmUgYWRkZWQgYWdhaW4sIGV2ZW4gaWYgdGhlIHZsYW4gb2JqZWN0IGFscmVhZHlcXG4gNjQ5OlxcdFxcdCAqIGV4aXN0cywgYmVjYXVzZSB0aGUgZW50cnkgd2FzIGRlbGV0ZWQgYnkga2lsbF92aWQoKVxcbiA2NTA6XFx0XFx0ICovXFxuIDY1MTpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLFxcbiA2NTI6XFx0XFx0XFx0XFx0ICAgIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkciwgdmlkLFxcbiA2NTM6XFx0XFx0XFx0XFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0cmV0dXJuIDA7XFxuIDY1NjpcXHR9XFxuIDY1NzpcXHRcXG4gNjU4OlxcdC8qKlxcbiA2NTk6XFx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2NjA6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjYxOlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG4gNjYyOlxcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxcbiA2NjM6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTY6MDAuODY3NTcyNTk1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDUzNTM2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gSGFuZGxpbmcgaW4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGZ1bmN0aW9uLiBUaGUgY29tbWVudCdzIHF1aXRlIGNsZWFyOiBpZiB3ZSdyZSBhZGRpbmcgYSBWTEFOIElEIChgdmlkYCkgdGhhdCAqYWxyZWFkeSogZXhpc3RzLCBpdCBtZWFucyB0aGUgb2JqZWN0IHdhc24ndCBmdWxseSBjbGVhbmVkIHVwIHlldCwgYW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCByZXZpdmVzIGl0LiBJZiBpdCBkb2Vzbid0IGV4aXN0LCB3ZSBjcmVhdGUgaXQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuQnV0IGhhbmcgb27igKYgaWYgaXQgXCJyZXZpdmVzXCIgdGhlIG9iamVjdCwgaXQncyAqZXhwZWN0aW5nKiBpdCB0byBzdGlsbCBiZSBoYW5naW5nIGFyb3VuZCBzb21ldGltZXMuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93IEkgc2VlIHRoYXQgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGlzIGNhbGxlZCByZWdhcmRsZXNzLiBJdCBmZXRjaGVzIGEgcmVmZXJlbmNlIGlmIHRoZSB2bGFuIGV4aXN0cywgb3IgY3JlYXRlcyB0aGUgdmxhbi4gQW5kIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gcmVmZXJlbmNlIGNvdW50aW5nIGhlcmUuXG5cbkkgc2VlIGl0IGdldHMgYSByZWZlcmVuY2Ugd2hlbiBpdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIHJlZ2FyZGxlc3Mgb2YgY3JlYXRpb24uIEFuZCB0aGVu4oCmIGl0IHJldHVybnMgMC4gSXQgKmRvZXNuJ3QqIHJlbGVhc2UgdGhhdCByZWZlcmVuY2UgYW55d2hlcmUuIEhvbGQgb24gYSBzZWNvbmTigKYgRG9lcyB0aGF0IG1lYW4gdGhpcyBmdW5jdGlvbiBpcyBsZWFraW5nIGEgcmVmZXJlbmNlPyBUaGF0J3MgYSBkZWZpbml0ZSByZWQgZmxhZy4gV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgd2l0aCByZWZlcmVuY2UgY291bnRpbmcgaW4gdGhlc2Ugc2NlbmFyaW9zLlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUgZm9yIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCB0byBtYWtlIHN1cmUgaXQgaGFuZGxlcyB0aGluZ3MgY29ycmVjdGx5IHRoZXJlLiBXZSAqbXVzdCogZW5zdXJlIHRoYXQgb2JqZWN0IGxpZmVjeWNsZXMgYXJlIG1hbmFnZWQgaW1wZWNjYWJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NDksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjowNi4xNzI5MzA0OTZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdGludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNTQ2OlxcdHtcXG4gNTQ3OlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuIDU1MDpcXHRcXG4gNTUxOlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQpO1xcbiA1NTI6XFx0XFx0aWYgKHZsYW4pIHtcXG4gNTUzOlxcdFxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuIDU1NDpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3RfbG9jayk7XFxuIDU1NTpcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gNTU2OlxcdFxcdH1cXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0dmxhbiA9IGt6YWxsb2Nfb2JqKCp2bGFuLCBHRlBfQVRPTUlDKTtcXG4gNTU5OlxcdFxcdGlmICghdmxhbikge1xcbiA1NjA6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NjE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDU2MjpcXHRcXHR9XFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdHZsYW4tXFx1MDAzZWJhdF9wcml2ID0gYmF0X3ByaXY7XFxuIDU2NTpcXHRcXHR2bGFuLVxcdTAwM2V2aWQgPSB2aWQ7XFxuIDU2NjpcXHRcXHRrcmVmX2luaXQoXFx1MDAyNnZsYW4tXFx1MDAzZXJlZmNvdW50KTtcXG4gNTY3OlxcdFxcbiA1Njg6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2dmxhbi1cXHUwMDNlYXBfaXNvbGF0aW9uLCAwKTtcXG4gNTY5OlxcdFxcbiA1NzA6XFx0XFx0a3JlZl9nZXQoXFx1MDAyNnZsYW4tXFx1MDAzZXJlZmNvdW50KTtcXG4gNTcxOlxcdFxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCwgXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0KTtcXG4gNTcyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWVzaGlmX3ZsYW5fbGlzdF9sb2NrKTtcXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0LyogYWRkIGEgbmV3IFRUIGxvY2FsIGVudHJ5LiBUaGlzIG9uZSB3aWxsIGJlIG1hcmtlZCB3aXRoIHRoZSBOT1BVUkdFXFxuIDU3NTpcXHRcXHQgKiBmbGFnXFxuIDU3NjpcXHRcXHQgKi9cXG4gNTc3OlxcdFxcdGJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UsXFxuIDU3ODpcXHRcXHRcXHRcXHQgICAgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLCB2aWQsXFxuIDU3OTpcXHRcXHRcXHRcXHQgICAgQkFUQURWX05VTExfSUZJTkRFWCwgQkFUQURWX05PX01BUkspO1xcbiA1ODA6XFx0XFxuIDU4MTpcXHRcXHQvKiBkb24ndCByZXR1cm4gcmVmZXJlbmNlIHRvIG5ldyBtZXNoaWZfdmxhbiAqL1xcbiA1ODI6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjA2LjE3MzA4MDk4NloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTg5NTIyODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIFJlZmVyZW5jZSBDb3VudGluZyBpbiBiYXRhZHYqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyByZWxhdGVkIHRvIFZMQU5zIHdpdGhpbiB0aGUgYGJhdGFkdmAgbW9kdWxlLlxuXG5GaXJzdCwgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIGNyZWF0ZXMgYSBWTEFOIG9iamVjdCwgaW5pdGlhbGl6ZXMgaXRzIHJlZmVyZW5jZSBjb3VudCB0byAxLCBpbmNyZW1lbnRzIGl0IHRvIDIgYmVmb3JlIGFkZGluZyBpdCB0byBhIGxpc3QsIHRoZW4gZGVjcmVtZW50cyBpdCBhZ2FpbiB0byAxIGJlZm9yZSByZXR1cm5pbmcuIFNvIGl0ICppbnRlbnRpb25hbGx5KiBsZWF2ZXMgdGhlIGxpc3QgYXMgdGhlIHNvbGUgaG9sZGVyIG9mIGEgcmVmZXJlbmNlIChyZWZjb3VudCAxKS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgdG8gcmV0cmlldmUgYSBWTEFOLiBJZiB0aGUgVkxBTiBkb2Vzbid0IGV4aXN0LCBpdCBjcmVhdGVzIGl0IHVzaW5nIHRoZSBwcm9jZXNzIGRlc2NyaWJlZCBhYm92ZTogaW5pdGlhbGl6ZXMgdG8gMSwgaW5jcmVtZW50cyB0byAyLCBhZGRzIGl0IHRvIHRoZSBsaXN0LCB0aGVuIGRyb3BzIHRvIDEgYmVmb3JlIHJldHVybmluZy4gQnV0LCBjcml0aWNhbGx5LCBpZiB0aGUgVkxBTiAqZG9lcyogZXhpc3QsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCByZXR1cm5zIGEgcmVmZXJlbmNlLiBUaGVuIGl0IGFkZHMgYSBuZXcgVFQgbG9jYWwgZW50cnkgYW5kIHRoZW4gcmV0dXJucyAqd2l0aG91dCogZHJvcHBpbmcgdGhhdCByZWZlcmVuY2UhIFRoaXMgbWVhbnMgdGhlIHJlZmNvdW50IGJlY29tZXMgMi5cblxuTm93LCBpZiB0aGUgcmVmY291bnQgaXMgaW5kZWVkIDIgd2hlbiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCByZXR1cm5zLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKm11c3QqIGhhbmRsZSB0aGlzLiBMZXQncyBzZWUuLi4gaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIHdoaWNoIGluY3JlbWVudHMgaXQgKHRvIDMpLCBkZXN0cm95cyB0aGUgVkxBTiwgd2hpY2ggZHJvcHMgb25lIChiYWNrIHRvIDIpIGFuZCAqdGhlbiogY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIHdoaWNoIGRyb3BzIGl0IHRvIDEuIFdoaWNoIGxlYXZlcyB0aGUgb2JqZWN0IHN0aWxsIGluIHRoZSBsaXN0LCBidXQgbm90IHJlZmVyZW5jZWQgYnkgYW55dGhpbmcgZWxzZSEgVGhhdCBzZWVtcy4uLiBwcm9ibGVtYXRpYy5cblxuQnV0IHdhaXQuIElmIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgdGhlbiBpdCBpcyBsZWZ0IGF0IDEuIFNvLCBpZiB3ZSByZS1yZWFkIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgd2Ugc2VlIHRoYXQgaXMgY29ycmVjdCEgQ3JlYXRlcyByZWZjb3VudCB0byAxLCBpbmNyZWFzZXMgdG8gMiBmb3IgdGhlIGxpc3QsIHRoZW4gZHJvcHMgdG8gMSBiZWZvcmUgcmV0dXJuaW5nLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2ssIGFuZCByZS1leGFtaW5lIHRoZSBjcnVjaWFsIGNhc2Ugd2hlcmUgdGhlIFZMQU4gKmFscmVhZHkgZXhpc3RzKi4gSW4gdGhpcyBjYXNlLCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2l2ZXMgdXMgYSByZWZjb3VudCBvZiAyLiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBpcyB0aGVuIHJldHVybmluZyB3aXRob3V0IGRyb3BwaW5nIHRoYXQgcmVmZXJlbmNlLiBUaGF0J3MgdGhlIGtleSFcblxuVGhlcmVmb3JlLCB0aGUgYnVnIGlzIHJpZ2h0IGhlcmU6ICoqYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKnNob3VsZCogZHJvcCB0aGUgcmVmZXJlbmNlIGl0IGdvdCBmcm9tIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCB3aGVuIHRoZSBWTEFOIGFscmVhZHkgZXhpc3RzKiouIEl0J3MgbGVhdmluZyBhbiBleHRyYSByZWZlcmVuY2UgaGFuZ2luZyBhcm91bmQsIHdoaWNoIHNlZW1zIHRvIGNyZWF0ZSBpbmNvbnNpc3RlbnQgcmVmZXJlbmNlIGNvdW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjoxNS43NjI2MDY2NThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjU1NDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU5Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MDQtLyoqXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2MDU6ICogYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKCkgLSBuZG9fYWRkX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTYwNi0gKiBAZGV2OiB0aGUgbmV0ZGV2IG9mIHRoZSBtZXNoIGludGVyZmFjZVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02MTQtICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2MTU6c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjE2LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTg3ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhdGFkdl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04NzYtXFx0Lm5kb19nZXRfc3RhdHMgPSBiYXRhZHZfaW50ZXJmYWNlX3N0YXRzLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODc3OlxcdC5uZG9fdmxhbl9yeF9hZGRfdmlkID0gYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODc4LVxcdC5uZG9fdmxhbl9yeF9raWxsX3ZpZCA9IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjE2LjcwOTE3MjcyNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM2NzE0ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKlJldmlld2luZyB0aGUgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byByZXZpc2l0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgYSBxdWljayByZWZyZXNoZXIgb24gaXRzIGNvcmUgbG9naWMgaXMgaW4gb3JkZXIuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVkxBTiBJRCBhbmQgdGhlIG92ZXJhbGwgQkFUTUFOLUFkdiBpbnRlcmZhY2UgbWFuYWdlbWVudC4gVGhlcmUgY291bGQgYmUgc29tZXRoaW5nIEkgbWlzc2VkIGluIHRoZSBsYXN0IGRlZXAgZGl2ZSB0aGF0IHdhcnJhbnRzIGFub3RoZXIgbG9vaywgb3IgcGVyaGFwcyBhIG5ldyBpbnNpZ2h0IHdpbGwgcHJlc2VudCBpdHNlbGYgYnkgZ2l2aW5nIGl0IGZyZXNoIGF0dGVudGlvbi4gSXQncyBvZnRlbiB0aGUgc21hbGwgZGV0YWlscyB0aGF0IHRyaXAgdXMgdXAuIExldCdzIHNlZSBpZiB0aGlzIGZyZXNoIHBlcnNwZWN0aXZlIHJldmVhbHMgYW55dGhpbmcgbmV3LCBvciBhdCBsZWFzdCByZWluZm9yY2VzIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODM1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTY6MTkuNjQ1ODkwMTc5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzNTpcXHRcXHR2aWQgfD0gQkFUQURWX1ZMQU5fSEFTX1RBRztcXG4gNjM2OlxcdFxcbiA2Mzc6XFx0XFx0LyogaWYgYSBuZXcgdmxhbiBpcyBnZXR0aW5nIGNyZWF0ZWQgYW5kIGl0IGFscmVhZHkgZXhpc3RzLCBpdCBtZWFucyB0aGF0XFxuIDYzODpcXHRcXHQgKiBpdCB3YXMgbm90IGRlbGV0ZWQgeWV0LiBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KCkgaW5jcmVhc2VzIHRoZVxcbiA2Mzk6XFx0XFx0ICogcmVmY291bnQgaW4gb3JkZXIgdG8gcmV2aXZlIHRoZSBvYmplY3QuXFxuIDY0MDpcXHRcXHQgKlxcbiA2NDE6XFx0XFx0ICogaWYgaXQgZG9lcyBub3QgZXhpc3QgdGhlbiBjcmVhdGUgaXQuXFxuIDY0MjpcXHRcXHQgKi9cXG4gNjQzOlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQpO1xcbiA2NDQ6XFx0XFx0aWYgKCF2bGFuKVxcbiA2NDU6XFx0XFx0XFx0cmV0dXJuIGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oYmF0X3ByaXYsIHZpZCk7XFxuIDY0NjpcXHRcXG4gNjQ3OlxcdFxcdC8qIGFkZCBhIG5ldyBUVCBsb2NhbCBlbnRyeS4gVGhpcyBvbmUgd2lsbCBiZSBtYXJrZWQgd2l0aCB0aGUgTk9QVVJHRVxcbiA2NDg6XFx0XFx0ICogZmxhZy4gVGhpcyBtdXN0IGJlIGFkZGVkIGFnYWluLCBldmVuIGlmIHRoZSB2bGFuIG9iamVjdCBhbHJlYWR5XFxuIDY0OTpcXHRcXHQgKiBleGlzdHMsIGJlY2F1c2UgdGhlIGVudHJ5IHdhcyBkZWxldGVkIGJ5IGtpbGxfdmlkKClcXG4gNjUwOlxcdFxcdCAqL1xcbiA2NTE6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZSxcXG4gNjUyOlxcdFxcdFxcdFxcdCAgICBiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZS1cXHUwMDNlZGV2X2FkZHIsIHZpZCxcXG4gNjUzOlxcdFxcdFxcdFxcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XFxuIDY1NDpcXHRcXG4gNjU1OlxcdFxcdHJldHVybiAwO1xcbiA2NTY6XFx0fVxcbiA2NTc6XFx0XFxuIDY1ODpcXHQvKipcXG4gNjU5OlxcdCAqIGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoKSAtIG5kb19raWxsX3ZpZCBBUEkgaW1wbGVtZW50YXRpb25cXG4gNjYwOlxcdCAqIEBkZXY6IHRoZSBuZXRkZXYgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXFxuIDY2MTpcXHQgKiBAcHJvdG86IHByb3RvY29sIG9mIHRoZSB2bGFuIGlkXFxuIDY2MjpcXHQgKiBAdmlkOiBpZGVudGlmaWVyIG9mIHRoZSBkZWxldGVkIHZsYW5cXG4gNjYzOlxcdCAqXFxuIDY2NDpcXHQgKiBEZXN0cm95IGFsbCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyB1c2VkIHRvIGhhbmRsZSB0aGUgdmxhbiBpZGVudGlmaWVkIGJ5IHZpZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjoxOS42NDYwOTAwMjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwODM4NTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkxBTiBSZWZjb3VudGluZyBpbiBCYXRhZHYqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYmF0YWR2IGNvZGUgYW5kIHRoaXMgY29tbWVudCBqdW1wcyBvdXQ6IFwiYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIGluY3JlYXNlcyB0aGUgcmVmY291bnQgaW4gb3JkZXIgdG8gcmV2aXZlIHRoZSBvYmplY3QuXCIgUmlnaHQsIHNvIGl0ICppbnRlbnRpb25hbGx5KiBpbmNyZW1lbnRzIHRoZSByZWZjb3VudC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5Ob3csIGlmIGl0IGZpbmRzIGFuIGV4aXN0aW5nIFZMQU4sIHRoZSByZWZjb3VudCBlbmRzIHVwIGF0IDIuIE1ha2VzIHNlbnNlLiBJdCdzIGVzc2VudGlhbGx5IFwicmV2aXZpbmdcIiB0aGUgVkxBTi4gQnV0IHdoYXQgaWYgdGhlIFZMQU4gKmRvZXNuJ3QqIGV4aXN0PyBUaGUgY29tbWVudCBzYXlzIHRoYXQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gIGlzIGNhbGxlZCBpbiB0aGF0IGNhc2UuIFRoYXQncyB0aGUgcmVhbCBxdWVzdGlvbjogZG9lcyBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgKmFsc28qIGxlYXZlIHRoZSByZWZjb3VudCBhdCAyPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGhvdyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJlZmNvdW50IGl0c2VsZi4gSXTigJlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCB0aGUgbGlmZWN5Y2xlLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBhcmVhLiBJdCdzIHBvc3NpYmxlIEknbSBtaXNzaW5nIHNvbWV0aGluZyBzdWJ0bGUgaGVyZSwgc28gSSdtIGdvaW5nIGJhY2sgdG8gdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjoyMy41NTQ0NzkyNTdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY2OlxcdFxcdGtyZWZfaW5pdChcXHUwMDI2dmxhbi1cXHUwMDNlcmVmY291bnQpO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24sIDApO1xcbiA1Njk6XFx0XFxuIDU3MDpcXHRcXHRrcmVmX2dldChcXHUwMDI2dmxhbi1cXHUwMDNlcmVmY291bnQpO1xcbiA1NzE6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZ2bGFuLVxcdTAwM2VsaXN0LCBcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3QpO1xcbiA1NzI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcXG4gNTc1OlxcdFxcdCAqIGZsYWdcXG4gNTc2OlxcdFxcdCAqL1xcbiA1Nzc6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZSxcXG4gNTc4OlxcdFxcdFxcdFxcdCAgICBiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZS1cXHUwMDNlZGV2X2FkZHIsIHZpZCxcXG4gNTc5OlxcdFxcdFxcdFxcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdC8qIGRvbid0IHJldHVybiByZWZlcmVuY2UgdG8gbmV3IG1lc2hpZl92bGFuICovXFxuIDU4MjpcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRyZXR1cm4gMDtcXG4gNTg1OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTY6MjMuNTU0NjA4Nzk3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNzkzNjA0NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmNvdW50aW5nIERlZXAgRGl2ZSBpbnRvIFZMQU4gSW50ZXJmYWNlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYmF0YWR2YCBWTEFOIGludGVyZmFjZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aHkgaXMgdGhlIHJlZmNvdW50aW5nIGhlcmUgc28gaW5jb25zaXN0ZW50PyBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAgbGVhdmVzIGEgcmVmY291bnQgb2YgMSwgc2VlbWluZ2x5IGZvciB0aGUgbGlzdCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGxlYXZlcyBpdCBhdCAyIGlmIHRoZSBWTEFOIGFscmVhZHkgZXhpc3RzISBUaGlzIGZlZWxzIG9mZi5cblxuTGV0J3MgYnJlYWsgZG93biBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd2hpY2ggd2lsbCByZWFsbHkgYmUgd2hlcmUgdGhlIGNvbXBsZXhpdHkgbGllcy4gIElmIGBhZGRfdmlkYCBsZWF2ZXMgdGhlIHJlZmNvdW50IGF0IDIgYW5kIHNvbWVvbmUgZWxzZSBpcyBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBWTEFOLCB0aGVuIGBraWxsX3ZpZGAgbXVzdCBkcm9wIHR3byByZWZlcmVuY2VzLCBidXQgaG93IGRvZXMgdGhlIGNvZGUgaGFuZGxlIHRoZSBsb2dpY2FsIGRlc3RydWN0aW9uPyAgQW5kIHdoYXQgaGFwcGVucyB3aGVuIGEgbmV3IFZMQU4gaXMgY3JlYXRlZD9cblxuTXkgaW5pdGlhbCB3YWxrdGhyb3VnaCBzdWdnZXN0cyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgKmRvZXMqIHNlZW0gdG8gaGFuZGxlIHRoaXMgY29ycmVjdGx5LCBhdCBmaXJzdCBibHVzaC4gIEl0IGdldHMgYSByZWZlcmVuY2UgKHJlZmNvdW50IDIgb3IgMyksIGRlc3Ryb3lzIHRoZSBWTEFOLCBkcm9wcGluZyBvbmUgcmVmZXJlbmNlLCBhbmQgKnRoZW4qIHB1dHMgYSByZWZlcmVuY2UgZG93biwgZHJvcHBpbmcgaXQgdG8gemVyby4gSWYgdGhlIFZMQU4gd2FzICpuZXdseSogY3JlYXRlZCwgdGhpcyBsZWFkcyB0byBmcmVlaW5nIHRoZSBvYmplY3QsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LlxuXG5CdXQgd2hhdCBpZiB0aGUgVkxBTiB3YXMgXCJyZXZpdmVkXCIgYW5kIHdhcyBhbHJlYWR5IGluIHRoZSBsaXN0PyBJdCBnZXRzIGEgcmVmZXJlbmNlIChyZWZjb3VudCAzKSwgZGVzdHJveXMgaXQgKHJlZmNvdW50IDIpLCBwdXRzIGl0IChyZWZjb3VudCAxKSwgYW5kIHRoZW4uLi4gaXQncyBub3QgZnJlZWQhIEl0IHJlbWFpbnMgaW4gdGhlIGxpc3QhIEFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBUaGF0IG1lYW5zIHRoZXJlIG11c3QgYmUgc29tZSAqb3RoZXIqIHJlZmVyZW5jZSBob2xkaW5nIGl0IHVwLlxuXG5BaGEhIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICpzYXlzKiBpdCByZXZpdmVzIHRoZSBvYmplY3QuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBsaXN0IHJlZmVyZW5jZSBpcyB0aGUgKm9ubHkqIHJlZmVyZW5jZSBpdCBsZWZ0LiBUaGlzIG1lYW5zIHNvbWUgb3RoZXIgZW50aXR5IGlzIGhvbGRpbmcgYSByZWZlcmVuY2UuIE1heWJlIGEgVFQgZW50cnkgb3IgbmV0bGluayBkdW1wLCBvciBhIHNvZnRpZi4gIElmIHNvbWVvbmUgZWxzZSBpcyBob2xkaW5nIGEgcmVmZXJlbmNlLCB0aGUgcmVmY291bnQgaXMgMSAobGlzdCkgKyAxIChvdGhlcikgPSAyLCBhbmQgdGhlbiB0aGUgd2hvbGUgc3lzdGVtIHdvcmtzLlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzIGZ1cnRoZXIuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgYSByZWZlcmVuY2UsIHdoaWNoIGFwcGVhcnMgdG8gYmUgdGhlIGxpc3QgcmVmZXJlbmNlLCBsZWF2aW5nIHRoZSBWTEFOIGxvZ2ljYWxseSBkZXN0cm95ZWQsIGJ1dCBzdGlsbCBwcmVzZW50IGluIHRoZSBsaXN0LiAgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgc2hvdWxkICpjb3JyZWN0bHkqIGJyaW5nIGl0IGJhY2sgdG8gbGlmZSB3aXRoIGEgZnJlc2ggbmV3IHJlZmVyZW5jZSwgc28gdGhhdCdzIG9rYXkuIEJ1dCB3aGF0IGhhcHBlbnMgd2l0aCBga2lsbF92aWRgIGFuZCB0aGUgbGlzdD8gIFxuXG5XYWl0LCBpZiBJJ20ga2lsbGluZyBhIFZMQU4gdGhhdCAqd2FzKiBpbiB0aGUgbGlzdCwgdGhlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICpkb2VzKiBkcm9wIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhhdCBtZWFucyB0aGUgVkxBTiBpcyBpbiB0aGUgbGlzdCwgYnV0IGVmZmVjdGl2ZWx5IFwiZGVzdHJveWVkXCIgdW50aWwgc29tZW9uZSBnZXRzIGl0IGZyb20gdGhlIGxpc3QuIElmIGBraWxsX3ZpZGAgZHJvcHMgdHdvIHJlZmVyZW5jZXMsIGl0IGRyb3BzIHRoZSBsaXN0IHJlZiBhbmQgdGhlIHJlZmVyZW5jZSBoZWxkIGJ5IGBhZGRfdmlkYCEgIFxuXG5gYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICpkb2VzKiBkcm9wIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhhdCBtdWNoIGlzIG5vdyBjbGVhci5cblxuT2theSwgdGhlIHJlZmNvdW50IGxvZ2ljIHNlZW1zIHRvIHdvcmsgZm9yIGJvdGggYSBuZXdseSBjcmVhdGVkIFZMQU4gKmFuZCogYSByZXZpdmVkIG9uZS5cblxuU28gaXQgYm9pbHMgZG93biB0bzpcblxuMS4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgLSBDcmVhdGVzIG9yIHJldml2ZXMgYSBWTEFOLCBpbmNyZWFzaW5nIHJlZmNvdW50LlxuMi4gSWYgc29tZWJvZHkgZWxzZSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTiwgaXRzIHJlZmNvdW50IGlzIGF0IGxlYXN0IDIuXG4zLiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBhIHJlZmVyZW5jZSwgZGVzdHJveXMgdGhlIFZMQU4sIGFuZCBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UuXG40LiBJZiB0aGVyZSBhcmUgb3RoZXIgcmVmZXJlbmNlcyB0byB0aGUgVkxBTiwgaXQncyBub3QgZnJlZWQuIElmIHRoZXJlIGFyZSBubyBvdGhlciByZWZlcmVuY2VzLCBpdCdzIGZyZWVkLlxuXG5TbyBpdCBsb29rcyBjb3JyZWN0LlxuXG5Ib3dldmVyLCBpZiBhbGwgdGhpcyBpcyBjb3JyZWN0LCB3aHkgd2FzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCByZW1vdmVkIGZyb20gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgPyAgTGV0IG1lIHJlLWV4YW1pbmUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBvbmUgbW9yZSB0aW1lLi4uICBPa2F5LCBubywgaXQncyBjb3JyZWN0LiBJdCBjb3JyZWN0bHkgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLlxuXG5MZXQncyB0ZXN0IHRoaXMgaW4gYSB2YXJpZXR5IG9mIHNpdHVhdGlvbnMuIElmIGFsbCB0aGUgdGVzdHMgcGFzcywgdGhlbiB0aGF0IHBhdGNoIHNob3VsZCBub3QgaGF2ZSByZW1vdmVkIHRoaXMuIExldCBtZSB2ZXJpZnkgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjQ0LjM0ODIxNjg4M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcyNjYyOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9iYXRtYW4tYWR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTU0NT1pbnQgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4Ny0vKipcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU4ODogKiBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbigpIC0gcmVtb3ZlIGFuZCBkZXN0cm95IGEgbWVzaGlmX3ZsYW4gb2JqZWN0XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01ODktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU5MS0gKi9cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjU5MjpzdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkzLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02NzA9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkxLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NjkyOlxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY5My1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTA4Mj1zdGF0aWMgdm9pZCBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTA5Ni1cXHRpZiAodmxhbikge1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTA5NzpcXHRcXHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk4LVxcdFxcdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjQ1LjMyMDg5MzU2OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc4NjA3NDU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVkxBTiBSZWZlcmVuY2UgQ291bnRpbmcgaW4gYmF0YWR2KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ20gbG9va2luZyBhdCB0aGUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBmdW5jdGlvbi4gSXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBCdXQgd2FpdCwgSSdtIGFsc28gc2VlaW5nIHRoaXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGZ1bmN0aW9uLCB3aGljaCBhbHNvIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gVGhlIHBhdGNoIHJlbW92ZWQgaXQgZnJvbSBvbmx5IHRoZSBsYXR0ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gU28sIEkgbmVlZCB0byBsb29rIGNsb3Nlci5cblxuQ2hlY2tpbmcgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFnYWluLCB5ZXMsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgYW5kICp0aGVuKiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gT2theSwgYnV0IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGNhbGxlZCB3aGVuIGEgVkxBTiBpcyBkZWxldGVkLiBOb3csIGxldCdzIGxvb2sgYXQgdGhlIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBpdCBmaXJzdCB0cmllcyB0byBnZXQgYSBWTEFOIHVzaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCwgYW5kIGlmIGl0IGRvZXNuJ3QgZXhpc3QsIGl0IGNyZWF0ZXMgb25lLlxuXG5DcnVjaWFsbHksIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGRvZXMgKm5vdCogY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgYWZ0ZXIgdGhlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBjYWxsISBUaGlzIG1lYW5zIHRoZSByZWZlcmVuY2UgY291bnQgZnJvbSBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgaXMgbGVmdCBoYW5naW5nLCBzbyB0byBzcGVhay4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uIG9yIGFsYXJtaW5nLlxuXG5JZiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCAqbmV2ZXIqIGRyb3BzIHRoZSByZWZlcmVuY2UsIHRoZW4gZXZlcnkgdGltZSBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBpcyBjYWxsZWQgb24gYSBcInJldml2ZWRcIiBWTEFOLCB0aGUgcmVmY291bnQgaXMgaW5jcmVtZW50ZWQgYnkgb25lISBUaGlzIGlzIGluY29uc2lzdGVudCEgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgVkxBTiwgc28gaXQgc2hvdWxkIGJlIGZpbmUsIGJ1dCB0aGUgcmVmY291bnQgd291bGQgYmUgMi5cblxuVGhpbmtpbmcgaXQgdGhyb3VnaC4uLiBJZiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBjcmVhdGVzIHRoZSBWTEFOLCB0aGUgcmVmY291bnQgaXMgMS4gSWYgdGhlIFZMQU4gYWxyZWFkeSBleGlzdHMsIGFuZCBpcyBcInJldml2ZWRcIiwgdGhlIHJlZmNvdW50IGlzIDIhIFRoaXMgaXMgYSBiaWcgcHJvYmxlbS5cblxuVGhlbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgY2FsbGVkLCB3aGljaCBkcm9wcyB0d28gcmVmZXJlbmNlcyEgSWYgaXQgd2FzIGNyZWF0ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCwgdGhlIHJlZmNvdW50IHN0YXJ0cyBhdCAxLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZ2V0cyBhIHJlZmVyZW5jZSAobm93IDIpLCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIG9uZSAobm93IDEpLCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgZHJvcHMgdGhlIGZpbmFsIG9uZSAobm93IDApLiBUaGlzICp3b3JrcyogZm9yIGEgKmNyZWF0ZWQqIFZMQU4uXG5cbkJ1dCBpZiBpdCB3YXMgcmV2aXZlZCwgdGhlIHJlZmNvdW50IHN0YXJ0cyBhdCAyLiBUaGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGFub3RoZXIgcmVmZXJlbmNlIChyZWZjb3VudCAzKS4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyBvbmUgKHJlZmNvdW50IDIpLiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgZHJvcHMgKmFub3RoZXIqIHJlZmVyZW5jZSAocmVmY291bnQgMSkuIFRoZSBWTEFOICppc24ndCogZnJlZWQuIEl0IHJlbWFpbnMgaW4gdGhlIGxpc3QhXG5cbklmIGl0J3Mgbm90IGZyZWVkLCBpdCBjYW4gYmUgcmV2aXZlZCBhZ2FpbiwgdGhlIHJlZmNvdW50IGJlY29tZXMgMiwgdGhlbiBraWxsZWQgYWdhaW4gd2l0aCB0aGUgcmVmY291bnQgYmVjb21pbmcgMSEgSXQgKm5ldmVyKiBnZXRzIGZyZWVkISBXYWl0ISBUaGF0J3MgYSBtZW1vcnkgbGVhaywgYnV0IGl0IHNob3VsZG4ndCBjYXVzZSBhIGNyYXNoLiBVbmxlc3MuLi5cblxuQnV0IHdoYXQgaWYsICp3aGF0IGlmKiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCB3YXMgc3VwcG9zZWQgdG8gZHJvcCB0aGUgcmVmZXJlbmNlPyBJIG5lZWQgdG8gY2hlY2sgYW5kIHZlcmlmeSBpZiB0aGUgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZnVuY3Rpb24gZHJvcHMgdGhlIHJlZmVyZW5jZSBhcyB3ZWxsIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ0NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNjo1Ni4xMDY5NzE3NTRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdFxcdHZpZCB8PSBCQVRBRFZfVkxBTl9IQVNfVEFHO1xcbiA2MzY6XFx0XFxuIDYzNzpcXHRcXHQvKiBpZiBhIG5ldyB2bGFuIGlzIGdldHRpbmcgY3JlYXRlZCBhbmQgaXQgYWxyZWFkeSBleGlzdHMsIGl0IG1lYW5zIHRoYXRcXG4gNjM4OlxcdFxcdCAqIGl0IHdhcyBub3QgZGVsZXRlZCB5ZXQuIGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoKSBpbmNyZWFzZXMgdGhlXFxuIDYzOTpcXHRcXHQgKiByZWZjb3VudCBpbiBvcmRlciB0byByZXZpdmUgdGhlIG9iamVjdC5cXG4gNjQwOlxcdFxcdCAqXFxuIDY0MTpcXHRcXHQgKiBpZiBpdCBkb2VzIG5vdCBleGlzdCB0aGVuIGNyZWF0ZSBpdC5cXG4gNjQyOlxcdFxcdCAqL1xcbiA2NDM6XFx0XFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCk7XFxuIDY0NDpcXHRcXHRpZiAoIXZsYW4pXFxuIDY0NTpcXHRcXHRcXHRyZXR1cm4gYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbihiYXRfcHJpdiwgdmlkKTtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0LyogYWRkIGEgbmV3IFRUIGxvY2FsIGVudHJ5LiBUaGlzIG9uZSB3aWxsIGJlIG1hcmtlZCB3aXRoIHRoZSBOT1BVUkdFXFxuIDY0ODpcXHRcXHQgKiBmbGFnLiBUaGlzIG11c3QgYmUgYWRkZWQgYWdhaW4sIGV2ZW4gaWYgdGhlIHZsYW4gb2JqZWN0IGFscmVhZHlcXG4gNjQ5OlxcdFxcdCAqIGV4aXN0cywgYmVjYXVzZSB0aGUgZW50cnkgd2FzIGRlbGV0ZWQgYnkga2lsbF92aWQoKVxcbiA2NTA6XFx0XFx0ICovXFxuIDY1MTpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLFxcbiA2NTI6XFx0XFx0XFx0XFx0ICAgIGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkciwgdmlkLFxcbiA2NTM6XFx0XFx0XFx0XFx0ICAgIEJBVEFEVl9OVUxMX0lGSU5ERVgsIEJBVEFEVl9OT19NQVJLKTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0cmV0dXJuIDA7XFxuIDY1NjpcXHR9XFxuIDY1NzpcXHRcXG4gNjU4OlxcdC8qKlxcbiA2NTk6XFx0ICogYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZCgpIC0gbmRvX2tpbGxfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2NjA6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjYxOlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG4gNjYyOlxcdCAqIEB2aWQ6IGlkZW50aWZpZXIgb2YgdGhlIGRlbGV0ZWQgdmxhblxcbiA2NjM6XFx0ICpcXG4gNjY0OlxcdCAqIERlc3Ryb3kgYWxsIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHVzZWQgdG8gaGFuZGxlIHRoZSB2bGFuIGlkZW50aWZpZWQgYnkgdmlkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE2OjU2LjEwNzEwMTcyNFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTMyMjczNTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZjb3VudCBEZWVwIERpdmUgaW4gYmF0YWR2IFZMQU4gTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgY29yZSBvZiB3aGF0J3MgYm90aGVyaW5nIG1lLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgVkxBTiByZWZlcmVuY2UgY291bnRpbmcgaW4gYGJhdGFkdmAgYW5kIEkndmUgaGl0IGEgY29uY2VwdHVhbCBzbmFnLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBhbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLCBhbmQgd2hldGhlciB0aGV5IGNvcnJlY3RseSBoYW5kbGUgdGhlIHJlZmVyZW5jZSBjb3VudC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICpzaG91bGQqIGJlIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UuIFR1cm5zIG91dCwgaXQgZG9lc24ndC4gSWYgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZG9lc24ndCBkcm9wIHRoZSByZWZlcmVuY2UsIHRoYXQgbWVhbnMgYSBWTEFOIG9iamVjdCBpcyBsZWFrZWQgaW5pdGlhbGx5LiBUaGlzIGxlYWRzIG1lIHRvIGJlbGlldmUgdGhlIHByb2JsZW0gbGllcyB3aXRoIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYC5cblxuSWYgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRyb3BzIDIgcmVmZXJlbmNlcywgYW5kIGl0IHdhcyBjcmVhdGVkLCB0aGVuIGl0J3MgZnJlZWQgLSB0aGF0J3Mgc3RhbmRhcmQuIEhvd2V2ZXIsIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIHJldml2ZXMgaXQsIGFuZCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgdGhlbiBkcm9wcyAyIHJlZmVyZW5jZXMgYWdhaW4sIGl0IGNvdWxkIGJlIGEgbWVzcy4gSWYgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgZG9lcyByZXZpdmUgaXQsIGl0IG1lYW5zIGl0ICp3YXNuJ3QqIGZyZWVkLiBTbywgc29tZXRoaW5nIGVsc2UgbXVzdCBoYXZlIGJlZW4gaG9sZGluZyBhIHJlZmVyZW5jZSwgc3VjaCBhcyBhIFRUIGVudHJ5LiBcblxuSGVyZSdzIHRoZSBwcm9ibGVtIEkgc2VlIG5vdzpcbmBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyB0aGUgcmVmZXJlbmNlIGZyb20gYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgLCBhbmQgaXQgYWxzbyBkcm9wcyB0aGUgXCJsaXN0XCIgcmVmZXJlbmNlLiBUaGUgdGhpbmcgaXMsIHdoZW4gaXQgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLCB0aGUgb2JqZWN0IGlzIFNUSUxMIG9uIHRoZSBsaXN0ISBIb3dldmVyLCBgYmF0YWR2X21lc2hpZl92bGFuX3JlbGVhc2VgIGlzbid0IGNhbGxlZCwgc28gdGhlcmUncyBhIHByb2JsZW0gaGVyZS4gVGhlIHJlZmNvdW50IGlzIGVmZmVjdGl2ZWx5IG9uZSBsZXNzIHRoYW4gaXQgc2hvdWxkIGJlLiBBdCB0aGlzIHBvaW50IHRoZSBWTEFOIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IHdoZW4gcmVmY291bnQgZHJvcHMgdG8gemVyby5cblxuSSdtIG5vdyBzdGFydGluZyB0byBzZWUgdGhpcyBtZWFucyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgY2FuIGZpbmQgdGhlIG9iamVjdCwgYW5kIHRoZXJlZm9yZSByZXZpdmUgaXQuIFNvIHRoZSBwcm9ibGVtIGlzIHRoZW4gYWJvdXQgdGhlIHJlZmNvdW50LiBJJ20gZ29pbmcgdG8gdHJhY2UgdGhlIHJlZmNvdW50LlxuXG4xLiAgKipDcmVhdGlvbjoqKiBXaGVuIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGNyZWF0ZXMgdGhlIFZMQU4sIHRoZSByZWZjb3VudCBzdGFydHMgYXQgMSAodGhlIGxpc3QncyByZWZlcmVuY2UpLlxuMi4gICoqRXh0ZXJuYWwgUmVmZXJlbmNlOioqIElmIHNvbWV0aGluZyBlbHNlIGdldHMgYSByZWZlcmVuY2UgKGxpa2UgYSBUVCBlbnRyeSksIHRoZSByZWZjb3VudCBiZWNvbWVzIDIuXG4zLiAgKipLaWxsaW5nIChhbmQgcG90ZW50aWFsbHkgcmV2aXZpbmcpOioqIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBnZXRzIGFub3RoZXIgcmVmZXJlbmNlIHRvIHRoZSB2bGFuIHdoaWNoIHdpbGwgYmUgMywgZGVzdHJveXMgdGhlIHZsYW4sIGFuZCB0aGVuIGRyb3BzIDIgcmVmZXJlbmNlcywgc28gdGhlIGNvdW50IGdvZXMgdG8gMSwgYnV0IHRoZSB2bGFuIGlzIG5vdCBmcmVlZCBiZWNhdXNlIHRoZSBsaXN0IGhhcyBvbmUgcmVmZXJlbmNlLlxuNC4gICoqUmV2aXZhbDoqKiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBnZXRzIGFub3RoZXIgcmVmZXJlbmNlLCBhbmQgdGhlIHJlZmNvdW50IGdvZXMgdG8gMi5cbjUuICAqKlNvbWVvbmUgZHJvcHMgdGhlIHJlZmVyZW5jZToqKiBOb3cgdGhlIHJlZmNvdW50IGdvZXMgdG8gMSBhZ2FpbiwgYnV0IHRoZSBvYmplY3QgaXMgc3RpbGwgb24gdGhlIGxpc3QuXG42LiAgKipLaWxsaW5nIChhZ2Fpbik6KiogVGhlIHByb2Nlc3MgcmVwZWF0cy5cblxuQnV0IHRoZW4gSSByZWFsaXplZCwgd2FpdCwgaWYgdGhpcyB3b3Jrcywgd2h5IHdhcyB0aGUgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIHJlbW92ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGA/IFRoaXMgaXNuJ3QgbWF0Y2hpbmcgdXAuLi5cblxuR29pbmcgYmFjayB0byBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCwgaXQgZWl0aGVyIGNyZWF0ZXMgYSBuZXcgVkxBTiwgb3IgaXQgZ2V0cyB0aGUgZXhpc3Rpbmcgb25lLiBJZiBpdCBnZXRzIHRoZSBleGlzdGluZyBvbmUsIGl0ICphZGRzKiBhIFRUIGVudHJ5LCB3aGljaCBJIHRoaW5rIG1lYW5zIGl0IHdpbGwgcmV2aXZlIHRoZSBvYmplY3QuIFxuXG5UaGUgcHJvYmxlbSBpcywgaWYgdGhlIHJlZmNvdW50IGlzIHJldml2ZWQgYnV0IG5vIG9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UsIHRoZSByZWZjb3VudCBpcyBvbmUgYXQgdGhlIGJlZ2lubmluZywgZ2V0cyByZXZpdmVkIHNvIHRoZSByZWZjb3VudCBiZWNvbWVzIDIuIFRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHRha2VzIHR3bywgYnV0IGl0IG1lYW5zIHRoYXQgdGhlIHZsYW4gY291bnQgd2lsbCBnbyB0byB6ZXJvIGFuZCBpdCBpcyBmcmVlZC4gQnV0IHRoaXMgc2NlbmFyaW8gaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0IGNhbiBvbmx5IGJlIHJldml2ZWQgaWYgc29tZW9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UsIHNvIGlmIHNvbWVib2R5IGVsc2UgaXMgaG9sZGluZyBhIHJlZmVyZW5jZSwgdGhlIGNvdW50IHdpbGwgYmUgYXQgbGVhc3QgMSwgdGhlbiByZXZpdmVkIHRvIGJlIGF0IGxlYXN0IDIsIGFuZCB0aGVuIHRoZSByZWZjb3VudCBpcyBkcm9wcGVkIGJ5IDIgc28gdGhlIG5ldCBjaGFuZ2UgaXMgLTEuXG5cbklmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyAyIHJlZmVyZW5jZXMsIHNvIHRoZSBvYmplY3QgY291bGQgYmUgcmV2aXZlZCBvciBraWxsZWQsIHRoZSBuZXQgY2hhbmdlIGlzIC0xLiBXaGF0IHdpbGwgaGFwcGVuIGlmIHRoaXMgaXMgaGFwcGVuaW5nIG1hbnkgdGltZXM/IFRoZSByZWZjb3VudCB3aWxsIGRlY3JlYXNlIGJ5IG9uZSBhbmQsIGFzIGEgcmVzdWx0LCBldmVudHVhbGx5IGJlIGZyZWVkIVxuXG5Pa2F5LCBzbyBJIHdpbGwgYW5hbHl6ZSBhbmQgcmV0cmFjZSBteSBzdGVwcyEgVGhlIFRUIGVudHJ5IGhvbGRzIDEgcmVmZXJlbmNlLiBUaGUgbGlzdCBob2xkcyB6ZXJvIHNpbmNlIGl0IHdhcyBkcm9wcGVkIHRoZSBmaXJzdCB0aW1lIGBraWxsX3ZpZGAgd2FzIGNhbGxlZC4gSWYgdGhlIGxpc3QgaGFzIHplcm8sIHRoZSByZWZjb3VudCBpcyAxIGZyb20gdGhlIFRUIGVudHJ5LiBJZiBgYmF0YWR2X2ludGVyZmFjZV9cblxuIiwiSW5wdXRUb2tlbnMiOjM1Nzc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE3OjE1LjQyOTg0MDc3NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MzQ3Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl90dF9sb2NhbF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTEyPXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTMyLVxcdFxcdFxcdFxcdCAgICAgICBcXFwibWFjIGFkZHJlc3MgY2hhbmdlZFxcXCIsIGZhbHNlKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjEzMzpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGRldiwgYWRkci1cXHUwMDNlc2FfZGF0YSwgdmxhbi1cXHUwMDNldmlkLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTM0LVxcdFxcdFxcdFxcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTE2Nz1zdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0yMzUtXFx0ICAgICFiYXRhZHZfYmxhX2lzX2xvb3BkZXRlY3RfbWFjKGV0aGhkci1cXHUwMDNlaF9zb3VyY2UpKSB7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoyMzY6XFx0XFx0Y2xpZW50X2FkZGVkID0gYmF0YWR2X3R0X2xvY2FsX2FkZChtZXNoX2lmYWNlLCBldGhoZHItXFx1MDAzZWhfc291cmNlLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMjM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHZpZCwgc2tiLVxcdTAwM2Vza2JfaWlmLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz01NDU9aW50IGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW4oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01NzYtXFx0ICovXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo1Nzc6XFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZSxcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU3OC1cXHRcXHRcXHQgICAgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLCB2aWQsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTYxNT1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY1MC1cXHQgKi9cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY1MTpcXHRiYXRhZHZfdHRfbG9jYWxfYWRkKGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlLFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjUyLVxcdFxcdFxcdCAgICBiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZS1cXHUwMDNlZGV2X2FkZHIsIHZpZCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTcxMT1zdGF0aWMgdm9pZCBiYXRhZHZfbWNhc3RfbWxhX3R0X2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNzI0LVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjcyNTpcXHRcXHRpZiAoIWJhdGFkdl90dF9sb2NhbF9hZGQoYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UsXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNzI2LVxcdFxcdFxcdFxcdFxcdCBtY2FzdF9lbnRyeS1cXHUwMDNlYWRkciwgQkFUQURWX05PX0ZMQUdTLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz01NTA9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU3Ni0vKipcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjU3NzogKiBiYXRhZHZfdHRfbG9jYWxfYWRkKCkgLSBhZGQgYSBuZXcgY2xpZW50IHRvIHRoZSBsb2NhbCB0YWJsZSBvciB1cGRhdGUgYW5cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU3OC0gKiAgZXhpc3RpbmcgY2xpZW50XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU4OC0gKi9cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjU4OTpib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNTkwLVxcdFxcdFxcdCB1bnNpZ25lZCBzaG9ydCB2aWQsIGludCBpZmluZGV4LCB1MzIgbWFyaylcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmg9MTg9aW50IGJhdGFkdl90dF9pbml0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmg6MTk6Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oLTIwLVxcdFxcdFxcdCB1bnNpZ25lZCBzaG9ydCB2aWQsIGludCBpZmluZGV4LCB1MzIgbWFyayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE3OjE1LjY5ODE5NjU5OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU2OTYxODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIHN1YmplY3Q6XG5cbioqQW5hbHl6aW5nIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSXMgdGhpcyByZWxhdGVkIHRvIHRoZSB0b3BvbG9neSB0YWJsZSwgb3IgdGhlIGZvcndhcmRpbmcgdGFibGU/IEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gbGVhbmluZyB0b3dhcmQgdGhlIHRvcG9sb2d5IHRhYmxlIOKAkyBzcGVjaWZpY2FsbHksIGFkZGluZyBhIGxvY2FsIGVudHJ5LiBXaGF0J3MgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZT8gSXMgaXQgaGFuZGxpbmcgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IG5laWdoYm9yLCBvciBpcyBpdCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0LCBwZXJoYXBzIG1hbmFnaW5nIHNvbWUgc29ydCBvZiBsb2NhbCBmb3J3YXJkaW5nIG9wdGltaXphdGlvbj8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIEJBVE1BTi1hZHYgY29kZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgYGJhdGFkdl90dF9sb2NhbF9lbnRyeWAgYW5kIGFueSByZWxhdGVkIGxvY2tzIHRoYXQgY29tZSB0byBtaW5kIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVycy4gV2hhdCBhcmUgdGhlIGlucHV0cywgYW5kIHdoYXQgZG8gdGhleSByZXByZXNlbnQ/IEFuZCB0aGVuLCBjcml0aWNhbGx5LCB0aGUgcmV0dXJuIHZhbHVlLiBJcyBpdCBlcnJvciBoYW5kbGluZywgb3IgYSBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdG9yPyBBIGRlZXAgZGl2ZSBpbiBpdHMgdXNlIGluIHRoZSBjb2RlIHNob3VsZCBtYWtlIHRoYXQgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDE4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6MTguOTU1MTYyODlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg5OlxcdGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXFxuIDU5MDpcXHRcXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmlkLCBpbnQgaWZpbmRleCwgdTMyIG1hcmspXFxuIDU5MTpcXHR7XFxuIDU5MjpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XFxuIDU5MzpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbDtcXG4gNTk0OlxcdFxcdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwgPSBOVUxMO1xcbiA1OTU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChtZXNoX2lmYWNlKTtcXG4gNTk2OlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuIDU5NzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqaW5fZGV2ID0gTlVMTDtcXG4gNTk4OlxcdFxcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaW5faGFyZGlmID0gTlVMTDtcXG4gNTk5OlxcdFxcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkO1xcbiA2MDA6XFx0XFx0c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWdfZW50cnk7XFxuIDYwMTpcXHRcXHRpbnQgaGFzaF9hZGRlZCwgdGFibGVfc2l6ZSwgcGFja2V0X3NpemVfbWF4O1xcbiA2MDI6XFx0XFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gNjAzOlxcdFxcdGJvb2wgcm9hbWVkX2JhY2sgPSBmYWxzZTtcXG4gNjA0OlxcdFxcdHU4IHJlbW90ZV9mbGFncztcXG4gNjA1OlxcdFxcdHUzMiBtYXRjaF9tYXJrO1xcbiA2MDY6XFx0XFxuIDYwNzpcXHRcXHRpZiAoaWZpbmRleCAhPSBCQVRBRFZfTlVMTF9JRklOREVYKVxcbiA2MDg6XFx0XFx0XFx0aW5fZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpO1xcbiA2MDk6XFx0XFxuIDYxMDpcXHRcXHRpZiAoaW5fZGV2KVxcbiA2MTE6XFx0XFx0XFx0aW5faGFyZGlmID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGluX2Rldik7XFxuIDYxMjpcXHRcXG4gNjEzOlxcdFxcdHR0X2xvY2FsID0gYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcXG4gNjE0OlxcdFxcbiA2MTU6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4gNjE2OlxcdFxcdFxcdHR0X2dsb2JhbCA9IGJhdGFkdl90dF9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHRpZiAodHRfbG9jYWwpIHtcXG4gNjE5OlxcdFxcdFxcdHR0X2xvY2FsLVxcdTAwM2VsYXN0X3NlZW4gPSBqaWZmaWVzO1xcbiA2MjA6XFx0XFx0XFx0aWYgKHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpIHtcXG4gNjIxOlxcdFxcdFxcdFxcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXFxuIDYyMjpcXHRcXHRcXHRcXHRcXHQgICBcXFwiUmUtYWRkaW5nIHBlbmRpbmcgY2xpZW50ICVwTSAodmlkOiAlZClcXFxcblxcXCIsXFxuIDYyMzpcXHRcXHRcXHRcXHRcXHQgICBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCkpO1xcbiA2MjQ6XFx0XFx0XFx0XFx0Lyogd2hhdGV2ZXIgdGhlIHJlYXNvbiB3aHkgdGhlIFBFTkRJTkcgZmxhZyB3YXMgc2V0LFxcbiA2MjU6XFx0XFx0XFx0XFx0ICogdGhpcyBpcyBhIGNsaWVudCB3aGljaCB3YXMgZW5xdWV1ZWQgdG8gYmUgcmVtb3ZlZCBpblxcbiA2MjY6XFx0XFx0XFx0XFx0ICogdGhpcyBvcmlnX2ludGVydmFsLiBTaW5jZSBpdCBwb3BwZWQgdXAgYWdhaW4sIHRoZVxcbiA2Mjc6XFx0XFx0XFx0XFx0ICogZmxhZyBjYW4gYmUgcmVzZXQgbGlrZSBpdCB3YXMgbmV2ZXIgZW5xdWV1ZWRcXG4gNjI4OlxcdFxcdFxcdFxcdCAqL1xcbiA2Mjk6XFx0XFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HO1xcbiA2MzA6XFx0XFx0XFx0XFx0Z290byBhZGRfZXZlbnQ7XFxuIDYzMTpcXHRcXHRcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdFxcdGlmICh0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSB7XFxuIDYzNDpcXHRcXHRcXHRcXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxcbiA2MzU6XFx0XFx0XFx0XFx0XFx0ICAgXFxcIlJvYW1pbmcgY2xpZW50ICVwTSAodmlkOiAlZCkgY2FtZSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBsb2NhdGlvblxcXFxuXFxcIixcXG4gNjM2OlxcdFxcdFxcdFxcdFxcdCAgIGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSk7XFxuIDYzNzpcXHRcXHRcXHRcXHQvKiB0aGUgUk9BTSBmbGFnIGlzIHNldCBiZWNhdXNlIHRoaXMgY2xpZW50IHJvYW1lZCBhd2F5XFxuIDYzODpcXHRcXHRcXHRcXHQgKiBhbmQgdGhlIG5vZGUgZ290IGEgcm9hbWluZ19hZHZlcnRpc2VtZW50IG1lc3NhZ2UuIE5vd1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNzoxOC45NTU0NDYwN1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY4MjI5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0LCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCoqXG5cbkFscmlnaHQsIGxldCdzIGRyaWxsIGRvd24gaW50byBgYmF0YWR2X3R0X2xvY2FsX2FkZGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhZGRpbmcgbG9jYWwgdHVubmVsIHRhcmdldHMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIG51YW5jZXMgaXMgZXNzZW50aWFsLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCBwcm9iYWJseSBoYW5kbGVzIHN5bmNocm9uaXphdGlvbiwgZXJyb3IgY2hlY2tpbmcsIGFuZCBwb3RlbnRpYWxseSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIG9yIGZvcndhcmRpbmcgZW5naW5lLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgbmV3IHRhcmdldCBnZXRzIGFjY2VwdGVkLiBJJ20ga2VlbiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGFwYXRoLCBzcGVjaWZpY2FsbHkgaG93IGl0IGFubm91bmNlcyB0aGlzIG5ldyBsb2NhbCBUVCBpbiB0aGUgbmV0d29yay4gVGhlcmUncyBhbHNvIHRoZSBxdWVzdGlvbiBvZiBjYWNoaW5nIGFuZCBvcHRpbWl6YXRpb24uIERvZXMgaXQgaW1wbGVtZW50IGFueSBzdHJhdGVnaWVzIGZvciByZWR1Y2luZyBvdmVyaGVhZCwgb3IgaGFuZGxlIGNhc2VzIHdoZXJlIGEgdGFyZ2V0IGFscmVhZHkgZXhpc3RzPyBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjk2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNzoyMi4wMjM2Nzg2MjFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM5OlxcdFxcdFxcdFxcdCAqIHRoYXQgdGhlIGNsaWVudCBwb3BwZWQgdXAgYWdhaW4gYXQgaXRzIG9yaWdpbmFsXFxuIDY0MDpcXHRcXHRcXHRcXHQgKiBsb2NhdGlvbiBzdWNoIGZsYWcgY2FuIGJlIHVuc2V0XFxuIDY0MTpcXHRcXHRcXHRcXHQgKi9cXG4gNjQyOlxcdFxcdFxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG4gNjQzOlxcdFxcdFxcdFxcdHJvYW1lZF9iYWNrID0gdHJ1ZTtcXG4gNjQ0OlxcdFxcdFxcdH1cXG4gNjQ1OlxcdFxcdFxcdGdvdG8gY2hlY2tfcm9hbWluZztcXG4gNjQ2OlxcdFxcdH1cXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0LyogSWdub3JlIHRoZSBjbGllbnQgaWYgd2UgY2Fubm90IHNlbmQgaXQgaW4gYSBmdWxsIHRhYmxlIHJlc3BvbnNlLiAqL1xcbiA2NDk6XFx0XFx0dGFibGVfc2l6ZSA9IGJhdGFkdl90dF9sb2NhbF90YWJsZV90cmFuc21pdF9zaXplKGJhdF9wcml2KTtcXG4gNjUwOlxcdFxcdHRhYmxlX3NpemUgKz0gYmF0YWR2X3R0X2xlbigxKTtcXG4gNjUxOlxcdFxcdHBhY2tldF9zaXplX21heCA9IGF0b21pY19yZWFkKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlcGFja2V0X3NpemVfbWF4KTtcXG4gNjUyOlxcdFxcdGlmICh0YWJsZV9zaXplIFxcdTAwM2UgcGFja2V0X3NpemVfbWF4KSB7XFxuIDY1MzpcXHRcXHRcXHRuZXRfcmF0ZWxpbWl0ZWRfZnVuY3Rpb24oYmF0YWR2X2luZm8sIG1lc2hfaWZhY2UsXFxuIDY1NDpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcIkxvY2FsIHRyYW5zbGF0aW9uIHRhYmxlIHNpemUgKCVpKSBleGNlZWRzIG1heGltdW0gcGFja2V0IHNpemUgKCVpKTsgSWdub3JpbmcgbmV3IGxvY2FsIHR0IGVudHJ5OiAlcE1cXFxcblxcXCIsXFxuIDY1NTpcXHRcXHRcXHRcXHRcXHRcXHQgdGFibGVfc2l6ZSwgcGFja2V0X3NpemVfbWF4LCBhZGRyKTtcXG4gNjU2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2NTc6XFx0XFx0fVxcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHR0dF9sb2NhbCA9IGttZW1fY2FjaGVfYWxsb2MoYmF0YWR2X3RsX2NhY2hlLCBHRlBfQVRPTUlDKTtcXG4gNjYwOlxcdFxcdGlmICghdHRfbG9jYWwpXFxuIDY2MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjYyOlxcdFxcbiA2NjM6XFx0XFx0LyogaW5jcmVhc2UgdGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJlbGF0ZWQgdmxhbiAqL1xcbiA2NjQ6XFx0XFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCk7XFxuIDY2NTpcXHRcXHRpZiAoIXZsYW4pIHtcXG4gNjY2OlxcdFxcdFxcdG5ldF9yYXRlbGltaXRlZF9mdW5jdGlvbihiYXRhZHZfaW5mbywgbWVzaF9pZmFjZSxcXG4gNjY3OlxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiYWRkaW5nIFRUIGxvY2FsIGVudHJ5ICVwTSB0byBub24tZXhpc3RlbnQgVkxBTiAlZFxcXFxuXFxcIixcXG4gNjY4OlxcdFxcdFxcdFxcdFxcdFxcdCBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCkpO1xcbiA2Njk6XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGJhdGFkdl90bF9jYWNoZSwgdHRfbG9jYWwpO1xcbiA2NzA6XFx0XFx0XFx0dHRfbG9jYWwgPSBOVUxMO1xcbiA2NzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDY3MjpcXHRcXHR9XFxuIDY3MzpcXHRcXG4gNjc0OlxcdFxcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXFxuIDY3NTpcXHRcXHRcXHQgICBcXFwiQ3JlYXRpbmcgbmV3IGxvY2FsIHR0IGVudHJ5OiAlcE0gKHZpZDogJWQsIHR0dm46ICVkKVxcXFxuXFxcIixcXG4gNjc2OlxcdFxcdFxcdCAgIGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSxcXG4gNjc3OlxcdFxcdFxcdCAgICh1OClhdG9taWNfcmVhZChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZXR0LnZuKSk7XFxuIDY3ODpcXHRcXG4gNjc5OlxcdFxcdGV0aGVyX2FkZHJfY29weSh0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmFkZHIsIGFkZHIpO1xcbiA2ODA6XFx0XFx0LyogVGhlIGxvY2FsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgTkVXIHRvIGF2b2lkIHRvIHNlbmQgaXQgaW5cXG4gNjgxOlxcdFxcdCAqIGEgZnVsbCB0YWJsZSByZXNwb25zZSBnb2luZyBvdXQgYmVmb3JlIHRoZSBuZXh0IHR0dm4gaW5jcmVtZW50XFxuIDY4MjpcXHRcXHQgKiAoY29uc2lzdGVuY3kgY2hlY2spXFxuIDY4MzpcXHRcXHQgKi9cXG4gNjg0OlxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgPSBCQVRBRFZfVFRfQ0xJRU5UX05FVztcXG4gNjg1OlxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24udmlkID0gdmlkO1xcbiA2ODY6XFx0XFx0aWYgKGJhdGFkdl9pc193aWZpX2hhcmRpZihpbl9oYXJkaWYpKVxcbiA2ODc6XFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1dJRkk7XFxuIDY4ODpcXHRcXHRrcmVmX2luaXQoXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24ucmVmY291bnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNzoyMi4wMjM5MTA5MjFaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNzI0NjAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBWTEFOIEFzc29jaWF0aW9uIGluIGJhdGFkdl90dF9sb2NhbF9hZGQqKlxuXG5Pa2F5LCBzbyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgaXMgZG9pbmcgc29tZXRoaW5nIHdpdGggVkxBTnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgY2FsbGluZyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgd2l0aCB0aGUgcmVsZXZhbnQgYGJhdF9wcml2YCBhbmQgYHZpZGAgYXJndW1lbnRzLCBhbmQgdGhlbiBzdG9yaW5nIHRoZSByZXN1bHQsIHByZXN1bWFibHkgYSBWTEFOIGlkZW50aWZpZXIsIGluIGB0dF9sb2NhbC1cdTAwM2V2bGFuYC4gVGhpcyBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQg4oCTIHdlJ3JlIGxpa2VseSBhc3NvY2lhdGluZyBhIGxvY2FsIGVudHJ5IHdpdGggYSBzcGVjaWZpYyBWTEFOLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBjaGVjayBwcmVjaXNlbHkgd2hlcmUgYW5kIGhvdyBgdHRfbG9jYWwtXHUwMDNldmxhbmAgZ2V0cyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIG9mIHRoaXMgdmFyaWFibGUgdG8gYmUgY2VydGFpbiBvZiBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgQmF0YWR2IGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyBpdHMgb3JpZ2luIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ1NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6MjUuMjMxMTYwOTI3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4OTpcXHRcXHR0dF9sb2NhbC1cXHUwMDNlbGFzdF9zZWVuID0gamlmZmllcztcXG4gNjkwOlxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cXHUwMDNlbGFzdF9zZWVuO1xcbiA2OTE6XFx0XFx0dHRfbG9jYWwtXFx1MDAzZXZsYW4gPSB2bGFuO1xcbiA2OTI6XFx0XFxuIDY5MzpcXHRcXHQvKiB0aGUgYmF0bWFuIGludGVyZmFjZSBtYWMgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMgc2hvdWxkIG5ldmVyIGJlXFxuIDY5NDpcXHRcXHQgKiBwdXJnZWRcXG4gNjk1OlxcdFxcdCAqL1xcbiA2OTY6XFx0XFx0aWYgKGJhdGFkdl9jb21wYXJlX2V0aChhZGRyLCBtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkcikgfHxcXG4gNjk3OlxcdFxcdCAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4gNjk4OlxcdFxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFO1xcbiA2OTk6XFx0XFxuIDcwMDpcXHRcXHRrcmVmX2dldChcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XFxuIDcwMTpcXHRcXHRoYXNoX2FkZGVkID0gYmF0YWR2X2hhc2hfYWRkKGJhdF9wcml2LVxcdTAwM2V0dC5sb2NhbF9oYXNoLCBiYXRhZHZfY29tcGFyZV90dCxcXG4gNzAyOlxcdFxcdFxcdFxcdFxcdCAgICAgYmF0YWR2X2Nob29zZV90dCwgXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24sXFxuIDcwMzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmhhc2hfZW50cnkpO1xcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHRpZiAodW5saWtlbHkoaGFzaF9hZGRlZCAhPSAwKSkge1xcbiA3MDY6XFx0XFx0XFx0LyogcmVtb3ZlIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBoYXNoICovXFxuIDcwNzpcXHRcXHRcXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsKTtcXG4gNzA4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3MDk6XFx0XFx0fVxcbiA3MTA6XFx0XFxuIDcxMTpcXHRhZGRfZXZlbnQ6XFxuIDcxMjpcXHRcXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpO1xcbiA3MTM6XFx0XFxuIDcxNDpcXHRjaGVja19yb2FtaW5nOlxcbiA3MTU6XFx0XFx0LyogQ2hlY2sgd2hldGhlciBpdCBpcyBhIHJvYW1pbmcsIGJ1dCBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgcm9hbWluZ1xcbiA3MTY6XFx0XFx0ICogcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWRcXG4gNzE3OlxcdFxcdCAqL1xcbiA3MTg6XFx0XFx0aWYgKHR0X2dsb2JhbCBcXHUwMDI2XFx1MDAyNiAhKHR0X2dsb2JhbC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSkge1xcbiA3MTk6XFx0XFx0XFx0LyogVGhlc2Ugbm9kZSBhcmUgcHJvYmFibHkgZ29pbmcgdG8gdXBkYXRlIHRoZWlyIHR0IHRhYmxlICovXFxuIDcyMDpcXHRcXHRcXHRoZWFkID0gXFx1MDAyNnR0X2dsb2JhbC1cXHUwMDNlb3JpZ19saXN0O1xcbiA3MjE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA3MjI6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9yaWdfZW50cnksIGhlYWQsIGxpc3QpIHtcXG4gNzIzOlxcdFxcdFxcdFxcdGJhdGFkdl9zZW5kX3JvYW1fYWR2KGJhdF9wcml2LCB0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5hZGRyLFxcbiA3MjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi52aWQsXFxuIDcyNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG9yaWdfZW50cnktXFx1MDAzZW9yaWdfbm9kZSk7XFxuIDcyNjpcXHRcXHRcXHR9XFxuIDcyNzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNzI4OlxcdFxcdFxcdGlmIChyb2FtZWRfYmFjaykge1xcbiA3Mjk6XFx0XFx0XFx0XFx0YmF0YWR2X3R0X2dsb2JhbF9mcmVlKGJhdF9wcml2LCB0dF9nbG9iYWwsXFxuIDczMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiUm9hbWluZyBjYW5jZWxlZFxcXCIpO1xcbiA3MzE6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNzMyOlxcdFxcdFxcdFxcdC8qIFRoZSBnbG9iYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBST0FNSU5HIGFuZFxcbiA3MzM6XFx0XFx0XFx0XFx0ICogaGFzIHRvIGJlIGtlcHQgZm9yIGNvbnNpc3RlbmN5IHB1cnBvc2VcXG4gNzM0OlxcdFxcdFxcdFxcdCAqL1xcbiA3MzU6XFx0XFx0XFx0XFx0dHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbiA3MzY6XFx0XFx0XFx0XFx0dHRfZ2xvYmFsLVxcdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcXG4gNzM3OlxcdFxcdFxcdH1cXG4gNzM4OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6MjUuMjMxNDU3NDQ3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTg4OTk3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIFJlZmVyZW5jZSBDb3VudGluZyBpbiBCYXRtYW4tYWR2KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQmF0bWFuLWFkdiBWTEFOIG1hbmFnZW1lbnQgY29kZS4gSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHdoZW4gYSBUVCBlbnRyeSBpcyBjcmVhdGVkLCBpdCB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgVkxBTiBvYmplY3QuIFRoZW4sIHdoZW4gdGhlIFRUIGVudHJ5IGlzIGZyZWVkLCBpdCByZWxlYXNlcyB0aGUgcmVmZXJlbmNlLiBUaGlzIG1ha2VzIHNlbnNlIHNvIGZhci5cblxuTm93LCBsZXQncyBsb29rIGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgLiBJdCByZXRyaWV2ZXMgYSBWTEFOIHVzaW5nIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YC4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJ3QqIHJlbGVhc2UgdGhpcyByZWZlcmVuY2UhIFRoZW4sIGl0IGFkZHMgYSBUVCBsb2NhbCBlbnRyeSwgd2hpY2ggYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAuIFRoaXMgbWVhbnMgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgbGVha3MgYSByZWZlcmVuY2UuXG5cblRoaXMgbGVhayBpcyBpbXBvcnRhbnQhIElmIHRoZSBWTEFOIHdhcyBjcmVhdGVkLCB0aGUgcmVmY291bnQgaXMgbGlrZWx5IDEgKGxpc3QpICsgMSAoVFQgZW50cnkpLiBUaGUgY2FsbCB0byBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBtZWFucyB0aGUgcmVmY291bnQgaXMgbm93IDM6IG9uZSBmcm9tIHRoZSBsaXN0LCBvbmUgZnJvbSB0aGUgbGVha2VkIHJlZmVyZW5jZSwgYW5kIG9uZSBmcm9tIHRoZSBUVCBlbnRyeS4gSWYgdGhlIFZMQU4gd2FzIHJldml2ZWQsIHRoZSByZWZjb3VudCBpcyBldmVuIGhpZ2hlciwgYWxzbyAzLlxuXG5JJ20gc3RhcnRpbmcgdG8gZ3Jhc3AgaG93IHRoaXMgaXMgc3VwcG9zZWQgdG8gd29yay4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHRoZW4gYWxzbyBnZXRzIGEgcmVmZXJlbmNlLiBUaGUgZGVzdHJ1Y3Rpb24gcHJvY2VzcyB0aGVuIGdldHMgbWVzc3ksIGJ1dCB1bHRpbWF0ZWx5IGxlYWRzIHRvIGEgcmVmY291bnQgb2YgMSBmb3IgYSAqY3JlYXRlZCogVkxBTiwgYW5kIDAgZm9yIGEgKnJldml2ZWQqIFZMQU4uIFNvLCBpZiBhIFZMQU4gd2FzIGNyZWF0ZWQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgYW5kIGl0J3MgZnJlZWQhXG5cbkhvd2V2ZXIsIGlmIGEgVkxBTiB3YXMgcmV2aXZlZCwgdGhlcmUncyBhIHByb2JsZW06IHRoZSByZWZjb3VudCBpbmNyZWFzZXMgYnkgMiB3aGVuIHJldml2ZWQsIGFuZCBkZWNyZWFzZXMgYnkgMiB3aGVuIFwia2lsbGVkXCIuIFRoZSBuZXQgY2hhbmdlIGlzIHplcm8sIHNvIGl0IHJldHVybnMgdG8gaXRzIHByZXZpb3VzIHJlZmNvdW50LlxuXG5UaGUgY3JpdGljYWwgaW5zaWdodCBoZXJlIGlzIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgSU5URU5USU9OQUxMWSBsZWFrcyBhIHJlZmVyZW5jZSEgSXQgZG9lcyB0aGlzIGJ5IGNhbGxpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9nZXRgIGFuZCBmYWlsaW5nIHRvIHJlbGVhc2UgaXQuIFRoaXMgbGVha2VkIHJlZmVyZW5jZSBhY3RzIGFzIHRoZSAqbmV3KiBsaXN0IHJlZmVyZW5jZS4gVGhpcyBpcyB3aGF0IGVuYWJsZXMgdGhlIFZMQU4gdG8gYmUgXCJyZXZpdmVkXCIgYW5kIGVuc3VyZXMgaXQgc3RheXMgaW4gdGhlIGxpc3QsIGV2ZW4gYWZ0ZXIgaXQncyBsb2dpY2FsbHkgZGVzdHJveWVkLlxuXG5TbywgSSd2ZSBtYXBwZWQgb3V0IHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGJvdGggdGhlIG5ldyBhbmQgcmV2aXZlZCBjYXNlczogdGhlIHByb2Nlc3MgaXMgd2VsbC1iYWxhbmNlZC4gU29tZW9uZSBlbHNlIG1heSBoYXZlIGEgcmVmZXJlbmNlLCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBjYWxsZWQsIGFuZCBhdCB0aGUgZW5kIG9mIHRoaXMgcHJvY2VzcywgdGhlIFZMQU4gc3RpbGwgbGl2ZXMgaW4gdGhlIGxpc3QuXG5cbk5vdywgd2h5IHdhcyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBjYWxsIHJlbW92ZWQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaW4gdGhlIHBhdGNoPyBJZiB0aGF0IGxpbmUgaXMgcmVtb3ZlZCwgaXQgKmxlYWtzKiBhIHJlZmVyZW5jZS4gVGhhdCBtZWFucyB0aGUgcmVmY291bnQgd2lsbCBuZXZlciByZWFjaCB6ZXJvLiBUaGlzIGNhbid0IGJlIGNvcnJlY3QuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgcGF0Y2ggaGFzIGEgaHVnZSBpbXBsaWNhdGlvbi4gVGhpcyBpbXBsaWVzIHRoZXJlIGlzIGEgYnVnLCB0aGUgcGF0Y2ggd2lsbCBicmVhayB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM1NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6NDMuNDIwNDU4MTg5WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTQwNjI4NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTQ1PWludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg3LS8qKlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTg4OiAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4OS0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkxLSAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTkyOnN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTY3MD1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTEtXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2OTI6XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkzLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMDgyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk2LVxcdGlmICh2bGFuKSB7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk3OlxcdFxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTgtXFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6NDMuNzc0NTMyMTc1WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTI4NDk1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBSZWZlcmVuY2UgQ291bnQgSXNzdWVzIGluIEJhdGFkdidzIFZMQU4gSGFuZGxpbmcqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJJ20gbG9va2luZyBhdCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIGhlcmUsIGFuZCBJJ20gZm9jdXNpbmcgb24gdGhpcyBibG9jazpcblxuYGBgY1xuXHQvKiBkZXN0cm95IHRoZSBcInVudGFnZ2VkXCIgVkxBTiAqL1xuXHR2bGFuID0gYmF0YWR2X21lc2hpZl92bGFuX2dldChiYXRfcHJpdiwgQkFUQURWX05PX0ZMQUdTKTtcblx0aWYgKHZsYW4pIHtcblx0XHRiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbihiYXRfcHJpdiwgdmxhbik7XG5cdFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcblx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGdldCBhIFZMQU4gcmVmZXJlbmNlLCBkZXN0cm95IGl0LCBhbmQgdGhlbiBkcm9wIHRoZSByZWZlcmVuY2UuIFRoYXQgYXBwZWFycyBiYWxhbmNlZCwgd2hpY2ggaXMgZ29vZC4gIEJ1dCB0aGVuIHRoZSBxdWVzdGlvbiBpcywgKndoeSogYXJlIHdlIHB1dHRpbmcgdGhlIHJlZmVyZW5jZT8gSXQgc2hvdWxkIGhhdmUgYmVlbiBhIGdldCBhbmQgYSBwdXQuXG5cblRoZW4gaXQgaGl0cyBtZTogc3VwcG9zZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWxzbyBkaWQgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIElmIGl0IGRpZCwgaXQgd291bGQgYmUgKnJlbW92aW5nKiB0aGUgcHV0IHRoYXQgc2hvdWxkIGJlIGhlcmUsIGFuZCB0aGF0IHdvdWxkIGJlIGEgbGVhayEgSSBoYWQgdG8gY2hlY2suXG5XYWl0LCBsZXQgbWUgcmVhZCB0aGUgY2FsbCB0byBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuXG5cbi4uLk5vcGUsIGl0J3Mgbm90IHByZXNlbnQuIFNvICp0aGF0KiBpcyBub3QgdGhlIHByb2JsZW0uXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBjb3VsZCBiZSBnb2luZyBvbj8gIERpZCBzb21lb25lIG1vZGlmeSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHRvIGJlIGEgZG91YmxlLWRlY3JlbWVudD8gTm8sIHRoYXQgZG9lc24ndCBtYWtlIHNlbnNlLiAgSXQgaXMgc3VwcG9zZWQgdG8gYmUgb25lIG9mIHRoZSBzaW1wbGVzdCBmdW5jdGlvbnMgaW4gdGhlIHdob2xlIG1vZHVsZS5cblxuT2theSwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoYXQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCAqYWN0dWFsbHkqIGRvZXMuICBJdCBuZWVkcyBhIGNhcmVmdWwgcmVyZWFkLiBJIGFtIGdvaW5nIHRvIHJlcmVhZCB0aGUgc291cmNlIG5vdyBhbmQgdmVyaWZ5IHRoZSBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjkwNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxNzo0OS4yMjczODQ1NTFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg4OlxcdCAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG4gNTg5OlxcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiA1OTA6XFx0ICogQHZsYW46IHRoZSBvYmplY3QgdG8gcmVtb3ZlXFxuIDU5MTpcXHQgKi9cXG4gNTkyOlxcdHN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIDU5MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbilcXG4gNTk0OlxcdHtcXG4gNTk1OlxcdFxcdC8qIGV4cGxpY2l0bHkgcmVtb3ZlIHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGJlY2F1c2UgaXQgaXMgbWFya2VkXFxuIDU5NjpcXHRcXHQgKiB3aXRoIHRoZSBOT1BVUkdFIGZsYWdcXG4gNTk3OlxcdFxcdCAqL1xcbiA1OTg6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgYmF0X3ByaXYtXFx1MDAzZW1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyLFxcbiA1OTk6XFx0XFx0XFx0XFx0ICAgICAgIHZsYW4tXFx1MDAzZXZpZCwgXFxcInZsYW4gaW50ZXJmYWNlIGRlc3Ryb3llZFxcXCIsIGZhbHNlKTtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG4gNjAyOlxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0LyoqXFxuIDYwNTpcXHQgKiBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoKSAtIG5kb19hZGRfdmlkIEFQSSBpbXBsZW1lbnRhdGlvblxcbiA2MDY6XFx0ICogQGRldjogdGhlIG5ldGRldiBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gNjA3OlxcdCAqIEBwcm90bzogcHJvdG9jb2wgb2YgdGhlIHZsYW4gaWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTc6NDkuMjI3NDk4ODMxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NTQwOTMwMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmVyZW5jZSBDb3VudGluZyBTaGVuYW5pZ2FucyBpbiBWTEFOIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIHRoaXMgVkxBTiByZWZlcmVuY2UgY291bnRpbmcgaW4gdGhlIGJhdGFkdiBjb2RlLiAgRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAuICBJdCByZW1vdmVzIGEgVFQgZW50cnkuIERvZXMgaXQgYWxzbyBkcm9wIGEgcmVmZXJlbmNlIHRvIHRoZSBWTEFOIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVudHJ5PyBZZXMsIGl0IGRvZXMuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBlbnRyeSBpcyBiZWluZyBmcmVlZCwgYW5kIHdpdGggaXQsIHRoZSByZWZlcmVuY2UgaXQgaGVsZCB0byB0aGUgVkxBTi5cblxuTm93LCBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCAqYWRkcyogdGhlIFRUIGVudHJ5LCB3aGljaCBJIHNlZSBtZWFucyBpdCAqYWRkcyogYSByZWZlcmVuY2UgdG8gdGhlIFZMQU4uIEdvdCBpdCwgc28gdGhlIFRUIGVudHJ5IGlzIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSB2bGFuIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIFRULlxuXG5Tbywgd2hlbiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCwgaXQncyBkcm9wcGluZyB0aGF0IFRUIGVudHJ5J3MgcmVmZXJlbmNlLiAgQnV0IHdhaXQsIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgKmFsc28qIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCEgU28sIHRoZXJlIGFyZSAqdHdvKiByZWZlcmVuY2VzIGJlaW5nIGRyb3BwZWQuIE9uZSBmcm9tIHRoZSBUVCwgYW5kIG9uZSBmcm9tIHRoZSBjYWxsIHRvIGB2bGFuX3B1dGAuXG5cblRoZSBxdWVzdGlvbiBiZWNvbWVzLCAqd2hlcmUqIGRvIHRob3NlIHJlZmVyZW5jZXMgY29tZSBmcm9tPyBJZiB3ZSBjcmVhdGUgdGhlIFZMQU4gdmlhIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCwgdGhlIGluaXRpYWwgcmVmZXJlbmNlIGNvdW50IGlzIGp1c3QgMSAodGhlIGxpc3QgcmVmZXJlbmNlKS4gVGhlbiwgYWRkaW5nIGEgVFQgZW50cnkgKGBiYXRhZHZfdHRfbG9jYWxfYWRkYCkgKmluY3JlbWVudHMqIHRoYXQgcmVmY291bnQsIGFuZCBhZGRpbmcgYSB2bGFuIGVudHJ5IChgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGApICppbmNyZW1lbnRzKiBpdCB0b28uIFNvLCBhdCBvbmUgcG9pbnQsIHdpdGggYWxsIHJlZmVyZW5jZXMgcHJlc2VudCwgdGhlIHJlZmNvdW50IGlzIDMuXG5cbkJ1dCBob3cgZG8gdGhlc2UgcmVmZXJlbmNlcyBnZXQgcmVsZWFzZWQgY29ycmVjdGx5P1xuXG5gYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGlzIGNhbGxlZCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCwgYW5kIGl0J3MgZHJvcHBpbmcgKnR3byogcmVmZXJlbmNlcywgVFQgYW5kIHRoZSBsaXN0LiBBbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGFsc28gcHV0dGluZyBvbmUgcmVmZXJlbmNlLlxuVGhpcyBzZWVtZWQgdmVyeSBmaXNoeSB0byBtZSwgYXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIHdvdWxkIGJlIGxlYWtpbmcgYSByZWZlcmVuY2UuXG5cbkxvb2tpbmcgYXQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLCBhZnRlciBjcmVhdGlvbiwgYW5kIGFmdGVyIGBobGlzdF9hZGRfaGVhZF9yY3VgLCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgY2FsbGVkISBCdXQgdGhhdCBpcyBqdXN0IHRvIGluaXRpYWxpemUgdGhlIHJlZmVyZW5jZSBjb3VudC5cblRoZSBjYWxsZXIgZG9lcyAqbm90KiBob2xkIGEgcmVmZXJlbmNlLiBUaGUgbGlzdCBkb2VzIVxuXG5XaGVuIHRoZSByZWZjb3VudCBldmVudHVhbGx5IHJlYWNoZXMgMCAoYWxsIHJlZmVyZW5jZXMgZHJvcHBlZCksIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgaXMgY2FsbGVkLCB3aGljaCBoYW5kbGVzIHJlbW92aW5nIHRoZSBWTEFOIGZyb20gdGhlIGxpc3QuXG5cblNvLCB0aGUgbGlzdCBoYXMgYSByZWZlcmVuY2UsIHRoZSBUVCBlbnRyeSBob2xkcyBhIHJlZmVyZW5jZSwgYW5kIHRoZSBpbnRlcmZhY2UgY29kZSBjYW4gaG9sZCBhIHJlZmVyZW5jZS5cblxuVGhlIGxpc3QgcmVmZXJlbmNlIGlzIGltcGxpY2l0bHkgZHJvcHBlZCB3aGVuIHRoZSByZWZjb3VudCBoaXRzIHplcm8uIEJ1dCBpZiB0aGUgcmVmY291bnQgKm5ldmVyKiBoaXRzIHplcm8sIGl0ICpzdGF5cyogaW4gdGhlIGxpc3QsIGV2ZW4gaWYgdGhlIGxpc3QgaGFzIG5vdCBleHBsaWNpdGx5IHRha2VuIGEgcmVmZXJlbmNlIGFuZCBkcm9wcGVkIGl0LlxuXG5TbywgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBleHBsaWNpdGx5IGRyb3BzIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhpcyBpcyB3aGF0IHNlZW1lZCBvZGQhXG5cbklmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgdGhlIGxpc3QgcmVmZXJlbmNlLCB3aGF0IGFib3V0IHRoZSBjYXNlIHdoZW4gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKnJlLWFkZHMqIHRoZSBWTEFOPyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ2V0cyBhIHJlZmVyZW5jZS4gVGhlIGNvdW50IGdvZXMgdXAgYnkgb25lLCBhbmQgaXQgZ2V0cyBhIG5ldyBsaXN0IHJlZmVyZW5jZSEgSXQgaXMgcmUtYWRkZWQsIGFuZCB0aGUgcHJldmlvdXMgbGlzdCBpcyByZW1vdmVkIVxuXG5JbiBzdW1tYXJ5LCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGluY3JlbWVudGVkIGJ5IDEgd2hlbiB0aGUgb2JqZWN0IGlzIGNyZWF0ZWQgKGkuZS4gdGhlIGxpc3QpLiBUaGVuIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCAocmVmY291bnQgKyAxKSwgYW5kIGFsc28gYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgKHJlZmNvdW50ICsgMSkuIFdoZW4gdGhlIG9iamVjdCBpcyBraWxsZWQsIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgYSByZWZlcmVuY2UgZnJvbSB0aGUgVFQsIGFuZCBpdCBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UuIFRoZW4sIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBhbHNvIGRyb3BzIGEgcmVmZXJlbmNlIGZyb20gdGhlIGBnZXRgLiBJdCBhcHBlYXJzIHRoYXQgdGhlIHJlZmVyZW5jZXMgYWxsIGNhbmNlbCBvdXQsIGFuZCB0aGUgb2JqZWN0IGNhbiBiZSBzYWZlbHkga2lsbGVkIHdpdGhvdXQgbGVha2luZyBhIHJlZmVyZW5jZSFcblxuSWYgd2UgcmVtb3ZlIHRoZSBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCwgdGhlcmUgaXMgYSByZWZlcmVuY2UgbGVhayBiZWNhdXNlIHRoZSBmaW5hbCBwdXQgdGhhdCByZW1vdmVzIHRoZSByZWZlcmVuY2UgY291bnQgZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgbWlzc2luZyEgV2h5IHdvdWxkIHRoaXMgYmUgcmVtb3ZlZD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBwYXRjaCBhZ2FpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTg6MTMuNzY4NDMyNTMyWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjgzMzc0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NTQ1PWludCBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHVuc2lnbmVkIHNob3J0IHZpZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTg3LS8qKlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTg4OiAqIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKCkgLSByZW1vdmUgYW5kIGRlc3Ryb3kgYSBtZXNoaWZfdmxhbiBvYmplY3RcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTU4OS0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNTkxLSAqL1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NTkyOnN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy01OTMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTY3MD1zdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02OTEtXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo2OTI6XFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjkzLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMDgyPXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMDk2LVxcdGlmICh2bGFuKSB7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMDk3OlxcdFxcdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTEwOTgtXFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTg6MTQuMDM2Nzc3MjY2WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTU2OTU3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbiBGdW5jdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIExvb2tpbmcgYXQgdGhpcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGZ1bmN0aW9uIGluIHRoZSBCYXRhZHYgY29kZeKApiBzcGVjaWZpY2FsbHksIHRoaXMgYmxvY2sgd2hlcmUgYSBWTEFOIGlzIGJlaW5nIGRlc3Ryb3llZC4gSSBzZWUgaXQgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoZSBhc3NvY2lhdGVkIFRUIGxvY2FsIGVudHJ5IGhhcyB0aGUgTk9QVVJHRSBmbGFnLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoZW4gaXQgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUuLi4gYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kIGl0LCBzaG91bGQgZHJvcCB0aGUgVFQgcmVmZXJlbmNlLCByaWdodD8gQW5kIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBpcyBzdXBwb3NlZCB0byBkcm9wIHRoZSBsaXN0IHJlZmVyZW5jZS4gVGhpcyBhbGwgc2VlbXMgbG9naWNhbC5cblxuQnV0Li4ud2hhdCBpZiBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgKmRvZXNuJ3QqIGFjdHVhbGx5IGRyb3AgdGhlIFRUIHJlZmVyZW5jZSBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvPyBUaGUgY29tbWVudCBpbXBsaWVzIHRoYXQgYE5PUFVSR0VgIGZsYWcgY291bGQgYmUgYSBmYWN0b3IuIFRoYXQncyBhIHBvc3NpYmlsaXR5LCBhbmQgc29tZXRoaW5nIEknZCB3YW50IHRvIHZlcmlmeSBpbW1lZGlhdGVseSwgYmVjYXVzZSBpdCBpbXBhY3RzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIGhhZCBiZXR0ZXIgY2hlY2sgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgdG8gY29uZmlybS4gTGV0J3Mgc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjQ0NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxODoxOC4yOTI0NzU5OFoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQ1OlxcdHUxNiBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICphZGRyLFxcbjEyNDY6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgc2hvcnQgdmlkLCBjb25zdCBjaGFyICptZXNzYWdlLFxcbjEyNDc6XFx0XFx0XFx0XFx0ICAgYm9vbCByb2FtaW5nKVxcbjEyNDg6XFx0e1xcbjEyNDk6XFx0XFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfcmVtb3ZlZF9lbnRyeTtcXG4xMjUwOlxcdFxcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5O1xcbjEyNTE6XFx0XFx0dTE2IGZsYWdzLCBjdXJyX2ZsYWdzID0gQkFUQURWX05PX0ZMQUdTO1xcbjEyNTI6XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKnR0X3JlbW92ZWRfbm9kZTtcXG4xMjUzOlxcdFxcbjEyNTQ6XFx0XFx0dHRfbG9jYWxfZW50cnkgPSBiYXRhZHZfdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xcbjEyNTU6XFx0XFx0aWYgKCF0dF9sb2NhbF9lbnRyeSlcXG4xMjU2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNTc6XFx0XFxuMTI1ODpcXHRcXHRjdXJyX2ZsYWdzID0gdHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncztcXG4xMjU5OlxcdFxcbjEyNjA6XFx0XFx0ZmxhZ3MgPSBCQVRBRFZfVFRfQ0xJRU5UX0RFTDtcXG4xMjYxOlxcdFxcdC8qIGlmIHRoaXMgZ2xvYmFsIGVudHJ5IGFkZGl0aW9uIGlzIGR1ZSB0byBhIHJvYW1pbmcsIHRoZSBub2RlIGhhcyB0b1xcbjEyNjI6XFx0XFx0ICogbWFyayB0aGUgbG9jYWwgZW50cnkgYXMgXFxcInJvYW1lZFxcXCIgaW4gb3JkZXIgdG8gY29ycmVjdGx5IHJlcm91dGVcXG4xMjYzOlxcdFxcdCAqIHBhY2tldHMgbGF0ZXJcXG4xMjY0OlxcdFxcdCAqL1xcbjEyNjU6XFx0XFx0aWYgKHJvYW1pbmcpIHtcXG4xMjY2OlxcdFxcdFxcdGZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG4xMjY3OlxcdFxcdFxcdC8qIG1hcmsgdGhlIGxvY2FsIGNsaWVudCBhcyBST0FNZWQgKi9cXG4xMjY4OlxcdFxcdFxcdHR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbjEyNjk6XFx0XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHRcXHRpZiAoISh0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKSB7XFxuMTI3MjpcXHRcXHRcXHRiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncyxcXG4xMjczOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBtZXNzYWdlKTtcXG4xMjc0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNzU6XFx0XFx0fVxcbjEyNzY6XFx0XFx0LyogaWYgdGhpcyBjbGllbnQgaGFzIGJlZW4gYWRkZWQgcmlnaHQgbm93LCBpdCBpcyBwb3NzaWJsZSB0b1xcbjEyNzc6XFx0XFx0ICogaW1tZWRpYXRlbHkgcHVyZ2UgaXRcXG4xMjc4OlxcdFxcdCAqL1xcbjEyNzk6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwgQkFUQURWX1RUX0NMSUVOVF9ERUwpO1xcbjEyODA6XFx0XFxuMTI4MTpcXHRcXHR0dF9yZW1vdmVkX25vZGUgPSBiYXRhZHZfaGFzaF9yZW1vdmUoYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2gsXFxuMTI4MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJhdGFkdl9jb21wYXJlX3R0LFxcbjEyODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LFxcbjEyODQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE4OjE4LjI5MjY5NzIxWiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTkxMDAxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUVCBFbnRyeSBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIFRUIGVudHJ5IHdoZW4gYSBWTEFOIGlzIGtpbGxlZC4gIFRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgdGhhdCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ2AgaWYgdGhlIGVudHJ5IGlzbid0IG5ldy4gVGhpcyBtZWFucyBpdCAqZG9lc24ndCogaW1tZWRpYXRlbHkgcmVtb3ZlIHRoZSBlbnRyeTsgaXQganVzdCBzZXRzIHRoZSBQRU5ESU5HIGZsYWcuIENvbnNlcXVlbnRseSwgdGhlIHJlZmVyZW5jZSBpc24ndCBkcm9wcGVkIHlldC5cblxuSWYgdGhlIHJlZmVyZW5jZSBpc24ndCBkcm9wcGVkLCB0aGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgb25seSBkZWNyZW1lbnRzIG9uZSByZWZlcmVuY2UsIHNwZWNpZmljYWxseSB0aGUgbGlzdCByZWZlcmVuY2UsIHdoZW4gaXQgaXMgY2FsbGVkLiBUaGVuLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZHJvcHMgdGhlIFwiZ2V0XCIgcmVmZXJlbmNlLiBUaGlzIHJlc3VsdHMgaW4gYSBuZXQgY2hhbmdlIG9mIC0xIChsaXN0IHJlZmVyZW5jZSBkcm9wcGVkKSwgbWVhbmluZyB0aGUgVFQgcmVmZXJlbmNlIGlzIHN0aWxsIGhlbGQuIFdpdGggdGhlIFRUIHJlZmVyZW5jZSBoZWxkLCB0aGUgcmVmY291bnQgYmVjb21lcyAxLiBUaGUgVFQgZW50cnkgd2lsbCBiZSBwdXJnZWQgbGF0ZXIgYnkgdGhlIFRUIHdvcmtlciwgd2hpY2ggd2lsbCBkcm9wIHRoZSBUVCByZWZlcmVuY2UuICBUaGF0IG1ha2VzIHRoZSByZWZjb3VudCAwIGFuZCB0aGUgZW50cnkgaXMgZnJlZWQuIFRoYXQgc2VlbXMgcGVyZmVjdGx5IGNvcnJlY3QsIGFmdGVyIGFsbC5cblxuSG93ZXZlciwgdGhlIHB1enpsaW5nIHBhcnQgaXMgd2h5IHRoZSBwYXRjaCByZW1vdmVkIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBmcm9tIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpbiB0aGUgZmlyc3QgcGxhY2UuIExldCdzIHJldmlzaXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgOlxuXG5gYGBjXG5cdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQgfCBCQVRBRFZfVkxBTl9IQVNfVEFHKTtcblx0aWYgKCF2bGFuKVxuXHRcdHJldHVybiAtRU5PRU5UO1xuXG5cdGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuKGJhdF9wcml2LCB2bGFuKTtcblxuXHQvKiBmaW5hbGx5IGZyZWUgdGhlIHZsYW4gb2JqZWN0ICovXG5cdGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbik7XG5gYGBcblxuVGhlIHByb2JsZW0gaXMgdGhlIGFwcGFyZW50IHJlZHVuZGFuY3k6IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBUaGlzIG1lYW5zIGl0ICphbHJlYWR5KiBkcm9wcyB0aGUgbGlzdCByZWZlcmVuY2UuIFRoZW4sIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgYWdhaW4uIEl0IGRyb3BzIHRoZSBnZXQgcmVmZXJlbmNlLiBUaGF0J3MgcGVyZmVjdGx5IGNvcnJlY3QhIFNvLCB3aHkgd2FzIGl0IHJlbW92ZWQ/IERpZCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNoYW5nZSB0byBkcm9wIHR3byByZWZlcmVuY2VzPyBOb3BlLCBJIGp1c3QgcmVhZCBpdCBhbmQgSSdtIHN1cmUgaXQgZG9lc24ndC4gUGVyaGFwcyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZG9lc24ndCBhY3R1YWxseSBnZXQgYSByZWZlcmVuY2UgYWZ0ZXIgYWxsLiBCZXR0ZXIgY2hlY2sgdGhhdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzY2MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE4OjI1Ljg1MTgwMTMwMVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0ICogYmF0YWR2X21lc2hpZl92bGFuX2dldCgpIC0gZ2V0IHRoZSB2bGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2aWRcXG4gNTExOlxcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiA1MTI6XFx0ICogQHZpZDogdGhlIGlkZW50aWZpZXIgb2YgdGhlIHZsYW4gb2JqZWN0IHRvIHJldHJpZXZlXFxuIDUxMzpcXHQgKlxcbiA1MTQ6XFx0ICogUmV0dXJuOiB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSB2bGFuIG1hdGNoaW5nIHRoZSB2aWQgcGFzc2VkIGFzIGFyZ3VtZW50IG9yXFxuIDUxNTpcXHQgKiBOVUxMIG90aGVyd2lzZS4gVGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJldHVybmVkIG9iamVjdCBpcyBpbmNyZW1lbnRlZCBieSAxLlxcbiA1MTY6XFx0ICovXFxuIDUxNzpcXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICpiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIDUxODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIHNob3J0IHZpZClcXG4gNTE5OlxcdHtcXG4gNTIwOlxcdFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW5fdG1wLCAqdmxhbiA9IE5VTEw7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNTIzOlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2bGFuX3RtcCwgXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0LCBsaXN0KSB7XFxuIDUyNDpcXHRcXHRcXHRpZiAodmxhbl90bXAtXFx1MDAzZXZpZCAhPSB2aWQpXFxuIDUyNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNTI2OlxcdFxcbiA1Mjc6XFx0XFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2dmxhbl90bXAtXFx1MDAzZXJlZmNvdW50KSlcXG4gNTI4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1Mjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE4OjI1Ljg1MTkxMjU1MVoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA0NTQ3OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIFZMQU4gRGVzdHJ1Y3Rpb24qKlxuXG5Pa2F5LCBzbyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZGVmaW5pdGVseSBncmFicyBhIHJlZmVyZW5jZSwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgdGltaW5nIG9mIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfbmV0bGlua2AuIFNwZWNpZmljYWxseSwgaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICphbmQqIHRoZW4gYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLCB0aGF0J3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgbG9naWMgYXMgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLiBXaHkgd2FzIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCAqcmVtb3ZlZCogZnJvbSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgc3BlY2lmaWNhbGx5PyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi5cblxuTGV0IG1lIHJlcmVhZCB0aGUgZGlmZi4gQWxyaWdodCwgc28gdGhlIGNvZGUgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGluZGVlZCBub3cgKmRvZXNuJ3QqIGNhbGwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGFmdGVyIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIE15IGZpcnN0IGd1dCByZWFjdGlvbiBpczogcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlISBEaWQgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmcmVlIHRoZSBWTEFOLCBhbmQgdGhlbiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgaXMgYSBkYW5nbGluZyBwb2ludGVyP1xuXG5CdXQgd2FpdC4gTm8uIFRoZSBpbml0aWFsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCAqZG9lcyogaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQuIFNvLCBiZWZvcmUgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCwgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBhdCAqbGVhc3QqIDIgKG9uZSBmcm9tIHRoZSBsaXN0LCBvbmUgZnJvbSB0aGUgYGdldGApLiBPa2F5LCB3aGF0IGlmIHRoZSByZWZjb3VudCBpcyAxIGJlZm9yZSBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gPyBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgZ290IGEgcmVmZXJlbmNlLCBzbyB0aGUgcmVmY291bnQgaXMgYXQgbGVhc3QgMS4gSWYgdGhlIGxpc3QgcmVmZXJlbmNlICp3YXMqIGFscmVhZHkgZHJvcHBlZCwgYGtyZWZfZ2V0X3VubGVzc196ZXJvYCB3b3VsZCBoYXZlIGZhaWxlZC4gU28sIHRoZSByZWZjb3VudCBpcyBhdCBsZWFzdCAxLiBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAgaW5jcmVhc2VzIGl0IHRvIDIuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgZHJvcHMgb25lIHJlZiwgc28gbm93IGl0J3MgMS4gVGhlbiBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgZHJvcHMgdGhlIG90aGVyIHJlZiwgbWFraW5nIHRoZSBjb3VudCAwLiBUaGlzICpzaG91bGRuJ3QqIGJlIGEgdXNlLWFmdGVyLWZyZWUgdGhlbi5cblxuSG93ZXZlci4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYSBkaWZmZXJlbnQgc2NlbmFyaW8uIFdoYXQgaWYgYSAqc2VwYXJhdGUqIGNvbW1pdCBtb2RpZmllZCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIHRvICpub3QqIHJlbGVhc2UgdGhlIGxpc3QgcmVmZXJlbmNlPyBUaGF0IHdvdWxkIGJlIHByb2JsZW1hdGljLiBJJ2QgYmV0dGVyIGNoZWNrIHRoZSBnaXQgbG9nIG9mIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTg6MzQuMTU2NDY2MDE4WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyMCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuIFBsZWFzZSBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHF1ZXJpZXMuIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiWW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLiBQbGVhc2Ugc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSBpbnN0ZWFkIG9mIHJlcGVhdGluZyBxdWVyaWVzLlwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxODozNC4xNTY1MDA0OThaIiwiU2VxIjo3MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI3OTg4MjkyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gRGVzdHJ1Y3Rpb24gaW4gYmF0bWFuLWFkdioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjaGFuZ2UsIGFuZCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJIGluaXRpYWxseSBncmVwcGVkIGZvciBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGFuZCwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCBJJ20gdHJ5aW5nIHRvIHdvcmsgb3V0IHdoeSBhIHBhdGNoIHdvdWxkIHJlbW92ZSB0aGUgZmluYWwgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwuICBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCwgd2hpY2ggKml0c2VsZiogY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHJlbW92aW5nIHRoZSBzZWNvbmQgY2FsbCB3b3VsZCBsZWFkIHRvIGEgcmVmZXJlbmNlIGxlYWssIHNpbmNlIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBwcm92aWRlcyBhIHJlZmVyZW5jZSB3aGljaCBpc24ndCBleHBsaWNpdGx5IGRyb3BwZWQgaW4gYWxsIGNhc2VzLlxuXG5TbyBJJ3ZlIGNoZWNrZWQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgLCBhbmQgdGhlIGNvZGUgKmRvZXMqIHNlZW0gdG8gYmUgbGVha2luZyB0aGUgZ2V0IHJlZmVyZW5jZS5cbkhvd2V2ZXIsIEkgYWxzbyB3b25kZXIgaWYgdGhlcmUgaXMgYW4gdW5saWtlbHkgZG91YmxlLWZyZWUgc2NlbmFyaW8sIHNvIEknbSB0cnlpbmcgdG8gZGlzcHJvdmUgdGhhdC5cbkJ1dCB3YWl0LCBpZiB0aGUgZGVzdHJ1Y3Rpb24gbWV0aG9kIGRyb3BzIG9ubHkgb25lIHJlZmVyZW5jZSwgaXQgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0uXG5JIHRob3VnaHQgYWJvdXQgd2hldGhlciBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgY291bGQgYmUgcmVsYXRlZCB0byBkcm9wcGluZyB0aGUgcmVmZXJlbmNlLCBidXQgSSByZWFsaXplIHRoZSBUVCByZWZlcmVuY2UgaXMgaW5kZXBlbmRlbnQgb2Ygd2hhdCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaG9sZHMuXG5TbywgeWVhaCwgdGhhdCBnZXQgcmVmZXJlbmNlIHNlZW1zIHRvIGJlIGxlYWtlZCBpZiB3ZSByZW1vdmUgdGhlIGBwdXRgLlxuXG5JcyBpdCBwb3NzaWJsZSB0aGF0IGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgaXRzZWxmICpjb25zdW1lcyogdGhlIHJlZmVyZW5jZT8gSWYgc28sIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd291bGRuJ3QgbmVlZCB0byBkcm9wIHRoZSByZWZlcmVuY2UgYXMgd2VsbCwgbWFraW5nIHRoZSByZW1vdmVkIGNhbGwgY29ycmVjdC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFzIGxpc3QgaW1wbGljYXRpb25zLlxuSSdtIGNoZWNraW5nIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudC4gIFRoZSBsaXN0IGl0c2VsZiBob2xkcyBhIHJlZmVyZW5jZS4gIElmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY29uc3VtZXMgdGhlIG9uZSBwYXNzZWQgaW4sIHRoZW4gdGhlIGxpc3QgcmVmZXJlbmNlIGlzIG5ldmVyIGRyb3BwZWQuIFNvIEkgY2hlY2tlZCB0aGUgZGVzdHJ1Y3Rpb24gYWdhaW47IGl0IGNsZWFybHkgKmRvZXNuJ3QqIHJlbW92ZSB0aGUgVkxBTiBmcm9tIHRoZSBsaXN0LiAgSWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjb25zdW1lcyBpdHMgYXJndW1lbnQsIHRoZW4gd2l0aG91dCB0aGUgYWRkaXRpb25hbCBgcHV0YCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAsIHdlIGhhdmUgYSBsaXN0IHJlZmVyZW5jZSB0aGF0J3MgbmV2ZXIgcmVsZWFzZWQuICBUaGUgb2JqZWN0IGlzIG5ldmVyIGZyZWVkLCBhbmQgdGhhdCBtZWFucyBhIG1lbW9yeSBsZWFrLlxuXG5Pa2F5LCBsZXQncyBiYWNrIHVwLiBNYXliZSByZW1vdmluZyB0aGUgY2FsbCBwcmV2ZW50cyBhIGRvdWJsZS1mcmVlPyBQZXJoYXBzIGlmIHRoZSBWTEFOIGlzIHNvbWVob3cgZGVzdHJveWVkIHR3aWNlLCB0aGUgZXh0cmEgYHB1dGAgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNvdWxkIGNhdXNlIGEgcHJvYmxlbS5cblxuVGhlIGNvZGUgc2VlbXMgdG8gZW5zdXJlIHRoaXMgY2FuJ3QgaGFwcGVuLlxuVGhlIGxpc3QgcmVmZXJlbmNlIG1pZ2h0IGJlIGRyb3BwZWQgYnkgYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYC5cblxuSSBjaGVja2VkIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyBjYWxsZWQgZnJvbSBgbmRvX3ZsYW5fcnhfa2lsbF92aWRgLCBhbmQgaXQgaXMuICBBbmQgSSB0cmllZCB0byBjcmVhdGUgZG91YmxlLWZyZWUgc2NuZWFyaW9zIGJ1dCB0aGV5IHNob3VsZG4ndCBvY2N1ciBpbiBwcmFjdGljZS5cblxuSG93ZXZlciEgSSdtIG5vdyByZWFsaXppbmcgdGhhdCBgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmtgIGFsc28gdXNlcyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLCBhbmQgaXQgKmFsc28qIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBhZnRlciBpdC4gSWYgdGhlcmUgd2FzIGEgZG91YmxlLWZyZWUgaXNzdWUsIHRoZW4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rYCB3b3VsZCBhbHNvIGhhdmUgYSBwcm9ibGVtLiBCdXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuXG5cbkxldCdzIGNoZWNrIGFnYWluISBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gIFRoZSBmYWN0IHRoYXQgKnRoaXMqIGZ1bmN0aW9uIGRyb3BzIHRoZSByZWZlcmVuY2UgbWlnaHQgYmUga2V5LlxuXG5Pa2F5LCBzbyBnb2luZyBiYWNrIHRvIGZpcnN0IHByaW5jaXBsZXM6IElmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgdGhlbiB3ZSBtdXN0IG5vdCBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAuICBJZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gICpkb2Vzbid0KiBjb25zdW1lIHRoZSByZWZlcmVuY2UsIHRoZW4gd2UgKmRvKiBuZWVkIHRoYXQgYHB1dGAgY2FsbC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgbXVzdCBoYW5kbGUgYSBsaXN0IHJlZmVyZW5jZS5cblxuSWYgdGhlIGRlc3RydWN0aW9uIG1ldGhvZCBkcm9wcyBvbmx5IG9uZSByZWZlcmVuY2UsIHRoZSBsaXN0IHJlZmVyZW5jZSB3aWxsIHN0aWxsIGJlIHRoZXJlLlxuVGhlcmVmb3JlLCBpZiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZG9lcyAqbm90KiBjYWxsIHB1dCwgdGhlIGxpc3QgcmVmZXJlbmNlIGlzIG5ldmVyIGRyb3BwZWQuXG5UaGlzIGlzIGEgbWVtb3J5IGxlYWssIGFuZCBpdCBkb2VzIG5vdCBzZWVtIHRvIG1ha2Ugc2Vuc2UuXG5Ib3dldmVyLCBpZiBpdCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhbm90aGVyIHBhdGgsIHRoZW4gaXQgaXMgYSBkb3VibGUgZnJlZS5cbkxldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmVcblxuIiwiSW5wdXRUb2tlbnMiOjU2NTYxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxODo1Ni45NTUzMzI1NzVaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY2OlxcdFxcdGtyZWZfaW5pdChcXHUwMDI2dmxhbi1cXHUwMDNlcmVmY291bnQpO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZ2bGFuLVxcdTAwM2VhcF9pc29sYXRpb24sIDApO1xcbiA1Njk6XFx0XFxuIDU3MDpcXHRcXHRrcmVmX2dldChcXHUwMDI2dmxhbi1cXHUwMDNlcmVmY291bnQpO1xcbiA1NzE6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZ2bGFuLVxcdTAwM2VsaXN0LCBcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1lc2hpZl92bGFuX2xpc3QpO1xcbiA1NzI6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtZXNoaWZfdmxhbl9saXN0X2xvY2spO1xcbiA1NzM6XFx0XFxuIDU3NDpcXHRcXHQvKiBhZGQgYSBuZXcgVFQgbG9jYWwgZW50cnkuIFRoaXMgb25lIHdpbGwgYmUgbWFya2VkIHdpdGggdGhlIE5PUFVSR0VcXG4gNTc1OlxcdFxcdCAqIGZsYWdcXG4gNTc2OlxcdFxcdCAqL1xcbiA1Nzc6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2FkZChiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZSxcXG4gNTc4OlxcdFxcdFxcdFxcdCAgICBiYXRfcHJpdi1cXHUwMDNlbWVzaF9pZmFjZS1cXHUwMDNlZGV2X2FkZHIsIHZpZCxcXG4gNTc5OlxcdFxcdFxcdFxcdCAgICBCQVRBRFZfTlVMTF9JRklOREVYLCBCQVRBRFZfTk9fTUFSSyk7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdC8qIGRvbid0IHJldHVybiByZWZlcmVuY2UgdG8gbmV3IG1lc2hpZl92bGFuICovXFxuIDU4MjpcXHRcXHRiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pO1xcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRyZXR1cm4gMDtcXG4gNTg1OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTg6NTYuOTU1NDUyMzU1WiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MDcyNDE4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJJ20gc2VlaW5nIHNvbWV0aGluZyBoZXJlIHdpdGggYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJdCBzZWVtcyB0byBiZSB0YWtpbmcgYSByZWZlcmVuY2UsIHJpZ2h0PyBTbyBhZnRlciBgYmF0YWR2X21lc2hpZl9jcmVhdGVfdmxhbmAsIHRoZSByZWZlcmVuY2UgY291bnQgc2hvdWxkIGJlIDIsIG9uZSBmb3IgdGhlIGxpc3QgYW5kIG9uZSBmb3IgdGhlIFRUIGVudHJ5IGl0c2VsZi5cblxuTm93LCBpZiB0aGUgcmVmZXJlbmNlIGNvdW50ICppcyogMiwgdGhlbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaXMgZ2V0dGluZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSwgbWFraW5nIHRoZSBjb3VudCAzLiBUaGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGFjdHVhbGx5ICpkcm9wKiB0aGUgcmVmZXJlbmNlIG9mIHRoZSBUVCBlbnRyeT9cblxuWWVzISBJdCBkb2VzLiBXaGVuIGl0IHJlbW92ZXMgdGhlIFRUIGVudHJ5LCBpdCBmcmVlcyBpdCwgYW5kIHRoZSBgdmxhbmAgcG9pbnRlciBpcyByZWxlYXNlZC4gU28sIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCBkZWNyZW1lbnRzIHRoZSBjb3VudCBieSAxLCBicmluZ2luZyBpdCB0byAyLiBUaGVuIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAgY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgLCBhbm90aGVyIGRlY3JlbWVudCwgd2hpY2ggbWVhbnMgdGhlIHJlZiBjb3VudCBpcyAxLiBOZXh0IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIFRoaXMgZHJvcHMgdGhlIGZpbmFsIHJlZmVyZW5jZSBhbmQgbWVhbnMgdGhhdCB0aGUgdmxhbiBvYmplY3QgaXMgZnJlZWQhXG5cblRoaXMgbWVhbnMgaXQgaXMgYWJzb2x1dGVseSBjcnVjaWFsIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYC4gSWYgaXQgKmRvZXNuJ3QqLCB0aGUgcmVmZXJlbmNlIGNvdW50IHJlbWFpbnMgYXQgMSwgYW5kIHRoZSBvYmplY3QgaXMgbmV2ZXIgZnJlZWQhXG5cbkJ1dCB3YWl0LCB3aHkgd2FzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHZsYW4pYCByZW1vdmVkIGluIHRoZSBwYXRjaD8gTGV0J3MgY2hlY2sgdGhlIHBhdGNoIGFnYWluOlxuYGBgZGlmZlxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuQEAgLTY5MSw5ICs2OTEsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxuIFxuIFx0YmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW4oYmF0X3ByaXYsIHZsYW4pO1xuIFxuLVx0LyogZmluYWxseSBmcmVlIHRoZSB2bGFuIG9iamVjdCAqL1xuLVx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbmBgYFxuXG5JdCBsb29rcyBsaWtlIHRoZSBwYXRjaCByZW1vdmVkIGl0LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvLiBIb3cgY291bGQgdGhhdCBoYXBwZW4/XG5cbldoYXQgaWYgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIERPRVNOJ1QgZHJvcCB0aGUgVFQgZW50cnkncyByZWZlcmVuY2U/IExvb2tpbmcgYXQgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLCBpZiB0aGUgZW50cnkgaXNuJ3QgTkVXLCBpdCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nYC4gVGhpcyBtZWFucyBpdCBET0VTTidUIHJlbW92ZSB0aGUgZW50cnksIGFuZCBjcnVjaWFsbHksIERPRVNOJ1QgZHJvcCB0aGUgcmVmZXJlbmNlISBJbiB0aGF0IHNjZW5hcmlvOiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIDEgcmVmICh0aGUgbGlzdCByZWZlcmVuY2UpIGFuZCB0aGVuIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBkcm9wcyAxIHJlZmVyZW5jZSAodGhlIGdldCByZWZlcmVuY2UpLiBUaGF0IGxlYXZlcyB0aGUgcmVmIGNvdW50IGF0IDEgKHRoZSBUVCBlbnRyeSdzIHJlZikuIFRoZSBUVCB3b3JrZXIgbGF0ZXIgcHVyZ2VzIHRoZSBlbnRyeSwgKnRoZW4qIGRyb3BzIHRoYXQgcmVmZXJlbmNlLiBUaGlzIGlzIGFjdHVhbGx5IHNhZmUhIFNvIG5vIGRvdWJsZSBmcmVlLlxuXG5Pa2F5LCB3YWl0IG9uZSBzZWNvbmQuIFdoYXQgaWYgYGJhdGFkdl90dF9sb2NhbF9hZGRgIERPRVNOJ1QgZ2V0IGEgcmVmZXJlbmNlPyBMZXQncyByZWNoZWNrIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2MDYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTowNi40NjI2OTg0ODRaIiwiU2VxIjo3NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYzOlxcdFxcdC8qIGluY3JlYXNlIHRoZSByZWZjb3VudGVyIG9mIHRoZSByZWxhdGVkIHZsYW4gKi9cXG4gNjY0OlxcdFxcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQpO1xcbiA2NjU6XFx0XFx0aWYgKCF2bGFuKSB7XFxuIDY2NjpcXHRcXHRcXHRuZXRfcmF0ZWxpbWl0ZWRfZnVuY3Rpb24oYmF0YWR2X2luZm8sIG1lc2hfaWZhY2UsXFxuIDY2NzpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcImFkZGluZyBUVCBsb2NhbCBlbnRyeSAlcE0gdG8gbm9uLWV4aXN0ZW50IFZMQU4gJWRcXFxcblxcXCIsXFxuIDY2ODpcXHRcXHRcXHRcXHRcXHRcXHQgYWRkciwgYmF0YWR2X3ByaW50X3ZpZCh2aWQpKTtcXG4gNjY5OlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShiYXRhZHZfdGxfY2FjaGUsIHR0X2xvY2FsKTtcXG4gNjcwOlxcdFxcdFxcdHR0X2xvY2FsID0gTlVMTDtcXG4gNjcxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2NzI6XFx0XFx0fVxcbiA2NzM6XFx0XFxuIDY3NDpcXHRcXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxcbiA2NzU6XFx0XFx0XFx0ICAgXFxcIkNyZWF0aW5nIG5ldyBsb2NhbCB0dCBlbnRyeTogJXBNICh2aWQ6ICVkLCB0dHZuOiAlZClcXFxcblxcXCIsXFxuIDY3NjpcXHRcXHRcXHQgICBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCksXFxuIDY3NzpcXHRcXHRcXHQgICAodTgpYXRvbWljX3JlYWQoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2V0dC52bikpO1xcbiA2Nzg6XFx0XFxuIDY3OTpcXHRcXHRldGhlcl9hZGRyX2NvcHkodHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5hZGRyLCBhZGRyKTtcXG4gNjgwOlxcdFxcdC8qIFRoZSBsb2NhbCBlbnRyeSBoYXMgdG8gYmUgbWFya2VkIGFzIE5FVyB0byBhdm9pZCB0byBzZW5kIGl0IGluXFxuIDY4MTpcXHRcXHQgKiBhIGZ1bGwgdGFibGUgcmVzcG9uc2UgZ29pbmcgb3V0IGJlZm9yZSB0aGUgbmV4dCB0dHZuIGluY3JlbWVudFxcbiA2ODI6XFx0XFx0ICogKGNvbnNpc3RlbmN5IGNoZWNrKVxcbiA2ODM6XFx0XFx0ICovXFxuIDY4NDpcXHRcXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ORVc7XFxuIDY4NTpcXHRcXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnZpZCA9IHZpZDtcXG4gNjg2OlxcdFxcdGlmIChiYXRhZHZfaXNfd2lmaV9oYXJkaWYoaW5faGFyZGlmKSlcXG4gNjg3OlxcdFxcdFxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9XSUZJO1xcbiA2ODg6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcXG4gNjg5OlxcdFxcdHR0X2xvY2FsLVxcdTAwM2VsYXN0X3NlZW4gPSBqaWZmaWVzO1xcbiA2OTA6XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5hZGRlZF9hdCA9IHR0X2xvY2FsLVxcdTAwM2VsYXN0X3NlZW47XFxuIDY5MTpcXHRcXHR0dF9sb2NhbC1cXHUwMDNldmxhbiA9IHZsYW47XFxuIDY5MjpcXHRcXG4gNjkzOlxcdFxcdC8qIHRoZSBiYXRtYW4gaW50ZXJmYWNlIG1hYyBhbmQgbXVsdGljYXN0IGFkZHJlc3NlcyBzaG91bGQgbmV2ZXIgYmVcXG4gNjk0OlxcdFxcdCAqIHB1cmdlZFxcbiA2OTU6XFx0XFx0ICovXFxuIDY5NjpcXHRcXHRpZiAoYmF0YWR2X2NvbXBhcmVfZXRoKGFkZHIsIG1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyKSB8fFxcbiA2OTc6XFx0XFx0ICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxcbiA2OTg6XFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0U7XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdGtyZWZfZ2V0KFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcXG4gNzAxOlxcdFxcdGhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LFxcbiA3MDI6XFx0XFx0XFx0XFx0XFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LCBcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTk6MDYuNDYyOTE0MTI0WiIsIlNlcSI6NzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjI0OTI1OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmNvdW50IEFuYWx5c2lzIG9mIFZMQU4gT2JqZWN0IE1hbmFnZW1lbnQgaW4gYmF0bWFuLWFkdioqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duLiBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgcmVmZXJlbmNlIGNvdW50cyBvbiB0aGVzZSBgYmF0YWR2X21lc2hpZl92bGFuYCBvYmplY3RzLCBhbmQgdGhpcyBwYXRjaCBoYXMgZ290IG1lIHdvcnJpZWQuIEl0IGFsbCBzdGFydHMgd2l0aCBob3cgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgYW5kIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpbnRlcmFjdCB3aXRoIHRoZXNlIFZMQU4gb2JqZWN0cy5cblxuSW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgICptaWdodCogY2FsbCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIGdldHRpbmcgYSByZWZlcmVuY2UsICpvciogY3JlYXRlIGEgVkxBTiB3aXRoIGBiYXRhZHZfbWVzaGlmX2NyZWF0ZV92bGFuYCB3aGljaCBoYXMgc29tZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudCBvcGVyYXRpb25zLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMgYGJhdGFkdl90dF9sb2NhbF9hZGRgIGlzIGFsc28gY2FsbGVkIHdoaWNoIGluY3JlYXNlcyB0aGUgcmVmY291bnQuIEkndmUgdHJhY2VkIGl0LCBhbmQgaXQgZGVmaW5pdGVseSBkb2VzLlxuXG5JIGNhbiBzZWUgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaGVyZSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkgYnkgdGhlIGNhbGxlci5cblxuSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6XG4qICAgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGNhbGxzIGBiYXRhZHZfbWVzaGlmX2Rlc3Ryb3lfdmxhbmAuIE5vdywgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgd2hpY2ggaXMgc3VwcG9zZWQgdG8gZHJvcCBhIHJlZmVyZW5jZSBoZWxkIGJ5IHRoZSBUVCBlbnRyeS4gSXQgYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuXG4qICAgVGhlbiBpdCBzZWVtcyBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgaGFkIGEgY2FsbCB0byBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAuIEJ1dCB0aGUgcGF0Y2ggKnJlbW92ZWQqIHRoaXMuXG5cbk15IGNvbmNlcm4gaXMgdGhpczogaWYgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyB0aGUgcmVmZXJlbmNlIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdvdCwgdGhlbiByZW1vdmluZyB0aGUgZXh0cmEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodmxhbilgIGNhbGwgaW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGlzIGZpbmUsIHJpZ2h0PyBTbyB0aGlzIHBhdGNoIGlzIG5vdCBhbiBpc3N1ZT9cblxuQnV0IGhvbGQgb24hIElmIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhbHNvIGluY3JlbWVudHMgcmVmY291bnQgYW5kIHRoaXMgaXMgbm90IHBhaXJlZCB3aXRoIGEgbWF0Y2hpbmcgZGVjcmVtZW50LCB3ZSBoYXZlIGEgbGVhay5cblxuTm93LCBJIHJlLWNoZWNrZWQgYGJhdGFkdl9tZXNoaWZfY3JlYXRlX3ZsYW5gLiBJdCBkZWZpbml0ZWx5IHN0YXJ0cyB0aGUgcmVmY291bnQgYXQgMSwgaW5jcmVtZW50cyBpdCB0byAyICh3aXRoIGBrcmVmX2dldGApLCBhZGRzIHRoZSBWTEFOIHRvIHRoZSBsaXN0LCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgKHdoaWNoICphbHNvKiBncmFicyBhIHJlZmVyZW5jZSksIGFuZCB0aGVuIGRyb3BzIGl0IGJhY2sgdG8gMiwgYmVmb3JlIHJldHVybmluZy4gU28gdGhlIGxpc3QgYW5kIFRUIGVudHJ5IGFyZSBlYWNoIGhvbGRpbmcgYSByZWZlcmVuY2UuXG5cblRoZW4gSSBjaGVja2VkIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcmVsZWFzZWAgYW5kIGl0IHJlbW92ZXMgZnJvbSB0aGUgbGlzdC4gU28gdGhlIGxpc3QgZG9lcyAqbm90KiBob2xkIGEgcmVmZXJlbmNlLiBUaGlzIG1lYW5zIHRoYXQgaWYgaXQncyBmcmVlZCwgd2UgYXJlIGZpbmUuXG5cbkFuZCB0aGUgcGF0Y2ggY2F1c2VzIGFuIGlzc3VlIHdoZXJlIGl0IGlzIG9ubHkgZGVjcmVtZW50ZWQgb25jZSwgY2F1c2luZyBhbiBhY2N1bXVsYXRlZCBsZWFrLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBtb3N0IGxpa2VseSBjYXVzaW5nIGEgbWVtb3J5IGxlYWshIFJlbW92aW5nIHRoZSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgaXMgd3JvbmcsIHVubGVzcyBzb21lIG90aGVyIGNvZGUgbm93IGhhbmRsZXMgZHJvcHBpbmcgdGhhdCByZWZlcmVuY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyOTUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE5OjQyLjY4Nzg0MzQ0N1oiLCJTZXEiOjc4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwOTMxNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjE3PXN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9lbnRyeV9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIyOS0vKipcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIzMDogKiBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KCkgLSBkZWNyZW1lbnQgdGhlIHR0X2xvY2FsX2VudHJ5IHJlZmNvdW50ZXIgYW5kXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yMzEtICogIHBvc3NpYmx5IHJlbGVhc2UgaXRcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjM0PXN0YXRpYyB2b2lkXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyMzU6YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dChzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSlcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIzNi17XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTU4OT1ib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03MDYtXFx0XFx0LyogcmVtb3ZlIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBoYXNoICovXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo3MDc6XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03MDgtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTc3MC1cXHRkZXZfcHV0KGluX2Rldik7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo3NzE6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03NzItXFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTI0NT11MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5MS1cXHRcXHRcXHRcXHQgICAgICAgY29tbW9uLmhhc2hfZW50cnkpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTI5MjpcXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X3JlbW92ZWRfZW50cnkpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTI5My1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyOTQtb3V0Olxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTI5NTpcXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyOTYtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTEzNTk9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3RhYmxlX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTM4NS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEzODY6XFx0XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMzg3LVxcdFxcdH1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTU4OT1zdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xNzM4LVxcdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNzM5OlxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTc0MC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yMTIwPXN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfZGVsKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIxNzAtXFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsX2VudHJ5KTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIxNzE6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dChsb2NhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yMTcyLX1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjM2MD1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqYmF0YWR2X3RyYW5zdGFibGVfc2VhcmNoKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIzOTgtXFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsX2VudHJ5KTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIzOTk6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yNDAwLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zMzI5PWJvb2wgYmF0YWR2X2lzX215X2NsaWVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzM0NS1vdXQ6XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozMzQ2OlxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzM0Ny1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNjI2PXN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9wZW5kaW5nX2NsaWVudHMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzY1OS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM2NjA6XFx0XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNjYxLVxcdFxcdH1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzcyMD1ib29sIGJhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1OCAqc3JjLCB1OCAqZHN0LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ3LWxvY2FsX2VudHJ5X3B1dDpcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM3NDg6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzQ5LXZsYW5fcHV0Olxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zODc1PWJvb2wgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM4ODUtXFx0cmV0ID0gdHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM4ODY6XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zODg3LW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTk6NDIuOTU4Nzc5ODAxWiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDE5ODc4MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWA6XG5cbioqQW5hbHl6aW5nIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZWAqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgYGJhdGFkdl90dF9sb2NhbF9lbnRyeV9yZWxlYXNlYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGJhdGFkdiAoQi5BLlQuTS5BLk4uIGFkdmFuY2VkKSBmcmFtZXdvcmsuIEl0J3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIGxvY2FsIHRyYW5zbGF0aW9uIHRhYmxlIChUVCksIGFuZCB0aGUgYHJlbGVhc2VgIHN1ZmZpeCBzdWdnZXN0cyBpdCBkZWFscyB3aXRoIHRoZSBmcmVlaW5nIG9yIGRlYWxsb2NhdGlvbiBvZiBhbiBlbnRyeS5cblxuU28sIGxldCBtZSBtZW50YWxseSByZWNvbnN0cnVjdCB0aGUgY29udGV4dC4gSSdtIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBsb2NhbCBlbnRyeSBpbiB0aGUgVFQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gUGVyaGFwcyBhIHJvdXRlIGV4cGlyZXMsIGEgcGVlciBkaXNjb25uZWN0cywgb3Igc29tZSBvdGhlciBldmVudCBuZWNlc3NpdGF0ZXMgdGhlIHJlbW92YWwgb2YgdGhpcyBsb2NhbGx5LWhlbGQgdHJhbnNsYXRpb24gaW5mb3JtYXRpb24uXG5cbkknZCBiZSBjdXJpb3VzIHRvIGtub3cgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGZyZWVkIGhlcmUuIElzIGl0IGp1c3QgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZW50cnkgaXRzZWxmPyBPciBkb2VzIGl0IGFsc28gaW52b2x2ZSByZWxlYXNpbmcgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMsIHBlcmhhcHMgcmVmZXJlbmNlcyB0byBuZWlnaGJvciBpbmZvcm1hdGlvbiwgcXVldWVkIHBhY2tldHMsIG9yIHRpbWVycyByZWxhdGVkIHRvIHRoaXMgZW50cnk/IFRoZSBlZmZpY2llbmN5IGFuZCBjb3JyZWN0bmVzcyBvZiBgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2VgIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQncyBhdCB0aGUgaGVhcnQgb2YgaG93IHRoZSBCQVRNQU4gcHJvdG9jb2wgbWFuYWdlcyBpdHMgZm9yd2FyZGluZyB0YWJsZXMgYW5kLCB0aGVyZWZvcmUsIGlzIGVzc2VudGlhbCB0byB0aGUgcmVsaWFibGUgZGVsaXZlcnkgb2YgZGF0YSBpbiB0aGUgbmV0d29yay4gQW55IHN1YnRsZSBtZW1vcnkgbGVha3Mgb3IgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgZnVuY3Rpb24gY291bGQgaGF2ZSBkaXNhc3Ryb3VzIGNvbnNlcXVlbmNlcyBmb3IgdGhlIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIGVudGlyZSBtZXNoIG5ldHdvcmsuIEkgbmVlZCB0byBrZWVwIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBvcGVyYXRpb24gaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1OTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTo0Ni40NjA3NzE1MjhaIiwiU2VxIjo4MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE3OlxcdHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9lbnRyeV9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuIDIxODpcXHR7XFxuIDIxOTpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0dHRfbG9jYWxfZW50cnkgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LFxcbiAyMjI6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29tbW9uLnJlZmNvdW50KTtcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0YmF0YWR2X21lc2hpZl92bGFuX3B1dCh0dF9sb2NhbF9lbnRyeS1cXHUwMDNldmxhbik7XFxuIDIyNTpcXHRcXG4gMjI2OlxcdFxcdGtmcmVlX3JjdSh0dF9sb2NhbF9lbnRyeSwgY29tbW9uLnJjdSk7XFxuIDIyNzpcXHR9XFxuIDIyODpcXHRcXG4gMjI5OlxcdC8qKlxcbiAyMzA6XFx0ICogYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCgpIC0gZGVjcmVtZW50IHRoZSB0dF9sb2NhbF9lbnRyeSByZWZjb3VudGVyIGFuZFxcbiAyMzE6XFx0ICogIHBvc3NpYmx5IHJlbGVhc2UgaXRcXG4gMjMyOlxcdCAqIEB0dF9sb2NhbF9lbnRyeTogdHRfbG9jYWxfZW50cnkgdG8gYmUgZnJlZSdkXFxuIDIzMzpcXHQgKi9cXG4gMjM0OlxcdHN0YXRpYyB2b2lkXFxuIDIzNTpcXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5KVxcbiAyMzY6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTo0Ni40NjA5OTE3OThaIiwiU2VxIjo4MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5NDE1NjE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRUIEVudHJ5IExpZmVjeWNsZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3JlbGVhc2VgIGZ1bmN0aW9uLCBhbmQgeWVzLCBpdCAqZGVmaW5pdGVseSogY2FsbHMgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXQodHRfbG9jYWxfZW50cnktXHUwMDNldmxhbilgISBUaGF0J3MgZ29vZC4gV2hpY2ggbWVhbnMsIHdoZW4gdGhhdCBUVCBlbnRyeSBnZXRzIGZyZWVkLCB0aGUgVkxBTiByZWZlcmVuY2UgaXMgZHJvcHBlZCBhcyBleHBlY3RlZC4gQWxyaWdodCwgdGhhdCBzZWVtcyBzb3VuZC5cblxuQnV0IGhvbGQgb24uLi4gaWYgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgIGNhbGxzIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0YCwgdGhhdCBpbiB0dXJuIGRlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBoYXNoIGVudHJ5LCByaWdodD8gWWVwLCB0aGF0IGFsc28gYWxpZ25zIHdpdGggdGhlIHR5cGljYWwgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGNvbnNpc3RlbnQuXG5cbk5vdywgbGV0J3MgZ28gYmFjayBhbmQgY2FyZWZ1bGx5IGFuYWx5emUgYGJhdGFkdl90dF9sb2NhbF9hZGRgLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY29kZSBub3cuLi4gaXQgZG9lczpcblxuYGBgY1xuXHRrcmVmX2luaXQoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcblx0Li4uXG5cdGtyZWZfZ2V0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG5cdGhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoLi4uKTtcbmBgYFxuXG5BaGEhIFNvLCBpdCBpbml0aWFsaXplcyB0aGUgcmVmZXJlbmNlIGNvdW50IHdpdGggYGtyZWZfaW5pdGAsIHdoaWNoIG1lYW5zIHRoZSBpbml0aWFsIHJlZmNvdW50IGlzIDEuIFRoZW4gaXQgY2FsbHMgYGtyZWZfZ2V0YCwgd2hpY2ggKmluY3JlbWVudHMqIHRoZSByZWZjb3VudCEgVGhhdCBtZWFucyB0aGUgVFQgZW50cnkgYWN0dWFsbHkgKnN0YXJ0cyogd2l0aCBhIHJlZmNvdW50IG9mIDIhIE9uZSBmb3IgdGhlIGNhbGxlciwgYW5kIG9uZSBmb3IgdGhlIGhhc2ggdGFibGUuIE9rLCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5TbyB0aGVuIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCByZXR1cm5zLi4uIGFuZCBpdCAqZG9lc24ndCogY2FsbCBga3JlZl9wdXRgIHRvIGRyb3AgdGhlIGNhbGxlcidzIHJlZmVyZW5jZS4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGlzIGV4cGxpY2l0bHkgZHJvcHBlZCBlbHNld2hlcmUsIGFuZCBJIHNob3VsZCBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgaXMgYWNjdXJhdGUuIExldCdzIHRyYWNlIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBhZ2FpbiBqdXN0IHRvIGJlIDEwMCUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzMTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTo1MS41NTUxNTA4ODlaIiwiU2VxIjo4MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcdGtyZWZfZ2V0KFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcXG4gNzAxOlxcdFxcdGhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LFxcbiA3MDI6XFx0XFx0XFx0XFx0XFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LCBcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbixcXG4gNzAzOlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24uaGFzaF9lbnRyeSk7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGlmICh1bmxpa2VseShoYXNoX2FkZGVkICE9IDApKSB7XFxuIDcwNjpcXHRcXHRcXHQvKiByZW1vdmUgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIGhhc2ggKi9cXG4gNzA3OlxcdFxcdFxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWwpO1xcbiA3MDg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDcwOTpcXHRcXHR9XFxuIDcxMDpcXHRcXG4gNzExOlxcdGFkZF9ldmVudDpcXG4gNzEyOlxcdFxcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XFxuIDcxMzpcXHRcXG4gNzE0OlxcdGNoZWNrX3JvYW1pbmc6XFxuIDcxNTpcXHRcXHQvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgcm9hbWluZywgYnV0IGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nXFxuIDcxNjpcXHRcXHQgKiBwcm9jZXNzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZFxcbiA3MTc6XFx0XFx0ICovXFxuIDcxODpcXHRcXHRpZiAodHRfZ2xvYmFsIFxcdTAwMjZcXHUwMDI2ICEodHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKSB7XFxuIDcxOTpcXHRcXHRcXHQvKiBUaGVzZSBub2RlIGFyZSBwcm9iYWJseSBnb2luZyB0byB1cGRhdGUgdGhlaXIgdHQgdGFibGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDQ6MTk6NTEuNTU1MzcxMDk5WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzU4ODM1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIHRoZSBiYXRhZHYgQ29kZSoqXG5cbkhvbGQgb24gYSBzZWNvbmQhIEkgdGhvdWdodCBgYmF0YWR2X3R0X2xvY2FsX2FkZGAgd2FzIHN1cHBvc2VkIHRvIGhhbmRsZSByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSBkcm9wcGluZyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIGFmdGVyIGFkZGluZyB0aGUgZW50cnkuIEJ1dCB0aGUgd29yZGluZyBoZXJlIGlzIHVuY2xlYXIuIEl0IHNlZW1zIEkgYW0gbWlzdGFrZW4uXG5cbklmIGl0ICpkb2Vzbid0KiBkcm9wIHRoZSBjYWxsZXIncyByZWZlcmVuY2UsIHRoZW4gKndobyogaXMgcmVzcG9uc2libGUgZm9yIGRlY3JlbWVudGluZyB0aGF0IHJlZmVyZW5jZSBjb3VudD8gVGhpcyBpcyBhIGNyaXRpY2FsIHF1ZXN0aW9uLiBJZiBub2JvZHkgaXMgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSwgd2UndmUgZ290IGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9uIG91ciBoYW5kcywgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgSSdtIHRyeWluZyB0byBhdm9pZC5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgY29kZS4gTGV0J3MgdHJhY2UgaXQgdGhyb3VnaCBgYmF0YWR2X3R0X2xvY2FsX2FkZGAsIHBheWluZyB2ZXJ5IGNsb3NlIGF0dGVudGlvbiB0byBpdHMgZmluYWwgc2VjdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRoYXQgbWlnaHQgcmVsZWFzZSB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIG9yIGFueSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucy4gTXkgc3VzcGljaW9ucyBhcmUgZ3Jvd2luZywgYW5kIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGNvZGUncyBiZWhhdmlvciBhbGlnbnMgd2l0aCBteSBhc3N1bXB0aW9ucyBhYm91dCBwcm9wZXIgcmVmZXJlbmNlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMzQ5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoxOTo1NC45MzEyNTc4OThaIiwiU2VxIjo4NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcbiA3NjE6XFx0XFx0LyogaWYgYW55IFxcXCJkeW5hbWljXFxcIiBmbGFnIGhhcyBiZWVuIG1vZGlmaWVkLCByZXNlbmQgYW4gQUREIGV2ZW50IGZvciB0aGlzXFxuIDc2MjpcXHRcXHQgKiBlbnRyeSBzbyB0aGF0IGFsbCB0aGUgbm9kZXMgY2FuIGdldCB0aGUgbmV3IGZsYWdzXFxuIDc2MzpcXHRcXHQgKi9cXG4gNzY0OlxcdFxcdGlmIChyZW1vdGVfZmxhZ3MgXiAodHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9SRU1PVEVfTUFTSykpXFxuIDc2NTpcXHRcXHRcXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpO1xcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRyZXQgPSB0cnVlO1xcbiA3Njg6XFx0b3V0OlxcbiA3Njk6XFx0XFx0YmF0YWR2X2hhcmRpZl9wdXQoaW5faGFyZGlmKTtcXG4gNzcwOlxcdFxcdGRldl9wdXQoaW5fZGV2KTtcXG4gNzcxOlxcdFxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWwpO1xcbiA3NzI6XFx0XFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsKTtcXG4gNzczOlxcdFxcdHJldHVybiByZXQ7XFxuIDc3NDpcXHR9XFxuIDc3NTpcXHRcXG4gNzc2OlxcdC8qKlxcbiA3Nzc6XFx0ICogYmF0YWR2X3R0X3ByZXBhcmVfdHZsdl9nbG9iYWxfZGF0YSgpIC0gcHJlcGFyZSB0aGUgVFZMViBUVCBoZWFkZXIgdG8gc2VuZFxcbiA3Nzg6XFx0ICogIHdpdGhpbiBhIFRUIFJlc3BvbnNlIGRpcmVjdGVkIHRvIGFub3RoZXIgbm9kZVxcbiA3Nzk6XFx0ICogQG9yaWdfbm9kZTogb3JpZ2luYXRvciBmb3Igd2hpY2ggdGhlIFRUIGRhdGEgaGFzIHRvIGJlIHByZXBhcmVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjE5OjU0LjkzMTQ3MTE4OFoiLCJTZXEiOjg1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMxNDIzOTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZjb3VudGluZyBNeXN0ZXJpZXMgb2YgVkxBTnMgaW4gYmF0bWFuLWFkdioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGJhdG1hbi1hZHYgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIG1lc3Npbmcgd2l0aCBWTEFOIHJlZmNvdW50aW5nLiBJdCBsb29rcyBsaWtlIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBidW1wcyB0aGUgcmVmY291bnQgb24gYSBUVCBlbnRyeSAoaGFzaCByZWZlcmVuY2UpLiBUaGVuLCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgZHJvcHMgdGhhdCBoYXNoIHJlZmVyZW5jZS4gQWxzbywgd2hlbiB0aGUgVFQgZW50cnkgaXMgZnJlZWQsIGl0IGNhbGxzIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBvbiB0aGUgVkxBTi4gU28gZmFyLCBzbyBnb29kLlxuXG5CdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBjYWxscyBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gLCBhbmQgaXQgYXBwZWFycyB0byAqYWxzbyogZHJvcCBhIFZMQU4gcmVmZXJlbmNlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhpcyB3b3VsZCBjYXVzZSBhIGRvdWJsZSBmcmVlLCBzaW5jZSBgYmF0YWR2X21lc2hpZl92bGFuX2Rlc3Ryb3lgIGNvdWxkIGJlIGZyZWVpbmcgc29tZXRoaW5nIHRoYXQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFsc28gaGFzIGEgcmVmZXJlbmNlIHRvLiBIb3dldmVyLCBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYWxzbyBjYWxscyBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgd2hpY2ggKmFsc28qIHNob3VsZCBkcm9wIGEgcmVmZXJlbmNlISBCdXQgdGhlIHBhdGNoIHJlbW92ZWQgaXQhXG5cbkl0IHNlZW1zIGxpa2UgdGhlcmUncyBzb21lIGp1Z2dsaW5nIGdvaW5nIG9uIGhlcmUuIGBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0YCBnZXRzIGEgcmVmZXJlbmNlIChsaXN0IHJlZmVyZW5jZSkuIFRoZW4sIGBiYXRhZHZfdHRfbG9jYWxfYWRkYCBnZXRzIGFub3RoZXIgKFRUIHJlZmVyZW5jZSkuIFRoZW4gYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGdldHMgb25lIChnZXQgcmVmZXJlbmNlKS4gYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBkcm9wcyB0d28gcmVmcyAoVFQgYW5kIGxpc3QpLiBBbmQgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGRyb3BzIHRoZSBnZXQgcmVmZXJlbmNlLiBJdCBzaG91bGQgYmFsYW5jZSBvdXQsIHRoZW9yZXRpY2FsbHkuXG5cblRoZW4sIHRoZXJlJ3MgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAsIHdoaWNoIGlzIG1lYW50IHRvIHJldml2ZSBhIFZMQU4uIEkgc2VlIGl0IGdldHRpbmcgYSByZWZlcmVuY2Ugd2l0aCBgYmF0YWR2X21lc2hpZl92bGFuX2dldGAsIGFuZCB0aGVuIGl0IHVzZXMgYGJhdGFkdl90dF9sb2NhbF9hZGRgIHRvIGFkZCBhIG5ldyBUVCBlbnRyeSwgYnV0IEkgZG9uJ3Qgc2VlIGl0IGRyb3BwaW5nIHRoZSByZWZlcmVuY2Ugd2l0aCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAuIFdhaXQsIGlzICp0aGlzKiB0aGUgcHJvYmxlbT8gSXMgaXQgbGVha2luZyBhIHJlZmVyZW5jZSBvbiBwdXJwb3NlPyBUaGUgY29tbWVudCBzYXlzIHRoaXMgaXMgdG8gcmV2aXZlIHRoZSBvYmplY3QsIHNvIGl0IHNvdW5kcyBsaWtlIGl0cyBpbnRlbmRlZCB0by5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIHRoZSBwYXRjaCBtaWdodCBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoYXQuIE1heWJlIHRoZSBwcmV2aW91cyB2ZXJzaW9uIGhhZCBhIGJ1ZyB3aGVyZSB0aGVyZSB3YXMgYSBkb3VibGUgZnJlZS4gTGV0IG1lIHNlZSwgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBjYWxscyBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAuIEFoLCBtYXliZSBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAgaXNuJ3QgZHJvcHBpbmcgdGhlIFRUIGVudHJ5PyBJcyB0aGF0IHBvc3NpYmxlPyBOby5cblxuT2theSwgbGV0J3MgdGhpbmsuIFRoZSBwYXRjaCByZW1vdmVkIGEgYGJhdGFkdl9tZXNoaWZfdmxhbl9wdXRgIGNhbGwuIFNvLCBpdCB3YXMgZWl0aGVyIGEgZG91YmxlIGZyZWUgb3IgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4gSXMgYGJhdGFkdl9tZXNoaWZfZGVzdHJveV92bGFuYCBmcmVlaW5nIGB2bGFuYD8gSXQgY2FuIGlmIHRoZSByZWZjb3VudCByZWFjaGVzIHplcm8uIFNvLCBpZiBgYmF0YWR2X21lc2hpZl9kZXN0cm95X3ZsYW5gIGRyb3BzIHRoZSBsYXN0IHJlZmVyZW5jZSwgYW5kIGZyZWVzIHRoZSBgdmxhbmAgb2JqZWN0LCB0aGVuIHRoYXQgcmVtb3ZlZCBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbCBpcyBhY2Nlc3NpbmcgYSBmcmVlZCBvYmplY3QsIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZS5cblxuU28gdGhlIG9yaWdpbmFsIHJlZmNvdW50aW5nIG11c3QgaGF2ZSBiZWVuIHdyb25nLiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgd2FzIGdldHRpbmcgYSByZWZlcmVuY2UgKDEpIGFuZCB0aGVuIGNhbGxpbmcgYGJhdGFkdl9tZXNoaWZfdmxhbl9kZXN0cm95YCwgd2hpY2ggd291bGQgYmUgZHJvcHBpbmcgMiByZWZlcmVuY2VzIGZyb20gdGhlIFRUIGVudHJ5IGFuZCB0aGUgbGlzdCAoc28gYSB0b3RhbCBvZiAyKS4gVGhlbiwgdGhlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCB3b3VsZCBjYWxsIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCwgd2hpY2ggd291bGQgZHJvcCBhIHJlZmVyZW5jZS4gVGhhdCBtZWFucyBhIHVzZS1hZnRlci1mcmVlLiBTbyB0aGUgZml4IGlzIHRoZSBwYXRjaC5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUgYXJlIG90aGVyIGNhc2VzOiBXaGF0IGlmIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBpcyAqbGVha2luZyogYSByZWZlcmVuY2U/IFdlbGwsIGlmIGBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWRgIGlzIGxlYWtpbmcsIHRoYXQgd291bGQgbWFrZSBzZW5zZS4gSXQgbWVhbnMgdGhlIG9iamVjdCBuZXZlciBnZXRzIGZyZWVkLiBCdXQgYGJhdGFkdl9tZXNoaWZfdmxhbl9yZWxlYXNlYCBleGlzdHMgdG8gZnJlZSB0aGUgb2JqZWN0LiBPa2F5LCBJJ20gcHJldHR5IHN1cmUgSSB1bmRlcnN0YW5kLiBgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkYCBsZWFrcyBhIHJlZmVyZW5jZSBiZWNhdXNlIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCAqc2hvdWxkKiBvbmx5IGJlIGRyb3BwaW5nIHRoZSBnZXQgcmVmZXJlbmNlLiBBbmQgd2l0aCB0aGUgcGF0Y2gsIHRoYXQgaXMgd2hhdCBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMDMxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjIwOjQzLjI0NTcxMzIwOFoiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzYwNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCQVRNQU5fQURWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9iYXRtYW4tYWR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9LY29uZmlnLTktXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzoxMDpjb25maWcgQkFUTUFOX0FEVlxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIkIuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0xOS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjIwOmNvbmZpZyBCQVRNQU5fQURWX0JBVE1BTl9WXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJCLkEuVC5NLkEuTi4gViBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzMtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzozNDpjb25maWcgQkFUTUFOX0FEVl9CTEFcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkJyaWRnZSBMb29wIEF2b2lkYW5jZVxcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNDYtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo0Nzpjb25maWcgQkFUTUFOX0FEVl9EQVRcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRpc3RyaWJ1dGVkIEFSUCBUYWJsZVxcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTYtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo1Nzpjb25maWcgQkFUTUFOX0FEVl9NQ0FTVFxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTgtXFx0Ym9vbCBcXFwiTXVsdGljYXN0IG9wdGltaXNhdGlvblxcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjUtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo2Njpjb25maWcgQkFUTUFOX0FEVl9ERUJVR1xcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjctXFx0Ym9vbCBcXFwiQi5BLlQuTS5BLk4uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNzQtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo3NTpjb25maWcgQkFUTUFOX0FEVl9UUkFDSU5HXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03Ni1cXHRib29sIFxcXCJCLkEuVC5NLkEuTi4gdHJhY2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNDoyMDo0My40NTk0ODIyOTdaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxMDU1NjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBhbmQgRnV6emluZyBhIEJhdG1hbi1hZHYgVkxBTiBIYW5kbGluZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBiYXRtYW4tYWR2YCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHJlbW92ZXMgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dCh2bGFuKWAgY2FsbCBmcm9tIHRoZSBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgZnVuY3Rpb24uIFRoaXMgaXMgYSByZWZjb3VudGluZyBjaGFuZ2UsIHNvIGl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UgbmVlZCB0byB0aG9yb3VnaGx5IHRlc3QgdGhpcy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGZ1enogdGhpcy4gVG8gZnV6eiBlZmZlY3RpdmVseSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEluIHRoaXMgY2FzZSwgYGJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRgIGFuZCBpdHMgY291bnRlcnBhcnQgYGJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZGAgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMuIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgdGhlcmUsIGNhcmVmdWxseSBjcmFmdGluZyBpbnB1dHMgdGhhdCBleGVyY2lzZSB0aGVzZSBmdW5jdGlvbnMgd2l0aCBhIHZhcmlldHkgb2YgVkxBTiBjb25maWd1cmF0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIHJlZmNvdW50aW5nIGNoYW5nZS4gSeKAmWxsIG1ha2Ugc3VyZSB0aGUgYEJBVE1BTl9BRFZgIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZCBmb3IgbXkgdGVzdHMsIG9mIGNvdXJzZS5cblxuRmluYWxseSwgSSdsbCBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB0byB0cmFjayB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA5ODcsIk91dHB1dFRva2VucyI6MTM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA0OjIwOjQ4LjE3MDA0MTg3NVoiLCJTZXEiOjg4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzg1MDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhdGFkdl9pbnRlcmZhY2Vfa2lsbF92aWRcIixcbiAgICBcImJhdGFkdl9pbnRlcmZhY2VfYWRkX3ZpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWZjb3VudGluZyBsb2dpYyBpbiBgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZGAgYnkgcmVtb3ZpbmcgYSBgYmF0YWR2X21lc2hpZl92bGFuX3B1dGAgY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyB0aGUgbGlmZWN5Y2xlIG9mIFZMQU4gb2JqZWN0cyBpbiB0aGUgYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQVRNQU5fQURWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZFwiLFxuICAgIFwiYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlZmNvdW50aW5nIGxvZ2ljIGluIGBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkYCBieSByZW1vdmluZyBhIGBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0YCBjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBsaWZlY3ljbGUgb2YgVkxBTiBvYmplY3RzIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowc54m8[1] Phase: Succeeded StartedAt: 2026-06-27 04:21:11 +0000 UTC FinishedAt: 2026-06-27 04:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-27 04:21:11 +0000 UTC FinishedAt: 2026-06-27 04:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2] Phase: Running StartedAt: 2026-06-27 04:21:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-06-27 04:21:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-27 04:21:11 +0000 UTC FinishedAt: 2026-06-27 04:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-27 04:21:11 +0000 UTC FinishedAt: 2026-06-27 04:21:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowc54m8/series-workflowc54m8-convert-artifact-2381600914/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-27 04:21:21 +0000 UTC FinishedAt: 2026-06-27 04:48:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-27 04:21:21 +0000 UTC FinishedAt: 2026-06-27 04:48:12 +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:*01541ddf-90b7-45c8-8e64-48fb6eaffebc,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-workflowc54m8/series-workflowc54m8-convert-artifact-2381600914/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": "76f3aafc-b13e-4fcd-8080-49be569290c3", "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-workflowc54m8/series-workflowc54m8-build-action-504289808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-27 04:21:21 +0000 UTC FinishedAt: 2026-06-27 04:46:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*01541ddf-90b7-45c8-8e64-48fb6eaffebc,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-workflowc54m8/series-workflowc54m8-convert-artifact-2381600914/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": "76f3aafc-b13e-4fcd-8080-49be569290c3", "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-workflowc54m8/series-workflowc54m8-build-action-504289808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-27 04:48:12 +0000 UTC FinishedAt: 2026-06-27 04:48:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-27 04:48:12 +0000 UTC FinishedAt: 2026-06-27 04:48:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-27 04:48:12 +0000 UTC FinishedAt: 2026-06-27 04:48:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-27 04:48:12 +0000 UTC FinishedAt: 2026-06-27 04:48:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowc54m8/series-workflowc54m8-convert-artifact-175069613/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-27 04:48:35 +0000 UTC FinishedAt: 2026-06-27 04:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-27 04:48:35 +0000 UTC FinishedAt: 2026-06-27 04:50:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76f3aafc-b13e-4fcd-8080-49be569290c3,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-workflowc54m8/series-workflowc54m8-build-action-504289808/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-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-27 04:50:48 +0000 UTC FinishedAt: 2026-06-27 04:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-27 04:50:48 +0000 UTC FinishedAt: 2026-06-27 04:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-27 04:50:48 +0000 UTC FinishedAt: 2026-06-27 05:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-27 04:50:48 +0000 UTC FinishedAt: 2026-06-27 05:21:25 +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:*01541ddf-90b7-45c8-8e64-48fb6eaffebc,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-workflowc54m8/series-workflowc54m8-convert-artifact-175069613/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": "4eb5b6ce-5997-4bec-a77d-f71601e6f604", "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-workflowc54m8/series-workflowc54m8-build-action-4222852617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-27 04:50:48 +0000 UTC FinishedAt: 2026-06-27 05:21:15 +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:*01541ddf-90b7-45c8-8e64-48fb6eaffebc,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-workflowc54m8/series-workflowc54m8-convert-artifact-175069613/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": "4eb5b6ce-5997-4bec-a77d-f71601e6f604", "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-workflowc54m8/series-workflowc54m8-build-action-4222852617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-27 05:21:25 +0000 UTC FinishedAt: 2026-06-27 05:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-27 05:21:25 +0000 UTC FinishedAt: 2026-06-27 05:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-06-27 05:21:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc54m8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_interface_kill_vid","batadv_interface_add_vid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV"],"series_id":"814eacf4-cfb6-4ec2-b5ea-179f562e0d7a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Running StartedAt: 2026-06-27 05:21:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*4eb5b6ce-5997-4bec-a77d-f71601e6f604,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-workflowc54m8/series-workflowc54m8-build-action-4222852617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil