Name: series-workflowjv627 Phase: Succeeded StartedAt: 2026-09-07 14:11:23 +0000 UTC FinishedAt: 2026-09-07 18:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[0] Phase: Succeeded StartedAt: 2026-09-07 14:11:23 +0000 UTC FinishedAt: 2026-09-07 14:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 14:11:23 +0000 UTC FinishedAt: 2026-09-07 14:32:23 +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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "8bd095f3-71c4-4e5f-90e9-3072cb4f6563" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "udpv6_err", "ip6_sk_redirect", "ip6_redirect" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHB2Nl9lcnImIzM0OywKICAgICYjMzQ7aXA2X3NrX3JlZGlyZWN0JiMzNDssCiAgICAmIzM0O2lwNl9yZWRpcmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgSVB2NiBVRFAgSUNNUCByZWRpcmVjdCBwcm9jZXNzaW5nIGluIGB1ZHB2Nl9lcnIoKWAgYnkgdW5jb25kaXRpb25hbGx5IGludm9raW5nIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgIGluc3RlYWQgb2YgYnJhbmNoaW5nIG9uIGB0dW5uZWxgIHRvIGNhbGwgYGlwNl9yZWRpcmVjdCgpYC5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcm91dGUgcmVkaXJlY3QgaGFuZGxpbmcgZm9yIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBib3VuZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVB2NiBVRFAgc3RhY2sgKHVkcHY2X2VycikgYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwtY2FzZWQgdHVubmVsIGNoZWNrIGZvciBORElTQ19SRURJUkVDVCBhbmQgcm91dGluZyByZWRpcmVjdCBoYW5kbGluZyBkaXJlY3RseSB2aWEgaXA2X3NrX3JlZGlyZWN0KCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBwcm9jZXNzZXMgSUNNUHY2IHJlZGlyZWN0IG1lc3NhZ2VzIGZvciBVRFAgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzNWQ0MDBkMjhhNjVmODAwMzRlZTc2MzA1YWJkMDgyOWExNzRlYTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjMwOjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLjU5Zjk4NzJjMzU1MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmNcbkBAIC03NTEsMTMgJiM0Mzs3NTEsNyBAQCBzdGF0aWMgaW50IHVkcHY2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCxcbiBcdFx0XHRoYXJkZXJyID0gMTtcbiBcdH1cbiBcdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XG4tXHRcdGlmICh0dW5uZWwpIHtcbi1cdFx0XHRpcDZfcmVkaXJlY3Qoc2tiLCBzb2NrX25ldChzayksIGluZXQ2X2lpZihza2IpLFxuLVx0XHRcdFx0ICAgICBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbWFyayksXG4tXHRcdFx0XHQgICAgIHNrX3VpZChzaykpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbi1cdFx0fVxuJiM0MztcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwdjZfZXJyJiMzNDssCiAgICAmIzM0O2lwNl9za19yZWRpcmVjdCYjMzQ7LAogICAgJiMzNDtpcDZfcmVkaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElQdjYgVURQIHN0YWNrICh1ZHB2Nl9lcnIpIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsLWNhc2VkIHR1bm5lbCBjaGVjayBmb3IgTkRJU0NfUkVESVJFQ1QgYW5kIHJvdXRpbmcgcmVkaXJlY3QgaGFuZGxpbmcgZGlyZWN0bHkgdmlhIGlwNl9za19yZWRpcmVjdCgpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgcHJvY2Vzc2VzIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcyBmb3IgVURQIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMzVkNDAwZDI4YTY1ZjgwMDM0ZWU3NjMwNWFiZDA4MjlhMTc0ZWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNDozMDo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggOTM0NzhkMWFkNTc2OS4uNTlmOTg3MmMzNTUyMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmMKQEAgLTc1MSwxMyAmIzQzOzc1MSw3IEBAIHN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAogCQkJaGFyZGVyciA9IDE7CiAJfQogCWlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7Ci0JCWlmICh0dW5uZWwpIHsKLQkJCWlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksCi0JCQkJICAgICBSRUFEX09OQ0Uoc2stJmd0O3NrX21hcmspLAotCQkJCSAgICAgc2tfdWlkKHNrKSk7Ci0JCX0gZWxzZSB7Ci0JCQlpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzayk7Ci0JCX0KJiM0MzsJCWlwNl9za19yZWRpcmVjdChza2IsIHNrKTsKIAkJZ290byBvdXQ7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBVRFB2NiBFcnJvciBIYW5kbGluZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBgbmV0L2lwdjYvdWRwLmM6NzUxYC4gTGV0JiMzOTtzIGdyYWIgdGhlIGRpZmYgYW5kIGdpdmUgdGhhdCBzZWN0aW9uIGEgY2xvc2UgcmVhZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUgb2YgY29kZS4gTGlrZWx5LCB0aGVyZSYjMzk7cyBzb21lIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHBsYXkgdGhlcmUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB1ZHB2Nl9lcnJgIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHBva2UgYXJvdW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgZXJyb3JzLCBhbmQgYWxzbyB0byBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwIHdpdGggYHVkcHY2X2VycmAgaXMuIE15IGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoaXMgcGFydGljdWxhciBhcmVhIGhhbmRsZXMgVURQdjYgZXJyb3JzLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdFx0XHRcdFx0cmV0dXJuIDA7XG4gNzMxOlx0XHRcdH0gZWxzZVxuIDczMjpcdFx0XHRcdHNrID0gRVJSX1BUUigtRU5PRU5UKTtcbiA3MzM6XHRcbiA3MzQ6XHRcdFx0aWYgKElTX0VSUihzaykpIHtcbiA3MzU6XHRcdFx0XHRfX0lDTVA2X0lOQ19TVEFUUyhuZXQsIF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldiksXG4gNzM2Olx0XHRcdFx0XHRcdCAgSUNNUDZfTUlCX0lORVJST1JTKTtcbiA3Mzc6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihzayk7XG4gNzM4Olx0XHRcdH1cbiA3Mzk6XHRcbiA3NDA6XHRcdFx0dHVubmVsID0gdHJ1ZTtcbiA3NDE6XHRcdH1cbiA3NDI6XHRcbiA3NDM6XHRcdGhhcmRlcnIgPSBpY21wdjZfZXJyX2NvbnZlcnQodHlwZSwgY29kZSwgXHUwMDI2ZXJyKTtcbiA3NDQ6XHRcdG5wID0gaW5ldDZfc2soc2spO1xuIDc0NTpcdFxuIDc0NjpcdFx0aWYgKHR5cGUgPT0gSUNNUFY2X1BLVF9UT09CSUcpIHtcbiA3NDc6XHRcdFx0aWYgKCFpcDZfc2tfYWNjZXB0X3BtdHUoc2spKVxuIDc0ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDc0OTpcdFx0XHRpcDZfc2tfdXBkYXRlX3BtdHUoc2tiLCBzaywgaW5mbyk7XG4gNzUwOlx0XHRcdGlmIChSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpICE9IElQVjZfUE1UVURJU0NfRE9OVClcbiA3NTE6XHRcdFx0XHRoYXJkZXJyID0gMTtcbiA3NTI6XHRcdH1cbiA3NTM6XHRcdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XG4gNzU0Olx0XHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbiA3NTU6XHRcdFx0Z290byBvdXQ7XG4gNzU2Olx0XHR9XG4gNzU3Olx0XG4gNzU4Olx0XHQvKiBUdW5uZWxzIGRvbiYjMzk7dCBoYXZlIGFuIGFwcGxpY2F0aW9uIHNvY2tldDogZG9uJiMzOTt0IHBhc3MgZXJyb3JzIGJhY2sgKi9cbiA3NTk6XHRcdGlmICh0dW5uZWwpIHtcbiA3NjA6XHRcdFx0aWYgKHVkcF9zayhzayktXHUwMDNlZW5jYXBfZXJyX3JjdilcbiA3NjE6XHRcdFx0XHR1ZHBfc2soc2spLVx1MDAzZWVuY2FwX2Vycl9yY3Yoc2ssIHNrYiwgZXJyLCB1aC1cdTAwM2VkZXN0LFxuIDc2MjpcdFx0XHRcdFx0XHRcdCAgbnRvaGwoaW5mbyksICh1OCAqKSh1aCYjNDM7MSkpO1xuIDc2MzpcdFx0XHRnb3RvIG91dDtcbiA3NjQ6XHRcdH1cbiA3NjU6XHRcbiA3NjY6XHRcdGlmICghaW5ldDZfdGVzdF9iaXQoUkVDVkVSUjYsIHNrKSkge1xuIDc2NzpcdFx0XHRpZiAoIWhhcmRlcnIgfHwgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuIDc2ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDc2OTpcdFx0fSBlbHNlIHtcbiA3NzA6XHRcdFx0aXB2Nl9pY21wX2Vycm9yKHNrLCBza2IsIGVyciwgdWgtXHUwMDNlZGVzdCwgbnRvaGwoaW5mbyksICh1OCAqKSh1aCYjNDM7MSkpO1xuIDc3MTpcdFx0fVxuIDc3MjpcdFxuIDc3MzpcdFx0c2stXHUwMDNlc2tfZXJyID0gZXJyO1xuIDc3NDpcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaW1tZWRpYXRlbHkgaHVudCBkb3duIHRoZSBkZWZpbml0aW9uLiBJJiMzOTttIG5vdCBnb2luZyB0byB3YXN0ZSB0aW1lIGd1ZXNzaW5nOyBJIG5lZWQgdG8gc2VlIHRoZSBjb2RlIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbmV0d29ya2luZyBzdGFjaywgc28gdGhlIGRlZmluaXRpb24gd2lsbCBwcm92aWRlIHRoZSBkZXRhaWxzIEkgbmVlZC4gT25jZSBJJiMzOTt2ZSBmb3VuZCBpdCwgSSBjYW4gYmVnaW4gdG8gbG9vayBhdCBpdCBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3NrX3JlZGlyZWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTIxMT12b2lkIGlwNl9yZWRpcmVjdF9ub19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCBpbnQgb2lmKTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjIxMjp2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjEzLVxuLS1cbm5ldC9pcHY2L3Jhdy5jPTI5OD1zdGF0aWMgdm9pZCByYXd2Nl9lcnIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3Jhdy5jLTMxOS1cdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XG5uZXQvaXB2Ni9yYXcuYzozMjA6XHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbm5ldC9pcHY2L3Jhdy5jLTMyMS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MzIzOD12b2lkIGlwNl9yZWRpcmVjdF9ub19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCBpbnQgb2lmKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzI1NS1cbm5ldC9pcHY2L3JvdXRlLmM6MzI1Njp2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNTcte1xuLS1cbm5ldC9pcHY2L3VkcC5jPTcwND1zdGF0aWMgaW50IHVkcHY2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCxcbi0tXG5uZXQvaXB2Ni91ZHAuYy03NTMtXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xubmV0L2lwdjYvdWRwLmM6NzU0Olx0XHRpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzayk7XG5uZXQvaXB2Ni91ZHAuYy03NTUtXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcgUmVkaXJlY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBJUHY2IHJlZGlyZWN0cyB3b3JrIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaGFuZGxpbmcgb2Ygc29ja2V0LWxldmVsIHJlZGlyZWN0cy4gVGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2lwdjYvcm91dGUuY2AuIFRoZSBmdW5jdGlvbiBJJiMzOTttIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIGlzIGBpcDZfc2tfcmVkaXJlY3RgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGtleSB0byBkaWFnbm9zaW5nIGFueSBvZGRpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIHN0ZWVycyBJUHY2IHRyYWZmaWMgYmFzZWQgb24gSUNNUHY2IHJlZGlyZWN0cy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBhIHJlZGlyZWN0LCBob3cgdGhlIHJlbGV2YW50IHJvdXRpbmcgdGFibGUgZW50cmllcyBhcmUgdXBkYXRlZCwgYW5kIHRoZSBsb2dpYyBhcm91bmQgZXJyb3IgaGFuZGxpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyNTA6XHRcbjMyNTE6XHRcdGRzdCA9IGlwNl9yb3V0ZV9yZWRpcmVjdChuZXQsIFx1MDAyNmZsNiwgc2tiLCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuMzI1MjpcdFx0cnQ2X2RvX3JlZGlyZWN0KGRzdCwgTlVMTCwgc2tiKTtcbjMyNTM6XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4zMjU0Olx0fVxuMzI1NTpcdFxuMzI1NjpcdHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbjMyNTc6XHR7XG4zMjU4Olx0XHRpcDZfcmVkaXJlY3Qoc2tiLCBzb2NrX25ldChzayksIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCxcbjMyNTk6XHRcdFx0ICAgICBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbWFyayksIHNrX3VpZChzaykpO1xuMzI2MDpcdH1cbjMyNjE6XHRcbjMyNjI6XHRzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4zMjYzOlx0e1xuMzI2NDpcdFx0dW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTtcbjMyNjU6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjMyNjY6XHRcbjMyNjc6XHRcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbjMyNjg6XHRcbjMyNjk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTI4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IFVEUCBFcnJvciBIYW5kbGluZyBhbmQgSUNNUHY2IFJlZGlyZWN0cyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZnV6ei13b3J0aHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHNpbXBsaWZ5aW5nIGhvdyBJUHY2IHJlZGlyZWN0cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXJlJiMzOTtzIGEgVURQIGVycm9yLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaXMgbm93IGNvbnNpc3RlbnRseSBjYWxsZWQsIHJlcGxhY2luZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHdpdGggYGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksIFJFQURfT05DRShzay0mZ3Q7c2tfbWFyayksIHNrX3VpZChzaykpYCBpbiBzcGVjaWZpYyBjYXNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBzaW1wbGlmaWNhdGlvbiBoYXMgaW50cm9kdWNlZCBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcy4KCk15IGZpcnN0IHRob3VnaHQgaXMgYXJvdW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGluZXQ2X2lpZihza2IpYCBhbmQgc29tZXRoaW5nIGxpa2UgYHNrYi0mZ3Q7ZGV2LSZndDtpZmluZGV4YC4gSXMgdGhlIHJlcGxhY2VtZW50IHNlbWFudGljYWxseSBlcXVpdmFsZW50PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaW5kZXggZGVyaXZhdGlvbiBsb2dpYyBpcyBjb3JyZWN0IGFmdGVyIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBhbmQgc2VlIGlmIHRoZXNlIGFyZSBqdXN0IGRpZmZlcmVudCB3YXlzIG9mIGV4cHJlc3NpbmcgdGhlIHNhbWUgdGhpbmcsIG9yIGlmIHRoZXJlJiMzOTtzIGEgc3VidGxlIGRpZmZlcmVuY2UgcmVsYXRlZCB0byB0aGUgaW50ZXJmYWNlIElELCBvciBpZiBhbnkgZWFybGllciBjbGVhbnVwLCBvciBjb252ZXJzaW9uIG9mIGBJUDZDQihza2IpLSZndDtpaWZgIHBsYXlzIGEgcGFydCBoZXJlLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4gSXQmIzM5O3MgY29yZSBuZXR3b3JraW5nIGNvZGUg4oCTIElQdjYgVURQIGVycm9yIGhhbmRsaW5nIGFuZCBJQ01QdjYgcmVkaXJlY3QgcHJvY2Vzc2luZy4gQWJzb2x1dGVseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldHMsIHR1bm5lbHMsIHRhcHMsIGxvb3BiYWNrLCBgc2VuZG1zZ2AsIElDTVB2NiBtZXNzYWdlcywgZXRjLiBTaW5jZSB0aGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nLCB0aGF0JiMzOTtzIGEgYmlnIGdyZWVuIGxpZ2h0LgoKQWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIHRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIG1vZGlmeWluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIGNvcmUgbmV0d29ya2luZyBtZWFucyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoYXQmIzM5O3MgYSBjbGVhciB3aW4uCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMgYW5kIGVuYWJsZSBjb25maWd1cmF0aW9ucy4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHNvbWUga2V5IGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQ6IGB1ZHB2Nl9lcnJgLCBgaXA2X3NrX3JlZGlyZWN0YCwgYW5kIGBpcDZfcmVkaXJlY3RgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdWl0YWJsZSBhcyBGb2N1c1N5bWJvbHMsIGFuZCBpZiBgdWRwdjZfZXJyYCBpbiBwYXJ0aWN1bGFyIGlzIGEgdmFsaWQgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIGFsc28gY2hlY2sgYG5ldC9pcHY2L3VkcC5jYCBhbmQgdXNlIGBnaXQgZ3JlcGAgdG8gZmluZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgYnJlYWR0aCBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRvIHRhcmdldCBmdXp6aW5nIGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHB2Nl9lcnImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvdWRwLmM9NjM5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX191ZHA2X2xpYl9lcnJfZW5jYXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L3VkcC5jLTY5Mi1cbm5ldC9pcHY2L3VkcC5jOjY5MzpzdGF0aWMgdm9pZCB1ZHB2Nl9lcnJfdXBkYXRlX2V4Y2VwdGlvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni91ZHAuYy02OTQtXHRcdFx0XHQgICAgICAgdTggdHlwZSwgX19iZTMyIGluZm8pXG4tLVxubmV0L2lwdjYvdWRwLmMtNzAzLVxubmV0L2lwdjYvdWRwLmM6NzA0OnN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxubmV0L2lwdjYvdWRwLmMtNzA1LVx0XHQgICAgIHU4IHR5cGUsIHU4IGNvZGUsIGludCBvZmZzZXQsIF9fYmUzMiBpbmZvKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTcxNi1cbm5ldC9pcHY2L3VkcC5jOjcxNzpcdHVkcHY2X2Vycl91cGRhdGVfZXhjZXB0aW9uKG5ldCwgc2tiLCB0eXBlLCBpbmZvKTtcbm5ldC9pcHY2L3VkcC5jLTcxOC1cbi0tXG5uZXQvaXB2Ni91ZHAuYz0xOTQ2PWludCBfX2luaXQgdWRwdjZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTE5NTEtXHRcdC5oYW5kbGVyICAgICA9IHVkcHY2X3Jjdixcbm5ldC9pcHY2L3VkcC5jOjE5NTI6XHRcdC5lcnJfaGFuZGxlciA9IHVkcHY2X2Vycixcbm5ldC9pcHY2L3VkcC5jLTE5NTMtXHRcdC5mbGFnc1x0ICAgICA9IElORVQ2X1BST1RPX05PUE9MSUNZIHwgSU5FVDZfUFJPVE9fRklOQUwsXG4tLVxubmV0L3NjdHAvaXB2Ni5jPTE5MD1pbnQgc2N0cF91ZHBfdjZfZXJyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvc2N0cC9pcHY2LmMtMjA3LVx0aWYgKGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XG5uZXQvc2N0cC9pcHY2LmM6MjA4Olx0XHQvKiBjYW4mIzM5O3QgYmUgaGFuZGxlZCB3aXRob3V0IG91dGVyIGlwNmhkciBrbm93biwgbGVhdmUgaXQgdG8gdWRwdjZfZXJyICovXG5uZXQvc2N0cC9pcHY2LmMtMjA5LVx0XHRzY3RwX2Vycl9maW5pc2goc2ssIHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODI5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIElQdjYgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCB3aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjYgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgS2NvbmZpZyBzeW1ib2wgaXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5ICplbmFibGluZyogSVB2NiBzdXBwb3J0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIHZhcmlhYmxlIHRoYXQgY29udHJvbHMgd2hldGhlciB0aGUgSVB2NiBzdGFjayBpcyBidWlsdCBpbiwgb3IgYXMgYSBtb2R1bGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIG5hbWVkLCBwZXJoYXBzLCBgQ09ORklHX0lQVjZgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gRGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBJJiMzOTttIHdvcmtpbmcgd2l0aCwgdGhlcmUgbWlnaHQgYWxzbyBiZSByZWxhdGVkIEtjb25maWcgZW50cmllcyBmb3Igc3BlY2lmaWMgSVB2NiBmZWF0dXJlcyBvciBzdWItY29tcG9uZW50cyB0aGF0IEkmIzM5O2xsIHdhbnQgdG8gaW5zcGVjdCBhdCB0aGUgc2FtZSB0aW1lLCBpbiBjYXNlIEkgbmVlZCB0byBlbmFibGUgYSBwYXJ0aWN1bGFyIGZlYXR1cmUuIEkgbmVlZCB0byBtYXAgdGhlIHN5bWJvbCB0byB0aGUgY29uZmlndXJhdGlvbiBVSSB0byBjb25maWd1cmUgdGhlIHN5bWJvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1JpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBJUHY2IG1vZHVsZSBpcyBidWlsdC4mIzM0OyBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NiBwcm90b2NvbCBzdGFjaywgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIGFuZCBvYmplY3QgZmlsZSBkZWZpbml0aW9ucy4gS25vd2luZyB0aGlzLCBJIGV4cGVjdCB0byBmaW5kIHRoaXMgZmlsZSBpcyBwaXZvdGFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBudWFuY2VzIG9mIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIGtlcm5lbCB2ZXJzaW9uLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGFueSBwYXJ0aWN1bGFybHkgY2xldmVyIGJ1aWxkIHRyaWNrcyBoZXJlLCBhbnkgY3VzdG9tIG1hY3JvcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgb3Iga2VybmVsIGNvbmZpZy4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVx0XHRhZGRybGFiZWwubyBcXFxubmV0L2lwdjYvTWFrZWZpbGU6MTA6XHRcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cdFx0cmF3Lm8gaWNtcC5vIG1jYXN0Lm8gcmVhc3NlbWJseS5vIHRjcF9pcHY2Lm8gcGluZy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODYKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgdWRwLmNgIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdWRwLmNgIGZpbGUgYW5kIGl0JiMzOTtzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfSVBWNmAuIE1ha2VzIHNlbnNlLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBkZWZpbml0ZWx5IGBJUFY2YC4gTm93LCB3aGF0IGFyZSB0aGUgY3J1Y2lhbCBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgYXJlYT8gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYHVkcHY2X2VycmAsIGBpcDZfc2tfcmVkaXJlY3RgLCBhbmQgYGlwNl9yZWRpcmVjdGAgaW4gbWluZC4KClRpbWUgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSBldmVyeXRoaW5nLiBGaXJzdCwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGFic29sdXRlbHkgYmUgYHRydWVgIOKAkyBpdCYjMzk7cyBjcnVjaWFsIHRvIHRlc3QgdGhpcyBjb2RlLiBOZXh0LCBgRW5hYmxlQ29uZmlnc2AgaXMgc2ltcGx5IGBbJiMzNDtJUFY2JiMzNDtdYCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIE5vdyBmb3IgYEZvY3VzU3ltYm9sc2AuIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgaW5jbHVkaW5nIGJvdGggYHVkcHY2X2VycmAgYW5kIGBpcDZfc2tfcmVkaXJlY3RgLCBzaW5jZSB0aGV5JiMzOTtyZSBjb3JlIHRvIHRoZSBwYXRjaCwgb3IgSSBtaWdodCBldmVuIHRocm93IGluIGBpcDZfcmVkaXJlY3RgIGZvciBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zLgoKTXkgcmVhc29uaW5nPyBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgSVB2NiBVRFAgSUNNUCByZWRpcmVjdCBoYW5kbGluZyBpbiBgdWRwdjZfZXJyKClgIGJ5IHRha2luZyBvdXQgYSB0dW5uZWwgYnJhbmNoIGFuZCBkaXJlY3RseSBjYWxsaW5nIGBpcDZfc2tfcmVkaXJlY3QoKWAuIFRoaXMgaGl0cyBjcml0aWNhbCBJUHY2IG5ldHdvcmtpbmcgY29kZSwgd2hpY2ggaXMgcmVhY2hhYmxlIHRocm91Z2ggdXNlci1zcGFjZSBuZXR3b3JrIHNvY2tldHMgYW5kIElDTVB2NiBwYWNrZXQgaGFuZGxpbmcuIFRoaXMgaXMgYSB2ZXJ5IHNlbnNpdGl2ZSBhcmVhLCBzbyBmdWxsIGNvdmVyYWdlIGlzIGVzc2VudGlhbC4KCkFscmlnaHQsIGEgZmluYWwgcXVpY2sgc2NhbiBvZiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLCBhbmQgSSYjMzk7bSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcHY2X2VyciYjMzQ7LAogICAgJiMzNDtpcDZfc2tfcmVkaXJlY3QmIzM0OywKICAgICYjMzQ7aXA2X3JlZGlyZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUHY2IFVEUCBzdGFjayAodWRwdjZfZXJyKSBieSByZW1vdmluZyB0aGUgc3BlY2lhbC1jYXNlZCB0dW5uZWwgY2hlY2sgZm9yIE5ESVNDX1JFRElSRUNUIGFuZCByb3V0aW5nIHJlZGlyZWN0IGhhbmRsaW5nIGRpcmVjdGx5IHZpYSBpcDZfc2tfcmVkaXJlY3QoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHByb2Nlc3NlcyBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMgZm9yIFVEUCBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwdjZfZXJyJiMzNDssCiAgICAmIzM0O2lwNl9za19yZWRpcmVjdCYjMzQ7LAogICAgJiMzNDtpcDZfcmVkaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElQdjYgVURQIHN0YWNrICh1ZHB2Nl9lcnIpIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsLWNhc2VkIHR1bm5lbCBjaGVjayBmb3IgTkRJU0NfUkVESVJFQ1QgYW5kIHJvdXRpbmcgcmVkaXJlY3QgaGFuZGxpbmcgZGlyZWN0bHkgdmlhIGlwNl9za19yZWRpcmVjdCgpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgcHJvY2Vzc2VzIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcyBmb3IgVURQIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIElQdjYgVURQIElDTVAgcmVkaXJlY3QgcHJvY2Vzc2luZyBpbiBgdWRwdjZfZXJyKClgIGJ5IHVuY29uZGl0aW9uYWxseSBpbnZva2luZyBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCBpbnN0ZWFkIG9mIGJyYW5jaGluZyBvbiBgdHVubmVsYCB0byBjYWxsIGBpcDZfcmVkaXJlY3QoKWAuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzNWQ0MDBkMjhhNjVmODAwMzRlZTc2MzA1YWJkMDgyOWExNzRlYTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE0OjMwOjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCA5MzQ3OGQxYWQ1NzY5Li41OWY5ODcyYzM1NTIxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtNzUxLDEzICYjNDM7NzUxLDcgQEAgc3RhdGljIGludCB1ZHB2Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCiAJCQloYXJkZXJyID0gMTsKIAl9CiAJaWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHsKLQkJaWYgKHR1bm5lbCkgewotCQkJaXA2X3JlZGlyZWN0KHNrYiwgc29ja19uZXQoc2spLCBpbmV0Nl9paWYoc2tiKSwKLQkJCQkgICAgIFJFQURfT05DRShzay0mZ3Q7c2tfbWFyayksCi0JCQkJICAgICBza191aWQoc2spKTsKLQkJfSBlbHNlIHsKLQkJCWlwNl9za19yZWRpcmVjdChza2IsIHNrKTsKLQkJfQomIzQzOwkJaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spOwogCQlnb3RvIG91dDsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFB2NiBFcnJvciBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBkaWZmIHBvaW50cyB1cyB0byBgbmV0L2lwdjYvdWRwLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB1ZHB2Nl9lcnJgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgY2hhbmdlIGZvY3VzZXMgb24gYSBgTkRJU0NfUkVESVJFQ1RgIGVycm9yIHR5cGUsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgYmxvY2sgZGVhbGluZyB3aXRoIHR1bm5lbHMgaGFzIGJlZW4gc2ltcGxpZmllZC4gVGhlIG9sZGVyIGNvZGUgZGlmZmVyZW50aWF0ZWQgYmV0d2VlbiBgdHVubmVsYCBhbmQgbm8gdHVubmVsIHBhdGhzLCBub3cgY2FsbGluZyBvbmx5IGBpcDZfc2tfcmVkaXJlY3RgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhlIGB1ZHB2Nl9lcnJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBlcnJvciBoYW5kbGluZyBmbG93IHdpdGhpbiBVRFB2Ni4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIG90aGVyIHR5cGVzIG9mIGVycm9ycyBoYW5kbGVkIGhlcmUgdG9vLiBXaGF0IGFyZSB0aGUgY29tbW9uIGVycm9yIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGg/IFRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaXA2X3NrX3JlZGlyZWN0YCBhbmQgYGlwNl9yZWRpcmVjdGAgYWN0dWFsbHkgKmRvKi4gVGhlIHJlbW92YWwgb2YgdGhhdCBjb25kaXRpb25hbCBpbmRpY2F0ZXMgYSBzaWduaWZpY2FudCBzaW1wbGlmaWNhdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyBvbmx5IGBpcDZfc2tfcmVkaXJlY3RgLiBJcyB0aGlzIGNvcnJlY3Q/IERvZXMgYGlwNl9za19yZWRpcmVjdGAgZW5jb21wYXNzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGJvdGggcHJldmlvdXMgYnJhbmNoZXMsIG9yIGhhcyBzb21lIGZ1bmN0aW9uYWxpdHkgYmVlbiBtb3ZlZCBvciByZW1vdmVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciB0aGF0IGNvdWxkIGFmZmVjdCBob3cgcmVkaXJlY3RzIGFyZSBoYW5kbGVkIGluIHNwZWNpZmljIHR1bm5lbCBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHJldmlldyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UsIGFuZCB3aGF0IHRoZXkgb3BlcmF0ZSBvbi4gSXMgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXQgdG8gdGhpcyBjaGFuZ2U/IEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGF0IHRoZSBjb25kaXRpb25hbCB3YXMgcmVtb3ZlZCBiZWNhdXNlIHRoZSBgdHVubmVsYCBoYW5kbGluZyBsb2dpYyB3YXMgcmVkdW5kYW50IG9yIGhhbmRsZWQgZWxzZXdoZXJlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMwOlx0XHRcdFx0XHRyZXR1cm4gMDtcbiA3MzE6XHRcdFx0fSBlbHNlXG4gNzMyOlx0XHRcdFx0c2sgPSBFUlJfUFRSKC1FTk9FTlQpO1xuIDczMzpcdFxuIDczNDpcdFx0XHRpZiAoSVNfRVJSKHNrKSkge1xuIDczNTpcdFx0XHRcdF9fSUNNUDZfSU5DX1NUQVRTKG5ldCwgX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KSxcbiA3MzY6XHRcdFx0XHRcdFx0ICBJQ01QNl9NSUJfSU5FUlJPUlMpO1xuIDczNzpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNrKTtcbiA3Mzg6XHRcdFx0fVxuIDczOTpcdFxuIDc0MDpcdFx0XHR0dW5uZWwgPSB0cnVlO1xuIDc0MTpcdFx0fVxuIDc0MjpcdFxuIDc0MzpcdFx0aGFyZGVyciA9IGljbXB2Nl9lcnJfY29udmVydCh0eXBlLCBjb2RlLCBcdTAwMjZlcnIpO1xuIDc0NDpcdFx0bnAgPSBpbmV0Nl9zayhzayk7XG4gNzQ1Olx0XG4gNzQ2Olx0XHRpZiAodHlwZSA9PSBJQ01QVjZfUEtUX1RPT0JJRykge1xuIDc0NzpcdFx0XHRpZiAoIWlwNl9za19hY2NlcHRfcG10dShzaykpXG4gNzQ4Olx0XHRcdFx0Z290byBvdXQ7XG4gNzQ5Olx0XHRcdGlwNl9za191cGRhdGVfcG10dShza2IsIHNrLCBpbmZvKTtcbiA3NTA6XHRcdFx0aWYgKFJFQURfT05DRShucC1cdTAwM2VwbXR1ZGlzYykgIT0gSVBWNl9QTVRVRElTQ19ET05UKVxuIDc1MTpcdFx0XHRcdGhhcmRlcnIgPSAxO1xuIDc1MjpcdFx0fVxuIDc1MzpcdFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcbiA3NTQ6XHRcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xuIDc1NTpcdFx0XHRnb3RvIG91dDtcbiA3NTY6XHRcdH1cbiA3NTc6XHRcbiA3NTg6XHRcdC8qIFR1bm5lbHMgZG9uJiMzOTt0IGhhdmUgYW4gYXBwbGljYXRpb24gc29ja2V0OiBkb24mIzM5O3QgcGFzcyBlcnJvcnMgYmFjayAqL1xuIDc1OTpcdFx0aWYgKHR1bm5lbCkge1xuIDc2MDpcdFx0XHRpZiAodWRwX3NrKHNrKS1cdTAwM2VlbmNhcF9lcnJfcmN2KVxuIDc2MTpcdFx0XHRcdHVkcF9zayhzayktXHUwMDNlZW5jYXBfZXJyX3Jjdihzaywgc2tiLCBlcnIsIHVoLVx1MDAzZWRlc3QsXG4gNzYyOlx0XHRcdFx0XHRcdFx0ICBudG9obChpbmZvKSwgKHU4ICopKHVoJiM0MzsxKSk7XG4gNzYzOlx0XHRcdGdvdG8gb3V0O1xuIDc2NDpcdFx0fVxuIDc2NTpcdFxuIDc2NjpcdFx0aWYgKCFpbmV0Nl90ZXN0X2JpdChSRUNWRVJSNiwgc2spKSB7XG4gNzY3Olx0XHRcdGlmICghaGFyZGVyciB8fCBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpXG4gNzY4Olx0XHRcdFx0Z290byBvdXQ7XG4gNzY5Olx0XHR9IGVsc2Uge1xuIDc3MDpcdFx0XHRpcHY2X2ljbXBfZXJyb3Ioc2ssIHNrYiwgZXJyLCB1aC1cdTAwM2VkZXN0LCBudG9obChpbmZvKSwgKHU4ICopKHVoJiM0MzsxKSk7XG4gNzcxOlx0XHR9XG4gNzcyOlx0XG4gNzczOlx0XHRzay1cdTAwM2Vza19lcnIgPSBlcnI7XG4gNzc0Olx0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuIDc3NTpcdG91dDpcbiA3NzY6XHRcdHJldHVybiAwO1xuIDc3NzpcdH1cbiA3Nzg6XHRcbiA3Nzk6XHRzdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gSVB2NiBSZWRpcmVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O3ZlIGJlZW4gd29ya2luZyB3aXRoIElQdjYgcmVkaXJlY3Rpb24sIGFuZCB0aGUgZGVmaW5pdGlvbnMgb2YgYGlwNl9za19yZWRpcmVjdGAgYW5kIGBpcDZfcmVkaXJlY3RgIGhhdmUgYmVlbiByYXR0bGluZyBhcm91bmQgaW4gbXkgaGVhZC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGVtIHN0cmFpZ2h0LCB0aGF0IG15IHVuZGVyc3RhbmRpbmcgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSB3YXkgdGhleSYjMzk7cmUgaW1wbGVtZW50ZWQuIFRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSByZWRpcmVjdCBwcm9jZXNzaW5nIGNhbiBiZSBzbyBzdWJ0bHkgZGlmZmVyZW50LCBhbmQgYSBtaXN1bmRlcnN0YW5kaW5nIGhlcmUgd291bGQgY2F1c2UgcmVhbCBoZWFkYWNoZXMgbGF0ZXIuIFRoaXMgaXMgZGVmaW5pdGVseSBvbmUgb2YgdGhvc2UgdGltZXMgd2hlcmUgSSBuZWVkIHRvIHRha2UgYSBxdWljayBzYW5pdHkgY2hlY2sgYW5kIGNvbmZpcm0gdGhhdCB0aGUgdGhlb3JldGljYWwgYW5kIHRoZSBwcmFjdGljYWwgbGluZSB1cC4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZGVmaW5pdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9za19yZWRpcmVjdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0yMTE9dm9pZCBpcDZfcmVkaXJlY3Rfbm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgaW50IG9pZik7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoyMTI6dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIxMy1cbi0tXG5uZXQvaXB2Ni9yYXcuYz0yOTg9c3RhdGljIHZvaWQgcmF3djZfZXJyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9yYXcuYy0zMTktXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xubmV0L2lwdjYvcmF3LmM6MzIwOlx0XHRpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzayk7XG5uZXQvaXB2Ni9yYXcuYy0zMjEtXHRcdHJldHVybjtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyMzg9dm9pZCBpcDZfcmVkaXJlY3Rfbm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgaW50IG9pZilcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNTUtXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNTY6dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjYvcm91dGUuYy0zMjU3LXtcbi0tXG5uZXQvaXB2Ni91ZHAuYz03MDQ9c3RhdGljIGludCB1ZHB2Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXG4tLVxubmV0L2lwdjYvdWRwLmMtNzUzLVx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcbm5ldC9pcHY2L3VkcC5jOjc1NDpcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xubmV0L2lwdjYvdWRwLmMtNzU1LVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBSZWRpcmVjdCBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIElQdjYgcmVkaXJlY3RzLCBzcGVjaWZpY2FsbHkgaG93IGBpcDZfc2tfcmVkaXJlY3RgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0IG1lIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIOKAkyB0aGF0IHdvdWxkIGJlIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gUmlnaHQsIEkgcmVtZW1iZXIgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoYXQgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDMyNTYuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaXNzZWN0IHRoZSBiZWhhdmlvciBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgcm91dGluZyBkZWNpc2lvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiByZXZlYWxzIHNvbWV0aGluZyBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjQ1Olx0XHRcdC5mbG93aTZfb2lmID0gb2lmLFxuMzI0NjpcdFx0XHQuZGFkZHIgPSBtc2ctXHUwMDNlZGVzdCxcbjMyNDc6XHRcdFx0LnNhZGRyID0gaXBoLVx1MDAzZWRhZGRyLFxuMzI0ODpcdFx0XHQuZmxvd2k2X3VpZCA9IHNvY2tfbmV0X3VpZChuZXQsIE5VTEwpLFxuMzI0OTpcdFx0fTtcbjMyNTA6XHRcbjMyNTE6XHRcdGRzdCA9IGlwNl9yb3V0ZV9yZWRpcmVjdChuZXQsIFx1MDAyNmZsNiwgc2tiLCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuMzI1MjpcdFx0cnQ2X2RvX3JlZGlyZWN0KGRzdCwgTlVMTCwgc2tiKTtcbjMyNTM6XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4zMjU0Olx0fVxuMzI1NTpcdFxuMzI1NjpcdHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbjMyNTc6XHR7XG4zMjU4Olx0XHRpcDZfcmVkaXJlY3Qoc2tiLCBzb2NrX25ldChzayksIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCxcbjMyNTk6XHRcdFx0ICAgICBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbWFyayksIHNrX3VpZChzaykpO1xuMzI2MDpcdH1cbjMyNjE6XHRcbjMyNjI6XHRzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4zMjYzOlx0e1xuMzI2NDpcdFx0dW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTtcbjMyNjU6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjMyNjY6XHRcbjMyNjc6XHRcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbjMyNjg6XHRcbjMyNjk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMyNzA6XHRcbjMyNzE6XHRcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xuMzI3MjpcdFx0bXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsXG4zMjczOlx0XHRcdCAgICBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzKSk7XG4zMjc0Olx0XG4zMjc1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMyNzY6XHRcbjMyNzc6XHRcdC8qXG4zMjc4Olx0XHQgKiBNYXhpbWFsIG5vbi1qdW1ibyBJUHY2IHBheWxvYWQgaXMgSVBWNl9NQVhQTEVOIGFuZFxuMzI3OTpcdFx0ICogY29ycmVzcG9uZGluZyBNU1MgaXMgSVBWNl9NQVhQTEVOIC0gdGNwX2hlYWRlcl9zaXplLlxuMzI4MDpcdFx0ICogTGltaXQgdGhlIGRlZmF1bHQgTVNTIHRvIEdTT19CWV9GUkFHUyAtIDEgdG8gYXZvaWRcbjMyODE6XHRcdCAqIGNvbGxpc2lvbiB3aXRoIHRoZSBHU09fQllfRlJBR1MgbWFnaWMgdmFsdWUgKDB4RkZGRikuXG4zMjgyOlx0XHQgKi9cbjMyODM6XHRcdGlmIChtdHUgXHUwMDNlIElQVjZfTUFYUExFTiAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSlcbjMyODQ6XHRcdFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBJUFY2X01BWFBMRU4sIEdTT19CWV9GUkFHUyAtIDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjI1CgkJCQkJCQlvdXRwdXQ6IDE1MAoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgUmVkaXJlY3QgTG9naWMgYW5kIEl0cyBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCBpcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGhlcmUsIGFuZCBpdCBjYWxscyBgaXA2X3JlZGlyZWN0KHNrYiwgc29ja19uZXQoc2spLCBza2ItJmd0O2Rldi0mZ3Q7aWZpbmRleCwgUkVBRF9PTkNFKHNrLSZndDtza19tYXJrKSwgc2tfdWlkKHNrKSlgLiBUaGUga2V5IGlzIGluIGB1ZHB2Nl9lcnJgLCB3aGVyZSB0aGVyZSB3YXMgcHJldmlvdXNseSBhIGNvbmRpdGlvbmFsIGNoZWNrIGZvciBgdHVubmVsYC4gSWYgYHR1bm5lbGAgd2FzIHRydWUsIGl0IHdhcyBjYWxsaW5nIGBpcDZfcmVkaXJlY3RgIGRpcmVjdGx5IHdpdGggYGluZXQ2X2lpZihza2IpYCwgd2hpY2ggd2Ugc2VlIGlzIGVxdWl2YWxlbnQgdG8gYHNrYi0mZ3Q7ZGV2LSZndDtpZmluZGV4YC4gTm93LCB0aGUgcGF0Y2ggc3RyZWFtbGluZXMgdGhpcyBieSBhbHdheXMgY2FsbGluZyBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYC4gU28sIHRoZSBsb2dpYyBpcyBiZWluZyBjb25zb2xpZGF0ZWQgdG8gY2FsbCB0aGUgc2FtZSBiYXNlIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLgoKTm93LCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOL0tBU0FOIGNyaXRlcmlhLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcy4KKiAgIEFyZSB3ZSBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyBObywgbm90IGhlcmUuCiogICBBcmUgd2UgaW50cm9kdWNpbmcgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCiogICBBcmUgd2UgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8gTm8uCiogICBBcmUgd2UgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyBObyBhZ2Fpbi4KKiAgIElzIHRoZXJlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgaW5mby1sZWFrcz8gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIGl0LiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHJlbW92aW5nIHJlZHVuZGFudCBicmFuY2hpbmcgYW5kIGNhbGxpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgdW5jb25kaXRpb25hbGx5LiBObyBhbGxvY2F0aW9uLCBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHJlYWRzLiBJdCBpcyBhbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2VsZi1jb250YWluZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcgZm9yIGJldHRlciBjb2RlIGZsb3cuCgpJJiMzOTtsbCBqdXN0IGRvIGEgcXVpY2ssIGZpbmFsIGRvdWJsZSBjaGVjaywgYW5kIHRoZW4gaXQmIzM5O3MgdGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIElQdjYgVURQIElDTVAgcmVkaXJlY3QgcHJvY2Vzc2luZyBpbiBgdWRwdjZfZXJyKClgIGJ5IHVuY29uZGl0aW9uYWxseSBpbnZva2luZyBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCBpbnN0ZWFkIG9mIGJyYW5jaGluZyBvbiBgdHVubmVsYCB0byBjYWxsIGBpcDZfcmVkaXJlY3QoKWAuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgSVB2NiBVRFAgSUNNUCByZWRpcmVjdCBwcm9jZXNzaW5nIGluIGB1ZHB2Nl9lcnIoKWAgYnkgdW5jb25kaXRpb25hbGx5IGludm9raW5nIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgIGluc3RlYWQgb2YgYnJhbmNoaW5nIG9uIGB0dW5uZWxgIHRvIGNhbGwgYGlwNl9yZWRpcmVjdCgpYC5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcm91dGUgcmVkaXJlY3QgaGFuZGxpbmcgZm9yIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBib3VuZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMDo0MS44MDQ0NDM2ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDMwMTExNzUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwdjZfZXJyXCIsXG4gICAgXCJpcDZfc2tfcmVkaXJlY3RcIixcbiAgICBcImlwNl9yZWRpcmVjdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyBJUHY2IFVEUCBJQ01QIHJlZGlyZWN0IHByb2Nlc3NpbmcgaW4gYHVkcHY2X2VycigpYCBieSB1bmNvbmRpdGlvbmFsbHkgaW52b2tpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaW5zdGVhZCBvZiBicmFuY2hpbmcgb24gYHR1bm5lbGAgdG8gY2FsbCBgaXA2X3JlZGlyZWN0KClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVB2NiBVRFAgc3RhY2sgKHVkcHY2X2VycikgYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwtY2FzZWQgdHVubmVsIGNoZWNrIGZvciBORElTQ19SRURJUkVDVCBhbmQgcm91dGluZyByZWRpcmVjdCBoYW5kbGluZyBkaXJlY3RseSB2aWEgaXA2X3NrX3JlZGlyZWN0KCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBwcm9jZXNzZXMgSUNNUHY2IHJlZGlyZWN0IG1lc3NhZ2VzIGZvciBVRFAgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzA6NDEuODA0NDUxMTczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwNDY1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMzVkNDAwZDI4YTY1ZjgwMDM0ZWU3NjMwNWFiZDA4MjlhMTc0ZWEzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTQ6MzA6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuY1xcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLjU5Zjk4NzJjMzU1MjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcXG4rKysgYi9uZXQvaXB2Ni91ZHAuY1xcbkBAIC03NTEsMTMgKzc1MSw3IEBAIHN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxcbiBcXHRcXHRcXHRoYXJkZXJyID0gMTtcXG4gXFx0fVxcbiBcXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xcbi1cXHRcXHRpZiAodHVubmVsKSB7XFxuLVxcdFxcdFxcdGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksXFxuLVxcdFxcdFxcdFxcdCAgICAgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19tYXJrKSxcXG4tXFx0XFx0XFx0XFx0ICAgICBza191aWQoc2spKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMwOjQyLjI2NTIwMTI1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDE1Mjg2MzU2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcHY2X2VyclwiLFxuICAgIFwiaXA2X3NrX3JlZGlyZWN0XCIsXG4gICAgXCJpcDZfcmVkaXJlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVB2NiBVRFAgc3RhY2sgKHVkcHY2X2VycikgYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwtY2FzZWQgdHVubmVsIGNoZWNrIGZvciBORElTQ19SRURJUkVDVCBhbmQgcm91dGluZyByZWRpcmVjdCBoYW5kbGluZyBkaXJlY3RseSB2aWEgaXA2X3NrX3JlZGlyZWN0KCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBwcm9jZXNzZXMgSUNNUHY2IHJlZGlyZWN0IG1lc3NhZ2VzIGZvciBVRFAgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMzVkNDAwZDI4YTY1ZjgwMDM0ZWU3NjMwNWFiZDA4MjlhMTc0ZWEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDozMDo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLjU5Zjk4NzJjMzU1MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuKysrIGIvbmV0L2lwdjYvdWRwLmNcbkBAIC03NTEsMTMgKzc1MSw3IEBAIHN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxuIFx0XHRcdGhhcmRlcnIgPSAxO1xuIFx0fVxuIFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcbi1cdFx0aWYgKHR1bm5lbCkge1xuLVx0XHRcdGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksXG4tXHRcdFx0XHQgICAgIFJFQURfT05DRShzay1cdTAwM2Vza19tYXJrKSxcbi1cdFx0XHRcdCAgICAgc2tfdWlkKHNrKSk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xuLVx0XHR9XG4rXHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMDo0Mi4yNjUyMDI5MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTU5MjY5MTkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgVURQdjYgRXJyb3IgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGBuZXQvaXB2Ni91ZHAuYzo3NTFgLiBMZXQncyBncmFiIHRoZSBkaWZmIGFuZCBnaXZlIHRoYXQgc2VjdGlvbiBhIGNsb3NlIHJlYWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUgb2YgY29kZS4gTGlrZWx5LCB0aGVyZSdzIHNvbWUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcGxheSB0aGVyZSwgc28gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgYmVpbmcgaGFuZGxlZC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYHVkcHY2X2VycmAgaW4gdGhpcyBjb250ZXh0LiBJJ2xsIHByb2JhYmx5IGZpcmUgdXAgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBwb2tlIGFyb3VuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGVycm9ycywgYW5kIGFsc28gdG8gc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGB1ZHB2Nl9lcnJgIGlzLiBNeSBnb2FsIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgYXJlYSBoYW5kbGVzIFVEUHY2IGVycm9ycywgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgbmV0d29yayBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzA6NTMuODU3ODk2OTA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzMxOlxcdFxcdFxcdH0gZWxzZVxcbiA3MzI6XFx0XFx0XFx0XFx0c2sgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrKSkge1xcbiA3MzU6XFx0XFx0XFx0XFx0X19JQ01QNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KSxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgSUNNUDZfTUlCX0lORVJST1JTKTtcXG4gNzM3OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNrKTtcXG4gNzM4OlxcdFxcdFxcdH1cXG4gNzM5OlxcdFxcbiA3NDA6XFx0XFx0XFx0dHVubmVsID0gdHJ1ZTtcXG4gNzQxOlxcdFxcdH1cXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0aGFyZGVyciA9IGljbXB2Nl9lcnJfY29udmVydCh0eXBlLCBjb2RlLCBcXHUwMDI2ZXJyKTtcXG4gNzQ0OlxcdFxcdG5wID0gaW5ldDZfc2soc2spO1xcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRpZiAodHlwZSA9PSBJQ01QVjZfUEtUX1RPT0JJRykge1xcbiA3NDc6XFx0XFx0XFx0aWYgKCFpcDZfc2tfYWNjZXB0X3BtdHUoc2spKVxcbiA3NDg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc0OTpcXHRcXHRcXHRpcDZfc2tfdXBkYXRlX3BtdHUoc2tiLCBzaywgaW5mbyk7XFxuIDc1MDpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG5wLVxcdTAwM2VwbXR1ZGlzYykgIT0gSVBWNl9QTVRVRElTQ19ET05UKVxcbiA3NTE6XFx0XFx0XFx0XFx0aGFyZGVyciA9IDE7XFxuIDc1MjpcXHRcXHR9XFxuIDc1MzpcXHRcXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xcbiA3NTQ6XFx0XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbiA3NTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc1NjpcXHRcXHR9XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdC8qIFR1bm5lbHMgZG9uJ3QgaGF2ZSBhbiBhcHBsaWNhdGlvbiBzb2NrZXQ6IGRvbid0IHBhc3MgZXJyb3JzIGJhY2sgKi9cXG4gNzU5OlxcdFxcdGlmICh0dW5uZWwpIHtcXG4gNzYwOlxcdFxcdFxcdGlmICh1ZHBfc2soc2spLVxcdTAwM2VlbmNhcF9lcnJfcmN2KVxcbiA3NjE6XFx0XFx0XFx0XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfZXJyX3Jjdihzaywgc2tiLCBlcnIsIHVoLVxcdTAwM2VkZXN0LFxcbiA3NjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBudG9obChpbmZvKSwgKHU4ICopKHVoKzEpKTtcXG4gNzYzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NjQ6XFx0XFx0fVxcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAoIWluZXQ2X3Rlc3RfYml0KFJFQ1ZFUlI2LCBzaykpIHtcXG4gNzY3OlxcdFxcdFxcdGlmICghaGFyZGVyciB8fCBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbiA3Njg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc2OTpcXHRcXHR9IGVsc2Uge1xcbiA3NzA6XFx0XFx0XFx0aXB2Nl9pY21wX2Vycm9yKHNrLCBza2IsIGVyciwgdWgtXFx1MDAzZWRlc3QsIG50b2hsKGluZm8pLCAodTggKikodWgrMSkpO1xcbiA3NzE6XFx0XFx0fVxcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRzay1cXHUwMDNlc2tfZXJyID0gZXJyO1xcbiA3NzQ6XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzA6NTMuODU4MDA5NDk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1NTA5NTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaW1tZWRpYXRlbHkgaHVudCBkb3duIHRoZSBkZWZpbml0aW9uLiBJJ20gbm90IGdvaW5nIHRvIHdhc3RlIHRpbWUgZ3Vlc3Npbmc7IEkgbmVlZCB0byBzZWUgdGhlIGNvZGUgaXRzZWxmLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIHN0YWNrLCBzbyB0aGUgZGVmaW5pdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGRldGFpbHMgSSBuZWVkLiBPbmNlIEkndmUgZm91bmQgaXQsIEkgY2FuIGJlZ2luIHRvIGxvb2sgYXQgaXQgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMDo1NS44MTMxMDcxNjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxODMxMTk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfc2tfcmVkaXJlY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjExPXZvaWQgaXA2X3JlZGlyZWN0X25vX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBvaWYpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjIxMjp2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIxMy1cXG4tLVxcbm5ldC9pcHY2L3Jhdy5jPTI5OD1zdGF0aWMgdm9pZCByYXd2Nl9lcnIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMzE5LVxcdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XFxubmV0L2lwdjYvcmF3LmM6MzIwOlxcdFxcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcXG5uZXQvaXB2Ni9yYXcuYy0zMjEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjM4PXZvaWQgaXA2X3JlZGlyZWN0X25vX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBvaWYpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNTUtXFxubmV0L2lwdjYvcm91dGUuYzozMjU2OnZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNTcte1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9NzA0PXN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxcbi0tXFxubmV0L2lwdjYvdWRwLmMtNzUzLVxcdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XFxubmV0L2lwdjYvdWRwLmM6NzU0OlxcdFxcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcXG5uZXQvaXB2Ni91ZHAuYy03NTUtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMwOjU3LjUzMTQyODQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4MjY0NDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSVB2NiBSb3V0aW5nIFJlZGlyZWN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBJUHY2IHJlZGlyZWN0cyB3b3JrIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaGFuZGxpbmcgb2Ygc29ja2V0LWxldmVsIHJlZGlyZWN0cy4gVGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2lwdjYvcm91dGUuY2AuIFRoZSBmdW5jdGlvbiBJJ20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gaXMgYGlwNl9za19yZWRpcmVjdGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIGRpYWdub3NpbmcgYW55IG9kZGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgc3RlZXJzIElQdjYgdHJhZmZpYyBiYXNlZCBvbiBJQ01QdjYgcmVkaXJlY3RzLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGEgcmVkaXJlY3QsIGhvdyB0aGUgcmVsZXZhbnQgcm91dGluZyB0YWJsZSBlbnRyaWVzIGFyZSB1cGRhdGVkLCBhbmQgdGhlIGxvZ2ljIGFyb3VuZCBlcnJvciBoYW5kbGluZy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMwOjU5LjUxNDA3NjAzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNTA6XFx0XFxuMzI1MTpcXHRcXHRkc3QgPSBpcDZfcm91dGVfcmVkaXJlY3QobmV0LCBcXHUwMDI2Zmw2LCBza2IsIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4zMjUyOlxcdFxcdHJ0Nl9kb19yZWRpcmVjdChkc3QsIE5VTEwsIHNrYik7XFxuMzI1MzpcXHRcXHRkc3RfcmVsZWFzZShkc3QpO1xcbjMyNTQ6XFx0fVxcbjMyNTU6XFx0XFxuMzI1NjpcXHR2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuMzI1NzpcXHR7XFxuMzI1ODpcXHRcXHRpcDZfcmVkaXJlY3Qoc2tiLCBzb2NrX25ldChzayksIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4LFxcbjMyNTk6XFx0XFx0XFx0ICAgICBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX21hcmspLCBza191aWQoc2spKTtcXG4zMjYwOlxcdH1cXG4zMjYxOlxcdFxcbjMyNjI6XFx0c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbjMyNjM6XFx0e1xcbjMyNjQ6XFx0XFx0dW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTtcXG4zMjY1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4zMjY2OlxcdFxcbjMyNjc6XFx0XFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7XFxuMzI2ODpcXHRcXG4zMjY5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzA6NTkuNTE0MzI2MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTg5ODQ4NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY2IFVEUCBFcnJvciBIYW5kbGluZyBhbmQgSUNNUHY2IFJlZGlyZWN0cyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6ei13b3J0aHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHNpbXBsaWZ5aW5nIGhvdyBJUHY2IHJlZGlyZWN0cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXJlJ3MgYSBVRFAgZXJyb3IuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCBpcyBub3cgY29uc2lzdGVudGx5IGNhbGxlZCwgcmVwbGFjaW5nIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgd2l0aCBgaXA2X3JlZGlyZWN0KHNrYiwgc29ja19uZXQoc2spLCBpbmV0Nl9paWYoc2tiKSwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX21hcmspLCBza191aWQoc2spKWAgaW4gc3BlY2lmaWMgY2FzZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgc2ltcGxpZmljYXRpb24gaGFzIGludHJvZHVjZWQgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYXJvdW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGluZXQ2X2lpZihza2IpYCBhbmQgc29tZXRoaW5nIGxpa2UgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleGAuIElzIHRoZSByZXBsYWNlbWVudCBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGluZGV4IGRlcml2YXRpb24gbG9naWMgaXMgY29ycmVjdCBhZnRlciB0aGlzIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBhbmQgc2VlIGlmIHRoZXNlIGFyZSBqdXN0IGRpZmZlcmVudCB3YXlzIG9mIGV4cHJlc3NpbmcgdGhlIHNhbWUgdGhpbmcsIG9yIGlmIHRoZXJlJ3MgYSBzdWJ0bGUgZGlmZmVyZW5jZSByZWxhdGVkIHRvIHRoZSBpbnRlcmZhY2UgSUQsIG9yIGlmIGFueSBlYXJsaWVyIGNsZWFudXAsIG9yIGNvbnZlcnNpb24gb2YgYElQNkNCKHNrYiktXHUwMDNlaWlmYCBwbGF5cyBhIHBhcnQgaGVyZS5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLiBJdCdzIGNvcmUgbmV0d29ya2luZyBjb2RlIOKAkyBJUHY2IFVEUCBlcnJvciBoYW5kbGluZyBhbmQgSUNNUHY2IHJlZGlyZWN0IHByb2Nlc3NpbmcuIEFic29sdXRlbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXRzLCB0dW5uZWxzLCB0YXBzLCBsb29wYmFjaywgYHNlbmRtc2dgLCBJQ01QdjYgbWVzc2FnZXMsIGV0Yy4gU2luY2UgdGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZywgdGhhdCdzIGEgYmlnIGdyZWVuIGxpZ2h0LlxuXG5BY2NvcmRpbmcgdG8gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgdGhlIGZhY3QgdGhhdCB3ZSdyZSBtb2RpZnlpbmcgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIG5ldHdvcmtpbmcgbWVhbnMgYFdvcnRoRnV6emluZyA9IHRydWVgLiBUaGF0J3MgYSBjbGVhciB3aW4uXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZm9jdXMgc3ltYm9scyBhbmQgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCBzb21lIGtleSBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkOiBgdWRwdjZfZXJyYCwgYGlwNl9za19yZWRpcmVjdGAsIGFuZCBgaXA2X3JlZGlyZWN0YC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdWl0YWJsZSBhcyBGb2N1c1N5bWJvbHMsIGFuZCBpZiBgdWRwdjZfZXJyYCBpbiBwYXJ0aWN1bGFyIGlzIGEgdmFsaWQgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIGFsc28gY2hlY2sgYG5ldC9pcHY2L3VkcC5jYCBhbmQgdXNlIGBnaXQgZ3JlcGAgdG8gZmluZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgYnJlYWR0aCBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRvIHRhcmdldCBmdXp6aW5nIGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTI4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzE6MDUuMTA0MTc4MDY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzExMzE5NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcHY2X2VyclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni91ZHAuYz02Mzk9c3RhdGljIHN0cnVjdCBzb2NrICpfX3VkcDZfbGliX2Vycl9lbmNhcChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy02OTItXFxubmV0L2lwdjYvdWRwLmM6NjkzOnN0YXRpYyB2b2lkIHVkcHY2X2Vycl91cGRhdGVfZXhjZXB0aW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni91ZHAuYy02OTQtXFx0XFx0XFx0XFx0ICAgICAgIHU4IHR5cGUsIF9fYmUzMiBpbmZvKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtNzAzLVxcbm5ldC9pcHY2L3VkcC5jOjcwNDpzdGF0aWMgaW50IHVkcHY2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCxcXG5uZXQvaXB2Ni91ZHAuYy03MDUtXFx0XFx0ICAgICB1OCB0eXBlLCB1OCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbylcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTcxNi1cXG5uZXQvaXB2Ni91ZHAuYzo3MTc6XFx0dWRwdjZfZXJyX3VwZGF0ZV9leGNlcHRpb24obmV0LCBza2IsIHR5cGUsIGluZm8pO1xcbm5ldC9pcHY2L3VkcC5jLTcxOC1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE5NDY9aW50IF9faW5pdCB1ZHB2Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTUxLVxcdFxcdC5oYW5kbGVyICAgICA9IHVkcHY2X3JjdixcXG5uZXQvaXB2Ni91ZHAuYzoxOTUyOlxcdFxcdC5lcnJfaGFuZGxlciA9IHVkcHY2X2VycixcXG5uZXQvaXB2Ni91ZHAuYy0xOTUzLVxcdFxcdC5mbGFnc1xcdCAgICAgPSBJTkVUNl9QUk9UT19OT1BPTElDWSB8IElORVQ2X1BST1RPX0ZJTkFMLFxcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTE5MD1pbnQgc2N0cF91ZHBfdjZfZXJyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy0yMDctXFx0aWYgKGhkci1cXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xcbm5ldC9zY3RwL2lwdjYuYzoyMDg6XFx0XFx0LyogY2FuJ3QgYmUgaGFuZGxlZCB3aXRob3V0IG91dGVyIGlwNmhkciBrbm93biwgbGVhdmUgaXQgdG8gdWRwdjZfZXJyICovXFxubmV0L3NjdHAvaXB2Ni5jLTIwOS1cXHRcXHRzY3RwX2Vycl9maW5pc2goc2ssIHQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMTowNi44MTU1MDU4NDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5NjkzMzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgLiBUaGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgd2hlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY2IHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIEtjb25maWcgc3ltYm9sIGlzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSAqZW5hYmxpbmcqIElQdjYgc3VwcG9ydC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIHZhcmlhYmxlIHRoYXQgY29udHJvbHMgd2hldGhlciB0aGUgSVB2NiBzdGFjayBpcyBidWlsdCBpbiwgb3IgYXMgYSBtb2R1bGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgbmFtZWQsIHBlcmhhcHMsIGBDT05GSUdfSVBWNmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBEZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIEknbSB3b3JraW5nIHdpdGgsIHRoZXJlIG1pZ2h0IGFsc28gYmUgcmVsYXRlZCBLY29uZmlnIGVudHJpZXMgZm9yIHNwZWNpZmljIElQdjYgZmVhdHVyZXMgb3Igc3ViLWNvbXBvbmVudHMgdGhhdCBJJ2xsIHdhbnQgdG8gaW5zcGVjdCBhdCB0aGUgc2FtZSB0aW1lLCBpbiBjYXNlIEkgbmVlZCB0byBlbmFibGUgYSBwYXJ0aWN1bGFyIGZlYXR1cmUuIEkgbmVlZCB0byBtYXAgdGhlIHN5bWJvbCB0byB0aGUgY29uZmlndXJhdGlvbiBVSSB0byBjb25maWd1cmUgdGhlIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMxOjA4LjkxMjQ0MjYxNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDYzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMTowOC45NTkyOTM3NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NjU4Mjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiUmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIElQdjYgbW9kdWxlIGlzIGJ1aWx0LlwiIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBJUHY2IHByb3RvY29sIHN0YWNrLCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgYW5kIG9iamVjdCBmaWxlIGRlZmluaXRpb25zLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIGZpbmQgdGhpcyBmaWxlIGlzIHBpdm90YWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIG51YW5jZXMgb2YgdGhlIElQdjYgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoaXMga2VybmVsIHZlcnNpb24uIEknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGFueSBwYXJ0aWN1bGFybHkgY2xldmVyIGJ1aWxkIHRyaWNrcyBoZXJlLCBhbnkgY3VzdG9tIG1hY3JvcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgb3Iga2VybmVsIGNvbmZpZy4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMToxMC43MTU4Nzk1NDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDIwNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcXHRcXHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTEtXFx0XFx0cmF3Lm8gaWNtcC5vIG1jYXN0Lm8gcmVhc3NlbWJseS5vIHRjcF9pcHY2Lm8gcGluZy5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzE6MTAuNzYyOTA2Nzg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyOTQ1MDIxODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdWRwLmNgIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHVkcC5jYCBmaWxlIGFuZCBpdCdzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfSVBWNmAuIE1ha2VzIHNlbnNlLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBkZWZpbml0ZWx5IGBJUFY2YC4gTm93LCB3aGF0IGFyZSB0aGUgY3J1Y2lhbCBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgYXJlYT8gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGB1ZHB2Nl9lcnJgLCBgaXA2X3NrX3JlZGlyZWN0YCwgYW5kIGBpcDZfcmVkaXJlY3RgIGluIG1pbmQuXG5cblRpbWUgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSBldmVyeXRoaW5nLiBGaXJzdCwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGFic29sdXRlbHkgYmUgYHRydWVgIOKAkyBpdCdzIGNydWNpYWwgdG8gdGVzdCB0aGlzIGNvZGUuIE5leHQsIGBFbmFibGVDb25maWdzYCBpcyBzaW1wbHkgYFtcIklQVjZcIl1gLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBOb3cgZm9yIGBGb2N1c1N5bWJvbHNgLiBJJ20gbGVhbmluZyB0b3dhcmQgaW5jbHVkaW5nIGJvdGggYHVkcHY2X2VycmAgYW5kIGBpcDZfc2tfcmVkaXJlY3RgLCBzaW5jZSB0aGV5J3JlIGNvcmUgdG8gdGhlIHBhdGNoLCBvciBJIG1pZ2h0IGV2ZW4gdGhyb3cgaW4gYGlwNl9yZWRpcmVjdGAgZm9yIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMuXG5cbk15IHJlYXNvbmluZz8gVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIElQdjYgVURQIElDTVAgcmVkaXJlY3QgaGFuZGxpbmcgaW4gYHVkcHY2X2VycigpYCBieSB0YWtpbmcgb3V0IGEgdHVubmVsIGJyYW5jaCBhbmQgZGlyZWN0bHkgY2FsbGluZyBgaXA2X3NrX3JlZGlyZWN0KClgLiBUaGlzIGhpdHMgY3JpdGljYWwgSVB2NiBuZXR3b3JraW5nIGNvZGUsIHdoaWNoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgbmV0d29yayBzb2NrZXRzIGFuZCBJQ01QdjYgcGFja2V0IGhhbmRsaW5nLiBUaGlzIGlzIGEgdmVyeSBzZW5zaXRpdmUgYXJlYSwgc28gZnVsbCBjb3ZlcmFnZSBpcyBlc3NlbnRpYWwuXG5cbkFscmlnaHQsIGEgZmluYWwgcXVpY2sgc2NhbiBvZiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLCBhbmQgSSdtIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODYsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMxOjIzLjcwNzkzMDgzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTAxNDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwdjZfZXJyXCIsXG4gICAgXCJpcDZfc2tfcmVkaXJlY3RcIixcbiAgICBcImlwNl9yZWRpcmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUHY2IFVEUCBzdGFjayAodWRwdjZfZXJyKSBieSByZW1vdmluZyB0aGUgc3BlY2lhbC1jYXNlZCB0dW5uZWwgY2hlY2sgZm9yIE5ESVNDX1JFRElSRUNUIGFuZCByb3V0aW5nIHJlZGlyZWN0IGhhbmRsaW5nIGRpcmVjdGx5IHZpYSBpcDZfc2tfcmVkaXJlY3QoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHByb2Nlc3NlcyBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMgZm9yIFVEUCBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHB2Nl9lcnJcIixcbiAgICBcImlwNl9za19yZWRpcmVjdFwiLFxuICAgIFwiaXA2X3JlZGlyZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElQdjYgVURQIHN0YWNrICh1ZHB2Nl9lcnIpIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsLWNhc2VkIHR1bm5lbCBjaGVjayBmb3IgTkRJU0NfUkVESVJFQ1QgYW5kIHJvdXRpbmcgcmVkaXJlY3QgaGFuZGxpbmcgZGlyZWN0bHkgdmlhIGlwNl9za19yZWRpcmVjdCgpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgcHJvY2Vzc2VzIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcyBmb3IgVURQIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMxOjIzLjc5Mzg0MTgzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMTE3MDIzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMToyMy43OTQzMzU1NzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODMxMTIwNDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyBJUHY2IFVEUCBJQ01QIHJlZGlyZWN0IHByb2Nlc3NpbmcgaW4gYHVkcHY2X2VycigpYCBieSB1bmNvbmRpdGlvbmFsbHkgaW52b2tpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaW5zdGVhZCBvZiBicmFuY2hpbmcgb24gYHR1bm5lbGAgdG8gY2FsbCBgaXA2X3JlZGlyZWN0KClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMzVkNDAwZDI4YTY1ZjgwMDM0ZWU3NjMwNWFiZDA4MjlhMTc0ZWEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDozMDo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLjU5Zjk4NzJjMzU1MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuKysrIGIvbmV0L2lwdjYvdWRwLmNcbkBAIC03NTEsMTMgKzc1MSw3IEBAIHN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxuIFx0XHRcdGhhcmRlcnIgPSAxO1xuIFx0fVxuIFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcbi1cdFx0aWYgKHR1bm5lbCkge1xuLVx0XHRcdGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksXG4tXHRcdFx0XHQgICAgIFJFQURfT05DRShzay1cdTAwM2Vza19tYXJrKSxcbi1cdFx0XHRcdCAgICAgc2tfdWlkKHNrKSk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xuLVx0XHR9XG4rXHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMToyMy43OTQzMzcwNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3Mjg1MjUwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRFB2NiBFcnJvciBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZGlmZiBwb2ludHMgdXMgdG8gYG5ldC9pcHY2L3VkcC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdWRwdjZfZXJyYCBmdW5jdGlvbi4gSSBzZWUgdGhlIGNoYW5nZSBmb2N1c2VzIG9uIGEgYE5ESVNDX1JFRElSRUNUYCBlcnJvciB0eXBlLCBhbmQgaXQgbG9va3MgbGlrZSBhIGNvbmRpdGlvbmFsIGJsb2NrIGRlYWxpbmcgd2l0aCB0dW5uZWxzIGhhcyBiZWVuIHNpbXBsaWZpZWQuIFRoZSBvbGRlciBjb2RlIGRpZmZlcmVudGlhdGVkIGJldHdlZW4gYHR1bm5lbGAgYW5kIG5vIHR1bm5lbCBwYXRocywgbm93IGNhbGxpbmcgb25seSBgaXA2X3NrX3JlZGlyZWN0YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhlIGB1ZHB2Nl9lcnJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBlcnJvciBoYW5kbGluZyBmbG93IHdpdGhpbiBVRFB2Ni4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIG90aGVyIHR5cGVzIG9mIGVycm9ycyBoYW5kbGVkIGhlcmUgdG9vLiBXaGF0IGFyZSB0aGUgY29tbW9uIGVycm9yIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGg/IFRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaXA2X3NrX3JlZGlyZWN0YCBhbmQgYGlwNl9yZWRpcmVjdGAgYWN0dWFsbHkgKmRvKi4gVGhlIHJlbW92YWwgb2YgdGhhdCBjb25kaXRpb25hbCBpbmRpY2F0ZXMgYSBzaWduaWZpY2FudCBzaW1wbGlmaWNhdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyBvbmx5IGBpcDZfc2tfcmVkaXJlY3RgLiBJcyB0aGlzIGNvcnJlY3Q/IERvZXMgYGlwNl9za19yZWRpcmVjdGAgZW5jb21wYXNzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGJvdGggcHJldmlvdXMgYnJhbmNoZXMsIG9yIGhhcyBzb21lIGZ1bmN0aW9uYWxpdHkgYmVlbiBtb3ZlZCBvciByZW1vdmVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciB0aGF0IGNvdWxkIGFmZmVjdCBob3cgcmVkaXJlY3RzIGFyZSBoYW5kbGVkIGluIHNwZWNpZmljIHR1bm5lbCBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHJldmlldyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UsIGFuZCB3aGF0IHRoZXkgb3BlcmF0ZSBvbi4gSXMgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXQgdG8gdGhpcyBjaGFuZ2U/IEknbSBnb2luZyB0byBzdGFydCBieSByZXZpZXdpbmcgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3QgdGhhdCB0aGUgY29uZGl0aW9uYWwgd2FzIHJlbW92ZWQgYmVjYXVzZSB0aGUgYHR1bm5lbGAgaGFuZGxpbmcgbG9naWMgd2FzIHJlZHVuZGFudCBvciBoYW5kbGVkIGVsc2V3aGVyZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMTo1OC41MjI4NjUxODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzMxOlxcdFxcdFxcdH0gZWxzZVxcbiA3MzI6XFx0XFx0XFx0XFx0c2sgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrKSkge1xcbiA3MzU6XFx0XFx0XFx0XFx0X19JQ01QNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KSxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgSUNNUDZfTUlCX0lORVJST1JTKTtcXG4gNzM3OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNrKTtcXG4gNzM4OlxcdFxcdFxcdH1cXG4gNzM5OlxcdFxcbiA3NDA6XFx0XFx0XFx0dHVubmVsID0gdHJ1ZTtcXG4gNzQxOlxcdFxcdH1cXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0aGFyZGVyciA9IGljbXB2Nl9lcnJfY29udmVydCh0eXBlLCBjb2RlLCBcXHUwMDI2ZXJyKTtcXG4gNzQ0OlxcdFxcdG5wID0gaW5ldDZfc2soc2spO1xcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRpZiAodHlwZSA9PSBJQ01QVjZfUEtUX1RPT0JJRykge1xcbiA3NDc6XFx0XFx0XFx0aWYgKCFpcDZfc2tfYWNjZXB0X3BtdHUoc2spKVxcbiA3NDg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc0OTpcXHRcXHRcXHRpcDZfc2tfdXBkYXRlX3BtdHUoc2tiLCBzaywgaW5mbyk7XFxuIDc1MDpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG5wLVxcdTAwM2VwbXR1ZGlzYykgIT0gSVBWNl9QTVRVRElTQ19ET05UKVxcbiA3NTE6XFx0XFx0XFx0XFx0aGFyZGVyciA9IDE7XFxuIDc1MjpcXHRcXHR9XFxuIDc1MzpcXHRcXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xcbiA3NTQ6XFx0XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbiA3NTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc1NjpcXHRcXHR9XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdC8qIFR1bm5lbHMgZG9uJ3QgaGF2ZSBhbiBhcHBsaWNhdGlvbiBzb2NrZXQ6IGRvbid0IHBhc3MgZXJyb3JzIGJhY2sgKi9cXG4gNzU5OlxcdFxcdGlmICh0dW5uZWwpIHtcXG4gNzYwOlxcdFxcdFxcdGlmICh1ZHBfc2soc2spLVxcdTAwM2VlbmNhcF9lcnJfcmN2KVxcbiA3NjE6XFx0XFx0XFx0XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfZXJyX3Jjdihzaywgc2tiLCBlcnIsIHVoLVxcdTAwM2VkZXN0LFxcbiA3NjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBudG9obChpbmZvKSwgKHU4ICopKHVoKzEpKTtcXG4gNzYzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NjQ6XFx0XFx0fVxcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAoIWluZXQ2X3Rlc3RfYml0KFJFQ1ZFUlI2LCBzaykpIHtcXG4gNzY3OlxcdFxcdFxcdGlmICghaGFyZGVyciB8fCBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbiA3Njg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc2OTpcXHRcXHR9IGVsc2Uge1xcbiA3NzA6XFx0XFx0XFx0aXB2Nl9pY21wX2Vycm9yKHNrLCBza2IsIGVyciwgdWgtXFx1MDAzZWRlc3QsIG50b2hsKGluZm8pLCAodTggKikodWgrMSkpO1xcbiA3NzE6XFx0XFx0fVxcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRzay1cXHUwMDNlc2tfZXJyID0gZXJyO1xcbiA3NzQ6XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gNzc1OlxcdG91dDpcXG4gNzc2OlxcdFxcdHJldHVybiAwO1xcbiA3Nzc6XFx0fVxcbiA3Nzg6XFx0XFxuIDc3OTpcXHRzdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMxOjU4LjUyMjk3OTI2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDkzNDUwNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gSVB2NiBSZWRpcmVjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIElQdjYgcmVkaXJlY3Rpb24sIGFuZCB0aGUgZGVmaW5pdGlvbnMgb2YgYGlwNl9za19yZWRpcmVjdGAgYW5kIGBpcDZfcmVkaXJlY3RgIGhhdmUgYmVlbiByYXR0bGluZyBhcm91bmQgaW4gbXkgaGVhZC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkndmUgZ290IHRoZW0gc3RyYWlnaHQsIHRoYXQgbXkgdW5kZXJzdGFuZGluZyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIHdheSB0aGV5J3JlIGltcGxlbWVudGVkLiBUaGUgaW50cmljYWNpZXMgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgcmVkaXJlY3QgcHJvY2Vzc2luZyBjYW4gYmUgc28gc3VidGx5IGRpZmZlcmVudCwgYW5kIGEgbWlzdW5kZXJzdGFuZGluZyBoZXJlIHdvdWxkIGNhdXNlIHJlYWwgaGVhZGFjaGVzIGxhdGVyLiBUaGlzIGlzIGRlZmluaXRlbHkgb25lIG9mIHRob3NlIHRpbWVzIHdoZXJlIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGFuZCBjb25maXJtIHRoYXQgdGhlIHRoZW9yZXRpY2FsIGFuZCB0aGUgcHJhY3RpY2FsIGxpbmUgdXAuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZGVmaW5pdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMyOjAyLjAxNjQzNDE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3OTk2MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9za19yZWRpcmVjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0yMTE9dm9pZCBpcDZfcmVkaXJlY3Rfbm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgaW50IG9pZik7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjEyOnZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjEzLVxcbi0tXFxubmV0L2lwdjYvcmF3LmM9Mjk4PXN0YXRpYyB2b2lkIHJhd3Y2X2VycihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0zMTktXFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcXG5uZXQvaXB2Ni9yYXcuYzozMjA6XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbm5ldC9pcHY2L3Jhdy5jLTMyMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyMzg9dm9pZCBpcDZfcmVkaXJlY3Rfbm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgaW50IG9pZilcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI1NS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNTY6dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI1Ny17XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz03MDQ9c3RhdGljIGludCB1ZHB2Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy03NTMtXFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcXG5uZXQvaXB2Ni91ZHAuYzo3NTQ6XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbm5ldC9pcHY2L3VkcC5jLTc1NS1cXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzI6MDMuODk0NDM5NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc1NDk2Njc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgUmVkaXJlY3QgTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggSVB2NiByZWRpcmVjdHMsIHNwZWNpZmljYWxseSBob3cgYGlwNl9za19yZWRpcmVjdGAgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQgbWUgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUg4oCTIHRoYXQgd291bGQgYmUgYG5ldC9pcHY2L3JvdXRlLmNgLiBSaWdodCwgSSByZW1lbWJlciB0aGUgZ2VuZXJhbCBsYXlvdXQgb2YgdGhhdCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAzMjU2LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlzc2VjdCB0aGUgYmVoYXZpb3IgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGltZSB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgcm91dGluZyBkZWNpc2lvbnMuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIHJldmVhbHMgc29tZXRoaW5nIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzI6MDYuNjQ5NDA4MjQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MTIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNDU6XFx0XFx0XFx0LmZsb3dpNl9vaWYgPSBvaWYsXFxuMzI0NjpcXHRcXHRcXHQuZGFkZHIgPSBtc2ctXFx1MDAzZWRlc3QsXFxuMzI0NzpcXHRcXHRcXHQuc2FkZHIgPSBpcGgtXFx1MDAzZWRhZGRyLFxcbjMyNDg6XFx0XFx0XFx0LmZsb3dpNl91aWQgPSBzb2NrX25ldF91aWQobmV0LCBOVUxMKSxcXG4zMjQ5OlxcdFxcdH07XFxuMzI1MDpcXHRcXG4zMjUxOlxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9yZWRpcmVjdChuZXQsIFxcdTAwMjZmbDYsIHNrYiwgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbjMyNTI6XFx0XFx0cnQ2X2RvX3JlZGlyZWN0KGRzdCwgTlVMTCwgc2tiKTtcXG4zMjUzOlxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuMzI1NDpcXHR9XFxuMzI1NTpcXHRcXG4zMjU2OlxcdHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4zMjU3OlxcdHtcXG4zMjU4OlxcdFxcdGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsXFxuMzI1OTpcXHRcXHRcXHQgICAgIFJFQURfT05DRShzay1cXHUwMDNlc2tfbWFyayksIHNrX3VpZChzaykpO1xcbjMyNjA6XFx0fVxcbjMyNjE6XFx0XFxuMzI2MjpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuMzI2MzpcXHR7XFxuMzI2NDpcXHRcXHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xcbjMyNjU6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjMyNjY6XFx0XFxuMzI2NzpcXHRcXHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcXG4zMjY4OlxcdFxcbjMyNjk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjMyNzA6XFx0XFxuMzI3MTpcXHRcXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcXG4zMjcyOlxcdFxcdG10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LFxcbjMyNzM6XFx0XFx0XFx0ICAgIFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzKSk7XFxuMzI3NDpcXHRcXG4zMjc1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjMyNzY6XFx0XFxuMzI3NzpcXHRcXHQvKlxcbjMyNzg6XFx0XFx0ICogTWF4aW1hbCBub24tanVtYm8gSVB2NiBwYXlsb2FkIGlzIElQVjZfTUFYUExFTiBhbmRcXG4zMjc5OlxcdFxcdCAqIGNvcnJlc3BvbmRpbmcgTVNTIGlzIElQVjZfTUFYUExFTiAtIHRjcF9oZWFkZXJfc2l6ZS5cXG4zMjgwOlxcdFxcdCAqIExpbWl0IHRoZSBkZWZhdWx0IE1TUyB0byBHU09fQllfRlJBR1MgLSAxIHRvIGF2b2lkXFxuMzI4MTpcXHRcXHQgKiBjb2xsaXNpb24gd2l0aCB0aGUgR1NPX0JZX0ZSQUdTIG1hZ2ljIHZhbHVlICgweEZGRkYpLlxcbjMyODI6XFx0XFx0ICovXFxuMzI4MzpcXHRcXHRpZiAobXR1IFxcdTAwM2UgSVBWNl9NQVhQTEVOIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKVxcbjMyODQ6XFx0XFx0XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBJUFY2X01BWFBMRU4sIEdTT19CWV9GUkFHUyAtIDEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMjowNi42NDk3NzE0MzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ1NTc0Nzk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgUmVkaXJlY3QgTG9naWMgYW5kIEl0cyBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaXMgdGhlIHRhcmdldCBmdW5jdGlvbiBoZXJlLCBhbmQgaXQgY2FsbHMgYGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbWFyayksIHNrX3VpZChzaykpYC4gVGhlIGtleSBpcyBpbiBgdWRwdjZfZXJyYCwgd2hlcmUgdGhlcmUgd2FzIHByZXZpb3VzbHkgYSBjb25kaXRpb25hbCBjaGVjayBmb3IgYHR1bm5lbGAuIElmIGB0dW5uZWxgIHdhcyB0cnVlLCBpdCB3YXMgY2FsbGluZyBgaXA2X3JlZGlyZWN0YCBkaXJlY3RseSB3aXRoIGBpbmV0Nl9paWYoc2tiKWAsIHdoaWNoIHdlIHNlZSBpcyBlcXVpdmFsZW50IHRvIGBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXhgLiBOb3csIHRoZSBwYXRjaCBzdHJlYW1saW5lcyB0aGlzIGJ5IGFsd2F5cyBjYWxsaW5nIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgLiBTbywgdGhlIGxvZ2ljIGlzIGJlaW5nIGNvbnNvbGlkYXRlZCB0byBjYWxsIHRoZSBzYW1lIGJhc2UgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOL0tBU0FOIGNyaXRlcmlhLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpc24ndCBpbnRyb2R1Y2luZyBhbnkgbmV3IHJpc2tzLlxuKiAgIEFyZSB3ZSBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyBObywgbm90IGhlcmUuXG4qICAgQXJlIHdlIGludHJvZHVjaW5nIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLlxuKiAgIEFyZSB3ZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyBOby5cbiogICBBcmUgd2UgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyBObyBhZ2Fpbi5cbiogICBJcyB0aGVyZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGluZm8tbGVha3M/IEl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0LiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHJlbW92aW5nIHJlZHVuZGFudCBicmFuY2hpbmcgYW5kIGNhbGxpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgdW5jb25kaXRpb25hbGx5LiBObyBhbGxvY2F0aW9uLCBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHJlYWRzLiBJdCBpcyBhbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2VsZi1jb250YWluZWQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MganVzdCBhIHJlZmFjdG9yaW5nIGZvciBiZXR0ZXIgY29kZSBmbG93LlxuXG5JJ2xsIGp1c3QgZG8gYSBxdWljaywgZmluYWwgZG91YmxlIGNoZWNrLCBhbmQgdGhlbiBpdCdzIHRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIyNSwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMjoxMi4xMDU1MjE5MzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgSVB2NiBVRFAgSUNNUCByZWRpcmVjdCBwcm9jZXNzaW5nIGluIGB1ZHB2Nl9lcnIoKWAgYnkgdW5jb25kaXRpb25hbGx5IGludm9raW5nIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgIGluc3RlYWQgb2YgYnJhbmNoaW5nIG9uIGB0dW5uZWxgIHRvIGNhbGwgYGlwNl9yZWRpcmVjdCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgY29udHJvbCBmbG93IGFuZCByb3V0ZSByZWRpcmVjdCBoYW5kbGluZyBmb3IgSUNNUHY2IHJlZGlyZWN0IG1lc3NhZ2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYnVmZmVyIGJvdW5kcywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyBJUHY2IFVEUCBJQ01QIHJlZGlyZWN0IHByb2Nlc3NpbmcgaW4gYHVkcHY2X2VycigpYCBieSB1bmNvbmRpdGlvbmFsbHkgaW52b2tpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaW5zdGVhZCBvZiBicmFuY2hpbmcgb24gYHR1bm5lbGAgdG8gY2FsbCBgaXA2X3JlZGlyZWN0KClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjv627[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 14:11:23 +0000 UTC FinishedAt: 2026-09-07 14:32:13 +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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "8bd095f3-71c4-4e5f-90e9-3072cb4f6563" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "udpv6_err", "ip6_sk_redirect", "ip6_redirect" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHB2Nl9lcnImIzM0OywKICAgICYjMzQ7aXA2X3NrX3JlZGlyZWN0JiMzNDssCiAgICAmIzM0O2lwNl9yZWRpcmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgSVB2NiBVRFAgSUNNUCByZWRpcmVjdCBwcm9jZXNzaW5nIGluIGB1ZHB2Nl9lcnIoKWAgYnkgdW5jb25kaXRpb25hbGx5IGludm9raW5nIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgIGluc3RlYWQgb2YgYnJhbmNoaW5nIG9uIGB0dW5uZWxgIHRvIGNhbGwgYGlwNl9yZWRpcmVjdCgpYC5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcm91dGUgcmVkaXJlY3QgaGFuZGxpbmcgZm9yIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBib3VuZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVB2NiBVRFAgc3RhY2sgKHVkcHY2X2VycikgYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwtY2FzZWQgdHVubmVsIGNoZWNrIGZvciBORElTQ19SRURJUkVDVCBhbmQgcm91dGluZyByZWRpcmVjdCBoYW5kbGluZyBkaXJlY3RseSB2aWEgaXA2X3NrX3JlZGlyZWN0KCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBwcm9jZXNzZXMgSUNNUHY2IHJlZGlyZWN0IG1lc3NhZ2VzIGZvciBVRFAgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzNWQ0MDBkMjhhNjVmODAwMzRlZTc2MzA1YWJkMDgyOWExNzRlYTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjMwOjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLjU5Zjk4NzJjMzU1MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmNcbkBAIC03NTEsMTMgJiM0Mzs3NTEsNyBAQCBzdGF0aWMgaW50IHVkcHY2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCxcbiBcdFx0XHRoYXJkZXJyID0gMTtcbiBcdH1cbiBcdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XG4tXHRcdGlmICh0dW5uZWwpIHtcbi1cdFx0XHRpcDZfcmVkaXJlY3Qoc2tiLCBzb2NrX25ldChzayksIGluZXQ2X2lpZihza2IpLFxuLVx0XHRcdFx0ICAgICBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbWFyayksXG4tXHRcdFx0XHQgICAgIHNrX3VpZChzaykpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbi1cdFx0fVxuJiM0MztcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwdjZfZXJyJiMzNDssCiAgICAmIzM0O2lwNl9za19yZWRpcmVjdCYjMzQ7LAogICAgJiMzNDtpcDZfcmVkaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElQdjYgVURQIHN0YWNrICh1ZHB2Nl9lcnIpIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsLWNhc2VkIHR1bm5lbCBjaGVjayBmb3IgTkRJU0NfUkVESVJFQ1QgYW5kIHJvdXRpbmcgcmVkaXJlY3QgaGFuZGxpbmcgZGlyZWN0bHkgdmlhIGlwNl9za19yZWRpcmVjdCgpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgcHJvY2Vzc2VzIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcyBmb3IgVURQIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMzVkNDAwZDI4YTY1ZjgwMDM0ZWU3NjMwNWFiZDA4MjlhMTc0ZWEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNDozMDo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggOTM0NzhkMWFkNTc2OS4uNTlmOTg3MmMzNTUyMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdWRwLmMKQEAgLTc1MSwxMyAmIzQzOzc1MSw3IEBAIHN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAogCQkJaGFyZGVyciA9IDE7CiAJfQogCWlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7Ci0JCWlmICh0dW5uZWwpIHsKLQkJCWlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksCi0JCQkJICAgICBSRUFEX09OQ0Uoc2stJmd0O3NrX21hcmspLAotCQkJCSAgICAgc2tfdWlkKHNrKSk7Ci0JCX0gZWxzZSB7Ci0JCQlpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzayk7Ci0JCX0KJiM0MzsJCWlwNl9za19yZWRpcmVjdChza2IsIHNrKTsKIAkJZ290byBvdXQ7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBVRFB2NiBFcnJvciBIYW5kbGluZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBgbmV0L2lwdjYvdWRwLmM6NzUxYC4gTGV0JiMzOTtzIGdyYWIgdGhlIGRpZmYgYW5kIGdpdmUgdGhhdCBzZWN0aW9uIGEgY2xvc2UgcmVhZC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUgb2YgY29kZS4gTGlrZWx5LCB0aGVyZSYjMzk7cyBzb21lIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIHBsYXkgdGhlcmUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB1ZHB2Nl9lcnJgIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHBva2UgYXJvdW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgZXJyb3JzLCBhbmQgYWxzbyB0byBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwIHdpdGggYHVkcHY2X2VycmAgaXMuIE15IGdvYWwgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IHRoaXMgcGFydGljdWxhciBhcmVhIGhhbmRsZXMgVURQdjYgZXJyb3JzLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvdWRwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdFx0XHRcdFx0cmV0dXJuIDA7XG4gNzMxOlx0XHRcdH0gZWxzZVxuIDczMjpcdFx0XHRcdHNrID0gRVJSX1BUUigtRU5PRU5UKTtcbiA3MzM6XHRcbiA3MzQ6XHRcdFx0aWYgKElTX0VSUihzaykpIHtcbiA3MzU6XHRcdFx0XHRfX0lDTVA2X0lOQ19TVEFUUyhuZXQsIF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldiksXG4gNzM2Olx0XHRcdFx0XHRcdCAgSUNNUDZfTUlCX0lORVJST1JTKTtcbiA3Mzc6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihzayk7XG4gNzM4Olx0XHRcdH1cbiA3Mzk6XHRcbiA3NDA6XHRcdFx0dHVubmVsID0gdHJ1ZTtcbiA3NDE6XHRcdH1cbiA3NDI6XHRcbiA3NDM6XHRcdGhhcmRlcnIgPSBpY21wdjZfZXJyX2NvbnZlcnQodHlwZSwgY29kZSwgXHUwMDI2ZXJyKTtcbiA3NDQ6XHRcdG5wID0gaW5ldDZfc2soc2spO1xuIDc0NTpcdFxuIDc0NjpcdFx0aWYgKHR5cGUgPT0gSUNNUFY2X1BLVF9UT09CSUcpIHtcbiA3NDc6XHRcdFx0aWYgKCFpcDZfc2tfYWNjZXB0X3BtdHUoc2spKVxuIDc0ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDc0OTpcdFx0XHRpcDZfc2tfdXBkYXRlX3BtdHUoc2tiLCBzaywgaW5mbyk7XG4gNzUwOlx0XHRcdGlmIChSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpICE9IElQVjZfUE1UVURJU0NfRE9OVClcbiA3NTE6XHRcdFx0XHRoYXJkZXJyID0gMTtcbiA3NTI6XHRcdH1cbiA3NTM6XHRcdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XG4gNzU0Olx0XHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbiA3NTU6XHRcdFx0Z290byBvdXQ7XG4gNzU2Olx0XHR9XG4gNzU3Olx0XG4gNzU4Olx0XHQvKiBUdW5uZWxzIGRvbiYjMzk7dCBoYXZlIGFuIGFwcGxpY2F0aW9uIHNvY2tldDogZG9uJiMzOTt0IHBhc3MgZXJyb3JzIGJhY2sgKi9cbiA3NTk6XHRcdGlmICh0dW5uZWwpIHtcbiA3NjA6XHRcdFx0aWYgKHVkcF9zayhzayktXHUwMDNlZW5jYXBfZXJyX3JjdilcbiA3NjE6XHRcdFx0XHR1ZHBfc2soc2spLVx1MDAzZWVuY2FwX2Vycl9yY3Yoc2ssIHNrYiwgZXJyLCB1aC1cdTAwM2VkZXN0LFxuIDc2MjpcdFx0XHRcdFx0XHRcdCAgbnRvaGwoaW5mbyksICh1OCAqKSh1aCYjNDM7MSkpO1xuIDc2MzpcdFx0XHRnb3RvIG91dDtcbiA3NjQ6XHRcdH1cbiA3NjU6XHRcbiA3NjY6XHRcdGlmICghaW5ldDZfdGVzdF9iaXQoUkVDVkVSUjYsIHNrKSkge1xuIDc2NzpcdFx0XHRpZiAoIWhhcmRlcnIgfHwgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuIDc2ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDc2OTpcdFx0fSBlbHNlIHtcbiA3NzA6XHRcdFx0aXB2Nl9pY21wX2Vycm9yKHNrLCBza2IsIGVyciwgdWgtXHUwMDNlZGVzdCwgbnRvaGwoaW5mbyksICh1OCAqKSh1aCYjNDM7MSkpO1xuIDc3MTpcdFx0fVxuIDc3MjpcdFxuIDc3MzpcdFx0c2stXHUwMDNlc2tfZXJyID0gZXJyO1xuIDc3NDpcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaW1tZWRpYXRlbHkgaHVudCBkb3duIHRoZSBkZWZpbml0aW9uLiBJJiMzOTttIG5vdCBnb2luZyB0byB3YXN0ZSB0aW1lIGd1ZXNzaW5nOyBJIG5lZWQgdG8gc2VlIHRoZSBjb2RlIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbmV0d29ya2luZyBzdGFjaywgc28gdGhlIGRlZmluaXRpb24gd2lsbCBwcm92aWRlIHRoZSBkZXRhaWxzIEkgbmVlZC4gT25jZSBJJiMzOTt2ZSBmb3VuZCBpdCwgSSBjYW4gYmVnaW4gdG8gbG9vayBhdCBpdCBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3NrX3JlZGlyZWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTIxMT12b2lkIGlwNl9yZWRpcmVjdF9ub19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCBpbnQgb2lmKTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjIxMjp2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjEzLVxuLS1cbm5ldC9pcHY2L3Jhdy5jPTI5OD1zdGF0aWMgdm9pZCByYXd2Nl9lcnIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3Jhdy5jLTMxOS1cdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XG5uZXQvaXB2Ni9yYXcuYzozMjA6XHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbm5ldC9pcHY2L3Jhdy5jLTMyMS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MzIzOD12b2lkIGlwNl9yZWRpcmVjdF9ub19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCBpbnQgb2lmKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzI1NS1cbm5ldC9pcHY2L3JvdXRlLmM6MzI1Njp2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNTcte1xuLS1cbm5ldC9pcHY2L3VkcC5jPTcwND1zdGF0aWMgaW50IHVkcHY2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCxcbi0tXG5uZXQvaXB2Ni91ZHAuYy03NTMtXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xubmV0L2lwdjYvdWRwLmM6NzU0Olx0XHRpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzayk7XG5uZXQvaXB2Ni91ZHAuYy03NTUtXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBJUHY2IFJvdXRpbmcgUmVkaXJlY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBJUHY2IHJlZGlyZWN0cyB3b3JrIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaGFuZGxpbmcgb2Ygc29ja2V0LWxldmVsIHJlZGlyZWN0cy4gVGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2lwdjYvcm91dGUuY2AuIFRoZSBmdW5jdGlvbiBJJiMzOTttIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIGlzIGBpcDZfc2tfcmVkaXJlY3RgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGtleSB0byBkaWFnbm9zaW5nIGFueSBvZGRpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIHN0ZWVycyBJUHY2IHRyYWZmaWMgYmFzZWQgb24gSUNNUHY2IHJlZGlyZWN0cy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBhIHJlZGlyZWN0LCBob3cgdGhlIHJlbGV2YW50IHJvdXRpbmcgdGFibGUgZW50cmllcyBhcmUgdXBkYXRlZCwgYW5kIHRoZSBsb2dpYyBhcm91bmQgZXJyb3IgaGFuZGxpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyNTA6XHRcbjMyNTE6XHRcdGRzdCA9IGlwNl9yb3V0ZV9yZWRpcmVjdChuZXQsIFx1MDAyNmZsNiwgc2tiLCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuMzI1MjpcdFx0cnQ2X2RvX3JlZGlyZWN0KGRzdCwgTlVMTCwgc2tiKTtcbjMyNTM6XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4zMjU0Olx0fVxuMzI1NTpcdFxuMzI1NjpcdHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbjMyNTc6XHR7XG4zMjU4Olx0XHRpcDZfcmVkaXJlY3Qoc2tiLCBzb2NrX25ldChzayksIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCxcbjMyNTk6XHRcdFx0ICAgICBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbWFyayksIHNrX3VpZChzaykpO1xuMzI2MDpcdH1cbjMyNjE6XHRcbjMyNjI6XHRzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4zMjYzOlx0e1xuMzI2NDpcdFx0dW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTtcbjMyNjU6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjMyNjY6XHRcbjMyNjc6XHRcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbjMyNjg6XHRcbjMyNjk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTI4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IFVEUCBFcnJvciBIYW5kbGluZyBhbmQgSUNNUHY2IFJlZGlyZWN0cyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZnV6ei13b3J0aHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHNpbXBsaWZ5aW5nIGhvdyBJUHY2IHJlZGlyZWN0cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXJlJiMzOTtzIGEgVURQIGVycm9yLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaXMgbm93IGNvbnNpc3RlbnRseSBjYWxsZWQsIHJlcGxhY2luZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHdpdGggYGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksIFJFQURfT05DRShzay0mZ3Q7c2tfbWFyayksIHNrX3VpZChzaykpYCBpbiBzcGVjaWZpYyBjYXNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBzaW1wbGlmaWNhdGlvbiBoYXMgaW50cm9kdWNlZCBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcy4KCk15IGZpcnN0IHRob3VnaHQgaXMgYXJvdW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGluZXQ2X2lpZihza2IpYCBhbmQgc29tZXRoaW5nIGxpa2UgYHNrYi0mZ3Q7ZGV2LSZndDtpZmluZGV4YC4gSXMgdGhlIHJlcGxhY2VtZW50IHNlbWFudGljYWxseSBlcXVpdmFsZW50PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaW5kZXggZGVyaXZhdGlvbiBsb2dpYyBpcyBjb3JyZWN0IGFmdGVyIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBhbmQgc2VlIGlmIHRoZXNlIGFyZSBqdXN0IGRpZmZlcmVudCB3YXlzIG9mIGV4cHJlc3NpbmcgdGhlIHNhbWUgdGhpbmcsIG9yIGlmIHRoZXJlJiMzOTtzIGEgc3VidGxlIGRpZmZlcmVuY2UgcmVsYXRlZCB0byB0aGUgaW50ZXJmYWNlIElELCBvciBpZiBhbnkgZWFybGllciBjbGVhbnVwLCBvciBjb252ZXJzaW9uIG9mIGBJUDZDQihza2IpLSZndDtpaWZgIHBsYXlzIGEgcGFydCBoZXJlLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4gSXQmIzM5O3MgY29yZSBuZXR3b3JraW5nIGNvZGUg4oCTIElQdjYgVURQIGVycm9yIGhhbmRsaW5nIGFuZCBJQ01QdjYgcmVkaXJlY3QgcHJvY2Vzc2luZy4gQWJzb2x1dGVseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHNvY2tldHMsIHR1bm5lbHMsIHRhcHMsIGxvb3BiYWNrLCBgc2VuZG1zZ2AsIElDTVB2NiBtZXNzYWdlcywgZXRjLiBTaW5jZSB0aGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nLCB0aGF0JiMzOTtzIGEgYmlnIGdyZWVuIGxpZ2h0LgoKQWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIHRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIG1vZGlmeWluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGluIGNvcmUgbmV0d29ya2luZyBtZWFucyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoYXQmIzM5O3MgYSBjbGVhciB3aW4uCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMgYW5kIGVuYWJsZSBjb25maWd1cmF0aW9ucy4gSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHNvbWUga2V5IGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQgb3IgZGlyZWN0bHkgaW52b2x2ZWQ6IGB1ZHB2Nl9lcnJgLCBgaXA2X3NrX3JlZGlyZWN0YCwgYW5kIGBpcDZfcmVkaXJlY3RgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdWl0YWJsZSBhcyBGb2N1c1N5bWJvbHMsIGFuZCBpZiBgdWRwdjZfZXJyYCBpbiBwYXJ0aWN1bGFyIGlzIGEgdmFsaWQgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIGFsc28gY2hlY2sgYG5ldC9pcHY2L3VkcC5jYCBhbmQgdXNlIGBnaXQgZ3JlcGAgdG8gZmluZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgYnJlYWR0aCBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRvIHRhcmdldCBmdXp6aW5nIGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHB2Nl9lcnImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvdWRwLmM9NjM5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX191ZHA2X2xpYl9lcnJfZW5jYXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L3VkcC5jLTY5Mi1cbm5ldC9pcHY2L3VkcC5jOjY5MzpzdGF0aWMgdm9pZCB1ZHB2Nl9lcnJfdXBkYXRlX2V4Y2VwdGlvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni91ZHAuYy02OTQtXHRcdFx0XHQgICAgICAgdTggdHlwZSwgX19iZTMyIGluZm8pXG4tLVxubmV0L2lwdjYvdWRwLmMtNzAzLVxubmV0L2lwdjYvdWRwLmM6NzA0OnN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxubmV0L2lwdjYvdWRwLmMtNzA1LVx0XHQgICAgIHU4IHR5cGUsIHU4IGNvZGUsIGludCBvZmZzZXQsIF9fYmUzMiBpbmZvKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTcxNi1cbm5ldC9pcHY2L3VkcC5jOjcxNzpcdHVkcHY2X2Vycl91cGRhdGVfZXhjZXB0aW9uKG5ldCwgc2tiLCB0eXBlLCBpbmZvKTtcbm5ldC9pcHY2L3VkcC5jLTcxOC1cbi0tXG5uZXQvaXB2Ni91ZHAuYz0xOTQ2PWludCBfX2luaXQgdWRwdjZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTE5NTEtXHRcdC5oYW5kbGVyICAgICA9IHVkcHY2X3Jjdixcbm5ldC9pcHY2L3VkcC5jOjE5NTI6XHRcdC5lcnJfaGFuZGxlciA9IHVkcHY2X2Vycixcbm5ldC9pcHY2L3VkcC5jLTE5NTMtXHRcdC5mbGFnc1x0ICAgICA9IElORVQ2X1BST1RPX05PUE9MSUNZIHwgSU5FVDZfUFJPVE9fRklOQUwsXG4tLVxubmV0L3NjdHAvaXB2Ni5jPTE5MD1pbnQgc2N0cF91ZHBfdjZfZXJyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvc2N0cC9pcHY2LmMtMjA3LVx0aWYgKGhkci1cdTAwM2VpY21wNl90eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XG5uZXQvc2N0cC9pcHY2LmM6MjA4Olx0XHQvKiBjYW4mIzM5O3QgYmUgaGFuZGxlZCB3aXRob3V0IG91dGVyIGlwNmhkciBrbm93biwgbGVhdmUgaXQgdG8gdWRwdjZfZXJyICovXG5uZXQvc2N0cC9pcHY2LmMtMjA5LVx0XHRzY3RwX2Vycl9maW5pc2goc2ssIHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODI5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIElQdjYgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCB3aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjYgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgS2NvbmZpZyBzeW1ib2wgaXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5ICplbmFibGluZyogSVB2NiBzdXBwb3J0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIHZhcmlhYmxlIHRoYXQgY29udHJvbHMgd2hldGhlciB0aGUgSVB2NiBzdGFjayBpcyBidWlsdCBpbiwgb3IgYXMgYSBtb2R1bGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIG5hbWVkLCBwZXJoYXBzLCBgQ09ORklHX0lQVjZgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gRGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBJJiMzOTttIHdvcmtpbmcgd2l0aCwgdGhlcmUgbWlnaHQgYWxzbyBiZSByZWxhdGVkIEtjb25maWcgZW50cmllcyBmb3Igc3BlY2lmaWMgSVB2NiBmZWF0dXJlcyBvciBzdWItY29tcG9uZW50cyB0aGF0IEkmIzM5O2xsIHdhbnQgdG8gaW5zcGVjdCBhdCB0aGUgc2FtZSB0aW1lLCBpbiBjYXNlIEkgbmVlZCB0byBlbmFibGUgYSBwYXJ0aWN1bGFyIGZlYXR1cmUuIEkgbmVlZCB0byBtYXAgdGhlIHN5bWJvbCB0byB0aGUgY29uZmlndXJhdGlvbiBVSSB0byBjb25maWd1cmUgdGhlIHN5bWJvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1JpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBJUHY2IG1vZHVsZSBpcyBidWlsdC4mIzM0OyBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NiBwcm90b2NvbCBzdGFjaywgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIGFuZCBvYmplY3QgZmlsZSBkZWZpbml0aW9ucy4gS25vd2luZyB0aGlzLCBJIGV4cGVjdCB0byBmaW5kIHRoaXMgZmlsZSBpcyBwaXZvdGFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBudWFuY2VzIG9mIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIGtlcm5lbCB2ZXJzaW9uLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGFueSBwYXJ0aWN1bGFybHkgY2xldmVyIGJ1aWxkIHRyaWNrcyBoZXJlLCBhbnkgY3VzdG9tIG1hY3JvcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgb3Iga2VybmVsIGNvbmZpZy4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVx0XHRhZGRybGFiZWwubyBcXFxubmV0L2lwdjYvTWFrZWZpbGU6MTA6XHRcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cdFx0cmF3Lm8gaWNtcC5vIG1jYXN0Lm8gcmVhc3NlbWJseS5vIHRjcF9pcHY2Lm8gcGluZy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODYKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgdWRwLmNgIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdWRwLmNgIGZpbGUgYW5kIGl0JiMzOTtzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfSVBWNmAuIE1ha2VzIHNlbnNlLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBkZWZpbml0ZWx5IGBJUFY2YC4gTm93LCB3aGF0IGFyZSB0aGUgY3J1Y2lhbCBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgYXJlYT8gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYHVkcHY2X2VycmAsIGBpcDZfc2tfcmVkaXJlY3RgLCBhbmQgYGlwNl9yZWRpcmVjdGAgaW4gbWluZC4KClRpbWUgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSBldmVyeXRoaW5nLiBGaXJzdCwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGFic29sdXRlbHkgYmUgYHRydWVgIOKAkyBpdCYjMzk7cyBjcnVjaWFsIHRvIHRlc3QgdGhpcyBjb2RlLiBOZXh0LCBgRW5hYmxlQ29uZmlnc2AgaXMgc2ltcGx5IGBbJiMzNDtJUFY2JiMzNDtdYCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIE5vdyBmb3IgYEZvY3VzU3ltYm9sc2AuIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgaW5jbHVkaW5nIGJvdGggYHVkcHY2X2VycmAgYW5kIGBpcDZfc2tfcmVkaXJlY3RgLCBzaW5jZSB0aGV5JiMzOTtyZSBjb3JlIHRvIHRoZSBwYXRjaCwgb3IgSSBtaWdodCBldmVuIHRocm93IGluIGBpcDZfcmVkaXJlY3RgIGZvciBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zLgoKTXkgcmVhc29uaW5nPyBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgSVB2NiBVRFAgSUNNUCByZWRpcmVjdCBoYW5kbGluZyBpbiBgdWRwdjZfZXJyKClgIGJ5IHRha2luZyBvdXQgYSB0dW5uZWwgYnJhbmNoIGFuZCBkaXJlY3RseSBjYWxsaW5nIGBpcDZfc2tfcmVkaXJlY3QoKWAuIFRoaXMgaGl0cyBjcml0aWNhbCBJUHY2IG5ldHdvcmtpbmcgY29kZSwgd2hpY2ggaXMgcmVhY2hhYmxlIHRocm91Z2ggdXNlci1zcGFjZSBuZXR3b3JrIHNvY2tldHMgYW5kIElDTVB2NiBwYWNrZXQgaGFuZGxpbmcuIFRoaXMgaXMgYSB2ZXJ5IHNlbnNpdGl2ZSBhcmVhLCBzbyBmdWxsIGNvdmVyYWdlIGlzIGVzc2VudGlhbC4KCkFscmlnaHQsIGEgZmluYWwgcXVpY2sgc2NhbiBvZiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLCBhbmQgSSYjMzk7bSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcHY2X2VyciYjMzQ7LAogICAgJiMzNDtpcDZfc2tfcmVkaXJlY3QmIzM0OywKICAgICYjMzQ7aXA2X3JlZGlyZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUHY2IFVEUCBzdGFjayAodWRwdjZfZXJyKSBieSByZW1vdmluZyB0aGUgc3BlY2lhbC1jYXNlZCB0dW5uZWwgY2hlY2sgZm9yIE5ESVNDX1JFRElSRUNUIGFuZCByb3V0aW5nIHJlZGlyZWN0IGhhbmRsaW5nIGRpcmVjdGx5IHZpYSBpcDZfc2tfcmVkaXJlY3QoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHByb2Nlc3NlcyBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMgZm9yIFVEUCBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwdjZfZXJyJiMzNDssCiAgICAmIzM0O2lwNl9za19yZWRpcmVjdCYjMzQ7LAogICAgJiMzNDtpcDZfcmVkaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElQdjYgVURQIHN0YWNrICh1ZHB2Nl9lcnIpIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsLWNhc2VkIHR1bm5lbCBjaGVjayBmb3IgTkRJU0NfUkVESVJFQ1QgYW5kIHJvdXRpbmcgcmVkaXJlY3QgaGFuZGxpbmcgZGlyZWN0bHkgdmlhIGlwNl9za19yZWRpcmVjdCgpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgcHJvY2Vzc2VzIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcyBmb3IgVURQIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIElQdjYgVURQIElDTVAgcmVkaXJlY3QgcHJvY2Vzc2luZyBpbiBgdWRwdjZfZXJyKClgIGJ5IHVuY29uZGl0aW9uYWxseSBpbnZva2luZyBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCBpbnN0ZWFkIG9mIGJyYW5jaGluZyBvbiBgdHVubmVsYCB0byBjYWxsIGBpcDZfcmVkaXJlY3QoKWAuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzNWQ0MDBkMjhhNjVmODAwMzRlZTc2MzA1YWJkMDgyOWExNzRlYTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE0OjMwOjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCA5MzQ3OGQxYWQ1NzY5Li41OWY5ODcyYzM1NTIxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtNzUxLDEzICYjNDM7NzUxLDcgQEAgc3RhdGljIGludCB1ZHB2Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCiAJCQloYXJkZXJyID0gMTsKIAl9CiAJaWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHsKLQkJaWYgKHR1bm5lbCkgewotCQkJaXA2X3JlZGlyZWN0KHNrYiwgc29ja19uZXQoc2spLCBpbmV0Nl9paWYoc2tiKSwKLQkJCQkgICAgIFJFQURfT05DRShzay0mZ3Q7c2tfbWFyayksCi0JCQkJICAgICBza191aWQoc2spKTsKLQkJfSBlbHNlIHsKLQkJCWlwNl9za19yZWRpcmVjdChza2IsIHNrKTsKLQkJfQomIzQzOwkJaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spOwogCQlnb3RvIG91dDsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRFB2NiBFcnJvciBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBkaWZmIHBvaW50cyB1cyB0byBgbmV0L2lwdjYvdWRwLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB1ZHB2Nl9lcnJgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgY2hhbmdlIGZvY3VzZXMgb24gYSBgTkRJU0NfUkVESVJFQ1RgIGVycm9yIHR5cGUsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgYmxvY2sgZGVhbGluZyB3aXRoIHR1bm5lbHMgaGFzIGJlZW4gc2ltcGxpZmllZC4gVGhlIG9sZGVyIGNvZGUgZGlmZmVyZW50aWF0ZWQgYmV0d2VlbiBgdHVubmVsYCBhbmQgbm8gdHVubmVsIHBhdGhzLCBub3cgY2FsbGluZyBvbmx5IGBpcDZfc2tfcmVkaXJlY3RgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhlIGB1ZHB2Nl9lcnJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBlcnJvciBoYW5kbGluZyBmbG93IHdpdGhpbiBVRFB2Ni4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIG90aGVyIHR5cGVzIG9mIGVycm9ycyBoYW5kbGVkIGhlcmUgdG9vLiBXaGF0IGFyZSB0aGUgY29tbW9uIGVycm9yIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGg/IFRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaXA2X3NrX3JlZGlyZWN0YCBhbmQgYGlwNl9yZWRpcmVjdGAgYWN0dWFsbHkgKmRvKi4gVGhlIHJlbW92YWwgb2YgdGhhdCBjb25kaXRpb25hbCBpbmRpY2F0ZXMgYSBzaWduaWZpY2FudCBzaW1wbGlmaWNhdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyBvbmx5IGBpcDZfc2tfcmVkaXJlY3RgLiBJcyB0aGlzIGNvcnJlY3Q/IERvZXMgYGlwNl9za19yZWRpcmVjdGAgZW5jb21wYXNzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGJvdGggcHJldmlvdXMgYnJhbmNoZXMsIG9yIGhhcyBzb21lIGZ1bmN0aW9uYWxpdHkgYmVlbiBtb3ZlZCBvciByZW1vdmVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciB0aGF0IGNvdWxkIGFmZmVjdCBob3cgcmVkaXJlY3RzIGFyZSBoYW5kbGVkIGluIHNwZWNpZmljIHR1bm5lbCBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHJldmlldyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UsIGFuZCB3aGF0IHRoZXkgb3BlcmF0ZSBvbi4gSXMgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXQgdG8gdGhpcyBjaGFuZ2U/IEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGF0IHRoZSBjb25kaXRpb25hbCB3YXMgcmVtb3ZlZCBiZWNhdXNlIHRoZSBgdHVubmVsYCBoYW5kbGluZyBsb2dpYyB3YXMgcmVkdW5kYW50IG9yIGhhbmRsZWQgZWxzZXdoZXJlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMwOlx0XHRcdFx0XHRyZXR1cm4gMDtcbiA3MzE6XHRcdFx0fSBlbHNlXG4gNzMyOlx0XHRcdFx0c2sgPSBFUlJfUFRSKC1FTk9FTlQpO1xuIDczMzpcdFxuIDczNDpcdFx0XHRpZiAoSVNfRVJSKHNrKSkge1xuIDczNTpcdFx0XHRcdF9fSUNNUDZfSU5DX1NUQVRTKG5ldCwgX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KSxcbiA3MzY6XHRcdFx0XHRcdFx0ICBJQ01QNl9NSUJfSU5FUlJPUlMpO1xuIDczNzpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNrKTtcbiA3Mzg6XHRcdFx0fVxuIDczOTpcdFxuIDc0MDpcdFx0XHR0dW5uZWwgPSB0cnVlO1xuIDc0MTpcdFx0fVxuIDc0MjpcdFxuIDc0MzpcdFx0aGFyZGVyciA9IGljbXB2Nl9lcnJfY29udmVydCh0eXBlLCBjb2RlLCBcdTAwMjZlcnIpO1xuIDc0NDpcdFx0bnAgPSBpbmV0Nl9zayhzayk7XG4gNzQ1Olx0XG4gNzQ2Olx0XHRpZiAodHlwZSA9PSBJQ01QVjZfUEtUX1RPT0JJRykge1xuIDc0NzpcdFx0XHRpZiAoIWlwNl9za19hY2NlcHRfcG10dShzaykpXG4gNzQ4Olx0XHRcdFx0Z290byBvdXQ7XG4gNzQ5Olx0XHRcdGlwNl9za191cGRhdGVfcG10dShza2IsIHNrLCBpbmZvKTtcbiA3NTA6XHRcdFx0aWYgKFJFQURfT05DRShucC1cdTAwM2VwbXR1ZGlzYykgIT0gSVBWNl9QTVRVRElTQ19ET05UKVxuIDc1MTpcdFx0XHRcdGhhcmRlcnIgPSAxO1xuIDc1MjpcdFx0fVxuIDc1MzpcdFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcbiA3NTQ6XHRcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xuIDc1NTpcdFx0XHRnb3RvIG91dDtcbiA3NTY6XHRcdH1cbiA3NTc6XHRcbiA3NTg6XHRcdC8qIFR1bm5lbHMgZG9uJiMzOTt0IGhhdmUgYW4gYXBwbGljYXRpb24gc29ja2V0OiBkb24mIzM5O3QgcGFzcyBlcnJvcnMgYmFjayAqL1xuIDc1OTpcdFx0aWYgKHR1bm5lbCkge1xuIDc2MDpcdFx0XHRpZiAodWRwX3NrKHNrKS1cdTAwM2VlbmNhcF9lcnJfcmN2KVxuIDc2MTpcdFx0XHRcdHVkcF9zayhzayktXHUwMDNlZW5jYXBfZXJyX3Jjdihzaywgc2tiLCBlcnIsIHVoLVx1MDAzZWRlc3QsXG4gNzYyOlx0XHRcdFx0XHRcdFx0ICBudG9obChpbmZvKSwgKHU4ICopKHVoJiM0MzsxKSk7XG4gNzYzOlx0XHRcdGdvdG8gb3V0O1xuIDc2NDpcdFx0fVxuIDc2NTpcdFxuIDc2NjpcdFx0aWYgKCFpbmV0Nl90ZXN0X2JpdChSRUNWRVJSNiwgc2spKSB7XG4gNzY3Olx0XHRcdGlmICghaGFyZGVyciB8fCBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpXG4gNzY4Olx0XHRcdFx0Z290byBvdXQ7XG4gNzY5Olx0XHR9IGVsc2Uge1xuIDc3MDpcdFx0XHRpcHY2X2ljbXBfZXJyb3Ioc2ssIHNrYiwgZXJyLCB1aC1cdTAwM2VkZXN0LCBudG9obChpbmZvKSwgKHU4ICopKHVoJiM0MzsxKSk7XG4gNzcxOlx0XHR9XG4gNzcyOlx0XG4gNzczOlx0XHRzay1cdTAwM2Vza19lcnIgPSBlcnI7XG4gNzc0Olx0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuIDc3NTpcdG91dDpcbiA3NzY6XHRcdHJldHVybiAwO1xuIDc3NzpcdH1cbiA3Nzg6XHRcbiA3Nzk6XHRzdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gSVB2NiBSZWRpcmVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O3ZlIGJlZW4gd29ya2luZyB3aXRoIElQdjYgcmVkaXJlY3Rpb24sIGFuZCB0aGUgZGVmaW5pdGlvbnMgb2YgYGlwNl9za19yZWRpcmVjdGAgYW5kIGBpcDZfcmVkaXJlY3RgIGhhdmUgYmVlbiByYXR0bGluZyBhcm91bmQgaW4gbXkgaGVhZC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGVtIHN0cmFpZ2h0LCB0aGF0IG15IHVuZGVyc3RhbmRpbmcgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSB3YXkgdGhleSYjMzk7cmUgaW1wbGVtZW50ZWQuIFRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSByZWRpcmVjdCBwcm9jZXNzaW5nIGNhbiBiZSBzbyBzdWJ0bHkgZGlmZmVyZW50LCBhbmQgYSBtaXN1bmRlcnN0YW5kaW5nIGhlcmUgd291bGQgY2F1c2UgcmVhbCBoZWFkYWNoZXMgbGF0ZXIuIFRoaXMgaXMgZGVmaW5pdGVseSBvbmUgb2YgdGhvc2UgdGltZXMgd2hlcmUgSSBuZWVkIHRvIHRha2UgYSBxdWljayBzYW5pdHkgY2hlY2sgYW5kIGNvbmZpcm0gdGhhdCB0aGUgdGhlb3JldGljYWwgYW5kIHRoZSBwcmFjdGljYWwgbGluZSB1cC4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZGVmaW5pdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9za19yZWRpcmVjdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0yMTE9dm9pZCBpcDZfcmVkaXJlY3Rfbm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgaW50IG9pZik7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoyMTI6dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIxMy1cbi0tXG5uZXQvaXB2Ni9yYXcuYz0yOTg9c3RhdGljIHZvaWQgcmF3djZfZXJyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9yYXcuYy0zMTktXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xubmV0L2lwdjYvcmF3LmM6MzIwOlx0XHRpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzayk7XG5uZXQvaXB2Ni9yYXcuYy0zMjEtXHRcdHJldHVybjtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyMzg9dm9pZCBpcDZfcmVkaXJlY3Rfbm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgaW50IG9pZilcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNTUtXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNTY6dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjYvcm91dGUuYy0zMjU3LXtcbi0tXG5uZXQvaXB2Ni91ZHAuYz03MDQ9c3RhdGljIGludCB1ZHB2Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXG4tLVxubmV0L2lwdjYvdWRwLmMtNzUzLVx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcbm5ldC9pcHY2L3VkcC5jOjc1NDpcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xubmV0L2lwdjYvdWRwLmMtNzU1LVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBSZWRpcmVjdCBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIElQdjYgcmVkaXJlY3RzLCBzcGVjaWZpY2FsbHkgaG93IGBpcDZfc2tfcmVkaXJlY3RgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0IG1lIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIOKAkyB0aGF0IHdvdWxkIGJlIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gUmlnaHQsIEkgcmVtZW1iZXIgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoYXQgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDMyNTYuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaXNzZWN0IHRoZSBiZWhhdmlvciBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgcm91dGluZyBkZWNpc2lvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiByZXZlYWxzIHNvbWV0aGluZyBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjQ1Olx0XHRcdC5mbG93aTZfb2lmID0gb2lmLFxuMzI0NjpcdFx0XHQuZGFkZHIgPSBtc2ctXHUwMDNlZGVzdCxcbjMyNDc6XHRcdFx0LnNhZGRyID0gaXBoLVx1MDAzZWRhZGRyLFxuMzI0ODpcdFx0XHQuZmxvd2k2X3VpZCA9IHNvY2tfbmV0X3VpZChuZXQsIE5VTEwpLFxuMzI0OTpcdFx0fTtcbjMyNTA6XHRcbjMyNTE6XHRcdGRzdCA9IGlwNl9yb3V0ZV9yZWRpcmVjdChuZXQsIFx1MDAyNmZsNiwgc2tiLCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuMzI1MjpcdFx0cnQ2X2RvX3JlZGlyZWN0KGRzdCwgTlVMTCwgc2tiKTtcbjMyNTM6XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4zMjU0Olx0fVxuMzI1NTpcdFxuMzI1NjpcdHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbjMyNTc6XHR7XG4zMjU4Olx0XHRpcDZfcmVkaXJlY3Qoc2tiLCBzb2NrX25ldChzayksIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCxcbjMyNTk6XHRcdFx0ICAgICBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbWFyayksIHNrX3VpZChzaykpO1xuMzI2MDpcdH1cbjMyNjE6XHRcbjMyNjI6XHRzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4zMjYzOlx0e1xuMzI2NDpcdFx0dW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTtcbjMyNjU6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbjMyNjY6XHRcbjMyNjc6XHRcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbjMyNjg6XHRcbjMyNjk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMyNzA6XHRcbjMyNzE6XHRcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xuMzI3MjpcdFx0bXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsXG4zMjczOlx0XHRcdCAgICBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzKSk7XG4zMjc0Olx0XG4zMjc1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMyNzY6XHRcbjMyNzc6XHRcdC8qXG4zMjc4Olx0XHQgKiBNYXhpbWFsIG5vbi1qdW1ibyBJUHY2IHBheWxvYWQgaXMgSVBWNl9NQVhQTEVOIGFuZFxuMzI3OTpcdFx0ICogY29ycmVzcG9uZGluZyBNU1MgaXMgSVBWNl9NQVhQTEVOIC0gdGNwX2hlYWRlcl9zaXplLlxuMzI4MDpcdFx0ICogTGltaXQgdGhlIGRlZmF1bHQgTVNTIHRvIEdTT19CWV9GUkFHUyAtIDEgdG8gYXZvaWRcbjMyODE6XHRcdCAqIGNvbGxpc2lvbiB3aXRoIHRoZSBHU09fQllfRlJBR1MgbWFnaWMgdmFsdWUgKDB4RkZGRikuXG4zMjgyOlx0XHQgKi9cbjMyODM6XHRcdGlmIChtdHUgXHUwMDNlIElQVjZfTUFYUExFTiAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSlcbjMyODQ6XHRcdFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBJUFY2X01BWFBMRU4sIEdTT19CWV9GUkFHUyAtIDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjI1CgkJCQkJCQlvdXRwdXQ6IDE1MAoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgUmVkaXJlY3QgTG9naWMgYW5kIEl0cyBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCBpcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGhlcmUsIGFuZCBpdCBjYWxscyBgaXA2X3JlZGlyZWN0KHNrYiwgc29ja19uZXQoc2spLCBza2ItJmd0O2Rldi0mZ3Q7aWZpbmRleCwgUkVBRF9PTkNFKHNrLSZndDtza19tYXJrKSwgc2tfdWlkKHNrKSlgLiBUaGUga2V5IGlzIGluIGB1ZHB2Nl9lcnJgLCB3aGVyZSB0aGVyZSB3YXMgcHJldmlvdXNseSBhIGNvbmRpdGlvbmFsIGNoZWNrIGZvciBgdHVubmVsYC4gSWYgYHR1bm5lbGAgd2FzIHRydWUsIGl0IHdhcyBjYWxsaW5nIGBpcDZfcmVkaXJlY3RgIGRpcmVjdGx5IHdpdGggYGluZXQ2X2lpZihza2IpYCwgd2hpY2ggd2Ugc2VlIGlzIGVxdWl2YWxlbnQgdG8gYHNrYi0mZ3Q7ZGV2LSZndDtpZmluZGV4YC4gTm93LCB0aGUgcGF0Y2ggc3RyZWFtbGluZXMgdGhpcyBieSBhbHdheXMgY2FsbGluZyBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYC4gU28sIHRoZSBsb2dpYyBpcyBiZWluZyBjb25zb2xpZGF0ZWQgdG8gY2FsbCB0aGUgc2FtZSBiYXNlIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLgoKTm93LCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOL0tBU0FOIGNyaXRlcmlhLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcy4KKiAgIEFyZSB3ZSBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyBObywgbm90IGhlcmUuCiogICBBcmUgd2UgaW50cm9kdWNpbmcgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCiogICBBcmUgd2UgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8gTm8uCiogICBBcmUgd2UgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyBObyBhZ2Fpbi4KKiAgIElzIHRoZXJlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgaW5mby1sZWFrcz8gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIGl0LiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHJlbW92aW5nIHJlZHVuZGFudCBicmFuY2hpbmcgYW5kIGNhbGxpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgdW5jb25kaXRpb25hbGx5LiBObyBhbGxvY2F0aW9uLCBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHJlYWRzLiBJdCBpcyBhbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2VsZi1jb250YWluZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcgZm9yIGJldHRlciBjb2RlIGZsb3cuCgpJJiMzOTtsbCBqdXN0IGRvIGEgcXVpY2ssIGZpbmFsIGRvdWJsZSBjaGVjaywgYW5kIHRoZW4gaXQmIzM5O3MgdGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIElQdjYgVURQIElDTVAgcmVkaXJlY3QgcHJvY2Vzc2luZyBpbiBgdWRwdjZfZXJyKClgIGJ5IHVuY29uZGl0aW9uYWxseSBpbnZva2luZyBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCBpbnN0ZWFkIG9mIGJyYW5jaGluZyBvbiBgdHVubmVsYCB0byBjYWxsIGBpcDZfcmVkaXJlY3QoKWAuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgSVB2NiBVRFAgSUNNUCByZWRpcmVjdCBwcm9jZXNzaW5nIGluIGB1ZHB2Nl9lcnIoKWAgYnkgdW5jb25kaXRpb25hbGx5IGludm9raW5nIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgIGluc3RlYWQgb2YgYnJhbmNoaW5nIG9uIGB0dW5uZWxgIHRvIGNhbGwgYGlwNl9yZWRpcmVjdCgpYC5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcm91dGUgcmVkaXJlY3QgaGFuZGxpbmcgZm9yIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBib3VuZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMDo0MS44MDQ0NDM2ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDMwMTExNzUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwdjZfZXJyXCIsXG4gICAgXCJpcDZfc2tfcmVkaXJlY3RcIixcbiAgICBcImlwNl9yZWRpcmVjdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyBJUHY2IFVEUCBJQ01QIHJlZGlyZWN0IHByb2Nlc3NpbmcgaW4gYHVkcHY2X2VycigpYCBieSB1bmNvbmRpdGlvbmFsbHkgaW52b2tpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaW5zdGVhZCBvZiBicmFuY2hpbmcgb24gYHR1bm5lbGAgdG8gY2FsbCBgaXA2X3JlZGlyZWN0KClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVB2NiBVRFAgc3RhY2sgKHVkcHY2X2VycikgYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwtY2FzZWQgdHVubmVsIGNoZWNrIGZvciBORElTQ19SRURJUkVDVCBhbmQgcm91dGluZyByZWRpcmVjdCBoYW5kbGluZyBkaXJlY3RseSB2aWEgaXA2X3NrX3JlZGlyZWN0KCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBwcm9jZXNzZXMgSUNNUHY2IHJlZGlyZWN0IG1lc3NhZ2VzIGZvciBVRFAgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzA6NDEuODA0NDUxMTczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwNDY1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMzVkNDAwZDI4YTY1ZjgwMDM0ZWU3NjMwNWFiZDA4MjlhMTc0ZWEzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTQ6MzA6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuY1xcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLjU5Zjk4NzJjMzU1MjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcXG4rKysgYi9uZXQvaXB2Ni91ZHAuY1xcbkBAIC03NTEsMTMgKzc1MSw3IEBAIHN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxcbiBcXHRcXHRcXHRoYXJkZXJyID0gMTtcXG4gXFx0fVxcbiBcXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xcbi1cXHRcXHRpZiAodHVubmVsKSB7XFxuLVxcdFxcdFxcdGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksXFxuLVxcdFxcdFxcdFxcdCAgICAgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19tYXJrKSxcXG4tXFx0XFx0XFx0XFx0ICAgICBza191aWQoc2spKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMwOjQyLjI2NTIwMTI1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDE1Mjg2MzU2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcHY2X2VyclwiLFxuICAgIFwiaXA2X3NrX3JlZGlyZWN0XCIsXG4gICAgXCJpcDZfcmVkaXJlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgSVB2NiBVRFAgc3RhY2sgKHVkcHY2X2VycikgYnkgcmVtb3ZpbmcgdGhlIHNwZWNpYWwtY2FzZWQgdHVubmVsIGNoZWNrIGZvciBORElTQ19SRURJUkVDVCBhbmQgcm91dGluZyByZWRpcmVjdCBoYW5kbGluZyBkaXJlY3RseSB2aWEgaXA2X3NrX3JlZGlyZWN0KCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBwcm9jZXNzZXMgSUNNUHY2IHJlZGlyZWN0IG1lc3NhZ2VzIGZvciBVRFAgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMzVkNDAwZDI4YTY1ZjgwMDM0ZWU3NjMwNWFiZDA4MjlhMTc0ZWEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDozMDo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLjU5Zjk4NzJjMzU1MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuKysrIGIvbmV0L2lwdjYvdWRwLmNcbkBAIC03NTEsMTMgKzc1MSw3IEBAIHN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxuIFx0XHRcdGhhcmRlcnIgPSAxO1xuIFx0fVxuIFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcbi1cdFx0aWYgKHR1bm5lbCkge1xuLVx0XHRcdGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksXG4tXHRcdFx0XHQgICAgIFJFQURfT05DRShzay1cdTAwM2Vza19tYXJrKSxcbi1cdFx0XHRcdCAgICAgc2tfdWlkKHNrKSk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xuLVx0XHR9XG4rXHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMDo0Mi4yNjUyMDI5MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTU5MjY5MTkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgVURQdjYgRXJyb3IgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGBuZXQvaXB2Ni91ZHAuYzo3NTFgLiBMZXQncyBncmFiIHRoZSBkaWZmIGFuZCBnaXZlIHRoYXQgc2VjdGlvbiBhIGNsb3NlIHJlYWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUgb2YgY29kZS4gTGlrZWx5LCB0aGVyZSdzIHNvbWUgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gcGxheSB0aGVyZSwgc28gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgYmVpbmcgaGFuZGxlZC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYHVkcHY2X2VycmAgaW4gdGhpcyBjb250ZXh0LiBJJ2xsIHByb2JhYmx5IGZpcmUgdXAgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBwb2tlIGFyb3VuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGVycm9ycywgYW5kIGFsc28gdG8gc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGB1ZHB2Nl9lcnJgIGlzLiBNeSBnb2FsIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgYXJlYSBoYW5kbGVzIFVEUHY2IGVycm9ycywgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgbmV0d29yayBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzA6NTMuODU3ODk2OTA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzMxOlxcdFxcdFxcdH0gZWxzZVxcbiA3MzI6XFx0XFx0XFx0XFx0c2sgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrKSkge1xcbiA3MzU6XFx0XFx0XFx0XFx0X19JQ01QNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KSxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgSUNNUDZfTUlCX0lORVJST1JTKTtcXG4gNzM3OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNrKTtcXG4gNzM4OlxcdFxcdFxcdH1cXG4gNzM5OlxcdFxcbiA3NDA6XFx0XFx0XFx0dHVubmVsID0gdHJ1ZTtcXG4gNzQxOlxcdFxcdH1cXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0aGFyZGVyciA9IGljbXB2Nl9lcnJfY29udmVydCh0eXBlLCBjb2RlLCBcXHUwMDI2ZXJyKTtcXG4gNzQ0OlxcdFxcdG5wID0gaW5ldDZfc2soc2spO1xcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRpZiAodHlwZSA9PSBJQ01QVjZfUEtUX1RPT0JJRykge1xcbiA3NDc6XFx0XFx0XFx0aWYgKCFpcDZfc2tfYWNjZXB0X3BtdHUoc2spKVxcbiA3NDg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc0OTpcXHRcXHRcXHRpcDZfc2tfdXBkYXRlX3BtdHUoc2tiLCBzaywgaW5mbyk7XFxuIDc1MDpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG5wLVxcdTAwM2VwbXR1ZGlzYykgIT0gSVBWNl9QTVRVRElTQ19ET05UKVxcbiA3NTE6XFx0XFx0XFx0XFx0aGFyZGVyciA9IDE7XFxuIDc1MjpcXHRcXHR9XFxuIDc1MzpcXHRcXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xcbiA3NTQ6XFx0XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbiA3NTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc1NjpcXHRcXHR9XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdC8qIFR1bm5lbHMgZG9uJ3QgaGF2ZSBhbiBhcHBsaWNhdGlvbiBzb2NrZXQ6IGRvbid0IHBhc3MgZXJyb3JzIGJhY2sgKi9cXG4gNzU5OlxcdFxcdGlmICh0dW5uZWwpIHtcXG4gNzYwOlxcdFxcdFxcdGlmICh1ZHBfc2soc2spLVxcdTAwM2VlbmNhcF9lcnJfcmN2KVxcbiA3NjE6XFx0XFx0XFx0XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfZXJyX3Jjdihzaywgc2tiLCBlcnIsIHVoLVxcdTAwM2VkZXN0LFxcbiA3NjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBudG9obChpbmZvKSwgKHU4ICopKHVoKzEpKTtcXG4gNzYzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NjQ6XFx0XFx0fVxcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAoIWluZXQ2X3Rlc3RfYml0KFJFQ1ZFUlI2LCBzaykpIHtcXG4gNzY3OlxcdFxcdFxcdGlmICghaGFyZGVyciB8fCBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbiA3Njg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc2OTpcXHRcXHR9IGVsc2Uge1xcbiA3NzA6XFx0XFx0XFx0aXB2Nl9pY21wX2Vycm9yKHNrLCBza2IsIGVyciwgdWgtXFx1MDAzZWRlc3QsIG50b2hsKGluZm8pLCAodTggKikodWgrMSkpO1xcbiA3NzE6XFx0XFx0fVxcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRzay1cXHUwMDNlc2tfZXJyID0gZXJyO1xcbiA3NzQ6XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzA6NTMuODU4MDA5NDk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1NTA5NTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaW1tZWRpYXRlbHkgaHVudCBkb3duIHRoZSBkZWZpbml0aW9uLiBJJ20gbm90IGdvaW5nIHRvIHdhc3RlIHRpbWUgZ3Vlc3Npbmc7IEkgbmVlZCB0byBzZWUgdGhlIGNvZGUgaXRzZWxmLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIHN0YWNrLCBzbyB0aGUgZGVmaW5pdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGRldGFpbHMgSSBuZWVkLiBPbmNlIEkndmUgZm91bmQgaXQsIEkgY2FuIGJlZ2luIHRvIGxvb2sgYXQgaXQgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMDo1NS44MTMxMDcxNjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxODMxMTk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfc2tfcmVkaXJlY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjExPXZvaWQgaXA2X3JlZGlyZWN0X25vX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBvaWYpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjIxMjp2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIxMy1cXG4tLVxcbm5ldC9pcHY2L3Jhdy5jPTI5OD1zdGF0aWMgdm9pZCByYXd2Nl9lcnIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMzE5LVxcdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XFxubmV0L2lwdjYvcmF3LmM6MzIwOlxcdFxcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcXG5uZXQvaXB2Ni9yYXcuYy0zMjEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjM4PXZvaWQgaXA2X3JlZGlyZWN0X25vX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIGludCBvaWYpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNTUtXFxubmV0L2lwdjYvcm91dGUuYzozMjU2OnZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNTcte1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9NzA0PXN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxcbi0tXFxubmV0L2lwdjYvdWRwLmMtNzUzLVxcdGlmICh0eXBlID09IE5ESVNDX1JFRElSRUNUKSB7XFxubmV0L2lwdjYvdWRwLmM6NzU0OlxcdFxcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcXG5uZXQvaXB2Ni91ZHAuYy03NTUtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMwOjU3LjUzMTQyODQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4MjY0NDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSVB2NiBSb3V0aW5nIFJlZGlyZWN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBJUHY2IHJlZGlyZWN0cyB3b3JrIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaGFuZGxpbmcgb2Ygc29ja2V0LWxldmVsIHJlZGlyZWN0cy4gVGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2lwdjYvcm91dGUuY2AuIFRoZSBmdW5jdGlvbiBJJ20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gaXMgYGlwNl9za19yZWRpcmVjdGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIGRpYWdub3NpbmcgYW55IG9kZGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgc3RlZXJzIElQdjYgdHJhZmZpYyBiYXNlZCBvbiBJQ01QdjYgcmVkaXJlY3RzLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGEgcmVkaXJlY3QsIGhvdyB0aGUgcmVsZXZhbnQgcm91dGluZyB0YWJsZSBlbnRyaWVzIGFyZSB1cGRhdGVkLCBhbmQgdGhlIGxvZ2ljIGFyb3VuZCBlcnJvciBoYW5kbGluZy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMwOjU5LjUxNDA3NjAzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNTA6XFx0XFxuMzI1MTpcXHRcXHRkc3QgPSBpcDZfcm91dGVfcmVkaXJlY3QobmV0LCBcXHUwMDI2Zmw2LCBza2IsIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4zMjUyOlxcdFxcdHJ0Nl9kb19yZWRpcmVjdChkc3QsIE5VTEwsIHNrYik7XFxuMzI1MzpcXHRcXHRkc3RfcmVsZWFzZShkc3QpO1xcbjMyNTQ6XFx0fVxcbjMyNTU6XFx0XFxuMzI1NjpcXHR2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuMzI1NzpcXHR7XFxuMzI1ODpcXHRcXHRpcDZfcmVkaXJlY3Qoc2tiLCBzb2NrX25ldChzayksIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4LFxcbjMyNTk6XFx0XFx0XFx0ICAgICBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX21hcmspLCBza191aWQoc2spKTtcXG4zMjYwOlxcdH1cXG4zMjYxOlxcdFxcbjMyNjI6XFx0c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbjMyNjM6XFx0e1xcbjMyNjQ6XFx0XFx0dW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTtcXG4zMjY1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4zMjY2OlxcdFxcbjMyNjc6XFx0XFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7XFxuMzI2ODpcXHRcXG4zMjY5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzA6NTkuNTE0MzI2MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTg5ODQ4NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUHY2IFVEUCBFcnJvciBIYW5kbGluZyBhbmQgSUNNUHY2IFJlZGlyZWN0cyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6ei13b3J0aHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHNpbXBsaWZ5aW5nIGhvdyBJUHY2IHJlZGlyZWN0cyBhcmUgaGFuZGxlZCB3aGVuIHRoZXJlJ3MgYSBVRFAgZXJyb3IuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBgaXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spYCBpcyBub3cgY29uc2lzdGVudGx5IGNhbGxlZCwgcmVwbGFjaW5nIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgd2l0aCBgaXA2X3JlZGlyZWN0KHNrYiwgc29ja19uZXQoc2spLCBpbmV0Nl9paWYoc2tiKSwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX21hcmspLCBza191aWQoc2spKWAgaW4gc3BlY2lmaWMgY2FzZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgc2ltcGxpZmljYXRpb24gaGFzIGludHJvZHVjZWQgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYXJvdW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGluZXQ2X2lpZihza2IpYCBhbmQgc29tZXRoaW5nIGxpa2UgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleGAuIElzIHRoZSByZXBsYWNlbWVudCBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGluZGV4IGRlcml2YXRpb24gbG9naWMgaXMgY29ycmVjdCBhZnRlciB0aGlzIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBhbmQgc2VlIGlmIHRoZXNlIGFyZSBqdXN0IGRpZmZlcmVudCB3YXlzIG9mIGV4cHJlc3NpbmcgdGhlIHNhbWUgdGhpbmcsIG9yIGlmIHRoZXJlJ3MgYSBzdWJ0bGUgZGlmZmVyZW5jZSByZWxhdGVkIHRvIHRoZSBpbnRlcmZhY2UgSUQsIG9yIGlmIGFueSBlYXJsaWVyIGNsZWFudXAsIG9yIGNvbnZlcnNpb24gb2YgYElQNkNCKHNrYiktXHUwMDNlaWlmYCBwbGF5cyBhIHBhcnQgaGVyZS5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLiBJdCdzIGNvcmUgbmV0d29ya2luZyBjb2RlIOKAkyBJUHY2IFVEUCBlcnJvciBoYW5kbGluZyBhbmQgSUNNUHY2IHJlZGlyZWN0IHByb2Nlc3NpbmcuIEFic29sdXRlbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXRzLCB0dW5uZWxzLCB0YXBzLCBsb29wYmFjaywgYHNlbmRtc2dgLCBJQ01QdjYgbWVzc2FnZXMsIGV0Yy4gU2luY2UgdGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZywgdGhhdCdzIGEgYmlnIGdyZWVuIGxpZ2h0LlxuXG5BY2NvcmRpbmcgdG8gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgdGhlIGZhY3QgdGhhdCB3ZSdyZSBtb2RpZnlpbmcgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIG5ldHdvcmtpbmcgbWVhbnMgYFdvcnRoRnV6emluZyA9IHRydWVgLiBUaGF0J3MgYSBjbGVhciB3aW4uXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZm9jdXMgc3ltYm9scyBhbmQgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCBzb21lIGtleSBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkIG9yIGRpcmVjdGx5IGludm9sdmVkOiBgdWRwdjZfZXJyYCwgYGlwNl9za19yZWRpcmVjdGAsIGFuZCBgaXA2X3JlZGlyZWN0YC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdWl0YWJsZSBhcyBGb2N1c1N5bWJvbHMsIGFuZCBpZiBgdWRwdjZfZXJyYCBpbiBwYXJ0aWN1bGFyIGlzIGEgdmFsaWQgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIGFsc28gY2hlY2sgYG5ldC9pcHY2L3VkcC5jYCBhbmQgdXNlIGBnaXQgZ3JlcGAgdG8gZmluZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgYnJlYWR0aCBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRvIHRhcmdldCBmdXp6aW5nIGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTI4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzE6MDUuMTA0MTc4MDY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzExMzE5NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcHY2X2VyclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni91ZHAuYz02Mzk9c3RhdGljIHN0cnVjdCBzb2NrICpfX3VkcDZfbGliX2Vycl9lbmNhcChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy02OTItXFxubmV0L2lwdjYvdWRwLmM6NjkzOnN0YXRpYyB2b2lkIHVkcHY2X2Vycl91cGRhdGVfZXhjZXB0aW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni91ZHAuYy02OTQtXFx0XFx0XFx0XFx0ICAgICAgIHU4IHR5cGUsIF9fYmUzMiBpbmZvKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtNzAzLVxcbm5ldC9pcHY2L3VkcC5jOjcwNDpzdGF0aWMgaW50IHVkcHY2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCxcXG5uZXQvaXB2Ni91ZHAuYy03MDUtXFx0XFx0ICAgICB1OCB0eXBlLCB1OCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbylcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTcxNi1cXG5uZXQvaXB2Ni91ZHAuYzo3MTc6XFx0dWRwdjZfZXJyX3VwZGF0ZV9leGNlcHRpb24obmV0LCBza2IsIHR5cGUsIGluZm8pO1xcbm5ldC9pcHY2L3VkcC5jLTcxOC1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE5NDY9aW50IF9faW5pdCB1ZHB2Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTUxLVxcdFxcdC5oYW5kbGVyICAgICA9IHVkcHY2X3JjdixcXG5uZXQvaXB2Ni91ZHAuYzoxOTUyOlxcdFxcdC5lcnJfaGFuZGxlciA9IHVkcHY2X2VycixcXG5uZXQvaXB2Ni91ZHAuYy0xOTUzLVxcdFxcdC5mbGFnc1xcdCAgICAgPSBJTkVUNl9QUk9UT19OT1BPTElDWSB8IElORVQ2X1BST1RPX0ZJTkFMLFxcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTE5MD1pbnQgc2N0cF91ZHBfdjZfZXJyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy0yMDctXFx0aWYgKGhkci1cXHUwMDNlaWNtcDZfdHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xcbm5ldC9zY3RwL2lwdjYuYzoyMDg6XFx0XFx0LyogY2FuJ3QgYmUgaGFuZGxlZCB3aXRob3V0IG91dGVyIGlwNmhkciBrbm93biwgbGVhdmUgaXQgdG8gdWRwdjZfZXJyICovXFxubmV0L3NjdHAvaXB2Ni5jLTIwOS1cXHRcXHRzY3RwX2Vycl9maW5pc2goc2ssIHQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMTowNi44MTU1MDU4NDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5NjkzMzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9pcHY2L0tjb25maWdgLiBUaGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgd2hlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY2IHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIEtjb25maWcgc3ltYm9sIGlzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSAqZW5hYmxpbmcqIElQdjYgc3VwcG9ydC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIHZhcmlhYmxlIHRoYXQgY29udHJvbHMgd2hldGhlciB0aGUgSVB2NiBzdGFjayBpcyBidWlsdCBpbiwgb3IgYXMgYSBtb2R1bGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgbmFtZWQsIHBlcmhhcHMsIGBDT05GSUdfSVBWNmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBEZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIEknbSB3b3JraW5nIHdpdGgsIHRoZXJlIG1pZ2h0IGFsc28gYmUgcmVsYXRlZCBLY29uZmlnIGVudHJpZXMgZm9yIHNwZWNpZmljIElQdjYgZmVhdHVyZXMgb3Igc3ViLWNvbXBvbmVudHMgdGhhdCBJJ2xsIHdhbnQgdG8gaW5zcGVjdCBhdCB0aGUgc2FtZSB0aW1lLCBpbiBjYXNlIEkgbmVlZCB0byBlbmFibGUgYSBwYXJ0aWN1bGFyIGZlYXR1cmUuIEkgbmVlZCB0byBtYXAgdGhlIHN5bWJvbCB0byB0aGUgY29uZmlndXJhdGlvbiBVSSB0byBjb25maWd1cmUgdGhlIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMxOjA4LjkxMjQ0MjYxNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDYzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMTowOC45NTkyOTM3NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NjU4Mjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiUmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIElQdjYgbW9kdWxlIGlzIGJ1aWx0LlwiIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBJUHY2IHByb3RvY29sIHN0YWNrLCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgYW5kIG9iamVjdCBmaWxlIGRlZmluaXRpb25zLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIGZpbmQgdGhpcyBmaWxlIGlzIHBpdm90YWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIG51YW5jZXMgb2YgdGhlIElQdjYgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoaXMga2VybmVsIHZlcnNpb24uIEknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGFueSBwYXJ0aWN1bGFybHkgY2xldmVyIGJ1aWxkIHRyaWNrcyBoZXJlLCBhbnkgY3VzdG9tIG1hY3JvcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgb3Iga2VybmVsIGNvbmZpZy4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMToxMC43MTU4Nzk1NDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDIwNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVxcdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVxcdFxcdGFkZHJsYWJlbC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcXHRcXHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTEtXFx0XFx0cmF3Lm8gaWNtcC5vIG1jYXN0Lm8gcmVhc3NlbWJseS5vIHRjcF9pcHY2Lm8gcGluZy5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzE6MTAuNzYyOTA2Nzg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyOTQ1MDIxODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdWRwLmNgIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHVkcC5jYCBmaWxlIGFuZCBpdCdzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfSVBWNmAuIE1ha2VzIHNlbnNlLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBkZWZpbml0ZWx5IGBJUFY2YC4gTm93LCB3aGF0IGFyZSB0aGUgY3J1Y2lhbCBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgYXJlYT8gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGB1ZHB2Nl9lcnJgLCBgaXA2X3NrX3JlZGlyZWN0YCwgYW5kIGBpcDZfcmVkaXJlY3RgIGluIG1pbmQuXG5cblRpbWUgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSBldmVyeXRoaW5nLiBGaXJzdCwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGFic29sdXRlbHkgYmUgYHRydWVgIOKAkyBpdCdzIGNydWNpYWwgdG8gdGVzdCB0aGlzIGNvZGUuIE5leHQsIGBFbmFibGVDb25maWdzYCBpcyBzaW1wbHkgYFtcIklQVjZcIl1gLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBOb3cgZm9yIGBGb2N1c1N5bWJvbHNgLiBJJ20gbGVhbmluZyB0b3dhcmQgaW5jbHVkaW5nIGJvdGggYHVkcHY2X2VycmAgYW5kIGBpcDZfc2tfcmVkaXJlY3RgLCBzaW5jZSB0aGV5J3JlIGNvcmUgdG8gdGhlIHBhdGNoLCBvciBJIG1pZ2h0IGV2ZW4gdGhyb3cgaW4gYGlwNl9yZWRpcmVjdGAgZm9yIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMuXG5cbk15IHJlYXNvbmluZz8gVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIElQdjYgVURQIElDTVAgcmVkaXJlY3QgaGFuZGxpbmcgaW4gYHVkcHY2X2VycigpYCBieSB0YWtpbmcgb3V0IGEgdHVubmVsIGJyYW5jaCBhbmQgZGlyZWN0bHkgY2FsbGluZyBgaXA2X3NrX3JlZGlyZWN0KClgLiBUaGlzIGhpdHMgY3JpdGljYWwgSVB2NiBuZXR3b3JraW5nIGNvZGUsIHdoaWNoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgbmV0d29yayBzb2NrZXRzIGFuZCBJQ01QdjYgcGFja2V0IGhhbmRsaW5nLiBUaGlzIGlzIGEgdmVyeSBzZW5zaXRpdmUgYXJlYSwgc28gZnVsbCBjb3ZlcmFnZSBpcyBlc3NlbnRpYWwuXG5cbkFscmlnaHQsIGEgZmluYWwgcXVpY2sgc2NhbiBvZiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLCBhbmQgSSdtIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODYsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMxOjIzLjcwNzkzMDgzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTAxNDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwdjZfZXJyXCIsXG4gICAgXCJpcDZfc2tfcmVkaXJlY3RcIixcbiAgICBcImlwNl9yZWRpcmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBJUHY2IFVEUCBzdGFjayAodWRwdjZfZXJyKSBieSByZW1vdmluZyB0aGUgc3BlY2lhbC1jYXNlZCB0dW5uZWwgY2hlY2sgZm9yIE5ESVNDX1JFRElSRUNUIGFuZCByb3V0aW5nIHJlZGlyZWN0IGhhbmRsaW5nIGRpcmVjdGx5IHZpYSBpcDZfc2tfcmVkaXJlY3QoKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHByb2Nlc3NlcyBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMgZm9yIFVEUCBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHB2Nl9lcnJcIixcbiAgICBcImlwNl9za19yZWRpcmVjdFwiLFxuICAgIFwiaXA2X3JlZGlyZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIElQdjYgVURQIHN0YWNrICh1ZHB2Nl9lcnIpIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWFsLWNhc2VkIHR1bm5lbCBjaGVjayBmb3IgTkRJU0NfUkVESVJFQ1QgYW5kIHJvdXRpbmcgcmVkaXJlY3QgaGFuZGxpbmcgZGlyZWN0bHkgdmlhIGlwNl9za19yZWRpcmVjdCgpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgcHJvY2Vzc2VzIElDTVB2NiByZWRpcmVjdCBtZXNzYWdlcyBmb3IgVURQIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMxOjIzLjc5Mzg0MTgzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMTE3MDIzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMToyMy43OTQzMzU1NzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODMxMTIwNDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyBJUHY2IFVEUCBJQ01QIHJlZGlyZWN0IHByb2Nlc3NpbmcgaW4gYHVkcHY2X2VycigpYCBieSB1bmNvbmRpdGlvbmFsbHkgaW52b2tpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaW5zdGVhZCBvZiBicmFuY2hpbmcgb24gYHR1bm5lbGAgdG8gY2FsbCBgaXA2X3JlZGlyZWN0KClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMzVkNDAwZDI4YTY1ZjgwMDM0ZWU3NjMwNWFiZDA4MjlhMTc0ZWEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDozMDo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLjU5Zjk4NzJjMzU1MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuKysrIGIvbmV0L2lwdjYvdWRwLmNcbkBAIC03NTEsMTMgKzc1MSw3IEBAIHN0YXRpYyBpbnQgdWRwdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxuIFx0XHRcdGhhcmRlcnIgPSAxO1xuIFx0fVxuIFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcbi1cdFx0aWYgKHR1bm5lbCkge1xuLVx0XHRcdGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgaW5ldDZfaWlmKHNrYiksXG4tXHRcdFx0XHQgICAgIFJFQURfT05DRShzay1cdTAwM2Vza19tYXJrKSxcbi1cdFx0XHRcdCAgICAgc2tfdWlkKHNrKSk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xuLVx0XHR9XG4rXHRcdGlwNl9za19yZWRpcmVjdChza2IsIHNrKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMToyMy43OTQzMzcwNTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3Mjg1MjUwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRFB2NiBFcnJvciBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZGlmZiBwb2ludHMgdXMgdG8gYG5ldC9pcHY2L3VkcC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdWRwdjZfZXJyYCBmdW5jdGlvbi4gSSBzZWUgdGhlIGNoYW5nZSBmb2N1c2VzIG9uIGEgYE5ESVNDX1JFRElSRUNUYCBlcnJvciB0eXBlLCBhbmQgaXQgbG9va3MgbGlrZSBhIGNvbmRpdGlvbmFsIGJsb2NrIGRlYWxpbmcgd2l0aCB0dW5uZWxzIGhhcyBiZWVuIHNpbXBsaWZpZWQuIFRoZSBvbGRlciBjb2RlIGRpZmZlcmVudGlhdGVkIGJldHdlZW4gYHR1bm5lbGAgYW5kIG5vIHR1bm5lbCBwYXRocywgbm93IGNhbGxpbmcgb25seSBgaXA2X3NrX3JlZGlyZWN0YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhlIGB1ZHB2Nl9lcnJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBlcnJvciBoYW5kbGluZyBmbG93IHdpdGhpbiBVRFB2Ni4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIG90aGVyIHR5cGVzIG9mIGVycm9ycyBoYW5kbGVkIGhlcmUgdG9vLiBXaGF0IGFyZSB0aGUgY29tbW9uIGVycm9yIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGg/IFRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaXA2X3NrX3JlZGlyZWN0YCBhbmQgYGlwNl9yZWRpcmVjdGAgYWN0dWFsbHkgKmRvKi4gVGhlIHJlbW92YWwgb2YgdGhhdCBjb25kaXRpb25hbCBpbmRpY2F0ZXMgYSBzaWduaWZpY2FudCBzaW1wbGlmaWNhdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyBvbmx5IGBpcDZfc2tfcmVkaXJlY3RgLiBJcyB0aGlzIGNvcnJlY3Q/IERvZXMgYGlwNl9za19yZWRpcmVjdGAgZW5jb21wYXNzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGJvdGggcHJldmlvdXMgYnJhbmNoZXMsIG9yIGhhcyBzb21lIGZ1bmN0aW9uYWxpdHkgYmVlbiBtb3ZlZCBvciByZW1vdmVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciB0aGF0IGNvdWxkIGFmZmVjdCBob3cgcmVkaXJlY3RzIGFyZSBoYW5kbGVkIGluIHNwZWNpZmljIHR1bm5lbCBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHJldmlldyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UsIGFuZCB3aGF0IHRoZXkgb3BlcmF0ZSBvbi4gSXMgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXQgdG8gdGhpcyBjaGFuZ2U/IEknbSBnb2luZyB0byBzdGFydCBieSByZXZpZXdpbmcgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3QgdGhhdCB0aGUgY29uZGl0aW9uYWwgd2FzIHJlbW92ZWQgYmVjYXVzZSB0aGUgYHR1bm5lbGAgaGFuZGxpbmcgbG9naWMgd2FzIHJlZHVuZGFudCBvciBoYW5kbGVkIGVsc2V3aGVyZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMTo1OC41MjI4NjUxODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzMxOlxcdFxcdFxcdH0gZWxzZVxcbiA3MzI6XFx0XFx0XFx0XFx0c2sgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbiA3MzM6XFx0XFxuIDczNDpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrKSkge1xcbiA3MzU6XFx0XFx0XFx0XFx0X19JQ01QNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KSxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgSUNNUDZfTUlCX0lORVJST1JTKTtcXG4gNzM3OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNrKTtcXG4gNzM4OlxcdFxcdFxcdH1cXG4gNzM5OlxcdFxcbiA3NDA6XFx0XFx0XFx0dHVubmVsID0gdHJ1ZTtcXG4gNzQxOlxcdFxcdH1cXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0aGFyZGVyciA9IGljbXB2Nl9lcnJfY29udmVydCh0eXBlLCBjb2RlLCBcXHUwMDI2ZXJyKTtcXG4gNzQ0OlxcdFxcdG5wID0gaW5ldDZfc2soc2spO1xcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRpZiAodHlwZSA9PSBJQ01QVjZfUEtUX1RPT0JJRykge1xcbiA3NDc6XFx0XFx0XFx0aWYgKCFpcDZfc2tfYWNjZXB0X3BtdHUoc2spKVxcbiA3NDg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc0OTpcXHRcXHRcXHRpcDZfc2tfdXBkYXRlX3BtdHUoc2tiLCBzaywgaW5mbyk7XFxuIDc1MDpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG5wLVxcdTAwM2VwbXR1ZGlzYykgIT0gSVBWNl9QTVRVRElTQ19ET05UKVxcbiA3NTE6XFx0XFx0XFx0XFx0aGFyZGVyciA9IDE7XFxuIDc1MjpcXHRcXHR9XFxuIDc1MzpcXHRcXHRpZiAodHlwZSA9PSBORElTQ19SRURJUkVDVCkge1xcbiA3NTQ6XFx0XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbiA3NTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc1NjpcXHRcXHR9XFxuIDc1NzpcXHRcXG4gNzU4OlxcdFxcdC8qIFR1bm5lbHMgZG9uJ3QgaGF2ZSBhbiBhcHBsaWNhdGlvbiBzb2NrZXQ6IGRvbid0IHBhc3MgZXJyb3JzIGJhY2sgKi9cXG4gNzU5OlxcdFxcdGlmICh0dW5uZWwpIHtcXG4gNzYwOlxcdFxcdFxcdGlmICh1ZHBfc2soc2spLVxcdTAwM2VlbmNhcF9lcnJfcmN2KVxcbiA3NjE6XFx0XFx0XFx0XFx0dWRwX3NrKHNrKS1cXHUwMDNlZW5jYXBfZXJyX3Jjdihzaywgc2tiLCBlcnIsIHVoLVxcdTAwM2VkZXN0LFxcbiA3NjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBudG9obChpbmZvKSwgKHU4ICopKHVoKzEpKTtcXG4gNzYzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NjQ6XFx0XFx0fVxcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAoIWluZXQ2X3Rlc3RfYml0KFJFQ1ZFUlI2LCBzaykpIHtcXG4gNzY3OlxcdFxcdFxcdGlmICghaGFyZGVyciB8fCBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbiA3Njg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDc2OTpcXHRcXHR9IGVsc2Uge1xcbiA3NzA6XFx0XFx0XFx0aXB2Nl9pY21wX2Vycm9yKHNrLCBza2IsIGVyciwgdWgtXFx1MDAzZWRlc3QsIG50b2hsKGluZm8pLCAodTggKikodWgrMSkpO1xcbiA3NzE6XFx0XFx0fVxcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRzay1cXHUwMDNlc2tfZXJyID0gZXJyO1xcbiA3NzQ6XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gNzc1OlxcdG91dDpcXG4gNzc2OlxcdFxcdHJldHVybiAwO1xcbiA3Nzc6XFx0fVxcbiA3Nzg6XFx0XFxuIDc3OTpcXHRzdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMxOjU4LjUyMjk3OTI2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDkzNDUwNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQZWVyaW5nIGludG8gSVB2NiBSZWRpcmVjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIElQdjYgcmVkaXJlY3Rpb24sIGFuZCB0aGUgZGVmaW5pdGlvbnMgb2YgYGlwNl9za19yZWRpcmVjdGAgYW5kIGBpcDZfcmVkaXJlY3RgIGhhdmUgYmVlbiByYXR0bGluZyBhcm91bmQgaW4gbXkgaGVhZC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkndmUgZ290IHRoZW0gc3RyYWlnaHQsIHRoYXQgbXkgdW5kZXJzdGFuZGluZyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIHdheSB0aGV5J3JlIGltcGxlbWVudGVkLiBUaGUgaW50cmljYWNpZXMgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgcmVkaXJlY3QgcHJvY2Vzc2luZyBjYW4gYmUgc28gc3VidGx5IGRpZmZlcmVudCwgYW5kIGEgbWlzdW5kZXJzdGFuZGluZyBoZXJlIHdvdWxkIGNhdXNlIHJlYWwgaGVhZGFjaGVzIGxhdGVyLiBUaGlzIGlzIGRlZmluaXRlbHkgb25lIG9mIHRob3NlIHRpbWVzIHdoZXJlIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGFuZCBjb25maXJtIHRoYXQgdGhlIHRoZW9yZXRpY2FsIGFuZCB0aGUgcHJhY3RpY2FsIGxpbmUgdXAuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBkb3VibGUtY2hlY2sgdGhvc2UgZGVmaW5pdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjMyOjAyLjAxNjQzNDE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3OTk2MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9za19yZWRpcmVjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0yMTE9dm9pZCBpcDZfcmVkaXJlY3Rfbm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgaW50IG9pZik7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjEyOnZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjEzLVxcbi0tXFxubmV0L2lwdjYvcmF3LmM9Mjk4PXN0YXRpYyB2b2lkIHJhd3Y2X2VycihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0zMTktXFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcXG5uZXQvaXB2Ni9yYXcuYzozMjA6XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbm5ldC9pcHY2L3Jhdy5jLTMyMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyMzg9dm9pZCBpcDZfcmVkaXJlY3Rfbm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgaW50IG9pZilcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI1NS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNTY6dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI1Ny17XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz03MDQ9c3RhdGljIGludCB1ZHB2Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy03NTMtXFx0aWYgKHR5cGUgPT0gTkRJU0NfUkVESVJFQ1QpIHtcXG5uZXQvaXB2Ni91ZHAuYzo3NTQ6XFx0XFx0aXA2X3NrX3JlZGlyZWN0KHNrYiwgc2spO1xcbm5ldC9pcHY2L3VkcC5jLTc1NS1cXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzI6MDMuODk0NDM5NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc1NDk2Njc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgUmVkaXJlY3QgTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggSVB2NiByZWRpcmVjdHMsIHNwZWNpZmljYWxseSBob3cgYGlwNl9za19yZWRpcmVjdGAgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQgbWUgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUg4oCTIHRoYXQgd291bGQgYmUgYG5ldC9pcHY2L3JvdXRlLmNgLiBSaWdodCwgSSByZW1lbWJlciB0aGUgZ2VuZXJhbCBsYXlvdXQgb2YgdGhhdCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAzMjU2LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlzc2VjdCB0aGUgYmVoYXZpb3IgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGltZSB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgcm91dGluZyBkZWNpc2lvbnMuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIHJldmVhbHMgc29tZXRoaW5nIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzA1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MzI6MDYuNjQ5NDA4MjQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MTIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNDU6XFx0XFx0XFx0LmZsb3dpNl9vaWYgPSBvaWYsXFxuMzI0NjpcXHRcXHRcXHQuZGFkZHIgPSBtc2ctXFx1MDAzZWRlc3QsXFxuMzI0NzpcXHRcXHRcXHQuc2FkZHIgPSBpcGgtXFx1MDAzZWRhZGRyLFxcbjMyNDg6XFx0XFx0XFx0LmZsb3dpNl91aWQgPSBzb2NrX25ldF91aWQobmV0LCBOVUxMKSxcXG4zMjQ5OlxcdFxcdH07XFxuMzI1MDpcXHRcXG4zMjUxOlxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9yZWRpcmVjdChuZXQsIFxcdTAwMjZmbDYsIHNrYiwgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbjMyNTI6XFx0XFx0cnQ2X2RvX3JlZGlyZWN0KGRzdCwgTlVMTCwgc2tiKTtcXG4zMjUzOlxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuMzI1NDpcXHR9XFxuMzI1NTpcXHRcXG4zMjU2OlxcdHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4zMjU3OlxcdHtcXG4zMjU4OlxcdFxcdGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsXFxuMzI1OTpcXHRcXHRcXHQgICAgIFJFQURfT05DRShzay1cXHUwMDNlc2tfbWFyayksIHNrX3VpZChzaykpO1xcbjMyNjA6XFx0fVxcbjMyNjE6XFx0XFxuMzI2MjpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuMzI2MzpcXHR7XFxuMzI2NDpcXHRcXHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xcbjMyNjU6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjMyNjY6XFx0XFxuMzI2NzpcXHRcXHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcXG4zMjY4OlxcdFxcbjMyNjk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjMyNzA6XFx0XFxuMzI3MTpcXHRcXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcXG4zMjcyOlxcdFxcdG10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LFxcbjMyNzM6XFx0XFx0XFx0ICAgIFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzKSk7XFxuMzI3NDpcXHRcXG4zMjc1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjMyNzY6XFx0XFxuMzI3NzpcXHRcXHQvKlxcbjMyNzg6XFx0XFx0ICogTWF4aW1hbCBub24tanVtYm8gSVB2NiBwYXlsb2FkIGlzIElQVjZfTUFYUExFTiBhbmRcXG4zMjc5OlxcdFxcdCAqIGNvcnJlc3BvbmRpbmcgTVNTIGlzIElQVjZfTUFYUExFTiAtIHRjcF9oZWFkZXJfc2l6ZS5cXG4zMjgwOlxcdFxcdCAqIExpbWl0IHRoZSBkZWZhdWx0IE1TUyB0byBHU09fQllfRlJBR1MgLSAxIHRvIGF2b2lkXFxuMzI4MTpcXHRcXHQgKiBjb2xsaXNpb24gd2l0aCB0aGUgR1NPX0JZX0ZSQUdTIG1hZ2ljIHZhbHVlICgweEZGRkYpLlxcbjMyODI6XFx0XFx0ICovXFxuMzI4MzpcXHRcXHRpZiAobXR1IFxcdTAwM2UgSVBWNl9NQVhQTEVOIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKVxcbjMyODQ6XFx0XFx0XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBJUFY2X01BWFBMRU4sIEdTT19CWV9GUkFHUyAtIDEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMjowNi42NDk3NzE0MzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ1NTc0Nzk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgUmVkaXJlY3QgTG9naWMgYW5kIEl0cyBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaXMgdGhlIHRhcmdldCBmdW5jdGlvbiBoZXJlLCBhbmQgaXQgY2FsbHMgYGlwNl9yZWRpcmVjdChza2IsIHNvY2tfbmV0KHNrKSwgc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbWFyayksIHNrX3VpZChzaykpYC4gVGhlIGtleSBpcyBpbiBgdWRwdjZfZXJyYCwgd2hlcmUgdGhlcmUgd2FzIHByZXZpb3VzbHkgYSBjb25kaXRpb25hbCBjaGVjayBmb3IgYHR1bm5lbGAuIElmIGB0dW5uZWxgIHdhcyB0cnVlLCBpdCB3YXMgY2FsbGluZyBgaXA2X3JlZGlyZWN0YCBkaXJlY3RseSB3aXRoIGBpbmV0Nl9paWYoc2tiKWAsIHdoaWNoIHdlIHNlZSBpcyBlcXVpdmFsZW50IHRvIGBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXhgLiBOb3csIHRoZSBwYXRjaCBzdHJlYW1saW5lcyB0aGlzIGJ5IGFsd2F5cyBjYWxsaW5nIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgLiBTbywgdGhlIGxvZ2ljIGlzIGJlaW5nIGNvbnNvbGlkYXRlZCB0byBjYWxsIHRoZSBzYW1lIGJhc2UgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOL0tBU0FOIGNyaXRlcmlhLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpc24ndCBpbnRyb2R1Y2luZyBhbnkgbmV3IHJpc2tzLlxuKiAgIEFyZSB3ZSBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyBObywgbm90IGhlcmUuXG4qICAgQXJlIHdlIGludHJvZHVjaW5nIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLlxuKiAgIEFyZSB3ZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyBOby5cbiogICBBcmUgd2UgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyBObyBhZ2Fpbi5cbiogICBJcyB0aGVyZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGluZm8tbGVha3M/IEl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0LiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHJlbW92aW5nIHJlZHVuZGFudCBicmFuY2hpbmcgYW5kIGNhbGxpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgdW5jb25kaXRpb25hbGx5LiBObyBhbGxvY2F0aW9uLCBjb3BpZXMgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHJlYWRzLiBJdCBpcyBhbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2VsZi1jb250YWluZWQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MganVzdCBhIHJlZmFjdG9yaW5nIGZvciBiZXR0ZXIgY29kZSBmbG93LlxuXG5JJ2xsIGp1c3QgZG8gYSBxdWljaywgZmluYWwgZG91YmxlIGNoZWNrLCBhbmQgdGhlbiBpdCdzIHRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIyNSwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDozMjoxMi4xMDU1MjE5MzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgSVB2NiBVRFAgSUNNUCByZWRpcmVjdCBwcm9jZXNzaW5nIGluIGB1ZHB2Nl9lcnIoKWAgYnkgdW5jb25kaXRpb25hbGx5IGludm9raW5nIGBpcDZfc2tfcmVkaXJlY3Qoc2tiLCBzaylgIGluc3RlYWQgb2YgYnJhbmNoaW5nIG9uIGB0dW5uZWxgIHRvIGNhbGwgYGlwNl9yZWRpcmVjdCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgY29udHJvbCBmbG93IGFuZCByb3V0ZSByZWRpcmVjdCBoYW5kbGluZyBmb3IgSUNNUHY2IHJlZGlyZWN0IG1lc3NhZ2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYnVmZmVyIGJvdW5kcywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyBJUHY2IFVEUCBJQ01QIHJlZGlyZWN0IHByb2Nlc3NpbmcgaW4gYHVkcHY2X2VycigpYCBieSB1bmNvbmRpdGlvbmFsbHkgaW52b2tpbmcgYGlwNl9za19yZWRpcmVjdChza2IsIHNrKWAgaW5zdGVhZCBvZiBicmFuY2hpbmcgb24gYHR1bm5lbGAgdG8gY2FsbCBgaXA2X3JlZGlyZWN0KClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHJvdXRlIHJlZGlyZWN0IGhhbmRsaW5nIGZvciBJQ01QdjYgcmVkaXJlY3QgbWVzc2FnZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgYm91bmRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjv627[1] Phase: Succeeded StartedAt: 2026-09-07 14:32:23 +0000 UTC FinishedAt: 2026-09-07 14:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 14:32:23 +0000 UTC FinishedAt: 2026-09-07 14:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2] Phase: Succeeded StartedAt: 2026-09-07 14:32:23 +0000 UTC FinishedAt: 2026-09-07 18:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 14:32:23 +0000 UTC FinishedAt: 2026-09-07 18:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:32:23 +0000 UTC FinishedAt: 2026-09-07 14:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:32:23 +0000 UTC FinishedAt: 2026-09-07 14:32:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-workflowjv627/series-workflowjv627-convert-artifact-4281138118/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:32:33 +0000 UTC FinishedAt: 2026-09-07 14:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:32:33 +0000 UTC FinishedAt: 2026-09-07 14:49:18 +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:*fd22859e-4ed9-4e86-a969-befea1451706,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-workflowjv627/series-workflowjv627-convert-artifact-4281138118/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": "49b4c5b6-33a7-4f95-9f8e-2c3d5a93b177", "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-workflowjv627/series-workflowjv627-build-action-1259981148/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:32:33 +0000 UTC FinishedAt: 2026-09-07 14:49:08 +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:*fd22859e-4ed9-4e86-a969-befea1451706,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-workflowjv627/series-workflowjv627-convert-artifact-4281138118/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": "49b4c5b6-33a7-4f95-9f8e-2c3d5a93b177", "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-workflowjv627/series-workflowjv627-build-action-1259981148/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:49:18 +0000 UTC FinishedAt: 2026-09-07 14:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:49:18 +0000 UTC FinishedAt: 2026-09-07 14:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:49:18 +0000 UTC FinishedAt: 2026-09-07 14:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:49:18 +0000 UTC FinishedAt: 2026-09-07 14:49:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-workflowjv627/series-workflowjv627-convert-artifact-2015386137/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:49:38 +0000 UTC FinishedAt: 2026-09-07 14:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:49:38 +0000 UTC FinishedAt: 2026-09-07 14:51:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49b4c5b6-33a7-4f95-9f8e-2c3d5a93b177,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-workflowjv627/series-workflowjv627-build-action-1259981148/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-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:51:41 +0000 UTC FinishedAt: 2026-09-07 14:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:51:41 +0000 UTC FinishedAt: 2026-09-07 14:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:51:41 +0000 UTC FinishedAt: 2026-09-07 15:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:51:41 +0000 UTC FinishedAt: 2026-09-07 15:12:21 +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:*fd22859e-4ed9-4e86-a969-befea1451706,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-workflowjv627/series-workflowjv627-convert-artifact-2015386137/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": "0fc1ef4f-dc3b-461d-aade-887411f0641d", "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-workflowjv627/series-workflowjv627-build-action-3960105333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 14:51:41 +0000 UTC FinishedAt: 2026-09-07 15:12:11 +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:*fd22859e-4ed9-4e86-a969-befea1451706,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-workflowjv627/series-workflowjv627-convert-artifact-2015386137/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": "0fc1ef4f-dc3b-461d-aade-887411f0641d", "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-workflowjv627/series-workflowjv627-build-action-3960105333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 15:12:21 +0000 UTC FinishedAt: 2026-09-07 15:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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-09-07 15:12:21 +0000 UTC FinishedAt: 2026-09-07 15:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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: Succeeded StartedAt: 2026-09-07 15:12:21 +0000 UTC FinishedAt: 2026-09-07 15:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","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: Succeeded StartedAt: 2026-09-07 15:12:21 +0000 UTC FinishedAt: 2026-09-07 15:14:12 +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:*0fc1ef4f-dc3b-461d-aade-887411f0641d,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-workflowjv627/series-workflowjv627-build-action-3960105333/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-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 15:14:22 +0000 UTC FinishedAt: 2026-09-07 18:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 15:14:22 +0000 UTC FinishedAt: 2026-09-07 18:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*49b4c5b6-33a7-4f95-9f8e-2c3d5a93b177,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0fc1ef4f-dc3b-461d-aade-887411f0641d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjv627/series-workflowjv627-build-action-1259981148/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjv627/series-workflowjv627-build-action-3960105333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 15:14:22 +0000 UTC FinishedAt: 2026-09-07 15:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 15:14:22 +0000 UTC FinishedAt: 2026-09-07 15:14:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjv627/series-workflowjv627-convert-artifact-4260371726/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 15:14:22 +0000 UTC FinishedAt: 2026-09-07 15:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 15:14:22 +0000 UTC FinishedAt: 2026-09-07 15:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 15:14:22 +0000 UTC FinishedAt: 2026-09-07 15:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 15:14:32 +0000 UTC FinishedAt: 2026-09-07 18:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjv627[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["udpv6_err","ip6_sk_redirect","ip6_redirect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"8bd095f3-71c4-4e5f-90e9-3072cb4f6563","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 15:14:32 +0000 UTC FinishedAt: 2026-09-07 18:15:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49b4c5b6-33a7-4f95-9f8e-2c3d5a93b177,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0fc1ef4f-dc3b-461d-aade-887411f0641d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjv627/series-workflowjv627-build-action-1259981148/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjv627/series-workflowjv627-build-action-3960105333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjv627/series-workflowjv627-convert-artifact-4260371726/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}