Name: series-workflowshh5p Phase: Running StartedAt: 2026-09-15 08:38:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[0] Phase: Succeeded StartedAt: 2026-09-15 08:38:00 +0000 UTC FinishedAt: 2026-09-15 09:01:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 08:38:00 +0000 UTC FinishedAt: 2026-09-15 09:01:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET" ], "series_id": "63018af7-a9ca-414a-a407-d4e5952904e4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_alloc", "sock_map_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ee363e055895364039bf28348ff13c615afad4ba", "base_tree": "bpf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayAoYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgKSBpbiBgc29ja19tYXBfYWxsb2MoKWAgdG8gcmVqZWN0IG1hcCBjcmVhdGlvbiB3aGVuIGBtYXhfZW50cmllc2AgZXhjZWVkcyBgSU5UX01BWGAuIFRoaXMgcHJldmVudHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiBpbiBgc29ja19tYXBfZnJlZSgpYCB3aGVyZSBhIHNpZ25lZCBgaW50IGlgIGlzIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBtYXAgZW50cmllcykuIFxuXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja19tYXBfYWxsb2MoKSBpbiBuZXQvY29yZS9zb2NrX21hcC5jIGJ5IGFkZGluZyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIChyZWplY3RpbmcgdmFsdWVzIFx1MDAzZSBJTlRfTUFYKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfQ1JFQVRFIGFuZCBCUEZfTUFQX1RZUEVfU09DS01BUCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgdGhpcyBwYXRoIGlzIHZhbHVhYmxlIHRvIHZlcmlmeSB2YWxpZGF0aW9uIGJvdW5kYXJpZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgbGlmZWN5Y2xlIGJlaGF2aW9yIG9mIEJQRiBzb2NrbWFwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0YmJlYWY3YjUxYTIzM2Q1OTg0OWViYzVlODY5NmY4ODQzNmJlZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwODo1NjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuaW5kZXggY2E0OWJjN2Y4Njg3Yy4uMzhkZjg0Mjg0MzI4OSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC00MSw2ICYjNDM7NDEsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0c3RydWN0IGJwZl9zdGFiICpzdGFiO1xuIFxuIFx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxuJiM0MztcdCAgICBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYIHx8XG4gXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4gXHQgICAgKGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgYXR0ci1cdTAwM2V2YWx1ZV9zaXplICE9IHNpemVvZih1NjQpKSB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzb2NrX21hcF9hbGxvYygpIGluIG5ldC9jb3JlL3NvY2tfbWFwLmMgYnkgYWRkaW5nIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgKHJlamVjdGluZyB2YWx1ZXMgXHUwMDNlIElOVF9NQVgpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHdpdGggQlBGX01BUF9DUkVBVEUgYW5kIEJQRl9NQVBfVFlQRV9TT0NLTUFQIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyB0aGlzIHBhdGggaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHZhbGlkYXRpb24gYm91bmRhcmllcywgZXJyb3IgaGFuZGxpbmcsIGFuZCBsaWZlY3ljbGUgYmVoYXZpb3Igb2YgQlBGIHNvY2ttYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRiYmVhZjdiNTFhMjMzZDU5ODQ5ZWJjNWU4Njk2Zjg4NDM2YmVlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA4OjU2OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKaW5kZXggY2E0OWJjN2Y4Njg3Yy4uMzhkZjg0Mjg0MzI4OSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jCkBAIC00MSw2ICYjNDM7NDEsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCXN0cnVjdCBicGZfc3RhYiAqc3RhYjsKIAogCWlmIChhdHRyLSZndDttYXhfZW50cmllcyA9PSAwIHx8CiYjNDM7CSAgICBhdHRyLSZndDttYXhfZW50cmllcyAmZ3Q7IElOVF9NQVggfHwKIAkgICAgYXR0ci0mZ3Q7a2V5X3NpemUgICAgIT0gNCB8fAogCSAgICAoYXR0ci0mZ3Q7dmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSAmYW1wOyZhbXA7CiAJICAgICBhdHRyLSZndDt2YWx1ZV9zaXplICE9IHNpemVvZih1NjQpKSB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCAob3IgYHJlYWQtZmlsZWAgaWYgdGhlIGNvbnRleHQgZGVtYW5kcyBpdCkgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiB3aXRoaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG1vZGlmaWNhdGlvbi4KClRoZSBgZGlmZmAgaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGBhdHRyLSZndDttYXhfZW50cmllcyAmZ3Q7IElOVF9NQVhgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgY3J1Y2lhbC4gV2UmIzM5O3JlIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSB3aGVuIGFsbG9jYXRpbmcgdGhlIHNvY2sgbWFwLiBBbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNpemVzIGFuZCBhbGxvY2F0aW9ucywgcGFydGljdWxhcmx5IGluIGEga2VybmVsIGNvbnRleHQuIEkgcmVtZW1iZXIgd2UgaGFkIGEgc2ltaWxhciBkaXNjdXNzaW9uIGEgd2hpbGUgYmFjayB3aXRoLi4uIGhtbSwgbmV2ZXIgbWluZC4KCk5vdyBJIG5lZWQgYSBiaXQgbW9yZSBjb250ZXh0LiBMZXQgbWUgcXVpY2tseSBqdW1wIHRvIGxpbmUgNDEgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHNwZWNpZmljIGNoZWNrIGlzIGJlaW5nIGludHJvZHVjZWQuIFdoYXQmIzM5O3MgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBsaWtlPyBIb3cgaXMgYGF0dHItJmd0O21heF9lbnRyaWVzYCB1c2VkPyBJcyBpdCBkaXJlY3RseSB1c2VkIGluIGEgbWVtb3J5IGFsbG9jYXRpb24sIG9yIGlzIGl0IHVzZWQgaW4gYW4gYXJpdGhtZXRpYyBjYWxjdWxhdGlvbj8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBlc3RhYmxpc2guIFVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gdGhlICp3aGF0KiBpbiB0aGlzIGNhc2UuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0ICogQSBzaW5nbGUgZ2xvYmFsIG11dGV4IGxvY2sgaXMgdXNlZCBzaW5jZSBpdCBpcyBleHBlY3RlZCBjb250ZW50aW9uIGlzIGxvdy5cbiAgMzE6XHQgKi9cbiAgMzI6XHRzdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xuICAzMzpcdFxuICAzNDpcdHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuICAzNTpcdFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbiAgMzY6XHRcdFx0XHRcdHUzMiB3aGljaCk7XG4gIDM3Olx0c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiAgNDA6XHR7XG4gIDQxOlx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWI7XG4gIDQyOlx0XG4gIDQzOlx0XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG4gIDQ0Olx0XHQgICAgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWCB8fFxuICA0NTpcdFx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuICA0NjpcdFx0ICAgIChhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHUzMikgXHUwMDI2XHUwMDI2XG4gIDQ3Olx0XHQgICAgIGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHxcbiAgNDg6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgflNPQ0tfQ1JFQVRFX0ZMQUdfTUFTSylcbiAgNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gIDUwOlx0XG4gIDUxOlx0XHRzdGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqc3RhYiksIE5VTUFfTk9fTk9ERSk7XG4gIDUyOlx0XHRpZiAoIXN0YWIpXG4gIDUzOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuICA1NDpcdFxuICA1NTpcdFx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZzdGFiLVx1MDAzZW1hcCwgYXR0cik7XG4gIDU2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzdGFiLVx1MDAzZWxvY2spO1xuICA1NzpcdFxuICA1ODpcdFx0c3RhYi1cdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMgKlxuICA1OTpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcbiAgNjA6XHRcdFx0XHRcdCAgICAgICBzdGFiLVx1MDAzZW1hcC5udW1hX25vZGUpO1xuICA2MTpcdFx0aWYgKCFzdGFiLVx1MDAzZXNrcykge1xuICA2MjpcdFx0XHRicGZfbWFwX2FyZWFfZnJlZShzdGFiKTtcbiAgNjM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gIDY0Olx0XHR9XG4gIDY1Olx0XG4gIDY2Olx0XHRyZXR1cm4gXHUwMDI2c3RhYi1cdTAwM2VtYXA7XG4gIDY3Olx0fVxuICA2ODpcdFxuICA2OTpcdGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuICA3MDpcdHtcbiAgNzE6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gIDcyOlx0XHRpbnQgcmV0O1xuICA3MzpcdFxuICA3NDpcdFx0aWYgKGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzIHx8IGF0dHItXHUwMDNlcmVwbGFjZV9icGZfZmQpXG4gIDc1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA3NjpcdFxuICA3NzpcdFx0Q0xBU1MoZmQsIGYpKGF0dHItXHUwMDNldGFyZ2V0X2ZkKTtcbiAgNzg6XHRcdG1hcCA9IF9fYnBmX21hcF9nZXQoZik7XG4gIDc5Olx0XHRpZiAoSVNfRVJSKG1hcCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nOgoKKipFeGFtaW5pbmcgQlBGIFNvY2ttYXAgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNvY2tfbWFwX2FsbG9jYCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24gZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBzb2NrX2hhc2hfYWxsb2NgLiBHaXZlbiB0aGUgc2ltaWxhcml0eSBpbiBwdXJwb3NlLCBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGUgaGFzaCB2ZXJzaW9uIGlzIGFsc28gZGVmaW5lZCB3aXRoaW4gdGhpcyBmaWxlLiBCZXN0IHRvIGp1c3QgY29uZmlybSB0aGF0IHF1aWNrbHkgdG8gYnVpbGQgdGhlIGZ1bGwgcGljdHVyZS4gTGV0IG1lIGNoZWNrIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz04MzE9QlRGX0lEX0xJU1RfU0lOR0xFKHNvY2tfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3N0YWIpXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzMjpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXHQubWFwX21ldGFfZXF1YWxcdFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBTb2NrbWFwIEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgc29ja19tYXBfYWxsb2NgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgc2V0dGluZyB1cCBhIEJQRiBzb2NrbWFwIOKAkyBzcGVjaWZpY2FsbHksIGR1cmluZyB0aGUgYGJwZihCUEZfTUFQX0NSRUFURSwgLi4uKWAgY2FsbCB3aXRoIHRoZSBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIG1hcCB0eXBlLiBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB0aGUga2VybmVsIG5lZWRzIGVuYWJsZWQgdG8gbWFrZSBgbmV0L2NvcmUvc29ja19tYXAuY2Agd29yay4gVGltZSB0byBkaWcgaW50byB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG5ldC9jb3JlYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9gLiBSaWdodCBhd2F5LCBteSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIG9iamVjdCBmaWxlIGBzb2NrX21hcC5vYCBpcyBvbmx5IGdvaW5nIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIG9yIHBvdGVudGlhbCBjb25mbGljdHMgcmVsYXRlZCB0byAqZWl0aGVyKiB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uICpvciogYHNvY2tfbWFwYCBpdHNlbGYgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTXkgbmV4dCBhY3Rpb24gdGhlbiBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IHNlYXJjaGluZyBmb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBgQlBGX1NZU0NBTExgIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgZmVhdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBBbHdheXMgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJyb2FkZXIgY29udGV4dCBiZWZvcmUgbWFraW5nIGFueSBkZWNpc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzMQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgc2VhcmNoOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSB3YW50IHRvIGRpZyBpbnRvIGhvdyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBoZWxwIHRleHQgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggZm9yIGBjb25maWcgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBrZXl3b3JkIEkgbmVlZC4gVGhpcyBzaG91bGQgcGlucG9pbnQgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBvcHRpb24gaXMgZGVjbGFyZWQgYW5kIHVzZWQuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyBkZXBlbmRlbmNpZXMsIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLCBhbmQgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24uIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipCUEYgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhlIGNvcmUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZGVmaW5lIHdoYXQgQlBGIGZ1bmN0aW9uYWxpdHkgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHdoYXQgbW9kdWxlcyBhcmUgYXZhaWxhYmxlLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBMaW5lIDI1IG1pZ2h0IGJlIGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmUsIGVuYWJsaW5nIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgc2V0dGluZyB1cCBhIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwLiBJJiMzOTttIGFudGljaXBhdGluZyBmaW5kaW5nIHNvbWUgZGV0YWlscyBvbiB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGFsc28gdXNpbmcgQlBGLCBvciB3aGF0IGFyZSBkZXBlbmRlbnQgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIFN5c2NhbGwgYW5kIFNvY2tldCBNYXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYEJQRl9TWVNDQUxMYCBpcyBhIGJvb2xlYW4sIGFuZCBpZiBpdCYjMzk7cyB0cnVlLCBpdCBlbmFibGVzIHRoZSBgYnBmKClgIHN5c3RlbSBjYWxsLiBJdCAqYWxzbyogc2VlbXMgdG8gdHJpZ2dlciB0aGUgYE5FVF9TT0NLX01TR2Agc2V0dGluZyBpZiB0aGUgYE5FVGAgb3B0aW9uIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBNeSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoZSBgc29ja19tYXAuY2AgZmlsZSBpbnRlcmFjdHMgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBkZXRlcm1pbmUgaWYgaXRzIGJlaGF2aW9yIGlzIGRpcmVjdGx5IGdhdGVkIGJ5IGBCUEZfU1lTQ0FMTGAsIG9yIGlmIGl0IHJlbGllcyBvbiBvdGhlciBjb25kaXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIFRvIHN0YXJ0LCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgcmV2aWV3IHRoZSBmaXJzdCA0MCBsaW5lcyBvZiBgbmV0L2NvcmUvc29ja19tYXAuY2AgdG8gbG9vayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zIG9yIGluY2x1ZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggQ292YWxlbnQgSU8sIEluYy4gaHR0cDovL2NvdmFsZW50LmlvICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2ttc2cuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrX2RpYWcuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY25ldC91ZHAuaFx1MDAzZVxuICAxNjpcdFxuICAxNzpcdHN0cnVjdCBicGZfc3RhYiB7XG4gIDE4Olx0XHRzdHJ1Y3QgYnBmX21hcCBtYXA7XG4gIDE5Olx0XHRzdHJ1Y3Qgc29jayAqKnNrcztcbiAgMjA6XHRcdHN0cnVjdCBza19wc29ja19wcm9ncyBwcm9ncztcbiAgMjE6XHRcdHNwaW5sb2NrX3QgbG9jaztcbiAgMjI6XHR9O1xuICAyMzpcdFxuICAyNDpcdCNkZWZpbmUgU09DS19DUkVBVEVfRkxBR19NQVNLXHRcdFx0XHRcXFxuICAyNTpcdFx0KEJQRl9GX05VTUFfTk9ERSB8IEJQRl9GX1JET05MWSB8IEJQRl9GX1dST05MWSlcbiAgMjY6XHRcbiAgMjc6XHQvKiBUaGlzIG11dGV4IGlzIHVzZWQgdG9cbiAgMjg6XHQgKiAgLSBwcm90ZWN0IHJhY2UgYmV0d2VlbiBwcm9nL2xpbmsgYXR0YWNoL2RldGFjaCBhbmQgbGluayBwcm9nIHVwZGF0ZSwgYW5kXG4gIDI5Olx0ICogIC0gcHJvdGVjdCByYWNlIGJldHdlZW4gcmVsZWFzaW5nIGFuZCBhY2Nlc3NpbmcgbWFwIGluIGJwZl9saW5rLlxuICAzMDpcdCAqIEEgc2luZ2xlIGdsb2JhbCBtdXRleCBsb2NrIGlzIHVzZWQgc2luY2UgaXQgaXMgZXhwZWN0ZWQgY29udGVudGlvbiBpcyBsb3cuXG4gIDMxOlx0ICovXG4gIDMyOlx0c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcbiAgMzM6XHRcbiAgMzQ6XHRzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiAgMzU6XHRcdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gIDM2Olx0XHRcdFx0XHR1MzIgd2hpY2gpO1xuICAzNzpcdHN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApO1xuICAzODpcdFxuICAzOTpcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gIDQwOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrIE1hcCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb21taXQgaW50cm9kdWNlcyBhIGNoZWNrOiBgYXR0ci0mZ3Q7bWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYYCB3aXRoaW4gYHNvY2tfbWFwX2FsbG9jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aHkgc3BlY2lmaWNhbGx5IGBJTlRfTUFYYD8gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHVwcGVyIGJvdW5kPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgbGltaXQuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBgbWF4X2VudHJpZXNgIGFuZCBgYXR0ci0mZ3Q7bWF4X2VudHJpZXNgIGFyZSB1c2VkIHRocm91Z2hvdXQgYHNvY2tfbWFwLmNgLiBBIHF1aWNrIGdyZXAgd2l0aGluIHRoYXQgZmlsZSBmb3IgJiMzNDttYXhfZW50cmllcyYjMzQ7IHNob3VsZCBpbGx1bWluYXRlIGFsbCByZWxldmFudCBjb2RlIHBhdGhzLiBUaGF0IHdpbGwgdGVsbCB0aGUgc3Rvcnkgb2YgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF9lbnRyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTM5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0Olx0ICAgIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVggfHxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg6XHRzdGFiLVx1MDAzZXNrcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAqXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5LVx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTM0MD1zdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNDktXHRzeW5jaHJvbml6ZV9yY3UoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzUwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM1MS1cdFx0c3RydWN0IHNvY2sgKipwc2sgPSBcdTAwMjZzdGFiLVx1MDAzZXNrc1tpXTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTM3OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4My1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg0Olx0aWYgKHVubGlrZWx5KGtleSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00NDM9c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQ4LVxubmV0L2NvcmUvc29ja19tYXAuYzo0NDk6XHRpZiAodW5saWtlbHkoaSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00NTY9c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDYxLVxubmV0L2NvcmUvc29ja19tYXAuYzo0NjI6XHRpZiAoaSA9PSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2My1cdFx0cmV0dXJuIC1FTk9FTlQ7XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ2NDpcdGlmIChpIFx1MDAzZT0gc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2NS1cdFx0KmtleV9uZXh0ID0gMDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ3MT1zdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ4MzpcdGlmICh1bmxpa2VseShpZHggXHUwMDNlPSBtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxubmV0L2NvcmUvc29ja19tYXAuYy00ODQtXHRcdHJldHVybiAtRTJCSUc7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz03MjQ9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNS17XG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcdGlmICh1bmxpa2VseShpbmZvLVx1MDAzZWluZGV4IFx1MDAzZT0gaW5mby1cdTAwM2VtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxubmV0L2NvcmUvc29ja19tYXAuYy03MjctXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODE2PXN0YXRpYyB1NjQgc29ja19tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MTktXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyMDpcdHVzYWdlICYjNDM7PSAodTY0KW1hcC1cdTAwM2VtYXhfZW50cmllcyAqIHNpemVvZihzdHJ1Y3Qgc29jayAqKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIxLVx0cmV0dXJuIHVzYWdlO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTY3PXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKnNvY2tfaGFzaF9hbGxvY19lbGVtKHN0cnVjdCBicGZfc2h0YWIgKmh0YWIsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05NzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjk3NDpcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZodGFiLVx1MDAzZWNvdW50KSBcdTAwM2UgaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTc1LVx0XHRpZiAoIW9sZCkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA5OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfaGFzaF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDQ6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICA9PSAwIHx8XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTE4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTE5Olx0aHRhYi1cdTAwM2VidWNrZXRzX251bSA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMjAtXHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3NodGFiX2VsZW0pICYjNDM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGBzb2NrX21hcF9mcmVlYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNvY2tfbWFwX2ZyZWVgIGZ1bmN0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoYXQgYGlgIHZhcmlhYmxlIGluIHRoZSBsb29wLiBUaGUgY29kZSBzbmlwcGV0IHN0YXJ0cyB3aXRoIGBzeW5jaHJvbml6ZV9yY3UoKWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3RlbnRpYWwgUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBzZWVpbmcgYSBgZm9yYCBsb29wLCBsaWtlbHkgaXRlcmF0aW5nIHRocm91Z2ggc29tZSBraW5kIG9mIHRhYmxlIG9yIG1hcCwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBjcnVjaWFsIGxpbmUgdG8gdW5kZXJzdGFuZCB3aGF0IGBpYCBpcyBpbiB0aGUgYGZvcmAgbG9vcCBpczogYGZvciAoaSA9IDA7IGkgJmx0OyBzdGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KWAuCgpJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGNvZGUgdGhhdCByZXF1aXJlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgaW4gcGFydGljdWxhciB0aGUgYHN0YWItJmd0O21hcGAgc3RydWN0LCB0byBpbmZlciBgaWAmIzM5O3MgdHlwZSAoZ2l2ZW4gaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhpcyBzbmlwcGV0KS4gSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBgc29ja19tYXBfZnJlZWAgdG8gY29uZmlybSwgbGV0IG1lIHB1bGwgdXAgbGluZXMgMzQwLTM2MCB0byBzZWUgaWYgSSBjYW4gaW5mZXIgaXQgZnJvbSB0aGUgY29udGV4dCBvZiB3aGVyZSB0aGUgbG9vcCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MDpcdHN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbiAzNDE6XHR7XG4gMzQyOlx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gMzQzOlx0XHRpbnQgaTtcbiAzNDQ6XHRcbiAzNDU6XHRcdC8qIEFmdGVyIHRoZSBzeW5jIG5vIHVwZGF0ZXMgb3IgZGVsZXRlcyB3aWxsIGJlIGluLWZsaWdodCBzbyBpdFxuIDM0NjpcdFx0ICogaXMgc2FmZSB0byB3YWxrIG1hcCBhbmQgcmVtb3ZlIGVudHJpZXMgd2l0aG91dCByaXNraW5nIGEgcmFjZVxuIDM0NzpcdFx0ICogaW4gRUVYSVNUIHVwZGF0ZSBjYXNlLlxuIDM0ODpcdFx0ICovXG4gMzQ5Olx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiAzNTA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDM1MTpcdFx0XHRzdHJ1Y3Qgc29jayAqKnBzayA9IFx1MDAyNnN0YWItXHUwMDNlc2tzW2ldO1xuIDM1MjpcdFx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gMzUzOlx0XG4gMzU0Olx0XHRcdHNrID0geGNoZyhwc2ssIE5VTEwpO1xuIDM1NTpcdFx0XHRpZiAoc2spIHtcbiAzNTY6XHRcdFx0XHRzb2NrX2hvbGQoc2spO1xuIDM1NzpcdFx0XHRcdGxvY2tfc29jayhzayk7XG4gMzU4Olx0XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDM1OTpcdFx0XHRcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xuIDM2MDpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM2MTpcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gMzYyOlx0XHRcdFx0c29ja19wdXQoc2spO1xuIDM2MzpcdFx0XHR9XG4gMzY0Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIENvbmNlcm5zIFJlZ2FyZGluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBJdGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbG9vcDogYGludCBpO2AgYW5kIGBpICZsdDsgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzOyBpJiM0MzsmIzQzO2AuIE15IGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIGltbWVkaWF0ZWx5LiBJZiBgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzYCBpcyBhIGB1MzJgIChhcyB0aGUgY29kZSBpbXBsaWVzLCBsaWtlbHkgZnJvbSBgYXR0ci0mZ3Q7bWF4X2VudHJpZXNgKSwgYnV0IGBpYCBpcyBhIHN0YW5kYXJkIGBpbnRgLCB3ZSBoYXZlIGEgc2VyaW91cyBwb3RlbnRpYWwgZm9yIGFuIGludGVnZXIgb3ZlcmZsb3cuIFNwZWNpZmljYWxseSwgaWYgYHN0YWItJmd0O21hcC5tYXhfZW50cmllc2AgaXMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gYElOVF9NQVhgLCB0aGUgaXRlcmF0aW9uIHZhcmlhYmxlIGBpYCBjYW4gZWFzaWx5IHdyYXAgYXJvdW5kIG9yIGJlaGF2ZSBpbiB1bmV4cGVjdGVkIHdheXMuCgpUaGUgY3J1eCBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBjb21wYXJpc29uLiBJbiBDLCB3aGVuIGNvbXBhcmluZyBhIHNpZ25lZCBgaW50YCAoYGlgKSB0byBhbiB1bnNpZ25lZCBgdTMyYCwgdGhlIHNpZ25lZCBgaWAgZ2V0cyBpbXBsaWNpdGx5IHByb21vdGVkIHRvIGFuIHVuc2lnbmVkIGludGVnZXIuIFRodXMsIGl0IGlzIHBvc3NpYmxlIGBpYCB3aWxsIGJlIHByb21vdGVkIHRvIGB1bnNpZ25lZCBpbnRgLCB3aGVuIGBpYCByZWFjaGVzIGBJTlRfTUFYYCwgYGkmIzQzOyYjNDM7YCBvdmVyZmxvd3Mgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBUaGlzIHByb21vdGlvbiBpcyBwcm9ibGVtYXRpYywgc2luY2UgYGlgIGNhbiBiZWNvbWUgYSBuZWdhdGl2ZSBudW1iZXIgb3IgZ2V0IHByb21vdGVkIHRvIHVuc2lnbmVkLgoKSSBuZWVkIHRvIGRlbHZlIGRlZXBlciBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbGluZXMgYXJvdW5kIDQ0MC00NjAgaW4gYHNvY2tfbWFwX2RlbGV0ZV9lbGVtYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBpczsgSSBtdXN0IHZlcmlmeSBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIHRoZSBsb29wIGFuZCB3aGV0aGVyIHRoZSBjb21wYXJpc29uIGludHJvZHVjZXMgVUIuIEkgbXVzdCB0cmFjayB0aGUgcG9zc2libGUgdmFsdWVzIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRcdF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIHNrLCBsaW5rX3Jhdyk7XG4gNDQxOlx0fVxuIDQ0MjpcdFxuIDQ0MzpcdHN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiA0NDQ6XHR7XG4gNDQ1Olx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gNDQ2Olx0XHR1MzIgaSA9ICoodTMyICopa2V5O1xuIDQ0NzpcdFx0c3RydWN0IHNvY2sgKipwc2s7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRpZiAodW5saWtlbHkoaSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG4gNDUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1MTpcdFxuIDQ1MjpcdFx0cHNrID0gXHUwMDI2c3RhYi1cdTAwM2Vza3NbaV07XG4gNDUzOlx0XHRyZXR1cm4gX19zb2NrX21hcF9kZWxldGUoc3RhYiwgTlVMTCwgcHNrKTtcbiA0NTQ6XHR9XG4gNDU1Olx0XG4gNDU2Olx0c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxuIDQ1NzpcdHtcbiA0NTg6XHRcdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcbiA0NTk6XHRcdHUzMiBpID0ga2V5ID8gKih1MzIgKilrZXkgOiBVMzJfTUFYO1xuIDQ2MDpcdFx0dTMyICprZXlfbmV4dCA9IG5leHQ7XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAoaSA9PSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXG4gNDYzOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDQ2NDpcdFx0aWYgKGkgXHUwMDNlPSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcylcbiA0NjU6XHRcdFx0KmtleV9uZXh0ID0gMDtcbiA0NjY6XHRcdGVsc2VcbiA0Njc6XHRcdFx0KmtleV9uZXh0ID0gaSAmIzQzOyAxO1xuIDQ2ODpcdFx0cmV0dXJuIDA7XG4gNDY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUzNQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZG8gYSBxdWljayBkZWVwIGRpdmUuCgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gQlBGIGFuZCBBcnJheSBNYXBzKioKCkFscmlnaHQsIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciB3aXRoIHRoaXMgcGFydGljdWxhciBpc3N1ZSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbGVhZGluZyBtZSBkb3duIGEgY2VydGFpbiBwYXRoLCBidXQgSSBzaG91bGQgYWx3YXlzIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgc2VlIGlmIHRoZSBrZXJuZWwgaGFzIGFscmVhZHkgZW5jb3VudGVyZWQgYSBzaW1pbGFyIGlzc3VlIGVsc2V3aGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgY29kZSBoYW5kbGVzIGBhdHRyLSZndDttYXhfZW50cmllc2AgdmFsdWVzIHRoYXQgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gYElOVF9NQVhgLiBUaGlzIGZlZWxzIGxpa2UgYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3cgc2l0dWF0aW9uIGp1c3Qgd2FpdGluZyB0byBoYXBwZW4uIFRvIGJlIHRob3JvdWdoLCBsZXQmIzM5O3MgcG9rZSBhcm91bmQgaW4gdGhlIEJQRiBjb2RlIOKAkyBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gYGFycmF5X21hcC5jYCBhbmQgb3RoZXIgYXJlYXMgd2hlcmUgYGJwZl9tYXBgIGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBzaW1pbGFyIGNvbXBhcmlzb25zIG9yIHBvdGVudGlhbCBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmhhcHMgdGhlIGV4YWN0IHNhbWUgY2hlY2suIEl0JiMzOTtzIGJlc3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIHByZXZhaWxpbmcgbWV0aG9kb2xvZ3kgaXMgaW4gdGhpcyBhcmVhLCBhbmQgcGVyaGFwcyBsZXZlcmFnZSBhbnkgZXhpc3RpbmcgcGF0dGVybnMgb3Igc29sdXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDMtXHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0Olx0ICAgIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVggfHxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlZXAgRGl2ZSBpbnRvIGBhcnJheV9tYXBfYWxsb2NgKioKCk9rYXksIHNvIGxldCYjMzk7cyBnZXQgcmlnaHQgaW50byBpdCwgSSBuZWVkIHRvIGNoZWNrIGBhcnJheV9tYXBfYWxsb2NgLiBUaGlzIGZ1bmN0aW9uLCBJIGJlbGlldmUsIG5lZWRzIGEgdGhvcm91Z2ggZ29pbmcgb3Zlci4gSSB3YW50IHRvIGxvb2sgYXQgaXRzIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljYWxseS4gSSYjMzk7bSBrZWVuIHRvIGVuc3VyZSBpdCYjMzk7cyBub3QgbGVha2luZyBtZW1vcnkgb3IgZXhoaWJpdGluZyBhbnkgc3VidGxlIGluZWZmaWNpZW5jaWVzIHRoYXQgY291bGQgY29tcG91bmQgb3ZlciB0aW1lLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBvciBsb25nLXJ1bm5pbmcgcHJvY2Vzc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYWxsb2NhdGlvbiBzdHJhdGVneS4gRG9lcyBpdCBwcmUtYWxsb2NhdGUsIGFsbG9jYXRlIG9uIGRlbWFuZCwgb3IgdXNlIHNvbWUgaHlicmlkIGFwcHJvYWNoPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyB0byBiZSB3YXJ5IG9mPwoKTmV4dCwgdGhlIGVycm9yIGhhbmRsaW5nLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBhcnJheV9tYXBfYWxsb2NgIGdyYWNlZnVsbHkgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBhbmQgb3RoZXIgZWRnZSBjYXNlcy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGV4Y2VwdGlvbiBtZWNoYW5pc21zIGFuZCByZXR1cm4gdmFsdWVzIGl0IGxldmVyYWdlcz8gQW5kIGhvdyBkbyB0aGVzZSBleGNlcHRpb25zIGludGVyYWN0IHdpdGggdGhlIGNhbGxpbmcgZnVuY3Rpb25zPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIHJlc291cmNlIGxlYWtzIGlmLCBzYXksIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG1hcHBpbmcgcHJvY2VzcyBpdHNlbGY/IEkgbmVlZCB0byByZXZpZXcgdGhlc2UgZmFpbHVyZSBtb2RlcyBjb21wcmVoZW5zaXZlbHkuCgpGaW5hbGx5LCBsZXQmIzM5O3MgbG9vayBhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgbGFyZ2UgYW5kIHNtYWxsIGFycmF5cy4gSXMgdGhlcmUgYW55IGF2b2lkYWJsZSBjb21wdXRhdGlvbmFsIG92ZXJoZWFkIGluIHRoZSBjb2RlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZSBjaG9pY2Ugb2YgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobXMgd2l0aGluIHRoZSBmdW5jdGlvbiBjcmVhdGVzIGFueSB1bm5lY2Vzc2FyeSBib3R0bGVuZWNrcy4gQ2FuIGl0IGJlIGltcHJvdmVkIHVzaW5nIGEgbW9yZSBvcHRpbWFsIGFsZ29yaXRobWljIGFwcHJvYWNoPyBBbnkgY2hhbmNlIGZvciB2ZWN0b3JpemF0aW9uPyBJJiMzOTtkIGxpa2UgdG8gcGVyZm9ybSBhIHF1aWNrIHByb2ZpbGluZyBwYXNzIHRvIGRldGVybWluZSBpdHMgdHlwaWNhbCBydW4tdGltZSBhbmQgaWRlbnRpZnkgYXJlYXMgZm9yIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXhfZW50cmllcyA9PSAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjc2LVxua2VybmVsL2JwZi9hcmVuYS5jOjI3NzpcdGlmIChhdHRyLVx1MDAzZWtleV9zaXplIHx8IGF0dHItXHUwMDNldmFsdWVfc2l6ZSB8fCBhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzgtXHQgICAgLyogQlBGX0ZfTU1BUEFCTEUgbXVzdCBiZSBzZXQgKi9cbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NTM9aW50IGFycmF5X21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNTgtXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjU5Olx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVx1MDAzZWtleV9zaXplICE9IDQgfHxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy02MC1cdCAgICBhdHRyLVx1MDAzZXZhbHVlX3NpemUgPT0gMCB8fFxuLS1cbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM9OTk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpibG9vbV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xMDYtXHRpZiAoYXR0ci1cdTAwM2VrZXlfc2l6ZSAhPSAwIHx8IGF0dHItXHUwMDNldmFsdWVfc2l6ZSA9PSAwIHx8XG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jOjEwNzpcdCAgICBhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMTA4LVx0ICAgIGF0dHItXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiB+QkxPT01fQ1JFQVRFX0ZMQUdfTUFTSyB8fFxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYz0yNj1zdGF0aWMgaW50IGluc25fYXJyYXlfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTI5LVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jOjMwOlx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVx1MDAzZWtleV9zaXplICE9IDQgfHxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0zMS1cdCAgICBhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gdmFsdWVfc2l6ZSB8fCBhdHRyLVx1MDAzZW1hcF9mbGFncyAhPSAwKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmM9ODU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjcHVfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtOTAtXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xua2VybmVsL2JwZi9jcHVtYXAuYzo5MTpcdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHwgYXR0ci1cdTAwM2VrZXlfc2l6ZSAhPSA0IHx8XG5rZXJuZWwvYnBmL2NwdW1hcC5jLTkyLVx0ICAgICh2YWx1ZV9zaXplICE9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY3B1bWFwX3ZhbCwgcXNpemUpIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MTExPXN0YXRpYyBpbnQgZGV2X21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTExOC1cdCAqL1xua2VybmVsL2JwZi9kZXZtYXAuYzoxMTk6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXHUwMDNla2V5X3NpemUgIT0gNCB8fFxua2VybmVsL2JwZi9kZXZtYXAuYy0xMjAtXHQgICAgKHZhbHNpemUgIT0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9kZXZtYXBfdmFsLCBpZmluZGV4KSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz00MTI9c3RhdGljIGludCBodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NTAtXHQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjQ1MTpcdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHwgYXR0ci1cdTAwM2VrZXlfc2l6ZSA9PSAwIHx8XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NTItXHQgICAgYXR0ci1cdTAwM2V2YWx1ZV9zaXplID09IDApXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTU3MT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnRyaWVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU3Ny1cdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NTc4Olx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU3OS1cdCAgICAhKGF0dHItXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQykgfHxcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz00Nz1zdGF0aWMgaW50IHF1ZXVlX3N0YWNrX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy00OS1cdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzo1MDpcdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHwgYXR0ci1cdTAwM2VrZXlfc2l6ZSAhPSAwIHx8XG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy01MS1cdCAgICBhdHRyLVx1MDAzZXZhbHVlX3NpemUgPT0gMCB8fFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz05Mz1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnN0YWNrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTAzLVx0LyogY2hlY2sgc2FuaXR5IG9mIGF0dHJpYnV0ZXMgKi9cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoxMDQ6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXHUwMDNla2V5X3NpemUgIT0gNCB8fFxua2VybmVsL2JwZi9zdGFja21hcC5jLTEwNS1cdCAgICB2YWx1ZV9zaXplIFx1MDAzYyA4IHx8IHZhbHVlX3NpemUgJSA4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYyMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3l6a2FsbGVyIHN5c2NhbGxzLiBTcGVjaWZpY2FsbHksIHZpYSBgYnBmJEJQRl9NQVBfQ1JFQVRFYCB3aXRoIGEgYEJQRl9NQVBfVFlQRV9TT0NLTUFQYC4gV2Uga25vdyBhIHN0YW5kYXJkIHVzZXIgb3Igc3l6a2FsbGVyIHByb2dyYW0gY2FuIHJlYWNoIGBzb2NrX21hcF9hbGxvY2AgYmVjYXVzZSBCUEYgbWFwIGNyZWF0aW9uIGlzIGEgY29yZSBCUEYgb3BlcmF0aW9uIGFjY2Vzc2libGUgdmlhIGBicGYoQlBGX01BUF9DUkVBVEUsIC4uLilgIOKAkyB0aGF04oCZcyB0aGUgZmlyc3QgaHVyZGxlLCBjaGVja2VkLgoKTm93LCBkb2VzIGl0IG1lZXQgdGhlICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0OyBjcml0ZXJpYT8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBzb2NrX21hcF9hbGxvY2AsIGFkZGluZyBhIGJvdW5kYXJ5IGNoZWNrOiBgYXR0ci0mZ3Q7bWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0sIGRpcmVjdGx5IGltcGFjdGluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgQlBGIHN5c2NhbGwgcGF0aC4gSXQgbG9va3MgbGlrZSBhIHN0cm9uZyAmIzM5O3llcyYjMzk7IGZvciBmdXp6aW5nIGZyb20gdGhhdCBpbml0aWFsIHJlYWQuCgpMb29raW5nIGRlZXBlciwgdGhlIHByaW1hcnkgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIGRpc2NvdmVyaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBldmVuIG5ldyBhc3NlcnRpb25zLiBHaXZlbiB0aGUgcmVhY2hhYmlsaXR5IGlzIGNvbmZpcm1lZCwgYW5kIHRoZSBwYXRjaCBhZGRzIGEgYm91bmRhcnkgY2hlY2ssIHRoZSBuZXcgYXNzZXJ0aW9uIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBjYW4gY2hlY2sgdGhhdCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgYW5kIGl0IGRvZXNuJiMzOTt0LiBTbywgd2UmIzM5O3JlIGRlZmluaXRlbHkgbG9va2luZyBhdCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOZXh0IHVwOiBGb2N1c1N5bWJvbHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgc29ja19tYXBfYWxsb2NgLiBJcyBpdCBzdWZmaWNpZW50PyBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYCB3ZSBzaG91bGQgdGFyZ2V0PyBJIHNlZSB0aGF0IGBzb2NrX21hcF9hbGxvY2AgaXMgc3RhdGljLCBidXQgYmVjYXVzZSBpdCYjMzk7cyB1c2VkIGluIHRoZSBzdHJ1Y3QgYGJwZl9tYXBfb3BzYCwgaXQmIzM5O3Mgbm90IGlubGluZWQgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbC4gQWxzbywgYHNvY2tfbWFwX2ZyZWVgLiBUaGUgaXNzdWUgcHJvbXB0aW5nIHRoaXMgY2hlY2sgbWlnaHQgYmUgaW4gYHNvY2tfbWFwX2ZyZWVgICh3aGVyZSB0aGUgYGludCBpYCBsb29wIGNvdWxkIG1pc2JlaGF2ZSBpZiBgbWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYYCkuIGBzb2NrX21hcF9mcmVlYCBhbHNvIG5lZWRzIHRvIGJlIGluIHRoZSBgRm9jdXNTeW1ib2xzYC4gU28sIEkmIzM5O20gdGhpbmtpbmcgd2UgZm9jdXMgb24gdGhlIGZ1bmN0aW9uczogYFsmIzM0O3NvY2tfbWFwX2FsbG9jJiMzNDssICYjMzQ7c29ja19tYXBfZnJlZSYjMzQ7XWAuCgpGaW5hbGx5LCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFdlIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIEhvbGQgb24uIERvZXMgdGhpcyAqYWxzbyogcmVxdWlyZSBgTkVUYD8gSSBrbm93IHRoYXQgYE5FVGAgaXMgcmVsZXZhbnQgYmVjYXVzZSBvZiBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIGJ1dCBkb2VzIGBCUEZfU1lTQ0FMTGAgKnJlcXVpcmUqIGBORVRgPyBMb29raW5nIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgLCBJIHNlZSBgc2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRgLiBBbmQsIGxvb2tpbmcgYXQgYG5ldC9jb3JlL01ha2VmaWxlYCwgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9gLiBPa2F5LiBBbmQgdGhlbiB0aGUgdG9wLWxldmVsIGBNYWtlZmlsZWAuIExvb2tzIGxpa2UgdGhlICplbnRpcmUqIGBuZXQvYCBkaXJlY3RvcnkgaXMgYnVpbHQgb25seSBpZiBgQ09ORklHX05FVD15YC4gU28gd2UgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMPXlgIGFuZCBgQ09ORklHX05FVD15YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXQvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7TWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgbmV0d29yay1yZWxhdGVkIGZlYXR1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldGAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGNlbnRyYWwgaHViIGZvciBuZXR3b3JrLXJlbGF0ZWQgc2V0dGluZ3MuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSYjMzk7cmUgY29ubmVjdGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBsb2dpY2FsIHN0cnVjdHVyZTogV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyB0aGlzIGZlYXR1cmUgaGF2ZT8gV2hhdCBvdGhlciBmZWF0dXJlcyBlbmFibGUgaXQ/IEFuZCBvZiBjb3Vyc2UsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgbmVzdGluZyBhbmQgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0LyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9ODI9bWVudSBcJiMzNDtOZXR3b3JraW5nIG9wdGlvbnNcJiMzNDtcbm5ldC9LY29uZmlnLTgzLVxubmV0L0tjb25maWc6ODQ6c291cmNlIFwmIzM0O25ldC9wYWNrZXQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6ODU6c291cmNlIFwmIzM0O25ldC9wc3AvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6ODY6c291cmNlIFwmIzM0O25ldC91bml4L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjg3OnNvdXJjZSBcJiMzNDtuZXQvdGxzL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjg4OnNvdXJjZSBcJiMzNDtuZXQveGZybS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo4OTpzb3VyY2UgXCYjMzQ7bmV0L2l1Y3YvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6OTA6c291cmNlIFwmIzM0O25ldC9zbWMvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctOTEtc291cmNlIFwmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo5Mjpzb3VyY2UgXCYjMzQ7bmV0L3hkcC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy05My1cbi0tXG5uZXQvS2NvbmZpZz0xMzY9aWYgSU5FVFxubmV0L0tjb25maWc6MTM3OnNvdXJjZSBcJiMzNDtuZXQvaXB2NC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoxMzg6c291cmNlIFwmIzM0O25ldC9pcHY2L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjEzOTpzb3VyY2UgXCYjMzQ7bmV0L25ldGxhYmVsL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjE0MDpzb3VyY2UgXCYjMzQ7bmV0L21wdGNwL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTE0MS1cbi0tXG5uZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbi0tXG5uZXQvS2NvbmZpZy0yNDYtXG5uZXQvS2NvbmZpZzoyNDc6c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjQ4OnNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjQ5OnNvdXJjZSBcJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjUwOnNvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNTEtXG5uZXQvS2NvbmZpZz0yNTI9ZW5kaWYgIyBpZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTI1My1cbm5ldC9LY29uZmlnOjI1NDpzb3VyY2UgXCYjMzQ7bmV0L3NjdHAvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjU1OnNvdXJjZSBcJiMzNDtuZXQvcmRzL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1Njpzb3VyY2UgXCYjMzQ7bmV0L3RpcGMvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjU3OnNvdXJjZSBcJiMzNDtuZXQvYXRtL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1ODpzb3VyY2UgXCYjMzQ7bmV0L2wydHAvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjU5OnNvdXJjZSBcJiMzNDtuZXQvODAyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2MDpzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNjE6c291cmNlIFwmIzM0O25ldC9kc2EvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjYyOnNvdXJjZSBcJiMzNDtuZXQvODAyMXEvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjYzOnNvdXJjZSBcJiMzNDtuZXQvbGxjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2NDpzb3VyY2UgXCYjMzQ7bmV0L3gyNS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNjU6c291cmNlIFwmIzM0O25ldC9sYXBiL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2Njpzb3VyY2UgXCYjMzQ7bmV0L3Bob25ldC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNjc6c291cmNlIFwmIzM0O25ldC82bG93cGFuL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2ODpzb3VyY2UgXCYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjY5OnNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI3MTpzb3VyY2UgXCYjMzQ7bmV0L2RjYi9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzI6c291cmNlIFwmIzM0O25ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjczOnNvdXJjZSBcJiMzNDtuZXQvYmF0bWFuLWFkdi9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzQ6c291cmNlIFwmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzU6c291cmNlIFwmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6Mjc2OnNvdXJjZSBcJiMzNDtuZXQvbmV0bGluay9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzc6c291cmNlIFwmIzM0O25ldC9tcGxzL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI3ODpzb3VyY2UgXCYjMzQ7bmV0L25zaC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzk6c291cmNlIFwmIzM0O25ldC9oc3IvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjgwOnNvdXJjZSBcJiMzNDtuZXQvc3dpdGNoZGV2L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI4MTpzb3VyY2UgXCYjMzQ7bmV0L2wzbWRldi9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyODI6c291cmNlIFwmIzM0O25ldC9xcnRyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI4Mzpzb3VyY2UgXCYjMzQ7bmV0L25jc2kvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjg0LVxuLS1cbm5ldC9LY29uZmlnPTQxND1lbmRtZW51ICMgTmV0d29ya2luZyBvcHRpb25zXG5uZXQvS2NvbmZpZy00MTUtXG5uZXQvS2NvbmZpZzo0MTY6c291cmNlIFwmIzM0O25ldC9jYW4vS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6NDE3OnNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQxODpzb3VyY2UgXCYjMzQ7bmV0L3J4cnBjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQxOTpzb3VyY2UgXCYjMzQ7bmV0L2tjbS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo0MjA6c291cmNlIFwmIzM0O25ldC9zdHJwYXJzZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6NDIxOnNvdXJjZSBcJiMzNDtuZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00MjItXG4tLVxubmV0L0tjb25maWc9NDMxPWlmIFdJUkVMRVNTXG5uZXQvS2NvbmZpZy00MzItXG5uZXQvS2NvbmZpZzo0MzM6c291cmNlIFwmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo0MzQ6c291cmNlIFwmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00MzUtXG5uZXQvS2NvbmZpZz00MzY9ZW5kaWYgIyBXSVJFTEVTU1xubmV0L0tjb25maWctNDM3LVxubmV0L0tjb25maWc6NDM4OnNvdXJjZSBcJiMzNDtuZXQvcmZraWxsL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQzOTpzb3VyY2UgXCYjMzQ7bmV0LzlwL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQ0MDpzb3VyY2UgXCYjMzQ7bmV0L2NlcGgvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6NDQxOnNvdXJjZSBcJiMzNDtuZXQvbmZjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQ0Mjpzb3VyY2UgXCYjMzQ7bmV0L3BzYW1wbGUvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6NDQzOnNvdXJjZSBcJiMzNDtuZXQvaWZlL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTQ0NC1cbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc9NDI9Y29uZmlnIEJUX0JSRURSXG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTUxLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjUyOnNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnXCYjMzQ7XG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTMtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NTQ6c291cmNlIFwmIzM0O25ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnXCYjMzQ7XG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTUtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NTY6c291cmNlIFwmIzM0O25ldC9ibHVldG9vdGgvaGlkcC9LY29uZmlnXCYjMzQ7XG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTctXG4tLVxubmV0L2Nhbi9LY29uZmlnPTQ2PWNvbmZpZyBDQU5fR1dcbi0tXG5uZXQvY2FuL0tjb25maWctNTYtXG5uZXQvY2FuL0tjb25maWc6NTc6c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxuLS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc9MjE9Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yOC1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc6Mjk6c291cmNlIFwmIzM0O25ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZ1wmIzM0O1xubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTY2MD1lbmRtZW51XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjYyOnNvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2NjQ6c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCYjMzQ7XG4tLVxubmV0L25mYy9LY29uZmlnPTE3PWNvbmZpZyBORkNfRElHSVRBTFxuLS1cbm5ldC9uZmMvS2NvbmZpZy0zMC1cbm5ldC9uZmMvS2NvbmZpZzozMTpzb3VyY2UgXCYjMzQ7bmV0L25mYy9uY2kvS2NvbmZpZ1wmIzM0O1xubmV0L25mYy9LY29uZmlnOjMyOnNvdXJjZSBcJiMzNDtuZXQvbmZjL2hjaS9LY29uZmlnXCYjMzQ7XG5uZXQvbmZjL0tjb25maWctMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODQyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydCBhbmQgdGhpcyBpcyB3aGF0IGdvZXMgdGhyb3VnaCBteSBoZWFkOgoKKipEaXZpbmcgaW50byB0aGUgTmV0IE1ha2VmaWxlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBgbmV0L01ha2VmaWxlYC4gUmlnaHQsIHRpbWUgdG8gZGlzc2VjdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHNwZWNpZmljIGNvbnRleHQ/IEFyZSB3ZSBkZWJ1Z2dpbmcgYSBidWlsZCBpc3N1ZSwgZXhwbG9yaW5nIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgZGVwZW5kZW5jaWVzLCBvciBqdXN0IGRvaW5nIGEgZ2VuZXJhbCBjb2RlIHJldmlldz8gVGhhdCYjMzk7bGwgZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiBkZXRhaWwgSSBuZWVkIHRvIGdvIGludG8uIFJlZ2FyZGxlc3MsIGBuZXQvYCBpcyB0eXBpY2FsbHkgd2hlcmUgdGhlIGxvd2VyLWxldmVsIG5ldHdvcmstcmVsYXRlZCBjb21wb25lbnRzIHJlc2lkZS4gVGhpcyBpcyB1c3VhbGx5IHRoZSBhcmVhIHRoYXQgZGVhbHMgd2l0aCBkcml2ZXJzLCBwcm90b2NvbHMgYW5kIHN5c3RlbSBjYWxscyBhdCBhIGxvdyBsZXZlbC4gSXTigJlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJJiMzOTtsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiBmb3IgdGhlIGNyaXRpY2FsIGVsZW1lbnRzOgoKKiAgICoqVGFyZ2V0czoqKiBXaGF0IGFyZSB0aGUgbWFpbiBidWlsZCB0YXJnZXRzIGRlZmluZWQ/IEFyZSB3ZSBidWlsZGluZyBzcGVjaWZpYyBtb2R1bGVzLCBsaWJyYXJpZXMsIG9yIHRoZSB3aG9sZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjaz8gVW5kZXJzdGFuZGluZyB0aGUgdGFyZ2V0cyBnaXZlcyBtZSB0aGUgc3RydWN0dXJlLgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW5jbHVkZSBmaWxlcywgb3RoZXIgbW9kdWxlcywgZXh0ZXJuYWwgbGlicmFyaWVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIERlcGVuZGVuY2llcyBhcmUgb2Z0ZW4gd2hlcmUgaXNzdWVzIGFyaXNlIGFuZCBhIGdvb2QgbWFrZWZpbGUgY2xlYXJseSBvdXRsaW5lcyB3aGF0IG5lZWRzIHRvIGJlIHByZXNlbnQgdG8gYWxsb3cgdGhlIG5ldHdvcmsgc3RhY2sgdG8gYmUgY29tcGlsZWQgYW5kIGxpbmtlZC4KKiAgICoqRmxhZ3MgYW5kIFZhcmlhYmxlczoqKiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IHZhcmlhYmxlcyBkZWZpbmluZyBjb21waWxlciBmbGFncyAoZS5nLiwgYC1JYCBmb3IgaW5jbHVkZSBwYXRocywgYC1EYCBmb3IgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLCBvcHRpbWl6YXRpb24gbGV2ZWxzKSwgbGlua2VyIGZsYWdzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3M/IEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlc2UgY2FuIGNhdXNlIG1ham9yIGhlYWRhY2hlcy4KKiAgICoqUnVsZXM6KiogSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoZSBydWxlcyB0byBzZWUgaG93IHRhcmdldHMgYXJlIGJ1aWx0IGFuZCBsaW5rZWQuIExvb2sgZm9yIGhvdyBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgdG9nZXRoZXIgYW5kIGlmIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIGFyZSBpbiBwbGFjZS4KCkkga25vdyBJIHdpbGwgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBkZWx2ZSBpbnRvIGFueSBjb25kaXRpb25hbCBibG9ja3MsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50IGFuZCB0aGUgbWFrZWZpbGUgbmVlZHMgdG8gZGVhbCB3aXRoIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBTbywgbGV04oCZcyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxuICAgNDpcdCNcbiAgIDU6XHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXHUwMDNlXG4gICA2Olx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cbiAgIDc6XHQjXG4gICA4Olx0XG4gICA5Olx0b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX0NPTVBBVClcdFx0JiM0Mzs9IGNvbXBhdC5vXG4gIDEyOlx0XG4gIDEzOlx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXG4gIDE0Olx0b2JqLSQoQ09ORklHX0xMQylcdFx0JiM0Mzs9IGxsYy9cbiAgMTU6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXG4gIDE2Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbiAgMTc6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG4gIDE4Olx0b2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiAgMTk6XHRvYmotJChDT05GSUdfWEZSTSlcdFx0JiM0Mzs9IHhmcm0vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VOSVgpXHRcdCYjNDM7PSB1bml4L1xuICAyMTpcdG9iai0kKENPTkZJR19JTkVUX1BTUClcdFx0JiM0Mzs9IHBzcC9cbiAgMjI6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGlwdjYvXG4gIDIzOlx0b2JqLSQoQ09ORklHX1BBQ0tFVClcdFx0JiM0Mzs9IHBhY2tldC9cbiAgMjQ6XHRvYmotJChDT05GSUdfTkVUX0tFWSlcdFx0JiM0Mzs9IGtleS9cbiAgMjU6XHRvYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xuICAyNjpcdG9iai0kKENPTkZJR19ORVRfREVWTElOSylcdCYjNDM7PSBkZXZsaW5rL1xuICAyNzpcdG9iai15XHRcdFx0XHQmIzQzOz0gZHNhL1xuICAyODpcdG9iai0kKENPTkZJR19YMjUpXHRcdCYjNDM7PSB4MjUvXG4gIDI5Olx0b2JqLSQoQ09ORklHX0xBUEIpXHRcdCYjNDM7PSBsYXBiL1xuICAzMDpcdG9iai0kKENPTkZJR19DQU4pXHRcdCYjNDM7PSBjYW4vXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JUKVx0XHQmIzQzOz0gYmx1ZXRvb3RoL1xuICAzMjpcdG9iai0kKENPTkZJR19TVU5SUEMpXHRcdCYjNDM7PSBzdW5ycGMvXG4gIDMzOlx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVx0XHQmIzQzOz0gcnhycGMvXG4gIDM0Olx0b2JqLSQoQ09ORklHX0FGX0tDTSlcdFx0JiM0Mzs9IGtjbS9cbiAgMzU6XHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcdCYjNDM7PSBzdHJwYXJzZXIvXG4gIDM2Olx0b2JqLSQoQ09ORklHX0FUTSlcdFx0JiM0Mzs9IGF0bS9cbiAgMzc6XHRvYmotJChDT05GSUdfTDJUUClcdFx0JiM0Mzs9IGwydHAvXG4gIDM4Olx0b2JqLSQoQ09ORklHX1BIT05FVClcdFx0JiM0Mzs9IHBob25ldC9cbiAgMzk6XHRpZm5lcSAoJChDT05GSUdfVkxBTl84MDIxUSksKVxuICA0MDpcdG9iai15XHRcdFx0XHQmIzQzOz0gODAyMXEvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgc29ja19tYXAub2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBzb2NrX21hcC5vYCBnZXRzIGJ1aWx0LCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gQlBGLiBJIHJlY2FsbCB0aGF0IHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUgaW5jbHVkZXMgdGhlIGBuZXQvYCBkaXJlY3Rvcnkgd2hlbiBgQ09ORklHX05FVD15YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoYXQmIzM5O3MgcmVxdWlyZWQuJiMzNDsgRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGBCUEZfU1lTQ0FMTGAmIzM5O3MgY29uZmlndXJhdGlvbi4gTG9va2luZyBhdCBga2VybmVsL2JwZi9LY29uZmlnYCwgSSBzZWUgaXQmIzM5O3MgYSBib29sIG9wdGlvbiB0aGF0IGFjdGl2YXRlcyB0aGUgYGJwZigpYCBzeXN0ZW0gY2FsbC4gSXQgKnNlbGVjdHMqIGEgZmV3IGRlcGVuZGVuY2llczogYEJQRmAsIGBJUlFfV09SS2AsIGBORUVEX1RBU0tTX1JDVWAsIGBUQVNLU19UUkFDRV9SQ1VgLCBgQklOQVJZX1BSSU5URmAsIGFuZCBjcml0aWNhbGx5LCBgTkVUX1NPQ0tfTVNHYCAqaWYqIGBORVRgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBmdXJ0aGVyIHRvIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IGBzb2NrX21hcC5vYCBpcyBidWlsdC4gQW5kIHRoZXJlIGl0IGlzOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub2AuIE9rYXksIHNvIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzICpkaXJlY3RseSogcmVzcG9uc2libGUgZm9yIGluY2x1ZGluZyBgc29ja19tYXAub2AuIFNvIHdlIG5lZWQgYm90aCBgQ09ORklHX05FVGAgKmFuZCogYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gZ2V0IGBzb2NrX21hcC5vYCB0byBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuCgpJJiMzOTttIGZlZWxpbmcgdGhvcm91Z2ggdG9kYXksIHNvIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgc291cmNlIGZpbGUgaXRzZWxmLCBgc29ja19tYXAuY2AsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIChgI2lmZGVmYCkgdGhhdCBtaWdodCBpbnRyb2R1Y2UgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGhpZGRlbiByZXF1aXJlbWVudHMgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MTQ3OD1zdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICoqKnBwcm9nLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ5Mi1cdFx0YnJlYWs7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE0OTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDk0LVx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzYwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgU29jayBNYXAgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uIGFuZC4uLml0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQmIzM5O3MgdXNpbmcgaXQuIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgc29ja19tYXBfb3BzYCBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCBvciwgbW9yZSBpbXBvcnRhbnRseSwgKnVzZWQqLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyB0aGluZyBiYWNrIHRvIGl0cyByb290LiBXaXRob3V0IHRoYXQsIEkmIzM5O20ganVzdCBwb2tpbmcgYXJvdW5kIGluIHRoZSBkYXJrLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHNlZSB3aGVyZSBgc29ja19tYXBfb3BzYCBpcyBkZWZpbmVkIGFuZCBjYWxsZWQuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBjbHVlcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE5PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMS0jaWZkZWYgQ09ORklHX0lORVRcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTIyOkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS01BUCwgc29ja19tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMjMtQlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgc29ja19oYXNoX29wcylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1CVEZfSURfTElTVF9TSU5HTEUoc29ja19tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfc3RhYilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMyOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgzMy1cdC5tYXBfbWV0YV9lcXVhbFx0XHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxOTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCUEYgU29ja21hcCBEZXBlbmRlbmN5KioKClJpZ2h0LCBva2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3QhIExvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgLCBzcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBkZXBlbmRlbmN5OgoKYGBgYwojaWZkZWYgQ09ORklHX0lORVQKQlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLTUFQLCBzb2NrX21hcF9vcHMpCkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS0hBU0gsIHNvY2tfaGFzaF9vcHMpCiNlbmRpZgpgYGAKClRoZSBkZWZpbml0aW9uIG9mIGBCUEZfTUFQX1RZUEVfU09DS01BUGAsIGFzIGV4cGVjdGVkLCBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0lORVRgLiBUaGlzIGNvbmZpcm1zIHRoYXQgc29ja21hcCBzdXBwb3J0IHJlbGllcyBvbiB0aGUgYENPTkZJR19JTkVUYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3MgYXJvdW5kIGxpbmVzIDExNS0xMzAgb2YgdGhhdCBmaWxlIHRvIG1ha2UgY2VydGFpbiB0aGlzIGlzIHRoZSBvbmx5IGRlcGVuZGVuY3kuIEl0JiMzOTtzIGdvb2QgdG8gaGF2ZSB0aGlzIGNvbmZpcm1lZCBzbyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQX0hBU0gsIGRldl9tYXBfaGFzaF9vcHMpXG4gMTE2Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TS19TVE9SQUdFLCBza19zdG9yYWdlX21hcF9vcHMpXG4gMTE3Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9DUFVNQVAsIGNwdV9tYXBfb3BzKVxuIDExODpcdCNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcbiAxMTk6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXG4gMTIwOlx0I2VuZGlmXG4gMTIxOlx0I2lmZGVmIENPTkZJR19JTkVUXG4gMTIyOlx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLTUFQLCBzb2NrX21hcF9vcHMpXG4gMTIzOlx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgc29ja19oYXNoX29wcylcbiAxMjQ6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVksIHJldXNlcG9ydF9hcnJheV9vcHMpXG4gMTI1Olx0I2VuZGlmXG4gMTI2Olx0I2VuZGlmXG4gMTI3Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9RVUVVRSwgcXVldWVfbWFwX29wcylcbiAxMjg6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NUQUNLLCBzdGFja19tYXBfb3BzKVxuIDEyOTpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKVxuIDEzMDpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RSVUNUX09QUywgYnBmX3N0cnVjdF9vcHNfbWFwX29wcylcbiAxMzE6XHQjZW5kaWZcbiAxMzI6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JJTkdCVUYsIHJpbmdidWZfbWFwX29wcylcbiAxMzM6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUiwgYmxvb21fZmlsdGVyX21hcF9vcHMpXG4gMTM0Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9VU0VSX1JJTkdCVUYsIHVzZXJfcmluZ2J1Zl9tYXBfb3BzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIEJQRiBUeXBlIERlZmluaXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBpbiBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgcHJvdGVjdGVkIGJ5IGAjaWZkZWYgQ09ORklHX0lORVRgLiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyDigJMgaXQmIzM5O3MgYmVjYXVzZSBzb2NrbWFwcyBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIGludGVybmV0IHByb3RvY29sIGhhbmRsaW5nLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUga2VybmVsIG9ubHkgbmVlZHMgdG8gZGVmaW5lIGFuZCBoYW5kbGUgdGhhdCBtYXAgdHlwZSBpZiB0aGUgc3lzdGVtIGlzIGFjdHVhbGx5IGNvbmZpZ3VyZWQgdG8gZGVhbCB3aXRoIHRoZSBpbnRlcm5ldCBzdGFjay4gTm8gcG9pbnQgaW4gYmxvYXQgb3RoZXJ3aXNlLgoKTXkgbmV4dCB0aG91Z2h0IGlzIGFib3V0IGxpbmUgMTI2IGFuZCB0aGUgYCNpZmRlZiBDT05GSUdfTkVUYC4gT2theSwgdGhhdCYjMzk7cyBhbm90aGVyIGltcG9ydGFudCBvbmUuIExldCBtZSBxdWlja2x5IHNjYW4gbGluZXMgMTAwLTExNi4gTG9va3MgbGlrZSBJJiMzOTttIHRyeWluZyB0byBzZWUgd2hhdCB0aGUgbmV0IGNvbmZpZ3VyYXRpb24gaXMgY29udHJvbGxpbmcgaGVyZSBhcyB0aGlzIGlzIGdvaW5nIHRvIGluZmx1ZW5jZSB0aGUgZmVhdHVyZXMgYXZhaWxhYmxlLgoKTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCwgaHRhYl9wZXJjcHVfbWFwX29wcylcbiAxMDE6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0xSVV9IQVNILCBodGFiX2xydV9tYXBfb3BzKVxuIDEwMjpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNILCBodGFiX2xydV9wZXJjcHVfbWFwX29wcylcbiAxMDM6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0xQTV9UUklFLCB0cmllX21hcF9vcHMpXG4gMTA0Olx0I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuIDEwNTpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RBQ0tfVFJBQ0UsIHN0YWNrX3RyYWNlX21hcF9vcHMpXG4gMTA2Olx0I2VuZGlmXG4gMTA3Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTLCBhcnJheV9vZl9tYXBzX21hcF9vcHMpXG4gMTA4Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFMsIGh0YWJfb2ZfbWFwc19tYXBfb3BzKVxuIDEwOTpcdCNpZmRlZiBDT05GSUdfQlBGX0xTTVxuIDExMDpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5PREVfU1RPUkFHRSwgaW5vZGVfc3RvcmFnZV9tYXBfb3BzKVxuIDExMTpcdCNlbmRpZlxuIDExMjpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfVEFTS19TVE9SQUdFLCB0YXNrX3N0b3JhZ2VfbWFwX29wcylcbiAxMTM6XHQjaWZkZWYgQ09ORklHX05FVFxuIDExNDpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQLCBkZXZfbWFwX29wcylcbiAxMTU6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNILCBkZXZfbWFwX2hhc2hfb3BzKVxuIDExNjpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU0tfU1RPUkFHRSwgc2tfc3RvcmFnZV9tYXBfb3BzKVxuIDExNzpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcbiAxMTg6XHQjaWYgZGVmaW5lZChDT05GSUdfWERQX1NPQ0tFVFMpXG4gMTE5Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9YU0tNQVAsIHhza19tYXBfb3BzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU29ja21hcCBCUEYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCB0byBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCB0aGUgYHNvY2tfbWFwX2FsbG9jYCBmdW5jdGlvbi4gTGluZXMgMTEzIGFuZCAxMjEgYXJlIHRocm93aW5nIHVwIHNvbWUgY29uZGl0aW9uYWxzLiBTcGVjaWZpY2FsbHksIEkgc2VlIGAjaWZkZWYgQ09ORklHX05FVGAgb24gbGluZSAxMTMgYW5kIGAjaWZkZWYgQ09ORklHX0lORVRgIG9uIGxpbmUgMTIxLiBUaGF0IHRlbGxzIG1lIHJpZ2h0IGF3YXkgdGhhdCB0byBnZXQgd2hlcmUgSSBuZWVkIHRvIGJlLCBJJiMzOTttIGdvaW5nIHRvIHJlcXVpcmUgYSBmZXcgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGVuYWJsZWQuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgSSBuZWVkOgoKKiAgIGBDT05GSUdfQlBGX1NZU0NBTExgICh0aGF0JiMzOTtzIG9idmlvdXMsIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGIHN5c2NhbGxzKQoqICAgYENPTkZJR19ORVRgICh0aGF0JiMzOTtzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBmb3IgbmV0d29ya2luZyByZWxhdGVkIEJQRiBmZWF0dXJlcy4pCiogICBgQ09ORklHX0lORVRgIChJIG5lZWQgSVB2NCBzdXBwb3J0IHRvbyB0byByZWFjaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRoKS4KCk5vdywgdG8gc29saWRpZnkgdGhpcywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGlzIGFjdHVhbGx5IHVzZWQgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdGhyb3VnaCB0aGUgYGZpbmRfYW5kX2FsbG9jX21hcGAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHF1aWNrIGNoZWNrIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgdHJ1ZSBhbmQgdGhhdCBJIGNhbiByZWFjaCB0aGF0IGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9hbmRfYWxsb2NfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIEJQRiBNYXAgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyBCUEYgbWFwIHR5cGVzIGFuZCB0aGVpciBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGF0IHJ1bnRpbWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBkaXNwYXRjaGluZyBoYXBwZW5pbmc/JiMzNDsuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEFyZSB3ZSBsb29raW5nIGF0IGBicGZfbWFwX3R5cGVzYD8gT3IgcGVyaGFwcyBgYnBmX21hcF9vcHNgPyBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgKmhvdyogZGlmZmVyZW50IG1hcCB0eXBlcyBhcmUgYWN0dWFsbHkgKnVzZWQqLiBNeSBtZW50YWwgbWFwIG5lZWRzIHRvIGJlIGNsYXJpZmllZCwgYW5kIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4sIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9tYXBfdHlwZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz02OD1pbnQgc3lzY3RsX3VucHJpdmlsZWdlZF9icGZfZGlzYWJsZWQgX19yZWFkX21vc3RseSA9XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo3MTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNzItI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzUtXHRtYXBfdHlwZSA9IGF0dHItXHUwMDNlbWFwX3R5cGU7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNDM2Olx0aWYgKG1hcF90eXBlIFx1MDAzZT0gQVJSQVlfU0laRShicGZfbWFwX3R5cGVzKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzNy1cdFx0YnBmX2xvZyhsb2csIFwmIzM0O0ludmFsaWQgbWFwX3R5cGUuXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDM5LVx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ0MDpcdG1hcF90eXBlID0gYXJyYXlfaW5kZXhfbm9zcGVjKG1hcF90eXBlLCBBUlJBWV9TSVpFKGJwZl9tYXBfdHlwZXMpKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0NDE6XHRvcHMgPSBicGZfbWFwX3R5cGVzW21hcF90eXBlXTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0NDItXHRpZiAoIW9wcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMDQKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTb2NrbWFwIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYHNvY2tfbWFwX2FsbG9jYCwgYW5kIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgbWFwX2NyZWF0ZV9hbGxvY2Agd2hpY2ggaXMgcmVhY2hlZCB0aHJvdWdoIHRoZSBgYnBmKEJQRl9NQVBfQ1JFQVRFLCAuLi4pYCBzeXNjYWxsIOKAkyBjbGFzc2ljIEJQRiBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjYWxsZWQgd2hlbiB0aGUgYGF0dHItJmd0O21hcF90eXBlYCBpcyBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgLiBBbmQsIGFjY29yZGluZyB0byBteSBzeW1ib2xzIGNoZWNrLCBgc29ja19tYXBfYWxsb2NgIGlzIHRoZSAqZXhhY3QqIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGhlIGNvbW1pdCBhbHNvIHRvdWNoZXMgYHNvY2tfbWFwX2ZyZWVgLCBzaW5jZSBvYnZpb3VzbHkgZnJlZWluZyB0aGUgc29ja21hcCBoaW5nZXMgb24gZW50cmllcy4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkbyBJIGluY2x1ZGUganVzdCBgc29ja19tYXBfYWxsb2NgIG9yIGJvdGggYHNvY2tfbWFwX2FsbG9jYCBhbmQgYHNvY2tfbWFwX2ZyZWVgPyBMZXQmIzM5O3MgY29uc3VsdCB0aGUgZ3VpZGVsaW5lcyAoU2VjdGlvbiA0KS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbGlzdCBmdW5jdGlvbnMgdGhhdCAqc3BlY2lmaWNhbGx5KiBpbXBsZW1lbnQgdGhlIGFsdGVyZWQgbG9naWMuIERlZmluaXRlbHkgYHNvY2tfbWFwX2FsbG9jYCwgdGhhdCYjMzk7cyB0aGUgb25lIHdpdGggdGhlIGRpcmVjdCBjaGFuZ2UuIEFuZCB3aGlsZSBgc29ja19tYXBfZnJlZWAgaXNuJiMzOTt0IGRpcmVjdGx5ICptb2RpZmllZCosIGl0JiMzOTtzIGNyaXRpY2FsIHRvIHRoZSBzb2NrbWFwJiMzOTtzIGxpZmVjeWNsZSwgc28sIGxldCYjMzk7cyBpbmNsdWRlIGJvdGguIFRoYXQmIzM5O3MgdGhlIGJlc3QgYW5kIG1vc3Qgc3BlY2lmaWMgYXBwcm9hY2guCgpOb3cgZm9yIHRoZSBFbmFibGVDb25maWdzLiBUaGUgcmVsZXZhbnQgS2NvbmZpZyBzeW1ib2xzIHNlZW0gdG8gYmUgYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAuIEkgcXVpY2tseSB2ZXJpZmllZCB0aGF0IGBJTkVUYCBkb2VzLCBpbiBmYWN0LCBkZXBlbmQgb24gYE5FVGAsIGFuZCB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFNvLCBgWyYjMzQ7QlBGX1NZU0NBTEwmIzM0OywgJiMzNDtORVQmIzM0OywgJiMzNDtJTkVUJiMzNDtdYCBpdCBpcy4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcuIExldCYjMzk7cyBtYWtlIGl0IGNvbmNpc2U6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIGNoZWNrIChgYXR0ci0mZ3Q7bWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYYCkgd2l0aGluIGBzb2NrX21hcF9hbGxvYygpYCBmb3Igc29ja21hcCBCUEYgbWFwcy4gVGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBwcm9ibGVtcyB0aGF0IGNhbiBvY2N1ciBkdXJpbmcgbWFwIGFsbG9jYXRpb24sIGl0ZXJhdGlvbiwgYW5kIGZyZWVpbmcuIFRoZSBjaGFuZ2VkIGV4ZWN1dGFibGUgY29kZSBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBicGYoQlBGX01BUF9DUkVBVEUsIC4uLilgIHN5c2NhbGwsIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSBjb3JlLiBJIHRoaW5rIHRoYXQgY292ZXJzIGl0LiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja19tYXBfYWxsb2MoKSBpbiBuZXQvY29yZS9zb2NrX21hcC5jIGJ5IGFkZGluZyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIChyZWplY3RpbmcgdmFsdWVzIFx1MDAzZSBJTlRfTUFYKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfQ1JFQVRFIGFuZCBCUEZfTUFQX1RZUEVfU09DS01BUCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgdGhpcyBwYXRoIGlzIHZhbHVhYmxlIHRvIHZlcmlmeSB2YWxpZGF0aW9uIGJvdW5kYXJpZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgbGlmZWN5Y2xlIGJlaGF2aW9yIG9mIEJQRiBzb2NrbWFwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tfbWFwX2FsbG9jKCkgaW4gbmV0L2NvcmUvc29ja19tYXAuYyBieSBhZGRpbmcgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gYXR0ci1cdTAwM2VtYXhfZW50cmllcyAocmVqZWN0aW5nIHZhbHVlcyBcdTAwM2UgSU5UX01BWCkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQX0NSRUFURSBhbmQgQlBGX01BUF9UWVBFX1NPQ0tNQVAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoaXMgcGF0aCBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdmFsaWRhdGlvbiBib3VuZGFyaWVzLCBlcnJvciBoYW5kbGluZywgYW5kIGxpZmVjeWNsZSBiZWhhdmlvciBvZiBCUEYgc29ja21hcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGlucHV0IHZhbGlkYXRpb24gY2hlY2sgKGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYCkgaW4gYHNvY2tfbWFwX2FsbG9jKClgIHRvIHJlamVjdCBtYXAgY3JlYXRpb24gd2hlbiBgbWF4X2VudHJpZXNgIGV4Y2VlZHMgYElOVF9NQVhgLiBUaGlzIHByZXZlbnRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGUuZy4gaW4gYHNvY2tfbWFwX2ZyZWUoKWAgd2hlcmUgYSBzaWduZWQgYGludCBpYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbWFwIGVudHJpZXMpLiBcblxuU3VjaCBidWdzIChpbnRlZ2VyIG92ZXJmbG93LCB1bmRlZmluZWQgYmVoYXZpb3IsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgc3RyaWN0bHkgd2l0aGluIHRoZSBzY29wZSBvZiBVQlNBTiBhbmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIGtlcm5lbCBicmFuY2hpbmcsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NGJiZWFmN2I1MWEyMzNkNTk4NDllYmM1ZTg2OTZmODg0MzZiZWVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDg6NTY6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuYwppbmRleCBjYTQ5YmM3Zjg2ODdjLi4zOGRmODQyODQzMjg5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKQEAgLTQxLDYgJiM0Mzs0MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJc3RydWN0IGJwZl9zdGFiICpzdGFiOwogCiAJaWYgKGF0dHItJmd0O21heF9lbnRyaWVzID09IDAgfHwKJiM0MzsJICAgIGF0dHItJmd0O21heF9lbnRyaWVzICZndDsgSU5UX01BWCB8fAogCSAgICBhdHRyLSZndDtrZXlfc2l6ZSAgICAhPSA0IHx8CiAJICAgIChhdHRyLSZndDt2YWx1ZV9zaXplICE9IHNpemVvZih1MzIpICZhbXA7JmFtcDsKIAkgICAgIGF0dHItJmd0O3ZhbHVlX3NpemUgIT0gc2l6ZW9mKHU2NCkpIHx8CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBTb2NrZXQgTWFwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBkaWZmLCBmb2N1c2luZyBvbiB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgYW4gYWRkaXRpb24gaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiAgU3BlY2lmaWNhbGx5LCBJIG5vdGljZSBhIG5ldyBjaGVjayByZWxhdGVkIHRvIGBtYXhfZW50cmllc2Agd2l0aGluIHRoZSBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uLiBUaGUgY29kZSBub3cgaW5jbHVkZXMgYSBib3VuZHMgY2hlY2s6IGBhdHRyLSZndDttYXhfZW50cmllcyAmZ3Q7IElOVF9NQVhgLiBUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNvIEkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhcm91bmQgbGluZSA0MS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW4gdGhlIGFsbG9jYXRpb24gcGF0aCBmb3IgYSBzb2NrZXQgbWFwLCBhbmQgdGhpcyBjaGVjayBpcyBsaWtlbHkgYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93IGlzc3Vlcy4gQSBgbWF4X2VudHJpZXNgIG9mIDAgaXMgY2hlY2tlZCBlYXJsaWVyLiBJdCBpcyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyB0byBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUuIAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0ICogQSBzaW5nbGUgZ2xvYmFsIG11dGV4IGxvY2sgaXMgdXNlZCBzaW5jZSBpdCBpcyBleHBlY3RlZCBjb250ZW50aW9uIGlzIGxvdy5cbiAgMzE6XHQgKi9cbiAgMzI6XHRzdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xuICAzMzpcdFxuICAzNDpcdHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuICAzNTpcdFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbiAgMzY6XHRcdFx0XHRcdHUzMiB3aGljaCk7XG4gIDM3Olx0c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiAgNDA6XHR7XG4gIDQxOlx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWI7XG4gIDQyOlx0XG4gIDQzOlx0XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG4gIDQ0Olx0XHQgICAgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWCB8fFxuICA0NTpcdFx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuICA0NjpcdFx0ICAgIChhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHUzMikgXHUwMDI2XHUwMDI2XG4gIDQ3Olx0XHQgICAgIGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHxcbiAgNDg6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgflNPQ0tfQ1JFQVRFX0ZMQUdfTUFTSylcbiAgNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gIDUwOlx0XG4gIDUxOlx0XHRzdGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqc3RhYiksIE5VTUFfTk9fTk9ERSk7XG4gIDUyOlx0XHRpZiAoIXN0YWIpXG4gIDUzOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuICA1NDpcdFxuICA1NTpcdFx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZzdGFiLVx1MDAzZW1hcCwgYXR0cik7XG4gIDU2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzdGFiLVx1MDAzZWxvY2spO1xuICA1NzpcdFxuICA1ODpcdFx0c3RhYi1cdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMgKlxuICA1OTpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcbiAgNjA6XHRcdFx0XHRcdCAgICAgICBzdGFiLVx1MDAzZW1hcC5udW1hX25vZGUpO1xuICA2MTpcdFx0aWYgKCFzdGFiLVx1MDAzZXNrcykge1xuICA2MjpcdFx0XHRicGZfbWFwX2FyZWFfZnJlZShzdGFiKTtcbiAgNjM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gIDY0Olx0XHR9XG4gIDY1Olx0XG4gIDY2Olx0XHRyZXR1cm4gXHUwMDI2c3RhYi1cdTAwM2VtYXA7XG4gIDY3Olx0fVxuICA2ODpcdFxuICA2OTpcdGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuICA3MDpcdHtcbiAgNzE6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gIDcyOlx0XHRpbnQgcmV0O1xuICA3MzpcdFxuICA3NDpcdFx0aWYgKGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzIHx8IGF0dHItXHUwMDNlcmVwbGFjZV9icGZfZmQpXG4gIDc1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA3NjpcdFxuICA3NzpcdFx0Q0xBU1MoZmQsIGYpKGF0dHItXHUwMDNldGFyZ2V0X2ZkKTtcbiAgNzg6XHRcdG1hcCA9IF9fYnBmX21hcF9nZXQoZik7XG4gIDc5Olx0XHRpZiAoSVNfRVJSKG1hcCkpXG4gIDgwOlx0XHRcdHJldHVybiBQVFJfRVJSKG1hcCk7XG4gIDgxOlx0XHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuICA4MjpcdFx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBwcm9nLCBOVUxMLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKTtcbiAgODM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbiAgODQ6XHRcdHJldHVybiByZXQ7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdGludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuICA4ODpcdHtcbiAgODk6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hlY2s6IGBhdHRyLSZndDttYXhfZW50cmllcyAmZ3Q7IElOVF9NQVhgLiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuIFdoeSB3YXMgdGhpcyBjb25kaXRpb24gaW50cm9kdWNlZD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8KCk15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGhpc3RvcnkuIEkmIzM5O2xsIHJlYWNoIGZvciBgZ2l0IGxvZ2Agb3IgYGdyZXBgIHRvIHNlYXJjaCBmb3IgcmVsYXRlZCBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdXNlcyBvZiBgc29ja19tYXBfYWxsb2NgIG9yIGBzb2NrX2hhc2hfYWxsb2NgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgY2x1ZXMuIEkmIzM5O20gaG9waW5nIHRvIHVuY292ZXIgc2ltaWxhciBjaGVja3MgaW4gdGhhdCBhcmVhIG9yIHVuZGVyc3RhbmQgdGhlIHByb2JsZW0gdGhpcyB3YXMgbWVhbnQgdG8gYWRkcmVzcy4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY2hhbmdlcyB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBiYWNrZ3JvdW5kLCBhbGxvd2luZyBtZSB0byBmdWxseSBncmFzcCB3aHkgdGhpcyB1cHBlciBib3VuZCBjb25zdHJhaW50IG9uIGBtYXhfZW50cmllc2Agd2FzIGRlZW1lZCBuZWNlc3NhcnkuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIG9yaWdpbmFsIGJ1Zy9saW1pdGF0aW9uIHRoaXMgZml4IHdhcyBkZXNpZ25lZCB0byByZXNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zNz1zdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM5OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXHQubWFwX21ldGFfZXF1YWxcdFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNDpcdC5tYXBfYWxsb2NcdFx0PSBzb2NrX21hcF9hbGxvYyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM1LVx0Lm1hcF9mcmVlXHRcdD0gc29ja19tYXBfZnJlZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBzb2NrX21hcGAgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBmb2N1c2luZyBvbiBob3cgYG1heF9lbnRyaWVzYCBhbmQgdGhlIGBrZXlgIGFyZSBtYW5hZ2VkLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgc3RhcnQgZ3JlcHBpbmcgZm9yIGBzb2NrX21hcF9gLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBwYXR0ZXJucyBlbWVyZ2UgaW4gaXRzIHVzYWdlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCB1bmNvdmVyIHRoZSByZWxldmFudCBwYXJ0cyBJIG5lZWQgdG8gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU5NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2NvcmUvc29ja19tYXAuYz0zMj1zdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1LVx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzYtXHRcdFx0XHR1MzIgd2hpY2gpO1xubmV0L2NvcmUvc29ja19tYXAuYzozNzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM5OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4LVxubmV0L2NvcmUvc29ja19tYXAuYzo2OTppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODEtXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzo4MjpcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cdTAwM2VhdHRhY2hfdHlwZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjg3OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxubmV0L2NvcmUvc29ja19tYXAuYy04OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTAtXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMTE6XHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMTItXHRtdXRleF91bmxvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjExODpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19hY3F1aXJlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE5LVx0X19hY3F1aXJlcyhcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI0LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMjU6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNi1cdF9fcmVsZWFzZXMoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEzMS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTMyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2FkZF9saW5rKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTEzMy1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2tfbGluayAqbGluayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQzOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbF9saW5rKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ0LVx0XHRcdCAgICAgIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHZvaWQgKmxpbmtfcmF3KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyLVx0XHRcdHN0cnVjdCBicGZfbWFwICptYXAgPSBsaW5rLVx1MDAzZW1hcDtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUzOlx0XHRcdHN0cnVjdCBza19wc29ja19wcm9ncyAqcHJvZ3MgPSBzb2NrX21hcF9wcm9ncyhtYXApO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNTQtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzktXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4MDpzdGF0aWMgdm9pZCBzb2NrX21hcF91bnJlZihzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmxpbmtfcmF3KVxubmV0L2NvcmUvc29ja19tYXAuYy0xODEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0LVx0aWYgKGxpa2VseShwc29jaykpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg1Olx0XHRzb2NrX21hcF9kZWxfbGluayhzaywgcHNvY2ssIGxpbmtfcmF3KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2LVx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4OS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkwOnN0YXRpYyBpbnQgc29ja19tYXBfaW5pdF9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5ODpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrICpzb2NrX21hcF9wc29ja19nZXRfY2hlY2tlZChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0yMDQtXHRpZiAocHNvY2spIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MjA1Olx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VjbG9zZSAhPSBzb2NrX21hcF9jbG9zZSkge1xubmV0L2NvcmUvc29ja19tYXAuYy0yMDYtXHRcdFx0cHNvY2sgPSBFUlJfUFRSKC1FQlVTWSk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0yMTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjIxODpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0yMTkte1xubmV0L2NvcmUvc29ja19tYXAuYzoyMjA6XHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjIxLVx0c3RydWN0IGJwZl9wcm9nICpzdHJlYW1fdmVyZGljdCA9IE5VTEw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0yNjEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjI2MjpcdHBzb2NrID0gc29ja19tYXBfcHNvY2tfZ2V0X2NoZWNrZWQoc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0yNjMtXHRpZiAoSVNfRVJSKHBzb2NrKSkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjk4LVx0ICovXG5uZXQvY29yZS9zb2NrX21hcC5jOjI5OTpcdHJldCA9IHNvY2tfbWFwX2luaXRfcHJvdG8oc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzAwLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzM5LVxubmV0L2NvcmUvc29ja19tYXAuYzozNDA6c3RhdGljIHZvaWQgc29ja19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxubmV0L2NvcmUvc29ja19tYXAuYy0zNDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzU4LVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzU5Olx0XHRcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zNjAtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzItXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3MzpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZWxlYXNlX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3NC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3ODpzdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg5OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zOTAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkyLVxubmV0L2NvcmUvc29ja19tYXAuYzozOTM6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM5NC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00MDAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwMTpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwMi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00MDctXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwODpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA5LVx0aWYgKCFzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQxNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDE2OnN0YXRpYyBpbnQgX19zb2NrX21hcF9kZWxldGUoc3RydWN0IGJwZl9zdGFiICpzdGFiLCBzdHJ1Y3Qgc29jayAqc2tfdGVzdCxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDE3LVx0XHRcdCAgICAgc3RydWN0IHNvY2sgKipwc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00MjYtXHRpZiAobGlrZWx5KHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDI3Olx0XHRzb2NrX21hcF91bnJlZihzaywgcHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDI4LVx0ZWxzZVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM0LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MzU6c3RhdGljIHZvaWQgc29ja19tYXBfZGVsZXRlX2Zyb21fbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzNi1cdFx0XHRcdCAgICAgIHZvaWQgKmxpbmtfcmF3KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0NDA6XHRfX3NvY2tfbWFwX2RlbGV0ZShzdGFiLCBzaywgbGlua19yYXcpO1xubmV0L2NvcmUvc29ja19tYXAuYy00NDEtfVxubmV0L2NvcmUvc29ja19tYXAuYy00NDItXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0MzpzdGF0aWMgbG9uZyBzb2NrX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0NC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00NTItXHRwc2sgPSBcdTAwMjZzdGFiLVx1MDAzZXNrc1tpXTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDUzOlx0cmV0dXJuIF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIE5VTEwsIHBzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1NC19XG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDU2OnN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDU3LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ3MC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDcxOnN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxubmV0L2NvcmUvc29ja19tYXAuYy00NzItXHRcdFx0XHQgIHN0cnVjdCBzb2NrICpzaywgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDg5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0OTA6XHRyZXQgPSBzb2NrX21hcF9saW5rKG1hcCwgc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy00OTEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo1MDc6XHRzb2NrX21hcF9hZGRfbGluayhwc29jaywgbGluaywgbWFwLCBcdTAwMjZzdGFiLVx1MDAzZXNrc1tpZHhdKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA4LVx0c3RhYi1cdTAwM2Vza3NbaWR4XSA9IHNrO1xubmV0L2NvcmUvc29ja19tYXAuYy01MDktXHRpZiAob3NrKVxubmV0L2NvcmUvc29ja19tYXAuYzo1MTA6XHRcdHNvY2tfbWFwX3VucmVmKG9zaywgXHUwMDI2c3RhYi1cdTAwM2Vza3NbaWR4XSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTUxMS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnN0YWItXHUwMDNlbG9jayk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01MjEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjUyMjpzdGF0aWMgYm9vbCBzb2NrX21hcF9vcF9va2F5KGNvbnN0IHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqb3BzKVxubmV0L2NvcmUvc29ja19tYXAuYy01MjMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTI4LVxubmV0L2NvcmUvc29ja19tYXAuYzo1Mjk6c3RhdGljIGJvb2wgc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzMC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01MzYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjUzNzpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzOC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NDEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjU0MjpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQzLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1Nj1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU5OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTYwLVx0XHRcdCAgICAgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgxLVx0fVxubmV0L2NvcmUvc29ja19tYXAuYzo1ODI6XHRpZiAoIXNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNrKSkge1xubmV0L2NvcmUvc29ja19tYXAuYy01ODMtXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTg2LVxubmV0L2NvcmUvc29ja19tYXAuYzo1ODc6XHRzb2NrX21hcF9za19hY3F1aXJlKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg4Olx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTg5LVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkwLVx0ZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxubmV0L2NvcmUvc29ja19tYXAuYzo1OTE6XHRcdHJldCA9IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc2ssIGZsYWdzKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkyLVx0ZWxzZVxubmV0L2NvcmUvc29ja19tYXAuYy01OTMtXHRcdHJldCA9IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKG1hcCwga2V5LCBzaywgZmxhZ3MpO1xubmV0L2NvcmUvc29ja19tYXAuYzo1OTQ6XHRzb2NrX21hcF9za19yZWxlYXNlKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk1LW91dDpcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjAwOnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAxLVx0XHRcdFx0IHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MDgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjYwOTpcdGlmICghc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc2spKVxubmV0L2NvcmUvc29ja19tYXAuYy02MTAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxMy1cdGJoX2xvY2tfc29jayhzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjYxNDpcdGlmICghc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNS1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNi1cdGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUClcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjE3Olx0XHRyZXQgPSBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNrLCBmbGFncyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTYxOC1cdGVsc2Vcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTYyNC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjI1OkJQRl9DQUxMXzQoYnBmX3NvY2tfbWFwX3VwZGF0ZSwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIHNvcHMsXG5uZXQvY29yZS9zb2NrX21hcC5jLTYyNi1cdCAgIHN0cnVjdCBicGZfbWFwICosIG1hcCwgdm9pZCAqLCBrZXksIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MjktXG5uZXQvY29yZS9zb2NrX21hcC5jOjYzMDpcdGlmIChsaWtlbHkoc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc29wcy1cdTAwM2VzaykgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9zb2NrX21hcC5jOjYzMTpcdFx0ICAgc29ja19tYXBfb3Bfb2theShzb3BzKSkpXG5uZXQvY29yZS9zb2NrX21hcC5jOjYzMjpcdFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc29wcy1cdTAwM2Vzayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjMzLVx0XHRcdFx0XHQgICAgICBmbGFncyk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MzYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjYzNzpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfbWFwX3VwZGF0ZV9wcm90byA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjM4Olx0LmZ1bmNcdFx0PSBicGZfc29ja19tYXBfdXBkYXRlLFxubmV0L2NvcmUvc29ja19tYXAuYy02MzktXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDg9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NjpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NzpcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjU4LVx0XHRyZXR1cm4gU0tfRFJPUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3Nj1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4My1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg0Olx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg1Olx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxubmV0L2NvcmUvc29ja19tYXAuYy02ODYtXHRcdHJldHVybiBTS19EUk9QO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njk3PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbXNnX3JlZGlyZWN0X21hcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTcwNi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzA3OnN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcwOC1cdHN0cnVjdCBicGZfbWFwICptYXA7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz03MjA9REVGSU5FX0JQRl9JVEVSX0ZVTkMoc29ja21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MjMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNDpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI1LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzI5Olx0aW5mby1cdTAwM2VzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0oaW5mby1cdTAwM2VtYXAsIGluZm8tXHUwMDNlaW5kZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYy03MzAtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MzQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjczNTpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM2LVx0X19hY3F1aXJlcyhyY3UpXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNy17XG5uZXQvY29yZS9zb2NrX21hcC5jOjczODpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2NvcmUvc29ja19tYXAuYy03MzktXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03NDItXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0MzpcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0b3AgKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ0LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvc29ja19tYXAuYzo3NDU6XHRyZXR1cm4gc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKGluZm8pO1xubmV0L2NvcmUvc29ja19tYXAuYy03NDYtfVxubmV0L2NvcmUvc29ja19tYXAuYy03NDctXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxubmV0L2NvcmUvc29ja19tYXAuYy03NDktXHRfX211c3RfaG9sZChyY3UpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1MC17XG5uZXQvY29yZS9zb2NrX21hcC5jOjc1MTpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2NvcmUvc29ja19tYXAuYy03NTItXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03NTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjc1NjpcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTc1Ny19XG5uZXQvY29yZS9zb2NrX21hcC5jLTc1OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzU5OnN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc2MC1cdF9fbXVzdF9ob2xkKHJjdSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzYxLXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzYyOlx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG5uZXQvY29yZS9zb2NrX21hcC5jLTc2My1cdHN0cnVjdCBicGZfaXRlcl9fc29ja21hcCBjdHggPSB7fTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzgyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvc29ja19tYXAuYy03ODMtXHRfX3JlbGVhc2VzKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4NS1cdGlmICghdilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzg2Olx0XHQodm9pZClzb2NrX21hcF9zZXFfc2hvdyhzZXEsIE5VTEwpO1xubmV0L2NvcmUvc29ja19tYXAuYy03ODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4ODpcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0YXJ0ICovXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzkxLVxubmV0L2NvcmUvc29ja19tYXAuYzo3OTI6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzb2NrX21hcF9zZXFfb3BzID0ge1xubmV0L2NvcmUvc29ja19tYXAuYzo3OTM6XHQuc3RhcnRcdD0gc29ja19tYXBfc2VxX3N0YXJ0LFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTQ6XHQubmV4dFx0PSBzb2NrX21hcF9zZXFfbmV4dCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzk1Olx0LnN0b3BcdD0gc29ja19tYXBfc2VxX3N0b3AsXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5NjpcdC5zaG93XHQ9IHNvY2tfbWFwX3NlcV9zaG93LFxubmV0L2NvcmUvc29ja19tYXAuYy03OTctfTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk4LVxubmV0L2NvcmUvc29ja19tYXAuYzo3OTk6c3RhdGljIGludCBzb2NrX21hcF9pbml0X3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAxLXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODAyOlx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gcHJpdl9kYXRhO1xubmV0L2NvcmUvc29ja19tYXAuYy04MDMtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MDgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjgwOTpzdGF0aWMgdm9pZCBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODEwLXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODExOlx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gcHJpdl9kYXRhO1xubmV0L2NvcmUvc29ja19tYXAuYy04MTItXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxNjpzdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxubmV0L2NvcmUvc29ja19tYXAuYy04MTcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIzLVxubmV0L2NvcmUvc29ja19tYXAuYzo4MjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBzb2NrX21hcF9pdGVyX3NlcV9pbmZvID0ge1xubmV0L2NvcmUvc29ja19tYXAuYzo4MjU6XHQuc2VxX29wc1x0XHQ9IFx1MDAyNnNvY2tfbWFwX3NlcV9vcHMsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyNjpcdC5pbml0X3NlcV9wcml2YXRlXHQ9IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyNzpcdC5maW5pX3NlcV9wcml2YXRlXHQ9IHNvY2tfbWFwX2Zpbmlfc2VxX3ByaXZhdGUsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyODpcdC5zZXFfcHJpdl9zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyksXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyOS19O1xubmV0L2NvcmUvc29ja19tYXAuYy04MzAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzMTpCVEZfSURfTElTVF9TSU5HTEUoc29ja19tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfc3RhYilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMyOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgzMy1cdC5tYXBfbWV0YV9lcXVhbFx0XHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM0Olx0Lm1hcF9hbGxvY1x0XHQ9IHNvY2tfbWFwX2FsbG9jLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzU6XHQubWFwX2ZyZWVcdFx0PSBzb2NrX21hcF9mcmVlLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XHQubWFwX2dldF9uZXh0X2tleVx0PSBzb2NrX21hcF9nZXRfbmV4dF9rZXksXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mzg6XHQubWFwX3VwZGF0ZV9lbGVtXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mzk6XHQubWFwX2RlbGV0ZV9lbGVtXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDA6XHQubWFwX2xvb2t1cF9lbGVtXHQ9IHNvY2tfbWFwX2xvb2t1cCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQxOlx0Lm1hcF9yZWxlYXNlX3VyZWZcdD0gc29ja19tYXBfcmVsZWFzZV9wcm9ncyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODQyLVx0Lm1hcF9jaGVja19idGZcdFx0PSBtYXBfY2hlY2tfbm9fYnRmLFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDM6XHQubWFwX21lbV91c2FnZVx0XHQ9IHNvY2tfbWFwX21lbV91c2FnZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQ0Olx0Lm1hcF9idGZfaWRcdFx0PSBcdTAwMjZzb2NrX21hcF9idGZfaWRzWzBdLFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDU6XHQuaXRlcl9zZXFfaW5mb1x0XHQ9IFx1MDAyNnNvY2tfbWFwX2l0ZXJfc2VxX2luZm8sXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0Ni19O1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTE5PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9kZWxldGVfZnJvbV9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTkzNy1cdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZlbGVtLVx1MDAzZW5vZGUpO1xubmV0L2NvcmUvc29ja19tYXAuYzo5Mzg6XHRcdHNvY2tfbWFwX3VucmVmKGVsZW0tXHUwMDNlc2ssIGVsZW0pO1xubmV0L2NvcmUvc29ja19tYXAuYy05MzktXHRcdHNvY2tfaGFzaF9mcmVlX2VsZW0oaHRhYiwgZWxlbSk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05NDQ9c3RhdGljIGxvbmcgc29ja19oYXNoX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTk1OC1cdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZlbGVtLVx1MDAzZW5vZGUpO1xubmV0L2NvcmUvc29ja19tYXAuYzo5NTk6XHRcdHNvY2tfbWFwX3VucmVmKGVsZW0tXHUwMDNlc2ssIGVsZW0pO1xubmV0L2NvcmUvc29ja19tYXAuYy05NjAtXHRcdHNvY2tfaGFzaF9mcmVlX2VsZW0oaHRhYiwgZWxlbSk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05OTQ9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDEyLVxubmV0L2NvcmUvc29ja19tYXAuYzoxMDEzOlx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAxNC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDM4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMDM5Olx0c29ja19tYXBfYWRkX2xpbmsocHNvY2ssIGxpbmssIG1hcCwgZWxlbV9uZXcpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMDQwLVx0LyogQWRkIG5ldyBlbGVtZW50IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDQ1LVx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmVsZW0tXHUwMDNlbm9kZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjEwNDY6XHRcdHNvY2tfbWFwX3VucmVmKGVsZW0tXHUwMDNlc2ssIGVsZW0pO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMDQ3LVx0XHRzb2NrX2hhc2hfZnJlZV9lbGVtKGh0YWIsIGVsZW0pO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTE0Nz1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE4My1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjExODQ6XHRcdFx0c29ja19tYXBfdW5yZWYoZWxlbS1cdTAwM2VzaywgZWxlbSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExODUtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjMyPUJQRl9DQUxMXzQoYnBmX3NvY2tfaGFzaF91cGRhdGUsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBzb3BzLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIzNi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIzNzpcdGlmIChsaWtlbHkoc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc29wcy1cdTAwM2VzaykgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMzg6XHRcdCAgIHNvY2tfbWFwX29wX29rYXkoc29wcykpKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjM5LVx0XHRyZXR1cm4gc29ja19oYXNoX3VwZGF0ZV9jb21tb24obWFwLCBrZXksIHNvcHMtXHUwMDNlc2ssIGZsYWdzKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyNTQ9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfaGFzaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2Mi1cdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMjYzOlx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjY0LVx0XHRyZXR1cm4gU0tfRFJPUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyODI9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI5MC1cdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMjkxOlx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjkyLVx0XHRyZXR1cm4gU0tfRFJPUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfaGFzaF9vcHMgPSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUyLVx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19oYXNoX2dldF9uZXh0X2tleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1MzpcdC5tYXBfdXBkYXRlX2VsZW1cdD0gc29ja19tYXBfdXBkYXRlX2VsZW0sXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTQtXHQubWFwX2RlbGV0ZV9lbGVtXHQ9IHNvY2tfaGFzaF9kZWxldGVfZWxlbSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NjQ6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ2NS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc3LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNDc4OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NzktXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfbGluayAqKipwbGluaywgdTMyIHdoaWNoKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDgwLXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ4MTpcdHN0cnVjdCBza19wc29ja19wcm9ncyAqcHJvZ3MgPSBzb2NrX21hcF9wcm9ncyhtYXApO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNDgyLVx0c3RydWN0IGJwZl9wcm9nICoqY3VyX3Bwcm9nO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyMTpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTIyLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzNy0gKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUzODpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOS1cdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTQ1LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTQ2Olx0cmV0ID0gc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChtYXAsIFx1MDAyNnBwcm9nLCBcdTAwMjZwbGluaywgd2hpY2gpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNTQ3LVx0aWYgKHJldClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NDktXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1NTA6XHRyZXQgPSBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayh3aGljaCwgcHJvZyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NTEtXHRpZiAocmV0KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU3Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU3MzppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NzQtXHRcdFx0ICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTkzLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTk0Olx0cmV0ID0gc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChtYXAsIFx1MDAyNnBwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZXF1ZXJ5LmF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU5NS1cdGlmIChyZXQpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjIxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNjIyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX3VubGluayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjIzLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjUtXHRjYXNlIEJQRl9NQVBfVFlQRV9TT0NLTUFQOlxubmV0L2NvcmUvc29ja19tYXAuYzoxNjI2Olx0XHRyZXR1cm4gc29ja19tYXBfZGVsZXRlX2Zyb21fbGluayhsaW5rLVx1MDAzZW1hcCwgc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjctXHRcdFx0XHRcdFx0IGxpbmstXHUwMDNlbGlua19yYXcpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYzNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYzNjpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZW1vdmVfbGlua3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjM3LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDAtXHR3aGlsZSAoKGxpbmsgPSBza19wc29ja19saW5rX3BvcChwc29jaykpKSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDE6XHRcdHNvY2tfbWFwX3VubGluayhzaywgbGluayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDItXHRcdHNrX3Bzb2NrX2ZyZWVfbGluayhsaW5rKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDY6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ3LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NTYtXHRcdHNhdmVkX3VuaGFzaCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KS1cdTAwM2V1bmhhc2g7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NTc6XHRcdGlmICh1bmxpa2VseShzYXZlZF91bmhhc2ggPT0gc29ja19tYXBfdW5oYXNoKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY1OC1cdFx0XHRnb3RvIHJldHJ5O1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY2MC1cdFx0c2F2ZWRfdW5oYXNoID0gcHNvY2stXHUwMDNlc2F2ZWRfdW5oYXNoO1xubmV0L2NvcmUvc29ja19tYXAuYzoxNjYxOlx0XHRzb2NrX21hcF9yZW1vdmVfbGlua3Moc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY2Mi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NjMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NjQ6XHRcdGlmIChXQVJOX09OX09OQ0Uoc2F2ZWRfdW5oYXNoID09IHNvY2tfbWFwX3VuaGFzaCkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NjUtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3MC19XG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NzE6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfdW5oYXNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3Mzp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjc0LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2ODMtXHRcdHNhdmVkX2Rlc3Ryb3kgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCktXHUwMDNlZGVzdHJveTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY4NDpcdFx0aWYgKHVubGlrZWx5KHNhdmVkX2Rlc3Ryb3kgPT0gc29ja19tYXBfZGVzdHJveSkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2ODUtXHRcdFx0Z290byByZXRyeTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2ODctXHRcdHNhdmVkX2Rlc3Ryb3kgPSBwc29jay1cdTAwM2VzYXZlZF9kZXN0cm95O1xubmV0L2NvcmUvc29ja19tYXAuYzoxNjg4Olx0XHRzb2NrX21hcF9yZW1vdmVfbGlua3Moc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY4OS1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjkyLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNjkzOlx0XHRpZiAoV0FSTl9PTl9PTkNFKHNhdmVkX2Rlc3Ryb3kgPT0gc29ja19tYXBfZGVzdHJveSkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2OTQtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY5OS19XG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MDA6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfZGVzdHJveSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MDI6dm9pZCBzb2NrX21hcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcwMy17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzEyLVx0XHRzYXZlZF9jbG9zZSA9IHBzb2NrLVx1MDAzZXNhdmVkX2Nsb3NlO1xubmV0L2NvcmUvc29ja19tYXAuYzoxNzEzOlx0XHRzb2NrX21hcF9yZW1vdmVfbGlua3Moc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcxNC1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzIyLVx0XHQgKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTcyMzpcdFx0aWYgKFdBUk5fT05fT05DRShzYXZlZF9jbG9zZSA9PSBzb2NrX21hcF9jbG9zZSkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MjQtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcyOS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTczMDpcdFx0aWYgKHVubGlrZWx5KHNhdmVkX2Nsb3NlID09IHNvY2tfbWFwX2Nsb3NlKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTczMS1cdFx0XHRnb3RvIHJldHJ5O1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTczNS19XG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MzY6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfY2xvc2UpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNzM3LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYHNvY2tfbWFwX2dldF9uZXh0X2tleWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBzbyBsZXQgbWUgcXVpY2tseSBqdW1wIHRvIGxpbmVzIDQ1Ni00NzAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcmVzaWRlcywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NTE6XHRcbiA0NTI6XHRcdHBzayA9IFx1MDAyNnN0YWItXHUwMDNlc2tzW2ldO1xuIDQ1MzpcdFx0cmV0dXJuIF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIE5VTEwsIHBzayk7XG4gNDU0Olx0fVxuIDQ1NTpcdFxuIDQ1NjpcdHN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcbiA0NTc6XHR7XG4gNDU4Olx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gNDU5Olx0XHR1MzIgaSA9IGtleSA/ICoodTMyICopa2V5IDogVTMyX01BWDtcbiA0NjA6XHRcdHUzMiAqa2V5X25leHQgPSBuZXh0O1xuIDQ2MTpcdFxuIDQ2MjpcdFx0aWYgKGkgPT0gc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMgLSAxKVxuIDQ2MzpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA0NjQ6XHRcdGlmIChpIFx1MDAzZT0gc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpXG4gNDY1Olx0XHRcdCprZXlfbmV4dCA9IDA7XG4gNDY2Olx0XHRlbHNlXG4gNDY3Olx0XHRcdCprZXlfbmV4dCA9IGkgJiM0MzsgMTtcbiA0Njg6XHRcdHJldHVybiAwO1xuIDQ2OTpcdH1cbiA0NzA6XHRcbiA0NzE6XHRzdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbiA0NzI6XHRcdFx0XHRcdCAgc3RydWN0IHNvY2sgKnNrLCB1NjQgZmxhZ3MpXG4gNDczOlx0e1xuIDQ3NDpcdFx0c3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApO1xuIDQ3NTpcdFx0c3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbms7XG4gNDc2Olx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIDQ3NzpcdFx0c3RydWN0IHNvY2sgKm9zaztcbiA0Nzg6XHRcdGludCByZXQ7XG4gNDc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHNvY2tldCBtYXAgbG9va3VwIGlzIGFjdHVhbGx5IGJlaGF2aW5nLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYF9fc29ja19tYXBfbG9va3VwX2VsZW1gIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgem9vbSBpbiBvbiBsaW5lcyAzNzUgdGhyb3VnaCA0MDAuIFRoYXQgcmFuZ2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNodW5rIG9mIHRoZSBjb3JlIGxvZ2ljIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgaG9wZWZ1bGx5IHJldmVhbGluZyB0aGUgbnVhbmNlcyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGxvb2t1cCBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCBjb250ZW50aW9uLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIGJwZiBtYXAgbG9va3VwIHBhcmFkaWdtcywgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdW5leHBlY3RlZCBvciBub3ZlbCBpbiB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0IG1ha2VzIHRoZSBkaWZmZXJlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3NTpcdFx0cHNvY2tfcHJvZ3NfZHJvcChcdTAwMjZjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCktXHUwMDNlcHJvZ3MpO1xuIDM3NjpcdH1cbiAzNzc6XHRcbiAzNzg6XHRzdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbiAzNzk6XHR7XG4gMzgwOlx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gMzgxOlx0XG4gMzgyOlx0XHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcbiAzODM6XHRcbiAzODQ6XHRcdGlmICh1bmxpa2VseShrZXkgXHUwMDNlPSBtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxuIDM4NTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzODY6XHRcdHJldHVybiBSRUFEX09OQ0Uoc3RhYi1cdTAwM2Vza3Nba2V5XSk7XG4gMzg3Olx0fVxuIDM4ODpcdFxuIDM4OTpcdHN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIDM5MDpcdHtcbiAzOTE6XHRcdHN0cnVjdCBzb2NrICpzaztcbiAzOTI6XHRcbiAzOTM6XHRcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbiAzOTQ6XHRcdGlmICghc2spXG4gMzk1Olx0XHRcdHJldHVybiBOVUxMO1xuIDM5NjpcdFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKVxuIDM5NzpcdFx0XHRzb2NrX2hvbGQoc2spO1xuIDM5ODpcdFx0cmV0dXJuIHNrO1xuIDM5OTpcdH1cbiA0MDA6XHRcbiA0MDE6XHRzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gNDAyOlx0e1xuIDQwMzpcdFx0c3RydWN0IHNvY2sgKnNrO1xuIDQwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg1MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYG1heF9lbnRyaWVzYCBVc2FnZSBpbiBgc29ja19tYXBgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYG1heF9lbnRyaWVzYCBpcyBiZWluZyB1c2VkIHdpdGhpbiBgc29ja19tYXBgLCBhbmQgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgYWxsb2NhdGlvbiByb3V0aW5lcyDigJMgc3BlY2lmaWNhbGx5LCBgc29ja19oYXNoX2FsbG9jYCBhbmQgb3RoZXIgbWFwIGFsbG9jYXRvcnMgZm91bmQgd2l0aGluIGtlcm5lbC9icGYgYW5kIG5ldC9jb3JlL3NvY2tfbWFwLmMuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGVzZSBhcmVhcywgYXMgdGhleSYjMzk7cmUgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9ucyBmb3IgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBgbWF4X2VudHJpZXNgIHBhcmFtZXRlci4gRnVydGhlcm1vcmUsIEkmIzM5O2xsIG5lZWQgdG8gcnVsZSBvdXQgY29tbW9uIGVycm9ycyBsaWtlIGludGVnZXIgb3ZlcmZsb3dzIHRoYXQgbWlnaHQgYXJpc2Ugd2hlbiB3b3JraW5nIHdpdGggYSB2YXJpYWJsZSBpbnRlbmRlZCB0byB0cmFjayB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcy4gQSBjb21wcmVoZW5zaXZlIHNlYXJjaCwgdXNpbmcgYGdyZXBgLCBpcyBpbiBvcmRlci4gSSYjMzk7bGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSB3aGVyZSBgbWF4X2VudHJpZXNgIGlzIGNvbXBhcmVkIGFnYWluc3QgYElOVF9NQVhgIGFjcm9zcyB0aGUga2VybmVsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIEkgbmVlZCB0byBhZGRyZXNzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBsaW1pdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9Mzk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzLVx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxubmV0L2NvcmUvc29ja19tYXAuYzo0NDpcdCAgICBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1LVx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBzb2NrX21hcGAgZnVuY3Rpb25hbGl0eS4KCioqRGVjb25zdHJ1Y3RpbmcgU29jayBNYXAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgYHNvY2tfbWFwX2FsbG9jYC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3aGVuZXZlciBJJiMzOTttIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBCUEYgc2lkZS4gT3IgbWF5YmUgYGJwZl9pdGVyYCDigJMgaXQgY291bGQgYmUgaW52b2x2ZWQgaW4gaG93IHdlJiMzOTtyZSB0cmF2ZXJzaW5nIG9yIGl0ZXJhdGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgaW4gcXVlc3Rpb24uIFRoZW4gYWdhaW4sIEkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRvIHBlZWsgYXQgYHNlcV9maWxlYC4KCldhaXQgYSBtaW51dGUsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNvY2tfbWFwX3NlcV9zdGFydGAgYW5kIGBzb2NrX21hcF9zZXFfbmV4dGAuIFRoZXNlIGZ1bmN0aW9uIG5hbWVzIGhhdmUgJiMzNDtzZXEmIzM0OyBpbiB0aGVtLCB3aGljaCBwb2ludHMgZGlyZWN0bHkgYXQgaG93IGEgc2VxdWVudGlhbCBpbnRlcmZhY2UgbWlnaHQgYmUgaW1wbGVtZW50ZWQuCgpPa2F5LCBsZXQmIzM5O3MgY3V0IHJpZ2h0IHRvIHRoZSBjaGFzZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBMaW5lcyA3MDAgdG8gNzY1IGxvb2sgbGlrZSB0aGUgcHJpbWUgc3VzcGVjdCBhcmVhLiBUaW1lIHRvIGRpc3NlY3QgdGhhdCBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0LnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXG4gNzAxOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIDcwMjpcdFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX0NPTlNUX01BUF9QVFIsXG4gNzAzOlx0XHQuYXJnM190eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gNzA0Olx0XHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gNzA1Olx0fTtcbiA3MDY6XHRcbiA3MDc6XHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8ge1xuIDcwODpcdFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiA3MDk6XHRcdHN0cnVjdCBzb2NrICpzaztcbiA3MTA6XHRcdHUzMiBpbmRleDtcbiA3MTE6XHR9O1xuIDcxMjpcdFxuIDcxMzpcdHN0cnVjdCBicGZfaXRlcl9fc29ja21hcCB7XG4gNzE0Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IGJwZl9pdGVyX21ldGEgKiwgbWV0YSk7XG4gNzE1Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IGJwZl9tYXAgKiwgbWFwKTtcbiA3MTY6XHRcdF9fYnBmX21kX3B0cih2b2lkICosIGtleSk7XG4gNzE3Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IHNvY2sgKiwgc2spO1xuIDcxODpcdH07XG4gNzE5Olx0XG4gNzIwOlx0REVGSU5FX0JQRl9JVEVSX0ZVTkMoc29ja21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4gNzIxOlx0XHRcdCAgICAgc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIDcyMjpcdFx0XHQgICAgIHN0cnVjdCBzb2NrICpzaylcbiA3MjM6XHRcbiA3MjQ6XHRzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcbiA3MjU6XHR7XG4gNzI2Olx0XHRpZiAodW5saWtlbHkoaW5mby1cdTAwM2VpbmRleCBcdTAwM2U9IGluZm8tXHUwMDNlbWFwLVx1MDAzZW1heF9lbnRyaWVzKSlcbiA3Mjc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzI4Olx0XG4gNzI5Olx0XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG4gNzMwOlx0XG4gNzMxOlx0XHQvKiBjYW4mIzM5O3QgcmV0dXJuIHNrIGRpcmVjdGx5LCBzaW5jZSB0aGF0IG1pZ2h0IGJlIE5VTEwgKi9cbiA3MzI6XHRcdHJldHVybiBpbmZvO1xuIDczMzpcdH1cbiA3MzQ6XHRcbiA3MzU6XHRzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbiA3MzY6XHRcdF9fYWNxdWlyZXMocmN1KVxuIDczNzpcdHtcbiA3Mzg6XHRcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuIDczOTpcdFxuIDc0MDpcdFx0aWYgKCpwb3MgPT0gMClcbiA3NDE6XHRcdFx0JiM0MzsmIzQzOypwb3M7XG4gNzQyOlx0XG4gNzQzOlx0XHQvKiBwYWlycyB3aXRoIHNvY2tfbWFwX3NlcV9zdG9wICovXG4gNzQ0Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNzQ1Olx0XHRyZXR1cm4gc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKGluZm8pO1xuIDc0NjpcdH1cbiA3NDc6XHRcbiA3NDg6XHRzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuIDc0OTpcdFx0X19tdXN0X2hvbGQocmN1KVxuIDc1MDpcdHtcbiA3NTE6XHRcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuIDc1MjpcdFxuIDc1MzpcdFx0JiM0MzsmIzQzOypwb3M7XG4gNzU0Olx0XHQmIzQzOyYjNDM7aW5mby1cdTAwM2VpbmRleDtcbiA3NTU6XHRcbiA3NTY6XHRcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XG4gNzU3Olx0fVxuIDc1ODpcdFxuIDc1OTpcdHN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gNzYwOlx0XHRfX211c3RfaG9sZChyY3UpXG4gNzYxOlx0e1xuIDc2MjpcdFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG4gNzYzOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAgY3R4ID0ge307XG4gNzY0Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuIDc2NTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIDc2NjpcdFxuIDc2NzpcdFx0bWV0YS5zZXEgPSBzZXE7XG4gNzY4Olx0XHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXHUwMDI2bWV0YSwgIXYpO1xuIDc2OTpcdFx0aWYgKCFwcm9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU2lnbmVkIEludGVnZXIgVXNhZ2Ugd2l0aCBgbWF4X2VudHJpZXNgIGluIGBzb2NrX21hcC5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHdlJiMzOTtyZSB1c2luZyBgbWF4X2VudHJpZXNgIHdpdGggYSBzaWduZWQgaW50ZWdlci4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBsb2NhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFRoYXQgZmlsZSBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igd2hlcmUgdGhpcyBraW5kIG9mIHRoaW5nIHdvdWxkIGJlIGhhbmRsZWQuCgpUbyBuYXJyb3cgaXQgZG93biwgSSBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZSBmb3IgaW5zdGFuY2VzIG9mIGJvdGggYG1hcC0mZ3Q7bWF4X2VudHJpZXNgIGFuZCBgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IHBhdHRlcm5zIHRvIGxvb2sgZm9yIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZS4gSG9wZWZ1bGx5LCB0aGlzIHNlYXJjaCB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIHVzYWdlIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW4gaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF9lbnRyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTM5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0Olx0ICAgIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVggfHxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg6XHRzdGFiLVx1MDAzZXNrcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAqXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5LVx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTM0MD1zdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNDktXHRzeW5jaHJvbml6ZV9yY3UoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzUwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM1MS1cdFx0c3RydWN0IHNvY2sgKipwc2sgPSBcdTAwMjZzdGFiLVx1MDAzZXNrc1tpXTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTM3OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4My1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg0Olx0aWYgKHVubGlrZWx5KGtleSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00NDM9c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQ4LVxubmV0L2NvcmUvc29ja19tYXAuYzo0NDk6XHRpZiAodW5saWtlbHkoaSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00NTY9c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDYxLVxubmV0L2NvcmUvc29ja19tYXAuYzo0NjI6XHRpZiAoaSA9PSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2My1cdFx0cmV0dXJuIC1FTk9FTlQ7XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ2NDpcdGlmIChpIFx1MDAzZT0gc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2NS1cdFx0KmtleV9uZXh0ID0gMDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ3MT1zdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ4MzpcdGlmICh1bmxpa2VseShpZHggXHUwMDNlPSBtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxubmV0L2NvcmUvc29ja19tYXAuYy00ODQtXHRcdHJldHVybiAtRTJCSUc7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz03MjQ9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNS17XG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcdGlmICh1bmxpa2VseShpbmZvLVx1MDAzZWluZGV4IFx1MDAzZT0gaW5mby1cdTAwM2VtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxubmV0L2NvcmUvc29ja19tYXAuYy03MjctXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODE2PXN0YXRpYyB1NjQgc29ja19tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MTktXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyMDpcdHVzYWdlICYjNDM7PSAodTY0KW1hcC1cdTAwM2VtYXhfZW50cmllcyAqIHNpemVvZihzdHJ1Y3Qgc29jayAqKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIxLVx0cmV0dXJuIHVzYWdlO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTY3PXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKnNvY2tfaGFzaF9hbGxvY19lbGVtKHN0cnVjdCBicGZfc2h0YWIgKmh0YWIsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05NzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjk3NDpcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZodGFiLVx1MDAzZWNvdW50KSBcdTAwM2UgaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTc1LVx0XHRpZiAoIW9sZCkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA5OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfaGFzaF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDQ6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICA9PSAwIHx8XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTE4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTE5Olx0aHRhYi1cdTAwM2VidWNrZXRzX251bSA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMjAtXHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3NodGFiX2VsZW0pICYjNDM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrIE1hcCBMb29wKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMzUwIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYDogYGZvciAoaSA9IDA7IGkgJmx0OyBzdGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbG9vcCBpbiB0aGUgYHNvY2tfbWFwX2ZyZWVgIGZ1bmN0aW9uIG1vcmUgY2xlYXJseS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHR5cGUgb2YgdGhlIGxvb3AgY291bnRlciwgYGlgLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0eXBlIGBpYCBpcyBpbiB0aGUgYHNvY2tfbWFwX2ZyZWVgIGZ1bmN0aW9uLCBhbmQgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbG9vcC4gTGV0JiMzOTtzIGV4YW1pbmUgbGluZXMgMzQwIHRocm91Z2ggMzcwIGluIHRoZSBzYW1lIGZpbGUgdG8gZ2FpbiB0aGUgZnVsbCBjb250ZXh0IGFuZCBjb25maXJtIHRoZSB0eXBlIG9mIGBpYC4gVGhpcyBpcyBjcnVjaWFsIGZvciB2ZXJpZnlpbmcgdGhlIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgZm9yIG92ZXJmbG93IGlzc3VlcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG1hcCYjMzk7cyBtYXhpbXVtIGVudHJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0c3RhdGljIHZvaWQgc29ja19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIDM0MTpcdHtcbiAzNDI6XHRcdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcbiAzNDM6XHRcdGludCBpO1xuIDM0NDpcdFxuIDM0NTpcdFx0LyogQWZ0ZXIgdGhlIHN5bmMgbm8gdXBkYXRlcyBvciBkZWxldGVzIHdpbGwgYmUgaW4tZmxpZ2h0IHNvIGl0XG4gMzQ2Olx0XHQgKiBpcyBzYWZlIHRvIHdhbGsgbWFwIGFuZCByZW1vdmUgZW50cmllcyB3aXRob3V0IHJpc2tpbmcgYSByYWNlXG4gMzQ3Olx0XHQgKiBpbiBFRVhJU1QgdXBkYXRlIGNhc2UuXG4gMzQ4Olx0XHQgKi9cbiAzNDk6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDM1MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG4gMzUxOlx0XHRcdHN0cnVjdCBzb2NrICoqcHNrID0gXHUwMDI2c3RhYi1cdTAwM2Vza3NbaV07XG4gMzUyOlx0XHRcdHN0cnVjdCBzb2NrICpzaztcbiAzNTM6XHRcbiAzNTQ6XHRcdFx0c2sgPSB4Y2hnKHBzaywgTlVMTCk7XG4gMzU1Olx0XHRcdGlmIChzaykge1xuIDM1NjpcdFx0XHRcdHNvY2tfaG9sZChzayk7XG4gMzU3Olx0XHRcdFx0bG9ja19zb2NrKHNrKTtcbiAzNTg6XHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMzU5Olx0XHRcdFx0c29ja19tYXBfdW5yZWYoc2ssIHBzayk7XG4gMzYwOlx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzYxOlx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiAzNjI6XHRcdFx0XHRzb2NrX3B1dChzayk7XG4gMzYzOlx0XHRcdH1cbiAzNjQ6XHRcdH1cbiAzNjU6XHRcbiAzNjY6XHRcdC8qIHdhaXQgZm9yIHBzb2NrIHJlYWRlcnMgYWNjZXNzaW5nIGl0cyBtYXAgbGluayAqL1xuIDM2NzpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gMzY4Olx0XG4gMzY5Olx0XHRicGZfbWFwX2FyZWFfZnJlZShzdGFiLVx1MDAzZXNrcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBhIEMgQ29kZSBTbmlwcGV0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBMaW5lIDM0MywgYGludCBpO2Ag4oCTIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzaWduZWQgaW50ZWdlciBgaWAgaGVyZS4gVGhlbiwgb24gbGluZSAzNTAsIHdlIGhhdmUgYGZvciAoaSA9IDA7IGkgJmx0OyBzdGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KWAuIE15IGluaXRpYWwgY29uY2VybiBpczogd2hhdCBoYXBwZW5zIGlmIGBzdGFiLSZndDttYXAubWF4X2VudHJpZXNgIGlzIGxhcmdlciB0aGFuIGBJTlRfTUFYYD8gU2luY2UgYGlgIGlzIHNpZ25lZCwgd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYHN0YWItJmd0O21hcC5tYXhfZW50cmllc2AgaXMgYSBgdTMyYCAodW5zaWduZWQgMzItYml0IGludGVnZXIpIGluIEMsIHRoZSBjb21wYXJpc29uIGBpICZsdDsgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzYCBnZXRzIHRyaWNreS4KCkhlcmUmIzM5O3MgaG93IEkmIzM5O20gYnJlYWtpbmcgaXQgZG93bjogYGlgIChzaWduZWQgaW50KSB3aWxsIGJlIGNvbnZlcnRlZCB0byBgdTMyYCBmb3IgdGhlIGNvbXBhcmlzb24uIE5vdywgd2hlbiBgaWAgYXBwcm9hY2hlcyBgSU5UX01BWGAsIGBpJiM0MzsmIzQzO2AgaGFzIHRoZSBwb3RlbnRpYWwgdG8gb3ZlcmZsb3cgdGhlIHNpZ25lZCBpbnRlZ2VyLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgaW4gQy4gSWYgYGlgIHdyYXBzIGFyb3VuZCB0byBhIG5lZ2F0aXZlIHZhbHVlLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhICpodWdlKiB1bnNpZ25lZCB2YWx1ZSwgb3IgdGhlIGxvb3AgdGVybWluYXRlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGkmIzQzOyYjNDM7YCBvdmVyZmxvdyBiZWluZyB1bmRlZmluZWQgYmVoYXZpb3IsIHRoaXMgY291bGQgYmUgYSBuYXN0eSBidWchCgpBbmQgd2FpdCwgdGhlcmUmIzM5O3MgYW5vdGhlciBwb2ludC4gV2UgYWxzbyBuZWVkIHRvIGFuYWx5emUgdGhlIGBzb2NrX21hcF9kZWxldGVfZWxlbWAgZnVuY3Rpb24uIExldCBtZSBzY2FuIHRocm91Z2ggdGhlIHJlbGV2YW50IGxpbmVzLCBzcGVjaWZpY2FsbHkgNDQwLTQ1NSwgdG8gc2VlIGlmIGEgc2ltaWxhciB2dWxuZXJhYmlsaXR5IGV4aXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE2Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRcdF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIHNrLCBsaW5rX3Jhdyk7XG4gNDQxOlx0fVxuIDQ0MjpcdFxuIDQ0MzpcdHN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiA0NDQ6XHR7XG4gNDQ1Olx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gNDQ2Olx0XHR1MzIgaSA9ICoodTMyICopa2V5O1xuIDQ0NzpcdFx0c3RydWN0IHNvY2sgKipwc2s7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRpZiAodW5saWtlbHkoaSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG4gNDUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1MTpcdFxuIDQ1MjpcdFx0cHNrID0gXHUwMDI2c3RhYi1cdTAwM2Vza3NbaV07XG4gNDUzOlx0XHRyZXR1cm4gX19zb2NrX21hcF9kZWxldGUoc3RhYiwgTlVMTCwgcHNrKTtcbiA0NTQ6XHR9XG4gNDU1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTI4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBvdXQgbG91ZDoKCioqUHJvYmluZyBmb3IgQlBGIE1hcCBJbnRlZ2VyIE92ZXJmbG93IFZ1bG5lcmFiaWxpdGllcyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IEJQRiBtYXBzIGFuZCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBjaGVja3Mgb2YgYG1heF9lbnRyaWVzICZndDsgSU5UX01BWGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIG1hcCB0eXBlcywgYmVzaWRlcyB0aGUgb25lIHRoYXQgdHJpZ2dlcmVkIHRoaXMgdGhvdWdodCwgbWlnaHQgZXhoaWJpdCBzaW1pbGFyIGJlaGF2aW9yLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGltcGxlbWVudGF0aW9ucyBzaW1pbGFyIHRvIGFycmF5IG1hcHMg4oCTIHRoaW5raW5nIGBhcnJheW1hcC5jYCBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIHRoYXQgY2hlY2s6IGBtYXhfZW50cmllcyAmZ3Q7IElOVF9NQVhgIG9yIGFueSBlcXVpdmFsZW50IGxvZ2ljIGluIHRoZSBvdGhlciBtYXAgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1pZ2h0IGludm9sdmUgZGl2aW5nIGludG8gb3RoZXIgYXJyYXktbGlrZSBtYXAgaW1wbGVtZW50YXRpb25zIGFzIHdlbGwuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGtpbmQgb2YgY2hlY2sgaXMgdXNlZCwgYW5kIHdoZXJlIGl0IG1pZ2h0IGJlIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0aWVzIGluIEJQRiBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBodW50IGRvd24gcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29kZS4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlIGFuZCBqdW1wIHJpZ2h0IGludG8gdGhlIGBrZXJuZWwvYnBmL2AgZGlyZWN0b3J5LiBUaGUgdHJpZ2dlciBJJiMzOTttIGtleWluZyBvbiBpcyBzb21ldGhpbmcgdGhhdCBoaW50cyBhdCB0aGUgdXBwZXIgbGltaXQgb2YgaW50ZWdlciB2YWx1ZXMgYmVpbmcgYXBwcm9hY2hlZCBvciBwb3RlbnRpYWxseSBleGNlZWRlZC4gVGhhdCBtZWFucyBJJiMzOTtsbCB1c2UgdGhlIHNlYXJjaCB0ZXJtIGAmZ3Q7IElOVF9NQVhgLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBhc3N1bWluZyB0aGF0IHBsYWNlcyB3aGVyZSBhIHZhcmlhYmxlJiMzOTtzIHZhbHVlIGlzIGNoZWNrZWQgYWdhaW5zdCBgSU5UX01BWGAgYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkga25vdyBgSU5UX01BWGAgaXMgdGhlIG1heGltdW0gdmFsdWUgZm9yIGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLCBhbmQgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGVzZSBjaGVja3MgYXJlIG9jY3VycmluZyB3aXRoaW4gdGhlIEJQRiBjb2RlLiBUaGlzIHNlYXJjaCB0ZXJtIGZlZWxzIGxpa2UgYSBnb29kLCBlZmZpY2llbnQgZmlyc3Qgc3RlcC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gcmV0dXJuIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlcywgYnV0IGl0IHNob3VsZCBhbHNvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIG9mIGxvY2F0aW9ucyB3aGVyZSBJIGNhbiByZWFsbHkgZGlnIGRlZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1x1MDAzZSBJTlRfTUFYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTUzPWludCBhcnJheV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTc0LVx0LyogYXZvaWQgb3ZlcmZsb3cgb24gcm91bmRfdXAobWFwLVx1MDAzZXZhbHVlX3NpemUpICovXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NzU6XHRpZiAoYXR0ci1cdTAwM2V2YWx1ZV9zaXplIFx1MDAzZSBJTlRfTUFYKVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTc2LVx0XHRyZXR1cm4gLUUyQklHO1xuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIyNy1cdFx0cmV0dXJuIDA7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjIyODpcdGlmIChucl9saW5mbyBcdTAwM2UgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgYnBmX2xpbmVfaW5mbykpXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIyOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM1OC1cdFx0cmV0dXJuIDA7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjM1OTpcdGlmIChucl9jb3JlX3JlbG8gXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKVxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNjAtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0yNTE9c3RhdGljIGNoYXIgKmRpYWdfZm10X2FsbG9jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHNpemVfdCBzaXplKVxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yNTctXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MjU4Olx0aWYgKCFkaWFnIHx8ICFzaXplIHx8IHNpemUgXHUwMDNlIElOVF9NQVgpXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMjU5LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDk1PXN0YXRpYyBpbnQgYnBmX2VuYWJsZV9ydW50aW1lX3N0YXRzKHZvaWQpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEwMS1cdC8qIFNldCBhIHZlcnkgaGlnaCBsaW1pdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEwMjpcdGlmIChzdGF0aWNfa2V5X2NvdW50KFx1MDAyNmJwZl9zdGF0c19lbmFibGVkX2tleS5rZXkpIFx1MDAzZSBJTlRfTUFYIC8gMikge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEwMy1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwZl9zdGF0c19lbmFibGVkX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIEN1cmlvdXMgQ2hlY2sgaW4gYHNvY2tfbWFwX2FsbG9jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uLCBhbmQgYSByZWQgZmxhZyBpbW1lZGlhdGVseSBwb3BwZWQgdXA6IHdoeSBpcyBpdCBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGBhdHRyLSZndDttYXhfZW50cmllc2AgaXMgZ3JlYXRlciB0aGFuIGBJTlRfTUFYYD8gVGhhdCBzZWVtcy4uLnVudXN1YWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXM/IElzIHRoZXJlIGEgc3VidGxlIG92ZXJmbG93IGlzc3VlIGF0IHBsYXksIG9yIHNvbWUgb3RoZXIgY29uc3RyYWludCBJJiMzOTttIG1pc3Npbmc/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyLiBJZGVhbGx5LCBJJiMzOTtkIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGBzb2NrX21hcC5jYCBjb2RlIGFuZCB0aGVuIHRoZSBjb21taXQgbG9ncyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGhpc3RvcmljYWwgY29udGV4dC4gVW5mb3J0dW5hdGVseSwgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGdpdCBsb2dzIG9uIHRoZSBzeXotY2x1c3Rlci4gU28sIHNpbmNlIHRoZSBzb2NrIG1hcCBpcyByZWxhdGVkIHRvIGVCUEYsIEkmIzM5O2xsIHN3aXRjaCBnZWFycyBzbGlnaHRseSBhbmQgbG9vayBhdCBob3cgYXJyYXkgbWFwcyBpbiBga2VybmVsL2JwZi9hcnJheW1hcC5jYCBoYW5kbGUgYG1heF9lbnRyaWVzYCB3aXRoIGBhcnJheV9tYXBfYWxsb2NfY2hlY2tgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCB0aGVyZSYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoZSBrZXJuZWwmIzM5O3MgZUJQRiBtYXAgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhpcyBtaWdodCBvZmZlciBzb21lIGNsdWVzLiBJJiMzOTttIGhvcGluZyBJIGNhbiBmaW5kIGEgY29ycmVzcG9uZGluZyBvdmVyZmxvdyBjaGVjaywgb3IgcGVyaGFwcyBhIHJhbmdlIGxpbWl0YXRpb24gdGhlcmUuIFRoaXMgc2hvdWxkIGhlbHAgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGBzb2NrX21hcF9hbGxvY2AgaGFzIHRoaXMgc3BlY2lmaWMgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MzpcdGludCBhcnJheV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gIDU0Olx0e1xuICA1NTpcdFx0Ym9vbCBwZXJjcHUgPSBhdHRyLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk7XG4gIDU2Olx0XHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcbiAgNTc6XHRcbiAgNTg6XHRcdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXG4gIDU5Olx0XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXHUwMDNla2V5X3NpemUgIT0gNCB8fFxuICA2MDpcdFx0ICAgIGF0dHItXHUwMDNldmFsdWVfc2l6ZSA9PSAwIHx8XG4gIDYxOlx0XHQgICAgYXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IH5BUlJBWV9DUkVBVEVfRkxBR19NQVNLIHx8XG4gIDYyOlx0XHQgICAgIWJwZl9tYXBfZmxhZ3NfYWNjZXNzX29rKGF0dHItXHUwMDNlbWFwX2ZsYWdzKSB8fFxuICA2MzpcdFx0ICAgIChwZXJjcHUgXHUwMDI2XHUwMDI2IG51bWFfbm9kZSAhPSBOVU1BX05PX05PREUpKVxuICA2NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNjU6XHRcbiAgNjY6XHRcdGlmIChhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbiAgNjc6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgKEJQRl9GX01NQVBBQkxFIHwgQlBGX0ZfSU5ORVJfTUFQKSlcbiAgNjg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDY5Olx0XG4gIDcwOlx0XHRpZiAoYXR0ci1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSRl9FVkVOVF9BUlJBWSBcdTAwMjZcdTAwMjZcbiAgNzE6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfUFJFU0VSVkVfRUxFTVMpXG4gIDcyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA3MzpcdFxuICA3NDpcdFx0LyogYXZvaWQgb3ZlcmZsb3cgb24gcm91bmRfdXAobWFwLVx1MDAzZXZhbHVlX3NpemUpICovXG4gIDc1Olx0XHRpZiAoYXR0ci1cdTAwM2V2YWx1ZV9zaXplIFx1MDAzZSBJTlRfTUFYKVxuICA3NjpcdFx0XHRyZXR1cm4gLUUyQklHO1xuICA3NzpcdFx0LyogcGVyY3B1IG1hcCB2YWx1ZSBzaXplIGlzIGJvdW5kIGJ5IFBDUFVfTUlOX1VOSVRfU0laRSAqL1xuICA3ODpcdFx0aWYgKHBlcmNwdSBcdTAwMjZcdTAwMjYgcm91bmRfdXAoYXR0ci1cdTAwM2V2YWx1ZV9zaXplLCA4KSBcdTAwM2UgUENQVV9NSU5fVU5JVF9TSVpFKVxuICA3OTpcdFx0XHRyZXR1cm4gLUUyQklHO1xuICA4MDpcdFxuICA4MTpcdFx0cmV0dXJuIDA7XG4gIDgyOlx0fVxuICA4MzpcdFxuICA4NDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJyYXlfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuICA4NTpcdHtcbiAgODY6XHRcdGJvb2wgcGVyY3B1ID0gYXR0ci1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZO1xuICA4NzpcdFx0aW50IG51bWFfbm9kZSA9IGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cik7XG4gIDg4Olx0XHR1MzIgZWxlbV9zaXplLCBpbmRleF9tYXNrLCBtYXhfZW50cmllcztcbiAgODk6XHRcdGJvb2wgYnlwYXNzX3NwZWNfdjEgPSBicGZfYnlwYXNzX3NwZWNfdjEoTlVMTCk7XG4gIDkwOlx0XHR1NjQgYXJyYXlfc2l6ZSwgbWFzazY0O1xuICA5MTpcdFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXk7XG4gIDkyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjQ0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgc29ja19tYXBfYWxsb2NgIGZvciBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyoqCgpPa2F5LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYHNvY2tfbWFwX2FsbG9jYC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIGl0IGFnYWluLCBsaW5lIGJ5IGxpbmUuIExldCBtZSBqdXN0IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldDoKCmBgYGMKc3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cikKewoJc3RydWN0IGJwZl9zdGFiICpzdGFiOwoKCWlmIChhdHRyLSZndDttYXhfZW50cmllcyA9PSAwIHx8CgkgICAgYXR0ci0mZ3Q7bWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYIHx8CgkgICAgYXR0ci0mZ3Q7a2V5X3NpemUgICAgIT0gNCB8fAoJICAgIChhdHRyLSZndDt2YWx1ZV9zaXplICE9IHNpemVvZih1MzIpICZhbXA7JmFtcDsKCSAgICAgYXR0ci0mZ3Q7dmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHwKCSAgICBhdHRyLSZndDttYXBfZmxhZ3MgJmFtcDsgflNPQ0tfQ1JFQVRFX0ZMQUdfTUFTSykKCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKYGBgCgpXYWl0IGEgc2Vjb25k4oCmIHdoYXQgd2FzIHRoZSAqc3BlY2lmaWMqIHJlYXNvbiB3ZSBuZWVkZWQgYGF0dHItJmd0O21heF9lbnRyaWVzICZndDsgSU5UX01BWGA/IE15IG1lbW9yeSBpc24mIzM5O3QgcGVyZmVjdCwgc28gaXQmIzM5O3MgYmVzdCB0byByZWZyZXNoLiBPa2F5LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIGFuZCBzZWUgd2hhdCBoYXBwZW5zIHdpdGggYHN0YWItJmd0O21hcC5tYXhfZW50cmllc2A6CgpgYGBjCglzdGFiLSZndDtza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzICoKCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNvY2sgKiksCgkJCQkgICAgICAgc3RhYi0mZ3Q7bWFwLm51bWFfbm9kZSk7CmBgYAoKQWhhISBOb3cgSSBzZWUgaXQuIElmIGBtYXhfZW50cmllc2AgaXMgYSBgdTMyYCBhbmQgaXQmIzM5O3Mgc2V0IHRvIHNvbWV0aGluZyBsaWtlIGAodTMyKS0xYCwgb3IgYW55IHZhbHVlIHRoYXQmIzM5O3MgY2xvc2UgdG8gdGhlIG1heGltdW0gYHUzMmAgdmFsdWUsIHRoZSBtdWx0aXBsaWNhdGlvbiBieSBgc2l6ZW9mKHN0cnVjdCBzb2NrKilgICpjb3VsZCogb3ZlcmZsb3cuIFRoZSBjYXN0IHRvIGB1NjRgICpoZWxwcyosIGJ1dCB3aXRob3V0IHRoYXQgY2hlY2sgb24gYG1heF9lbnRyaWVzYCwgeW91IGNvdWxkIHN0aWxsIGVuZCB1cCB3aXRoIGFuIHVuZXhwZWN0ZWQgYW5kIHNtYWxsZXIgYWxsb2NhdGlvbiBzaXplLCBsZWFkaW5nIHRvIGJ1ZmZlciBvdmVyZmxvd3MuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBzaXplLgoKU28sIGBicGZfbWFwX2FyZWFfYWxsb2NgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlISBMZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgKnRoYXQqIGZ1bmN0aW9uIG5vdywgdG8gc2VlIHdoYXQgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9hcmVhX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjk5LVxua2VybmVsL2JwZi9hcmVuYS5jOjMwMDpcdGFyZW5hID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqYXJlbmEpLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMwMS1cdGlmICghYXJlbmEpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJyYXlfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDEtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0MjpcdFx0YXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2MoYXJyYXlfc2l6ZSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDMtXHR9XG4tLVxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYz05OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmJsb29tX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE0NC1cdGJpdHNldF9ieXRlcyA9IEJJVFNfVE9fTE9OR1MoKHU2NCliaXRzZXRfbWFzayAmIzQzOyAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM6MTQ1Olx0Ymxvb20gPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpibG9vbSkgJiM0MzsgYml0c2V0X2J5dGVzLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xNDYtXG4tLVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jPTQ0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaW5zbl9hcnJheV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtNDgtXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6NDk6XHRpbnNuX2FycmF5ID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtNTAtXHRpZiAoIWluc25fYXJyYXkpXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTc3Mz1icGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTc4MC1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo3ODE6XHRzbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqc21hcCksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzgyLVx0aWYgKCFzbWFwKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMDg0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTM5LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNDA6XHRzdF9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc3RfbWFwX3NpemUsIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE0MS1cdGlmICghc3RfbWFwKSB7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNDgtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE0OTpcdHN0X21hcC1cdTAwM2V1dmFsdWUgPSBicGZfbWFwX2FyZWFfYWxsb2ModnQtXHUwMDNlc2l6ZSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTUwLVx0c3RfbWFwLVx1MDAzZWZ1bmNzX2NudCA9IGNvdW50X2Z1bmNfcHRycyhidGYsIHQpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTEtXHRzdF9tYXAtXHUwMDNlbGlua3MgPVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNTI6XHRcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXHUwMDNlZnVuY3NfY250ICogc2l6ZW9mKHN0cnVjdCBicGZfbGluayAqKSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTUzLVx0XHRcdFx0ICAgTlVNQV9OT19OT0RFKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1NS1cdHN0X21hcC1cdTAwM2Vrc3ltcyA9XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE1NjpcdFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cdTAwM2VmdW5jc19jbnQgKiBzaXplb2Yoc3RydWN0IGJwZl9rc3ltICopLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTctXHRcdFx0XHQgICBOVU1BX05PX05PREUpO1xuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmM9ODU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjcHVfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtMTAwLVxua2VybmVsL2JwZi9jcHVtYXAuYzoxMDE6XHRjbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqY21hcCksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2NwdW1hcC5jLTEwMi1cdGlmICghY21hcClcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTEwNy1cdC8qIEFsbG9jIGFycmF5IGZvciBwb3NzaWJsZSByZW1vdGUgXCYjMzQ7ZGVzdGluYXRpb25cJiMzNDsgQ1BVcyAqL1xua2VybmVsL2JwZi9jcHVtYXAuYzoxMDg6XHRjbWFwLVx1MDAzZWNwdV9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2MoY21hcC1cdTAwM2VtYXAubWF4X2VudHJpZXMgKlxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDktXHRcdFx0XHRcdCAgIHNpemVvZihzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKiksXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz05MT1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKmRldl9tYXBfY3JlYXRlX2hhc2godW5zaWduZWQgaW50IGVudHJpZXMsXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy05Ni1cbmtlcm5lbC9icGYvZGV2bWFwLmM6OTc6XHRoYXNoID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIGVudHJpZXMgKiBzaXplb2YoKmhhc2gpLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9kZXZtYXAuYy05OC1cdGlmIChoYXNoICE9IE5VTEwpXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz0xMzY9c3RhdGljIGludCBkZXZfbWFwX2luaXRfbWFwKHN0cnVjdCBicGZfZHRhYiAqZHRhYiwgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy0xNTMtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9kZXZtYXAuYzoxNTQ6XHRcdGR0YWItXHUwMDNlbmV0ZGV2X21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBkdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAqXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE1NS1cdFx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGJwZl9kdGFiX25ldGRldiAqKSxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTE2ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmRldl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy0xNjgtXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjE2OTpcdGR0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpkdGFiKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTcwLVx0aWYgKCFkdGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxOT1zdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNi1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNzpcdGh0YWItXHUwMDNlZWxlbXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NClodGFiLVx1MDAzZWVsZW1fc2l6ZSAqIG51bV9lbnRyaWVzLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI4LVx0XHRcdFx0XHQgaHRhYi1cdTAwM2VtYXAubnVtYV9ub2RlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz01NDg9c3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01NjEtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo1NjI6XHRodGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqaHRhYiksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01NjMtXHRpZiAoIWh0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNjA0LVx0ZXJyID0gLUVOT01FTTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjYwNTpcdGh0YWItXHUwMDNlYnVja2V0cyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhodGFiLVx1MDAzZW5fYnVja2V0cyAqXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDYtXHRcdFx0XHRcdCAgIHNpemVvZihzdHJ1Y3QgYnVja2V0KSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODE2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjEtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODIyOlx0cmh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpyaHRhYiksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODIzLVx0aWYgKCFyaHRhYilcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz0yOTc9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzI3LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzI4Olx0bWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjktXHRpZiAoIW1hcClcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9NTcxPXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqdHJpZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNTg3LVxua2VybmVsL2JwZi9scG1fdHJpZS5jOjU4ODpcdHRyaWUgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCp0cmllKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy01ODktXHRpZiAoIXRyaWUpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9NTAzPXN0cnVjdCBicGZfbWFwICpicGZfbWFwX29mZmxvYWRfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxNS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjUxNjpcdG9mZm1hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKm9mZm1hcCksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MTctXHRpZiAoIW9mZm1hcClcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz02NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnF1ZXVlX3N0YWNrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy03My1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjc0Olx0cXMgPSBicGZfbWFwX2FyZWFfYWxsb2MocXVldWVfc2l6ZSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTc1LVx0aWYgKCFxcylcbi0tXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jPTE0OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJldXNlcG9ydF9hcnJheV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jLTE1NC1cdC8qIGFsbG9jYXRlIGFsbCBtYXAgZWxlbWVudHMgYW5kIHplcm8taW5pdGlhbGl6ZSB0aGVtICovXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jOjE1NTpcdGFycmF5ID0gYnBmX21hcF9hcmVhX2FsbG9jKHN0cnVjdF9zaXplKGFycmF5LCBwdHJzLCBhdHRyLVx1MDAzZW1heF9lbnRyaWVzKSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmMtMTU2LVx0aWYgKCFhcnJheSlcbi0tXG5rZXJuZWwvYnBmL3JpbmdidWYuYz05Mz1zdGF0aWMgc3RydWN0IGJwZl9yaW5nYnVmICpicGZfcmluZ2J1Zl9hcmVhX2FsbG9jKHNpemVfdCBkYXRhX3N6LCBpbnQgbnVtYV9ub2RlKVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTEyMi1cdGFycmF5X3NpemUgPSAobnJfbWV0YV9wYWdlcyAmIzQzOyAyICogbnJfZGF0YV9wYWdlcykgKiBzaXplb2YoKnBhZ2VzKTtcbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjEyMzpcdHBhZ2VzID0gYnBmX21hcF9hcmVhX2FsbG9jKGFycmF5X3NpemUsIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL3JpbmdidWYuYy0xMjQtXHRpZiAoIXBhZ2VzKVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTE5ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJpbmdidWZfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTIxMi1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjIxMzpcdHJiX21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnJiX21hcCksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL3JpbmdidWYuYy0yMTQtXHRpZiAoIXJiX21hcClcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9Njg9c3RhdGljIGludCBwcmVhbGxvY19lbGVtc19hbmRfZnJlZWxpc3Qoc3RydWN0IGJwZl9zdGFja19tYXAgKnNtYXApXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTczLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjc0Olx0c21hcC1cdTAwM2VlbGVtcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhlbGVtX3NpemUgKiBzbWFwLVx1MDAzZW1hcC5tYXhfZW50cmllcyxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NS1cdFx0XHRcdFx0IHNtYXAtXHUwMDNlbWFwLm51bWFfbm9kZSk7XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTkzPXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc3RhY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMjUtXHRjb3N0ID0gbl9idWNrZXRzICogc2l6ZW9mKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopICYjNDM7IHNpemVvZigqc21hcCk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MTI2Olx0c21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhjb3N0LCBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMjctXHRpZiAoIXNtYXApXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzA4PXN0YXRpYyBpbnQgYnBmX21hcF9jb3B5X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzcxLSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzcyOnN0YXRpYyB2b2lkICpfX2JwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSwgYm9vbCBtbWFwYWJsZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3My17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDA4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDA5OnZvaWQgKmJwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxMC17XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MTE6XHRyZXR1cm4gX19icGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTItfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQxND12b2lkICpicGZfbWFwX2FyZWFfbW1hcGFibGVfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTUte1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NDE2Olx0cmV0dXJuIF9fYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIG51bWFfbm9kZSwgdHJ1ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBfX2JwZl9tYXBfYXJlYV9hbGxvY2AgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBsaW5lIDM3Mi4KCioqRGl2aW5nIGludG8gYF9fYnBmX21hcF9hcmVhX2FsbG9jYCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBfX2JwZl9tYXBfYXJlYV9hbGxvY2AgYXQgbGluZSAzNzIgb2YgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgdGhlIGNvcmUgYWxsb2NhdG9yIGZvciBCUEYgbWFwIGFyZWFzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGl0cyBwbGFjZW1lbnQgd2l0aGluIHRoZSBCUEYgc3lzY2FsbCBjb2RlLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgYWxsb2NhdGlvbiBvZiBtZW1vcnkgcmVnaW9ucyB0aGF0IHdpbGwgaG9sZCB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggb3VyIEJQRiBtYXBzLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gV2hhdCBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGl0IHVzaW5nPyBJcyBpdCBzbGFiLCBidWRkeSwgb3Igc29tZXRoaW5nIGN1c3RvbSB0YWlsb3JlZCBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgYWxsb2NhdGlvbiBmbGFncyBvciBzdHJhdGVnaWVzIHRvIG9wdGltaXplIGZvciBCUEYmIzM5O3MgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgcmVxdWlyZW1lbnRzPyBJdCBpcyBhbHNvIGludGVyZXN0aW5nIHRvIHRoaW5rIGFib3V0IGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgYXJvdW5kIHRoaXMgYWxsb2NhdGlvbi4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBsb2NrcyBvciBjdXN0b20gb3B0aW1pemVkIGxvY2tzPyBBbmQgYWxzbywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYXBwZWFyPyBNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgY2hhcmFjdGVyaXN0aWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNzA6XHQgKiBtZW1vcnkgY2dyb3VwIChzZWUgYXQgYnBmX21hcF9rbWFsbG9jX25vZGUoKSBmb3IgZXhhbXBsZSkuXG4gMzcxOlx0ICovXG4gMzcyOlx0c3RhdGljIHZvaWQgKl9fYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlLCBib29sIG1tYXBhYmxlKVxuIDM3MzpcdHtcbiAzNzQ6XHRcdC8qIFdlIHJlYWxseSBqdXN0IHdhbnQgdG8gZmFpbCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgT09NIGtpbGxlclxuIDM3NTpcdFx0ICogdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB0aGVyZWZvcmUgd2Ugc2V0IF9fR0ZQX05PUkVUUlkgdG8ga21hbGxvYyxcbiAzNzY6XHRcdCAqIHdoaWNoIGlzIHVzZWQgZm9yIGxvd2VyIG9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuXG4gMzc3Olx0XHQgKlxuIDM3ODpcdFx0ICogSXQgaGFzIGJlZW4gb2JzZXJ2ZWQgdGhhdCBoaWdoZXIgb3JkZXIgYWxsb2NhdGlvbiByZXF1ZXN0cyBkb25lIGJ5XG4gMzc5Olx0XHQgKiB2bWFsbG9jIHdpdGggX19HRlBfTk9SRVRSWSBiZWluZyBzZXQgbWlnaHQgZmFpbCBkdWUgdG8gbm90IHRyeWluZ1xuIDM4MDpcdFx0ICogdG8gcmVjbGFpbSBtZW1vcnkgZnJvbSB0aGUgcGFnZSBjYWNoZSwgdGh1cyB3ZSBzZXRcbiAzODE6XHRcdCAqIF9fR0ZQX1JFVFJZX01BWUZBSUwgdG8gYXZvaWQgc3VjaCBzaXR1YXRpb25zLlxuIDM4MjpcdFx0ICovXG4gMzgzOlx0XG4gMzg0Olx0XHRnZnBfdCBnZnAgPSBicGZfbWVtY2dfZmxhZ3MoX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XG4gMzg1Olx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuIDM4NjpcdFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7XG4gMzg3Olx0XHR2b2lkICphcmVhO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKHNpemUgXHUwMDNlPSBTSVpFX01BWClcbiAzOTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzkxOlx0XG4gMzkyOlx0XHQvKiBrbWFsbG9jKCkmIzM5O2VkIG1lbW9yeSBjYW4mIzM5O3QgYmUgbW1hcCgpJiMzOTtlZCAqL1xuIDM5MzpcdFx0aWYgKG1tYXBhYmxlKSB7XG4gMzk0Olx0XHRcdEJVR19PTighUEFHRV9BTElHTkVEKHNpemUpKTtcbiAzOTU6XHRcdFx0YWxpZ24gPSBTSE1MQkE7XG4gMzk2Olx0XHRcdGZsYWdzID0gVk1fVVNFUk1BUDtcbiAzOTc6XHRcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2M9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSkge1xuIDM5ODpcdFx0XHRhcmVhID0ga21hbGxvY19ub2RlKHNpemUsIGdmcCB8IEdGUF9VU0VSIHwgX19HRlBfTk9SRVRSWSxcbiAzOTk6XHRcdFx0XHRcdCAgICBudW1hX25vZGUpO1xuIDQwMDpcdFx0XHRpZiAoYXJlYSAhPSBOVUxMKVxuIDQwMTpcdFx0XHRcdHJldHVybiBhcmVhO1xuIDQwMjpcdFx0fVxuIDQwMzpcdFxuIDQwNDpcdFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlKHNpemUsIGFsaWduLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbiA0MDU6XHRcdFx0XHRnZnAgfCBHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCwgUEFHRV9LRVJORUwsXG4gNDA2Olx0XHRcdFx0ZmxhZ3MsIG51bWFfbm9kZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiA0MDc6XHR9XG4gNDA4Olx0XG4gNDA5Olx0dm9pZCAqYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxuIDQxMDpcdHtcbiA0MTE6XHRcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcbiA0MTI6XHR9XG4gNDEzOlx0XG4gNDE0Olx0dm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODc3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gQlBGIFNvY2sgTWFwIEZyZWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAzODQgY2F1Z2h0IG15IGV5ZSwgc3BlY2lmaWNhbGx5IHRoZSBgX19HRlBfWkVST2AgZmxhZyBwYXNzZWQgdG8gYGJwZl9tZW1jZ19mbGFnc2AuIEl0IG1lYW5zIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBicGZfbWFwX2FyZWFfYWxsb2NgIGlzIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIEJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgY3JpdGljYWwgcG9pbnQgaGVyZS4KClRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoeSB0aGUgY2hlY2sgYGF0dHItJmd0O21heF9lbnRyaWVzICZndDsgSU5UX01BWGAgd2FzIGFkZGVkIGluIHRoZSBmaXJzdCBwbGFjZT8gSXQgZ290IG1lIHRoaW5raW5nIGFib3V0IGhvdyBgbWF4X2VudHJpZXNgIGlzIHVzZWQsIHNwZWNpZmljYWxseSBpbiBgc29ja19tYXBfZnJlZWAuCgpgYGBjCnN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcCkKewoJc3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApOwoJaW50IGk7CgoJLyogQWZ0ZXIgdGhlIHN5bmMgbm8gdXBkYXRlcyBvciBkZWxldGVzIHdpbGwgYmUgaW4tZmxpZ2h0IHNvIGl0CgkgKiBpcyBzYWZlIHRvIHdhbGsgbWFwIGFuZCByZW1vdmUgZW50cmllcyB3aXRob3V0IHJpc2tpbmcgYSByYWNlCgkgKiBpbiBFRVhJU1QgdXBkYXRlIGNhc2UuCgkgKi8KCXN5bmNocm9uaXplX3JjdSgpOwoJZm9yIChpID0gMDsgaSAmbHQ7IHN0YWItJmd0O21hcC5tYXhfZW50cmllczsgaSYjNDM7JiM0MzspIHsKYGBgCgpTbywgYHN0YWItJmd0O21hcC5tYXhfZW50cmllc2AgaXMgYSBgdTMyYCwgYW5kIHRoZSBsb29wIGNvdW50ZXIgYGlgIGlzIGFuIGBpbnRgLiBJZiBgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzYCBpcyBpbmRlZWQgZ3JlYXRlciB0aGFuIGBJTlRfTUFYYCwgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGNvbXBhcmlzb24gYGkgJmx0OyBzdGFiLSZndDttYXAubWF4X2VudHJpZXNgIGlzIGltcGxpY2l0bHkgY29tcGFyaW5nIGFuIGBpbnRgIHRvIGEgYHUzMmAuIFRoZXkgd2lsbCBib3RoIGJlIGNvbnZlcnRlZCB0byBgdTMyYCBmb3IgdGhlIGNvbXBhcmlzb24sIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgcHJvYmxlbS4KClRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGxvb3AgaXRzZWxmLiBXaGVuIGBpYCBpbmNyZW1lbnRzIGZyb20gYDBgIHRvIGBJTlRfTUFYYCAoYDB4N2ZmZmZmZmZgKSwgdGhlIG5leHQgaW5jcmVtZW50IChgaSYjNDM7JiM0MztgKSBpcyBhIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93ISBJbiBHQ0MvQ2xhbmcgd2l0aCBVQlNBTiwgdGhpcyBpcyB1bmRlZmluZWQgYmVoYXZpb3IuIEV2ZW4gd29yc2UsIGlmIGBpYCB3cmFwcyB0byBhIG5lZ2F0aXZlIHZhbHVlLCBpdCBiZWNvbWVzIGEgbWFqb3IgcHJvYmxlbS4gRm9yIGV4YW1wbGUsIGlmIGl0IHdyYXBzIHRvIC0yMTQ3NDgzNjQ4LCB0aGVuIGAodTMyKWlgIGlzIDB4ODAwMDAwMDAuICBUaGVuLCB3aGVuIGBpYCByZWFjaGVzIC0xLCBgKHUzMilpYCBpcyAweGZmZmZmZmZmLgoKSWYgYG1heF9lbnRyaWVzYCBpcyBgMHhmZmZmZmZmZmAsIHRoZW4gYGlgIGxvb3BzIGJhY2sgdG8gMC4gSXQmIzM5O3MgYW4gaW5maW5pdGUgbG9vcCEgQWxzbywgdGhlIGluZGV4IGBpYCBpcyB1c2VkIGluIGBzdGFiLSZndDtza3NbaV1gLCB3aGVyZSBgaWAgaXMgYSBuZWdhdGl2ZSBpbnRlZ2VyLiBUaGlzIG1lYW5zIGBzdGFiLSZndDtza3MgJiM0MzsgKC0yMTQ3NDgzNjQ4KWAgaXMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYmVsb3cgYHN0YWItJmd0O3Nrc2AhIFRoaXMgaXMgYSBtZW1vcnkgYnVnLCBvciBpdCB0cmlnZ2VycyB0aGUgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3csIG9yIGl0IGlzIGFuIGluZmluaXRlIGxvb3AuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIG90aGVyIHBsYWNlcyB3aGVyZSBgbWF4X2VudHJpZXNgIGlzIHVzZWQgb3IgY29udmVydGVkIHRvIGFuIGBpbnRgLCBvciBjb21wYXJlZCB3aXRoIGFuIGBpbnRgLiBJIHNob3VsZCBjaGVjayBhbGwgdGhlIGNhbGxlcnMgb2YgYHNvY2tfbWFwX2FsbG9jYCBhcyB3ZWxsIGFzIHRoZSBCUEYgc3lzY2FsbCBpdHNlbGYsIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFyb3VuZCBgbWFwX2NyZWF0ZWAuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2NyZWF0ZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNjI5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTYzMDpzdGF0aWMgaW50IG1hcF9jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyICphdHRyX2NvbW1vbixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2MzEtXHRcdCAgICAgIGJwZnB0cl90IHVhdHRyX2NvbW1vbiwgdTMyIHNpemVfY29tbW9uKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2NjEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNjYyOlx0ZXJyID0gc2VjdXJpdHlfYnBmX21hcF9jcmVhdGUobWFwLCBhdHRyLCB0b2tlbiwgdWF0dHIuaXNfa2VybmVsKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2NjMtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNDMtXHRjYXNlIEJQRl9NQVBfQ1JFQVRFOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM0NDpcdFx0ZXJyID0gbWFwX2NyZWF0ZShcdTAwMjZhdHRyLCB1YXR0ciwgXHUwMDI2YXR0cl9jb21tb24sIHVhdHRyX2NvbW1vbiwgc2l6ZV9jb21tb24pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM0NS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTg2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIGBtYXBfY3JlYXRlYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2hlbiBhIG1hcCBpcyBjcmVhdGVkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgaW5zcGVjdCB0aGUgYG1hcF9jcmVhdGVgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFRoZW4sIEkgc2hvdWxkIGludmVzdGlnYXRlIGBtYXBfY3JlYXRlX2FsbG9jYC4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgYGFsbG9jYCBmdW5jdGlvbiBtYXkgaGFuZGxlIHRoZSBhY3R1YWwgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hcCYjMzk7cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG1hcF9jcmVhdGVgIGFuZCBgbWFwX2NyZWF0ZV9hbGxvY2AgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBmdWxsIGNyZWF0aW9uIHByb2Nlc3MsIHBhcnRpY3VsYXJseSBpbiBhIHN5c3RlbXMgY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW55IHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGhvdyB0aGV5IHJlbGF0ZS4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM4MjpcdHN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4xMzgzOlx0XHRcdFx0ICAgIHN0cnVjdCBicGZfbWFwICoqbWFwcCwgc3RydWN0IGJwZl90b2tlbiAqKnRva2VucClcbjEzODQ6XHR7XG4xMzg1Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgKm9wcztcbjEzODY6XHRcdHN0cnVjdCBicGZfdG9rZW4gKnRva2VuID0gTlVMTDtcbjEzODc6XHRcdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xuMTM4ODpcdFx0dTMyIG1hcF90eXBlID0gYXR0ci1cdTAwM2VtYXBfdHlwZTtcbjEzODk6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG4xMzkwOlx0XHRib29sIHRva2VuX2ZsYWc7XG4xMzkxOlx0XHRpbnQgZXJyO1xuMTM5MjpcdFxuMTM5MzpcdFx0ZXJyID0gQ0hFQ0tfQVRUUihCUEZfTUFQX0NSRUFURSk7XG4xMzk0Olx0XHRpZiAoZXJyKSB7XG4xMzk1Olx0XHRcdGJwZl9sb2cobG9nLCBcJiMzNDtJbnZhbGlkIGF0dHIuXFxuXCYjMzQ7KTtcbjEzOTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzk3Olx0XHR9XG4xMzk4Olx0XG4xMzk5Olx0XHQvKiBjaGVjayBCUEZfRl9UT0tFTl9GRCBmbGFnLCByZW1lbWJlciBpZiBpdCYjMzk7cyBzZXQsIGFuZCB0aGVuIGNsZWFyIGl0XG4xNDAwOlx0XHQgKiB0byBhdm9pZCBwZXItbWFwIHR5cGUgY2hlY2tzIHRyaXBwaW5nIG9uIHVua25vd24gZmxhZ1xuMTQwMTpcdFx0ICovXG4xNDAyOlx0XHR0b2tlbl9mbGFnID0gYXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1RPS0VOX0ZEO1xuMTQwMzpcdFx0YXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2PSB+QlBGX0ZfVE9LRU5fRkQ7XG4xNDA0Olx0XG4xNDA1Olx0XHRpZiAoYXR0ci1cdTAwM2VidGZfdm1saW51eF92YWx1ZV90eXBlX2lkKSB7XG4xNDA2Olx0XHRcdGlmIChhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9TVFJVQ1RfT1BTKSB7XG4xNDA3Olx0XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O2J0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHN0cnVjdF9vcHMgbWFwcy5cXG5cJiMzNDspO1xuMTQwODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQwOTpcdFx0XHR9XG4xNDEwOlx0XHRcdGlmIChhdHRyLVx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCB8fCBhdHRyLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKSB7XG4xNDExOlx0XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O2J0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYnRmX2tleV90eXBlX2lkIGFuZCBidGZfdmFsdWVfdHlwZV9pZC5cXG5cJiMzNDspO1xuMTQxMjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQxMzpcdFx0XHR9XG4xNDE0Olx0XHR9IGVsc2UgaWYgKGF0dHItXHUwMDNlYnRmX2tleV90eXBlX2lkIFx1MDAyNlx1MDAyNiAhYXR0ci1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCkge1xuMTQxNTpcdFx0XHRicGZfbG9nKGxvZywgXCYjMzQ7SW52YWxpZCBidGZfdmFsdWVfdHlwZV9pZC5cXG5cJiMzNDspO1xuMTQxNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MTc6XHRcdH1cbjE0MTg6XHRcbjE0MTk6XHRcdGlmIChhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9CTE9PTV9GSUxURVIgXHUwMDI2XHUwMDI2XG4xNDIwOlx0XHQgICAgYXR0ci1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJFTkEgXHUwMDI2XHUwMDI2XG4xNDIxOlx0XHQgICAgYXR0ci1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBgbWFwX2NyZWF0ZV9hbGxvY2AqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtYXBfY3JlYXRlX2FsbG9jYC4gVGhpcyBzdWdnZXN0cyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGFyZWEgd2l0aGluIG91ciBtYXBwaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRoYXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTt2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGlzc3VlIG9yIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayByZWxhdGVkIHRvIGhvdyB3ZSYjMzk7cmUgY3JlYXRpbmcgYW5kIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBvdXIgbWFwcywgcG90ZW50aWFsbHkgc3RlbW1pbmcgZnJvbSB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYWxsb2NhdG9yIGl0c2VsZi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhIGZldyB0aGluZ3M6IEFyZSB3ZSBpbml0aWFsaXppbmcgdGhlIG1hcHMgZWZmaWNpZW50bHk/IElzIHRoZXJlIGFueSByZWR1bmRhbnQgYWxsb2NhdGlvbiBoYXBwZW5pbmc/IENvdWxkIHRoZXJlIGJlIGFueSBtZW1vcnkgbGVha3MgbHVya2luZyB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgdGhlIGltcGFjdCBvZiBsb2NraW5nIChpZiBhbnkpIGFuZCBob3cgd2UgbWlnaHQgb3B0aW1pemUgZm9yIHBhcmFsbGVsIGFjY2Vzcy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIHByZWNpc2Ugc291cmNlIG9mIHdoYXRldmVyIGlycmVndWxhcml0eSB3ZSYjMzk7dmUgZGV0ZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjI6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XG4xNDIzOlx0XHRcdGJwZl9sb2cobG9nLCBcJiMzNDtJbnZhbGlkIG1hcF9leHRyYS5cXG5cJiMzNDspO1xuMTQyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MjU6XHRcdH1cbjE0MjY6XHRcbjE0Mjc6XHRcdGlmIChudW1hX25vZGUgIT0gTlVNQV9OT19OT0RFIFx1MDAyNlx1MDAyNlxuMTQyODpcdFx0ICAgICgodW5zaWduZWQgaW50KW51bWFfbm9kZSBcdTAwM2U9IG5yX25vZGVfaWRzIHx8XG4xNDI5Olx0XHQgICAgICFub2RlX29ubGluZShudW1hX25vZGUpKSkge1xuMTQzMDpcdFx0XHRicGZfbG9nKGxvZywgXCYjMzQ7SW52YWxpZCBudW1hX25vZGUuXFxuXCYjMzQ7KTtcbjE0MzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDMyOlx0XHR9XG4xNDMzOlx0XG4xNDM0Olx0XHQvKiBmaW5kIG1hcCB0eXBlIGFuZCBpbml0IG1hcDogaGFzaHRhYmxlIHZzIHJidHJlZSB2cyBibG9vbSB2cyAuLi4gKi9cbjE0MzU6XHRcdG1hcF90eXBlID0gYXR0ci1cdTAwM2VtYXBfdHlwZTtcbjE0MzY6XHRcdGlmIChtYXBfdHlwZSBcdTAwM2U9IEFSUkFZX1NJWkUoYnBmX21hcF90eXBlcykpIHtcbjE0Mzc6XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O0ludmFsaWQgbWFwX3R5cGUuXFxuXCYjMzQ7KTtcbjE0Mzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDM5Olx0XHR9XG4xNDQwOlx0XHRtYXBfdHlwZSA9IGFycmF5X2luZGV4X25vc3BlYyhtYXBfdHlwZSwgQVJSQVlfU0laRShicGZfbWFwX3R5cGVzKSk7XG4xNDQxOlx0XHRvcHMgPSBicGZfbWFwX3R5cGVzW21hcF90eXBlXTtcbjE0NDI6XHRcdGlmICghb3BzKVxuMTQ0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0NDQ6XHRcbjE0NDU6XHRcdGlmIChvcHMtXHUwMDNlbWFwX2FsbG9jX2NoZWNrKSB7XG4xNDQ2Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VtYXBfYWxsb2NfY2hlY2soYXR0cik7XG4xNDQ3Olx0XHRcdGlmIChlcnIpXG4xNDQ4Olx0XHRcdFx0cmV0dXJuIGVycjtcbjE0NDk6XHRcdH1cbjE0NTA6XHRcdGlmIChhdHRyLVx1MDAzZW1hcF9pZmluZGV4KVxuMTQ1MTpcdFx0XHRvcHMgPSBcdTAwMjZicGZfbWFwX29mZmxvYWRfb3BzO1xuMTQ1MjpcdFx0aWYgKCFvcHMtXHUwMDNlbWFwX21lbV91c2FnZSlcbjE0NTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDU0Olx0XG4xNDU1Olx0XHRpZiAodG9rZW5fZmxhZykge1xuMTQ1NjpcdFx0XHR0b2tlbiA9IGJwZl90b2tlbl9nZXRfZnJvbV9mZChhdHRyLVx1MDAzZW1hcF90b2tlbl9mZCk7XG4xNDU3Olx0XHRcdGlmIChJU19FUlIodG9rZW4pKSB7XG4xNDU4Olx0XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O0ludmFsaWQgbWFwX3Rva2VuX2ZkLlxcblwmIzM0Oyk7XG4xNDU5Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIodG9rZW4pO1xuMTQ2MDpcdFx0XHR9XG4xNDYxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDgxCgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDg0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYHNvY2tfbWFwX2FsbG9jYCBQYXRjaCBhbmQgS01TQU4gUmVxdWlyZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB3aXRoaW4gYHNvY2tfbWFwX2FsbG9jYDogYGF0dHItJmd0O21heF9lbnRyaWVzICZndDsgSU5UX01BWGAuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIHNpemUgbGltaXQgb24gdGhlIGBtYXhfZW50cmllc2AgdmFsdWUuIEJlZm9yZSwgdGhlIGNvZGUgbWlnaHQgaGF2ZSBwcm9jZWVkZWQgd2l0aCBhIHByb2JsZW1hdGljIGBtYXhfZW50cmllc2AgdmFsdWUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW50ZWdlciBvdmVyZmxvdywgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHJlc291cmNlIGV4aGF1c3Rpb24gbGF0ZXIgb24g4oCTIHNheSwgaW4gYHNvY2tfbWFwX2ZyZWVgIG9yIGR1cmluZyBhbGxvY2F0aW9uIGl0c2VsZi4KCk5vdywgdGhpcyBwYXRjaCAqcmVqZWN0cyogb3ZlcnNpemVkIGBtYXhfZW50cmllc2AgdmFsdWVzIHJpZ2h0IGF0IHRoZSBhbGxvY2F0aW9uIHN0YWdlLCByZXR1cm5pbmcgYC1FSU5WQUxgLiAgTXkgam9iIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgY2hlY2suCgpGaXJzdCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIHJpc2tzLiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQmIzM5O3MgKmFkZGluZyogaW5wdXQgdmFsaWRhdGlvbi4gRG9lcyBpdCBhZmZlY3QgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlPyBOby4gRG9lcyBpdCB0b3VjaCBwYWRkaW5nLCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgb3IgaGVhcCBtZW1vcnkgaW4gYSBkYW5nZXJvdXMgd2F5PyBOby4gSXMgaXQgYWx0ZXJpbmcgYW55IGJvdW5kcyBjaGVja3MgaW4gYSBtYW5uZXIgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCYjMzk7cyBtYWtpbmcgdGhlIGJvdW5kcyAqdGlnaHRlciouIEluIGVmZmVjdCwgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgYWxsb2NhdGlvbiBvZiBleGNlc3NpdmVseSBsYXJnZSwgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgbWFwcy4KCkkgaGF2ZSB0aGUgS01TQU4gZ3VpZGVsaW5lcyBpbiBmcm9udCBvZiBtZSwgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZS4gVGhlIHJ1bGVzIHN0YXRlIEtNU0FOIGlzIG5lZWRlZCB3aGVuIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciB0aGUgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgZml0IHRoZXNlIGNhdGVnb3JpZXMuIFRoZSBwYXRjaCBhbHNvIGRvZXMgbm90IGludm9sdmUgYm91bmRzIGNoZWNrIG1vZGlmaWNhdGlvbiB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBwYXRjaCYjMzk7cyBwcmltYXJ5IGNvbmNlcm4gaXMgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93LCBvdmVyc2l6ZWQgYWxsb2NhdGlvbnMsIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVlIHRvIGEgdG9vLWxhcmdlIG1hcCBzaXplIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL1VCU0FOLiBUaGVzZSBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4KClRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIEtNU0FOIGNyaXRlcmlhLCBOZWVkc0tNU0FOID0gZmFsc2UuICBUaGlzIGlzIGEgc2FmZSBjaGFuZ2UgdGhhdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTttIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayAoYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgKSBpbiBgc29ja19tYXBfYWxsb2MoKWAgdG8gcmVqZWN0IG1hcCBjcmVhdGlvbiB3aGVuIGBtYXhfZW50cmllc2AgZXhjZWVkcyBgSU5UX01BWGAuIFRoaXMgcHJldmVudHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiBpbiBgc29ja19tYXBfZnJlZSgpYCB3aGVyZSBhIHNpZ25lZCBgaW50IGlgIGlzIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBtYXAgZW50cmllcykuIFxuXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayAoYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgKSBpbiBgc29ja19tYXBfYWxsb2MoKWAgdG8gcmVqZWN0IG1hcCBjcmVhdGlvbiB3aGVuIGBtYXhfZW50cmllc2AgZXhjZWVkcyBgSU5UX01BWGAuIFRoaXMgcHJldmVudHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiBpbiBgc29ja19tYXBfZnJlZSgpYCB3aGVyZSBhIHNpZ25lZCBgaW50IGlgIGlzIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBtYXAgZW50cmllcykuIFxuXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6MzkuNzE3NDc1OTE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyNDY1NDkyNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2NrX21hcF9hbGxvY1wiLFxuICAgIFwic29ja19tYXBfZnJlZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYYCkgaW4gYHNvY2tfbWFwX2FsbG9jKClgIHRvIHJlamVjdCBtYXAgY3JlYXRpb24gd2hlbiBgbWF4X2VudHJpZXNgIGV4Y2VlZHMgYElOVF9NQVhgLiBUaGlzIHByZXZlbnRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGUuZy4gaW4gYHNvY2tfbWFwX2ZyZWUoKWAgd2hlcmUgYSBzaWduZWQgYGludCBpYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbWFwIGVudHJpZXMpLiBcXG5cXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2NrX21hcF9hbGxvYygpIGluIG5ldC9jb3JlL3NvY2tfbWFwLmMgYnkgYWRkaW5nIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIChyZWplY3RpbmcgdmFsdWVzIFxcdTAwM2UgSU5UX01BWCkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQX0NSRUFURSBhbmQgQlBGX01BUF9UWVBFX1NPQ0tNQVAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoaXMgcGF0aCBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdmFsaWRhdGlvbiBib3VuZGFyaWVzLCBlcnJvciBoYW5kbGluZywgYW5kIGxpZmVjeWNsZSBiZWhhdmlvciBvZiBCUEYgc29ja21hcHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjM5LjcxNzQ4Mjc5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0NzY0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDRiYmVhZjdiNTFhMjMzZDU5ODQ5ZWJjNWU4Njk2Zjg4NDM2YmVlZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAwODo1NjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xcbmluZGV4IGNhNDliYzdmODY4N2MuLjM4ZGY4NDI4NDMyODkgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5AQCAtNDEsNiArNDEsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWI7XFxuIFxcbiBcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbitcXHQgICAgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYIHx8XFxuIFxcdCAgICBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XFxuIFxcdCAgICAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIGF0dHItXFx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHU2NCkpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjQwLjIzMzE2NDk2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTk1MzYzNzEzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX2FsbG9jXCIsXG4gICAgXCJzb2NrX21hcF9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja19tYXBfYWxsb2MoKSBpbiBuZXQvY29yZS9zb2NrX21hcC5jIGJ5IGFkZGluZyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyAocmVqZWN0aW5nIHZhbHVlcyBcXHUwMDNlIElOVF9NQVgpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHdpdGggQlBGX01BUF9DUkVBVEUgYW5kIEJQRl9NQVBfVFlQRV9TT0NLTUFQIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyB0aGlzIHBhdGggaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHZhbGlkYXRpb24gYm91bmRhcmllcywgZXJyb3IgaGFuZGxpbmcsIGFuZCBsaWZlY3ljbGUgYmVoYXZpb3Igb2YgQlBGIHNvY2ttYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0YmJlYWY3YjUxYTIzM2Q1OTg0OWViYzVlODY5NmY4ODQzNmJlZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwODo1NjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5pbmRleCBjYTQ5YmM3Zjg2ODdjLi4zOGRmODQyODQzMjg5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xuKysrIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuQEAgLTQxLDYgKzQxLDcgQEAgc3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdHN0cnVjdCBicGZfc3RhYiAqc3RhYjtcbiBcbiBcdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcbitcdCAgICBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYIHx8XG4gXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4gXHQgICAgKGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgYXR0ci1cdTAwM2V2YWx1ZV9zaXplICE9IHNpemVvZih1NjQpKSB8fFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6NDAuMjMzMTY2OTU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODU1MzAwNzUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQuIEknbGwgdXNlIGBncmVwcGVyYCAob3IgYHJlYWQtZmlsZWAgaWYgdGhlIGNvbnRleHQgZGVtYW5kcyBpdCkgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiB3aXRoaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG1vZGlmaWNhdGlvbi5cblxuVGhlIGBkaWZmYCBpdHNlbGYgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgSSBzZWUgdGhleSd2ZSBhZGRlZCBhIGNoZWNrOiBgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWGAuIEFoLCByaWdodCwgdGhhdCdzIGNydWNpYWwuIFdlJ3JlIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSB3aGVuIGFsbG9jYXRpbmcgdGhlIHNvY2sgbWFwLiBBbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNpemVzIGFuZCBhbGxvY2F0aW9ucywgcGFydGljdWxhcmx5IGluIGEga2VybmVsIGNvbnRleHQuIEkgcmVtZW1iZXIgd2UgaGFkIGEgc2ltaWxhciBkaXNjdXNzaW9uIGEgd2hpbGUgYmFjayB3aXRoLi4uIGhtbSwgbmV2ZXIgbWluZC5cblxuTm93IEkgbmVlZCBhIGJpdCBtb3JlIGNvbnRleHQuIExldCBtZSBxdWlja2x5IGp1bXAgdG8gbGluZSA0MSBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgc3BlY2lmaWMgY2hlY2sgaXMgYmVpbmcgaW50cm9kdWNlZC4gV2hhdCdzIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgbGlrZT8gSG93IGlzIGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzYCB1c2VkPyBJcyBpdCBkaXJlY3RseSB1c2VkIGluIGEgbWVtb3J5IGFsbG9jYXRpb24sIG9yIGlzIGl0IHVzZWQgaW4gYW4gYXJpdGhtZXRpYyBjYWxjdWxhdGlvbj8gVGhhdCdzIHdoYXQgSSB3YW50IHRvIGVzdGFibGlzaC4gVW5kZXJzdGFuZGluZyB0aGUgKndoeSogaXMgbW9yZSBpbXBvcnRhbnQgdGhhbiB0aGUgKndoYXQqIGluIHRoaXMgY2FzZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Njo0OC43ODYxNzY1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdCAqIEEgc2luZ2xlIGdsb2JhbCBtdXRleCBsb2NrIGlzIHVzZWQgc2luY2UgaXQgaXMgZXhwZWN0ZWQgY29udGVudGlvbiBpcyBsb3cuXFxuICAzMTpcXHQgKi9cXG4gIDMyOlxcdHN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XFxuICAzMzpcXHRcXG4gIDM0OlxcdHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiAgMzU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gIDM2OlxcdFxcdFxcdFxcdFxcdHUzMiB3aGljaCk7XFxuICAzNzpcXHRzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4gIDQwOlxcdHtcXG4gIDQxOlxcdFxcdHN0cnVjdCBicGZfc3RhYiAqc3RhYjtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0aWYgKGF0dHItXFx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcXG4gIDQ0OlxcdFxcdCAgICBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyBcXHUwMDNlIElOVF9NQVggfHxcXG4gIDQ1OlxcdFxcdCAgICBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XFxuICA0NjpcXHRcXHQgICAgKGF0dHItXFx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHUzMikgXFx1MDAyNlxcdTAwMjZcXG4gIDQ3OlxcdFxcdCAgICAgYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHxcXG4gIDQ4OlxcdFxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiB+U09DS19DUkVBVEVfRkxBR19NQVNLKVxcbiAgNDk6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdHN0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpzdGFiKSwgTlVNQV9OT19OT0RFKTtcXG4gIDUyOlxcdFxcdGlmICghc3RhYilcXG4gIDUzOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRicGZfbWFwX2luaXRfZnJvbV9hdHRyKFxcdTAwMjZzdGFiLVxcdTAwM2VtYXAsIGF0dHIpO1xcbiAgNTY6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN0YWItXFx1MDAzZWxvY2spO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRzdGFiLVxcdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcXG4gIDU5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2sgKiksXFxuICA2MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RhYi1cXHUwMDNlbWFwLm51bWFfbm9kZSk7XFxuICA2MTpcXHRcXHRpZiAoIXN0YWItXFx1MDAzZXNrcykge1xcbiAgNjI6XFx0XFx0XFx0YnBmX21hcF9hcmVhX2ZyZWUoc3RhYik7XFxuICA2MzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gIDY0OlxcdFxcdH1cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0cmV0dXJuIFxcdTAwMjZzdGFiLVxcdTAwM2VtYXA7XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4gIDcyOlxcdFxcdGludCByZXQ7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdGlmIChhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MgfHwgYXR0ci1cXHUwMDNlcmVwbGFjZV9icGZfZmQpXFxuICA3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0Q0xBU1MoZmQsIGYpKGF0dHItXFx1MDAzZXRhcmdldF9mZCk7XFxuICA3ODpcXHRcXHRtYXAgPSBfX2JwZl9tYXBfZ2V0KGYpO1xcbiAgNzk6XFx0XFx0aWYgKElTX0VSUihtYXApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Njo0OC43ODYyNzkwNzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODIxMzYwMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIEJQRiBTb2NrbWFwIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc29ja19tYXBfYWxsb2NgLCBhbmQgaXQncyBjbGVhciB0aGlzIGlzIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGZvciBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBzb2NrX2hhc2hfYWxsb2NgLiBHaXZlbiB0aGUgc2ltaWxhcml0eSBpbiBwdXJwb3NlLCBJJ20gYmV0dGluZyB0aGF0IHRoZSBoYXNoIHZlcnNpb24gaXMgYWxzbyBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIEJlc3QgdG8ganVzdCBjb25maXJtIHRoYXQgcXVpY2tseSB0byBidWlsZCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjUwLjYwNzY0MTI5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzI5MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMxPUJURl9JRF9MSVNUX1NJTkdMRShzb2NrX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdGFiKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMyOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjUwLjY1NTM3ODA3N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4OTcyNDAxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBTb2NrbWFwIEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYHNvY2tfbWFwX2FsbG9jYC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB3ZSdyZSBzZXR0aW5nIHVwIGEgQlBGIHNvY2ttYXAg4oCTIHNwZWNpZmljYWxseSwgZHVyaW5nIHRoZSBgYnBmKEJQRl9NQVBfQ1JFQVRFLCAuLi4pYCBjYWxsIHdpdGggdGhlIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgbWFwIHR5cGUuIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgdGhlIGtlcm5lbCBuZWVkcyBlbmFibGVkIHRvIG1ha2UgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHdvcmsuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5IGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6NTIuNTUyNjIwMzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMTQ2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Njo1Mi42MDE2NDAyMDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzU2OTQ1NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub2AuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBpbnR1aXRpb24ga2lja3MgaW4uIFRoaXMgdGVsbHMgbWUgdGhhdCB0aGUgb2JqZWN0IGZpbGUgYHNvY2tfbWFwLm9gIGlzIG9ubHkgZ29pbmcgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWd1cmF0aW9ucyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHJlbGF0ZWQgdG8gKmVpdGhlciogdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiAqb3IqIGBzb2NrX21hcGAgaXRzZWxmIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIE15IG5leHQgYWN0aW9uIHRoZW4gaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHNwZWNpZmljYWxseSBzZWFyY2hpbmcgZm9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gYEJQRl9TWVNDQUxMYCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIHBvdGVudGlhbGx5IGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGZlYXR1cmVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gQWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBicm9hZGVyIGNvbnRleHQgYmVmb3JlIG1ha2luZyBhbnkgZGVjaXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6NTUuOTU4NTg4MjgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI4NjAyNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6NTYuMDA1ODgzMTc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0ODQzMzEzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZGlnIGludG8gaG93IHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBzZWFyY2hpbmcgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0IGFyZSBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzZWFyY2ggZm9yIGBjb25maWcgQlBGX1NZU0NBTExgLiBUaGF0J3MgdGhlIGtleXdvcmQgSSBuZWVkLiBUaGlzIHNob3VsZCBwaW5wb2ludCBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWNsYXJlZCBhbmQgdXNlZC4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiBpdHMgZGVwZW5kZW5jaWVzLCB3aGV0aGVyIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLCBhbmQgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24uIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjU4LjQ5MDIxNzU1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzkwODUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzowMC4zMDgxMzE4MTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzIyMDk3ODMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipCUEYgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBkZWZpbmUgd2hhdCBCUEYgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgd2hhdCBtb2R1bGVzIGFyZSBhdmFpbGFibGUsIGFuZCBwb3RlbnRpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIExpbmUgMjUgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSwgZW5hYmxpbmcgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBzZXR0aW5nIHVwIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAuIEknbSBhbnRpY2lwYXRpbmcgZmluZGluZyBzb21lIGRldGFpbHMgb24gd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIHVzaW5nIEJQRiwgb3Igd2hhdCBhcmUgZGVwZW5kZW50IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6MDcuNTI5MTEzNDkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzowNy41MjkyMDkyODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE3NzQzODI2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgU3lzY2FsbCBhbmQgU29ja2V0IE1hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBCUEZfU1lTQ0FMTGAgaXMgYSBib29sZWFuLCBhbmQgaWYgaXQncyB0cnVlLCBpdCBlbmFibGVzIHRoZSBgYnBmKClgIHN5c3RlbSBjYWxsLiBJdCAqYWxzbyogc2VlbXMgdG8gdHJpZ2dlciB0aGUgYE5FVF9TT0NLX01TR2Agc2V0dGluZyBpZiB0aGUgYE5FVGAgb3B0aW9uIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBNeSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoZSBgc29ja19tYXAuY2AgZmlsZSBpbnRlcmFjdHMgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBkZXRlcm1pbmUgaWYgaXRzIGJlaGF2aW9yIGlzIGRpcmVjdGx5IGdhdGVkIGJ5IGBCUEZfU1lTQ0FMTGAsIG9yIGlmIGl0IHJlbGllcyBvbiBvdGhlciBjb25kaXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gVG8gc3RhcnQsIEknbGwgZ28gYWhlYWQgYW5kIHJldmlldyB0aGUgZmlyc3QgNDAgbGluZXMgb2YgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHRvIGxvb2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyBvciBpbmNsdWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6MTkuMzAzNTk0NzkzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggQ292YWxlbnQgSU8sIEluYy4gaHR0cDovL2NvdmFsZW50LmlvICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsdGVyLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0LmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2ttc2cuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvamhhc2guaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrX2RpYWcuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdWRwLmhcXHUwMDNlXFxuICAxNjpcXHRcXG4gIDE3OlxcdHN0cnVjdCBicGZfc3RhYiB7XFxuICAxODpcXHRcXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxuICAxOTpcXHRcXHRzdHJ1Y3Qgc29jayAqKnNrcztcXG4gIDIwOlxcdFxcdHN0cnVjdCBza19wc29ja19wcm9ncyBwcm9ncztcXG4gIDIxOlxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gIDIyOlxcdH07XFxuICAyMzpcXHRcXG4gIDI0OlxcdCNkZWZpbmUgU09DS19DUkVBVEVfRkxBR19NQVNLXFx0XFx0XFx0XFx0XFxcXFxcbiAgMjU6XFx0XFx0KEJQRl9GX05VTUFfTk9ERSB8IEJQRl9GX1JET05MWSB8IEJQRl9GX1dST05MWSlcXG4gIDI2OlxcdFxcbiAgMjc6XFx0LyogVGhpcyBtdXRleCBpcyB1c2VkIHRvXFxuICAyODpcXHQgKiAgLSBwcm90ZWN0IHJhY2UgYmV0d2VlbiBwcm9nL2xpbmsgYXR0YWNoL2RldGFjaCBhbmQgbGluayBwcm9nIHVwZGF0ZSwgYW5kXFxuICAyOTpcXHQgKiAgLSBwcm90ZWN0IHJhY2UgYmV0d2VlbiByZWxlYXNpbmcgYW5kIGFjY2Vzc2luZyBtYXAgaW4gYnBmX2xpbmsuXFxuICAzMDpcXHQgKiBBIHNpbmdsZSBnbG9iYWwgbXV0ZXggbG9jayBpcyB1c2VkIHNpbmNlIGl0IGlzIGV4cGVjdGVkIGNvbnRlbnRpb24gaXMgbG93LlxcbiAgMzE6XFx0ICovXFxuICAzMjpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gIDM1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuICAzNjpcXHRcXHRcXHRcXHRcXHR1MzIgd2hpY2gpO1xcbiAgMzc6XFx0c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuICA0MDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjE5LjMwMzcwNjk2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDA3OTIxNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU29jayBNYXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGNvbW1pdCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYCB3aXRoaW4gYHNvY2tfbWFwX2FsbG9jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aHkgc3BlY2lmaWNhbGx5IGBJTlRfTUFYYD8gV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgdXBwZXIgYm91bmQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsaW1pdC5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBgbWF4X2VudHJpZXNgIGFuZCBgYXR0ci1cdTAwM2VtYXhfZW50cmllc2AgYXJlIHVzZWQgdGhyb3VnaG91dCBgc29ja19tYXAuY2AuIEEgcXVpY2sgZ3JlcCB3aXRoaW4gdGhhdCBmaWxlIGZvciBcIm1heF9lbnRyaWVzXCIgc2hvdWxkIGlsbHVtaW5hdGUgYWxsIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoYXQgd2lsbCB0ZWxsIHRoZSBzdG9yeSBvZiB0aGlzIHBhdGNoLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzoyMS4zMTE2MzI2MDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODI3MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heF9lbnRyaWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQzOlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XFxubmV0L2NvcmUvc29ja19tYXAuYzo0NDpcXHQgICAgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYIHx8XFxubmV0L2NvcmUvc29ja19tYXAuYy00NS1cXHQgICAgYXR0ci1cXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU4OlxcdHN0YWItXFx1MDAzZXNrcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKlxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTktXFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MzQwPXN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzQ5LVxcdHN5bmNocm9uaXplX3JjdSgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzUwOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKykge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUxLVxcdFxcdHN0cnVjdCBzb2NrICoqcHNrID0gXFx1MDAyNnN0YWItXFx1MDAzZXNrc1tpXTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzc4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODMtXFxubmV0L2NvcmUvc29ja19tYXAuYzozODQ6XFx0aWYgKHVubGlrZWx5KGtleSBcXHUwMDNlPSBtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4NS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NDQzPXN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQ4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQ5OlxcdGlmICh1bmxpa2VseShpIFxcdTAwM2U9IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz00NTY9c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00NjEtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NjI6XFx0aWYgKGkgPT0gc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzIC0gMSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2My1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ2NDpcXHRpZiAoaSBcXHUwMDNlPSBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXMpXFxubmV0L2NvcmUvc29ja19tYXAuYy00NjUtXFx0XFx0KmtleV9uZXh0ID0gMDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NDcxPXN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00ODItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2NvcmUvc29ja19tYXAuYzo0ODM6XFx0aWYgKHVubGlrZWx5KGlkeCBcXHUwMDNlPSBtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4NC1cXHRcXHRyZXR1cm4gLUUyQklHO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz03MjQ9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjUte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzI2OlxcdGlmICh1bmxpa2VseShpbmZvLVxcdTAwM2VpbmRleCBcXHUwMDNlPSBpbmZvLVxcdTAwM2VtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNy1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODE2PXN0YXRpYyB1NjQgc29ja19tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgxOS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyMDpcXHR1c2FnZSArPSAodTY0KW1hcC1cXHUwMDNlbWF4X2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHNvY2sgKik7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MjEtXFx0cmV0dXJuIHVzYWdlO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05Njc9c3RhdGljIHN0cnVjdCBicGZfc2h0YWJfZWxlbSAqc29ja19oYXNoX2FsbG9jX2VsZW0oc3RydWN0IGJwZl9zaHRhYiAqaHRhYixcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTczLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTc0OlxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2aHRhYi1cXHUwMDNlY291bnQpIFxcdTAwM2UgaHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzKSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy05NzUtXFx0XFx0aWYgKCFvbGQpIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA5OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfaGFzaF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTEwMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDQ6XFx0aWYgKGF0dHItXFx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDUtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgID09IDAgfHxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTExOC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMTk6XFx0aHRhYi1cXHUwMDNlYnVja2V0c19udW0gPSByb3VuZHVwX3Bvd19vZl90d28oaHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMjAtXFx0aHRhYi1cXHUwMDNlZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfc2h0YWJfZWxlbSkgK1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzoyMS4zNjQ0NjYzNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU4MDI4MjA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBzb2NrX21hcF9mcmVlYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzb2NrX21hcF9mcmVlYCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoYXQgYGlgIHZhcmlhYmxlIGluIHRoZSBsb29wLiBUaGUgY29kZSBzbmlwcGV0IHN0YXJ0cyB3aXRoIGBzeW5jaHJvbml6ZV9yY3UoKWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3RlbnRpYWwgUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZS4gSSdtIHNlZWluZyBhIGBmb3JgIGxvb3AsIGxpa2VseSBpdGVyYXRpbmcgdGhyb3VnaCBzb21lIGtpbmQgb2YgdGFibGUgb3IgbWFwLCBnaXZlbiB0aGUgY29udGV4dC4gVGhlIGNydWNpYWwgbGluZSB0byB1bmRlcnN0YW5kIHdoYXQgYGlgIGlzIGluIHRoZSBgZm9yYCBsb29wIGlzOiBgZm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKylgLlxuXG5JIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGNvZGUgdGhhdCByZXF1aXJlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgaW4gcGFydGljdWxhciB0aGUgYHN0YWItXHUwMDNlbWFwYCBzdHJ1Y3QsIHRvIGluZmVyIGBpYCdzIHR5cGUgKGdpdmVuIGl0J3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhpcyBzbmlwcGV0KS4gSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBgc29ja19tYXBfZnJlZWAgdG8gY29uZmlybSwgbGV0IG1lIHB1bGwgdXAgbGluZXMgMzQwLTM2MCB0byBzZWUgaWYgSSBjYW4gaW5mZXIgaXQgZnJvbSB0aGUgY29udGV4dCBvZiB3aGVyZSB0aGUgbG9vcCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6MjQuOTQ0NzUxODY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRzdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuIDM0MTpcXHR7XFxuIDM0MjpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XFxuIDM0MzpcXHRcXHRpbnQgaTtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0LyogQWZ0ZXIgdGhlIHN5bmMgbm8gdXBkYXRlcyBvciBkZWxldGVzIHdpbGwgYmUgaW4tZmxpZ2h0IHNvIGl0XFxuIDM0NjpcXHRcXHQgKiBpcyBzYWZlIHRvIHdhbGsgbWFwIGFuZCByZW1vdmUgZW50cmllcyB3aXRob3V0IHJpc2tpbmcgYSByYWNlXFxuIDM0NzpcXHRcXHQgKiBpbiBFRVhJU1QgdXBkYXRlIGNhc2UuXFxuIDM0ODpcXHRcXHQgKi9cXG4gMzQ5OlxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiAzNTA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllczsgaSsrKSB7XFxuIDM1MTpcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqKnBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxuIDM1MjpcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDM1MzpcXHRcXG4gMzU0OlxcdFxcdFxcdHNrID0geGNoZyhwc2ssIE5VTEwpO1xcbiAzNTU6XFx0XFx0XFx0aWYgKHNrKSB7XFxuIDM1NjpcXHRcXHRcXHRcXHRzb2NrX2hvbGQoc2spO1xcbiAzNTc6XFx0XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gMzU4OlxcdFxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzU5OlxcdFxcdFxcdFxcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xcbiAzNjA6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM2MTpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiAzNjI6XFx0XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbiAzNjM6XFx0XFx0XFx0fVxcbiAzNjQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzoyNC45NDQ4NzY1NzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzM5MzM5NDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbW1lZGlhdGUgQ29uY2VybnMgUmVnYXJkaW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIEl0ZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbG9vcDogYGludCBpO2AgYW5kIGBpIFx1MDAzYyBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllczsgaSsrYC4gTXkgYWxhcm0gYmVsbHMgYXJlIHJpbmdpbmcgaW1tZWRpYXRlbHkuIElmIGBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2AgaXMgYSBgdTMyYCAoYXMgdGhlIGNvZGUgaW1wbGllcywgbGlrZWx5IGZyb20gYGF0dHItXHUwMDNlbWF4X2VudHJpZXNgKSwgYnV0IGBpYCBpcyBhIHN0YW5kYXJkIGBpbnRgLCB3ZSBoYXZlIGEgc2VyaW91cyBwb3RlbnRpYWwgZm9yIGFuIGludGVnZXIgb3ZlcmZsb3cuIFNwZWNpZmljYWxseSwgaWYgYHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzYCBpcyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBgSU5UX01BWGAsIHRoZSBpdGVyYXRpb24gdmFyaWFibGUgYGlgIGNhbiBlYXNpbHkgd3JhcCBhcm91bmQgb3IgYmVoYXZlIGluIHVuZXhwZWN0ZWQgd2F5cy5cblxuVGhlIGNydXggb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgY29tcGFyaXNvbi4gSW4gQywgd2hlbiBjb21wYXJpbmcgYSBzaWduZWQgYGludGAgKGBpYCkgdG8gYW4gdW5zaWduZWQgYHUzMmAsIHRoZSBzaWduZWQgYGlgIGdldHMgaW1wbGljaXRseSBwcm9tb3RlZCB0byBhbiB1bnNpZ25lZCBpbnRlZ2VyLiBUaHVzLCBpdCBpcyBwb3NzaWJsZSBgaWAgd2lsbCBiZSBwcm9tb3RlZCB0byBgdW5zaWduZWQgaW50YCwgd2hlbiBgaWAgcmVhY2hlcyBgSU5UX01BWGAsIGBpKytgIG92ZXJmbG93cyB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IuIFRoaXMgcHJvbW90aW9uIGlzIHByb2JsZW1hdGljLCBzaW5jZSBgaWAgY2FuIGJlY29tZSBhIG5lZ2F0aXZlIG51bWJlciBvciBnZXQgcHJvbW90ZWQgdG8gdW5zaWduZWQuXG5cbkkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgYW5kIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMuIEknbSBmb2N1c2luZyBvbiB0aGUgbGluZXMgYXJvdW5kIDQ0MC00NjAgaW4gYHNvY2tfbWFwX2RlbGV0ZV9lbGVtYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBpczsgSSBtdXN0IHZlcmlmeSBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIHRoZSBsb29wIGFuZCB3aGV0aGVyIHRoZSBjb21wYXJpc29uIGludHJvZHVjZXMgVUIuIEkgbXVzdCB0cmFjayB0aGUgcG9zc2libGUgdmFsdWVzIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjI4LjMzODI3MzczNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDA6XFx0XFx0X19zb2NrX21hcF9kZWxldGUoc3RhYiwgc2ssIGxpbmtfcmF3KTtcXG4gNDQxOlxcdH1cXG4gNDQyOlxcdFxcbiA0NDM6XFx0c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiA0NDQ6XFx0e1xcbiA0NDU6XFx0XFx0c3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApO1xcbiA0NDY6XFx0XFx0dTMyIGkgPSAqKHUzMiAqKWtleTtcXG4gNDQ3OlxcdFxcdHN0cnVjdCBzb2NrICoqcHNrO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRpZiAodW5saWtlbHkoaSBcXHUwMDNlPSBtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG4gNDUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NTE6XFx0XFxuIDQ1MjpcXHRcXHRwc2sgPSBcXHUwMDI2c3RhYi1cXHUwMDNlc2tzW2ldO1xcbiA0NTM6XFx0XFx0cmV0dXJuIF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIE5VTEwsIHBzayk7XFxuIDQ1NDpcXHR9XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdHN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcXG4gNDU3OlxcdHtcXG4gNDU4OlxcdFxcdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcXG4gNDU5OlxcdFxcdHUzMiBpID0ga2V5ID8gKih1MzIgKilrZXkgOiBVMzJfTUFYO1xcbiA0NjA6XFx0XFx0dTMyICprZXlfbmV4dCA9IG5leHQ7XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdGlmIChpID09IHN0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXFxuIDQ2MzpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gNDY0OlxcdFxcdGlmIChpIFxcdTAwM2U9IHN0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcylcXG4gNDY1OlxcdFxcdFxcdCprZXlfbmV4dCA9IDA7XFxuIDQ2NjpcXHRcXHRlbHNlXFxuIDQ2NzpcXHRcXHRcXHQqa2V5X25leHQgPSBpICsgMTtcXG4gNDY4OlxcdFxcdHJldHVybiAwO1xcbiA0Njk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzoyOC4zMzgzODMwOTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI0NDQxMzk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZG8gYSBxdWljayBkZWVwIGRpdmUuXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBCUEYgYW5kIEFycmF5IE1hcHMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIgd2l0aCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbGVhZGluZyBtZSBkb3duIGEgY2VydGFpbiBwYXRoLCBidXQgSSBzaG91bGQgYWx3YXlzIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgc2VlIGlmIHRoZSBrZXJuZWwgaGFzIGFscmVhZHkgZW5jb3VudGVyZWQgYSBzaW1pbGFyIGlzc3VlIGVsc2V3aGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBjb2RlIGhhbmRsZXMgYGF0dHItXHUwMDNlbWF4X2VudHJpZXNgIHZhbHVlcyB0aGF0IG1pZ2h0IGJlIGxhcmdlciB0aGFuIGBJTlRfTUFYYC4gVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBpbnRlZ2VyIG92ZXJmbG93IHNpdHVhdGlvbiBqdXN0IHdhaXRpbmcgdG8gaGFwcGVuLiBUbyBiZSB0aG9yb3VnaCwgbGV0J3MgcG9rZSBhcm91bmQgaW4gdGhlIEJQRiBjb2RlIOKAkyBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gYGFycmF5X21hcC5jYCBhbmQgb3RoZXIgYXJlYXMgd2hlcmUgYGJwZl9tYXBgIGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHNpbWlsYXIgY29tcGFyaXNvbnMgb3IgcG90ZW50aWFsIG92ZXJmbG93IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyaGFwcyB0aGUgZXhhY3Qgc2FtZSBjaGVjay4gSXQncyBiZXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBwcmV2YWlsaW5nIG1ldGhvZG9sb2d5IGlzIGluIHRoaXMgYXJlYSwgYW5kIHBlcmhhcHMgbGV2ZXJhZ2UgYW55IGV4aXN0aW5nIHBhdHRlcm5zIG9yIHNvbHV0aW9ucy4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjMxLjU4Mjc5OTYxOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODMzNzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfZW50cmllcyBcXHUwMDNlIElOVF9NQVhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00My1cXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQ6XFx0ICAgIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgICE9IDQgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6MzMuMzIxMTQyOTY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU4MjI0MjYyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWVwIERpdmUgaW50byBgYXJyYXlfbWFwX2FsbG9jYCoqXG5cbk9rYXksIHNvIGxldCdzIGdldCByaWdodCBpbnRvIGl0LCBJIG5lZWQgdG8gY2hlY2sgYGFycmF5X21hcF9hbGxvY2AuIFRoaXMgZnVuY3Rpb24sIEkgYmVsaWV2ZSwgbmVlZHMgYSB0aG9yb3VnaCBnb2luZyBvdmVyLiBJIHdhbnQgdG8gbG9vayBhdCBpdHMgbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWNhbGx5LiBJJ20ga2VlbiB0byBlbnN1cmUgaXQncyBub3QgbGVha2luZyBtZW1vcnkgb3IgZXhoaWJpdGluZyBhbnkgc3VidGxlIGluZWZmaWNpZW5jaWVzIHRoYXQgY291bGQgY29tcG91bmQgb3ZlciB0aW1lLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBvciBsb25nLXJ1bm5pbmcgcHJvY2Vzc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYWxsb2NhdGlvbiBzdHJhdGVneS4gRG9lcyBpdCBwcmUtYWxsb2NhdGUsIGFsbG9jYXRlIG9uIGRlbWFuZCwgb3IgdXNlIHNvbWUgaHlicmlkIGFwcHJvYWNoPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyB0byBiZSB3YXJ5IG9mP1xuXG5OZXh0LCB0aGUgZXJyb3IgaGFuZGxpbmcuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFycmF5X21hcF9hbGxvY2AgZ3JhY2VmdWxseSBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGFuZCBvdGhlciBlZGdlIGNhc2VzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgZXhjZXB0aW9uIG1lY2hhbmlzbXMgYW5kIHJldHVybiB2YWx1ZXMgaXQgbGV2ZXJhZ2VzPyBBbmQgaG93IGRvIHRoZXNlIGV4Y2VwdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgY2FsbGluZyBmdW5jdGlvbnM/IElzIHRoZXJlIHBvdGVudGlhbCBmb3IgcmVzb3VyY2UgbGVha3MgaWYsIHNheSwgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgbWFwcGluZyBwcm9jZXNzIGl0c2VsZj8gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBmYWlsdXJlIG1vZGVzIGNvbXByZWhlbnNpdmVseS5cblxuRmluYWxseSwgbGV0J3MgbG9vayBhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgbGFyZ2UgYW5kIHNtYWxsIGFycmF5cy4gSXMgdGhlcmUgYW55IGF2b2lkYWJsZSBjb21wdXRhdGlvbmFsIG92ZXJoZWFkIGluIHRoZSBjb2RlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlIGNob2ljZSBvZiBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYW55IHVubmVjZXNzYXJ5IGJvdHRsZW5lY2tzLiBDYW4gaXQgYmUgaW1wcm92ZWQgdXNpbmcgYSBtb3JlIG9wdGltYWwgYWxnb3JpdGhtaWMgYXBwcm9hY2g/IEFueSBjaGFuY2UgZm9yIHZlY3Rvcml6YXRpb24/IEknZCBsaWtlIHRvIHBlcmZvcm0gYSBxdWljayBwcm9maWxpbmcgcGFzcyB0byBkZXRlcm1pbmUgaXRzIHR5cGljYWwgcnVuLXRpbWUgYW5kIGlkZW50aWZ5IGFyZWFzIGZvciBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzozOS4xNDM1NzI0NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NTgyOTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfZW50cmllcyA9PSAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz0yNjY9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjc2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoyNzc6XFx0aWYgKGF0dHItXFx1MDAzZWtleV9zaXplIHx8IGF0dHItXFx1MDAzZXZhbHVlX3NpemUgfHwgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzgtXFx0ICAgIC8qIEJQRl9GX01NQVBBQkxFIG11c3QgYmUgc2V0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NTM9aW50IGFycmF5X21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01OC1cXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo1OTpcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAhPSA0IHx8XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTYwLVxcdCAgICBhdHRyLVxcdTAwM2V2YWx1ZV9zaXplID09IDAgfHxcXG4tLVxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM9OTk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpibG9vbV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTEwNi1cXHRpZiAoYXR0ci1cXHUwMDNla2V5X3NpemUgIT0gMCB8fCBhdHRyLVxcdTAwM2V2YWx1ZV9zaXplID09IDAgfHxcXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jOjEwNzpcXHQgICAgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMTA4LVxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiB+QkxPT01fQ1JFQVRFX0ZMQUdfTUFTSyB8fFxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jPTI2PXN0YXRpYyBpbnQgaW5zbl9hcnJheV9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yOS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6MzA6XFx0aWYgKGF0dHItXFx1MDAzZW1heF9lbnRyaWVzID09IDAgfHwgYXR0ci1cXHUwMDNla2V5X3NpemUgIT0gNCB8fFxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0zMS1cXHQgICAgYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSB2YWx1ZV9zaXplIHx8IGF0dHItXFx1MDAzZW1hcF9mbGFncyAhPSAwKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz04NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNwdV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTkwLVxcdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXFxua2VybmVsL2JwZi9jcHVtYXAuYzo5MTpcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAhPSA0IHx8XFxua2VybmVsL2JwZi9jcHVtYXAuYy05Mi1cXHQgICAgKHZhbHVlX3NpemUgIT0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9jcHVtYXBfdmFsLCBxc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9MTExPXN0YXRpYyBpbnQgZGV2X21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTE4LVxcdCAqL1xcbmtlcm5lbC9icGYvZGV2bWFwLmM6MTE5OlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXFx1MDAzZWtleV9zaXplICE9IDQgfHxcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEyMC1cXHQgICAgKHZhbHNpemUgIT0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9kZXZtYXBfdmFsLCBpZmluZGV4KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9NDEyPXN0YXRpYyBpbnQgaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NTAtXFx0ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NDUxOlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXFx1MDAzZWtleV9zaXplID09IDAgfHxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NTItXFx0ICAgIGF0dHItXFx1MDAzZXZhbHVlX3NpemUgPT0gMClcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz01NzE9c3RhdGljIHN0cnVjdCBicGZfbWFwICp0cmllX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU3Ny1cXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo1Nzg6XFx0aWYgKGF0dHItXFx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNTc5LVxcdCAgICAhKGF0dHItXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX05PX1BSRUFMTE9DKSB8fFxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9NDc9c3RhdGljIGludCBxdWV1ZV9zdGFja19tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy00OS1cXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjUwOlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXFx1MDAzZWtleV9zaXplICE9IDAgfHxcXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy01MS1cXHQgICAgYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSA9PSAwIHx8XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9OTM9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTAzLVxcdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjEwNDpcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAhPSA0IHx8XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTEwNS1cXHQgICAgdmFsdWVfc2l6ZSBcXHUwMDNjIDggfHwgdmFsdWVfc2l6ZSAlIDgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjM5LjQ5OTQwOTMzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3MjYyNTY3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBuZXQvY29yZS9zb2NrX21hcC5jYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHN5emthbGxlciBzeXNjYWxscy4gU3BlY2lmaWNhbGx5LCB2aWEgYGJwZiRCUEZfTUFQX0NSRUFURWAgd2l0aCBhIGBCUEZfTUFQX1RZUEVfU09DS01BUGAuIFdlIGtub3cgYSBzdGFuZGFyZCB1c2VyIG9yIHN5emthbGxlciBwcm9ncmFtIGNhbiByZWFjaCBgc29ja19tYXBfYWxsb2NgIGJlY2F1c2UgQlBGIG1hcCBjcmVhdGlvbiBpcyBhIGNvcmUgQlBGIG9wZXJhdGlvbiBhY2Nlc3NpYmxlIHZpYSBgYnBmKEJQRl9NQVBfQ1JFQVRFLCAuLi4pYCDigJMgdGhhdOKAmXMgdGhlIGZpcnN0IGh1cmRsZSwgY2hlY2tlZC5cblxuTm93LCBkb2VzIGl0IG1lZXQgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjcml0ZXJpYT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHNvY2tfbWFwX2FsbG9jYCwgYWRkaW5nIGEgYm91bmRhcnkgY2hlY2s6IGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0sIGRpcmVjdGx5IGltcGFjdGluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgQlBGIHN5c2NhbGwgcGF0aC4gSXQgbG9va3MgbGlrZSBhIHN0cm9uZyAneWVzJyBmb3IgZnV6emluZyBmcm9tIHRoYXQgaW5pdGlhbCByZWFkLlxuXG5Mb29raW5nIGRlZXBlciwgdGhlIHByaW1hcnkgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIGRpc2NvdmVyaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBldmVuIG5ldyBhc3NlcnRpb25zLiBHaXZlbiB0aGUgcmVhY2hhYmlsaXR5IGlzIGNvbmZpcm1lZCwgYW5kIHRoZSBwYXRjaCBhZGRzIGEgYm91bmRhcnkgY2hlY2ssIHRoZSBuZXcgYXNzZXJ0aW9uIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBjYW4gY2hlY2sgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCBhbmQgaXQgZG9lc24ndC4gU28sIHdlJ3JlIGRlZmluaXRlbHkgbG9va2luZyBhdCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5leHQgdXA6IEZvY3VzU3ltYm9scy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBzb2NrX21hcF9hbGxvY2AuIElzIGl0IHN1ZmZpY2llbnQ/IElzIHRoZXJlIGFueXRoaW5nIGVsc2UgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHdlIHNob3VsZCB0YXJnZXQ/IEkgc2VlIHRoYXQgYHNvY2tfbWFwX2FsbG9jYCBpcyBzdGF0aWMsIGJ1dCBiZWNhdXNlIGl0J3MgdXNlZCBpbiB0aGUgc3RydWN0IGBicGZfbWFwX29wc2AsIGl0J3Mgbm90IGlubGluZWQgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbC4gQWxzbywgYHNvY2tfbWFwX2ZyZWVgLiBUaGUgaXNzdWUgcHJvbXB0aW5nIHRoaXMgY2hlY2sgbWlnaHQgYmUgaW4gYHNvY2tfbWFwX2ZyZWVgICh3aGVyZSB0aGUgYGludCBpYCBsb29wIGNvdWxkIG1pc2JlaGF2ZSBpZiBgbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgKS4gYHNvY2tfbWFwX2ZyZWVgIGFsc28gbmVlZHMgdG8gYmUgaW4gdGhlIGBGb2N1c1N5bWJvbHNgLiBTbywgSSdtIHRoaW5raW5nIHdlIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnM6IGBbXCJzb2NrX21hcF9hbGxvY1wiLCBcInNvY2tfbWFwX2ZyZWVcIl1gLlxuXG5GaW5hbGx5LCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFdlIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyBleHBlY3RlZC4gSG9sZCBvbi4gRG9lcyB0aGlzICphbHNvKiByZXF1aXJlIGBORVRgPyBJIGtub3cgdGhhdCBgTkVUYCBpcyByZWxldmFudCBiZWNhdXNlIG9mIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSwgYnV0IGRvZXMgYEJQRl9TWVNDQUxMYCAqcmVxdWlyZSogYE5FVGA/IExvb2tpbmcgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIEkgc2VlIGBzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVGAuIEFuZCwgbG9va2luZyBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vYC4gT2theS4gQW5kIHRoZW4gdGhlIHRvcC1sZXZlbCBgTWFrZWZpbGVgLiBMb29rcyBsaWtlIHRoZSAqZW50aXJlKiBgbmV0L2AgZGlyZWN0b3J5IGlzIGJ1aWx0IG9ubHkgaWYgYENPTkZJR19ORVQ9eWAuIFNvIHdlIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTD15YCBhbmQgYENPTkZJR19ORVQ9eWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjIxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Nzo0OS4yMjU2NjkwMzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTkxMzY5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0L1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJNYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6NDkuNDAxNTkyMzY5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3ODE1MzI5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYSBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0YCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBjZW50cmFsIGh1YiBmb3IgbmV0d29yay1yZWxhdGVkIHNldHRpbmdzLiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbHMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkncmUgY29ubmVjdGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGxvZ2ljYWwgc3RydWN0dXJlOiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIHRoaXMgZmVhdHVyZSBoYXZlPyBXaGF0IG90aGVyIGZlYXR1cmVzIGVuYWJsZSBpdD8gQW5kIG9mIGNvdXJzZSwgSSdtIGV4cGVjdGluZyBzb21lIG5lc3RpbmcgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Nzo1MS4xODMxMjg0NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2NTU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJuZXQvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9ODI9bWVudSBcXFwiTmV0d29ya2luZyBvcHRpb25zXFxcIlxcbm5ldC9LY29uZmlnLTgzLVxcbm5ldC9LY29uZmlnOjg0OnNvdXJjZSBcXFwibmV0L3BhY2tldC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjg1OnNvdXJjZSBcXFwibmV0L3BzcC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjg2OnNvdXJjZSBcXFwibmV0L3VuaXgvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo4Nzpzb3VyY2UgXFxcIm5ldC90bHMvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo4ODpzb3VyY2UgXFxcIm5ldC94ZnJtL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6ODk6c291cmNlIFxcXCJuZXQvaXVjdi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjkwOnNvdXJjZSBcXFwibmV0L3NtYy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTkxLXNvdXJjZSBcXFwiZHJpdmVycy9kaWJzL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6OTI6c291cmNlIFxcXCJuZXQveGRwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctOTMtXFxuLS1cXG5uZXQvS2NvbmZpZz0xMzY9aWYgSU5FVFxcbm5ldC9LY29uZmlnOjEzNzpzb3VyY2UgXFxcIm5ldC9pcHY0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MTM4OnNvdXJjZSBcXFwibmV0L2lwdjYvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoxMzk6c291cmNlIFxcXCJuZXQvbmV0bGFiZWwvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoxNDA6c291cmNlIFxcXCJuZXQvbXB0Y3AvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0xNDEtXFxuLS1cXG5uZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTI0Ni1cXG5uZXQvS2NvbmZpZzoyNDc6c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjQ4OnNvdXJjZSBcXFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjQ5OnNvdXJjZSBcXFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjUwOnNvdXJjZSBcXFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yNTEtXFxubmV0L0tjb25maWc9MjUyPWVuZGlmICMgaWYgTkVURklMVEVSXFxubmV0L0tjb25maWctMjUzLVxcbm5ldC9LY29uZmlnOjI1NDpzb3VyY2UgXFxcIm5ldC9zY3RwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjU1OnNvdXJjZSBcXFwibmV0L3Jkcy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI1Njpzb3VyY2UgXFxcIm5ldC90aXBjL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjU3OnNvdXJjZSBcXFwibmV0L2F0bS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI1ODpzb3VyY2UgXFxcIm5ldC9sMnRwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjU5OnNvdXJjZSBcXFwibmV0LzgwMi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI2MDpzb3VyY2UgXFxcIm5ldC9icmlkZ2UvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNjE6c291cmNlIFxcXCJuZXQvZHNhL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjYyOnNvdXJjZSBcXFwibmV0LzgwMjFxL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjYzOnNvdXJjZSBcXFwibmV0L2xsYy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI2NDpzb3VyY2UgXFxcIm5ldC94MjUvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNjU6c291cmNlIFxcXCJuZXQvbGFwYi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI2Njpzb3VyY2UgXFxcIm5ldC9waG9uZXQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNjc6c291cmNlIFxcXCJuZXQvNmxvd3Bhbi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI2ODpzb3VyY2UgXFxcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjY5OnNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXFxcIm5ldC9zY2hlZC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3MTpzb3VyY2UgXFxcIm5ldC9kY2IvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzI6c291cmNlIFxcXCJuZXQvZG5zX3Jlc29sdmVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjczOnNvdXJjZSBcXFwibmV0L2JhdG1hbi1hZHYvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzQ6c291cmNlIFxcXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzU6c291cmNlIFxcXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6Mjc2OnNvdXJjZSBcXFwibmV0L25ldGxpbmsvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzc6c291cmNlIFxcXCJuZXQvbXBscy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3ODpzb3VyY2UgXFxcIm5ldC9uc2gvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzk6c291cmNlIFxcXCJuZXQvaHNyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjgwOnNvdXJjZSBcXFwibmV0L3N3aXRjaGRldi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI4MTpzb3VyY2UgXFxcIm5ldC9sM21kZXYvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyODI6c291cmNlIFxcXCJuZXQvcXJ0ci9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI4Mzpzb3VyY2UgXFxcIm5ldC9uY3NpL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMjg0LVxcbi0tXFxubmV0L0tjb25maWc9NDE0PWVuZG1lbnUgIyBOZXR3b3JraW5nIG9wdGlvbnNcXG5uZXQvS2NvbmZpZy00MTUtXFxubmV0L0tjb25maWc6NDE2OnNvdXJjZSBcXFwibmV0L2Nhbi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjQxNzpzb3VyY2UgXFxcIm5ldC9ibHVldG9vdGgvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo0MTg6c291cmNlIFxcXCJuZXQvcnhycGMvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo0MTk6c291cmNlIFxcXCJuZXQva2NtL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDIwOnNvdXJjZSBcXFwibmV0L3N0cnBhcnNlci9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjQyMTpzb3VyY2UgXFxcIm5ldC9tY3RwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctNDIyLVxcbi0tXFxubmV0L0tjb25maWc9NDMxPWlmIFdJUkVMRVNTXFxubmV0L0tjb25maWctNDMyLVxcbm5ldC9LY29uZmlnOjQzMzpzb3VyY2UgXFxcIm5ldC93aXJlbGVzcy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjQzNDpzb3VyY2UgXFxcIm5ldC9tYWM4MDIxMS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQzNS1cXG5uZXQvS2NvbmZpZz00MzY9ZW5kaWYgIyBXSVJFTEVTU1xcbm5ldC9LY29uZmlnLTQzNy1cXG5uZXQvS2NvbmZpZzo0Mzg6c291cmNlIFxcXCJuZXQvcmZraWxsL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDM5OnNvdXJjZSBcXFwibmV0LzlwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDQwOnNvdXJjZSBcXFwibmV0L2NlcGgvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo0NDE6c291cmNlIFxcXCJuZXQvbmZjL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDQyOnNvdXJjZSBcXFwibmV0L3BzYW1wbGUvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo0NDM6c291cmNlIFxcXCJuZXQvaWZlL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctNDQ0LVxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnPTQyPWNvbmZpZyBCVF9CUkVEUlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTUxLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1Mjpzb3VyY2UgXFxcIm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWdcXFwiXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTUzLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1NDpzb3VyY2UgXFxcIm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnXFxcIlxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy01NS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NTY6c291cmNlIFxcXCJuZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZ1xcXCJcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTctXFxuLS1cXG5uZXQvY2FuL0tjb25maWc9NDY9Y29uZmlnIENBTl9HV1xcbi0tXFxubmV0L2Nhbi9LY29uZmlnLTU2LVxcbm5ldC9jYW4vS2NvbmZpZzo1Nzpzb3VyY2UgXFxcIm5ldC9jYW4vajE5MzkvS2NvbmZpZ1xcXCJcXG5uZXQvY2FuL0tjb25maWctNTgtXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnPTIxPWNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxcbi0tXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yOC1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI5OnNvdXJjZSBcXFwibmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnXFxcIlxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTY2MD1lbmRtZW51XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2NjEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2NjI6c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcXFwiXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2NjMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2NjQ6c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1xcXCJcXG4tLVxcbm5ldC9uZmMvS2NvbmZpZz0xNz1jb25maWcgTkZDX0RJR0lUQUxcXG4tLVxcbm5ldC9uZmMvS2NvbmZpZy0zMC1cXG5uZXQvbmZjL0tjb25maWc6MzE6c291cmNlIFxcXCJuZXQvbmZjL25jaS9LY29uZmlnXFxcIlxcbm5ldC9uZmMvS2NvbmZpZzozMjpzb3VyY2UgXFxcIm5ldC9uZmMvaGNpL0tjb25maWdcXFwiXFxubmV0L25mYy9LY29uZmlnLTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Nzo1MS4yNTU4MDkwMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDE0NjEzNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyB3aGF0IGdvZXMgdGhyb3VnaCBteSBoZWFkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXQgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSBgbmV0L01ha2VmaWxlYC4gUmlnaHQsIHRpbWUgdG8gZGlzc2VjdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgc3BlY2lmaWMgY29udGV4dD8gQXJlIHdlIGRlYnVnZ2luZyBhIGJ1aWxkIGlzc3VlLCBleHBsb3JpbmcgbmV0d29yayBjb25maWd1cmF0aW9uLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBkZXBlbmRlbmNpZXMsIG9yIGp1c3QgZG9pbmcgYSBnZW5lcmFsIGNvZGUgcmV2aWV3PyBUaGF0J2xsIGRldGVybWluZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIEkgbmVlZCB0byBnbyBpbnRvLiBSZWdhcmRsZXNzLCBgbmV0L2AgaXMgdHlwaWNhbGx5IHdoZXJlIHRoZSBsb3dlci1sZXZlbCBuZXR3b3JrLXJlbGF0ZWQgY29tcG9uZW50cyByZXNpZGUuIFRoaXMgaXMgdXN1YWxseSB0aGUgYXJlYSB0aGF0IGRlYWxzIHdpdGggZHJpdmVycywgcHJvdG9jb2xzIGFuZCBzeXN0ZW0gY2FsbHMgYXQgYSBsb3cgbGV2ZWwuIEl04oCZcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiBmb3IgdGhlIGNyaXRpY2FsIGVsZW1lbnRzOlxuXG4qICAgKipUYXJnZXRzOioqIFdoYXQgYXJlIHRoZSBtYWluIGJ1aWxkIHRhcmdldHMgZGVmaW5lZD8gQXJlIHdlIGJ1aWxkaW5nIHNwZWNpZmljIG1vZHVsZXMsIGxpYnJhcmllcywgb3IgdGhlIHdob2xlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrPyBVbmRlcnN0YW5kaW5nIHRoZSB0YXJnZXRzIGdpdmVzIG1lIHRoZSBzdHJ1Y3R1cmUuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSdsbCBiZSBsb29raW5nIGZvciBpbmNsdWRlIGZpbGVzLCBvdGhlciBtb2R1bGVzLCBleHRlcm5hbCBsaWJyYXJpZXMgb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gRGVwZW5kZW5jaWVzIGFyZSBvZnRlbiB3aGVyZSBpc3N1ZXMgYXJpc2UgYW5kIGEgZ29vZCBtYWtlZmlsZSBjbGVhcmx5IG91dGxpbmVzIHdoYXQgbmVlZHMgdG8gYmUgcHJlc2VudCB0byBhbGxvdyB0aGUgbmV0d29yayBzdGFjayB0byBiZSBjb21waWxlZCBhbmQgbGlua2VkLlxuKiAgICoqRmxhZ3MgYW5kIFZhcmlhYmxlczoqKiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IHZhcmlhYmxlcyBkZWZpbmluZyBjb21waWxlciBmbGFncyAoZS5nLiwgYC1JYCBmb3IgaW5jbHVkZSBwYXRocywgYC1EYCBmb3IgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLCBvcHRpbWl6YXRpb24gbGV2ZWxzKSwgbGlua2VyIGZsYWdzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3M/IEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlc2UgY2FuIGNhdXNlIG1ham9yIGhlYWRhY2hlcy5cbiogICAqKlJ1bGVzOioqIEknbGwgcXVpY2tseSBzY2FuIHRoZSBydWxlcyB0byBzZWUgaG93IHRhcmdldHMgYXJlIGJ1aWx0IGFuZCBsaW5rZWQuIExvb2sgZm9yIGhvdyBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgdG9nZXRoZXIgYW5kIGlmIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIGFyZSBpbiBwbGFjZS5cblxuSSBrbm93IEkgd2lsbCBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIGRlbHZlIGludG8gYW55IGNvbmRpdGlvbmFsIGJsb2NrcywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQgYW5kIHRoZSBtYWtlZmlsZSBuZWVkcyB0byBkZWFsIHdpdGggbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFNvLCBsZXTigJlzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg0MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6NTUuMjcwNDI1MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG5ldHdvcmtpbmcuXFxuICAgNDpcXHQjXFxuICAgNTpcXHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFxcdTAwM2NoY2hAaW5mcmFkZWFkLm9yZ1xcdTAwM2VcXG4gICA2OlxcdCMgUmV3cml0dGVuIHRvIHVzZSBsaXN0cyBpbnN0ZWFkIG9mIGlmLXN0YXRlbWVudHMuXFxuICAgNzpcXHQjXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gZGV2cmVzLm8gc29ja2V0Lm8gY29yZS9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0NPTVBBVClcXHRcXHQrPSBjb21wYXQub1xcbiAgMTI6XFx0XFxuICAxMzpcXHQjIExMQyBoYXMgdG8gYmUgbGlua2VkIGJlZm9yZSB0aGUgZmlsZXMgaW4gbmV0LzgwMi9cXG4gIDE0OlxcdG9iai0kKENPTkZJR19MTEMpXFx0XFx0Kz0gbGxjL1xcbiAgMTU6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xcbiAgMTY6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHRcXHQrPSBuZXRmaWx0ZXIvXFxuICAxNzpcXHRvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBpcHY0L1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuICAxOTpcXHRvYmotJChDT05GSUdfWEZSTSlcXHRcXHQrPSB4ZnJtL1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1VOSVgpXFx0XFx0Kz0gdW5peC9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19JTkVUX1BTUClcXHRcXHQrPSBwc3AvXFxuICAyMjpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGlwdjYvXFxuICAyMzpcXHRvYmotJChDT05GSUdfUEFDS0VUKVxcdFxcdCs9IHBhY2tldC9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORVRfS0VZKVxcdFxcdCs9IGtleS9cXG4gIDI1OlxcdG9iai0kKENPTkZJR19CUklER0UpXFx0XFx0Kz0gYnJpZGdlL1xcbiAgMjY6XFx0b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVxcdCs9IGRldmxpbmsvXFxuICAyNzpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGRzYS9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19YMjUpXFx0XFx0Kz0geDI1L1xcbiAgMjk6XFx0b2JqLSQoQ09ORklHX0xBUEIpXFx0XFx0Kz0gbGFwYi9cXG4gIDMwOlxcdG9iai0kKENPTkZJR19DQU4pXFx0XFx0Kz0gY2FuL1xcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0JUKVxcdFxcdCs9IGJsdWV0b290aC9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19TVU5SUEMpXFx0XFx0Kz0gc3VucnBjL1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVxcdFxcdCs9IHJ4cnBjL1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0FGX0tDTSlcXHRcXHQrPSBrY20vXFxuICAzNTpcXHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcXHQrPSBzdHJwYXJzZXIvXFxuICAzNjpcXHRvYmotJChDT05GSUdfQVRNKVxcdFxcdCs9IGF0bS9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19MMlRQKVxcdFxcdCs9IGwydHAvXFxuICAzODpcXHRvYmotJChDT05GSUdfUEhPTkVUKVxcdFxcdCs9IHBob25ldC9cXG4gIDM5OlxcdGlmbmVxICgkKENPTkZJR19WTEFOXzgwMjFRKSwpXFxuICA0MDpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IDgwMjFxL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Nzo1NS4yNzA0OTI5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzA4ODc3NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgc29ja19tYXAub2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgc29ja19tYXAub2AgZ2V0cyBidWlsdCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIEJQRi4gSSByZWNhbGwgdGhhdCB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIGluY2x1ZGVzIHRoZSBgbmV0L2AgZGlyZWN0b3J5IHdoZW4gYENPTkZJR19ORVQ9eWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoYXQncyByZXF1aXJlZC5cIiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gYEJQRl9TWVNDQUxMYCdzIGNvbmZpZ3VyYXRpb24uIExvb2tpbmcgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIEkgc2VlIGl0J3MgYSBib29sIG9wdGlvbiB0aGF0IGFjdGl2YXRlcyB0aGUgYGJwZigpYCBzeXN0ZW0gY2FsbC4gSXQgKnNlbGVjdHMqIGEgZmV3IGRlcGVuZGVuY2llczogYEJQRmAsIGBJUlFfV09SS2AsIGBORUVEX1RBU0tTX1JDVWAsIGBUQVNLU19UUkFDRV9SQ1VgLCBgQklOQVJZX1BSSU5URmAsIGFuZCBjcml0aWNhbGx5LCBgTkVUX1NPQ0tfTVNHYCAqaWYqIGBORVRgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBmdXJ0aGVyIHRvIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IGBzb2NrX21hcC5vYCBpcyBidWlsdC4gQW5kIHRoZXJlIGl0IGlzOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vYC4gT2theSwgc28gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgKmRpcmVjdGx5KiByZXNwb25zaWJsZSBmb3IgaW5jbHVkaW5nIGBzb2NrX21hcC5vYC4gU28gd2UgbmVlZCBib3RoIGBDT05GSUdfTkVUYCAqYW5kKiBgQ09ORklHX0JQRl9TWVNDQUxMYCB0byBnZXQgYHNvY2tfbWFwLm9gIHRvIGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbC5cblxuSSdtIGZlZWxpbmcgdGhvcm91Z2ggdG9kYXksIHNvIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIHNvdXJjZSBmaWxlIGl0c2VsZiwgYHNvY2tfbWFwLmNgLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYCNpZmRlZmApIHRoYXQgbWlnaHQgaW50cm9kdWNlIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBoaWRkZW4gcmVxdWlyZW1lbnRzIEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjU4LjU3OTM3MzIwN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MzI3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0xNDc4PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTItXFx0XFx0YnJlYWs7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTQtXFx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjU4LjYzMDMxNjYzNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODIyMDc3NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFNvY2sgTWFwIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzb2NrX21hcF9hbGxvY2AgZnVuY3Rpb24gYW5kLi4uaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aGF0J3MgdXNpbmcgaXQuIFRoYXQncyBhIGJpdCB1bnVzdWFsLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBzb2NrX21hcF9vcHNgIHN0cnVjdHVyZSBpcyBhY3R1YWxseSByZWdpc3RlcmVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSB0aGlzIHRoaW5nIGJhY2sgdG8gaXRzIHJvb3QuIFdpdGhvdXQgdGhhdCwgSSdtIGp1c3QgcG9raW5nIGFyb3VuZCBpbiB0aGUgZGFyay4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWUgd2hlcmUgYHNvY2tfbWFwX29wc2AgaXMgZGVmaW5lZCBhbmQgY2FsbGVkLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBjbHVlcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODowMS40NTIzOTcxNjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjUzNDI1NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE5PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTIxLSNpZmRlZiBDT05GSUdfSU5FVFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTIyOkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS01BUCwgc29ja19tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTIzLUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS0hBU0gsIHNvY2tfaGFzaF9vcHMpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1CVEZfSURfTElTVF9TSU5HTEUoc29ja19tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfc3RhYilcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzMjpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODMzLVxcdC5tYXBfbWV0YV9lcXVhbFxcdFxcdD0gYnBmX21hcF9tZXRhX2VxdWFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODowMy4wMTc3NDc0NTdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzM2NTcyMzA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBTb2NrbWFwIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgb2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3QhIExvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgLCBzcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBkZXBlbmRlbmN5OlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX0lORVRcbkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS01BUCwgc29ja19tYXBfb3BzKVxuQlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgc29ja19oYXNoX29wcylcbiNlbmRpZlxuYGBgXG5cblRoZSBkZWZpbml0aW9uIG9mIGBCUEZfTUFQX1RZUEVfU09DS01BUGAsIGFzIGV4cGVjdGVkLCBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0lORVRgLiBUaGlzIGNvbmZpcm1zIHRoYXQgc29ja21hcCBzdXBwb3J0IHJlbGllcyBvbiB0aGUgYENPTkZJR19JTkVUYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBhcm91bmQgbGluZXMgMTE1LTEzMCBvZiB0aGF0IGZpbGUgdG8gbWFrZSBjZXJ0YWluIHRoaXMgaXMgdGhlIG9ubHkgZGVwZW5kZW5jeS4gSXQncyBnb29kIHRvIGhhdmUgdGhpcyBjb25maXJtZWQgc28gcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxOTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6MDYuMzgzNDczNzA4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQX0hBU0gsIGRldl9tYXBfaGFzaF9vcHMpXFxuIDExNjpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NLX1NUT1JBR0UsIHNrX3N0b3JhZ2VfbWFwX29wcylcXG4gMTE3OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcXG4gMTE4OlxcdCNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG4gMTE5OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcXG4gMTIwOlxcdCNlbmRpZlxcbiAxMjE6XFx0I2lmZGVmIENPTkZJR19JTkVUXFxuIDEyMjpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NPQ0tNQVAsIHNvY2tfbWFwX29wcylcXG4gMTIzOlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS0hBU0gsIHNvY2tfaGFzaF9vcHMpXFxuIDEyNDpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVksIHJldXNlcG9ydF9hcnJheV9vcHMpXFxuIDEyNTpcXHQjZW5kaWZcXG4gMTI2OlxcdCNlbmRpZlxcbiAxMjc6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9RVUVVRSwgcXVldWVfbWFwX29wcylcXG4gMTI4OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RBQ0ssIHN0YWNrX21hcF9vcHMpXFxuIDEyOTpcXHQjaWYgZGVmaW5lZChDT05GSUdfQlBGX0pJVClcXG4gMTMwOlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RSVUNUX09QUywgYnBmX3N0cnVjdF9vcHNfbWFwX29wcylcXG4gMTMxOlxcdCNlbmRpZlxcbiAxMzI6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSU5HQlVGLCByaW5nYnVmX21hcF9vcHMpXFxuIDEzMzpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUiwgYmxvb21fZmlsdGVyX21hcF9vcHMpXFxuIDEzNDpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1VTRVJfUklOR0JVRiwgdXNlcl9yaW5nYnVmX21hcF9vcHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjA2LjM4MzU0NDA5OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTQyNDY3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBCUEYgVHlwZSBEZWZpbml0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGluIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYCBmb3IgYEJQRl9NQVBfVFlQRV9TT0NLTUFQYCBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfSU5FVGAuIFRoYXQgaW1tZWRpYXRlbHkgY2xpY2tzIOKAkyBpdCdzIGJlY2F1c2Ugc29ja21hcHMgYXJlIGluaGVyZW50bHkgdGllZCB0byBpbnRlcm5ldCBwcm90b2NvbCBoYW5kbGluZy4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGtlcm5lbCBvbmx5IG5lZWRzIHRvIGRlZmluZSBhbmQgaGFuZGxlIHRoYXQgbWFwIHR5cGUgaWYgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBjb25maWd1cmVkIHRvIGRlYWwgd2l0aCB0aGUgaW50ZXJuZXQgc3RhY2suIE5vIHBvaW50IGluIGJsb2F0IG90aGVyd2lzZS5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIGFib3V0IGxpbmUgMTI2IGFuZCB0aGUgYCNpZmRlZiBDT05GSUdfTkVUYC4gT2theSwgdGhhdCdzIGFub3RoZXIgaW1wb3J0YW50IG9uZS4gTGV0IG1lIHF1aWNrbHkgc2NhbiBsaW5lcyAxMDAtMTE2LiBMb29rcyBsaWtlIEknbSB0cnlpbmcgdG8gc2VlIHdoYXQgdGhlIG5ldCBjb25maWd1cmF0aW9uIGlzIGNvbnRyb2xsaW5nIGhlcmUgYXMgdGhpcyBpcyBnb2luZyB0byBpbmZsdWVuY2UgdGhlIGZlYXR1cmVzIGF2YWlsYWJsZS5cblxuTGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjA5LjUyNjAxMzAyNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNILCBodGFiX3BlcmNwdV9tYXBfb3BzKVxcbiAxMDE6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9MUlVfSEFTSCwgaHRhYl9scnVfbWFwX29wcylcXG4gMTAyOlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNILCBodGFiX2xydV9wZXJjcHVfbWFwX29wcylcXG4gMTAzOlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfTFBNX1RSSUUsIHRyaWVfbWFwX29wcylcXG4gMTA0OlxcdCNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcXG4gMTA1OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RBQ0tfVFJBQ0UsIHN0YWNrX3RyYWNlX21hcF9vcHMpXFxuIDEwNjpcXHQjZW5kaWZcXG4gMTA3OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUywgYXJyYXlfb2ZfbWFwc19tYXBfb3BzKVxcbiAxMDg6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFMsIGh0YWJfb2ZfbWFwc19tYXBfb3BzKVxcbiAxMDk6XFx0I2lmZGVmIENPTkZJR19CUEZfTFNNXFxuIDExMDpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOT0RFX1NUT1JBR0UsIGlub2RlX3N0b3JhZ2VfbWFwX29wcylcXG4gMTExOlxcdCNlbmRpZlxcbiAxMTI6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UsIHRhc2tfc3RvcmFnZV9tYXBfb3BzKVxcbiAxMTM6XFx0I2lmZGVmIENPTkZJR19ORVRcXG4gMTE0OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQLCBkZXZfbWFwX29wcylcXG4gMTE1OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQX0hBU0gsIGRldl9tYXBfaGFzaF9vcHMpXFxuIDExNjpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NLX1NUT1JBR0UsIHNrX3N0b3JhZ2VfbWFwX29wcylcXG4gMTE3OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcXG4gMTE4OlxcdCNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG4gMTE5OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6MDkuNTI2MTA4MzE2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNDUxODk2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNvY2ttYXAgQlBGIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHRyYWNlIHRoZSBwYXRoIHRvIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIHRoZSBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uLiBMaW5lcyAxMTMgYW5kIDEyMSBhcmUgdGhyb3dpbmcgdXAgc29tZSBjb25kaXRpb25hbHMuIFNwZWNpZmljYWxseSwgSSBzZWUgYCNpZmRlZiBDT05GSUdfTkVUYCBvbiBsaW5lIDExMyBhbmQgYCNpZmRlZiBDT05GSUdfSU5FVGAgb24gbGluZSAxMjEuIFRoYXQgdGVsbHMgbWUgcmlnaHQgYXdheSB0aGF0IHRvIGdldCB3aGVyZSBJIG5lZWQgdG8gYmUsIEknbSBnb2luZyB0byByZXF1aXJlIGEgZmV3IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBiZSBlbmFibGVkLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgSSBuZWVkOlxuXG4qICAgYENPTkZJR19CUEZfU1lTQ0FMTGAgKHRoYXQncyBvYnZpb3VzLCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGIHN5c2NhbGxzKVxuKiAgIGBDT05GSUdfTkVUYCAodGhhdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBmb3IgbmV0d29ya2luZyByZWxhdGVkIEJQRiBmZWF0dXJlcy4pXG4qICAgYENPTkZJR19JTkVUYCAoSSBuZWVkIElQdjQgc3VwcG9ydCB0b28gdG8gcmVhY2ggdGhlIHJlbGV2YW50IGNvZGUgcGF0aCkuXG5cbk5vdywgdG8gc29saWRpZnkgdGhpcywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGlzIGFjdHVhbGx5IHVzZWQgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdGhyb3VnaCB0aGUgYGZpbmRfYW5kX2FsbG9jX21hcGAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHF1aWNrIGNoZWNrIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LiBMZXQncyBzZWUgaWYgdGhpcyBpcyB0cnVlIGFuZCB0aGF0IEkgY2FuIHJlYWNoIHRoYXQgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODoxMi42NzEzMDIxMDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDc0NjMxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX2FuZF9hbGxvY19tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjEyLjcyMzgzMzkxNloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTE0MDg0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBCUEYgTWFwIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyBCUEYgbWFwIHR5cGVzIGFuZCB0aGVpciBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGF0IHJ1bnRpbWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGRpc3BhdGNoaW5nIGhhcHBlbmluZz9cIi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gQXJlIHdlIGxvb2tpbmcgYXQgYGJwZl9tYXBfdHlwZXNgPyBPciBwZXJoYXBzIGBicGZfbWFwX29wc2A/IFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgc3RhcnRpbmcgcG9pbnQgZm9yIGZpZ3VyaW5nIG91dCAqaG93KiBkaWZmZXJlbnQgbWFwIHR5cGVzIGFyZSBhY3R1YWxseSAqdXNlZCouIE15IG1lbnRhbCBtYXAgbmVlZHMgdG8gYmUgY2xhcmlmaWVkLCBhbmQgdGhpcyBpcyB3aGVyZSBJJ2xsIGJlZ2luLCBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjE0LjYzNzkyMDQyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MTgzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21hcF90eXBlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz02OD1pbnQgc3lzY3RsX3VucHJpdmlsZWdlZF9icGZfZGlzYWJsZWQgX19yZWFkX21vc3RseSA9XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy03MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo3MTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTcyLSNkZWZpbmUgQlBGX1BST0dfVFlQRShfaWQsIF9uYW1lLCBwcm9nX2N0eF90eXBlLCBrZXJuX2N0eF90eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzNS1cXHRtYXBfdHlwZSA9IGF0dHItXFx1MDAzZW1hcF90eXBlO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MzY6XFx0aWYgKG1hcF90eXBlIFxcdTAwM2U9IEFSUkFZX1NJWkUoYnBmX21hcF90eXBlcykpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDM3LVxcdFxcdGJwZl9sb2cobG9nLCBcXFwiSW52YWxpZCBtYXBfdHlwZS5cXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzOS1cXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ0MDpcXHRtYXBfdHlwZSA9IGFycmF5X2luZGV4X25vc3BlYyhtYXBfdHlwZSwgQVJSQVlfU0laRShicGZfbWFwX3R5cGVzKSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ0MTpcXHRvcHMgPSBicGZfbWFwX3R5cGVzW21hcF90eXBlXTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDQyLVxcdGlmICghb3BzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODoxNC42ODY4NDU1NDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTAwODgwODAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU29ja21hcCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgc29ja19tYXBfYWxsb2NgLCBhbmQgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCB3aXRoaW4gYG1hcF9jcmVhdGVfYWxsb2NgIHdoaWNoIGlzIHJlYWNoZWQgdGhyb3VnaCB0aGUgYGJwZihCUEZfTUFQX0NSRUFURSwgLi4uKWAgc3lzY2FsbCDigJMgY2xhc3NpYyBCUEYgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgaXQncyBjYWxsZWQgd2hlbiB0aGUgYGF0dHItXHUwMDNlbWFwX3R5cGVgIGlzIGBCUEZfTUFQX1RZUEVfU09DS01BUGAuIEFuZCwgYWNjb3JkaW5nIHRvIG15IHN5bWJvbHMgY2hlY2ssIGBzb2NrX21hcF9hbGxvY2AgaXMgdGhlICpleGFjdCogZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuIFRoZSBjb21taXQgYWxzbyB0b3VjaGVzIGBzb2NrX21hcF9mcmVlYCwgc2luY2Ugb2J2aW91c2x5IGZyZWVpbmcgdGhlIHNvY2ttYXAgaGluZ2VzIG9uIGVudHJpZXMuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkbyBJIGluY2x1ZGUganVzdCBgc29ja19tYXBfYWxsb2NgIG9yIGJvdGggYHNvY2tfbWFwX2FsbG9jYCBhbmQgYHNvY2tfbWFwX2ZyZWVgPyBMZXQncyBjb25zdWx0IHRoZSBndWlkZWxpbmVzIChTZWN0aW9uIDQpLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0ICpzcGVjaWZpY2FsbHkqIGltcGxlbWVudCB0aGUgYWx0ZXJlZCBsb2dpYy4gRGVmaW5pdGVseSBgc29ja19tYXBfYWxsb2NgLCB0aGF0J3MgdGhlIG9uZSB3aXRoIHRoZSBkaXJlY3QgY2hhbmdlLiBBbmQgd2hpbGUgYHNvY2tfbWFwX2ZyZWVgIGlzbid0IGRpcmVjdGx5ICptb2RpZmllZCosIGl0J3MgY3JpdGljYWwgdG8gdGhlIHNvY2ttYXAncyBsaWZlY3ljbGUsIHNvLCBsZXQncyBpbmNsdWRlIGJvdGguIFRoYXQncyB0aGUgYmVzdCBhbmQgbW9zdCBzcGVjaWZpYyBhcHByb2FjaC5cblxuTm93IGZvciB0aGUgRW5hYmxlQ29uZmlncy4gVGhlIHJlbGV2YW50IEtjb25maWcgc3ltYm9scyBzZWVtIHRvIGJlIGBCUEZfU1lTQ0FMTGAsIGBORVRgLCBhbmQgYElORVRgLiBJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCBgSU5FVGAgZG9lcywgaW4gZmFjdCwgZGVwZW5kIG9uIGBORVRgLCBhbmQgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBTbywgYFtcIkJQRl9TWVNDQUxMXCIsIFwiTkVUXCIsIFwiSU5FVFwiXWAgaXQgaXMuXG5cbkZpbmFsbHksIHRoZSByZWFzb25pbmcuIExldCdzIG1ha2UgaXQgY29uY2lzZTogVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gdXBwZXIgYm91bmQgY2hlY2sgKGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYCkgd2l0aGluIGBzb2NrX21hcF9hbGxvYygpYCBmb3Igc29ja21hcCBCUEYgbWFwcy4gVGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBwcm9ibGVtcyB0aGF0IGNhbiBvY2N1ciBkdXJpbmcgbWFwIGFsbG9jYXRpb24sIGl0ZXJhdGlvbiwgYW5kIGZyZWVpbmcuIFRoZSBjaGFuZ2VkIGV4ZWN1dGFibGUgY29kZSBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBicGYoQlBGX01BUF9DUkVBVEUsIC4uLilgIHN5c2NhbGwsIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSBjb3JlLiBJIHRoaW5rIHRoYXQgY292ZXJzIGl0LiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMDQsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjE5LjY5NTY1NjI4MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODc3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfYWxsb2NcIixcbiAgICBcInNvY2tfbWFwX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2NrX21hcF9hbGxvYygpIGluIG5ldC9jb3JlL3NvY2tfbWFwLmMgYnkgYWRkaW5nIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIChyZWplY3RpbmcgdmFsdWVzIFxcdTAwM2UgSU5UX01BWCkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQX0NSRUFURSBhbmQgQlBGX01BUF9UWVBFX1NPQ0tNQVAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoaXMgcGF0aCBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdmFsaWRhdGlvbiBib3VuZGFyaWVzLCBlcnJvciBoYW5kbGluZywgYW5kIGxpZmVjeWNsZSBiZWhhdmlvciBvZiBCUEYgc29ja21hcHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX2FsbG9jXCIsXG4gICAgXCJzb2NrX21hcF9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja19tYXBfYWxsb2MoKSBpbiBuZXQvY29yZS9zb2NrX21hcC5jIGJ5IGFkZGluZyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyAocmVqZWN0aW5nIHZhbHVlcyBcXHUwMDNlIElOVF9NQVgpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHdpdGggQlBGX01BUF9DUkVBVEUgYW5kIEJQRl9NQVBfVFlQRV9TT0NLTUFQIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyB0aGlzIHBhdGggaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHZhbGlkYXRpb24gYm91bmRhcmllcywgZXJyb3IgaGFuZGxpbmcsIGFuZCBsaWZlY3ljbGUgYmVoYXZpb3Igb2YgQlBGIHNvY2ttYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODoxOS43Njk1NDAwMjNaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQxMzQxODQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjE5Ljc3MDA2MzYzNFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1MjQxMjg5MTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYYCkgaW4gYHNvY2tfbWFwX2FsbG9jKClgIHRvIHJlamVjdCBtYXAgY3JlYXRpb24gd2hlbiBgbWF4X2VudHJpZXNgIGV4Y2VlZHMgYElOVF9NQVhgLiBUaGlzIHByZXZlbnRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGUuZy4gaW4gYHNvY2tfbWFwX2ZyZWUoKWAgd2hlcmUgYSBzaWduZWQgYGludCBpYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbWFwIGVudHJpZXMpLiBcXG5cXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGJiZWFmN2I1MWEyMzNkNTk4NDllYmM1ZTg2OTZmODg0MzZiZWVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDg6NTY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuaW5kZXggY2E0OWJjN2Y4Njg3Yy4uMzhkZjg0Mjg0MzI4OSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC00MSw2ICs0MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWI7XG4gXG4gXHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG4rXHQgICAgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWCB8fFxuIFx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuIFx0ICAgIChhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHUzMikgXHUwMDI2XHUwMDI2XG4gXHQgICAgIGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjE5Ljc3MDA2NDY2NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDEwMzEzNjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgU29ja2V0IE1hcCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHNjYW4gdGhlIGRpZmYsIGZvY3VzaW5nIG9uIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuIEkgc2VlIGFuIGFkZGl0aW9uIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gIFNwZWNpZmljYWxseSwgSSBub3RpY2UgYSBuZXcgY2hlY2sgcmVsYXRlZCB0byBgbWF4X2VudHJpZXNgIHdpdGhpbiB0aGUgYHNvY2tfbWFwX2FsbG9jYCBmdW5jdGlvbi4gVGhlIGNvZGUgbm93IGluY2x1ZGVzIGEgYm91bmRzIGNoZWNrOiBgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWGAuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBzbyBJJ2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhcm91bmQgbGluZSA0MS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRoIGZvciBhIHNvY2tldCBtYXAsIGFuZCB0aGlzIGNoZWNrIGlzIGxpa2VseSBhaW1lZCBhdCBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzLiBBIGBtYXhfZW50cmllc2Agb2YgMCBpcyBjaGVja2VkIGVhcmxpZXIuIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIG5vdCBleGNlZWQgdGhlIG1heGltdW0gc2l6ZS4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODo0My44NzMyMDQ0MTVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0ICogQSBzaW5nbGUgZ2xvYmFsIG11dGV4IGxvY2sgaXMgdXNlZCBzaW5jZSBpdCBpcyBleHBlY3RlZCBjb250ZW50aW9uIGlzIGxvdy5cXG4gIDMxOlxcdCAqL1xcbiAgMzI6XFx0c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuICAzNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbiAgMzY6XFx0XFx0XFx0XFx0XFx0dTMyIHdoaWNoKTtcXG4gIDM3OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IGJwZl9zdGFiICpzdGFiO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbiAgNDQ6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWCB8fFxcbiAgNDU6XFx0XFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgICE9IDQgfHxcXG4gIDQ2OlxcdFxcdCAgICAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcXHUwMDI2XFx1MDAyNlxcbiAgNDc6XFx0XFx0ICAgICBhdHRyLVxcdTAwM2V2YWx1ZV9zaXplICE9IHNpemVvZih1NjQpKSB8fFxcbiAgNDg6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IH5TT0NLX0NSRUFURV9GTEFHX01BU0spXFxuICA0OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0c3RhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnN0YWIpLCBOVU1BX05PX05PREUpO1xcbiAgNTI6XFx0XFx0aWYgKCFzdGFiKVxcbiAgNTM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXFx1MDAyNnN0YWItXFx1MDAzZW1hcCwgYXR0cik7XFxuICA1NjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c3RhYi1cXHUwMDNlbG9jayk7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHN0YWItXFx1MDAzZXNrcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKlxcbiAgNTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcXG4gIDYwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdGFiLVxcdTAwM2VtYXAubnVtYV9ub2RlKTtcXG4gIDYxOlxcdFxcdGlmICghc3RhYi1cXHUwMDNlc2tzKSB7XFxuICA2MjpcXHRcXHRcXHRicGZfbWFwX2FyZWFfZnJlZShzdGFiKTtcXG4gIDYzOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNjQ6XFx0XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRyZXR1cm4gXFx1MDAyNnN0YWItXFx1MDAzZW1hcDtcXG4gIDY3OlxcdH1cXG4gIDY4OlxcdFxcbiAgNjk6XFx0aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuICA3MDpcXHR7XFxuICA3MTpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbiAgNzI6XFx0XFx0aW50IHJldDtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWF0dGFjaF9mbGFncyB8fCBhdHRyLVxcdTAwM2VyZXBsYWNlX2JwZl9mZClcXG4gIDc1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRDTEFTUyhmZCwgZikoYXR0ci1cXHUwMDNldGFyZ2V0X2ZkKTtcXG4gIDc4OlxcdFxcdG1hcCA9IF9fYnBmX21hcF9nZXQoZik7XFxuICA3OTpcXHRcXHRpZiAoSVNfRVJSKG1hcCkpXFxuICA4MDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtYXApO1xcbiAgODE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuICA4MjpcXHRcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG4gIDgzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuICA4NDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRpbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG4gIDg4OlxcdHtcXG4gIDg5OlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6NDMuODczMzYwOTM1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMDgwOTg3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoZWNrOiBgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWGAuIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IHRoZSByYXRpb25hbGUgYmVoaW5kIGl0LiBXaHkgd2FzIHRoaXMgY29uZGl0aW9uIGludHJvZHVjZWQ/IFdoYXQncyB0aGUgY29udGV4dD9cblxuTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgaGlzdG9yeS4gSSdsbCByZWFjaCBmb3IgYGdpdCBsb2dgIG9yIGBncmVwYCB0byBzZWFyY2ggZm9yIHJlbGF0ZWQgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHVzZXMgb2YgYHNvY2tfbWFwX2FsbG9jYCBvciBgc29ja19oYXNoX2FsbG9jYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBzb21lIGNsdWVzLiBJJ20gaG9waW5nIHRvIHVuY292ZXIgc2ltaWxhciBjaGVja3MgaW4gdGhhdCBhcmVhIG9yIHVuZGVyc3RhbmQgdGhlIHByb2JsZW0gdGhpcyB3YXMgbWVhbnQgdG8gYWRkcmVzcy4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY2hhbmdlcyB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBiYWNrZ3JvdW5kLCBhbGxvd2luZyBtZSB0byBmdWxseSBncmFzcCB3aHkgdGhpcyB1cHBlciBib3VuZCBjb25zdHJhaW50IG9uIGBtYXhfZW50cmllc2Agd2FzIGRlZW1lZCBuZWNlc3NhcnkuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIG9yaWdpbmFsIGJ1Zy9saW1pdGF0aW9uIHRoaXMgZml4IHdhcyBkZXNpZ25lZCB0byByZXNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODo0Ni4wODE0NjE5OFoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY5NDExNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zNz1zdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzQ6XFx0Lm1hcF9hbGxvY1xcdFxcdD0gc29ja19tYXBfYWxsb2MsXFxubmV0L2NvcmUvc29ja19tYXAuYy04MzUtXFx0Lm1hcF9mcmVlXFx0XFx0PSBzb2NrX21hcF9mcmVlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODo0Ni40NTA4ODAzNDdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAxNjkzMzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBzb2NrX21hcGAgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBmb2N1c2luZyBvbiBob3cgYG1heF9lbnRyaWVzYCBhbmQgdGhlIGBrZXlgIGFyZSBtYW5hZ2VkLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgc3RhcnQgZ3JlcHBpbmcgZm9yIGBzb2NrX21hcF9gLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHBhdHRlcm5zIGVtZXJnZSBpbiBpdHMgdXNhZ2UuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHVuY292ZXIgdGhlIHJlbGV2YW50IHBhcnRzIEkgbmVlZCB0byBmb2N1cyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjQ4LjQ2NzgxNzQ3NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMDg1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1OTQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MzI9c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTMzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzYtXFx0XFx0XFx0XFx0dTMyIHdoaWNoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzozOTpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY5OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NzppbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTEwLVxcdG11dGV4X2xvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTExOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgTlVMTCwgcHJvZywgTlVMTCwgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTEyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjExODpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19hY3F1aXJlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExOS1cXHRfX2FjcXVpcmVzKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI1OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2LVxcdF9fcmVsZWFzZXMoXFx1MDAyNnNrLVxcdTAwM2Vza19sb2NrLnNsb2NrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMzI6c3RhdGljIHZvaWQgc29ja19tYXBfYWRkX2xpbmsoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEzMy1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2tfbGluayAqbGluayxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQzOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbF9saW5rKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCB2b2lkICpsaW5rX3JhdylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyLVxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXAgPSBsaW5rLVxcdTAwM2VtYXA7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM6XFx0XFx0XFx0c3RydWN0IHNrX3Bzb2NrX3Byb2dzICpwcm9ncyA9IHNvY2tfbWFwX3Byb2dzKG1hcCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTQtXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3OS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4MDpzdGF0aWMgdm9pZCBzb2NrX21hcF91bnJlZihzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmxpbmtfcmF3KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0LVxcdGlmIChsaWtlbHkocHNvY2spKSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxODU6XFx0XFx0c29ja19tYXBfZGVsX2xpbmsoc2ssIHBzb2NrLCBsaW5rX3Jhdyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xODYtXFx0XFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4OS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5MDpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk4OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2sgKnNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTIwNC1cXHRpZiAocHNvY2spIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjIwNTpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWNsb3NlICE9IHNvY2tfbWFwX2Nsb3NlKSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy0yMDYtXFx0XFx0XFx0cHNvY2sgPSBFUlJfUFRSKC1FQlVTWSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjIxODpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE5LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjIyMDpcXHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTIyMS1cXHRzdHJ1Y3QgYnBmX3Byb2cgKnN0cmVhbV92ZXJkaWN0ID0gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjYxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MjYyOlxcdHBzb2NrID0gc29ja19tYXBfcHNvY2tfZ2V0X2NoZWNrZWQoc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjYzLVxcdGlmIChJU19FUlIocHNvY2spKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTI5OC1cXHQgKi9cXG5uZXQvY29yZS9zb2NrX21hcC5jOjI5OTpcXHRyZXQgPSBzb2NrX21hcF9pbml0X3Byb3RvKHNrLCBwc29jayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMDAtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzM5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzQwOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM0MS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1OC1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzozNTk6XFx0XFx0XFx0c29ja19tYXBfdW5yZWYoc2ssIHBzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zNjAtXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3MzpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZWxlYXNlX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzQte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzctXFxubmV0L2NvcmUvc29ja19tYXAuYzozNzg6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzozODk6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTItXFxubmV0L2NvcmUvc29ja19tYXAuYzozOTM6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk0LVxcdGlmICghc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwMC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwMTpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy00MDIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00MDctXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDg6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA5LVxcdGlmICghc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQxNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQxNjpzdGF0aWMgaW50IF9fc29ja19tYXBfZGVsZXRlKHN0cnVjdCBicGZfc3RhYiAqc3RhYiwgc3RydWN0IHNvY2sgKnNrX3Rlc3QsXFxubmV0L2NvcmUvc29ja19tYXAuYy00MTctXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc29jayAqKnBzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDI2LVxcdGlmIChsaWtlbHkoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDI3OlxcdFxcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDI4LVxcdGVsc2VcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM1OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM2LVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmxpbmtfcmF3KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00MzktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NDA6XFx0X19zb2NrX21hcF9kZWxldGUoc3RhYiwgc2ssIGxpbmtfcmF3KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0MS19XFxubmV0L2NvcmUvc29ja19tYXAuYy00NDItXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NDM6c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQ0LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUyLVxcdHBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxubmV0L2NvcmUvc29ja19tYXAuYzo0NTM6XFx0cmV0dXJuIF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIE5VTEwsIHBzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00NTQtfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDU1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDU2OnN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1Ny17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ3MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ3MTpzdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ3Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrICpzaywgdTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00ODktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0OTA6XFx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ5MS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTA3OlxcdHNvY2tfbWFwX2FkZF9saW5rKHBzb2NrLCBsaW5rLCBtYXAsIFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaWR4XSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy01MDgtXFx0c3RhYi1cXHUwMDNlc2tzW2lkeF0gPSBzaztcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUwOS1cXHRpZiAob3NrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTEwOlxcdFxcdHNvY2tfbWFwX3VucmVmKG9zaywgXFx1MDAyNnN0YWItXFx1MDAzZXNrc1tpZHhdKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUxMS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2c3RhYi1cXHUwMDNlbG9jayk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyMS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUyMjpzdGF0aWMgYm9vbCBzb2NrX21hcF9vcF9va2F5KGNvbnN0IHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqb3BzKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTI4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTI5OnN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTMwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTM3OnN0YXRpYyBib29sIHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzOC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU0MjpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0My17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1Nj1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU5OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU2MC1cXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgxLVxcdH1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU4MjpcXHRpZiAoIXNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNrKSkge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgzLVxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODc6XFx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODg6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OS1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5MC1cXHRlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTkxOlxcdFxcdHJldCA9IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc2ssIGZsYWdzKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5Mi1cXHRlbHNlXFxubmV0L2NvcmUvc29ja19tYXAuYy01OTMtXFx0XFx0cmV0ID0gc29ja19oYXNoX3VwZGF0ZV9jb21tb24obWFwLCBrZXksIHNrLCBmbGFncyk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1OTQ6XFx0c29ja19tYXBfc2tfcmVsZWFzZShzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy01OTUtb3V0Olxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01OTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo2MDA6c3RhdGljIGxvbmcgc29ja19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAxLVxcdFxcdFxcdFxcdCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02MDgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo2MDk6XFx0aWYgKCFzb2NrX21hcF9za19pc19zdWl0YWJsZShzaykpXFxubmV0L2NvcmUvc29ja19tYXAuYy02MTAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02MTMtXFx0YmhfbG9ja19zb2NrKHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjYxNDpcXHRpZiAoIXNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjE1LVxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjE2LVxcdGVsc2UgaWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApXFxubmV0L2NvcmUvc29ja19tYXAuYzo2MTc6XFx0XFx0cmV0ID0gc29ja19tYXBfdXBkYXRlX2NvbW1vbihtYXAsICoodTMyICopa2V5LCBzaywgZmxhZ3MpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjE4LVxcdGVsc2VcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjI0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjI1OkJQRl9DQUxMXzQoYnBmX3NvY2tfbWFwX3VwZGF0ZSwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIHNvcHMsXFxubmV0L2NvcmUvc29ja19tYXAuYy02MjYtXFx0ICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGtleSwgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjI5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjMwOlxcdGlmIChsaWtlbHkoc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc29wcy1cXHUwMDNlc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc29ja19tYXAuYzo2MzE6XFx0XFx0ICAgc29ja19tYXBfb3Bfb2theShzb3BzKSkpXFxubmV0L2NvcmUvc29ja19tYXAuYzo2MzI6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc29wcy1cXHUwMDNlc2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy02MzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02MzYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo2Mzc6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX21hcF91cGRhdGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2Mzg6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX21hcF91cGRhdGUsXFxubmV0L2NvcmUvc29ja19tYXAuYy02MzktXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NjQ4PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02NTUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo2NTY6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NzpcXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxubmV0L2NvcmUvc29ja19tYXAuYy02NTgtXFx0XFx0cmV0dXJuIFNLX0RST1A7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3Nj1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg0OlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODU6XFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjg2LVxcdFxcdHJldHVybiBTS19EUk9QO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz02OTc9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9tc2dfcmVkaXJlY3RfbWFwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MDYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MDc6c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcwOC1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz03MjA9REVGSU5FX0JQRl9JVEVSX0ZVTkMoc29ja21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNDpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyOTpcXHRpbmZvLVxcdTAwM2VzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0oaW5mby1cXHUwMDNlbWFwLCBpbmZvLVxcdTAwM2VpbmRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy03MzAtXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjczNTpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNi1cXHRfX2FjcXVpcmVzKHJjdSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNy17XFxubmV0L2NvcmUvc29ja19tYXAuYzo3Mzg6XFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM5LVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03NDItXFxubmV0L2NvcmUvc29ja19tYXAuYzo3NDM6XFx0LyogcGFpcnMgd2l0aCBzb2NrX21hcF9zZXFfc3RvcCAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ0LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0NTpcXHRyZXR1cm4gc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKGluZm8pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ2LX1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ5LVxcdF9fbXVzdF9ob2xkKHJjdSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1MC17XFxubmV0L2NvcmUvc29ja19tYXAuYzo3NTE6XFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzUyLVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03NTUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3NTY6XFx0cmV0dXJuIHNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShpbmZvKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1Ny19XFxubmV0L2NvcmUvc29ja19tYXAuYy03NTgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3NTk6c3RhdGljIGludCBzb2NrX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc2MC1cXHRfX211c3RfaG9sZChyY3UpXFxubmV0L2NvcmUvc29ja19tYXAuYy03NjEte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzYyOlxcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc2My1cXHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAgY3R4ID0ge307XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4My1cXHRfX3JlbGVhc2VzKHJjdSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzg1LVxcdGlmICghdilcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4NjpcXHRcXHQodm9pZClzb2NrX21hcF9zZXFfc2hvdyhzZXEsIE5VTEwpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzg3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzg4OlxcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0YXJ0ICovXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODktXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNvY2tfbWFwX3NlcV9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTM6XFx0LnN0YXJ0XFx0PSBzb2NrX21hcF9zZXFfc3RhcnQsXFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTQ6XFx0Lm5leHRcXHQ9IHNvY2tfbWFwX3NlcV9uZXh0LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzk1OlxcdC5zdG9wXFx0PSBzb2NrX21hcF9zZXFfc3RvcCxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5NjpcXHQuc2hvd1xcdD0gc29ja19tYXBfc2VxX3Nob3csXFxubmV0L2NvcmUvc29ja19tYXAuYy03OTctfTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5OTpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUodm9pZCAqcHJpdl9kYXRhLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxubmV0L2NvcmUvc29ja19tYXAuYy04MDEte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODAyOlxcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHByaXZfZGF0YTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwMy1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODA5OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2Zpbmlfc2VxX3ByaXZhdGUodm9pZCAqcHJpdl9kYXRhKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODEwLXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxMTpcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBwcml2X2RhdGE7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MTItXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgxNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxNjpzdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODE3LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gc29ja19tYXBfaXRlcl9zZXFfaW5mbyA9IHtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyNTpcXHQuc2VxX29wc1xcdFxcdD0gXFx1MDAyNnNvY2tfbWFwX3NlcV9vcHMsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjY6XFx0LmluaXRfc2VxX3ByaXZhdGVcXHQ9IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mjc6XFx0LmZpbmlfc2VxX3ByaXZhdGVcXHQ9IHNvY2tfbWFwX2Zpbmlfc2VxX3ByaXZhdGUsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mjg6XFx0LnNlcV9wcml2X3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8pLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODI5LX07XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzE6QlRGX0lEX0xJU1RfU0lOR0xFKHNvY2tfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3N0YWIpXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzI6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfbWFwX29wcyA9IHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzMy1cXHQubWFwX21ldGFfZXF1YWxcXHRcXHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNDpcXHQubWFwX2FsbG9jXFx0XFx0PSBzb2NrX21hcF9hbGxvYyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNTpcXHQubWFwX2ZyZWVcXHRcXHQ9IHNvY2tfbWFwX2ZyZWUsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XFx0Lm1hcF9nZXRfbmV4dF9rZXlcXHQ9IHNvY2tfbWFwX2dldF9uZXh0X2tleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzODpcXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzOTpcXHQubWFwX2RlbGV0ZV9lbGVtXFx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjg0MDpcXHQubWFwX2xvb2t1cF9lbGVtXFx0PSBzb2NrX21hcF9sb29rdXAsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDE6XFx0Lm1hcF9yZWxlYXNlX3VyZWZcXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXFxubmV0L2NvcmUvc29ja19tYXAuYy04NDItXFx0Lm1hcF9jaGVja19idGZcXHRcXHQ9IG1hcF9jaGVja19ub19idGYsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDM6XFx0Lm1hcF9tZW1fdXNhZ2VcXHRcXHQ9IHNvY2tfbWFwX21lbV91c2FnZSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjg0NDpcXHQubWFwX2J0Zl9pZFxcdFxcdD0gXFx1MDAyNnNvY2tfbWFwX2J0Zl9pZHNbMF0sXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDU6XFx0Lml0ZXJfc2VxX2luZm9cXHRcXHQ9IFxcdTAwMjZzb2NrX21hcF9pdGVyX3NlcV9pbmZvLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODQ2LX07XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTkxOT1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZGVsZXRlX2Zyb21fbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTkzNy1cXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjkzODpcXHRcXHRzb2NrX21hcF91bnJlZihlbGVtLVxcdTAwM2VzaywgZWxlbSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy05MzktXFx0XFx0c29ja19oYXNoX2ZyZWVfZWxlbShodGFiLCBlbGVtKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTQ0PXN0YXRpYyBsb25nIHNvY2tfaGFzaF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTk1OC1cXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjk1OTpcXHRcXHRzb2NrX21hcF91bnJlZihlbGVtLVxcdTAwM2VzaywgZWxlbSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy05NjAtXFx0XFx0c29ja19oYXNoX2ZyZWVfZWxlbShodGFiLCBlbGVtKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTk0PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMDEyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAxMzpcXHRyZXQgPSBzb2NrX21hcF9saW5rKG1hcCwgc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAxNC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAzOC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwMzk6XFx0c29ja19tYXBfYWRkX2xpbmsocHNvY2ssIGxpbmssIG1hcCwgZWxlbV9uZXcpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0MC1cXHQvKiBBZGQgbmV3IGVsZW1lbnQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXRcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0NS1cXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwNDY6XFx0XFx0c29ja19tYXBfdW5yZWYoZWxlbS1cXHUwMDNlc2ssIGVsZW0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0Ny1cXHRcXHRzb2NrX2hhc2hfZnJlZV9lbGVtKGh0YWIsIGVsZW0pO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMTQ3PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExODMtXFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTE4NDpcXHRcXHRcXHRzb2NrX21hcF91bnJlZihlbGVtLVxcdTAwM2VzaywgZWxlbSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTg1LVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMjMyPUJQRl9DQUxMXzQoYnBmX3NvY2tfaGFzaF91cGRhdGUsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBzb3BzLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjM2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIzNzpcXHRpZiAobGlrZWx5KHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNvcHMtXFx1MDAzZXNrKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIzODpcXHRcXHQgICBzb2NrX21hcF9vcF9va2F5KHNvcHMpKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMzktXFx0XFx0cmV0dXJuIHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKG1hcCwga2V5LCBzb3BzLVxcdTAwM2VzaywgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMjU0PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2Mi1cXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNjM6XFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2NC1cXHRcXHRyZXR1cm4gU0tfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI4Mj1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfaGFzaCwgc3RydWN0IHNrX21zZyAqLCBtc2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyOTAtXFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjkxOlxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyOTItXFx0XFx0cmV0dXJuIFNLX0RST1A7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfaGFzaF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTItXFx0Lm1hcF9nZXRfbmV4dF9rZXlcXHQ9IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXksXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDUzOlxcdC5tYXBfdXBkYXRlX2VsZW1cXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1NC1cXHQubWFwX2RlbGV0ZV9lbGVtXFx0PSBzb2NrX2hhc2hfZGVsZXRlX2VsZW0sXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDY0OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDY1LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0Nzg6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqKipwcHJvZyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NzktXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2xpbmsgKioqcGxpbmssIHUzMiB3aGljaClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0ODAte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ4MTpcXHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0ODItXFx0c3RydWN0IGJwZl9wcm9nICoqY3VyX3Bwcm9nO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTIwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyMTpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzctICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM4OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTQ1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU0NjpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKG1hcCwgXFx1MDAyNnBwcm9nLCBcXHUwMDI2cGxpbmssIHdoaWNoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NDctXFx0aWYgKHJldClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU0OS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1NTA6XFx0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sod2hpY2gsIHByb2cpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU1MS1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTcyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU3MzppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTc0LVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTkzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU5NDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKG1hcCwgXFx1MDAyNnBwcm9nLCBOVUxMLCBhdHRyLVxcdTAwM2VxdWVyeS5hdHRhY2hfdHlwZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTk1LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjIyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX3VubGluayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYyMy17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjUtXFx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MjY6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsobGluay1cXHUwMDNlbWFwLCBzayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjctXFx0XFx0XFx0XFx0XFx0XFx0IGxpbmstXFx1MDAzZWxpbmtfcmF3KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYzNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MzY6c3RhdGljIHZvaWQgc29ja19tYXBfcmVtb3ZlX2xpbmtzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2Mzcte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQwLVxcdHdoaWxlICgobGluayA9IHNrX3Bzb2NrX2xpbmtfcG9wKHBzb2NrKSkpIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDE6XFx0XFx0c29ja19tYXBfdW5saW5rKHNrLCBsaW5rKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDItXFx0XFx0c2tfcHNvY2tfZnJlZV9saW5rKGxpbmspO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY0Njp2b2lkIHNvY2tfbWFwX3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ3LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY1Ni1cXHRcXHRzYXZlZF91bmhhc2ggPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpLVxcdTAwM2V1bmhhc2g7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjU3OlxcdFxcdGlmICh1bmxpa2VseShzYXZlZF91bmhhc2ggPT0gc29ja19tYXBfdW5oYXNoKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NTgtXFx0XFx0XFx0Z290byByZXRyeTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY2MC1cXHRcXHRzYXZlZF91bmhhc2ggPSBwc29jay1cXHUwMDNlc2F2ZWRfdW5oYXNoO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY2MTpcXHRcXHRzb2NrX21hcF9yZW1vdmVfbGlua3Moc2ssIHBzb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NjItXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjYzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY2NDpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHNhdmVkX3VuaGFzaCA9PSBzb2NrX21hcF91bmhhc2gpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY2NS1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NzAtfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3MTpFWFBPUlRfU1lNQk9MX0dQTChzb2NrX21hcF91bmhhc2gpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NzM6dm9pZCBzb2NrX21hcF9kZXN0cm95KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NzQte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjgzLVxcdFxcdHNhdmVkX2Rlc3Ryb3kgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpLVxcdTAwM2VkZXN0cm95O1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY4NDpcXHRcXHRpZiAodW5saWtlbHkoc2F2ZWRfZGVzdHJveSA9PSBzb2NrX21hcF9kZXN0cm95KSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2ODUtXFx0XFx0XFx0Z290byByZXRyeTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY4Ny1cXHRcXHRzYXZlZF9kZXN0cm95ID0gcHNvY2stXFx1MDAzZXNhdmVkX2Rlc3Ryb3k7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjg4OlxcdFxcdHNvY2tfbWFwX3JlbW92ZV9saW5rcyhzaywgcHNvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY4OS1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY5Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2OTM6XFx0XFx0aWYgKFdBUk5fT05fT05DRShzYXZlZF9kZXN0cm95ID09IHNvY2tfbWFwX2Rlc3Ryb3kpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY5NC1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2OTktfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTcwMDpFWFBPUlRfU1lNQk9MX0dQTChzb2NrX21hcF9kZXN0cm95KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzAyOnZvaWQgc29ja19tYXBfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzAzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcxMi1cXHRcXHRzYXZlZF9jbG9zZSA9IHBzb2NrLVxcdTAwM2VzYXZlZF9jbG9zZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MTM6XFx0XFx0c29ja19tYXBfcmVtb3ZlX2xpbmtzKHNrLCBwc29jayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzE0LVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzIyLVxcdFxcdCAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTcyMzpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHNhdmVkX2Nsb3NlID09IHNvY2tfbWFwX2Nsb3NlKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MjQtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzI5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTczMDpcXHRcXHRpZiAodW5saWtlbHkoc2F2ZWRfY2xvc2UgPT0gc29ja19tYXBfY2xvc2UpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTczMS1cXHRcXHRcXHRnb3RvIHJldHJ5O1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzM1LX1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MzY6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfY2xvc2UpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTczNy1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6NDguNTE1OTMwNjAyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzEyMzYxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgc29ja19tYXBfZ2V0X25leHRfa2V5YC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhvc2UgbGluZXMgb2YgY29kZSwgc28gbGV0IG1lIHF1aWNrbHkganVtcCB0byBsaW5lcyA0NTYtNDcwLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcmVzaWRlcywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjUzLjM0NzE3MDc5OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdHBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxuIDQ1MzpcXHRcXHRyZXR1cm4gX19zb2NrX21hcF9kZWxldGUoc3RhYiwgTlVMTCwgcHNrKTtcXG4gNDU0OlxcdH1cXG4gNDU1OlxcdFxcbiA0NTY6XFx0c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxcbiA0NTc6XFx0e1xcbiA0NTg6XFx0XFx0c3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApO1xcbiA0NTk6XFx0XFx0dTMyIGkgPSBrZXkgPyAqKHUzMiAqKWtleSA6IFUzMl9NQVg7XFxuIDQ2MDpcXHRcXHR1MzIgKmtleV9uZXh0ID0gbmV4dDtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0aWYgKGkgPT0gc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzIC0gMSlcXG4gNDYzOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA0NjQ6XFx0XFx0aWYgKGkgXFx1MDAzZT0gc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzKVxcbiA0NjU6XFx0XFx0XFx0KmtleV9uZXh0ID0gMDtcXG4gNDY2OlxcdFxcdGVsc2VcXG4gNDY3OlxcdFxcdFxcdCprZXlfbmV4dCA9IGkgKyAxO1xcbiA0Njg6XFx0XFx0cmV0dXJuIDA7XFxuIDQ2OTpcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdHN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxcbiA0NzI6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncylcXG4gNDczOlxcdHtcXG4gNDc0OlxcdFxcdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcXG4gNDc1OlxcdFxcdHN0cnVjdCBza19wc29ja19saW5rICpsaW5rO1xcbiA0NzY6XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcXG4gNDc3OlxcdFxcdHN0cnVjdCBzb2NrICpvc2s7XFxuIDQ3ODpcXHRcXHRpbnQgcmV0O1xcbiA0Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjUzLjM0NzQwMzYzOVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzk4ODM2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzb2NrZXQgbWFwIGxvb2t1cCBpcyBhY3R1YWxseSBiZWhhdmluZywgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYF9fc29ja19tYXBfbG9va3VwX2VsZW1gIGZ1bmN0aW9uLiBMZXQncyB6b29tIGluIG9uIGxpbmVzIDM3NSB0aHJvdWdoIDQwMC4gVGhhdCByYW5nZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY2h1bmsgb2YgdGhlIGNvcmUgbG9naWMgSSdtIGludGVyZXN0ZWQgaW4sIGhvcGVmdWxseSByZXZlYWxpbmcgdGhlIG51YW5jZXMgb2YgaG93IHRoaXMgcGFydGljdWxhciBsb29rdXAgaXMgaW1wbGVtZW50ZWQuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCBjb250ZW50aW9uLiBJJ20gZXhwZWN0aW5nIHNvbWUgc3RhbmRhcmQgYnBmIG1hcCBsb29rdXAgcGFyYWRpZ21zLCBidXQgSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHVuZXhwZWN0ZWQgb3Igbm92ZWwgaW4gdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoYXQncyB3aGF0IG1ha2VzIHRoZSBkaWZmZXJlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6NTUuMTQ2MjQzNzM4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NTpcXHRcXHRwc29ja19wcm9nc19kcm9wKFxcdTAwMjZjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCktXFx1MDAzZXByb2dzKTtcXG4gMzc2OlxcdH1cXG4gMzc3OlxcdFxcbiAzNzg6XFx0c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxuIDM3OTpcXHR7XFxuIDM4MDpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdFdBUk5fT05fT05DRSghcmN1X3JlYWRfbG9ja19oZWxkKCkpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAodW5saWtlbHkoa2V5IFxcdTAwM2U9IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMpKVxcbiAzODU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDM4NjpcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKHN0YWItXFx1MDAzZXNrc1trZXldKTtcXG4gMzg3OlxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIDM5MDpcXHR7XFxuIDM5MTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDM5MjpcXHRcXG4gMzkzOlxcdFxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG4gMzk0OlxcdFxcdGlmICghc2spXFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzk2OlxcdFxcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcXG4gMzk3OlxcdFxcdFxcdHNvY2tfaG9sZChzayk7XFxuIDM5ODpcXHRcXHRyZXR1cm4gc2s7XFxuIDM5OTpcXHR9XFxuIDQwMDpcXHRcXG4gNDAxOlxcdHN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gNDAyOlxcdHtcXG4gNDAzOlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4gNDA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODo1NS4xNDYzNTQ0ODdaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTgzMzE2NDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBtYXhfZW50cmllc2AgVXNhZ2UgaW4gYHNvY2tfbWFwYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgbWF4X2VudHJpZXNgIGlzIGJlaW5nIHVzZWQgd2l0aGluIGBzb2NrX21hcGAsIGFuZCBJIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2guIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIGFsbG9jYXRpb24gcm91dGluZXMg4oCTIHNwZWNpZmljYWxseSwgYHNvY2tfaGFzaF9hbGxvY2AgYW5kIG90aGVyIG1hcCBhbGxvY2F0b3JzIGZvdW5kIHdpdGhpbiBrZXJuZWwvYnBmIGFuZCBuZXQvY29yZS9zb2NrX21hcC5jLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGVzZSBhcmVhcywgYXMgdGhleSdyZSB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb25zIGZvciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGBtYXhfZW50cmllc2AgcGFyYW1ldGVyLiBGdXJ0aGVybW9yZSwgSSdsbCBuZWVkIHRvIHJ1bGUgb3V0IGNvbW1vbiBlcnJvcnMgbGlrZSBpbnRlZ2VyIG92ZXJmbG93cyB0aGF0IG1pZ2h0IGFyaXNlIHdoZW4gd29ya2luZyB3aXRoIGEgdmFyaWFibGUgaW50ZW5kZWQgdG8gdHJhY2sgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMuIEEgY29tcHJlaGVuc2l2ZSBzZWFyY2gsIHVzaW5nIGBncmVwYCwgaXMgaW4gb3JkZXIuIEknbGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSB3aGVyZSBgbWF4X2VudHJpZXNgIGlzIGNvbXBhcmVkIGFnYWluc3QgYElOVF9NQVhgIGFjcm9zcyB0aGUga2VybmVsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIEkgbmVlZCB0byBhZGRyZXNzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIGxpbWl0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjAwLjk3OTUyMzYxNFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNzMxMzQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfZW50cmllcyBcXHUwMDNlIElOVF9NQVhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00My1cXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQ6XFx0ICAgIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgICE9IDQgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MDIuNjg2ODQzNDI0WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyODA1NjkyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGFnYWluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhpcyBgc29ja19tYXBgIGZ1bmN0aW9uYWxpdHkuXG5cbioqRGVjb25zdHJ1Y3RpbmcgU29jayBNYXAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIGBzb2NrX21hcF9hbGxvY2AuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd2hlbmV2ZXIgSSdtIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBCUEYgc2lkZS4gT3IgbWF5YmUgYGJwZl9pdGVyYCDigJMgaXQgY291bGQgYmUgaW52b2x2ZWQgaW4gaG93IHdlJ3JlIHRyYXZlcnNpbmcgb3IgaXRlcmF0aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBpbiBxdWVzdGlvbi4gVGhlbiBhZ2FpbiwgSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gcGVlayBhdCBgc2VxX2ZpbGVgLlxuXG5XYWl0IGEgbWludXRlLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNvY2tfbWFwX3NlcV9zdGFydGAgYW5kIGBzb2NrX21hcF9zZXFfbmV4dGAuIFRoZXNlIGZ1bmN0aW9uIG5hbWVzIGhhdmUgXCJzZXFcIiBpbiB0aGVtLCB3aGljaCBwb2ludHMgZGlyZWN0bHkgYXQgaG93IGEgc2VxdWVudGlhbCBpbnRlcmZhY2UgbWlnaHQgYmUgaW1wbGVtZW50ZWQuXG5cbk9rYXksIGxldCdzIGN1dCByaWdodCB0byB0aGUgY2hhc2UsIEknbSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBMaW5lcyA3MDAgdG8gNzY1IGxvb2sgbGlrZSB0aGUgcHJpbWUgc3VzcGVjdCBhcmVhLiBUaW1lIHRvIGRpc3NlY3QgdGhhdCBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjA0Ljk2NzQxNjA3N1oiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0LnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXFxuIDcwMTpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gNzAyOlxcdFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19DT05TVF9NQVBfUFRSLFxcbiA3MDM6XFx0XFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxcbiA3MDQ6XFx0XFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxcbiA3MDU6XFx0fTtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvIHtcXG4gNzA4OlxcdFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuIDcwOTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDcxMDpcXHRcXHR1MzIgaW5kZXg7XFxuIDcxMTpcXHR9O1xcbiA3MTI6XFx0XFxuIDcxMzpcXHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAge1xcbiA3MTQ6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xcbiA3MTU6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfbWFwICosIG1hcCk7XFxuIDcxNjpcXHRcXHRfX2JwZl9tZF9wdHIodm9pZCAqLCBrZXkpO1xcbiA3MTc6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBzb2NrICosIHNrKTtcXG4gNzE4OlxcdH07XFxuIDcxOTpcXHRcXG4gNzIwOlxcdERFRklORV9CUEZfSVRFUl9GVU5DKHNvY2ttYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbiA3MjE6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIDcyMjpcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrICpzaylcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxuIDcyNTpcXHR7XFxuIDcyNjpcXHRcXHRpZiAodW5saWtlbHkoaW5mby1cXHUwMDNlaW5kZXggXFx1MDAzZT0gaW5mby1cXHUwMDNlbWFwLVxcdTAwM2VtYXhfZW50cmllcykpXFxuIDcyNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0aW5mby1cXHUwMDNlc2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKGluZm8tXFx1MDAzZW1hcCwgaW5mby1cXHUwMDNlaW5kZXgpO1xcbiA3MzA6XFx0XFxuIDczMTpcXHRcXHQvKiBjYW4ndCByZXR1cm4gc2sgZGlyZWN0bHksIHNpbmNlIHRoYXQgbWlnaHQgYmUgTlVMTCAqL1xcbiA3MzI6XFx0XFx0cmV0dXJuIGluZm87XFxuIDczMzpcXHR9XFxuIDczNDpcXHRcXG4gNzM1OlxcdHN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbiA3MzY6XFx0XFx0X19hY3F1aXJlcyhyY3UpXFxuIDczNzpcXHR7XFxuIDczODpcXHRcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuIDczOTpcXHRcXG4gNzQwOlxcdFxcdGlmICgqcG9zID09IDApXFxuIDc0MTpcXHRcXHRcXHQrKypwb3M7XFxuIDc0MjpcXHRcXG4gNzQzOlxcdFxcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0b3AgKi9cXG4gNzQ0OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNzQ1OlxcdFxcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XFxuIDc0NjpcXHR9XFxuIDc0NzpcXHRcXG4gNzQ4OlxcdHN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuIDc0OTpcXHRcXHRfX211c3RfaG9sZChyY3UpXFxuIDc1MDpcXHR7XFxuIDc1MTpcXHRcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuIDc1MjpcXHRcXG4gNzUzOlxcdFxcdCsrKnBvcztcXG4gNzU0OlxcdFxcdCsraW5mby1cXHUwMDNlaW5kZXg7XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XFxuIDc1NzpcXHR9XFxuIDc1ODpcXHRcXG4gNzU5OlxcdHN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIDc2MDpcXHRcXHRfX211c3RfaG9sZChyY3UpXFxuIDc2MTpcXHR7XFxuIDc2MjpcXHRcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuIDc2MzpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAgY3R4ID0ge307XFxuIDc2NDpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbiA3NjU6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRtZXRhLnNlcSA9IHNlcTtcXG4gNzY4OlxcdFxcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcXHUwMDI2bWV0YSwgIXYpO1xcbiA3Njk6XFx0XFx0aWYgKCFwcm9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1OTowNC45Njc1NDExNDdaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE2NjcxMjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFNpZ25lZCBJbnRlZ2VyIFVzYWdlIHdpdGggYG1heF9lbnRyaWVzYCBpbiBgc29ja19tYXAuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgd2UncmUgdXNpbmcgYG1heF9lbnRyaWVzYCB3aXRoIGEgc2lnbmVkIGludGVnZXIuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgbG9jYXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGF0IGZpbGUgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIHdoZXJlIHRoaXMga2luZCBvZiB0aGluZyB3b3VsZCBiZSBoYW5kbGVkLlxuXG5UbyBuYXJyb3cgaXQgZG93biwgSSBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZSBmb3IgaW5zdGFuY2VzIG9mIGJvdGggYG1hcC1cdTAwM2VtYXhfZW50cmllc2AgYW5kIGBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2AuIFRob3NlIHNlZW0gbGlrZSB0aGUgbW9zdCByZWxldmFudCBwYXR0ZXJucyB0byBsb29rIGZvciB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZpbGUuIEhvcGVmdWxseSwgdGhpcyBzZWFyY2ggd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSB1c2FnZSBhbmQgYWxsb3cgbWUgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFuIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MDguMTM0MjU2MjA3WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQzNTk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfZW50cmllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDItXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MzpcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQ6XFx0ICAgIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgICE9IDQgfHxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTctXFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODpcXHRzdGFiLVxcdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5LVxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2sgKiksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTM0MD1zdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTM0OS1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjM1MDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpKyspIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1MS1cXHRcXHRzdHJ1Y3Qgc29jayAqKnBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTM3OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzgzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg0OlxcdGlmICh1bmxpa2VseShrZXkgXFx1MDAzZT0gbWFwLVxcdTAwM2VtYXhfZW50cmllcykpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ0Mz1zdGF0aWMgbG9uZyBzb2NrX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0OTpcXHRpZiAodW5saWtlbHkoaSBcXHUwMDNlPSBtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1MC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NDU2PXN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDYxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDYyOlxcdGlmIChpID09IHN0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXFxubmV0L2NvcmUvc29ja19tYXAuYy00NjMtXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxubmV0L2NvcmUvc29ja19tYXAuYzo0NjQ6XFx0aWYgKGkgXFx1MDAzZT0gc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDY1LVxcdFxcdCprZXlfbmV4dCA9IDA7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ3MT1zdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDgyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDgzOlxcdGlmICh1bmxpa2VseShpZHggXFx1MDAzZT0gbWFwLVxcdTAwM2VtYXhfZW50cmllcykpXFxubmV0L2NvcmUvc29ja19tYXAuYy00ODQtXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzI0PXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI1LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcXHRpZiAodW5saWtlbHkoaW5mby1cXHUwMDNlaW5kZXggXFx1MDAzZT0gaW5mby1cXHUwMDNlbWFwLVxcdTAwM2VtYXhfZW50cmllcykpXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTgxNj1zdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjA6XFx0dXNhZ2UgKz0gKHU2NCltYXAtXFx1MDAzZW1heF9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBzb2NrICopO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIxLVxcdHJldHVybiB1c2FnZTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTY3PXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKnNvY2tfaGFzaF9hbGxvY19lbGVtKHN0cnVjdCBicGZfc2h0YWIgKmh0YWIsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTk3My1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjk3NDpcXHRpZiAoYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmh0YWItXFx1MDAzZWNvdW50KSBcXHUwMDNlIGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcykge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTc1LVxcdFxcdGlmICghb2xkKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTEwOTk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX2hhc2hfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTA0OlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTA1LVxcdCAgICBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAgICA9PSAwIHx8XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTE5OlxcdGh0YWItXFx1MDAzZWJ1Y2tldHNfbnVtID0gcm91bmR1cF9wb3dfb2ZfdHdvKGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTIwLVxcdGh0YWItXFx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3NodGFiX2VsZW0pICtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MDguMTgzNjk3NzU1WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNDc1ODQwNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU29jayBNYXAgTG9vcCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gbGluZSAzNTAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgOiBgZm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKylgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvb3AgaW4gdGhlIGBzb2NrX21hcF9mcmVlYCBmdW5jdGlvbiBtb3JlIGNsZWFybHkuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSB0eXBlIG9mIHRoZSBsb29wIGNvdW50ZXIsIGBpYC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0eXBlIGBpYCBpcyBpbiB0aGUgYHNvY2tfbWFwX2ZyZWVgIGZ1bmN0aW9uLCBhbmQgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbG9vcC4gTGV0J3MgZXhhbWluZSBsaW5lcyAzNDAgdGhyb3VnaCAzNzAgaW4gdGhlIHNhbWUgZmlsZSB0byBnYWluIHRoZSBmdWxsIGNvbnRleHQgYW5kIGNvbmZpcm0gdGhlIHR5cGUgb2YgYGlgLiBUaGlzIGlzIGNydWNpYWwgZm9yIHZlcmlmeWluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBmb3Igb3ZlcmZsb3cgaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbWFwJ3MgbWF4aW11bSBlbnRyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMyNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjIwLjY1OTU0MTA4OVoiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0c3RhdGljIHZvaWQgc29ja19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiAzNDE6XFx0e1xcbiAzNDI6XFx0XFx0c3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApO1xcbiAzNDM6XFx0XFx0aW50IGk7XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdC8qIEFmdGVyIHRoZSBzeW5jIG5vIHVwZGF0ZXMgb3IgZGVsZXRlcyB3aWxsIGJlIGluLWZsaWdodCBzbyBpdFxcbiAzNDY6XFx0XFx0ICogaXMgc2FmZSB0byB3YWxrIG1hcCBhbmQgcmVtb3ZlIGVudHJpZXMgd2l0aG91dCByaXNraW5nIGEgcmFjZVxcbiAzNDc6XFx0XFx0ICogaW4gRUVYSVNUIHVwZGF0ZSBjYXNlLlxcbiAzNDg6XFx0XFx0ICovXFxuIDM0OTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzUwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKykge1xcbiAzNTE6XFx0XFx0XFx0c3RydWN0IHNvY2sgKipwc2sgPSBcXHUwMDI2c3RhYi1cXHUwMDNlc2tzW2ldO1xcbiAzNTI6XFx0XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRcXHRzayA9IHhjaGcocHNrLCBOVUxMKTtcXG4gMzU1OlxcdFxcdFxcdGlmIChzaykge1xcbiAzNTY6XFx0XFx0XFx0XFx0c29ja19ob2xkKHNrKTtcXG4gMzU3OlxcdFxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuIDM1ODpcXHRcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDM1OTpcXHRcXHRcXHRcXHRzb2NrX21hcF91bnJlZihzaywgcHNrKTtcXG4gMzYwOlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzNjE6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gMzYyOlxcdFxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4gMzYzOlxcdFxcdFxcdH1cXG4gMzY0OlxcdFxcdH1cXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0Lyogd2FpdCBmb3IgcHNvY2sgcmVhZGVycyBhY2Nlc3NpbmcgaXRzIG1hcCBsaW5rICovXFxuIDM2NzpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzY4OlxcdFxcbiAzNjk6XFx0XFx0YnBmX21hcF9hcmVhX2ZyZWUoc3RhYi1cXHUwMDNlc2tzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MjAuNjU5NjY0MzA5WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNzQ3NTI1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIGEgQyBDb2RlIFNuaXBwZXQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBMaW5lIDM0MywgYGludCBpO2Ag4oCTIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpZ25lZCBpbnRlZ2VyIGBpYCBoZXJlLiBUaGVuLCBvbiBsaW5lIDM1MCwgd2UgaGF2ZSBgZm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKylgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXM6IHdoYXQgaGFwcGVucyBpZiBgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXNgIGlzIGxhcmdlciB0aGFuIGBJTlRfTUFYYD8gU2luY2UgYGlgIGlzIHNpZ25lZCwgd2UndmUgZ290IGEgcG90ZW50aWFsIGlzc3VlLiBJZiBgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXNgIGlzIGEgYHUzMmAgKHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyKSBpbiBDLCB0aGUgY29tcGFyaXNvbiBgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXNgIGdldHMgdHJpY2t5LlxuXG5IZXJlJ3MgaG93IEknbSBicmVha2luZyBpdCBkb3duOiBgaWAgKHNpZ25lZCBpbnQpIHdpbGwgYmUgY29udmVydGVkIHRvIGB1MzJgIGZvciB0aGUgY29tcGFyaXNvbi4gTm93LCB3aGVuIGBpYCBhcHByb2FjaGVzIGBJTlRfTUFYYCwgYGkrK2AgaGFzIHRoZSBwb3RlbnRpYWwgdG8gb3ZlcmZsb3cgdGhlIHNpZ25lZCBpbnRlZ2VyLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgaW4gQy4gSWYgYGlgIHdyYXBzIGFyb3VuZCB0byBhIG5lZ2F0aXZlIHZhbHVlLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhICpodWdlKiB1bnNpZ25lZCB2YWx1ZSwgb3IgdGhlIGxvb3AgdGVybWluYXRlcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgaSsrYCBvdmVyZmxvdyBiZWluZyB1bmRlZmluZWQgYmVoYXZpb3IsIHRoaXMgY291bGQgYmUgYSBuYXN0eSBidWchXG5cbkFuZCB3YWl0LCB0aGVyZSdzIGFub3RoZXIgcG9pbnQuIFdlIGFsc28gbmVlZCB0byBhbmFseXplIHRoZSBgc29ja19tYXBfZGVsZXRlX2VsZW1gIGZ1bmN0aW9uLiBMZXQgbWUgc2NhbiB0aHJvdWdoIHRoZSByZWxldmFudCBsaW5lcywgc3BlY2lmaWNhbGx5IDQ0MC00NTUsIHRvIHNlZSBpZiBhIHNpbWlsYXIgdnVsbmVyYWJpbGl0eSBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MjMuODM0NDE5MTI1WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogMTZcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHRcXHRfX3NvY2tfbWFwX2RlbGV0ZShzdGFiLCBzaywgbGlua19yYXcpO1xcbiA0NDE6XFx0fVxcbiA0NDI6XFx0XFxuIDQ0MzpcXHRzdGF0aWMgbG9uZyBzb2NrX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIDQ0NDpcXHR7XFxuIDQ0NTpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XFxuIDQ0NjpcXHRcXHR1MzIgaSA9ICoodTMyICopa2V5O1xcbiA0NDc6XFx0XFx0c3RydWN0IHNvY2sgKipwc2s7XFxuIDQ0ODpcXHRcXG4gNDQ5OlxcdFxcdGlmICh1bmxpa2VseShpIFxcdTAwM2U9IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMpKVxcbiA0NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdHBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxuIDQ1MzpcXHRcXHRyZXR1cm4gX19zb2NrX21hcF9kZWxldGUoc3RhYiwgTlVMTCwgcHNrKTtcXG4gNDU0OlxcdH1cXG4gNDU1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1OToyMy44MzQ1MjUyMjVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMwMzE3ODA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIG91dCBsb3VkOlxuXG4qKlByb2JpbmcgZm9yIEJQRiBNYXAgSW50ZWdlciBPdmVyZmxvdyBWdWxuZXJhYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgQlBGIG1hcHMgYW5kIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGNoZWNrcyBvZiBgbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvdGhlciBtYXAgdHlwZXMsIGJlc2lkZXMgdGhlIG9uZSB0aGF0IHRyaWdnZXJlZCB0aGlzIHRob3VnaHQsIG1pZ2h0IGV4aGliaXQgc2ltaWxhciBiZWhhdmlvci5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGltcGxlbWVudGF0aW9ucyBzaW1pbGFyIHRvIGFycmF5IG1hcHMg4oCTIHRoaW5raW5nIGBhcnJheW1hcC5jYCBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgdGhhdCBjaGVjazogYG1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYCBvciBhbnkgZXF1aXZhbGVudCBsb2dpYyBpbiB0aGUgb3RoZXIgbWFwIGltcGxlbWVudGF0aW9ucy4gVGhpcyBtaWdodCBpbnZvbHZlIGRpdmluZyBpbnRvIG90aGVyIGFycmF5LWxpa2UgbWFwIGltcGxlbWVudGF0aW9ucyBhcyB3ZWxsLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBraW5kIG9mIGNoZWNrIGlzIHVzZWQsIGFuZCB3aGVyZSBpdCBtaWdodCBiZSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MjcuMTM3NzA2ODE2WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYzOTkwMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1OToyNy4xODgzNTM4NDVaIiwiU2VxIjo3MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTI5NTk5MDkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0aWVzIGluIEJQRiBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGh1bnQgZG93biBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvZGUuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlIGFuZCBqdW1wIHJpZ2h0IGludG8gdGhlIGBrZXJuZWwvYnBmL2AgZGlyZWN0b3J5LiBUaGUgdHJpZ2dlciBJJ20ga2V5aW5nIG9uIGlzIHNvbWV0aGluZyB0aGF0IGhpbnRzIGF0IHRoZSB1cHBlciBsaW1pdCBvZiBpbnRlZ2VyIHZhbHVlcyBiZWluZyBhcHByb2FjaGVkIG9yIHBvdGVudGlhbGx5IGV4Y2VlZGVkLiBUaGF0IG1lYW5zIEknbGwgdXNlIHRoZSBzZWFyY2ggdGVybSBgXHUwMDNlIElOVF9NQVhgLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBhc3N1bWluZyB0aGF0IHBsYWNlcyB3aGVyZSBhIHZhcmlhYmxlJ3MgdmFsdWUgaXMgY2hlY2tlZCBhZ2FpbnN0IGBJTlRfTUFYYCBhcmUgZ29vZCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBrbm93IGBJTlRfTUFYYCBpcyB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBzaWduZWQgMzItYml0IGludGVnZXIsIGFuZCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXNlIGNoZWNrcyBhcmUgb2NjdXJyaW5nIHdpdGhpbiB0aGUgQlBGIGNvZGUuIFRoaXMgc2VhcmNoIHRlcm0gZmVlbHMgbGlrZSBhIGdvb2QsIGVmZmljaWVudCBmaXJzdCBzdGVwLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gcmV0dXJuIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlcywgYnV0IGl0IHNob3VsZCBhbHNvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIG9mIGxvY2F0aW9ucyB3aGVyZSBJIGNhbiByZWFsbHkgZGlnIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjEyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MzYuNDg0MzQ3NTg4WiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY4NTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXHUwMDNlIElOVF9NQVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcnJheW1hcC5jPTUzPWludCBhcnJheV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNzQtXFx0LyogYXZvaWQgb3ZlcmZsb3cgb24gcm91bmRfdXAobWFwLVxcdTAwM2V2YWx1ZV9zaXplKSAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo3NTpcXHRpZiAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSBcXHUwMDNlIElOVF9NQVgpXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTc2LVxcdFxcdHJldHVybiAtRTJCSUc7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTIxMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9saW5lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIyNy1cXHRcXHRyZXR1cm4gMDtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjIyODpcXHRpZiAobnJfbGluZm8gXFx1MDAzZSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBicGZfbGluZV9pbmZvKSlcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIyOS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzQxPXN0YXRpYyBpbnQgY2hlY2tfY29yZV9yZWxvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM1OC1cXHRcXHRyZXR1cm4gMDtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjM1OTpcXHRpZiAobnJfY29yZV9yZWxvIFxcdTAwM2UgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbykpXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNjAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MjUxPXN0YXRpYyBjaGFyICpkaWFnX2ZtdF9hbGxvYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yNTctXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjI1ODpcXHRpZiAoIWRpYWcgfHwgIXNpemUgfHwgc2l6ZSBcXHUwMDNlIElOVF9NQVgpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTI1OS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYwOTU9c3RhdGljIGludCBicGZfZW5hYmxlX3J1bnRpbWVfc3RhdHModm9pZClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMDEtXFx0LyogU2V0IGEgdmVyeSBoaWdoIGxpbWl0IHRvIGF2b2lkIG92ZXJmbG93ICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEwMjpcXHRpZiAoc3RhdGljX2tleV9jb3VudChcXHUwMDI2YnBmX3N0YXRzX2VuYWJsZWRfa2V5LmtleSkgXFx1MDAzZSBJTlRfTUFYIC8gMikge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMDMtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZicGZfc3RhdHNfZW5hYmxlZF9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjM2LjUzNTA0MzA1N1oiLCJTZXEiOjczLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDU5Nzg5MzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgQ3VyaW91cyBDaGVjayBpbiBgc29ja19tYXBfYWxsb2NgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uLCBhbmQgYSByZWQgZmxhZyBpbW1lZGlhdGVseSBwb3BwZWQgdXA6IHdoeSBpcyBpdCBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzYCBpcyBncmVhdGVyIHRoYW4gYElOVF9NQVhgPyBUaGF0IHNlZW1zLi4udW51c3VhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBJcyB0aGVyZSBhIHN1YnRsZSBvdmVyZmxvdyBpc3N1ZSBhdCBwbGF5LCBvciBzb21lIG90aGVyIGNvbnN0cmFpbnQgSSdtIG1pc3Npbmc/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkZWVwZXIuIElkZWFsbHksIEknZCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBgc29ja19tYXAuY2AgY29kZSBhbmQgdGhlbiB0aGUgY29tbWl0IGxvZ3MgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGhpc3RvcmljYWwgY29udGV4dC4gVW5mb3J0dW5hdGVseSwgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gZ2l0IGxvZ3Mgb24gdGhlIHN5ei1jbHVzdGVyLiBTbywgc2luY2UgdGhlIHNvY2sgbWFwIGlzIHJlbGF0ZWQgdG8gZUJQRiwgSSdsbCBzd2l0Y2ggZ2VhcnMgc2xpZ2h0bHkgYW5kIGxvb2sgYXQgaG93IGFycmF5IG1hcHMgaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AgaGFuZGxlIGBtYXhfZW50cmllc2Agd2l0aCBgYXJyYXlfbWFwX2FsbG9jX2NoZWNrYC4gSXQncyBsaWtlbHkgdGhhdCB0aGVyZSdzIGEgY29tbW9uIHBhdHRlcm4gaW4gdGhlIGtlcm5lbCdzIGVCUEYgbWFwIGltcGxlbWVudGF0aW9ucywgYW5kIHRoaXMgbWlnaHQgb2ZmZXIgc29tZSBjbHVlcy4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIGEgY29ycmVzcG9uZGluZyBvdmVyZmxvdyBjaGVjaywgb3IgcGVyaGFwcyBhIHJhbmdlIGxpbWl0YXRpb24gdGhlcmUuIFRoaXMgc2hvdWxkIGhlbHAgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGBzb2NrX21hcF9hbGxvY2AgaGFzIHRoaXMgc3BlY2lmaWMgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjQ3LjEzMjkzODk0N1oiLCJTZXEiOjc0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9hcnJheW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUzOlxcdGludCBhcnJheV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuICA1NDpcXHR7XFxuICA1NTpcXHRcXHRib29sIHBlcmNwdSA9IGF0dHItXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk7XFxuICA1NjpcXHRcXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0LyogY2hlY2sgc2FuaXR5IG9mIGF0dHJpYnV0ZXMgKi9cXG4gIDU5OlxcdFxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXFx1MDAzZWtleV9zaXplICE9IDQgfHxcXG4gIDYwOlxcdFxcdCAgICBhdHRyLVxcdTAwM2V2YWx1ZV9zaXplID09IDAgfHxcXG4gIDYxOlxcdFxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiB+QVJSQVlfQ1JFQVRFX0ZMQUdfTUFTSyB8fFxcbiAgNjI6XFx0XFx0ICAgICFicGZfbWFwX2ZsYWdzX2FjY2Vzc19vayhhdHRyLVxcdTAwM2VtYXBfZmxhZ3MpIHx8XFxuICA2MzpcXHRcXHQgICAgKHBlcmNwdSBcXHUwMDI2XFx1MDAyNiBudW1hX25vZGUgIT0gTlVNQV9OT19OT0RFKSlcXG4gIDY0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuICA2NzpcXHRcXHQgICAgYXR0ci1cXHUwMDNlbWFwX2ZsYWdzIFxcdTAwMjYgKEJQRl9GX01NQVBBQkxFIHwgQlBGX0ZfSU5ORVJfTUFQKSlcXG4gIDY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkZfRVZFTlRfQVJSQVkgXFx1MDAyNlxcdTAwMjZcXG4gIDcxOlxcdFxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9QUkVTRVJWRV9FTEVNUylcXG4gIDcyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQvKiBhdm9pZCBvdmVyZmxvdyBvbiByb3VuZF91cChtYXAtXFx1MDAzZXZhbHVlX3NpemUpICovXFxuICA3NTpcXHRcXHRpZiAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSBcXHUwMDNlIElOVF9NQVgpXFxuICA3NjpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiAgNzc6XFx0XFx0LyogcGVyY3B1IG1hcCB2YWx1ZSBzaXplIGlzIGJvdW5kIGJ5IFBDUFVfTUlOX1VOSVRfU0laRSAqL1xcbiAgNzg6XFx0XFx0aWYgKHBlcmNwdSBcXHUwMDI2XFx1MDAyNiByb3VuZF91cChhdHRyLVxcdTAwM2V2YWx1ZV9zaXplLCA4KSBcXHUwMDNlIFBDUFVfTUlOX1VOSVRfU0laRSlcXG4gIDc5OlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdHJldHVybiAwO1xcbiAgODI6XFx0fVxcbiAgODM6XFx0XFxuICA4NDpcXHRzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFycmF5X21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4gIDg1OlxcdHtcXG4gIDg2OlxcdFxcdGJvb2wgcGVyY3B1ID0gYXR0ci1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTtcXG4gIDg3OlxcdFxcdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xcbiAgODg6XFx0XFx0dTMyIGVsZW1fc2l6ZSwgaW5kZXhfbWFzaywgbWF4X2VudHJpZXM7XFxuICA4OTpcXHRcXHRib29sIGJ5cGFzc19zcGVjX3YxID0gYnBmX2J5cGFzc19zcGVjX3YxKE5VTEwpO1xcbiAgOTA6XFx0XFx0dTY0IGFycmF5X3NpemUsIG1hc2s2NDtcXG4gIDkxOlxcdFxcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5O1xcbiAgOTI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjQ3LjEzMzA0MTY4N1oiLCJTZXEiOjc1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDgwMDEzMDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHNvY2tfbWFwX2FsbG9jYCBmb3IgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cqKlxuXG5Pa2F5LCBsZXQncyBjaXJjbGUgYmFjayB0byBgc29ja19tYXBfYWxsb2NgLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuIEknbSBnb2luZyB0aHJvdWdoIGl0IGFnYWluLCBsaW5lIGJ5IGxpbmUuIExldCBtZSBqdXN0IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldDpcblxuYGBgY1xuc3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbntcblx0c3RydWN0IGJwZl9zdGFiICpzdGFiO1xuXG5cdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcblx0ICAgIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVggfHxcblx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuXHQgICAgKGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcdTAwMjZcdTAwMjZcblx0ICAgICBhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHU2NCkpIHx8XG5cdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgflNPQ0tfQ1JFQVRFX0ZMQUdfTUFTSylcblx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbmBgYFxuXG5XYWl0IGEgc2Vjb25k4oCmIHdoYXQgd2FzIHRoZSAqc3BlY2lmaWMqIHJlYXNvbiB3ZSBuZWVkZWQgYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgPyBNeSBtZW1vcnkgaXNuJ3QgcGVyZmVjdCwgc28gaXQncyBiZXN0IHRvIHJlZnJlc2guIE9rYXksIGxldCdzIHN0ZXAgdGhyb3VnaCBhbmQgc2VlIHdoYXQgaGFwcGVucyB3aXRoIGBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2A6XG5cbmBgYGNcblx0c3RhYi1cdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMgKlxuXHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrICopLFxuXHRcdFx0XHQgICAgICAgc3RhYi1cdTAwM2VtYXAubnVtYV9ub2RlKTtcbmBgYFxuXG5BaGEhIE5vdyBJIHNlZSBpdC4gSWYgYG1heF9lbnRyaWVzYCBpcyBhIGB1MzJgIGFuZCBpdCdzIHNldCB0byBzb21ldGhpbmcgbGlrZSBgKHUzMiktMWAsIG9yIGFueSB2YWx1ZSB0aGF0J3MgY2xvc2UgdG8gdGhlIG1heGltdW0gYHUzMmAgdmFsdWUsIHRoZSBtdWx0aXBsaWNhdGlvbiBieSBgc2l6ZW9mKHN0cnVjdCBzb2NrKilgICpjb3VsZCogb3ZlcmZsb3cuIFRoZSBjYXN0IHRvIGB1NjRgICpoZWxwcyosIGJ1dCB3aXRob3V0IHRoYXQgY2hlY2sgb24gYG1heF9lbnRyaWVzYCwgeW91IGNvdWxkIHN0aWxsIGVuZCB1cCB3aXRoIGFuIHVuZXhwZWN0ZWQgYW5kIHNtYWxsZXIgYWxsb2NhdGlvbiBzaXplLCBsZWFkaW5nIHRvIGJ1ZmZlciBvdmVyZmxvd3MuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBzaXplLlxuXG5TbywgYGJwZl9tYXBfYXJlYV9hbGxvY2AgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUhIExldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mICp0aGF0KiBmdW5jdGlvbiBub3csIHRvIHNlZSB3aGF0IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6NTcuOTMzMTc1MDUyWiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTcxMjg2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21hcF9hcmVhX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz0yNjY9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjk5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMDA6XFx0YXJlbmEgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCphcmVuYSksIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTMwMS1cXHRpZiAoIWFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJyYXlfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0MS1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNDI6XFx0XFx0YXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2MoYXJyYXlfc2l6ZSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTQzLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM9OTk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpibG9vbV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE0NC1cXHRiaXRzZXRfYnl0ZXMgPSBCSVRTX1RPX0xPTkdTKCh1NjQpYml0c2V0X21hc2sgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTtcXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jOjE0NTpcXHRibG9vbSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmJsb29tKSArIGJpdHNldF9ieXRlcywgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE0Ni1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYz00ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmluc25fYXJyYXlfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtNDgtXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jOjQ5OlxcdGluc25fYXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtNTAtXFx0aWYgKCFpbnNuX2FycmF5KVxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTc3Mz1icGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzgwLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo3ODE6XFx0c21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnNtYXApLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03ODItXFx0aWYgKCFzbWFwKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwODQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEzOS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE0MDpcXHRzdF9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc3RfbWFwX3NpemUsIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNDEtXFx0aWYgKCFzdF9tYXApIHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTQ4LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTQ5OlxcdHN0X21hcC1cXHUwMDNldXZhbHVlID0gYnBmX21hcF9hcmVhX2FsbG9jKHZ0LVxcdTAwM2VzaXplLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTUwLVxcdHN0X21hcC1cXHUwMDNlZnVuY3NfY250ID0gY291bnRfZnVuY19wdHJzKGJ0ZiwgdCk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTEtXFx0c3RfbWFwLVxcdTAwM2VsaW5rcyA9XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNTI6XFx0XFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cXHUwMDNlZnVuY3NfY250ICogc2l6ZW9mKHN0cnVjdCBicGZfbGluayAqKSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1My1cXHRcXHRcXHRcXHQgICBOVU1BX05PX05PREUpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTUtXFx0c3RfbWFwLVxcdTAwM2Vrc3ltcyA9XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNTY6XFx0XFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cXHUwMDNlZnVuY3NfY250ICogc2l6ZW9mKHN0cnVjdCBicGZfa3N5bSAqKSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1Ny1cXHRcXHRcXHRcXHQgICBOVU1BX05PX05PREUpO1xcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz04NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNwdV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTEwMC1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwMTpcXHRjbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqY21hcCksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDItXFx0aWYgKCFjbWFwKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDctXFx0LyogQWxsb2MgYXJyYXkgZm9yIHBvc3NpYmxlIHJlbW90ZSBcXFwiZGVzdGluYXRpb25cXFwiIENQVXMgKi9cXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwODpcXHRjbWFwLVxcdTAwM2VjcHVfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKGNtYXAtXFx1MDAzZW1hcC5tYXhfZW50cmllcyAqXFxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDktXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCBicGZfY3B1X21hcF9lbnRyeSAqKSxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9OTE9c3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpkZXZfbWFwX2NyZWF0ZV9oYXNoKHVuc2lnbmVkIGludCBlbnRyaWVzLFxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy05Ni1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjk3OlxcdGhhc2ggPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgZW50cmllcyAqIHNpemVvZigqaGFzaCksIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9kZXZtYXAuYy05OC1cXHRpZiAoaGFzaCAhPSBOVUxMKVxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYz0xMzY9c3RhdGljIGludCBkZXZfbWFwX2luaXRfbWFwKHN0cnVjdCBicGZfZHRhYiAqZHRhYiwgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE1My1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvZGV2bWFwLmM6MTU0OlxcdFxcdGR0YWItXFx1MDAzZW5ldGRldl9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgZHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE1NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGJwZl9kdGFiX25ldGRldiAqKSxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9MTY0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqZGV2X21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTY4LVxcbmtlcm5lbC9icGYvZGV2bWFwLmM6MTY5OlxcdGR0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpkdGFiKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE3MC1cXHRpZiAoIWR0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTk9c3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNi1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjc6XFx0aHRhYi1cXHUwMDNlZWxlbXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NClodGFiLVxcdTAwM2VlbGVtX3NpemUgKiBudW1fZW50cmllcyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjgtXFx0XFx0XFx0XFx0XFx0IGh0YWItXFx1MDAzZW1hcC5udW1hX25vZGUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9NTQ4PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01NjEtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NTYyOlxcdGh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpodGFiKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01NjMtXFx0aWYgKCFodGFiKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNjA0LVxcdGVyciA9IC1FTk9NRU07XFxua2VybmVsL2JwZi9oYXNodGFiLmM6NjA1OlxcdGh0YWItXFx1MDAzZWJ1Y2tldHMgPSBicGZfbWFwX2FyZWFfYWxsb2MoaHRhYi1cXHUwMDNlbl9idWNrZXRzICpcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDYtXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCBidWNrZXQpLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjgxNj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjEtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgyMjpcXHRyaHRhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnJodGFiKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODIzLVxcdGlmICghcmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz0yOTc9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjctXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzI4OlxcdG1hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXApLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMyOS1cXHRpZiAoIW1hcClcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz01NzE9c3RhdGljIHN0cnVjdCBicGZfbWFwICp0cmllX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU4Ny1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NTg4OlxcdHRyaWUgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCp0cmllKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNTg5LVxcdGlmICghdHJpZSlcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTUwMz1zdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9vZmZsb2FkX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxNS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo1MTY6XFx0b2ZmbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqb2ZmbWFwKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MTctXFx0aWYgKCFvZmZtYXApXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz02NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnF1ZXVlX3N0YWNrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTczLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjc0OlxcdHFzID0gYnBmX21hcF9hcmVhX2FsbG9jKHF1ZXVlX3NpemUsIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtNzUtXFx0aWYgKCFxcylcXG4tLVxcbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmM9MTQ5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmV1c2Vwb3J0X2FycmF5X2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9yZXVzZXBvcnRfYXJyYXkuYy0xNTQtXFx0LyogYWxsb2NhdGUgYWxsIG1hcCBlbGVtZW50cyBhbmQgemVyby1pbml0aWFsaXplIHRoZW0gKi9cXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jOjE1NTpcXHRhcnJheSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzdHJ1Y3Rfc2l6ZShhcnJheSwgcHRycywgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMpLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmMtMTU2LVxcdGlmICghYXJyYXkpXFxuLS1cXG5rZXJuZWwvYnBmL3JpbmdidWYuYz05Mz1zdGF0aWMgc3RydWN0IGJwZl9yaW5nYnVmICpicGZfcmluZ2J1Zl9hcmVhX2FsbG9jKHNpemVfdCBkYXRhX3N6LCBpbnQgbnVtYV9ub2RlKVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmMtMTIyLVxcdGFycmF5X3NpemUgPSAobnJfbWV0YV9wYWdlcyArIDIgKiBucl9kYXRhX3BhZ2VzKSAqIHNpemVvZigqcGFnZXMpO1xcbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjEyMzpcXHRwYWdlcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhhcnJheV9zaXplLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTEyNC1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmM9MTk0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmluZ2J1Zl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3JpbmdidWYuYy0yMTItXFxua2VybmVsL2JwZi9yaW5nYnVmLmM6MjEzOlxcdHJiX21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnJiX21hcCksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9yaW5nYnVmLmMtMjE0LVxcdGlmICghcmJfbWFwKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTY4PXN0YXRpYyBpbnQgcHJlYWxsb2NfZWxlbXNfYW5kX2ZyZWVsaXN0KHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTczLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo3NDpcXHRzbWFwLVxcdTAwM2VlbGVtcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhlbGVtX3NpemUgKiBzbWFwLVxcdTAwM2VtYXAubWF4X2VudHJpZXMsXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTc1LVxcdFxcdFxcdFxcdFxcdCBzbWFwLVxcdTAwM2VtYXAubnVtYV9ub2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz05Mz1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnN0YWNrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMjUtXFx0Y29zdCA9IG5fYnVja2V0cyAqIHNpemVvZihzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKSArIHNpemVvZigqc21hcCk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjEyNjpcXHRzbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKGNvc3QsIGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cikpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMjctXFx0aWYgKCFzbWFwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzA4PXN0YXRpYyBpbnQgYnBmX21hcF9jb3B5X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzEtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzcyOnN0YXRpYyB2b2lkICpfX2JwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSwgYm9vbCBtbWFwYWJsZSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzMte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDA4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQwOTp2b2lkICpicGZfbWFwX2FyZWFfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDEwLXtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MTE6XFx0cmV0dXJuIF9fYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIG51bWFfbm9kZSwgZmFsc2UpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxMi19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00MTQ9dm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxNS17XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDE2OlxcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIHRydWUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjU4LjI5MDMwOTU4OFoiLCJTZXEiOjc3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NzcyNTI0MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyBgX19icGZfbWFwX2FyZWFfYWxsb2NgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgbGluZSAzNzIuXG5cbioqRGl2aW5nIGludG8gYF9fYnBmX21hcF9hcmVhX2FsbG9jYCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgX19icGZfbWFwX2FyZWFfYWxsb2NgIGF0IGxpbmUgMzcyIG9mIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHRoZSBjb3JlIGFsbG9jYXRvciBmb3IgQlBGIG1hcCBhcmVhcy4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCBpdHMgcGxhY2VtZW50IHdpdGhpbiB0aGUgQlBGIHN5c2NhbGwgY29kZSwgaXQncyBoaWdobHkgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgYWxsb2NhdGlvbiBvZiBtZW1vcnkgcmVnaW9ucyB0aGF0IHdpbGwgaG9sZCB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggb3VyIEJQRiBtYXBzLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgZGV0YWlscyBvZiB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLiBXaGF0IGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaXMgaXQgdXNpbmc/IElzIGl0IHNsYWIsIGJ1ZGR5LCBvciBzb21ldGhpbmcgY3VzdG9tIHRhaWxvcmVkIGZvciB0aGUgQlBGIHN1YnN5c3RlbT8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGxvY2F0aW9uIGZsYWdzIG9yIHN0cmF0ZWdpZXMgdG8gb3B0aW1pemUgZm9yIEJQRidzIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IHJlcXVpcmVtZW50cz8gSXQgaXMgYWxzbyBpbnRlcmVzdGluZyB0byB0aGluayBhYm91dCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGFyb3VuZCB0aGlzIGFsbG9jYXRpb24uIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgbG9ja3Mgb3IgY3VzdG9tIG9wdGltaXplZCBsb2Nrcz8gQW5kIGFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFwcGVhcj8gTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNoYXJhY3RlcmlzdGljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2NzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDowMy4wNjI4Mzc5MloiLCJTZXEiOjc4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdCAqIG1lbW9yeSBjZ3JvdXAgKHNlZSBhdCBicGZfbWFwX2ttYWxsb2Nfbm9kZSgpIGZvciBleGFtcGxlKS5cXG4gMzcxOlxcdCAqL1xcbiAzNzI6XFx0c3RhdGljIHZvaWQgKl9fYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlLCBib29sIG1tYXBhYmxlKVxcbiAzNzM6XFx0e1xcbiAzNzQ6XFx0XFx0LyogV2UgcmVhbGx5IGp1c3Qgd2FudCB0byBmYWlsIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBPT00ga2lsbGVyXFxuIDM3NTpcXHRcXHQgKiB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIHRoZXJlZm9yZSB3ZSBzZXQgX19HRlBfTk9SRVRSWSB0byBrbWFsbG9jLFxcbiAzNzY6XFx0XFx0ICogd2hpY2ggaXMgdXNlZCBmb3IgbG93ZXIgb3JkZXIgYWxsb2NhdGlvbiByZXF1ZXN0cy5cXG4gMzc3OlxcdFxcdCAqXFxuIDM3ODpcXHRcXHQgKiBJdCBoYXMgYmVlbiBvYnNlcnZlZCB0aGF0IGhpZ2hlciBvcmRlciBhbGxvY2F0aW9uIHJlcXVlc3RzIGRvbmUgYnlcXG4gMzc5OlxcdFxcdCAqIHZtYWxsb2Mgd2l0aCBfX0dGUF9OT1JFVFJZIGJlaW5nIHNldCBtaWdodCBmYWlsIGR1ZSB0byBub3QgdHJ5aW5nXFxuIDM4MDpcXHRcXHQgKiB0byByZWNsYWltIG1lbW9yeSBmcm9tIHRoZSBwYWdlIGNhY2hlLCB0aHVzIHdlIHNldFxcbiAzODE6XFx0XFx0ICogX19HRlBfUkVUUllfTUFZRkFJTCB0byBhdm9pZCBzdWNoIHNpdHVhdGlvbnMuXFxuIDM4MjpcXHRcXHQgKi9cXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0Z2ZwX3QgZ2ZwID0gYnBmX21lbWNnX2ZsYWdzKF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8pO1xcbiAzODU6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gMDtcXG4gMzg2OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWxpZ24gPSAxO1xcbiAzODc6XFx0XFx0dm9pZCAqYXJlYTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0aWYgKHNpemUgXFx1MDAzZT0gU0laRV9NQVgpXFxuIDM5MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0Lyoga21hbGxvYygpJ2VkIG1lbW9yeSBjYW4ndCBiZSBtbWFwKCknZWQgKi9cXG4gMzkzOlxcdFxcdGlmIChtbWFwYWJsZSkge1xcbiAzOTQ6XFx0XFx0XFx0QlVHX09OKCFQQUdFX0FMSUdORUQoc2l6ZSkpO1xcbiAzOTU6XFx0XFx0XFx0YWxpZ24gPSBTSE1MQkE7XFxuIDM5NjpcXHRcXHRcXHRmbGFncyA9IFZNX1VTRVJNQVA7XFxuIDM5NzpcXHRcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzYz0gKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpIHtcXG4gMzk4OlxcdFxcdFxcdGFyZWEgPSBrbWFsbG9jX25vZGUoc2l6ZSwgZ2ZwIHwgR0ZQX1VTRVIgfCBfX0dGUF9OT1JFVFJZLFxcbiAzOTk6XFx0XFx0XFx0XFx0XFx0ICAgIG51bWFfbm9kZSk7XFxuIDQwMDpcXHRcXHRcXHRpZiAoYXJlYSAhPSBOVUxMKVxcbiA0MDE6XFx0XFx0XFx0XFx0cmV0dXJuIGFyZWE7XFxuIDQwMjpcXHRcXHR9XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZShzaXplLCBhbGlnbiwgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxuIDQwNTpcXHRcXHRcXHRcXHRnZnAgfCBHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCwgUEFHRV9LRVJORUwsXFxuIDQwNjpcXHRcXHRcXHRcXHRmbGFncywgbnVtYV9ub2RlLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbiA0MDc6XFx0fVxcbiA0MDg6XFx0XFxuIDQwOTpcXHR2b2lkICpicGZfbWFwX2FyZWFfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUpXFxuIDQxMDpcXHR7XFxuIDQxMTpcXHRcXHRyZXR1cm4gX19icGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlLCBmYWxzZSk7XFxuIDQxMjpcXHR9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdHZvaWQgKmJwZl9tYXBfYXJlYV9tbWFwYWJsZV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6MDA6MDMuMDYzMDcxOTZaIiwiU2VxIjo3OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxMTk0NDE4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIEJQRiBTb2NrIE1hcCBGcmVlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDM4NCBjYXVnaHQgbXkgZXllLCBzcGVjaWZpY2FsbHkgdGhlIGBfX0dGUF9aRVJPYCBmbGFnIHBhc3NlZCB0byBgYnBmX21lbWNnX2ZsYWdzYC4gSXQgbWVhbnMgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgYGJwZl9tYXBfYXJlYV9hbGxvY2AgaXMgYWx3YXlzIHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gQnV0IHRoYXQncyBub3QgdGhlIGNyaXRpY2FsIHBvaW50IGhlcmUuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoeSB0aGUgY2hlY2sgYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgIHdhcyBhZGRlZCBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0IGdvdCBtZSB0aGlua2luZyBhYm91dCBob3cgYG1heF9lbnRyaWVzYCBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYHNvY2tfbWFwX2ZyZWVgLlxuXG5gYGBjXG5zdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG57XG5cdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcblx0aW50IGk7XG5cblx0LyogQWZ0ZXIgdGhlIHN5bmMgbm8gdXBkYXRlcyBvciBkZWxldGVzIHdpbGwgYmUgaW4tZmxpZ2h0IHNvIGl0XG5cdCAqIGlzIHNhZmUgdG8gd2FsayBtYXAgYW5kIHJlbW92ZSBlbnRyaWVzIHdpdGhvdXQgcmlza2luZyBhIHJhY2Vcblx0ICogaW4gRUVYSVNUIHVwZGF0ZSBjYXNlLlxuXHQgKi9cblx0c3luY2hyb25pemVfcmN1KCk7XG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpKyspIHtcbmBgYFxuXG5TbywgYHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzYCBpcyBhIGB1MzJgLCBhbmQgdGhlIGxvb3AgY291bnRlciBgaWAgaXMgYW4gYGludGAuIElmIGBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2AgaXMgaW5kZWVkIGdyZWF0ZXIgdGhhbiBgSU5UX01BWGAsIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBjb21wYXJpc29uIGBpIFx1MDAzYyBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2AgaXMgaW1wbGljaXRseSBjb21wYXJpbmcgYW4gYGludGAgdG8gYSBgdTMyYC4gVGhleSB3aWxsIGJvdGggYmUgY29udmVydGVkIHRvIGB1MzJgIGZvciB0aGUgY29tcGFyaXNvbiwgYnV0IHRoYXQncyBub3QgdGhlIHByb2JsZW0uXG5cblRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGxvb3AgaXRzZWxmLiBXaGVuIGBpYCBpbmNyZW1lbnRzIGZyb20gYDBgIHRvIGBJTlRfTUFYYCAoYDB4N2ZmZmZmZmZgKSwgdGhlIG5leHQgaW5jcmVtZW50IChgaSsrYCkgaXMgYSBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyEgSW4gR0NDL0NsYW5nIHdpdGggVUJTQU4sIHRoaXMgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBFdmVuIHdvcnNlLCBpZiBgaWAgd3JhcHMgdG8gYSBuZWdhdGl2ZSB2YWx1ZSwgaXQgYmVjb21lcyBhIG1ham9yIHByb2JsZW0uIEZvciBleGFtcGxlLCBpZiBpdCB3cmFwcyB0byAtMjE0NzQ4MzY0OCwgdGhlbiBgKHUzMilpYCBpcyAweDgwMDAwMDAwLiAgVGhlbiwgd2hlbiBgaWAgcmVhY2hlcyAtMSwgYCh1MzIpaWAgaXMgMHhmZmZmZmZmZi5cblxuSWYgYG1heF9lbnRyaWVzYCBpcyBgMHhmZmZmZmZmZmAsIHRoZW4gYGlgIGxvb3BzIGJhY2sgdG8gMC4gSXQncyBhbiBpbmZpbml0ZSBsb29wISBBbHNvLCB0aGUgaW5kZXggYGlgIGlzIHVzZWQgaW4gYHN0YWItXHUwMDNlc2tzW2ldYCwgd2hlcmUgYGlgIGlzIGEgbmVnYXRpdmUgaW50ZWdlci4gVGhpcyBtZWFucyBgc3RhYi1cdTAwM2Vza3MgKyAoLTIxNDc0ODM2NDgpYCBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBiZWxvdyBgc3RhYi1cdTAwM2Vza3NgISBUaGlzIGlzIGEgbWVtb3J5IGJ1Zywgb3IgaXQgdHJpZ2dlcnMgdGhlIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93LCBvciBpdCBpcyBhbiBpbmZpbml0ZSBsb29wLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgb3RoZXIgcGxhY2VzIHdoZXJlIGBtYXhfZW50cmllc2AgaXMgdXNlZCBvciBjb252ZXJ0ZWQgdG8gYW4gYGludGAsIG9yIGNvbXBhcmVkIHdpdGggYW4gYGludGAuIEkgc2hvdWxkIGNoZWNrIGFsbCB0aGUgY2FsbGVycyBvZiBgc29ja19tYXBfYWxsb2NgIGFzIHdlbGwgYXMgdGhlIEJQRiBzeXNjYWxsIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYXJvdW5kIGBtYXBfY3JlYXRlYC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjAwOjI4LjE4MjUxNjMyOFoiLCJTZXEiOjgwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MTgyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9jcmVhdGVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNjI5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE2MzA6c3RhdGljIGludCBtYXBfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9jb21tb25fYXR0ciAqYXR0cl9jb21tb24sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTYzMS1cXHRcXHQgICAgICBicGZwdHJfdCB1YXR0cl9jb21tb24sIHUzMiBzaXplX2NvbW1vbilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2NjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTY2MjpcXHRlcnIgPSBzZWN1cml0eV9icGZfbWFwX2NyZWF0ZShtYXAsIGF0dHIsIHRva2VuLCB1YXR0ci5pc19rZXJuZWwpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2NjMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM0My1cXHRjYXNlIEJQRl9NQVBfQ1JFQVRFOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzNDQ6XFx0XFx0ZXJyID0gbWFwX2NyZWF0ZShcXHUwMDI2YXR0ciwgdWF0dHIsIFxcdTAwMjZhdHRyX2NvbW1vbiwgdWF0dHJfY29tbW9uLCBzaXplX2NvbW1vbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM0NS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6MDA6MjguMzY3NzA4NzM3WiIsIlNlcSI6ODEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMDU2ODA4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBgbWFwX2NyZWF0ZWAqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aGVuIGEgbWFwIGlzIGNyZWF0ZWQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBpbnNwZWN0IHRoZSBgbWFwX2NyZWF0ZWAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gVGhlbiwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYG1hcF9jcmVhdGVfYWxsb2NgLiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBgYWxsb2NgIGZ1bmN0aW9uIG1heSBoYW5kbGUgdGhlIGFjdHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgbWFwJ3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBtYXBfY3JlYXRlYCBhbmQgYG1hcF9jcmVhdGVfYWxsb2NgIGlzIGtleSB0byBncmFzcGluZyB0aGUgZnVsbCBjcmVhdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgaW4gYSBzeXN0ZW1zIGNvbnRleHQuIEknbSBsb29raW5nIGZvciB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW55IHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGhvdyB0aGV5IHJlbGF0ZS4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDozMC40NzMzOTIxNzFaIiwiU2VxIjo4MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzODI6XFx0c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4xMzgzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX21hcCAqKm1hcHAsIHN0cnVjdCBicGZfdG9rZW4gKip0b2tlbnApXFxuMTM4NDpcXHR7XFxuMTM4NTpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgKm9wcztcXG4xMzg2OlxcdFxcdHN0cnVjdCBicGZfdG9rZW4gKnRva2VuID0gTlVMTDtcXG4xMzg3OlxcdFxcdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xcbjEzODg6XFx0XFx0dTMyIG1hcF90eXBlID0gYXR0ci1cXHUwMDNlbWFwX3R5cGU7XFxuMTM4OTpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbjEzOTA6XFx0XFx0Ym9vbCB0b2tlbl9mbGFnO1xcbjEzOTE6XFx0XFx0aW50IGVycjtcXG4xMzkyOlxcdFxcbjEzOTM6XFx0XFx0ZXJyID0gQ0hFQ0tfQVRUUihCUEZfTUFQX0NSRUFURSk7XFxuMTM5NDpcXHRcXHRpZiAoZXJyKSB7XFxuMTM5NTpcXHRcXHRcXHRicGZfbG9nKGxvZywgXFxcIkludmFsaWQgYXR0ci5cXFxcblxcXCIpO1xcbjEzOTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM5NzpcXHRcXHR9XFxuMTM5ODpcXHRcXG4xMzk5OlxcdFxcdC8qIGNoZWNrIEJQRl9GX1RPS0VOX0ZEIGZsYWcsIHJlbWVtYmVyIGlmIGl0J3Mgc2V0LCBhbmQgdGhlbiBjbGVhciBpdFxcbjE0MDA6XFx0XFx0ICogdG8gYXZvaWQgcGVyLW1hcCB0eXBlIGNoZWNrcyB0cmlwcGluZyBvbiB1bmtub3duIGZsYWdcXG4xNDAxOlxcdFxcdCAqL1xcbjE0MDI6XFx0XFx0dG9rZW5fZmxhZyA9IGF0dHItXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX1RPS0VOX0ZEO1xcbjE0MDM6XFx0XFx0YXR0ci1cXHUwMDNlbWFwX2ZsYWdzIFxcdTAwMjY9IH5CUEZfRl9UT0tFTl9GRDtcXG4xNDA0OlxcdFxcbjE0MDU6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWJ0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQpIHtcXG4xNDA2OlxcdFxcdFxcdGlmIChhdHRyLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfU1RSVUNUX09QUykge1xcbjE0MDc6XFx0XFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJidGZfdm1saW51eF92YWx1ZV90eXBlX2lkIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBzdHJ1Y3Rfb3BzIG1hcHMuXFxcXG5cXFwiKTtcXG4xNDA4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MDk6XFx0XFx0XFx0fVxcbjE0MTA6XFx0XFx0XFx0aWYgKGF0dHItXFx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCB8fCBhdHRyLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZCkge1xcbjE0MTE6XFx0XFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJidGZfdm1saW51eF92YWx1ZV90eXBlX2lkIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGJ0Zl9rZXlfdHlwZV9pZCBhbmQgYnRmX3ZhbHVlX3R5cGVfaWQuXFxcXG5cXFwiKTtcXG4xNDEyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MTM6XFx0XFx0XFx0fVxcbjE0MTQ6XFx0XFx0fSBlbHNlIGlmIChhdHRyLVxcdTAwM2VidGZfa2V5X3R5cGVfaWQgXFx1MDAyNlxcdTAwMjYgIWF0dHItXFx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKSB7XFxuMTQxNTpcXHRcXHRcXHRicGZfbG9nKGxvZywgXFxcIkludmFsaWQgYnRmX3ZhbHVlX3R5cGVfaWQuXFxcXG5cXFwiKTtcXG4xNDE2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MTc6XFx0XFx0fVxcbjE0MTg6XFx0XFxuMTQxOTpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUiBcXHUwMDI2XFx1MDAyNlxcbjE0MjA6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcXHUwMDI2XFx1MDAyNlxcbjE0MjE6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDozMC40NzM2MDUwNDFaIiwiU2VxIjo4MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTkwNjE5NTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbWFwX2NyZWF0ZV9hbGxvY2AqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgbWFwX2NyZWF0ZV9hbGxvY2AuIFRoaXMgc3VnZ2VzdHMgdGhlcmUncyBhIHNwZWNpZmljIGFyZWEgd2l0aGluIG91ciBtYXBwaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRoYXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJ20gYXNzdW1pbmcgd2UndmUgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBpc3N1ZSBvciBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgcmVsYXRlZCB0byBob3cgd2UncmUgY3JlYXRpbmcgYW5kIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBvdXIgbWFwcywgcG90ZW50aWFsbHkgc3RlbW1pbmcgZnJvbSB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYWxsb2NhdG9yIGl0c2VsZi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhIGZldyB0aGluZ3M6IEFyZSB3ZSBpbml0aWFsaXppbmcgdGhlIG1hcHMgZWZmaWNpZW50bHk/IElzIHRoZXJlIGFueSByZWR1bmRhbnQgYWxsb2NhdGlvbiBoYXBwZW5pbmc/IENvdWxkIHRoZXJlIGJlIGFueSBtZW1vcnkgbGVha3MgbHVya2luZyB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgaW1wYWN0IG9mIGxvY2tpbmcgKGlmIGFueSkgYW5kIGhvdyB3ZSBtaWdodCBvcHRpbWl6ZSBmb3IgcGFyYWxsZWwgYWNjZXNzLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBwcmVjaXNlIHNvdXJjZSBvZiB3aGF0ZXZlciBpcnJlZ3VsYXJpdHkgd2UndmUgZGV0ZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDozNi4zNzk4MDMzOTdaIiwiU2VxIjo4NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MjIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjI6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XFxuMTQyMzpcXHRcXHRcXHRicGZfbG9nKGxvZywgXFxcIkludmFsaWQgbWFwX2V4dHJhLlxcXFxuXFxcIik7XFxuMTQyNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDI1OlxcdFxcdH1cXG4xNDI2OlxcdFxcbjE0Mjc6XFx0XFx0aWYgKG51bWFfbm9kZSAhPSBOVU1BX05PX05PREUgXFx1MDAyNlxcdTAwMjZcXG4xNDI4OlxcdFxcdCAgICAoKHVuc2lnbmVkIGludCludW1hX25vZGUgXFx1MDAzZT0gbnJfbm9kZV9pZHMgfHxcXG4xNDI5OlxcdFxcdCAgICAgIW5vZGVfb25saW5lKG51bWFfbm9kZSkpKSB7XFxuMTQzMDpcXHRcXHRcXHRicGZfbG9nKGxvZywgXFxcIkludmFsaWQgbnVtYV9ub2RlLlxcXFxuXFxcIik7XFxuMTQzMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDMyOlxcdFxcdH1cXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0LyogZmluZCBtYXAgdHlwZSBhbmQgaW5pdCBtYXA6IGhhc2h0YWJsZSB2cyByYnRyZWUgdnMgYmxvb20gdnMgLi4uICovXFxuMTQzNTpcXHRcXHRtYXBfdHlwZSA9IGF0dHItXFx1MDAzZW1hcF90eXBlO1xcbjE0MzY6XFx0XFx0aWYgKG1hcF90eXBlIFxcdTAwM2U9IEFSUkFZX1NJWkUoYnBmX21hcF90eXBlcykpIHtcXG4xNDM3OlxcdFxcdFxcdGJwZl9sb2cobG9nLCBcXFwiSW52YWxpZCBtYXBfdHlwZS5cXFxcblxcXCIpO1xcbjE0Mzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQzOTpcXHRcXHR9XFxuMTQ0MDpcXHRcXHRtYXBfdHlwZSA9IGFycmF5X2luZGV4X25vc3BlYyhtYXBfdHlwZSwgQVJSQVlfU0laRShicGZfbWFwX3R5cGVzKSk7XFxuMTQ0MTpcXHRcXHRvcHMgPSBicGZfbWFwX3R5cGVzW21hcF90eXBlXTtcXG4xNDQyOlxcdFxcdGlmICghb3BzKVxcbjE0NDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ0NDpcXHRcXG4xNDQ1OlxcdFxcdGlmIChvcHMtXFx1MDAzZW1hcF9hbGxvY19jaGVjaykge1xcbjE0NDY6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VtYXBfYWxsb2NfY2hlY2soYXR0cik7XFxuMTQ0NzpcXHRcXHRcXHRpZiAoZXJyKVxcbjE0NDg6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDQ5OlxcdFxcdH1cXG4xNDUwOlxcdFxcdGlmIChhdHRyLVxcdTAwM2VtYXBfaWZpbmRleClcXG4xNDUxOlxcdFxcdFxcdG9wcyA9IFxcdTAwMjZicGZfbWFwX29mZmxvYWRfb3BzO1xcbjE0NTI6XFx0XFx0aWYgKCFvcHMtXFx1MDAzZW1hcF9tZW1fdXNhZ2UpXFxuMTQ1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDU0OlxcdFxcbjE0NTU6XFx0XFx0aWYgKHRva2VuX2ZsYWcpIHtcXG4xNDU2OlxcdFxcdFxcdHRva2VuID0gYnBmX3Rva2VuX2dldF9mcm9tX2ZkKGF0dHItXFx1MDAzZW1hcF90b2tlbl9mZCk7XFxuMTQ1NzpcXHRcXHRcXHRpZiAoSVNfRVJSKHRva2VuKSkge1xcbjE0NTg6XFx0XFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJJbnZhbGlkIG1hcF90b2tlbl9mZC5cXFxcblxcXCIpO1xcbjE0NTk6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIodG9rZW4pO1xcbjE0NjA6XFx0XFx0XFx0fVxcbjE0NjE6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjAwOjM2LjM4MDAzNjkyN1oiLCJTZXEiOjg1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTgwMjg5NTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgYHNvY2tfbWFwX2FsbG9jYCBQYXRjaCBhbmQgS01TQU4gUmVxdWlyZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIGBzb2NrX21hcF9hbGxvY2A6IGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYC4gRXNzZW50aWFsbHksIGl0J3MgYSBzaXplIGxpbWl0IG9uIHRoZSBgbWF4X2VudHJpZXNgIHZhbHVlLiBCZWZvcmUsIHRoZSBjb2RlIG1pZ2h0IGhhdmUgcHJvY2VlZGVkIHdpdGggYSBwcm9ibGVtYXRpYyBgbWF4X2VudHJpZXNgIHZhbHVlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGludGVnZXIgb3ZlcmZsb3csIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciByZXNvdXJjZSBleGhhdXN0aW9uIGxhdGVyIG9uIOKAkyBzYXksIGluIGBzb2NrX21hcF9mcmVlYCBvciBkdXJpbmcgYWxsb2NhdGlvbiBpdHNlbGYuXG5cbk5vdywgdGhpcyBwYXRjaCAqcmVqZWN0cyogb3ZlcnNpemVkIGBtYXhfZW50cmllc2AgdmFsdWVzIHJpZ2h0IGF0IHRoZSBhbGxvY2F0aW9uIHN0YWdlLCByZXR1cm5pbmcgYC1FSU5WQUxgLiAgTXkgam9iIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgY2hlY2suXG5cbkZpcnN0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgcmlza3MuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBJdCdzICphZGRpbmcqIGlucHV0IHZhbGlkYXRpb24uIERvZXMgaXQgYWZmZWN0IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZT8gTm8uIERvZXMgaXQgdG91Y2ggcGFkZGluZywgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG9yIGhlYXAgbWVtb3J5IGluIGEgZGFuZ2Vyb3VzIHdheT8gTm8uIElzIGl0IGFsdGVyaW5nIGFueSBib3VuZHMgY2hlY2tzIGluIGEgbWFubmVyIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQncyBtYWtpbmcgdGhlIGJvdW5kcyAqdGlnaHRlciouIEluIGVmZmVjdCwgaXQncyBwcmV2ZW50aW5nIHRoZSBhbGxvY2F0aW9uIG9mIGV4Y2Vzc2l2ZWx5IGxhcmdlLCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBtYXBzLlxuXG5JIGhhdmUgdGhlIEtNU0FOIGd1aWRlbGluZXMgaW4gZnJvbnQgb2YgbWUsIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZS4gVGhlIHJ1bGVzIHN0YXRlIEtNU0FOIGlzIG5lZWRlZCB3aGVuIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciB0aGUgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgZml0IHRoZXNlIGNhdGVnb3JpZXMuIFRoZSBwYXRjaCBhbHNvIGRvZXMgbm90IGludm9sdmUgYm91bmRzIGNoZWNrIG1vZGlmaWNhdGlvbiB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlIHBhdGNoJ3MgcHJpbWFyeSBjb25jZXJuIGlzIHByZXZlbnRpbmcgaW50ZWdlciBvdmVyZmxvdywgb3ZlcnNpemVkIGFsbG9jYXRpb25zLCBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1ZSB0byBhIHRvby1sYXJnZSBtYXAgc2l6ZSB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi9VQlNBTi4gVGhlc2UgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIEtNU0FOIGNyaXRlcmlhLCBOZWVkc0tNU0FOID0gZmFsc2UuICBUaGlzIGlzIGEgc2FmZSBjaGFuZ2UgdGhhdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQ4MSwiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDo1Mi4xODI5MzU2MjRaIiwiU2VxIjo4NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayAoYGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWGApIGluIGBzb2NrX21hcF9hbGxvYygpYCB0byByZWplY3QgbWFwIGNyZWF0aW9uIHdoZW4gYG1heF9lbnRyaWVzYCBleGNlZWRzIGBJTlRfTUFYYC4gVGhpcyBwcmV2ZW50cyBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChlLmcuIGluIGBzb2NrX21hcF9mcmVlKClgIHdoZXJlIGEgc2lnbmVkIGBpbnQgaWAgaXMgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIG1hcCBlbnRyaWVzKS4gXFxuXFxuU3VjaCBidWdzIChpbnRlZ2VyIG92ZXJmbG93LCB1bmRlZmluZWQgYmVoYXZpb3IsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgc3RyaWN0bHkgd2l0aGluIHRoZSBzY29wZSBvZiBVQlNBTiBhbmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIGtlcm5lbCBicmFuY2hpbmcsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYYCkgaW4gYHNvY2tfbWFwX2FsbG9jKClgIHRvIHJlamVjdCBtYXAgY3JlYXRpb24gd2hlbiBgbWF4X2VudHJpZXNgIGV4Y2VlZHMgYElOVF9NQVhgLiBUaGlzIHByZXZlbnRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGUuZy4gaW4gYHNvY2tfbWFwX2ZyZWUoKWAgd2hlcmUgYSBzaWduZWQgYGludCBpYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbWFwIGVudHJpZXMpLiBcXG5cXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowshh5p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 08:38:00 +0000 UTC FinishedAt: 2026-09-15 09:00:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "ee363e055895364039bf28348ff13c615afad4ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET" ], "series_id": "63018af7-a9ca-414a-a407-d4e5952904e4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_alloc", "sock_map_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ee363e055895364039bf28348ff13c615afad4ba", "base_tree": "bpf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayAoYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgKSBpbiBgc29ja19tYXBfYWxsb2MoKWAgdG8gcmVqZWN0IG1hcCBjcmVhdGlvbiB3aGVuIGBtYXhfZW50cmllc2AgZXhjZWVkcyBgSU5UX01BWGAuIFRoaXMgcHJldmVudHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiBpbiBgc29ja19tYXBfZnJlZSgpYCB3aGVyZSBhIHNpZ25lZCBgaW50IGlgIGlzIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBtYXAgZW50cmllcykuIFxuXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja19tYXBfYWxsb2MoKSBpbiBuZXQvY29yZS9zb2NrX21hcC5jIGJ5IGFkZGluZyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIChyZWplY3RpbmcgdmFsdWVzIFx1MDAzZSBJTlRfTUFYKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfQ1JFQVRFIGFuZCBCUEZfTUFQX1RZUEVfU09DS01BUCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgdGhpcyBwYXRoIGlzIHZhbHVhYmxlIHRvIHZlcmlmeSB2YWxpZGF0aW9uIGJvdW5kYXJpZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgbGlmZWN5Y2xlIGJlaGF2aW9yIG9mIEJQRiBzb2NrbWFwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0YmJlYWY3YjUxYTIzM2Q1OTg0OWViYzVlODY5NmY4ODQzNmJlZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwODo1NjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuaW5kZXggY2E0OWJjN2Y4Njg3Yy4uMzhkZjg0Mjg0MzI4OSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC00MSw2ICYjNDM7NDEsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0c3RydWN0IGJwZl9zdGFiICpzdGFiO1xuIFxuIFx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxuJiM0MztcdCAgICBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYIHx8XG4gXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4gXHQgICAgKGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgYXR0ci1cdTAwM2V2YWx1ZV9zaXplICE9IHNpemVvZih1NjQpKSB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzb2NrX21hcF9hbGxvYygpIGluIG5ldC9jb3JlL3NvY2tfbWFwLmMgYnkgYWRkaW5nIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgKHJlamVjdGluZyB2YWx1ZXMgXHUwMDNlIElOVF9NQVgpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHdpdGggQlBGX01BUF9DUkVBVEUgYW5kIEJQRl9NQVBfVFlQRV9TT0NLTUFQIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyB0aGlzIHBhdGggaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHZhbGlkYXRpb24gYm91bmRhcmllcywgZXJyb3IgaGFuZGxpbmcsIGFuZCBsaWZlY3ljbGUgYmVoYXZpb3Igb2YgQlBGIHNvY2ttYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRiYmVhZjdiNTFhMjMzZDU5ODQ5ZWJjNWU4Njk2Zjg4NDM2YmVlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA4OjU2OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKaW5kZXggY2E0OWJjN2Y4Njg3Yy4uMzhkZjg0Mjg0MzI4OSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrX21hcC5jCkBAIC00MSw2ICYjNDM7NDEsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCXN0cnVjdCBicGZfc3RhYiAqc3RhYjsKIAogCWlmIChhdHRyLSZndDttYXhfZW50cmllcyA9PSAwIHx8CiYjNDM7CSAgICBhdHRyLSZndDttYXhfZW50cmllcyAmZ3Q7IElOVF9NQVggfHwKIAkgICAgYXR0ci0mZ3Q7a2V5X3NpemUgICAgIT0gNCB8fAogCSAgICAoYXR0ci0mZ3Q7dmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSAmYW1wOyZhbXA7CiAJICAgICBhdHRyLSZndDt2YWx1ZV9zaXplICE9IHNpemVvZih1NjQpKSB8fAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCAob3IgYHJlYWQtZmlsZWAgaWYgdGhlIGNvbnRleHQgZGVtYW5kcyBpdCkgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiB3aXRoaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG1vZGlmaWNhdGlvbi4KClRoZSBgZGlmZmAgaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGBhdHRyLSZndDttYXhfZW50cmllcyAmZ3Q7IElOVF9NQVhgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgY3J1Y2lhbC4gV2UmIzM5O3JlIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSB3aGVuIGFsbG9jYXRpbmcgdGhlIHNvY2sgbWFwLiBBbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNpemVzIGFuZCBhbGxvY2F0aW9ucywgcGFydGljdWxhcmx5IGluIGEga2VybmVsIGNvbnRleHQuIEkgcmVtZW1iZXIgd2UgaGFkIGEgc2ltaWxhciBkaXNjdXNzaW9uIGEgd2hpbGUgYmFjayB3aXRoLi4uIGhtbSwgbmV2ZXIgbWluZC4KCk5vdyBJIG5lZWQgYSBiaXQgbW9yZSBjb250ZXh0LiBMZXQgbWUgcXVpY2tseSBqdW1wIHRvIGxpbmUgNDEgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHNwZWNpZmljIGNoZWNrIGlzIGJlaW5nIGludHJvZHVjZWQuIFdoYXQmIzM5O3MgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBsaWtlPyBIb3cgaXMgYGF0dHItJmd0O21heF9lbnRyaWVzYCB1c2VkPyBJcyBpdCBkaXJlY3RseSB1c2VkIGluIGEgbWVtb3J5IGFsbG9jYXRpb24sIG9yIGlzIGl0IHVzZWQgaW4gYW4gYXJpdGhtZXRpYyBjYWxjdWxhdGlvbj8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBlc3RhYmxpc2guIFVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gdGhlICp3aGF0KiBpbiB0aGlzIGNhc2UuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0ICogQSBzaW5nbGUgZ2xvYmFsIG11dGV4IGxvY2sgaXMgdXNlZCBzaW5jZSBpdCBpcyBleHBlY3RlZCBjb250ZW50aW9uIGlzIGxvdy5cbiAgMzE6XHQgKi9cbiAgMzI6XHRzdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xuICAzMzpcdFxuICAzNDpcdHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuICAzNTpcdFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbiAgMzY6XHRcdFx0XHRcdHUzMiB3aGljaCk7XG4gIDM3Olx0c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiAgNDA6XHR7XG4gIDQxOlx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWI7XG4gIDQyOlx0XG4gIDQzOlx0XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG4gIDQ0Olx0XHQgICAgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWCB8fFxuICA0NTpcdFx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuICA0NjpcdFx0ICAgIChhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHUzMikgXHUwMDI2XHUwMDI2XG4gIDQ3Olx0XHQgICAgIGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHxcbiAgNDg6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgflNPQ0tfQ1JFQVRFX0ZMQUdfTUFTSylcbiAgNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gIDUwOlx0XG4gIDUxOlx0XHRzdGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqc3RhYiksIE5VTUFfTk9fTk9ERSk7XG4gIDUyOlx0XHRpZiAoIXN0YWIpXG4gIDUzOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuICA1NDpcdFxuICA1NTpcdFx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZzdGFiLVx1MDAzZW1hcCwgYXR0cik7XG4gIDU2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzdGFiLVx1MDAzZWxvY2spO1xuICA1NzpcdFxuICA1ODpcdFx0c3RhYi1cdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMgKlxuICA1OTpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcbiAgNjA6XHRcdFx0XHRcdCAgICAgICBzdGFiLVx1MDAzZW1hcC5udW1hX25vZGUpO1xuICA2MTpcdFx0aWYgKCFzdGFiLVx1MDAzZXNrcykge1xuICA2MjpcdFx0XHRicGZfbWFwX2FyZWFfZnJlZShzdGFiKTtcbiAgNjM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gIDY0Olx0XHR9XG4gIDY1Olx0XG4gIDY2Olx0XHRyZXR1cm4gXHUwMDI2c3RhYi1cdTAwM2VtYXA7XG4gIDY3Olx0fVxuICA2ODpcdFxuICA2OTpcdGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuICA3MDpcdHtcbiAgNzE6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gIDcyOlx0XHRpbnQgcmV0O1xuICA3MzpcdFxuICA3NDpcdFx0aWYgKGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzIHx8IGF0dHItXHUwMDNlcmVwbGFjZV9icGZfZmQpXG4gIDc1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA3NjpcdFxuICA3NzpcdFx0Q0xBU1MoZmQsIGYpKGF0dHItXHUwMDNldGFyZ2V0X2ZkKTtcbiAgNzg6XHRcdG1hcCA9IF9fYnBmX21hcF9nZXQoZik7XG4gIDc5Olx0XHRpZiAoSVNfRVJSKG1hcCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nOgoKKipFeGFtaW5pbmcgQlBGIFNvY2ttYXAgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNvY2tfbWFwX2FsbG9jYCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24gZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm93LCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBzb2NrX2hhc2hfYWxsb2NgLiBHaXZlbiB0aGUgc2ltaWxhcml0eSBpbiBwdXJwb3NlLCBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGUgaGFzaCB2ZXJzaW9uIGlzIGFsc28gZGVmaW5lZCB3aXRoaW4gdGhpcyBmaWxlLiBCZXN0IHRvIGp1c3QgY29uZmlybSB0aGF0IHF1aWNrbHkgdG8gYnVpbGQgdGhlIGZ1bGwgcGljdHVyZS4gTGV0IG1lIGNoZWNrIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz04MzE9QlRGX0lEX0xJU1RfU0lOR0xFKHNvY2tfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3N0YWIpXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzMjpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXHQubWFwX21ldGFfZXF1YWxcdFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBTb2NrbWFwIEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgc29ja19tYXBfYWxsb2NgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgc2V0dGluZyB1cCBhIEJQRiBzb2NrbWFwIOKAkyBzcGVjaWZpY2FsbHksIGR1cmluZyB0aGUgYGJwZihCUEZfTUFQX0NSRUFURSwgLi4uKWAgY2FsbCB3aXRoIHRoZSBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIG1hcCB0eXBlLiBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB0aGUga2VybmVsIG5lZWRzIGVuYWJsZWQgdG8gbWFrZSBgbmV0L2NvcmUvc29ja19tYXAuY2Agd29yay4gVGltZSB0byBkaWcgaW50byB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG5ldC9jb3JlYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9gLiBSaWdodCBhd2F5LCBteSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIG9iamVjdCBmaWxlIGBzb2NrX21hcC5vYCBpcyBvbmx5IGdvaW5nIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjb25maXJtIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIG9yIHBvdGVudGlhbCBjb25mbGljdHMgcmVsYXRlZCB0byAqZWl0aGVyKiB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uICpvciogYHNvY2tfbWFwYCBpdHNlbGYgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTXkgbmV4dCBhY3Rpb24gdGhlbiBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IHNlYXJjaGluZyBmb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBgQlBGX1NZU0NBTExgIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgZmVhdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBBbHdheXMgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJyb2FkZXIgY29udGV4dCBiZWZvcmUgbWFraW5nIGFueSBkZWNpc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzMQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgc2VhcmNoOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSB3YW50IHRvIGRpZyBpbnRvIGhvdyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBoZWxwIHRleHQgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggZm9yIGBjb25maWcgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBrZXl3b3JkIEkgbmVlZC4gVGhpcyBzaG91bGQgcGlucG9pbnQgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBvcHRpb24gaXMgZGVjbGFyZWQgYW5kIHVzZWQuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyBkZXBlbmRlbmNpZXMsIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLCBhbmQgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24uIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipCUEYgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhlIGNvcmUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZGVmaW5lIHdoYXQgQlBGIGZ1bmN0aW9uYWxpdHkgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHdoYXQgbW9kdWxlcyBhcmUgYXZhaWxhYmxlLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBMaW5lIDI1IG1pZ2h0IGJlIGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmUsIGVuYWJsaW5nIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgc2V0dGluZyB1cCBhIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwLiBJJiMzOTttIGFudGljaXBhdGluZyBmaW5kaW5nIHNvbWUgZGV0YWlscyBvbiB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGFsc28gdXNpbmcgQlBGLCBvciB3aGF0IGFyZSBkZXBlbmRlbnQgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIFN5c2NhbGwgYW5kIFNvY2tldCBNYXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYEJQRl9TWVNDQUxMYCBpcyBhIGJvb2xlYW4sIGFuZCBpZiBpdCYjMzk7cyB0cnVlLCBpdCBlbmFibGVzIHRoZSBgYnBmKClgIHN5c3RlbSBjYWxsLiBJdCAqYWxzbyogc2VlbXMgdG8gdHJpZ2dlciB0aGUgYE5FVF9TT0NLX01TR2Agc2V0dGluZyBpZiB0aGUgYE5FVGAgb3B0aW9uIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBNeSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoZSBgc29ja19tYXAuY2AgZmlsZSBpbnRlcmFjdHMgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBkZXRlcm1pbmUgaWYgaXRzIGJlaGF2aW9yIGlzIGRpcmVjdGx5IGdhdGVkIGJ5IGBCUEZfU1lTQ0FMTGAsIG9yIGlmIGl0IHJlbGllcyBvbiBvdGhlciBjb25kaXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIFRvIHN0YXJ0LCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgcmV2aWV3IHRoZSBmaXJzdCA0MCBsaW5lcyBvZiBgbmV0L2NvcmUvc29ja19tYXAuY2AgdG8gbG9vayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zIG9yIGluY2x1ZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggQ292YWxlbnQgSU8sIEluYy4gaHR0cDovL2NvdmFsZW50LmlvICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2ttc2cuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrX2RpYWcuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY25ldC91ZHAuaFx1MDAzZVxuICAxNjpcdFxuICAxNzpcdHN0cnVjdCBicGZfc3RhYiB7XG4gIDE4Olx0XHRzdHJ1Y3QgYnBmX21hcCBtYXA7XG4gIDE5Olx0XHRzdHJ1Y3Qgc29jayAqKnNrcztcbiAgMjA6XHRcdHN0cnVjdCBza19wc29ja19wcm9ncyBwcm9ncztcbiAgMjE6XHRcdHNwaW5sb2NrX3QgbG9jaztcbiAgMjI6XHR9O1xuICAyMzpcdFxuICAyNDpcdCNkZWZpbmUgU09DS19DUkVBVEVfRkxBR19NQVNLXHRcdFx0XHRcXFxuICAyNTpcdFx0KEJQRl9GX05VTUFfTk9ERSB8IEJQRl9GX1JET05MWSB8IEJQRl9GX1dST05MWSlcbiAgMjY6XHRcbiAgMjc6XHQvKiBUaGlzIG11dGV4IGlzIHVzZWQgdG9cbiAgMjg6XHQgKiAgLSBwcm90ZWN0IHJhY2UgYmV0d2VlbiBwcm9nL2xpbmsgYXR0YWNoL2RldGFjaCBhbmQgbGluayBwcm9nIHVwZGF0ZSwgYW5kXG4gIDI5Olx0ICogIC0gcHJvdGVjdCByYWNlIGJldHdlZW4gcmVsZWFzaW5nIGFuZCBhY2Nlc3NpbmcgbWFwIGluIGJwZl9saW5rLlxuICAzMDpcdCAqIEEgc2luZ2xlIGdsb2JhbCBtdXRleCBsb2NrIGlzIHVzZWQgc2luY2UgaXQgaXMgZXhwZWN0ZWQgY29udGVudGlvbiBpcyBsb3cuXG4gIDMxOlx0ICovXG4gIDMyOlx0c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcbiAgMzM6XHRcbiAgMzQ6XHRzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiAgMzU6XHRcdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gIDM2Olx0XHRcdFx0XHR1MzIgd2hpY2gpO1xuICAzNzpcdHN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApO1xuICAzODpcdFxuICAzOTpcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gIDQwOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrIE1hcCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb21taXQgaW50cm9kdWNlcyBhIGNoZWNrOiBgYXR0ci0mZ3Q7bWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYYCB3aXRoaW4gYHNvY2tfbWFwX2FsbG9jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aHkgc3BlY2lmaWNhbGx5IGBJTlRfTUFYYD8gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIHVwcGVyIGJvdW5kPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgbGltaXQuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBgbWF4X2VudHJpZXNgIGFuZCBgYXR0ci0mZ3Q7bWF4X2VudHJpZXNgIGFyZSB1c2VkIHRocm91Z2hvdXQgYHNvY2tfbWFwLmNgLiBBIHF1aWNrIGdyZXAgd2l0aGluIHRoYXQgZmlsZSBmb3IgJiMzNDttYXhfZW50cmllcyYjMzQ7IHNob3VsZCBpbGx1bWluYXRlIGFsbCByZWxldmFudCBjb2RlIHBhdGhzLiBUaGF0IHdpbGwgdGVsbCB0aGUgc3Rvcnkgb2YgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF9lbnRyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTM5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0Olx0ICAgIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVggfHxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg6XHRzdGFiLVx1MDAzZXNrcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAqXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5LVx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTM0MD1zdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNDktXHRzeW5jaHJvbml6ZV9yY3UoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzUwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM1MS1cdFx0c3RydWN0IHNvY2sgKipwc2sgPSBcdTAwMjZzdGFiLVx1MDAzZXNrc1tpXTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTM3OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4My1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg0Olx0aWYgKHVubGlrZWx5KGtleSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00NDM9c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQ4LVxubmV0L2NvcmUvc29ja19tYXAuYzo0NDk6XHRpZiAodW5saWtlbHkoaSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00NTY9c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDYxLVxubmV0L2NvcmUvc29ja19tYXAuYzo0NjI6XHRpZiAoaSA9PSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2My1cdFx0cmV0dXJuIC1FTk9FTlQ7XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ2NDpcdGlmIChpIFx1MDAzZT0gc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2NS1cdFx0KmtleV9uZXh0ID0gMDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ3MT1zdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ4MzpcdGlmICh1bmxpa2VseShpZHggXHUwMDNlPSBtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxubmV0L2NvcmUvc29ja19tYXAuYy00ODQtXHRcdHJldHVybiAtRTJCSUc7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz03MjQ9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNS17XG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcdGlmICh1bmxpa2VseShpbmZvLVx1MDAzZWluZGV4IFx1MDAzZT0gaW5mby1cdTAwM2VtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxubmV0L2NvcmUvc29ja19tYXAuYy03MjctXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODE2PXN0YXRpYyB1NjQgc29ja19tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MTktXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyMDpcdHVzYWdlICYjNDM7PSAodTY0KW1hcC1cdTAwM2VtYXhfZW50cmllcyAqIHNpemVvZihzdHJ1Y3Qgc29jayAqKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIxLVx0cmV0dXJuIHVzYWdlO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTY3PXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKnNvY2tfaGFzaF9hbGxvY19lbGVtKHN0cnVjdCBicGZfc2h0YWIgKmh0YWIsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05NzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjk3NDpcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZodGFiLVx1MDAzZWNvdW50KSBcdTAwM2UgaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTc1LVx0XHRpZiAoIW9sZCkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA5OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfaGFzaF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDQ6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICA9PSAwIHx8XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTE4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTE5Olx0aHRhYi1cdTAwM2VidWNrZXRzX251bSA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMjAtXHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3NodGFiX2VsZW0pICYjNDM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGBzb2NrX21hcF9mcmVlYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNvY2tfbWFwX2ZyZWVgIGZ1bmN0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoYXQgYGlgIHZhcmlhYmxlIGluIHRoZSBsb29wLiBUaGUgY29kZSBzbmlwcGV0IHN0YXJ0cyB3aXRoIGBzeW5jaHJvbml6ZV9yY3UoKWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3RlbnRpYWwgUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBzZWVpbmcgYSBgZm9yYCBsb29wLCBsaWtlbHkgaXRlcmF0aW5nIHRocm91Z2ggc29tZSBraW5kIG9mIHRhYmxlIG9yIG1hcCwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBjcnVjaWFsIGxpbmUgdG8gdW5kZXJzdGFuZCB3aGF0IGBpYCBpcyBpbiB0aGUgYGZvcmAgbG9vcCBpczogYGZvciAoaSA9IDA7IGkgJmx0OyBzdGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KWAuCgpJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGNvZGUgdGhhdCByZXF1aXJlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgaW4gcGFydGljdWxhciB0aGUgYHN0YWItJmd0O21hcGAgc3RydWN0LCB0byBpbmZlciBgaWAmIzM5O3MgdHlwZSAoZ2l2ZW4gaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhpcyBzbmlwcGV0KS4gSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBgc29ja19tYXBfZnJlZWAgdG8gY29uZmlybSwgbGV0IG1lIHB1bGwgdXAgbGluZXMgMzQwLTM2MCB0byBzZWUgaWYgSSBjYW4gaW5mZXIgaXQgZnJvbSB0aGUgY29udGV4dCBvZiB3aGVyZSB0aGUgbG9vcCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MDpcdHN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbiAzNDE6XHR7XG4gMzQyOlx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gMzQzOlx0XHRpbnQgaTtcbiAzNDQ6XHRcbiAzNDU6XHRcdC8qIEFmdGVyIHRoZSBzeW5jIG5vIHVwZGF0ZXMgb3IgZGVsZXRlcyB3aWxsIGJlIGluLWZsaWdodCBzbyBpdFxuIDM0NjpcdFx0ICogaXMgc2FmZSB0byB3YWxrIG1hcCBhbmQgcmVtb3ZlIGVudHJpZXMgd2l0aG91dCByaXNraW5nIGEgcmFjZVxuIDM0NzpcdFx0ICogaW4gRUVYSVNUIHVwZGF0ZSBjYXNlLlxuIDM0ODpcdFx0ICovXG4gMzQ5Olx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiAzNTA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDM1MTpcdFx0XHRzdHJ1Y3Qgc29jayAqKnBzayA9IFx1MDAyNnN0YWItXHUwMDNlc2tzW2ldO1xuIDM1MjpcdFx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gMzUzOlx0XG4gMzU0Olx0XHRcdHNrID0geGNoZyhwc2ssIE5VTEwpO1xuIDM1NTpcdFx0XHRpZiAoc2spIHtcbiAzNTY6XHRcdFx0XHRzb2NrX2hvbGQoc2spO1xuIDM1NzpcdFx0XHRcdGxvY2tfc29jayhzayk7XG4gMzU4Olx0XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDM1OTpcdFx0XHRcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xuIDM2MDpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM2MTpcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gMzYyOlx0XHRcdFx0c29ja19wdXQoc2spO1xuIDM2MzpcdFx0XHR9XG4gMzY0Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIENvbmNlcm5zIFJlZ2FyZGluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBJdGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbG9vcDogYGludCBpO2AgYW5kIGBpICZsdDsgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzOyBpJiM0MzsmIzQzO2AuIE15IGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIGltbWVkaWF0ZWx5LiBJZiBgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzYCBpcyBhIGB1MzJgIChhcyB0aGUgY29kZSBpbXBsaWVzLCBsaWtlbHkgZnJvbSBgYXR0ci0mZ3Q7bWF4X2VudHJpZXNgKSwgYnV0IGBpYCBpcyBhIHN0YW5kYXJkIGBpbnRgLCB3ZSBoYXZlIGEgc2VyaW91cyBwb3RlbnRpYWwgZm9yIGFuIGludGVnZXIgb3ZlcmZsb3cuIFNwZWNpZmljYWxseSwgaWYgYHN0YWItJmd0O21hcC5tYXhfZW50cmllc2AgaXMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gYElOVF9NQVhgLCB0aGUgaXRlcmF0aW9uIHZhcmlhYmxlIGBpYCBjYW4gZWFzaWx5IHdyYXAgYXJvdW5kIG9yIGJlaGF2ZSBpbiB1bmV4cGVjdGVkIHdheXMuCgpUaGUgY3J1eCBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBjb21wYXJpc29uLiBJbiBDLCB3aGVuIGNvbXBhcmluZyBhIHNpZ25lZCBgaW50YCAoYGlgKSB0byBhbiB1bnNpZ25lZCBgdTMyYCwgdGhlIHNpZ25lZCBgaWAgZ2V0cyBpbXBsaWNpdGx5IHByb21vdGVkIHRvIGFuIHVuc2lnbmVkIGludGVnZXIuIFRodXMsIGl0IGlzIHBvc3NpYmxlIGBpYCB3aWxsIGJlIHByb21vdGVkIHRvIGB1bnNpZ25lZCBpbnRgLCB3aGVuIGBpYCByZWFjaGVzIGBJTlRfTUFYYCwgYGkmIzQzOyYjNDM7YCBvdmVyZmxvd3Mgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBUaGlzIHByb21vdGlvbiBpcyBwcm9ibGVtYXRpYywgc2luY2UgYGlgIGNhbiBiZWNvbWUgYSBuZWdhdGl2ZSBudW1iZXIgb3IgZ2V0IHByb21vdGVkIHRvIHVuc2lnbmVkLgoKSSBuZWVkIHRvIGRlbHZlIGRlZXBlciBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbGluZXMgYXJvdW5kIDQ0MC00NjAgaW4gYHNvY2tfbWFwX2RlbGV0ZV9lbGVtYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBpczsgSSBtdXN0IHZlcmlmeSBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIHRoZSBsb29wIGFuZCB3aGV0aGVyIHRoZSBjb21wYXJpc29uIGludHJvZHVjZXMgVUIuIEkgbXVzdCB0cmFjayB0aGUgcG9zc2libGUgdmFsdWVzIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRcdF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIHNrLCBsaW5rX3Jhdyk7XG4gNDQxOlx0fVxuIDQ0MjpcdFxuIDQ0MzpcdHN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiA0NDQ6XHR7XG4gNDQ1Olx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gNDQ2Olx0XHR1MzIgaSA9ICoodTMyICopa2V5O1xuIDQ0NzpcdFx0c3RydWN0IHNvY2sgKipwc2s7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRpZiAodW5saWtlbHkoaSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG4gNDUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1MTpcdFxuIDQ1MjpcdFx0cHNrID0gXHUwMDI2c3RhYi1cdTAwM2Vza3NbaV07XG4gNDUzOlx0XHRyZXR1cm4gX19zb2NrX21hcF9kZWxldGUoc3RhYiwgTlVMTCwgcHNrKTtcbiA0NTQ6XHR9XG4gNDU1Olx0XG4gNDU2Olx0c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxuIDQ1NzpcdHtcbiA0NTg6XHRcdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcbiA0NTk6XHRcdHUzMiBpID0ga2V5ID8gKih1MzIgKilrZXkgOiBVMzJfTUFYO1xuIDQ2MDpcdFx0dTMyICprZXlfbmV4dCA9IG5leHQ7XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAoaSA9PSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXG4gNDYzOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDQ2NDpcdFx0aWYgKGkgXHUwMDNlPSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcylcbiA0NjU6XHRcdFx0KmtleV9uZXh0ID0gMDtcbiA0NjY6XHRcdGVsc2VcbiA0Njc6XHRcdFx0KmtleV9uZXh0ID0gaSAmIzQzOyAxO1xuIDQ2ODpcdFx0cmV0dXJuIDA7XG4gNDY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUzNQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZG8gYSBxdWljayBkZWVwIGRpdmUuCgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gQlBGIGFuZCBBcnJheSBNYXBzKioKCkFscmlnaHQsIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciB3aXRoIHRoaXMgcGFydGljdWxhciBpc3N1ZSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbGVhZGluZyBtZSBkb3duIGEgY2VydGFpbiBwYXRoLCBidXQgSSBzaG91bGQgYWx3YXlzIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgc2VlIGlmIHRoZSBrZXJuZWwgaGFzIGFscmVhZHkgZW5jb3VudGVyZWQgYSBzaW1pbGFyIGlzc3VlIGVsc2V3aGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgY29kZSBoYW5kbGVzIGBhdHRyLSZndDttYXhfZW50cmllc2AgdmFsdWVzIHRoYXQgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gYElOVF9NQVhgLiBUaGlzIGZlZWxzIGxpa2UgYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3cgc2l0dWF0aW9uIGp1c3Qgd2FpdGluZyB0byBoYXBwZW4uIFRvIGJlIHRob3JvdWdoLCBsZXQmIzM5O3MgcG9rZSBhcm91bmQgaW4gdGhlIEJQRiBjb2RlIOKAkyBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gYGFycmF5X21hcC5jYCBhbmQgb3RoZXIgYXJlYXMgd2hlcmUgYGJwZl9tYXBgIGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBzaW1pbGFyIGNvbXBhcmlzb25zIG9yIHBvdGVudGlhbCBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmhhcHMgdGhlIGV4YWN0IHNhbWUgY2hlY2suIEl0JiMzOTtzIGJlc3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIHByZXZhaWxpbmcgbWV0aG9kb2xvZ3kgaXMgaW4gdGhpcyBhcmVhLCBhbmQgcGVyaGFwcyBsZXZlcmFnZSBhbnkgZXhpc3RpbmcgcGF0dGVybnMgb3Igc29sdXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDMtXHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0Olx0ICAgIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVggfHxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlZXAgRGl2ZSBpbnRvIGBhcnJheV9tYXBfYWxsb2NgKioKCk9rYXksIHNvIGxldCYjMzk7cyBnZXQgcmlnaHQgaW50byBpdCwgSSBuZWVkIHRvIGNoZWNrIGBhcnJheV9tYXBfYWxsb2NgLiBUaGlzIGZ1bmN0aW9uLCBJIGJlbGlldmUsIG5lZWRzIGEgdGhvcm91Z2ggZ29pbmcgb3Zlci4gSSB3YW50IHRvIGxvb2sgYXQgaXRzIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljYWxseS4gSSYjMzk7bSBrZWVuIHRvIGVuc3VyZSBpdCYjMzk7cyBub3QgbGVha2luZyBtZW1vcnkgb3IgZXhoaWJpdGluZyBhbnkgc3VidGxlIGluZWZmaWNpZW5jaWVzIHRoYXQgY291bGQgY29tcG91bmQgb3ZlciB0aW1lLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBvciBsb25nLXJ1bm5pbmcgcHJvY2Vzc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYWxsb2NhdGlvbiBzdHJhdGVneS4gRG9lcyBpdCBwcmUtYWxsb2NhdGUsIGFsbG9jYXRlIG9uIGRlbWFuZCwgb3IgdXNlIHNvbWUgaHlicmlkIGFwcHJvYWNoPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyB0byBiZSB3YXJ5IG9mPwoKTmV4dCwgdGhlIGVycm9yIGhhbmRsaW5nLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBhcnJheV9tYXBfYWxsb2NgIGdyYWNlZnVsbHkgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBhbmQgb3RoZXIgZWRnZSBjYXNlcy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGV4Y2VwdGlvbiBtZWNoYW5pc21zIGFuZCByZXR1cm4gdmFsdWVzIGl0IGxldmVyYWdlcz8gQW5kIGhvdyBkbyB0aGVzZSBleGNlcHRpb25zIGludGVyYWN0IHdpdGggdGhlIGNhbGxpbmcgZnVuY3Rpb25zPyBJcyB0aGVyZSBwb3RlbnRpYWwgZm9yIHJlc291cmNlIGxlYWtzIGlmLCBzYXksIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG1hcHBpbmcgcHJvY2VzcyBpdHNlbGY/IEkgbmVlZCB0byByZXZpZXcgdGhlc2UgZmFpbHVyZSBtb2RlcyBjb21wcmVoZW5zaXZlbHkuCgpGaW5hbGx5LCBsZXQmIzM5O3MgbG9vayBhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgbGFyZ2UgYW5kIHNtYWxsIGFycmF5cy4gSXMgdGhlcmUgYW55IGF2b2lkYWJsZSBjb21wdXRhdGlvbmFsIG92ZXJoZWFkIGluIHRoZSBjb2RlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZSBjaG9pY2Ugb2YgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobXMgd2l0aGluIHRoZSBmdW5jdGlvbiBjcmVhdGVzIGFueSB1bm5lY2Vzc2FyeSBib3R0bGVuZWNrcy4gQ2FuIGl0IGJlIGltcHJvdmVkIHVzaW5nIGEgbW9yZSBvcHRpbWFsIGFsZ29yaXRobWljIGFwcHJvYWNoPyBBbnkgY2hhbmNlIGZvciB2ZWN0b3JpemF0aW9uPyBJJiMzOTtkIGxpa2UgdG8gcGVyZm9ybSBhIHF1aWNrIHByb2ZpbGluZyBwYXNzIHRvIGRldGVybWluZSBpdHMgdHlwaWNhbCBydW4tdGltZSBhbmQgaWRlbnRpZnkgYXJlYXMgZm9yIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXhfZW50cmllcyA9PSAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjc2LVxua2VybmVsL2JwZi9hcmVuYS5jOjI3NzpcdGlmIChhdHRyLVx1MDAzZWtleV9zaXplIHx8IGF0dHItXHUwMDNldmFsdWVfc2l6ZSB8fCBhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzgtXHQgICAgLyogQlBGX0ZfTU1BUEFCTEUgbXVzdCBiZSBzZXQgKi9cbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NTM9aW50IGFycmF5X21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNTgtXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjU5Olx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVx1MDAzZWtleV9zaXplICE9IDQgfHxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy02MC1cdCAgICBhdHRyLVx1MDAzZXZhbHVlX3NpemUgPT0gMCB8fFxuLS1cbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM9OTk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpibG9vbV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xMDYtXHRpZiAoYXR0ci1cdTAwM2VrZXlfc2l6ZSAhPSAwIHx8IGF0dHItXHUwMDNldmFsdWVfc2l6ZSA9PSAwIHx8XG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jOjEwNzpcdCAgICBhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMTA4LVx0ICAgIGF0dHItXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiB+QkxPT01fQ1JFQVRFX0ZMQUdfTUFTSyB8fFxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYz0yNj1zdGF0aWMgaW50IGluc25fYXJyYXlfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTI5LVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jOjMwOlx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVx1MDAzZWtleV9zaXplICE9IDQgfHxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0zMS1cdCAgICBhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gdmFsdWVfc2l6ZSB8fCBhdHRyLVx1MDAzZW1hcF9mbGFncyAhPSAwKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmM9ODU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjcHVfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtOTAtXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xua2VybmVsL2JwZi9jcHVtYXAuYzo5MTpcdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHwgYXR0ci1cdTAwM2VrZXlfc2l6ZSAhPSA0IHx8XG5rZXJuZWwvYnBmL2NwdW1hcC5jLTkyLVx0ICAgICh2YWx1ZV9zaXplICE9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY3B1bWFwX3ZhbCwgcXNpemUpIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MTExPXN0YXRpYyBpbnQgZGV2X21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTExOC1cdCAqL1xua2VybmVsL2JwZi9kZXZtYXAuYzoxMTk6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXHUwMDNla2V5X3NpemUgIT0gNCB8fFxua2VybmVsL2JwZi9kZXZtYXAuYy0xMjAtXHQgICAgKHZhbHNpemUgIT0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9kZXZtYXBfdmFsLCBpZmluZGV4KSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz00MTI9c3RhdGljIGludCBodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NTAtXHQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjQ1MTpcdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHwgYXR0ci1cdTAwM2VrZXlfc2l6ZSA9PSAwIHx8XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NTItXHQgICAgYXR0ci1cdTAwM2V2YWx1ZV9zaXplID09IDApXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTU3MT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnRyaWVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU3Ny1cdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NTc4Olx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU3OS1cdCAgICAhKGF0dHItXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQykgfHxcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz00Nz1zdGF0aWMgaW50IHF1ZXVlX3N0YWNrX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy00OS1cdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzo1MDpcdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHwgYXR0ci1cdTAwM2VrZXlfc2l6ZSAhPSAwIHx8XG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy01MS1cdCAgICBhdHRyLVx1MDAzZXZhbHVlX3NpemUgPT0gMCB8fFxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz05Mz1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnN0YWNrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTAzLVx0LyogY2hlY2sgc2FuaXR5IG9mIGF0dHJpYnV0ZXMgKi9cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoxMDQ6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXHUwMDNla2V5X3NpemUgIT0gNCB8fFxua2VybmVsL2JwZi9zdGFja21hcC5jLTEwNS1cdCAgICB2YWx1ZV9zaXplIFx1MDAzYyA4IHx8IHZhbHVlX3NpemUgJSA4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYyMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3l6a2FsbGVyIHN5c2NhbGxzLiBTcGVjaWZpY2FsbHksIHZpYSBgYnBmJEJQRl9NQVBfQ1JFQVRFYCB3aXRoIGEgYEJQRl9NQVBfVFlQRV9TT0NLTUFQYC4gV2Uga25vdyBhIHN0YW5kYXJkIHVzZXIgb3Igc3l6a2FsbGVyIHByb2dyYW0gY2FuIHJlYWNoIGBzb2NrX21hcF9hbGxvY2AgYmVjYXVzZSBCUEYgbWFwIGNyZWF0aW9uIGlzIGEgY29yZSBCUEYgb3BlcmF0aW9uIGFjY2Vzc2libGUgdmlhIGBicGYoQlBGX01BUF9DUkVBVEUsIC4uLilgIOKAkyB0aGF04oCZcyB0aGUgZmlyc3QgaHVyZGxlLCBjaGVja2VkLgoKTm93LCBkb2VzIGl0IG1lZXQgdGhlICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0OyBjcml0ZXJpYT8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBzb2NrX21hcF9hbGxvY2AsIGFkZGluZyBhIGJvdW5kYXJ5IGNoZWNrOiBgYXR0ci0mZ3Q7bWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0sIGRpcmVjdGx5IGltcGFjdGluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgQlBGIHN5c2NhbGwgcGF0aC4gSXQgbG9va3MgbGlrZSBhIHN0cm9uZyAmIzM5O3llcyYjMzk7IGZvciBmdXp6aW5nIGZyb20gdGhhdCBpbml0aWFsIHJlYWQuCgpMb29raW5nIGRlZXBlciwgdGhlIHByaW1hcnkgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIGRpc2NvdmVyaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBldmVuIG5ldyBhc3NlcnRpb25zLiBHaXZlbiB0aGUgcmVhY2hhYmlsaXR5IGlzIGNvbmZpcm1lZCwgYW5kIHRoZSBwYXRjaCBhZGRzIGEgYm91bmRhcnkgY2hlY2ssIHRoZSBuZXcgYXNzZXJ0aW9uIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBjYW4gY2hlY2sgdGhhdCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgYW5kIGl0IGRvZXNuJiMzOTt0LiBTbywgd2UmIzM5O3JlIGRlZmluaXRlbHkgbG9va2luZyBhdCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOZXh0IHVwOiBGb2N1c1N5bWJvbHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgc29ja19tYXBfYWxsb2NgLiBJcyBpdCBzdWZmaWNpZW50PyBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYCB3ZSBzaG91bGQgdGFyZ2V0PyBJIHNlZSB0aGF0IGBzb2NrX21hcF9hbGxvY2AgaXMgc3RhdGljLCBidXQgYmVjYXVzZSBpdCYjMzk7cyB1c2VkIGluIHRoZSBzdHJ1Y3QgYGJwZl9tYXBfb3BzYCwgaXQmIzM5O3Mgbm90IGlubGluZWQgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbC4gQWxzbywgYHNvY2tfbWFwX2ZyZWVgLiBUaGUgaXNzdWUgcHJvbXB0aW5nIHRoaXMgY2hlY2sgbWlnaHQgYmUgaW4gYHNvY2tfbWFwX2ZyZWVgICh3aGVyZSB0aGUgYGludCBpYCBsb29wIGNvdWxkIG1pc2JlaGF2ZSBpZiBgbWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYYCkuIGBzb2NrX21hcF9mcmVlYCBhbHNvIG5lZWRzIHRvIGJlIGluIHRoZSBgRm9jdXNTeW1ib2xzYC4gU28sIEkmIzM5O20gdGhpbmtpbmcgd2UgZm9jdXMgb24gdGhlIGZ1bmN0aW9uczogYFsmIzM0O3NvY2tfbWFwX2FsbG9jJiMzNDssICYjMzQ7c29ja19tYXBfZnJlZSYjMzQ7XWAuCgpGaW5hbGx5LCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFdlIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIEhvbGQgb24uIERvZXMgdGhpcyAqYWxzbyogcmVxdWlyZSBgTkVUYD8gSSBrbm93IHRoYXQgYE5FVGAgaXMgcmVsZXZhbnQgYmVjYXVzZSBvZiBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIGJ1dCBkb2VzIGBCUEZfU1lTQ0FMTGAgKnJlcXVpcmUqIGBORVRgPyBMb29raW5nIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgLCBJIHNlZSBgc2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRgLiBBbmQsIGxvb2tpbmcgYXQgYG5ldC9jb3JlL01ha2VmaWxlYCwgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9gLiBPa2F5LiBBbmQgdGhlbiB0aGUgdG9wLWxldmVsIGBNYWtlZmlsZWAuIExvb2tzIGxpa2UgdGhlICplbnRpcmUqIGBuZXQvYCBkaXJlY3RvcnkgaXMgYnVpbHQgb25seSBpZiBgQ09ORklHX05FVD15YC4gU28gd2UgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMPXlgIGFuZCBgQ09ORklHX05FVD15YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXQvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7TWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgbmV0d29yay1yZWxhdGVkIGZlYXR1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldGAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGNlbnRyYWwgaHViIGZvciBuZXR3b3JrLXJlbGF0ZWQgc2V0dGluZ3MuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSYjMzk7cmUgY29ubmVjdGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBsb2dpY2FsIHN0cnVjdHVyZTogV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyB0aGlzIGZlYXR1cmUgaGF2ZT8gV2hhdCBvdGhlciBmZWF0dXJlcyBlbmFibGUgaXQ/IEFuZCBvZiBjb3Vyc2UsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgbmVzdGluZyBhbmQgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0LyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9ODI9bWVudSBcJiMzNDtOZXR3b3JraW5nIG9wdGlvbnNcJiMzNDtcbm5ldC9LY29uZmlnLTgzLVxubmV0L0tjb25maWc6ODQ6c291cmNlIFwmIzM0O25ldC9wYWNrZXQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6ODU6c291cmNlIFwmIzM0O25ldC9wc3AvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6ODY6c291cmNlIFwmIzM0O25ldC91bml4L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjg3OnNvdXJjZSBcJiMzNDtuZXQvdGxzL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjg4OnNvdXJjZSBcJiMzNDtuZXQveGZybS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo4OTpzb3VyY2UgXCYjMzQ7bmV0L2l1Y3YvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6OTA6c291cmNlIFwmIzM0O25ldC9zbWMvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctOTEtc291cmNlIFwmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo5Mjpzb3VyY2UgXCYjMzQ7bmV0L3hkcC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy05My1cbi0tXG5uZXQvS2NvbmZpZz0xMzY9aWYgSU5FVFxubmV0L0tjb25maWc6MTM3OnNvdXJjZSBcJiMzNDtuZXQvaXB2NC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoxMzg6c291cmNlIFwmIzM0O25ldC9pcHY2L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjEzOTpzb3VyY2UgXCYjMzQ7bmV0L25ldGxhYmVsL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjE0MDpzb3VyY2UgXCYjMzQ7bmV0L21wdGNwL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTE0MS1cbi0tXG5uZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbi0tXG5uZXQvS2NvbmZpZy0yNDYtXG5uZXQvS2NvbmZpZzoyNDc6c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjQ4OnNvdXJjZSBcJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjQ5OnNvdXJjZSBcJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjUwOnNvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNTEtXG5uZXQvS2NvbmZpZz0yNTI9ZW5kaWYgIyBpZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTI1My1cbm5ldC9LY29uZmlnOjI1NDpzb3VyY2UgXCYjMzQ7bmV0L3NjdHAvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjU1OnNvdXJjZSBcJiMzNDtuZXQvcmRzL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1Njpzb3VyY2UgXCYjMzQ7bmV0L3RpcGMvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjU3OnNvdXJjZSBcJiMzNDtuZXQvYXRtL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1ODpzb3VyY2UgXCYjMzQ7bmV0L2wydHAvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjU5OnNvdXJjZSBcJiMzNDtuZXQvODAyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2MDpzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNjE6c291cmNlIFwmIzM0O25ldC9kc2EvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjYyOnNvdXJjZSBcJiMzNDtuZXQvODAyMXEvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjYzOnNvdXJjZSBcJiMzNDtuZXQvbGxjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2NDpzb3VyY2UgXCYjMzQ7bmV0L3gyNS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNjU6c291cmNlIFwmIzM0O25ldC9sYXBiL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2Njpzb3VyY2UgXCYjMzQ7bmV0L3Bob25ldC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNjc6c291cmNlIFwmIzM0O25ldC82bG93cGFuL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2ODpzb3VyY2UgXCYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjY5OnNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI3MTpzb3VyY2UgXCYjMzQ7bmV0L2RjYi9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzI6c291cmNlIFwmIzM0O25ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjczOnNvdXJjZSBcJiMzNDtuZXQvYmF0bWFuLWFkdi9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzQ6c291cmNlIFwmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzU6c291cmNlIFwmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6Mjc2OnNvdXJjZSBcJiMzNDtuZXQvbmV0bGluay9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzc6c291cmNlIFwmIzM0O25ldC9tcGxzL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI3ODpzb3VyY2UgXCYjMzQ7bmV0L25zaC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzk6c291cmNlIFwmIzM0O25ldC9oc3IvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjgwOnNvdXJjZSBcJiMzNDtuZXQvc3dpdGNoZGV2L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI4MTpzb3VyY2UgXCYjMzQ7bmV0L2wzbWRldi9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyODI6c291cmNlIFwmIzM0O25ldC9xcnRyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI4Mzpzb3VyY2UgXCYjMzQ7bmV0L25jc2kvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjg0LVxuLS1cbm5ldC9LY29uZmlnPTQxND1lbmRtZW51ICMgTmV0d29ya2luZyBvcHRpb25zXG5uZXQvS2NvbmZpZy00MTUtXG5uZXQvS2NvbmZpZzo0MTY6c291cmNlIFwmIzM0O25ldC9jYW4vS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6NDE3OnNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQxODpzb3VyY2UgXCYjMzQ7bmV0L3J4cnBjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQxOTpzb3VyY2UgXCYjMzQ7bmV0L2tjbS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo0MjA6c291cmNlIFwmIzM0O25ldC9zdHJwYXJzZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6NDIxOnNvdXJjZSBcJiMzNDtuZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00MjItXG4tLVxubmV0L0tjb25maWc9NDMxPWlmIFdJUkVMRVNTXG5uZXQvS2NvbmZpZy00MzItXG5uZXQvS2NvbmZpZzo0MzM6c291cmNlIFwmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo0MzQ6c291cmNlIFwmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00MzUtXG5uZXQvS2NvbmZpZz00MzY9ZW5kaWYgIyBXSVJFTEVTU1xubmV0L0tjb25maWctNDM3LVxubmV0L0tjb25maWc6NDM4OnNvdXJjZSBcJiMzNDtuZXQvcmZraWxsL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQzOTpzb3VyY2UgXCYjMzQ7bmV0LzlwL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQ0MDpzb3VyY2UgXCYjMzQ7bmV0L2NlcGgvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6NDQxOnNvdXJjZSBcJiMzNDtuZXQvbmZjL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQ0Mjpzb3VyY2UgXCYjMzQ7bmV0L3BzYW1wbGUvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6NDQzOnNvdXJjZSBcJiMzNDtuZXQvaWZlL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTQ0NC1cbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc9NDI9Y29uZmlnIEJUX0JSRURSXG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTUxLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjUyOnNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnXCYjMzQ7XG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTMtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NTQ6c291cmNlIFwmIzM0O25ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnXCYjMzQ7XG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTUtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NTY6c291cmNlIFwmIzM0O25ldC9ibHVldG9vdGgvaGlkcC9LY29uZmlnXCYjMzQ7XG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTctXG4tLVxubmV0L2Nhbi9LY29uZmlnPTQ2PWNvbmZpZyBDQU5fR1dcbi0tXG5uZXQvY2FuL0tjb25maWctNTYtXG5uZXQvY2FuL0tjb25maWc6NTc6c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxuLS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc9MjE9Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yOC1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc6Mjk6c291cmNlIFwmIzM0O25ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZ1wmIzM0O1xubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTY2MD1lbmRtZW51XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjYyOnNvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2NjQ6c291cmNlIFwmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCYjMzQ7XG4tLVxubmV0L25mYy9LY29uZmlnPTE3PWNvbmZpZyBORkNfRElHSVRBTFxuLS1cbm5ldC9uZmMvS2NvbmZpZy0zMC1cbm5ldC9uZmMvS2NvbmZpZzozMTpzb3VyY2UgXCYjMzQ7bmV0L25mYy9uY2kvS2NvbmZpZ1wmIzM0O1xubmV0L25mYy9LY29uZmlnOjMyOnNvdXJjZSBcJiMzNDtuZXQvbmZjL2hjaS9LY29uZmlnXCYjMzQ7XG5uZXQvbmZjL0tjb25maWctMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODQyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydCBhbmQgdGhpcyBpcyB3aGF0IGdvZXMgdGhyb3VnaCBteSBoZWFkOgoKKipEaXZpbmcgaW50byB0aGUgTmV0IE1ha2VmaWxlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBgbmV0L01ha2VmaWxlYC4gUmlnaHQsIHRpbWUgdG8gZGlzc2VjdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHNwZWNpZmljIGNvbnRleHQ/IEFyZSB3ZSBkZWJ1Z2dpbmcgYSBidWlsZCBpc3N1ZSwgZXhwbG9yaW5nIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgZGVwZW5kZW5jaWVzLCBvciBqdXN0IGRvaW5nIGEgZ2VuZXJhbCBjb2RlIHJldmlldz8gVGhhdCYjMzk7bGwgZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiBkZXRhaWwgSSBuZWVkIHRvIGdvIGludG8uIFJlZ2FyZGxlc3MsIGBuZXQvYCBpcyB0eXBpY2FsbHkgd2hlcmUgdGhlIGxvd2VyLWxldmVsIG5ldHdvcmstcmVsYXRlZCBjb21wb25lbnRzIHJlc2lkZS4gVGhpcyBpcyB1c3VhbGx5IHRoZSBhcmVhIHRoYXQgZGVhbHMgd2l0aCBkcml2ZXJzLCBwcm90b2NvbHMgYW5kIHN5c3RlbSBjYWxscyBhdCBhIGxvdyBsZXZlbC4gSXTigJlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJJiMzOTtsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiBmb3IgdGhlIGNyaXRpY2FsIGVsZW1lbnRzOgoKKiAgICoqVGFyZ2V0czoqKiBXaGF0IGFyZSB0aGUgbWFpbiBidWlsZCB0YXJnZXRzIGRlZmluZWQ/IEFyZSB3ZSBidWlsZGluZyBzcGVjaWZpYyBtb2R1bGVzLCBsaWJyYXJpZXMsIG9yIHRoZSB3aG9sZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjaz8gVW5kZXJzdGFuZGluZyB0aGUgdGFyZ2V0cyBnaXZlcyBtZSB0aGUgc3RydWN0dXJlLgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW5jbHVkZSBmaWxlcywgb3RoZXIgbW9kdWxlcywgZXh0ZXJuYWwgbGlicmFyaWVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIERlcGVuZGVuY2llcyBhcmUgb2Z0ZW4gd2hlcmUgaXNzdWVzIGFyaXNlIGFuZCBhIGdvb2QgbWFrZWZpbGUgY2xlYXJseSBvdXRsaW5lcyB3aGF0IG5lZWRzIHRvIGJlIHByZXNlbnQgdG8gYWxsb3cgdGhlIG5ldHdvcmsgc3RhY2sgdG8gYmUgY29tcGlsZWQgYW5kIGxpbmtlZC4KKiAgICoqRmxhZ3MgYW5kIFZhcmlhYmxlczoqKiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IHZhcmlhYmxlcyBkZWZpbmluZyBjb21waWxlciBmbGFncyAoZS5nLiwgYC1JYCBmb3IgaW5jbHVkZSBwYXRocywgYC1EYCBmb3IgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLCBvcHRpbWl6YXRpb24gbGV2ZWxzKSwgbGlua2VyIGZsYWdzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3M/IEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlc2UgY2FuIGNhdXNlIG1ham9yIGhlYWRhY2hlcy4KKiAgICoqUnVsZXM6KiogSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoZSBydWxlcyB0byBzZWUgaG93IHRhcmdldHMgYXJlIGJ1aWx0IGFuZCBsaW5rZWQuIExvb2sgZm9yIGhvdyBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgdG9nZXRoZXIgYW5kIGlmIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIGFyZSBpbiBwbGFjZS4KCkkga25vdyBJIHdpbGwgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBkZWx2ZSBpbnRvIGFueSBjb25kaXRpb25hbCBibG9ja3MsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50IGFuZCB0aGUgbWFrZWZpbGUgbmVlZHMgdG8gZGVhbCB3aXRoIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBTbywgbGV04oCZcyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxuICAgNDpcdCNcbiAgIDU6XHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXHUwMDNlXG4gICA2Olx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cbiAgIDc6XHQjXG4gICA4Olx0XG4gICA5Olx0b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX0NPTVBBVClcdFx0JiM0Mzs9IGNvbXBhdC5vXG4gIDEyOlx0XG4gIDEzOlx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXG4gIDE0Olx0b2JqLSQoQ09ORklHX0xMQylcdFx0JiM0Mzs9IGxsYy9cbiAgMTU6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXG4gIDE2Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbiAgMTc6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG4gIDE4Olx0b2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiAgMTk6XHRvYmotJChDT05GSUdfWEZSTSlcdFx0JiM0Mzs9IHhmcm0vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VOSVgpXHRcdCYjNDM7PSB1bml4L1xuICAyMTpcdG9iai0kKENPTkZJR19JTkVUX1BTUClcdFx0JiM0Mzs9IHBzcC9cbiAgMjI6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGlwdjYvXG4gIDIzOlx0b2JqLSQoQ09ORklHX1BBQ0tFVClcdFx0JiM0Mzs9IHBhY2tldC9cbiAgMjQ6XHRvYmotJChDT05GSUdfTkVUX0tFWSlcdFx0JiM0Mzs9IGtleS9cbiAgMjU6XHRvYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xuICAyNjpcdG9iai0kKENPTkZJR19ORVRfREVWTElOSylcdCYjNDM7PSBkZXZsaW5rL1xuICAyNzpcdG9iai15XHRcdFx0XHQmIzQzOz0gZHNhL1xuICAyODpcdG9iai0kKENPTkZJR19YMjUpXHRcdCYjNDM7PSB4MjUvXG4gIDI5Olx0b2JqLSQoQ09ORklHX0xBUEIpXHRcdCYjNDM7PSBsYXBiL1xuICAzMDpcdG9iai0kKENPTkZJR19DQU4pXHRcdCYjNDM7PSBjYW4vXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JUKVx0XHQmIzQzOz0gYmx1ZXRvb3RoL1xuICAzMjpcdG9iai0kKENPTkZJR19TVU5SUEMpXHRcdCYjNDM7PSBzdW5ycGMvXG4gIDMzOlx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVx0XHQmIzQzOz0gcnhycGMvXG4gIDM0Olx0b2JqLSQoQ09ORklHX0FGX0tDTSlcdFx0JiM0Mzs9IGtjbS9cbiAgMzU6XHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcdCYjNDM7PSBzdHJwYXJzZXIvXG4gIDM2Olx0b2JqLSQoQ09ORklHX0FUTSlcdFx0JiM0Mzs9IGF0bS9cbiAgMzc6XHRvYmotJChDT05GSUdfTDJUUClcdFx0JiM0Mzs9IGwydHAvXG4gIDM4Olx0b2JqLSQoQ09ORklHX1BIT05FVClcdFx0JiM0Mzs9IHBob25ldC9cbiAgMzk6XHRpZm5lcSAoJChDT05GSUdfVkxBTl84MDIxUSksKVxuICA0MDpcdG9iai15XHRcdFx0XHQmIzQzOz0gODAyMXEvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgc29ja19tYXAub2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBzb2NrX21hcC5vYCBnZXRzIGJ1aWx0LCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gQlBGLiBJIHJlY2FsbCB0aGF0IHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUgaW5jbHVkZXMgdGhlIGBuZXQvYCBkaXJlY3Rvcnkgd2hlbiBgQ09ORklHX05FVD15YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoYXQmIzM5O3MgcmVxdWlyZWQuJiMzNDsgRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGBCUEZfU1lTQ0FMTGAmIzM5O3MgY29uZmlndXJhdGlvbi4gTG9va2luZyBhdCBga2VybmVsL2JwZi9LY29uZmlnYCwgSSBzZWUgaXQmIzM5O3MgYSBib29sIG9wdGlvbiB0aGF0IGFjdGl2YXRlcyB0aGUgYGJwZigpYCBzeXN0ZW0gY2FsbC4gSXQgKnNlbGVjdHMqIGEgZmV3IGRlcGVuZGVuY2llczogYEJQRmAsIGBJUlFfV09SS2AsIGBORUVEX1RBU0tTX1JDVWAsIGBUQVNLU19UUkFDRV9SQ1VgLCBgQklOQVJZX1BSSU5URmAsIGFuZCBjcml0aWNhbGx5LCBgTkVUX1NPQ0tfTVNHYCAqaWYqIGBORVRgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBmdXJ0aGVyIHRvIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IGBzb2NrX21hcC5vYCBpcyBidWlsdC4gQW5kIHRoZXJlIGl0IGlzOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub2AuIE9rYXksIHNvIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzICpkaXJlY3RseSogcmVzcG9uc2libGUgZm9yIGluY2x1ZGluZyBgc29ja19tYXAub2AuIFNvIHdlIG5lZWQgYm90aCBgQ09ORklHX05FVGAgKmFuZCogYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gZ2V0IGBzb2NrX21hcC5vYCB0byBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuCgpJJiMzOTttIGZlZWxpbmcgdGhvcm91Z2ggdG9kYXksIHNvIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgc291cmNlIGZpbGUgaXRzZWxmLCBgc29ja19tYXAuY2AsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIChgI2lmZGVmYCkgdGhhdCBtaWdodCBpbnRyb2R1Y2UgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGhpZGRlbiByZXF1aXJlbWVudHMgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MTQ3OD1zdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICoqKnBwcm9nLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ5Mi1cdFx0YnJlYWs7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE0OTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDk0LVx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzYwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgU29jayBNYXAgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uIGFuZC4uLml0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQmIzM5O3MgdXNpbmcgaXQuIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgc29ja19tYXBfb3BzYCBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCBvciwgbW9yZSBpbXBvcnRhbnRseSwgKnVzZWQqLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyB0aGluZyBiYWNrIHRvIGl0cyByb290LiBXaXRob3V0IHRoYXQsIEkmIzM5O20ganVzdCBwb2tpbmcgYXJvdW5kIGluIHRoZSBkYXJrLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHNlZSB3aGVyZSBgc29ja19tYXBfb3BzYCBpcyBkZWZpbmVkIGFuZCBjYWxsZWQuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBjbHVlcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE5PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEyMS0jaWZkZWYgQ09ORklHX0lORVRcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTIyOkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS01BUCwgc29ja19tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMjMtQlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgc29ja19oYXNoX29wcylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1CVEZfSURfTElTVF9TSU5HTEUoc29ja19tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfc3RhYilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMyOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgzMy1cdC5tYXBfbWV0YV9lcXVhbFx0XHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxOTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCUEYgU29ja21hcCBEZXBlbmRlbmN5KioKClJpZ2h0LCBva2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3QhIExvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgLCBzcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBkZXBlbmRlbmN5OgoKYGBgYwojaWZkZWYgQ09ORklHX0lORVQKQlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLTUFQLCBzb2NrX21hcF9vcHMpCkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS0hBU0gsIHNvY2tfaGFzaF9vcHMpCiNlbmRpZgpgYGAKClRoZSBkZWZpbml0aW9uIG9mIGBCUEZfTUFQX1RZUEVfU09DS01BUGAsIGFzIGV4cGVjdGVkLCBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0lORVRgLiBUaGlzIGNvbmZpcm1zIHRoYXQgc29ja21hcCBzdXBwb3J0IHJlbGllcyBvbiB0aGUgYENPTkZJR19JTkVUYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3MgYXJvdW5kIGxpbmVzIDExNS0xMzAgb2YgdGhhdCBmaWxlIHRvIG1ha2UgY2VydGFpbiB0aGlzIGlzIHRoZSBvbmx5IGRlcGVuZGVuY3kuIEl0JiMzOTtzIGdvb2QgdG8gaGF2ZSB0aGlzIGNvbmZpcm1lZCBzbyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQX0hBU0gsIGRldl9tYXBfaGFzaF9vcHMpXG4gMTE2Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TS19TVE9SQUdFLCBza19zdG9yYWdlX21hcF9vcHMpXG4gMTE3Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9DUFVNQVAsIGNwdV9tYXBfb3BzKVxuIDExODpcdCNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcbiAxMTk6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXG4gMTIwOlx0I2VuZGlmXG4gMTIxOlx0I2lmZGVmIENPTkZJR19JTkVUXG4gMTIyOlx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLTUFQLCBzb2NrX21hcF9vcHMpXG4gMTIzOlx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgc29ja19oYXNoX29wcylcbiAxMjQ6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVksIHJldXNlcG9ydF9hcnJheV9vcHMpXG4gMTI1Olx0I2VuZGlmXG4gMTI2Olx0I2VuZGlmXG4gMTI3Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9RVUVVRSwgcXVldWVfbWFwX29wcylcbiAxMjg6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NUQUNLLCBzdGFja19tYXBfb3BzKVxuIDEyOTpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKVxuIDEzMDpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RSVUNUX09QUywgYnBmX3N0cnVjdF9vcHNfbWFwX29wcylcbiAxMzE6XHQjZW5kaWZcbiAxMzI6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JJTkdCVUYsIHJpbmdidWZfbWFwX29wcylcbiAxMzM6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUiwgYmxvb21fZmlsdGVyX21hcF9vcHMpXG4gMTM0Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9VU0VSX1JJTkdCVUYsIHVzZXJfcmluZ2J1Zl9tYXBfb3BzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIEJQRiBUeXBlIERlZmluaXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBpbiBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgcHJvdGVjdGVkIGJ5IGAjaWZkZWYgQ09ORklHX0lORVRgLiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyDigJMgaXQmIzM5O3MgYmVjYXVzZSBzb2NrbWFwcyBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIGludGVybmV0IHByb3RvY29sIGhhbmRsaW5nLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUga2VybmVsIG9ubHkgbmVlZHMgdG8gZGVmaW5lIGFuZCBoYW5kbGUgdGhhdCBtYXAgdHlwZSBpZiB0aGUgc3lzdGVtIGlzIGFjdHVhbGx5IGNvbmZpZ3VyZWQgdG8gZGVhbCB3aXRoIHRoZSBpbnRlcm5ldCBzdGFjay4gTm8gcG9pbnQgaW4gYmxvYXQgb3RoZXJ3aXNlLgoKTXkgbmV4dCB0aG91Z2h0IGlzIGFib3V0IGxpbmUgMTI2IGFuZCB0aGUgYCNpZmRlZiBDT05GSUdfTkVUYC4gT2theSwgdGhhdCYjMzk7cyBhbm90aGVyIGltcG9ydGFudCBvbmUuIExldCBtZSBxdWlja2x5IHNjYW4gbGluZXMgMTAwLTExNi4gTG9va3MgbGlrZSBJJiMzOTttIHRyeWluZyB0byBzZWUgd2hhdCB0aGUgbmV0IGNvbmZpZ3VyYXRpb24gaXMgY29udHJvbGxpbmcgaGVyZSBhcyB0aGlzIGlzIGdvaW5nIHRvIGluZmx1ZW5jZSB0aGUgZmVhdHVyZXMgYXZhaWxhYmxlLgoKTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCwgaHRhYl9wZXJjcHVfbWFwX29wcylcbiAxMDE6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0xSVV9IQVNILCBodGFiX2xydV9tYXBfb3BzKVxuIDEwMjpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNILCBodGFiX2xydV9wZXJjcHVfbWFwX29wcylcbiAxMDM6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0xQTV9UUklFLCB0cmllX21hcF9vcHMpXG4gMTA0Olx0I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuIDEwNTpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RBQ0tfVFJBQ0UsIHN0YWNrX3RyYWNlX21hcF9vcHMpXG4gMTA2Olx0I2VuZGlmXG4gMTA3Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTLCBhcnJheV9vZl9tYXBzX21hcF9vcHMpXG4gMTA4Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFMsIGh0YWJfb2ZfbWFwc19tYXBfb3BzKVxuIDEwOTpcdCNpZmRlZiBDT05GSUdfQlBGX0xTTVxuIDExMDpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5PREVfU1RPUkFHRSwgaW5vZGVfc3RvcmFnZV9tYXBfb3BzKVxuIDExMTpcdCNlbmRpZlxuIDExMjpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfVEFTS19TVE9SQUdFLCB0YXNrX3N0b3JhZ2VfbWFwX29wcylcbiAxMTM6XHQjaWZkZWYgQ09ORklHX05FVFxuIDExNDpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQLCBkZXZfbWFwX29wcylcbiAxMTU6XHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNILCBkZXZfbWFwX2hhc2hfb3BzKVxuIDExNjpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU0tfU1RPUkFHRSwgc2tfc3RvcmFnZV9tYXBfb3BzKVxuIDExNzpcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcbiAxMTg6XHQjaWYgZGVmaW5lZChDT05GSUdfWERQX1NPQ0tFVFMpXG4gMTE5Olx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9YU0tNQVAsIHhza19tYXBfb3BzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU29ja21hcCBCUEYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCB0byBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCB0aGUgYHNvY2tfbWFwX2FsbG9jYCBmdW5jdGlvbi4gTGluZXMgMTEzIGFuZCAxMjEgYXJlIHRocm93aW5nIHVwIHNvbWUgY29uZGl0aW9uYWxzLiBTcGVjaWZpY2FsbHksIEkgc2VlIGAjaWZkZWYgQ09ORklHX05FVGAgb24gbGluZSAxMTMgYW5kIGAjaWZkZWYgQ09ORklHX0lORVRgIG9uIGxpbmUgMTIxLiBUaGF0IHRlbGxzIG1lIHJpZ2h0IGF3YXkgdGhhdCB0byBnZXQgd2hlcmUgSSBuZWVkIHRvIGJlLCBJJiMzOTttIGdvaW5nIHRvIHJlcXVpcmUgYSBmZXcgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGVuYWJsZWQuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgSSBuZWVkOgoKKiAgIGBDT05GSUdfQlBGX1NZU0NBTExgICh0aGF0JiMzOTtzIG9idmlvdXMsIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGIHN5c2NhbGxzKQoqICAgYENPTkZJR19ORVRgICh0aGF0JiMzOTtzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBmb3IgbmV0d29ya2luZyByZWxhdGVkIEJQRiBmZWF0dXJlcy4pCiogICBgQ09ORklHX0lORVRgIChJIG5lZWQgSVB2NCBzdXBwb3J0IHRvbyB0byByZWFjaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRoKS4KCk5vdywgdG8gc29saWRpZnkgdGhpcywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGlzIGFjdHVhbGx5IHVzZWQgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdGhyb3VnaCB0aGUgYGZpbmRfYW5kX2FsbG9jX21hcGAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHF1aWNrIGNoZWNrIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgdHJ1ZSBhbmQgdGhhdCBJIGNhbiByZWFjaCB0aGF0IGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9hbmRfYWxsb2NfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIEJQRiBNYXAgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyBCUEYgbWFwIHR5cGVzIGFuZCB0aGVpciBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGF0IHJ1bnRpbWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBkaXNwYXRjaGluZyBoYXBwZW5pbmc/JiMzNDsuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEFyZSB3ZSBsb29raW5nIGF0IGBicGZfbWFwX3R5cGVzYD8gT3IgcGVyaGFwcyBgYnBmX21hcF9vcHNgPyBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgKmhvdyogZGlmZmVyZW50IG1hcCB0eXBlcyBhcmUgYWN0dWFsbHkgKnVzZWQqLiBNeSBtZW50YWwgbWFwIG5lZWRzIHRvIGJlIGNsYXJpZmllZCwgYW5kIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4sIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9tYXBfdHlwZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz02OD1pbnQgc3lzY3RsX3VucHJpdmlsZWdlZF9icGZfZGlzYWJsZWQgX19yZWFkX21vc3RseSA9XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo3MTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNzItI2RlZmluZSBCUEZfUFJPR19UWVBFKF9pZCwgX25hbWUsIHByb2dfY3R4X3R5cGUsIGtlcm5fY3R4X3R5cGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzUtXHRtYXBfdHlwZSA9IGF0dHItXHUwMDNlbWFwX3R5cGU7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNDM2Olx0aWYgKG1hcF90eXBlIFx1MDAzZT0gQVJSQVlfU0laRShicGZfbWFwX3R5cGVzKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzNy1cdFx0YnBmX2xvZyhsb2csIFwmIzM0O0ludmFsaWQgbWFwX3R5cGUuXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDM5LVx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ0MDpcdG1hcF90eXBlID0gYXJyYXlfaW5kZXhfbm9zcGVjKG1hcF90eXBlLCBBUlJBWV9TSVpFKGJwZl9tYXBfdHlwZXMpKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0NDE6XHRvcHMgPSBicGZfbWFwX3R5cGVzW21hcF90eXBlXTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0NDItXHRpZiAoIW9wcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMDQKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTb2NrbWFwIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYHNvY2tfbWFwX2FsbG9jYCwgYW5kIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgbWFwX2NyZWF0ZV9hbGxvY2Agd2hpY2ggaXMgcmVhY2hlZCB0aHJvdWdoIHRoZSBgYnBmKEJQRl9NQVBfQ1JFQVRFLCAuLi4pYCBzeXNjYWxsIOKAkyBjbGFzc2ljIEJQRiBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjYWxsZWQgd2hlbiB0aGUgYGF0dHItJmd0O21hcF90eXBlYCBpcyBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgLiBBbmQsIGFjY29yZGluZyB0byBteSBzeW1ib2xzIGNoZWNrLCBgc29ja19tYXBfYWxsb2NgIGlzIHRoZSAqZXhhY3QqIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGhlIGNvbW1pdCBhbHNvIHRvdWNoZXMgYHNvY2tfbWFwX2ZyZWVgLCBzaW5jZSBvYnZpb3VzbHkgZnJlZWluZyB0aGUgc29ja21hcCBoaW5nZXMgb24gZW50cmllcy4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkbyBJIGluY2x1ZGUganVzdCBgc29ja19tYXBfYWxsb2NgIG9yIGJvdGggYHNvY2tfbWFwX2FsbG9jYCBhbmQgYHNvY2tfbWFwX2ZyZWVgPyBMZXQmIzM5O3MgY29uc3VsdCB0aGUgZ3VpZGVsaW5lcyAoU2VjdGlvbiA0KS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbGlzdCBmdW5jdGlvbnMgdGhhdCAqc3BlY2lmaWNhbGx5KiBpbXBsZW1lbnQgdGhlIGFsdGVyZWQgbG9naWMuIERlZmluaXRlbHkgYHNvY2tfbWFwX2FsbG9jYCwgdGhhdCYjMzk7cyB0aGUgb25lIHdpdGggdGhlIGRpcmVjdCBjaGFuZ2UuIEFuZCB3aGlsZSBgc29ja19tYXBfZnJlZWAgaXNuJiMzOTt0IGRpcmVjdGx5ICptb2RpZmllZCosIGl0JiMzOTtzIGNyaXRpY2FsIHRvIHRoZSBzb2NrbWFwJiMzOTtzIGxpZmVjeWNsZSwgc28sIGxldCYjMzk7cyBpbmNsdWRlIGJvdGguIFRoYXQmIzM5O3MgdGhlIGJlc3QgYW5kIG1vc3Qgc3BlY2lmaWMgYXBwcm9hY2guCgpOb3cgZm9yIHRoZSBFbmFibGVDb25maWdzLiBUaGUgcmVsZXZhbnQgS2NvbmZpZyBzeW1ib2xzIHNlZW0gdG8gYmUgYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAuIEkgcXVpY2tseSB2ZXJpZmllZCB0aGF0IGBJTkVUYCBkb2VzLCBpbiBmYWN0LCBkZXBlbmQgb24gYE5FVGAsIGFuZCB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFNvLCBgWyYjMzQ7QlBGX1NZU0NBTEwmIzM0OywgJiMzNDtORVQmIzM0OywgJiMzNDtJTkVUJiMzNDtdYCBpdCBpcy4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcuIExldCYjMzk7cyBtYWtlIGl0IGNvbmNpc2U6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIGNoZWNrIChgYXR0ci0mZ3Q7bWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYYCkgd2l0aGluIGBzb2NrX21hcF9hbGxvYygpYCBmb3Igc29ja21hcCBCUEYgbWFwcy4gVGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBwcm9ibGVtcyB0aGF0IGNhbiBvY2N1ciBkdXJpbmcgbWFwIGFsbG9jYXRpb24sIGl0ZXJhdGlvbiwgYW5kIGZyZWVpbmcuIFRoZSBjaGFuZ2VkIGV4ZWN1dGFibGUgY29kZSBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBicGYoQlBGX01BUF9DUkVBVEUsIC4uLilgIHN5c2NhbGwsIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSBjb3JlLiBJIHRoaW5rIHRoYXQgY292ZXJzIGl0LiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja19tYXBfYWxsb2MoKSBpbiBuZXQvY29yZS9zb2NrX21hcC5jIGJ5IGFkZGluZyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIChyZWplY3RpbmcgdmFsdWVzIFx1MDAzZSBJTlRfTUFYKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfQ1JFQVRFIGFuZCBCUEZfTUFQX1RZUEVfU09DS01BUCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgdGhpcyBwYXRoIGlzIHZhbHVhYmxlIHRvIHZlcmlmeSB2YWxpZGF0aW9uIGJvdW5kYXJpZXMsIGVycm9yIGhhbmRsaW5nLCBhbmQgbGlmZWN5Y2xlIGJlaGF2aW9yIG9mIEJQRiBzb2NrbWFwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tfbWFwX2FsbG9jKCkgaW4gbmV0L2NvcmUvc29ja19tYXAuYyBieSBhZGRpbmcgYW4gdXBwZXItYm91bmQgY2hlY2sgb24gYXR0ci1cdTAwM2VtYXhfZW50cmllcyAocmVqZWN0aW5nIHZhbHVlcyBcdTAwM2UgSU5UX01BWCkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQX0NSRUFURSBhbmQgQlBGX01BUF9UWVBFX1NPQ0tNQVAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoaXMgcGF0aCBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdmFsaWRhdGlvbiBib3VuZGFyaWVzLCBlcnJvciBoYW5kbGluZywgYW5kIGxpZmVjeWNsZSBiZWhhdmlvciBvZiBCUEYgc29ja21hcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGlucHV0IHZhbGlkYXRpb24gY2hlY2sgKGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYCkgaW4gYHNvY2tfbWFwX2FsbG9jKClgIHRvIHJlamVjdCBtYXAgY3JlYXRpb24gd2hlbiBgbWF4X2VudHJpZXNgIGV4Y2VlZHMgYElOVF9NQVhgLiBUaGlzIHByZXZlbnRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGUuZy4gaW4gYHNvY2tfbWFwX2ZyZWUoKWAgd2hlcmUgYSBzaWduZWQgYGludCBpYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbWFwIGVudHJpZXMpLiBcblxuU3VjaCBidWdzIChpbnRlZ2VyIG92ZXJmbG93LCB1bmRlZmluZWQgYmVoYXZpb3IsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgc3RyaWN0bHkgd2l0aGluIHRoZSBzY29wZSBvZiBVQlNBTiBhbmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIGtlcm5lbCBicmFuY2hpbmcsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NGJiZWFmN2I1MWEyMzNkNTk4NDllYmM1ZTg2OTZmODg0MzZiZWVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDg6NTY6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuYwppbmRleCBjYTQ5YmM3Zjg2ODdjLi4zOGRmODQyODQzMjg5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKQEAgLTQxLDYgJiM0Mzs0MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJc3RydWN0IGJwZl9zdGFiICpzdGFiOwogCiAJaWYgKGF0dHItJmd0O21heF9lbnRyaWVzID09IDAgfHwKJiM0MzsJICAgIGF0dHItJmd0O21heF9lbnRyaWVzICZndDsgSU5UX01BWCB8fAogCSAgICBhdHRyLSZndDtrZXlfc2l6ZSAgICAhPSA0IHx8CiAJICAgIChhdHRyLSZndDt2YWx1ZV9zaXplICE9IHNpemVvZih1MzIpICZhbXA7JmFtcDsKIAkgICAgIGF0dHItJmd0O3ZhbHVlX3NpemUgIT0gc2l6ZW9mKHU2NCkpIHx8CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBTb2NrZXQgTWFwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIHRoZSBkaWZmLCBmb2N1c2luZyBvbiB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgYW4gYWRkaXRpb24gaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiAgU3BlY2lmaWNhbGx5LCBJIG5vdGljZSBhIG5ldyBjaGVjayByZWxhdGVkIHRvIGBtYXhfZW50cmllc2Agd2l0aGluIHRoZSBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uLiBUaGUgY29kZSBub3cgaW5jbHVkZXMgYSBib3VuZHMgY2hlY2s6IGBhdHRyLSZndDttYXhfZW50cmllcyAmZ3Q7IElOVF9NQVhgLiBUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNvIEkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhcm91bmQgbGluZSA0MS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW4gdGhlIGFsbG9jYXRpb24gcGF0aCBmb3IgYSBzb2NrZXQgbWFwLCBhbmQgdGhpcyBjaGVjayBpcyBsaWtlbHkgYWltZWQgYXQgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93IGlzc3Vlcy4gQSBgbWF4X2VudHJpZXNgIG9mIDAgaXMgY2hlY2tlZCBlYXJsaWVyLiBJdCBpcyBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyB0byBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUuIAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0ICogQSBzaW5nbGUgZ2xvYmFsIG11dGV4IGxvY2sgaXMgdXNlZCBzaW5jZSBpdCBpcyBleHBlY3RlZCBjb250ZW50aW9uIGlzIGxvdy5cbiAgMzE6XHQgKi9cbiAgMzI6XHRzdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xuICAzMzpcdFxuICAzNDpcdHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuICAzNTpcdFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbiAgMzY6XHRcdFx0XHRcdHUzMiB3aGljaCk7XG4gIDM3Olx0c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiAgNDA6XHR7XG4gIDQxOlx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWI7XG4gIDQyOlx0XG4gIDQzOlx0XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG4gIDQ0Olx0XHQgICAgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWCB8fFxuICA0NTpcdFx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuICA0NjpcdFx0ICAgIChhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHUzMikgXHUwMDI2XHUwMDI2XG4gIDQ3Olx0XHQgICAgIGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHxcbiAgNDg6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgflNPQ0tfQ1JFQVRFX0ZMQUdfTUFTSylcbiAgNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gIDUwOlx0XG4gIDUxOlx0XHRzdGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqc3RhYiksIE5VTUFfTk9fTk9ERSk7XG4gIDUyOlx0XHRpZiAoIXN0YWIpXG4gIDUzOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuICA1NDpcdFxuICA1NTpcdFx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZzdGFiLVx1MDAzZW1hcCwgYXR0cik7XG4gIDU2Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzdGFiLVx1MDAzZWxvY2spO1xuICA1NzpcdFxuICA1ODpcdFx0c3RhYi1cdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMgKlxuICA1OTpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcbiAgNjA6XHRcdFx0XHRcdCAgICAgICBzdGFiLVx1MDAzZW1hcC5udW1hX25vZGUpO1xuICA2MTpcdFx0aWYgKCFzdGFiLVx1MDAzZXNrcykge1xuICA2MjpcdFx0XHRicGZfbWFwX2FyZWFfZnJlZShzdGFiKTtcbiAgNjM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gIDY0Olx0XHR9XG4gIDY1Olx0XG4gIDY2Olx0XHRyZXR1cm4gXHUwMDI2c3RhYi1cdTAwM2VtYXA7XG4gIDY3Olx0fVxuICA2ODpcdFxuICA2OTpcdGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuICA3MDpcdHtcbiAgNzE6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gIDcyOlx0XHRpbnQgcmV0O1xuICA3MzpcdFxuICA3NDpcdFx0aWYgKGF0dHItXHUwMDNlYXR0YWNoX2ZsYWdzIHx8IGF0dHItXHUwMDNlcmVwbGFjZV9icGZfZmQpXG4gIDc1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA3NjpcdFxuICA3NzpcdFx0Q0xBU1MoZmQsIGYpKGF0dHItXHUwMDNldGFyZ2V0X2ZkKTtcbiAgNzg6XHRcdG1hcCA9IF9fYnBmX21hcF9nZXQoZik7XG4gIDc5Olx0XHRpZiAoSVNfRVJSKG1hcCkpXG4gIDgwOlx0XHRcdHJldHVybiBQVFJfRVJSKG1hcCk7XG4gIDgxOlx0XHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuICA4MjpcdFx0cmV0ID0gc29ja19tYXBfcHJvZ191cGRhdGUobWFwLCBwcm9nLCBOVUxMLCBOVUxMLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKTtcbiAgODM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbiAgODQ6XHRcdHJldHVybiByZXQ7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdGludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxuICA4ODpcdHtcbiAgODk6XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hlY2s6IGBhdHRyLSZndDttYXhfZW50cmllcyAmZ3Q7IElOVF9NQVhgLiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuIFdoeSB3YXMgdGhpcyBjb25kaXRpb24gaW50cm9kdWNlZD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8KCk15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGhpc3RvcnkuIEkmIzM5O2xsIHJlYWNoIGZvciBgZ2l0IGxvZ2Agb3IgYGdyZXBgIHRvIHNlYXJjaCBmb3IgcmVsYXRlZCBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdXNlcyBvZiBgc29ja19tYXBfYWxsb2NgIG9yIGBzb2NrX2hhc2hfYWxsb2NgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHNvbWUgY2x1ZXMuIEkmIzM5O20gaG9waW5nIHRvIHVuY292ZXIgc2ltaWxhciBjaGVja3MgaW4gdGhhdCBhcmVhIG9yIHVuZGVyc3RhbmQgdGhlIHByb2JsZW0gdGhpcyB3YXMgbWVhbnQgdG8gYWRkcmVzcy4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY2hhbmdlcyB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBiYWNrZ3JvdW5kLCBhbGxvd2luZyBtZSB0byBmdWxseSBncmFzcCB3aHkgdGhpcyB1cHBlciBib3VuZCBjb25zdHJhaW50IG9uIGBtYXhfZW50cmllc2Agd2FzIGRlZW1lZCBuZWNlc3NhcnkuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIG9yaWdpbmFsIGJ1Zy9saW1pdGF0aW9uIHRoaXMgZml4IHdhcyBkZXNpZ25lZCB0byByZXNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zNz1zdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM5OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXHQubWFwX21ldGFfZXF1YWxcdFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNDpcdC5tYXBfYWxsb2NcdFx0PSBzb2NrX21hcF9hbGxvYyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM1LVx0Lm1hcF9mcmVlXHRcdD0gc29ja19tYXBfZnJlZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBzb2NrX21hcGAgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBmb2N1c2luZyBvbiBob3cgYG1heF9lbnRyaWVzYCBhbmQgdGhlIGBrZXlgIGFyZSBtYW5hZ2VkLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgc3RhcnQgZ3JlcHBpbmcgZm9yIGBzb2NrX21hcF9gLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBwYXR0ZXJucyBlbWVyZ2UgaW4gaXRzIHVzYWdlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCB1bmNvdmVyIHRoZSByZWxldmFudCBwYXJ0cyBJIG5lZWQgdG8gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfbWFwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU5NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2NvcmUvc29ja19tYXAuYz0zMj1zdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1LVx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzYtXHRcdFx0XHR1MzIgd2hpY2gpO1xubmV0L2NvcmUvc29ja19tYXAuYzozNzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM5OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4LVxubmV0L2NvcmUvc29ja19tYXAuYzo2OTppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODEtXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzo4MjpcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cdTAwM2VhdHRhY2hfdHlwZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjg3OmludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKVxubmV0L2NvcmUvc29ja19tYXAuYy04OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTAtXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMTE6XHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMTItXHRtdXRleF91bmxvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjExODpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19hY3F1aXJlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE5LVx0X19hY3F1aXJlcyhcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI0LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMjU6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNi1cdF9fcmVsZWFzZXMoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEzMS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTMyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2FkZF9saW5rKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTEzMy1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2tfbGluayAqbGluayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQzOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbF9saW5rKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ0LVx0XHRcdCAgICAgIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHZvaWQgKmxpbmtfcmF3KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyLVx0XHRcdHN0cnVjdCBicGZfbWFwICptYXAgPSBsaW5rLVx1MDAzZW1hcDtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUzOlx0XHRcdHN0cnVjdCBza19wc29ja19wcm9ncyAqcHJvZ3MgPSBzb2NrX21hcF9wcm9ncyhtYXApO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNTQtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzktXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4MDpzdGF0aWMgdm9pZCBzb2NrX21hcF91bnJlZihzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmxpbmtfcmF3KVxubmV0L2NvcmUvc29ja19tYXAuYy0xODEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0LVx0aWYgKGxpa2VseShwc29jaykpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg1Olx0XHRzb2NrX21hcF9kZWxfbGluayhzaywgcHNvY2ssIGxpbmtfcmF3KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2LVx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4OS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkwOnN0YXRpYyBpbnQgc29ja19tYXBfaW5pdF9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5ODpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrICpzb2NrX21hcF9wc29ja19nZXRfY2hlY2tlZChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0yMDQtXHRpZiAocHNvY2spIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MjA1Olx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VjbG9zZSAhPSBzb2NrX21hcF9jbG9zZSkge1xubmV0L2NvcmUvc29ja19tYXAuYy0yMDYtXHRcdFx0cHNvY2sgPSBFUlJfUFRSKC1FQlVTWSk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0yMTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjIxODpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0yMTkte1xubmV0L2NvcmUvc29ja19tYXAuYzoyMjA6XHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjIxLVx0c3RydWN0IGJwZl9wcm9nICpzdHJlYW1fdmVyZGljdCA9IE5VTEw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0yNjEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjI2MjpcdHBzb2NrID0gc29ja19tYXBfcHNvY2tfZ2V0X2NoZWNrZWQoc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0yNjMtXHRpZiAoSVNfRVJSKHBzb2NrKSkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjk4LVx0ICovXG5uZXQvY29yZS9zb2NrX21hcC5jOjI5OTpcdHJldCA9IHNvY2tfbWFwX2luaXRfcHJvdG8oc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzAwLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzM5LVxubmV0L2NvcmUvc29ja19tYXAuYzozNDA6c3RhdGljIHZvaWQgc29ja19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxubmV0L2NvcmUvc29ja19tYXAuYy0zNDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzU4LVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzU5Olx0XHRcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zNjAtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzItXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3MzpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZWxlYXNlX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3NC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzctXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3ODpzdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg5OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zOTAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkyLVxubmV0L2NvcmUvc29ja19tYXAuYzozOTM6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM5NC1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00MDAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwMTpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwMi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00MDctXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwODpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA5LVx0aWYgKCFzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQxNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDE2OnN0YXRpYyBpbnQgX19zb2NrX21hcF9kZWxldGUoc3RydWN0IGJwZl9zdGFiICpzdGFiLCBzdHJ1Y3Qgc29jayAqc2tfdGVzdCxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDE3LVx0XHRcdCAgICAgc3RydWN0IHNvY2sgKipwc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00MjYtXHRpZiAobGlrZWx5KHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDI3Olx0XHRzb2NrX21hcF91bnJlZihzaywgcHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDI4LVx0ZWxzZVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM0LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MzU6c3RhdGljIHZvaWQgc29ja19tYXBfZGVsZXRlX2Zyb21fbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzNi1cdFx0XHRcdCAgICAgIHZvaWQgKmxpbmtfcmF3KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0NDA6XHRfX3NvY2tfbWFwX2RlbGV0ZShzdGFiLCBzaywgbGlua19yYXcpO1xubmV0L2NvcmUvc29ja19tYXAuYy00NDEtfVxubmV0L2NvcmUvc29ja19tYXAuYy00NDItXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0MzpzdGF0aWMgbG9uZyBzb2NrX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0NC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00NTItXHRwc2sgPSBcdTAwMjZzdGFiLVx1MDAzZXNrc1tpXTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDUzOlx0cmV0dXJuIF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIE5VTEwsIHBzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1NC19XG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDU2OnN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDU3LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ3MC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDcxOnN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxubmV0L2NvcmUvc29ja19tYXAuYy00NzItXHRcdFx0XHQgIHN0cnVjdCBzb2NrICpzaywgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDg5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0OTA6XHRyZXQgPSBzb2NrX21hcF9saW5rKG1hcCwgc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy00OTEtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA2LVxubmV0L2NvcmUvc29ja19tYXAuYzo1MDc6XHRzb2NrX21hcF9hZGRfbGluayhwc29jaywgbGluaywgbWFwLCBcdTAwMjZzdGFiLVx1MDAzZXNrc1tpZHhdKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA4LVx0c3RhYi1cdTAwM2Vza3NbaWR4XSA9IHNrO1xubmV0L2NvcmUvc29ja19tYXAuYy01MDktXHRpZiAob3NrKVxubmV0L2NvcmUvc29ja19tYXAuYzo1MTA6XHRcdHNvY2tfbWFwX3VucmVmKG9zaywgXHUwMDI2c3RhYi1cdTAwM2Vza3NbaWR4XSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTUxMS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnN0YWItXHUwMDNlbG9jayk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01MjEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjUyMjpzdGF0aWMgYm9vbCBzb2NrX21hcF9vcF9va2F5KGNvbnN0IHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqb3BzKVxubmV0L2NvcmUvc29ja19tYXAuYy01MjMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTI4LVxubmV0L2NvcmUvc29ja19tYXAuYzo1Mjk6c3RhdGljIGJvb2wgc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzMC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01MzYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjUzNzpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19pc19zdWl0YWJsZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzOC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NDEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjU0MjpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQzLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1Nj1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU5OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTYwLVx0XHRcdCAgICAgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgxLVx0fVxubmV0L2NvcmUvc29ja19tYXAuYzo1ODI6XHRpZiAoIXNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNrKSkge1xubmV0L2NvcmUvc29ja19tYXAuYy01ODMtXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTg2LVxubmV0L2NvcmUvc29ja19tYXAuYzo1ODc6XHRzb2NrX21hcF9za19hY3F1aXJlKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg4Olx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTg5LVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkwLVx0ZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxubmV0L2NvcmUvc29ja19tYXAuYzo1OTE6XHRcdHJldCA9IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc2ssIGZsYWdzKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTkyLVx0ZWxzZVxubmV0L2NvcmUvc29ja19tYXAuYy01OTMtXHRcdHJldCA9IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKG1hcCwga2V5LCBzaywgZmxhZ3MpO1xubmV0L2NvcmUvc29ja19tYXAuYzo1OTQ6XHRzb2NrX21hcF9za19yZWxlYXNlKHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk1LW91dDpcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjAwOnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAxLVx0XHRcdFx0IHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MDgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjYwOTpcdGlmICghc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc2spKVxubmV0L2NvcmUvc29ja19tYXAuYy02MTAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxMy1cdGJoX2xvY2tfc29jayhzayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjYxNDpcdGlmICghc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNS1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG5uZXQvY29yZS9zb2NrX21hcC5jLTYxNi1cdGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUClcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjE3Olx0XHRyZXQgPSBzb2NrX21hcF91cGRhdGVfY29tbW9uKG1hcCwgKih1MzIgKilrZXksIHNrLCBmbGFncyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTYxOC1cdGVsc2Vcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTYyNC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjI1OkJQRl9DQUxMXzQoYnBmX3NvY2tfbWFwX3VwZGF0ZSwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIHNvcHMsXG5uZXQvY29yZS9zb2NrX21hcC5jLTYyNi1cdCAgIHN0cnVjdCBicGZfbWFwICosIG1hcCwgdm9pZCAqLCBrZXksIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MjktXG5uZXQvY29yZS9zb2NrX21hcC5jOjYzMDpcdGlmIChsaWtlbHkoc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc29wcy1cdTAwM2VzaykgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9zb2NrX21hcC5jOjYzMTpcdFx0ICAgc29ja19tYXBfb3Bfb2theShzb3BzKSkpXG5uZXQvY29yZS9zb2NrX21hcC5jOjYzMjpcdFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc29wcy1cdTAwM2Vzayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjMzLVx0XHRcdFx0XHQgICAgICBmbGFncyk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02MzYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjYzNzpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfbWFwX3VwZGF0ZV9wcm90byA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjM4Olx0LmZ1bmNcdFx0PSBicGZfc29ja19tYXBfdXBkYXRlLFxubmV0L2NvcmUvc29ja19tYXAuYy02MzktXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDg9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NjpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NzpcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjU4LVx0XHRyZXR1cm4gU0tfRFJPUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3Nj1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4My1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg0Olx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg1Olx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxubmV0L2NvcmUvc29ja19tYXAuYy02ODYtXHRcdHJldHVybiBTS19EUk9QO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9Njk3PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbXNnX3JlZGlyZWN0X21hcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTcwNi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzA3OnN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcwOC1cdHN0cnVjdCBicGZfbWFwICptYXA7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz03MjA9REVGSU5FX0JQRl9JVEVSX0ZVTkMoc29ja21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MjMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNDpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI1LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzI5Olx0aW5mby1cdTAwM2VzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0oaW5mby1cdTAwM2VtYXAsIGluZm8tXHUwMDNlaW5kZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYy03MzAtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MzQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjczNTpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM2LVx0X19hY3F1aXJlcyhyY3UpXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNy17XG5uZXQvY29yZS9zb2NrX21hcC5jOjczODpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2NvcmUvc29ja19tYXAuYy03MzktXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03NDItXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0MzpcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0b3AgKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ0LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2NvcmUvc29ja19tYXAuYzo3NDU6XHRyZXR1cm4gc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKGluZm8pO1xubmV0L2NvcmUvc29ja19tYXAuYy03NDYtfVxubmV0L2NvcmUvc29ja19tYXAuYy03NDctXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxubmV0L2NvcmUvc29ja19tYXAuYy03NDktXHRfX211c3RfaG9sZChyY3UpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1MC17XG5uZXQvY29yZS9zb2NrX21hcC5jOjc1MTpcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xubmV0L2NvcmUvc29ja19tYXAuYy03NTItXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03NTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjc1NjpcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTc1Ny19XG5uZXQvY29yZS9zb2NrX21hcC5jLTc1OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzU5OnN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc2MC1cdF9fbXVzdF9ob2xkKHJjdSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzYxLXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzYyOlx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG5uZXQvY29yZS9zb2NrX21hcC5jLTc2My1cdHN0cnVjdCBicGZfaXRlcl9fc29ja21hcCBjdHggPSB7fTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzgyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvc29ja19tYXAuYy03ODMtXHRfX3JlbGVhc2VzKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4NS1cdGlmICghdilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzg2Olx0XHQodm9pZClzb2NrX21hcF9zZXFfc2hvdyhzZXEsIE5VTEwpO1xubmV0L2NvcmUvc29ja19tYXAuYy03ODctXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4ODpcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0YXJ0ICovXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzkxLVxubmV0L2NvcmUvc29ja19tYXAuYzo3OTI6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzb2NrX21hcF9zZXFfb3BzID0ge1xubmV0L2NvcmUvc29ja19tYXAuYzo3OTM6XHQuc3RhcnRcdD0gc29ja19tYXBfc2VxX3N0YXJ0LFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTQ6XHQubmV4dFx0PSBzb2NrX21hcF9zZXFfbmV4dCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzk1Olx0LnN0b3BcdD0gc29ja19tYXBfc2VxX3N0b3AsXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5NjpcdC5zaG93XHQ9IHNvY2tfbWFwX3NlcV9zaG93LFxubmV0L2NvcmUvc29ja19tYXAuYy03OTctfTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk4LVxubmV0L2NvcmUvc29ja19tYXAuYzo3OTk6c3RhdGljIGludCBzb2NrX21hcF9pbml0X3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAwLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAxLXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODAyOlx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gcHJpdl9kYXRhO1xubmV0L2NvcmUvc29ja19tYXAuYy04MDMtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MDgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjgwOTpzdGF0aWMgdm9pZCBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODEwLXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODExOlx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gcHJpdl9kYXRhO1xubmV0L2NvcmUvc29ja19tYXAuYy04MTItXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MTUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxNjpzdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxubmV0L2NvcmUvc29ja19tYXAuYy04MTcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIzLVxubmV0L2NvcmUvc29ja19tYXAuYzo4MjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBzb2NrX21hcF9pdGVyX3NlcV9pbmZvID0ge1xubmV0L2NvcmUvc29ja19tYXAuYzo4MjU6XHQuc2VxX29wc1x0XHQ9IFx1MDAyNnNvY2tfbWFwX3NlcV9vcHMsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyNjpcdC5pbml0X3NlcV9wcml2YXRlXHQ9IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyNzpcdC5maW5pX3NlcV9wcml2YXRlXHQ9IHNvY2tfbWFwX2Zpbmlfc2VxX3ByaXZhdGUsXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyODpcdC5zZXFfcHJpdl9zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyksXG5uZXQvY29yZS9zb2NrX21hcC5jLTgyOS19O1xubmV0L2NvcmUvc29ja19tYXAuYy04MzAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzMTpCVEZfSURfTElTVF9TSU5HTEUoc29ja19tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfc3RhYilcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMyOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgzMy1cdC5tYXBfbWV0YV9lcXVhbFx0XHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM0Olx0Lm1hcF9hbGxvY1x0XHQ9IHNvY2tfbWFwX2FsbG9jLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzU6XHQubWFwX2ZyZWVcdFx0PSBzb2NrX21hcF9mcmVlLFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XHQubWFwX2dldF9uZXh0X2tleVx0PSBzb2NrX21hcF9nZXRfbmV4dF9rZXksXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mzg6XHQubWFwX3VwZGF0ZV9lbGVtXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mzk6XHQubWFwX2RlbGV0ZV9lbGVtXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDA6XHQubWFwX2xvb2t1cF9lbGVtXHQ9IHNvY2tfbWFwX2xvb2t1cCxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQxOlx0Lm1hcF9yZWxlYXNlX3VyZWZcdD0gc29ja19tYXBfcmVsZWFzZV9wcm9ncyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODQyLVx0Lm1hcF9jaGVja19idGZcdFx0PSBtYXBfY2hlY2tfbm9fYnRmLFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDM6XHQubWFwX21lbV91c2FnZVx0XHQ9IHNvY2tfbWFwX21lbV91c2FnZSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODQ0Olx0Lm1hcF9idGZfaWRcdFx0PSBcdTAwMjZzb2NrX21hcF9idGZfaWRzWzBdLFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDU6XHQuaXRlcl9zZXFfaW5mb1x0XHQ9IFx1MDAyNnNvY2tfbWFwX2l0ZXJfc2VxX2luZm8sXG5uZXQvY29yZS9zb2NrX21hcC5jLTg0Ni19O1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTE5PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9kZWxldGVfZnJvbV9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTkzNy1cdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZlbGVtLVx1MDAzZW5vZGUpO1xubmV0L2NvcmUvc29ja19tYXAuYzo5Mzg6XHRcdHNvY2tfbWFwX3VucmVmKGVsZW0tXHUwMDNlc2ssIGVsZW0pO1xubmV0L2NvcmUvc29ja19tYXAuYy05MzktXHRcdHNvY2tfaGFzaF9mcmVlX2VsZW0oaHRhYiwgZWxlbSk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05NDQ9c3RhdGljIGxvbmcgc29ja19oYXNoX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTk1OC1cdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZlbGVtLVx1MDAzZW5vZGUpO1xubmV0L2NvcmUvc29ja19tYXAuYzo5NTk6XHRcdHNvY2tfbWFwX3VucmVmKGVsZW0tXHUwMDNlc2ssIGVsZW0pO1xubmV0L2NvcmUvc29ja19tYXAuYy05NjAtXHRcdHNvY2tfaGFzaF9mcmVlX2VsZW0oaHRhYiwgZWxlbSk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05OTQ9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDEyLVxubmV0L2NvcmUvc29ja19tYXAuYzoxMDEzOlx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAxNC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDM4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMDM5Olx0c29ja19tYXBfYWRkX2xpbmsocHNvY2ssIGxpbmssIG1hcCwgZWxlbV9uZXcpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMDQwLVx0LyogQWRkIG5ldyBlbGVtZW50IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDQ1LVx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmVsZW0tXHUwMDNlbm9kZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjEwNDY6XHRcdHNvY2tfbWFwX3VucmVmKGVsZW0tXHUwMDNlc2ssIGVsZW0pO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMDQ3LVx0XHRzb2NrX2hhc2hfZnJlZV9lbGVtKGh0YWIsIGVsZW0pO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTE0Nz1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE4My1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjExODQ6XHRcdFx0c29ja19tYXBfdW5yZWYoZWxlbS1cdTAwM2VzaywgZWxlbSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExODUtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjMyPUJQRl9DQUxMXzQoYnBmX3NvY2tfaGFzaF91cGRhdGUsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBzb3BzLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIzNi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIzNzpcdGlmIChsaWtlbHkoc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc29wcy1cdTAwM2VzaykgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMzg6XHRcdCAgIHNvY2tfbWFwX29wX29rYXkoc29wcykpKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjM5LVx0XHRyZXR1cm4gc29ja19oYXNoX3VwZGF0ZV9jb21tb24obWFwLCBrZXksIHNvcHMtXHUwMDNlc2ssIGZsYWdzKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyNTQ9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfaGFzaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2Mi1cdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMjYzOlx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjY0LVx0XHRyZXR1cm4gU0tfRFJPUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyODI9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI5MC1cdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMjkxOlx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjkyLVx0XHRyZXR1cm4gU0tfRFJPUDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfaGFzaF9vcHMgPSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUyLVx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19oYXNoX2dldF9uZXh0X2tleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1MzpcdC5tYXBfdXBkYXRlX2VsZW1cdD0gc29ja19tYXBfdXBkYXRlX2VsZW0sXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTQtXHQubWFwX2RlbGV0ZV9lbGVtXHQ9IHNvY2tfaGFzaF9kZWxldGVfZWxlbSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NjQ6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ2NS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc3LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNDc4OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NzktXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfbGluayAqKipwbGluaywgdTMyIHdoaWNoKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDgwLXtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ4MTpcdHN0cnVjdCBza19wc29ja19wcm9ncyAqcHJvZ3MgPSBzb2NrX21hcF9wcm9ncyhtYXApO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNDgyLVx0c3RydWN0IGJwZl9wcm9nICoqY3VyX3Bwcm9nO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyMTpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTIyLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzNy0gKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUzODpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOS1cdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTQ1LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTQ2Olx0cmV0ID0gc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChtYXAsIFx1MDAyNnBwcm9nLCBcdTAwMjZwbGluaywgd2hpY2gpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNTQ3LVx0aWYgKHJldClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NDktXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1NTA6XHRyZXQgPSBzb2NrX21hcF9wcm9nX2F0dGFjaF9jaGVjayh3aGljaCwgcHJvZyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NTEtXHRpZiAocmV0KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU3Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU3MzppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NzQtXHRcdFx0ICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTkzLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTk0Olx0cmV0ID0gc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChtYXAsIFx1MDAyNnBwcm9nLCBOVUxMLCBhdHRyLVx1MDAzZXF1ZXJ5LmF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU5NS1cdGlmIChyZXQpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjIxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNjIyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX3VubGluayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjIzLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjUtXHRjYXNlIEJQRl9NQVBfVFlQRV9TT0NLTUFQOlxubmV0L2NvcmUvc29ja19tYXAuYzoxNjI2Olx0XHRyZXR1cm4gc29ja19tYXBfZGVsZXRlX2Zyb21fbGluayhsaW5rLVx1MDAzZW1hcCwgc2ssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjctXHRcdFx0XHRcdFx0IGxpbmstXHUwMDNlbGlua19yYXcpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYzNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYzNjpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZW1vdmVfbGlua3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjM3LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDAtXHR3aGlsZSAoKGxpbmsgPSBza19wc29ja19saW5rX3BvcChwc29jaykpKSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDE6XHRcdHNvY2tfbWFwX3VubGluayhzaywgbGluayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDItXHRcdHNrX3Bzb2NrX2ZyZWVfbGluayhsaW5rKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDY6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ3LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NTYtXHRcdHNhdmVkX3VuaGFzaCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KS1cdTAwM2V1bmhhc2g7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NTc6XHRcdGlmICh1bmxpa2VseShzYXZlZF91bmhhc2ggPT0gc29ja19tYXBfdW5oYXNoKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY1OC1cdFx0XHRnb3RvIHJldHJ5O1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY2MC1cdFx0c2F2ZWRfdW5oYXNoID0gcHNvY2stXHUwMDNlc2F2ZWRfdW5oYXNoO1xubmV0L2NvcmUvc29ja19tYXAuYzoxNjYxOlx0XHRzb2NrX21hcF9yZW1vdmVfbGlua3Moc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY2Mi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NjMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NjQ6XHRcdGlmIChXQVJOX09OX09OQ0Uoc2F2ZWRfdW5oYXNoID09IHNvY2tfbWFwX3VuaGFzaCkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NjUtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3MC19XG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NzE6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfdW5oYXNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3Mzp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjc0LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2ODMtXHRcdHNhdmVkX2Rlc3Ryb3kgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCktXHUwMDNlZGVzdHJveTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY4NDpcdFx0aWYgKHVubGlrZWx5KHNhdmVkX2Rlc3Ryb3kgPT0gc29ja19tYXBfZGVzdHJveSkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2ODUtXHRcdFx0Z290byByZXRyeTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2ODctXHRcdHNhdmVkX2Rlc3Ryb3kgPSBwc29jay1cdTAwM2VzYXZlZF9kZXN0cm95O1xubmV0L2NvcmUvc29ja19tYXAuYzoxNjg4Olx0XHRzb2NrX21hcF9yZW1vdmVfbGlua3Moc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY4OS1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjkyLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNjkzOlx0XHRpZiAoV0FSTl9PTl9PTkNFKHNhdmVkX2Rlc3Ryb3kgPT0gc29ja19tYXBfZGVzdHJveSkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2OTQtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY5OS19XG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MDA6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfZGVzdHJveSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MDI6dm9pZCBzb2NrX21hcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcwMy17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzEyLVx0XHRzYXZlZF9jbG9zZSA9IHBzb2NrLVx1MDAzZXNhdmVkX2Nsb3NlO1xubmV0L2NvcmUvc29ja19tYXAuYzoxNzEzOlx0XHRzb2NrX21hcF9yZW1vdmVfbGlua3Moc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcxNC1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzIyLVx0XHQgKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTcyMzpcdFx0aWYgKFdBUk5fT05fT05DRShzYXZlZF9jbG9zZSA9PSBzb2NrX21hcF9jbG9zZSkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MjQtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcyOS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTczMDpcdFx0aWYgKHVubGlrZWx5KHNhdmVkX2Nsb3NlID09IHNvY2tfbWFwX2Nsb3NlKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTczMS1cdFx0XHRnb3RvIHJldHJ5O1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTczNS19XG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MzY6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfY2xvc2UpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNzM3LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYHNvY2tfbWFwX2dldF9uZXh0X2tleWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBzbyBsZXQgbWUgcXVpY2tseSBqdW1wIHRvIGxpbmVzIDQ1Ni00NzAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcmVzaWRlcywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NTE6XHRcbiA0NTI6XHRcdHBzayA9IFx1MDAyNnN0YWItXHUwMDNlc2tzW2ldO1xuIDQ1MzpcdFx0cmV0dXJuIF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIE5VTEwsIHBzayk7XG4gNDU0Olx0fVxuIDQ1NTpcdFxuIDQ1NjpcdHN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcbiA0NTc6XHR7XG4gNDU4Olx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gNDU5Olx0XHR1MzIgaSA9IGtleSA/ICoodTMyICopa2V5IDogVTMyX01BWDtcbiA0NjA6XHRcdHUzMiAqa2V5X25leHQgPSBuZXh0O1xuIDQ2MTpcdFxuIDQ2MjpcdFx0aWYgKGkgPT0gc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMgLSAxKVxuIDQ2MzpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA0NjQ6XHRcdGlmIChpIFx1MDAzZT0gc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpXG4gNDY1Olx0XHRcdCprZXlfbmV4dCA9IDA7XG4gNDY2Olx0XHRlbHNlXG4gNDY3Olx0XHRcdCprZXlfbmV4dCA9IGkgJiM0MzsgMTtcbiA0Njg6XHRcdHJldHVybiAwO1xuIDQ2OTpcdH1cbiA0NzA6XHRcbiA0NzE6XHRzdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbiA0NzI6XHRcdFx0XHRcdCAgc3RydWN0IHNvY2sgKnNrLCB1NjQgZmxhZ3MpXG4gNDczOlx0e1xuIDQ3NDpcdFx0c3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApO1xuIDQ3NTpcdFx0c3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbms7XG4gNDc2Olx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIDQ3NzpcdFx0c3RydWN0IHNvY2sgKm9zaztcbiA0Nzg6XHRcdGludCByZXQ7XG4gNDc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgX19zb2NrX21hcF9sb29rdXBfZWxlbWAqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHNvY2tldCBtYXAgbG9va3VwIGlzIGFjdHVhbGx5IGJlaGF2aW5nLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYF9fc29ja19tYXBfbG9va3VwX2VsZW1gIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgem9vbSBpbiBvbiBsaW5lcyAzNzUgdGhyb3VnaCA0MDAuIFRoYXQgcmFuZ2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNodW5rIG9mIHRoZSBjb3JlIGxvZ2ljIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgaG9wZWZ1bGx5IHJldmVhbGluZyB0aGUgbnVhbmNlcyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGxvb2t1cCBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCBjb250ZW50aW9uLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIGJwZiBtYXAgbG9va3VwIHBhcmFkaWdtcywgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdW5leHBlY3RlZCBvciBub3ZlbCBpbiB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0IG1ha2VzIHRoZSBkaWZmZXJlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3NTpcdFx0cHNvY2tfcHJvZ3NfZHJvcChcdTAwMjZjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCktXHUwMDNlcHJvZ3MpO1xuIDM3NjpcdH1cbiAzNzc6XHRcbiAzNzg6XHRzdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbiAzNzk6XHR7XG4gMzgwOlx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gMzgxOlx0XG4gMzgyOlx0XHRXQVJOX09OX09OQ0UoIXJjdV9yZWFkX2xvY2tfaGVsZCgpKTtcbiAzODM6XHRcbiAzODQ6XHRcdGlmICh1bmxpa2VseShrZXkgXHUwMDNlPSBtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxuIDM4NTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzODY6XHRcdHJldHVybiBSRUFEX09OQ0Uoc3RhYi1cdTAwM2Vza3Nba2V5XSk7XG4gMzg3Olx0fVxuIDM4ODpcdFxuIDM4OTpcdHN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIDM5MDpcdHtcbiAzOTE6XHRcdHN0cnVjdCBzb2NrICpzaztcbiAzOTI6XHRcbiAzOTM6XHRcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbiAzOTQ6XHRcdGlmICghc2spXG4gMzk1Olx0XHRcdHJldHVybiBOVUxMO1xuIDM5NjpcdFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spKVxuIDM5NzpcdFx0XHRzb2NrX2hvbGQoc2spO1xuIDM5ODpcdFx0cmV0dXJuIHNrO1xuIDM5OTpcdH1cbiA0MDA6XHRcbiA0MDE6XHRzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gNDAyOlx0e1xuIDQwMzpcdFx0c3RydWN0IHNvY2sgKnNrO1xuIDQwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg1MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYG1heF9lbnRyaWVzYCBVc2FnZSBpbiBgc29ja19tYXBgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYG1heF9lbnRyaWVzYCBpcyBiZWluZyB1c2VkIHdpdGhpbiBgc29ja19tYXBgLCBhbmQgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgYWxsb2NhdGlvbiByb3V0aW5lcyDigJMgc3BlY2lmaWNhbGx5LCBgc29ja19oYXNoX2FsbG9jYCBhbmQgb3RoZXIgbWFwIGFsbG9jYXRvcnMgZm91bmQgd2l0aGluIGtlcm5lbC9icGYgYW5kIG5ldC9jb3JlL3NvY2tfbWFwLmMuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGVzZSBhcmVhcywgYXMgdGhleSYjMzk7cmUgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9ucyBmb3IgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBgbWF4X2VudHJpZXNgIHBhcmFtZXRlci4gRnVydGhlcm1vcmUsIEkmIzM5O2xsIG5lZWQgdG8gcnVsZSBvdXQgY29tbW9uIGVycm9ycyBsaWtlIGludGVnZXIgb3ZlcmZsb3dzIHRoYXQgbWlnaHQgYXJpc2Ugd2hlbiB3b3JraW5nIHdpdGggYSB2YXJpYWJsZSBpbnRlbmRlZCB0byB0cmFjayB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcy4gQSBjb21wcmVoZW5zaXZlIHNlYXJjaCwgdXNpbmcgYGdyZXBgLCBpcyBpbiBvcmRlci4gSSYjMzk7bGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSB3aGVyZSBgbWF4X2VudHJpZXNgIGlzIGNvbXBhcmVkIGFnYWluc3QgYElOVF9NQVhgIGFjcm9zcyB0aGUga2VybmVsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIEkgbmVlZCB0byBhZGRyZXNzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBsaW1pdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9Mzk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzLVx0aWYgKGF0dHItXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxubmV0L2NvcmUvc29ja19tYXAuYzo0NDpcdCAgICBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1LVx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGlzIGBzb2NrX21hcGAgZnVuY3Rpb25hbGl0eS4KCioqRGVjb25zdHJ1Y3RpbmcgU29jayBNYXAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgYHNvY2tfbWFwX2FsbG9jYC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3aGVuZXZlciBJJiMzOTttIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBCUEYgc2lkZS4gT3IgbWF5YmUgYGJwZl9pdGVyYCDigJMgaXQgY291bGQgYmUgaW52b2x2ZWQgaW4gaG93IHdlJiMzOTtyZSB0cmF2ZXJzaW5nIG9yIGl0ZXJhdGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgaW4gcXVlc3Rpb24uIFRoZW4gYWdhaW4sIEkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRvIHBlZWsgYXQgYHNlcV9maWxlYC4KCldhaXQgYSBtaW51dGUsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNvY2tfbWFwX3NlcV9zdGFydGAgYW5kIGBzb2NrX21hcF9zZXFfbmV4dGAuIFRoZXNlIGZ1bmN0aW9uIG5hbWVzIGhhdmUgJiMzNDtzZXEmIzM0OyBpbiB0aGVtLCB3aGljaCBwb2ludHMgZGlyZWN0bHkgYXQgaG93IGEgc2VxdWVudGlhbCBpbnRlcmZhY2UgbWlnaHQgYmUgaW1wbGVtZW50ZWQuCgpPa2F5LCBsZXQmIzM5O3MgY3V0IHJpZ2h0IHRvIHRoZSBjaGFzZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBMaW5lcyA3MDAgdG8gNzY1IGxvb2sgbGlrZSB0aGUgcHJpbWUgc3VzcGVjdCBhcmVhLiBUaW1lIHRvIGRpc3NlY3QgdGhhdCBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0LnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXG4gNzAxOlx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIDcwMjpcdFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX0NPTlNUX01BUF9QVFIsXG4gNzAzOlx0XHQuYXJnM190eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gNzA0Olx0XHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gNzA1Olx0fTtcbiA3MDY6XHRcbiA3MDc6XHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8ge1xuIDcwODpcdFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiA3MDk6XHRcdHN0cnVjdCBzb2NrICpzaztcbiA3MTA6XHRcdHUzMiBpbmRleDtcbiA3MTE6XHR9O1xuIDcxMjpcdFxuIDcxMzpcdHN0cnVjdCBicGZfaXRlcl9fc29ja21hcCB7XG4gNzE0Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IGJwZl9pdGVyX21ldGEgKiwgbWV0YSk7XG4gNzE1Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IGJwZl9tYXAgKiwgbWFwKTtcbiA3MTY6XHRcdF9fYnBmX21kX3B0cih2b2lkICosIGtleSk7XG4gNzE3Olx0XHRfX2JwZl9tZF9wdHIoc3RydWN0IHNvY2sgKiwgc2spO1xuIDcxODpcdH07XG4gNzE5Olx0XG4gNzIwOlx0REVGSU5FX0JQRl9JVEVSX0ZVTkMoc29ja21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4gNzIxOlx0XHRcdCAgICAgc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIDcyMjpcdFx0XHQgICAgIHN0cnVjdCBzb2NrICpzaylcbiA3MjM6XHRcbiA3MjQ6XHRzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcbiA3MjU6XHR7XG4gNzI2Olx0XHRpZiAodW5saWtlbHkoaW5mby1cdTAwM2VpbmRleCBcdTAwM2U9IGluZm8tXHUwMDNlbWFwLVx1MDAzZW1heF9lbnRyaWVzKSlcbiA3Mjc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzI4Olx0XG4gNzI5Olx0XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG4gNzMwOlx0XG4gNzMxOlx0XHQvKiBjYW4mIzM5O3QgcmV0dXJuIHNrIGRpcmVjdGx5LCBzaW5jZSB0aGF0IG1pZ2h0IGJlIE5VTEwgKi9cbiA3MzI6XHRcdHJldHVybiBpbmZvO1xuIDczMzpcdH1cbiA3MzQ6XHRcbiA3MzU6XHRzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbiA3MzY6XHRcdF9fYWNxdWlyZXMocmN1KVxuIDczNzpcdHtcbiA3Mzg6XHRcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuIDczOTpcdFxuIDc0MDpcdFx0aWYgKCpwb3MgPT0gMClcbiA3NDE6XHRcdFx0JiM0MzsmIzQzOypwb3M7XG4gNzQyOlx0XG4gNzQzOlx0XHQvKiBwYWlycyB3aXRoIHNvY2tfbWFwX3NlcV9zdG9wICovXG4gNzQ0Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNzQ1Olx0XHRyZXR1cm4gc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKGluZm8pO1xuIDc0NjpcdH1cbiA3NDc6XHRcbiA3NDg6XHRzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuIDc0OTpcdFx0X19tdXN0X2hvbGQocmN1KVxuIDc1MDpcdHtcbiA3NTE6XHRcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuIDc1MjpcdFxuIDc1MzpcdFx0JiM0MzsmIzQzOypwb3M7XG4gNzU0Olx0XHQmIzQzOyYjNDM7aW5mby1cdTAwM2VpbmRleDtcbiA3NTU6XHRcbiA3NTY6XHRcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XG4gNzU3Olx0fVxuIDc1ODpcdFxuIDc1OTpcdHN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gNzYwOlx0XHRfX211c3RfaG9sZChyY3UpXG4gNzYxOlx0e1xuIDc2MjpcdFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gc2VxLVx1MDAzZXByaXZhdGU7XG4gNzYzOlx0XHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAgY3R4ID0ge307XG4gNzY0Olx0XHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xuIDc2NTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIDc2NjpcdFxuIDc2NzpcdFx0bWV0YS5zZXEgPSBzZXE7XG4gNzY4Olx0XHRwcm9nID0gYnBmX2l0ZXJfZ2V0X2luZm8oXHUwMDI2bWV0YSwgIXYpO1xuIDc2OTpcdFx0aWYgKCFwcm9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU2lnbmVkIEludGVnZXIgVXNhZ2Ugd2l0aCBgbWF4X2VudHJpZXNgIGluIGBzb2NrX21hcC5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHdlJiMzOTtyZSB1c2luZyBgbWF4X2VudHJpZXNgIHdpdGggYSBzaWduZWQgaW50ZWdlci4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBsb2NhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIFRoYXQgZmlsZSBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igd2hlcmUgdGhpcyBraW5kIG9mIHRoaW5nIHdvdWxkIGJlIGhhbmRsZWQuCgpUbyBuYXJyb3cgaXQgZG93biwgSSBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZSBmb3IgaW5zdGFuY2VzIG9mIGJvdGggYG1hcC0mZ3Q7bWF4X2VudHJpZXNgIGFuZCBgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IHBhdHRlcm5zIHRvIGxvb2sgZm9yIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgZmlsZS4gSG9wZWZ1bGx5LCB0aGlzIHNlYXJjaCB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIHVzYWdlIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW4gaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF9lbnRyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTM5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy00Mi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0Olx0ICAgIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVggfHxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTg6XHRzdGFiLVx1MDAzZXNrcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAqXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5LVx0XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTM0MD1zdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNDktXHRzeW5jaHJvbml6ZV9yY3UoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzUwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG5uZXQvY29yZS9zb2NrX21hcC5jLTM1MS1cdFx0c3RydWN0IHNvY2sgKipwc2sgPSBcdTAwMjZzdGFiLVx1MDAzZXNrc1tpXTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTM3OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4My1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg0Olx0aWYgKHVubGlrZWx5KGtleSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00NDM9c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQ4LVxubmV0L2NvcmUvc29ja19tYXAuYzo0NDk6XHRpZiAodW5saWtlbHkoaSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz00NTY9c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDYxLVxubmV0L2NvcmUvc29ja19tYXAuYzo0NjI6XHRpZiAoaSA9PSBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2My1cdFx0cmV0dXJuIC1FTk9FTlQ7XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ2NDpcdGlmIChpIFx1MDAzZT0gc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2NS1cdFx0KmtleV9uZXh0ID0gMDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ3MT1zdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvY29yZS9zb2NrX21hcC5jOjQ4MzpcdGlmICh1bmxpa2VseShpZHggXHUwMDNlPSBtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxubmV0L2NvcmUvc29ja19tYXAuYy00ODQtXHRcdHJldHVybiAtRTJCSUc7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz03MjQ9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNS17XG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcdGlmICh1bmxpa2VseShpbmZvLVx1MDAzZWluZGV4IFx1MDAzZT0gaW5mby1cdTAwM2VtYXAtXHUwMDNlbWF4X2VudHJpZXMpKVxubmV0L2NvcmUvc29ja19tYXAuYy03MjctXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODE2PXN0YXRpYyB1NjQgc29ja19tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MTktXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyMDpcdHVzYWdlICYjNDM7PSAodTY0KW1hcC1cdTAwM2VtYXhfZW50cmllcyAqIHNpemVvZihzdHJ1Y3Qgc29jayAqKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIxLVx0cmV0dXJuIHVzYWdlO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTY3PXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKnNvY2tfaGFzaF9hbGxvY19lbGVtKHN0cnVjdCBicGZfc2h0YWIgKmh0YWIsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05NzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjk3NDpcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZodGFiLVx1MDAzZWNvdW50KSBcdTAwM2UgaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpIHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTc1LVx0XHRpZiAoIW9sZCkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA5OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfaGFzaF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDQ6XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDUtXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICA9PSAwIHx8XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTE4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTE5Olx0aHRhYi1cdTAwM2VidWNrZXRzX251bSA9IHJvdW5kdXBfcG93X29mX3R3byhodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMjAtXHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3NodGFiX2VsZW0pICYjNDM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrIE1hcCBMb29wKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMzUwIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYDogYGZvciAoaSA9IDA7IGkgJmx0OyBzdGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbG9vcCBpbiB0aGUgYHNvY2tfbWFwX2ZyZWVgIGZ1bmN0aW9uIG1vcmUgY2xlYXJseS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHR5cGUgb2YgdGhlIGxvb3AgY291bnRlciwgYGlgLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0eXBlIGBpYCBpcyBpbiB0aGUgYHNvY2tfbWFwX2ZyZWVgIGZ1bmN0aW9uLCBhbmQgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbG9vcC4gTGV0JiMzOTtzIGV4YW1pbmUgbGluZXMgMzQwIHRocm91Z2ggMzcwIGluIHRoZSBzYW1lIGZpbGUgdG8gZ2FpbiB0aGUgZnVsbCBjb250ZXh0IGFuZCBjb25maXJtIHRoZSB0eXBlIG9mIGBpYC4gVGhpcyBpcyBjcnVjaWFsIGZvciB2ZXJpZnlpbmcgdGhlIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgZm9yIG92ZXJmbG93IGlzc3VlcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG1hcCYjMzk7cyBtYXhpbXVtIGVudHJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0c3RhdGljIHZvaWQgc29ja19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIDM0MTpcdHtcbiAzNDI6XHRcdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcbiAzNDM6XHRcdGludCBpO1xuIDM0NDpcdFxuIDM0NTpcdFx0LyogQWZ0ZXIgdGhlIHN5bmMgbm8gdXBkYXRlcyBvciBkZWxldGVzIHdpbGwgYmUgaW4tZmxpZ2h0IHNvIGl0XG4gMzQ2Olx0XHQgKiBpcyBzYWZlIHRvIHdhbGsgbWFwIGFuZCByZW1vdmUgZW50cmllcyB3aXRob3V0IHJpc2tpbmcgYSByYWNlXG4gMzQ3Olx0XHQgKiBpbiBFRVhJU1QgdXBkYXRlIGNhc2UuXG4gMzQ4Olx0XHQgKi9cbiAzNDk6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDM1MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG4gMzUxOlx0XHRcdHN0cnVjdCBzb2NrICoqcHNrID0gXHUwMDI2c3RhYi1cdTAwM2Vza3NbaV07XG4gMzUyOlx0XHRcdHN0cnVjdCBzb2NrICpzaztcbiAzNTM6XHRcbiAzNTQ6XHRcdFx0c2sgPSB4Y2hnKHBzaywgTlVMTCk7XG4gMzU1Olx0XHRcdGlmIChzaykge1xuIDM1NjpcdFx0XHRcdHNvY2tfaG9sZChzayk7XG4gMzU3Olx0XHRcdFx0bG9ja19zb2NrKHNrKTtcbiAzNTg6XHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMzU5Olx0XHRcdFx0c29ja19tYXBfdW5yZWYoc2ssIHBzayk7XG4gMzYwOlx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzYxOlx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiAzNjI6XHRcdFx0XHRzb2NrX3B1dChzayk7XG4gMzYzOlx0XHRcdH1cbiAzNjQ6XHRcdH1cbiAzNjU6XHRcbiAzNjY6XHRcdC8qIHdhaXQgZm9yIHBzb2NrIHJlYWRlcnMgYWNjZXNzaW5nIGl0cyBtYXAgbGluayAqL1xuIDM2NzpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gMzY4Olx0XG4gMzY5Olx0XHRicGZfbWFwX2FyZWFfZnJlZShzdGFiLVx1MDAzZXNrcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBhIEMgQ29kZSBTbmlwcGV0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBMaW5lIDM0MywgYGludCBpO2Ag4oCTIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzaWduZWQgaW50ZWdlciBgaWAgaGVyZS4gVGhlbiwgb24gbGluZSAzNTAsIHdlIGhhdmUgYGZvciAoaSA9IDA7IGkgJmx0OyBzdGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KWAuIE15IGluaXRpYWwgY29uY2VybiBpczogd2hhdCBoYXBwZW5zIGlmIGBzdGFiLSZndDttYXAubWF4X2VudHJpZXNgIGlzIGxhcmdlciB0aGFuIGBJTlRfTUFYYD8gU2luY2UgYGlgIGlzIHNpZ25lZCwgd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYHN0YWItJmd0O21hcC5tYXhfZW50cmllc2AgaXMgYSBgdTMyYCAodW5zaWduZWQgMzItYml0IGludGVnZXIpIGluIEMsIHRoZSBjb21wYXJpc29uIGBpICZsdDsgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzYCBnZXRzIHRyaWNreS4KCkhlcmUmIzM5O3MgaG93IEkmIzM5O20gYnJlYWtpbmcgaXQgZG93bjogYGlgIChzaWduZWQgaW50KSB3aWxsIGJlIGNvbnZlcnRlZCB0byBgdTMyYCBmb3IgdGhlIGNvbXBhcmlzb24uIE5vdywgd2hlbiBgaWAgYXBwcm9hY2hlcyBgSU5UX01BWGAsIGBpJiM0MzsmIzQzO2AgaGFzIHRoZSBwb3RlbnRpYWwgdG8gb3ZlcmZsb3cgdGhlIHNpZ25lZCBpbnRlZ2VyLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgaW4gQy4gSWYgYGlgIHdyYXBzIGFyb3VuZCB0byBhIG5lZ2F0aXZlIHZhbHVlLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhICpodWdlKiB1bnNpZ25lZCB2YWx1ZSwgb3IgdGhlIGxvb3AgdGVybWluYXRlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGkmIzQzOyYjNDM7YCBvdmVyZmxvdyBiZWluZyB1bmRlZmluZWQgYmVoYXZpb3IsIHRoaXMgY291bGQgYmUgYSBuYXN0eSBidWchCgpBbmQgd2FpdCwgdGhlcmUmIzM5O3MgYW5vdGhlciBwb2ludC4gV2UgYWxzbyBuZWVkIHRvIGFuYWx5emUgdGhlIGBzb2NrX21hcF9kZWxldGVfZWxlbWAgZnVuY3Rpb24uIExldCBtZSBzY2FuIHRocm91Z2ggdGhlIHJlbGV2YW50IGxpbmVzLCBzcGVjaWZpY2FsbHkgNDQwLTQ1NSwgdG8gc2VlIGlmIGEgc2ltaWxhciB2dWxuZXJhYmlsaXR5IGV4aXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE2Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRcdF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIHNrLCBsaW5rX3Jhdyk7XG4gNDQxOlx0fVxuIDQ0MjpcdFxuIDQ0MzpcdHN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiA0NDQ6XHR7XG4gNDQ1Olx0XHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XG4gNDQ2Olx0XHR1MzIgaSA9ICoodTMyICopa2V5O1xuIDQ0NzpcdFx0c3RydWN0IHNvY2sgKipwc2s7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRpZiAodW5saWtlbHkoaSBcdTAwM2U9IG1hcC1cdTAwM2VtYXhfZW50cmllcykpXG4gNDUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ1MTpcdFxuIDQ1MjpcdFx0cHNrID0gXHUwMDI2c3RhYi1cdTAwM2Vza3NbaV07XG4gNDUzOlx0XHRyZXR1cm4gX19zb2NrX21hcF9kZWxldGUoc3RhYiwgTlVMTCwgcHNrKTtcbiA0NTQ6XHR9XG4gNDU1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTI4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBvdXQgbG91ZDoKCioqUHJvYmluZyBmb3IgQlBGIE1hcCBJbnRlZ2VyIE92ZXJmbG93IFZ1bG5lcmFiaWxpdGllcyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IEJQRiBtYXBzIGFuZCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBjaGVja3Mgb2YgYG1heF9lbnRyaWVzICZndDsgSU5UX01BWGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIG1hcCB0eXBlcywgYmVzaWRlcyB0aGUgb25lIHRoYXQgdHJpZ2dlcmVkIHRoaXMgdGhvdWdodCwgbWlnaHQgZXhoaWJpdCBzaW1pbGFyIGJlaGF2aW9yLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGltcGxlbWVudGF0aW9ucyBzaW1pbGFyIHRvIGFycmF5IG1hcHMg4oCTIHRoaW5raW5nIGBhcnJheW1hcC5jYCBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIHRoYXQgY2hlY2s6IGBtYXhfZW50cmllcyAmZ3Q7IElOVF9NQVhgIG9yIGFueSBlcXVpdmFsZW50IGxvZ2ljIGluIHRoZSBvdGhlciBtYXAgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1pZ2h0IGludm9sdmUgZGl2aW5nIGludG8gb3RoZXIgYXJyYXktbGlrZSBtYXAgaW1wbGVtZW50YXRpb25zIGFzIHdlbGwuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGtpbmQgb2YgY2hlY2sgaXMgdXNlZCwgYW5kIHdoZXJlIGl0IG1pZ2h0IGJlIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0aWVzIGluIEJQRiBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBodW50IGRvd24gcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgY29kZS4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlIGFuZCBqdW1wIHJpZ2h0IGludG8gdGhlIGBrZXJuZWwvYnBmL2AgZGlyZWN0b3J5LiBUaGUgdHJpZ2dlciBJJiMzOTttIGtleWluZyBvbiBpcyBzb21ldGhpbmcgdGhhdCBoaW50cyBhdCB0aGUgdXBwZXIgbGltaXQgb2YgaW50ZWdlciB2YWx1ZXMgYmVpbmcgYXBwcm9hY2hlZCBvciBwb3RlbnRpYWxseSBleGNlZWRlZC4gVGhhdCBtZWFucyBJJiMzOTtsbCB1c2UgdGhlIHNlYXJjaCB0ZXJtIGAmZ3Q7IElOVF9NQVhgLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBhc3N1bWluZyB0aGF0IHBsYWNlcyB3aGVyZSBhIHZhcmlhYmxlJiMzOTtzIHZhbHVlIGlzIGNoZWNrZWQgYWdhaW5zdCBgSU5UX01BWGAgYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkga25vdyBgSU5UX01BWGAgaXMgdGhlIG1heGltdW0gdmFsdWUgZm9yIGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLCBhbmQgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGVzZSBjaGVja3MgYXJlIG9jY3VycmluZyB3aXRoaW4gdGhlIEJQRiBjb2RlLiBUaGlzIHNlYXJjaCB0ZXJtIGZlZWxzIGxpa2UgYSBnb29kLCBlZmZpY2llbnQgZmlyc3Qgc3RlcC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gcmV0dXJuIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlcywgYnV0IGl0IHNob3VsZCBhbHNvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIG9mIGxvY2F0aW9ucyB3aGVyZSBJIGNhbiByZWFsbHkgZGlnIGRlZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1x1MDAzZSBJTlRfTUFYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTUzPWludCBhcnJheV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTc0LVx0LyogYXZvaWQgb3ZlcmZsb3cgb24gcm91bmRfdXAobWFwLVx1MDAzZXZhbHVlX3NpemUpICovXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NzU6XHRpZiAoYXR0ci1cdTAwM2V2YWx1ZV9zaXplIFx1MDAzZSBJTlRfTUFYKVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTc2LVx0XHRyZXR1cm4gLUUyQklHO1xuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIyNy1cdFx0cmV0dXJuIDA7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjIyODpcdGlmIChucl9saW5mbyBcdTAwM2UgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgYnBmX2xpbmVfaW5mbykpXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIyOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM1OC1cdFx0cmV0dXJuIDA7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjM1OTpcdGlmIChucl9jb3JlX3JlbG8gXHUwMDNlIElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGJwZl9jb3JlX3JlbG8pKVxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNjAtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0yNTE9c3RhdGljIGNoYXIgKmRpYWdfZm10X2FsbG9jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHNpemVfdCBzaXplKVxuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yNTctXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6MjU4Olx0aWYgKCFkaWFnIHx8ICFzaXplIHx8IHNpemUgXHUwMDNlIElOVF9NQVgpXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMjU5LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MDk1PXN0YXRpYyBpbnQgYnBmX2VuYWJsZV9ydW50aW1lX3N0YXRzKHZvaWQpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEwMS1cdC8qIFNldCBhIHZlcnkgaGlnaCBsaW1pdCB0byBhdm9pZCBvdmVyZmxvdyAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEwMjpcdGlmIChzdGF0aWNfa2V5X2NvdW50KFx1MDAyNmJwZl9zdGF0c19lbmFibGVkX2tleS5rZXkpIFx1MDAzZSBJTlRfTUFYIC8gMikge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjEwMy1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwZl9zdGF0c19lbmFibGVkX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIEN1cmlvdXMgQ2hlY2sgaW4gYHNvY2tfbWFwX2FsbG9jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uLCBhbmQgYSByZWQgZmxhZyBpbW1lZGlhdGVseSBwb3BwZWQgdXA6IHdoeSBpcyBpdCBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGBhdHRyLSZndDttYXhfZW50cmllc2AgaXMgZ3JlYXRlciB0aGFuIGBJTlRfTUFYYD8gVGhhdCBzZWVtcy4uLnVudXN1YWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXM/IElzIHRoZXJlIGEgc3VidGxlIG92ZXJmbG93IGlzc3VlIGF0IHBsYXksIG9yIHNvbWUgb3RoZXIgY29uc3RyYWludCBJJiMzOTttIG1pc3Npbmc/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyLiBJZGVhbGx5LCBJJiMzOTtkIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGBzb2NrX21hcC5jYCBjb2RlIGFuZCB0aGVuIHRoZSBjb21taXQgbG9ncyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGhpc3RvcmljYWwgY29udGV4dC4gVW5mb3J0dW5hdGVseSwgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGdpdCBsb2dzIG9uIHRoZSBzeXotY2x1c3Rlci4gU28sIHNpbmNlIHRoZSBzb2NrIG1hcCBpcyByZWxhdGVkIHRvIGVCUEYsIEkmIzM5O2xsIHN3aXRjaCBnZWFycyBzbGlnaHRseSBhbmQgbG9vayBhdCBob3cgYXJyYXkgbWFwcyBpbiBga2VybmVsL2JwZi9hcnJheW1hcC5jYCBoYW5kbGUgYG1heF9lbnRyaWVzYCB3aXRoIGBhcnJheV9tYXBfYWxsb2NfY2hlY2tgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCB0aGVyZSYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoZSBrZXJuZWwmIzM5O3MgZUJQRiBtYXAgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhpcyBtaWdodCBvZmZlciBzb21lIGNsdWVzLiBJJiMzOTttIGhvcGluZyBJIGNhbiBmaW5kIGEgY29ycmVzcG9uZGluZyBvdmVyZmxvdyBjaGVjaywgb3IgcGVyaGFwcyBhIHJhbmdlIGxpbWl0YXRpb24gdGhlcmUuIFRoaXMgc2hvdWxkIGhlbHAgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGBzb2NrX21hcF9hbGxvY2AgaGFzIHRoaXMgc3BlY2lmaWMgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MzpcdGludCBhcnJheV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gIDU0Olx0e1xuICA1NTpcdFx0Ym9vbCBwZXJjcHUgPSBhdHRyLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk7XG4gIDU2Olx0XHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcbiAgNTc6XHRcbiAgNTg6XHRcdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXG4gIDU5Olx0XHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXHUwMDNla2V5X3NpemUgIT0gNCB8fFxuICA2MDpcdFx0ICAgIGF0dHItXHUwMDNldmFsdWVfc2l6ZSA9PSAwIHx8XG4gIDYxOlx0XHQgICAgYXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IH5BUlJBWV9DUkVBVEVfRkxBR19NQVNLIHx8XG4gIDYyOlx0XHQgICAgIWJwZl9tYXBfZmxhZ3NfYWNjZXNzX29rKGF0dHItXHUwMDNlbWFwX2ZsYWdzKSB8fFxuICA2MzpcdFx0ICAgIChwZXJjcHUgXHUwMDI2XHUwMDI2IG51bWFfbm9kZSAhPSBOVU1BX05PX05PREUpKVxuICA2NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNjU6XHRcbiAgNjY6XHRcdGlmIChhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbiAgNjc6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgKEJQRl9GX01NQVBBQkxFIHwgQlBGX0ZfSU5ORVJfTUFQKSlcbiAgNjg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDY5Olx0XG4gIDcwOlx0XHRpZiAoYXR0ci1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSRl9FVkVOVF9BUlJBWSBcdTAwMjZcdTAwMjZcbiAgNzE6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfUFJFU0VSVkVfRUxFTVMpXG4gIDcyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA3MzpcdFxuICA3NDpcdFx0LyogYXZvaWQgb3ZlcmZsb3cgb24gcm91bmRfdXAobWFwLVx1MDAzZXZhbHVlX3NpemUpICovXG4gIDc1Olx0XHRpZiAoYXR0ci1cdTAwM2V2YWx1ZV9zaXplIFx1MDAzZSBJTlRfTUFYKVxuICA3NjpcdFx0XHRyZXR1cm4gLUUyQklHO1xuICA3NzpcdFx0LyogcGVyY3B1IG1hcCB2YWx1ZSBzaXplIGlzIGJvdW5kIGJ5IFBDUFVfTUlOX1VOSVRfU0laRSAqL1xuICA3ODpcdFx0aWYgKHBlcmNwdSBcdTAwMjZcdTAwMjYgcm91bmRfdXAoYXR0ci1cdTAwM2V2YWx1ZV9zaXplLCA4KSBcdTAwM2UgUENQVV9NSU5fVU5JVF9TSVpFKVxuICA3OTpcdFx0XHRyZXR1cm4gLUUyQklHO1xuICA4MDpcdFxuICA4MTpcdFx0cmV0dXJuIDA7XG4gIDgyOlx0fVxuICA4MzpcdFxuICA4NDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJyYXlfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuICA4NTpcdHtcbiAgODY6XHRcdGJvb2wgcGVyY3B1ID0gYXR0ci1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZO1xuICA4NzpcdFx0aW50IG51bWFfbm9kZSA9IGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cik7XG4gIDg4Olx0XHR1MzIgZWxlbV9zaXplLCBpbmRleF9tYXNrLCBtYXhfZW50cmllcztcbiAgODk6XHRcdGJvb2wgYnlwYXNzX3NwZWNfdjEgPSBicGZfYnlwYXNzX3NwZWNfdjEoTlVMTCk7XG4gIDkwOlx0XHR1NjQgYXJyYXlfc2l6ZSwgbWFzazY0O1xuICA5MTpcdFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXk7XG4gIDkyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjQ0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgc29ja19tYXBfYWxsb2NgIGZvciBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyoqCgpPa2F5LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYHNvY2tfbWFwX2FsbG9jYC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIGl0IGFnYWluLCBsaW5lIGJ5IGxpbmUuIExldCBtZSBqdXN0IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldDoKCmBgYGMKc3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cikKewoJc3RydWN0IGJwZl9zdGFiICpzdGFiOwoKCWlmIChhdHRyLSZndDttYXhfZW50cmllcyA9PSAwIHx8CgkgICAgYXR0ci0mZ3Q7bWF4X2VudHJpZXMgJmd0OyBJTlRfTUFYIHx8CgkgICAgYXR0ci0mZ3Q7a2V5X3NpemUgICAgIT0gNCB8fAoJICAgIChhdHRyLSZndDt2YWx1ZV9zaXplICE9IHNpemVvZih1MzIpICZhbXA7JmFtcDsKCSAgICAgYXR0ci0mZ3Q7dmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHwKCSAgICBhdHRyLSZndDttYXBfZmxhZ3MgJmFtcDsgflNPQ0tfQ1JFQVRFX0ZMQUdfTUFTSykKCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKYGBgCgpXYWl0IGEgc2Vjb25k4oCmIHdoYXQgd2FzIHRoZSAqc3BlY2lmaWMqIHJlYXNvbiB3ZSBuZWVkZWQgYGF0dHItJmd0O21heF9lbnRyaWVzICZndDsgSU5UX01BWGA/IE15IG1lbW9yeSBpc24mIzM5O3QgcGVyZmVjdCwgc28gaXQmIzM5O3MgYmVzdCB0byByZWZyZXNoLiBPa2F5LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIGFuZCBzZWUgd2hhdCBoYXBwZW5zIHdpdGggYHN0YWItJmd0O21hcC5tYXhfZW50cmllc2A6CgpgYGBjCglzdGFiLSZndDtza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzICoKCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNvY2sgKiksCgkJCQkgICAgICAgc3RhYi0mZ3Q7bWFwLm51bWFfbm9kZSk7CmBgYAoKQWhhISBOb3cgSSBzZWUgaXQuIElmIGBtYXhfZW50cmllc2AgaXMgYSBgdTMyYCBhbmQgaXQmIzM5O3Mgc2V0IHRvIHNvbWV0aGluZyBsaWtlIGAodTMyKS0xYCwgb3IgYW55IHZhbHVlIHRoYXQmIzM5O3MgY2xvc2UgdG8gdGhlIG1heGltdW0gYHUzMmAgdmFsdWUsIHRoZSBtdWx0aXBsaWNhdGlvbiBieSBgc2l6ZW9mKHN0cnVjdCBzb2NrKilgICpjb3VsZCogb3ZlcmZsb3cuIFRoZSBjYXN0IHRvIGB1NjRgICpoZWxwcyosIGJ1dCB3aXRob3V0IHRoYXQgY2hlY2sgb24gYG1heF9lbnRyaWVzYCwgeW91IGNvdWxkIHN0aWxsIGVuZCB1cCB3aXRoIGFuIHVuZXhwZWN0ZWQgYW5kIHNtYWxsZXIgYWxsb2NhdGlvbiBzaXplLCBsZWFkaW5nIHRvIGJ1ZmZlciBvdmVyZmxvd3MuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBzaXplLgoKU28sIGBicGZfbWFwX2FyZWFfYWxsb2NgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlISBMZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgKnRoYXQqIGZ1bmN0aW9uIG5vdywgdG8gc2VlIHdoYXQgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9hcmVhX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjk5LVxua2VybmVsL2JwZi9hcmVuYS5jOjMwMDpcdGFyZW5hID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqYXJlbmEpLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMwMS1cdGlmICghYXJlbmEpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJyYXlfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDEtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0MjpcdFx0YXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2MoYXJyYXlfc2l6ZSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDMtXHR9XG4tLVxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYz05OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmJsb29tX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE0NC1cdGJpdHNldF9ieXRlcyA9IEJJVFNfVE9fTE9OR1MoKHU2NCliaXRzZXRfbWFzayAmIzQzOyAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM6MTQ1Olx0Ymxvb20gPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpibG9vbSkgJiM0MzsgYml0c2V0X2J5dGVzLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xNDYtXG4tLVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jPTQ0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaW5zbl9hcnJheV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtNDgtXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6NDk6XHRpbnNuX2FycmF5ID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtNTAtXHRpZiAoIWluc25fYXJyYXkpXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTc3Mz1icGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTc4MC1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo3ODE6XHRzbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqc21hcCksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzgyLVx0aWYgKCFzbWFwKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMDg0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTM5LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNDA6XHRzdF9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc3RfbWFwX3NpemUsIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE0MS1cdGlmICghc3RfbWFwKSB7XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNDgtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE0OTpcdHN0X21hcC1cdTAwM2V1dmFsdWUgPSBicGZfbWFwX2FyZWFfYWxsb2ModnQtXHUwMDNlc2l6ZSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTUwLVx0c3RfbWFwLVx1MDAzZWZ1bmNzX2NudCA9IGNvdW50X2Z1bmNfcHRycyhidGYsIHQpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTEtXHRzdF9tYXAtXHUwMDNlbGlua3MgPVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNTI6XHRcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXHUwMDNlZnVuY3NfY250ICogc2l6ZW9mKHN0cnVjdCBicGZfbGluayAqKSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTUzLVx0XHRcdFx0ICAgTlVNQV9OT19OT0RFKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1NS1cdHN0X21hcC1cdTAwM2Vrc3ltcyA9XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE1NjpcdFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cdTAwM2VmdW5jc19jbnQgKiBzaXplb2Yoc3RydWN0IGJwZl9rc3ltICopLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTctXHRcdFx0XHQgICBOVU1BX05PX05PREUpO1xuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmM9ODU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjcHVfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtMTAwLVxua2VybmVsL2JwZi9jcHVtYXAuYzoxMDE6XHRjbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqY21hcCksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2NwdW1hcC5jLTEwMi1cdGlmICghY21hcClcbi0tXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTEwNy1cdC8qIEFsbG9jIGFycmF5IGZvciBwb3NzaWJsZSByZW1vdGUgXCYjMzQ7ZGVzdGluYXRpb25cJiMzNDsgQ1BVcyAqL1xua2VybmVsL2JwZi9jcHVtYXAuYzoxMDg6XHRjbWFwLVx1MDAzZWNwdV9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2MoY21hcC1cdTAwM2VtYXAubWF4X2VudHJpZXMgKlxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDktXHRcdFx0XHRcdCAgIHNpemVvZihzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKiksXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz05MT1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKmRldl9tYXBfY3JlYXRlX2hhc2godW5zaWduZWQgaW50IGVudHJpZXMsXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy05Ni1cbmtlcm5lbC9icGYvZGV2bWFwLmM6OTc6XHRoYXNoID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIGVudHJpZXMgKiBzaXplb2YoKmhhc2gpLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9kZXZtYXAuYy05OC1cdGlmIChoYXNoICE9IE5VTEwpXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz0xMzY9c3RhdGljIGludCBkZXZfbWFwX2luaXRfbWFwKHN0cnVjdCBicGZfZHRhYiAqZHRhYiwgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy0xNTMtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9kZXZtYXAuYzoxNTQ6XHRcdGR0YWItXHUwMDNlbmV0ZGV2X21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBkdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllcyAqXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE1NS1cdFx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGJwZl9kdGFiX25ldGRldiAqKSxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTE2ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmRldl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy0xNjgtXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjE2OTpcdGR0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpkdGFiKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTcwLVx0aWYgKCFkdGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxOT1zdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNi1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNzpcdGh0YWItXHUwMDNlZWxlbXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NClodGFiLVx1MDAzZWVsZW1fc2l6ZSAqIG51bV9lbnRyaWVzLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI4LVx0XHRcdFx0XHQgaHRhYi1cdTAwM2VtYXAubnVtYV9ub2RlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz01NDg9c3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01NjEtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo1NjI6XHRodGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqaHRhYiksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01NjMtXHRpZiAoIWh0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNjA0LVx0ZXJyID0gLUVOT01FTTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjYwNTpcdGh0YWItXHUwMDNlYnVja2V0cyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhodGFiLVx1MDAzZW5fYnVja2V0cyAqXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDYtXHRcdFx0XHRcdCAgIHNpemVvZihzdHJ1Y3QgYnVja2V0KSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODE2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjEtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODIyOlx0cmh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpyaHRhYiksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODIzLVx0aWYgKCFyaHRhYilcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz0yOTc9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzI3LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzI4Olx0bWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjktXHRpZiAoIW1hcClcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9NTcxPXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqdHJpZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNTg3LVxua2VybmVsL2JwZi9scG1fdHJpZS5jOjU4ODpcdHRyaWUgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCp0cmllKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy01ODktXHRpZiAoIXRyaWUpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9NTAzPXN0cnVjdCBicGZfbWFwICpicGZfbWFwX29mZmxvYWRfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxNS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjUxNjpcdG9mZm1hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKm9mZm1hcCksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MTctXHRpZiAoIW9mZm1hcClcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz02NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnF1ZXVlX3N0YWNrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy03My1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjc0Olx0cXMgPSBicGZfbWFwX2FyZWFfYWxsb2MocXVldWVfc2l6ZSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTc1LVx0aWYgKCFxcylcbi0tXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jPTE0OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJldXNlcG9ydF9hcnJheV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jLTE1NC1cdC8qIGFsbG9jYXRlIGFsbCBtYXAgZWxlbWVudHMgYW5kIHplcm8taW5pdGlhbGl6ZSB0aGVtICovXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jOjE1NTpcdGFycmF5ID0gYnBmX21hcF9hcmVhX2FsbG9jKHN0cnVjdF9zaXplKGFycmF5LCBwdHJzLCBhdHRyLVx1MDAzZW1heF9lbnRyaWVzKSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmMtMTU2LVx0aWYgKCFhcnJheSlcbi0tXG5rZXJuZWwvYnBmL3JpbmdidWYuYz05Mz1zdGF0aWMgc3RydWN0IGJwZl9yaW5nYnVmICpicGZfcmluZ2J1Zl9hcmVhX2FsbG9jKHNpemVfdCBkYXRhX3N6LCBpbnQgbnVtYV9ub2RlKVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTEyMi1cdGFycmF5X3NpemUgPSAobnJfbWV0YV9wYWdlcyAmIzQzOyAyICogbnJfZGF0YV9wYWdlcykgKiBzaXplb2YoKnBhZ2VzKTtcbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjEyMzpcdHBhZ2VzID0gYnBmX21hcF9hcmVhX2FsbG9jKGFycmF5X3NpemUsIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL3JpbmdidWYuYy0xMjQtXHRpZiAoIXBhZ2VzKVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTE5ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJpbmdidWZfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTIxMi1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjIxMzpcdHJiX21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnJiX21hcCksIE5VTUFfTk9fTk9ERSk7XG5rZXJuZWwvYnBmL3JpbmdidWYuYy0yMTQtXHRpZiAoIXJiX21hcClcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9Njg9c3RhdGljIGludCBwcmVhbGxvY19lbGVtc19hbmRfZnJlZWxpc3Qoc3RydWN0IGJwZl9zdGFja19tYXAgKnNtYXApXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTczLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjc0Olx0c21hcC1cdTAwM2VlbGVtcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhlbGVtX3NpemUgKiBzbWFwLVx1MDAzZW1hcC5tYXhfZW50cmllcyxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NS1cdFx0XHRcdFx0IHNtYXAtXHUwMDNlbWFwLm51bWFfbm9kZSk7XG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTkzPXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc3RhY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMjUtXHRjb3N0ID0gbl9idWNrZXRzICogc2l6ZW9mKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopICYjNDM7IHNpemVvZigqc21hcCk7XG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MTI2Olx0c21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhjb3N0LCBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMjctXHRpZiAoIXNtYXApXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzA4PXN0YXRpYyBpbnQgYnBmX21hcF9jb3B5X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzcxLSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzcyOnN0YXRpYyB2b2lkICpfX2JwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSwgYm9vbCBtbWFwYWJsZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3My17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDA4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDA5OnZvaWQgKmJwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxMC17XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MTE6XHRyZXR1cm4gX19icGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTItfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQxND12b2lkICpicGZfbWFwX2FyZWFfbW1hcGFibGVfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTUte1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NDE2Olx0cmV0dXJuIF9fYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIG51bWFfbm9kZSwgdHJ1ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzY3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBfX2JwZl9tYXBfYXJlYV9hbGxvY2AgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBsaW5lIDM3Mi4KCioqRGl2aW5nIGludG8gYF9fYnBmX21hcF9hcmVhX2FsbG9jYCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBfX2JwZl9tYXBfYXJlYV9hbGxvY2AgYXQgbGluZSAzNzIgb2YgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgdGhlIGNvcmUgYWxsb2NhdG9yIGZvciBCUEYgbWFwIGFyZWFzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIGl0cyBwbGFjZW1lbnQgd2l0aGluIHRoZSBCUEYgc3lzY2FsbCBjb2RlLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgYWxsb2NhdGlvbiBvZiBtZW1vcnkgcmVnaW9ucyB0aGF0IHdpbGwgaG9sZCB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggb3VyIEJQRiBtYXBzLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gV2hhdCBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGl0IHVzaW5nPyBJcyBpdCBzbGFiLCBidWRkeSwgb3Igc29tZXRoaW5nIGN1c3RvbSB0YWlsb3JlZCBmb3IgdGhlIEJQRiBzdWJzeXN0ZW0/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgYWxsb2NhdGlvbiBmbGFncyBvciBzdHJhdGVnaWVzIHRvIG9wdGltaXplIGZvciBCUEYmIzM5O3MgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgcmVxdWlyZW1lbnRzPyBJdCBpcyBhbHNvIGludGVyZXN0aW5nIHRvIHRoaW5rIGFib3V0IGFueSBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgYXJvdW5kIHRoaXMgYWxsb2NhdGlvbi4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBsb2NrcyBvciBjdXN0b20gb3B0aW1pemVkIGxvY2tzPyBBbmQgYWxzbywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYXBwZWFyPyBNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgY2hhcmFjdGVyaXN0aWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNzA6XHQgKiBtZW1vcnkgY2dyb3VwIChzZWUgYXQgYnBmX21hcF9rbWFsbG9jX25vZGUoKSBmb3IgZXhhbXBsZSkuXG4gMzcxOlx0ICovXG4gMzcyOlx0c3RhdGljIHZvaWQgKl9fYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlLCBib29sIG1tYXBhYmxlKVxuIDM3MzpcdHtcbiAzNzQ6XHRcdC8qIFdlIHJlYWxseSBqdXN0IHdhbnQgdG8gZmFpbCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgT09NIGtpbGxlclxuIDM3NTpcdFx0ICogdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB0aGVyZWZvcmUgd2Ugc2V0IF9fR0ZQX05PUkVUUlkgdG8ga21hbGxvYyxcbiAzNzY6XHRcdCAqIHdoaWNoIGlzIHVzZWQgZm9yIGxvd2VyIG9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuXG4gMzc3Olx0XHQgKlxuIDM3ODpcdFx0ICogSXQgaGFzIGJlZW4gb2JzZXJ2ZWQgdGhhdCBoaWdoZXIgb3JkZXIgYWxsb2NhdGlvbiByZXF1ZXN0cyBkb25lIGJ5XG4gMzc5Olx0XHQgKiB2bWFsbG9jIHdpdGggX19HRlBfTk9SRVRSWSBiZWluZyBzZXQgbWlnaHQgZmFpbCBkdWUgdG8gbm90IHRyeWluZ1xuIDM4MDpcdFx0ICogdG8gcmVjbGFpbSBtZW1vcnkgZnJvbSB0aGUgcGFnZSBjYWNoZSwgdGh1cyB3ZSBzZXRcbiAzODE6XHRcdCAqIF9fR0ZQX1JFVFJZX01BWUZBSUwgdG8gYXZvaWQgc3VjaCBzaXR1YXRpb25zLlxuIDM4MjpcdFx0ICovXG4gMzgzOlx0XG4gMzg0Olx0XHRnZnBfdCBnZnAgPSBicGZfbWVtY2dfZmxhZ3MoX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XG4gMzg1Olx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuIDM4NjpcdFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7XG4gMzg3Olx0XHR2b2lkICphcmVhO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKHNpemUgXHUwMDNlPSBTSVpFX01BWClcbiAzOTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzkxOlx0XG4gMzkyOlx0XHQvKiBrbWFsbG9jKCkmIzM5O2VkIG1lbW9yeSBjYW4mIzM5O3QgYmUgbW1hcCgpJiMzOTtlZCAqL1xuIDM5MzpcdFx0aWYgKG1tYXBhYmxlKSB7XG4gMzk0Olx0XHRcdEJVR19PTighUEFHRV9BTElHTkVEKHNpemUpKTtcbiAzOTU6XHRcdFx0YWxpZ24gPSBTSE1MQkE7XG4gMzk2Olx0XHRcdGZsYWdzID0gVk1fVVNFUk1BUDtcbiAzOTc6XHRcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2M9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSkge1xuIDM5ODpcdFx0XHRhcmVhID0ga21hbGxvY19ub2RlKHNpemUsIGdmcCB8IEdGUF9VU0VSIHwgX19HRlBfTk9SRVRSWSxcbiAzOTk6XHRcdFx0XHRcdCAgICBudW1hX25vZGUpO1xuIDQwMDpcdFx0XHRpZiAoYXJlYSAhPSBOVUxMKVxuIDQwMTpcdFx0XHRcdHJldHVybiBhcmVhO1xuIDQwMjpcdFx0fVxuIDQwMzpcdFxuIDQwNDpcdFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlKHNpemUsIGFsaWduLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbiA0MDU6XHRcdFx0XHRnZnAgfCBHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCwgUEFHRV9LRVJORUwsXG4gNDA2Olx0XHRcdFx0ZmxhZ3MsIG51bWFfbm9kZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiA0MDc6XHR9XG4gNDA4Olx0XG4gNDA5Olx0dm9pZCAqYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxuIDQxMDpcdHtcbiA0MTE6XHRcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcbiA0MTI6XHR9XG4gNDEzOlx0XG4gNDE0Olx0dm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODc3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gQlBGIFNvY2sgTWFwIEZyZWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAzODQgY2F1Z2h0IG15IGV5ZSwgc3BlY2lmaWNhbGx5IHRoZSBgX19HRlBfWkVST2AgZmxhZyBwYXNzZWQgdG8gYGJwZl9tZW1jZ19mbGFnc2AuIEl0IG1lYW5zIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBicGZfbWFwX2FyZWFfYWxsb2NgIGlzIGFsd2F5cyB6ZXJvLWluaXRpYWxpemVkLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIEJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgY3JpdGljYWwgcG9pbnQgaGVyZS4KClRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoeSB0aGUgY2hlY2sgYGF0dHItJmd0O21heF9lbnRyaWVzICZndDsgSU5UX01BWGAgd2FzIGFkZGVkIGluIHRoZSBmaXJzdCBwbGFjZT8gSXQgZ290IG1lIHRoaW5raW5nIGFib3V0IGhvdyBgbWF4X2VudHJpZXNgIGlzIHVzZWQsIHNwZWNpZmljYWxseSBpbiBgc29ja19tYXBfZnJlZWAuCgpgYGBjCnN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcCkKewoJc3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApOwoJaW50IGk7CgoJLyogQWZ0ZXIgdGhlIHN5bmMgbm8gdXBkYXRlcyBvciBkZWxldGVzIHdpbGwgYmUgaW4tZmxpZ2h0IHNvIGl0CgkgKiBpcyBzYWZlIHRvIHdhbGsgbWFwIGFuZCByZW1vdmUgZW50cmllcyB3aXRob3V0IHJpc2tpbmcgYSByYWNlCgkgKiBpbiBFRVhJU1QgdXBkYXRlIGNhc2UuCgkgKi8KCXN5bmNocm9uaXplX3JjdSgpOwoJZm9yIChpID0gMDsgaSAmbHQ7IHN0YWItJmd0O21hcC5tYXhfZW50cmllczsgaSYjNDM7JiM0MzspIHsKYGBgCgpTbywgYHN0YWItJmd0O21hcC5tYXhfZW50cmllc2AgaXMgYSBgdTMyYCwgYW5kIHRoZSBsb29wIGNvdW50ZXIgYGlgIGlzIGFuIGBpbnRgLiBJZiBgc3RhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzYCBpcyBpbmRlZWQgZ3JlYXRlciB0aGFuIGBJTlRfTUFYYCwgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGNvbXBhcmlzb24gYGkgJmx0OyBzdGFiLSZndDttYXAubWF4X2VudHJpZXNgIGlzIGltcGxpY2l0bHkgY29tcGFyaW5nIGFuIGBpbnRgIHRvIGEgYHUzMmAuIFRoZXkgd2lsbCBib3RoIGJlIGNvbnZlcnRlZCB0byBgdTMyYCBmb3IgdGhlIGNvbXBhcmlzb24sIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgcHJvYmxlbS4KClRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGxvb3AgaXRzZWxmLiBXaGVuIGBpYCBpbmNyZW1lbnRzIGZyb20gYDBgIHRvIGBJTlRfTUFYYCAoYDB4N2ZmZmZmZmZgKSwgdGhlIG5leHQgaW5jcmVtZW50IChgaSYjNDM7JiM0MztgKSBpcyBhIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93ISBJbiBHQ0MvQ2xhbmcgd2l0aCBVQlNBTiwgdGhpcyBpcyB1bmRlZmluZWQgYmVoYXZpb3IuIEV2ZW4gd29yc2UsIGlmIGBpYCB3cmFwcyB0byBhIG5lZ2F0aXZlIHZhbHVlLCBpdCBiZWNvbWVzIGEgbWFqb3IgcHJvYmxlbS4gRm9yIGV4YW1wbGUsIGlmIGl0IHdyYXBzIHRvIC0yMTQ3NDgzNjQ4LCB0aGVuIGAodTMyKWlgIGlzIDB4ODAwMDAwMDAuICBUaGVuLCB3aGVuIGBpYCByZWFjaGVzIC0xLCBgKHUzMilpYCBpcyAweGZmZmZmZmZmLgoKSWYgYG1heF9lbnRyaWVzYCBpcyBgMHhmZmZmZmZmZmAsIHRoZW4gYGlgIGxvb3BzIGJhY2sgdG8gMC4gSXQmIzM5O3MgYW4gaW5maW5pdGUgbG9vcCEgQWxzbywgdGhlIGluZGV4IGBpYCBpcyB1c2VkIGluIGBzdGFiLSZndDtza3NbaV1gLCB3aGVyZSBgaWAgaXMgYSBuZWdhdGl2ZSBpbnRlZ2VyLiBUaGlzIG1lYW5zIGBzdGFiLSZndDtza3MgJiM0MzsgKC0yMTQ3NDgzNjQ4KWAgaXMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYmVsb3cgYHN0YWItJmd0O3Nrc2AhIFRoaXMgaXMgYSBtZW1vcnkgYnVnLCBvciBpdCB0cmlnZ2VycyB0aGUgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3csIG9yIGl0IGlzIGFuIGluZmluaXRlIGxvb3AuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIG90aGVyIHBsYWNlcyB3aGVyZSBgbWF4X2VudHJpZXNgIGlzIHVzZWQgb3IgY29udmVydGVkIHRvIGFuIGBpbnRgLCBvciBjb21wYXJlZCB3aXRoIGFuIGBpbnRgLiBJIHNob3VsZCBjaGVjayBhbGwgdGhlIGNhbGxlcnMgb2YgYHNvY2tfbWFwX2FsbG9jYCBhcyB3ZWxsIGFzIHRoZSBCUEYgc3lzY2FsbCBpdHNlbGYsIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFyb3VuZCBgbWFwX2NyZWF0ZWAuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2NyZWF0ZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNjI5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTYzMDpzdGF0aWMgaW50IG1hcF9jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyICphdHRyX2NvbW1vbixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2MzEtXHRcdCAgICAgIGJwZnB0cl90IHVhdHRyX2NvbW1vbiwgdTMyIHNpemVfY29tbW9uKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2NjEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNjYyOlx0ZXJyID0gc2VjdXJpdHlfYnBmX21hcF9jcmVhdGUobWFwLCBhdHRyLCB0b2tlbiwgdWF0dHIuaXNfa2VybmVsKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2NjMtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNDMtXHRjYXNlIEJQRl9NQVBfQ1JFQVRFOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM0NDpcdFx0ZXJyID0gbWFwX2NyZWF0ZShcdTAwMjZhdHRyLCB1YXR0ciwgXHUwMDI2YXR0cl9jb21tb24sIHVhdHRyX2NvbW1vbiwgc2l6ZV9jb21tb24pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM0NS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTg2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIGBtYXBfY3JlYXRlYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2hlbiBhIG1hcCBpcyBjcmVhdGVkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgaW5zcGVjdCB0aGUgYG1hcF9jcmVhdGVgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFRoZW4sIEkgc2hvdWxkIGludmVzdGlnYXRlIGBtYXBfY3JlYXRlX2FsbG9jYC4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgYGFsbG9jYCBmdW5jdGlvbiBtYXkgaGFuZGxlIHRoZSBhY3R1YWwgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hcCYjMzk7cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG1hcF9jcmVhdGVgIGFuZCBgbWFwX2NyZWF0ZV9hbGxvY2AgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBmdWxsIGNyZWF0aW9uIHByb2Nlc3MsIHBhcnRpY3VsYXJseSBpbiBhIHN5c3RlbXMgY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW55IHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGhvdyB0aGV5IHJlbGF0ZS4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM4MjpcdHN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4xMzgzOlx0XHRcdFx0ICAgIHN0cnVjdCBicGZfbWFwICoqbWFwcCwgc3RydWN0IGJwZl90b2tlbiAqKnRva2VucClcbjEzODQ6XHR7XG4xMzg1Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgKm9wcztcbjEzODY6XHRcdHN0cnVjdCBicGZfdG9rZW4gKnRva2VuID0gTlVMTDtcbjEzODc6XHRcdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xuMTM4ODpcdFx0dTMyIG1hcF90eXBlID0gYXR0ci1cdTAwM2VtYXBfdHlwZTtcbjEzODk6XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG4xMzkwOlx0XHRib29sIHRva2VuX2ZsYWc7XG4xMzkxOlx0XHRpbnQgZXJyO1xuMTM5MjpcdFxuMTM5MzpcdFx0ZXJyID0gQ0hFQ0tfQVRUUihCUEZfTUFQX0NSRUFURSk7XG4xMzk0Olx0XHRpZiAoZXJyKSB7XG4xMzk1Olx0XHRcdGJwZl9sb2cobG9nLCBcJiMzNDtJbnZhbGlkIGF0dHIuXFxuXCYjMzQ7KTtcbjEzOTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzk3Olx0XHR9XG4xMzk4Olx0XG4xMzk5Olx0XHQvKiBjaGVjayBCUEZfRl9UT0tFTl9GRCBmbGFnLCByZW1lbWJlciBpZiBpdCYjMzk7cyBzZXQsIGFuZCB0aGVuIGNsZWFyIGl0XG4xNDAwOlx0XHQgKiB0byBhdm9pZCBwZXItbWFwIHR5cGUgY2hlY2tzIHRyaXBwaW5nIG9uIHVua25vd24gZmxhZ1xuMTQwMTpcdFx0ICovXG4xNDAyOlx0XHR0b2tlbl9mbGFnID0gYXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1RPS0VOX0ZEO1xuMTQwMzpcdFx0YXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2PSB+QlBGX0ZfVE9LRU5fRkQ7XG4xNDA0Olx0XG4xNDA1Olx0XHRpZiAoYXR0ci1cdTAwM2VidGZfdm1saW51eF92YWx1ZV90eXBlX2lkKSB7XG4xNDA2Olx0XHRcdGlmIChhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9TVFJVQ1RfT1BTKSB7XG4xNDA3Olx0XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O2J0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHN0cnVjdF9vcHMgbWFwcy5cXG5cJiMzNDspO1xuMTQwODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQwOTpcdFx0XHR9XG4xNDEwOlx0XHRcdGlmIChhdHRyLVx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCB8fCBhdHRyLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKSB7XG4xNDExOlx0XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O2J0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYnRmX2tleV90eXBlX2lkIGFuZCBidGZfdmFsdWVfdHlwZV9pZC5cXG5cJiMzNDspO1xuMTQxMjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQxMzpcdFx0XHR9XG4xNDE0Olx0XHR9IGVsc2UgaWYgKGF0dHItXHUwMDNlYnRmX2tleV90eXBlX2lkIFx1MDAyNlx1MDAyNiAhYXR0ci1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCkge1xuMTQxNTpcdFx0XHRicGZfbG9nKGxvZywgXCYjMzQ7SW52YWxpZCBidGZfdmFsdWVfdHlwZV9pZC5cXG5cJiMzNDspO1xuMTQxNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MTc6XHRcdH1cbjE0MTg6XHRcbjE0MTk6XHRcdGlmIChhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9CTE9PTV9GSUxURVIgXHUwMDI2XHUwMDI2XG4xNDIwOlx0XHQgICAgYXR0ci1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJFTkEgXHUwMDI2XHUwMDI2XG4xNDIxOlx0XHQgICAgYXR0ci1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBgbWFwX2NyZWF0ZV9hbGxvY2AqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtYXBfY3JlYXRlX2FsbG9jYC4gVGhpcyBzdWdnZXN0cyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGFyZWEgd2l0aGluIG91ciBtYXBwaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRoYXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTt2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGlzc3VlIG9yIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayByZWxhdGVkIHRvIGhvdyB3ZSYjMzk7cmUgY3JlYXRpbmcgYW5kIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBvdXIgbWFwcywgcG90ZW50aWFsbHkgc3RlbW1pbmcgZnJvbSB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYWxsb2NhdG9yIGl0c2VsZi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhIGZldyB0aGluZ3M6IEFyZSB3ZSBpbml0aWFsaXppbmcgdGhlIG1hcHMgZWZmaWNpZW50bHk/IElzIHRoZXJlIGFueSByZWR1bmRhbnQgYWxsb2NhdGlvbiBoYXBwZW5pbmc/IENvdWxkIHRoZXJlIGJlIGFueSBtZW1vcnkgbGVha3MgbHVya2luZyB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgdGhlIGltcGFjdCBvZiBsb2NraW5nIChpZiBhbnkpIGFuZCBob3cgd2UgbWlnaHQgb3B0aW1pemUgZm9yIHBhcmFsbGVsIGFjY2Vzcy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIHByZWNpc2Ugc291cmNlIG9mIHdoYXRldmVyIGlycmVndWxhcml0eSB3ZSYjMzk7dmUgZGV0ZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjI6XHRcdCAgICBhdHRyLVx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XG4xNDIzOlx0XHRcdGJwZl9sb2cobG9nLCBcJiMzNDtJbnZhbGlkIG1hcF9leHRyYS5cXG5cJiMzNDspO1xuMTQyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0MjU6XHRcdH1cbjE0MjY6XHRcbjE0Mjc6XHRcdGlmIChudW1hX25vZGUgIT0gTlVNQV9OT19OT0RFIFx1MDAyNlx1MDAyNlxuMTQyODpcdFx0ICAgICgodW5zaWduZWQgaW50KW51bWFfbm9kZSBcdTAwM2U9IG5yX25vZGVfaWRzIHx8XG4xNDI5Olx0XHQgICAgICFub2RlX29ubGluZShudW1hX25vZGUpKSkge1xuMTQzMDpcdFx0XHRicGZfbG9nKGxvZywgXCYjMzQ7SW52YWxpZCBudW1hX25vZGUuXFxuXCYjMzQ7KTtcbjE0MzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDMyOlx0XHR9XG4xNDMzOlx0XG4xNDM0Olx0XHQvKiBmaW5kIG1hcCB0eXBlIGFuZCBpbml0IG1hcDogaGFzaHRhYmxlIHZzIHJidHJlZSB2cyBibG9vbSB2cyAuLi4gKi9cbjE0MzU6XHRcdG1hcF90eXBlID0gYXR0ci1cdTAwM2VtYXBfdHlwZTtcbjE0MzY6XHRcdGlmIChtYXBfdHlwZSBcdTAwM2U9IEFSUkFZX1NJWkUoYnBmX21hcF90eXBlcykpIHtcbjE0Mzc6XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O0ludmFsaWQgbWFwX3R5cGUuXFxuXCYjMzQ7KTtcbjE0Mzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDM5Olx0XHR9XG4xNDQwOlx0XHRtYXBfdHlwZSA9IGFycmF5X2luZGV4X25vc3BlYyhtYXBfdHlwZSwgQVJSQVlfU0laRShicGZfbWFwX3R5cGVzKSk7XG4xNDQxOlx0XHRvcHMgPSBicGZfbWFwX3R5cGVzW21hcF90eXBlXTtcbjE0NDI6XHRcdGlmICghb3BzKVxuMTQ0MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0NDQ6XHRcbjE0NDU6XHRcdGlmIChvcHMtXHUwMDNlbWFwX2FsbG9jX2NoZWNrKSB7XG4xNDQ2Olx0XHRcdGVyciA9IG9wcy1cdTAwM2VtYXBfYWxsb2NfY2hlY2soYXR0cik7XG4xNDQ3Olx0XHRcdGlmIChlcnIpXG4xNDQ4Olx0XHRcdFx0cmV0dXJuIGVycjtcbjE0NDk6XHRcdH1cbjE0NTA6XHRcdGlmIChhdHRyLVx1MDAzZW1hcF9pZmluZGV4KVxuMTQ1MTpcdFx0XHRvcHMgPSBcdTAwMjZicGZfbWFwX29mZmxvYWRfb3BzO1xuMTQ1MjpcdFx0aWYgKCFvcHMtXHUwMDNlbWFwX21lbV91c2FnZSlcbjE0NTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDU0Olx0XG4xNDU1Olx0XHRpZiAodG9rZW5fZmxhZykge1xuMTQ1NjpcdFx0XHR0b2tlbiA9IGJwZl90b2tlbl9nZXRfZnJvbV9mZChhdHRyLVx1MDAzZW1hcF90b2tlbl9mZCk7XG4xNDU3Olx0XHRcdGlmIChJU19FUlIodG9rZW4pKSB7XG4xNDU4Olx0XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O0ludmFsaWQgbWFwX3Rva2VuX2ZkLlxcblwmIzM0Oyk7XG4xNDU5Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIodG9rZW4pO1xuMTQ2MDpcdFx0XHR9XG4xNDYxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDgxCgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDg0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYHNvY2tfbWFwX2FsbG9jYCBQYXRjaCBhbmQgS01TQU4gUmVxdWlyZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjayB3aXRoaW4gYHNvY2tfbWFwX2FsbG9jYDogYGF0dHItJmd0O21heF9lbnRyaWVzICZndDsgSU5UX01BWGAuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIHNpemUgbGltaXQgb24gdGhlIGBtYXhfZW50cmllc2AgdmFsdWUuIEJlZm9yZSwgdGhlIGNvZGUgbWlnaHQgaGF2ZSBwcm9jZWVkZWQgd2l0aCBhIHByb2JsZW1hdGljIGBtYXhfZW50cmllc2AgdmFsdWUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW50ZWdlciBvdmVyZmxvdywgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHJlc291cmNlIGV4aGF1c3Rpb24gbGF0ZXIgb24g4oCTIHNheSwgaW4gYHNvY2tfbWFwX2ZyZWVgIG9yIGR1cmluZyBhbGxvY2F0aW9uIGl0c2VsZi4KCk5vdywgdGhpcyBwYXRjaCAqcmVqZWN0cyogb3ZlcnNpemVkIGBtYXhfZW50cmllc2AgdmFsdWVzIHJpZ2h0IGF0IHRoZSBhbGxvY2F0aW9uIHN0YWdlLCByZXR1cm5pbmcgYC1FSU5WQUxgLiAgTXkgam9iIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgY2hlY2suCgpGaXJzdCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIHJpc2tzLiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQmIzM5O3MgKmFkZGluZyogaW5wdXQgdmFsaWRhdGlvbi4gRG9lcyBpdCBhZmZlY3QgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlPyBOby4gRG9lcyBpdCB0b3VjaCBwYWRkaW5nLCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgb3IgaGVhcCBtZW1vcnkgaW4gYSBkYW5nZXJvdXMgd2F5PyBOby4gSXMgaXQgYWx0ZXJpbmcgYW55IGJvdW5kcyBjaGVja3MgaW4gYSBtYW5uZXIgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCYjMzk7cyBtYWtpbmcgdGhlIGJvdW5kcyAqdGlnaHRlciouIEluIGVmZmVjdCwgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgYWxsb2NhdGlvbiBvZiBleGNlc3NpdmVseSBsYXJnZSwgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgbWFwcy4KCkkgaGF2ZSB0aGUgS01TQU4gZ3VpZGVsaW5lcyBpbiBmcm9udCBvZiBtZSwgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZS4gVGhlIHJ1bGVzIHN0YXRlIEtNU0FOIGlzIG5lZWRlZCB3aGVuIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciB0aGUgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgZml0IHRoZXNlIGNhdGVnb3JpZXMuIFRoZSBwYXRjaCBhbHNvIGRvZXMgbm90IGludm9sdmUgYm91bmRzIGNoZWNrIG1vZGlmaWNhdGlvbiB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZSBwYXRjaCYjMzk7cyBwcmltYXJ5IGNvbmNlcm4gaXMgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93LCBvdmVyc2l6ZWQgYWxsb2NhdGlvbnMsIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZHVlIHRvIGEgdG9vLWxhcmdlIG1hcCBzaXplIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL1VCU0FOLiBUaGVzZSBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4KClRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIEtNU0FOIGNyaXRlcmlhLCBOZWVkc0tNU0FOID0gZmFsc2UuICBUaGlzIGlzIGEgc2FmZSBjaGFuZ2UgdGhhdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTttIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayAoYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgKSBpbiBgc29ja19tYXBfYWxsb2MoKWAgdG8gcmVqZWN0IG1hcCBjcmVhdGlvbiB3aGVuIGBtYXhfZW50cmllc2AgZXhjZWVkcyBgSU5UX01BWGAuIFRoaXMgcHJldmVudHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiBpbiBgc29ja19tYXBfZnJlZSgpYCB3aGVyZSBhIHNpZ25lZCBgaW50IGlgIGlzIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBtYXAgZW50cmllcykuIFxuXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayAoYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgKSBpbiBgc29ja19tYXBfYWxsb2MoKWAgdG8gcmVqZWN0IG1hcCBjcmVhdGlvbiB3aGVuIGBtYXhfZW50cmllc2AgZXhjZWVkcyBgSU5UX01BWGAuIFRoaXMgcHJldmVudHMgc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiBpbiBgc29ja19tYXBfZnJlZSgpYCB3aGVyZSBhIHNpZ25lZCBgaW50IGlgIGlzIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBtYXAgZW50cmllcykuIFxuXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6MzkuNzE3NDc1OTE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyNDY1NDkyNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2NrX21hcF9hbGxvY1wiLFxuICAgIFwic29ja19tYXBfZnJlZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYYCkgaW4gYHNvY2tfbWFwX2FsbG9jKClgIHRvIHJlamVjdCBtYXAgY3JlYXRpb24gd2hlbiBgbWF4X2VudHJpZXNgIGV4Y2VlZHMgYElOVF9NQVhgLiBUaGlzIHByZXZlbnRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGUuZy4gaW4gYHNvY2tfbWFwX2ZyZWUoKWAgd2hlcmUgYSBzaWduZWQgYGludCBpYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbWFwIGVudHJpZXMpLiBcXG5cXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2NrX21hcF9hbGxvYygpIGluIG5ldC9jb3JlL3NvY2tfbWFwLmMgYnkgYWRkaW5nIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIChyZWplY3RpbmcgdmFsdWVzIFxcdTAwM2UgSU5UX01BWCkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQX0NSRUFURSBhbmQgQlBGX01BUF9UWVBFX1NPQ0tNQVAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoaXMgcGF0aCBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdmFsaWRhdGlvbiBib3VuZGFyaWVzLCBlcnJvciBoYW5kbGluZywgYW5kIGxpZmVjeWNsZSBiZWhhdmlvciBvZiBCUEYgc29ja21hcHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjM5LjcxNzQ4Mjc5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0NzY0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDRiYmVhZjdiNTFhMjMzZDU5ODQ5ZWJjNWU4Njk2Zjg4NDM2YmVlZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAwODo1NjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xcbmluZGV4IGNhNDliYzdmODY4N2MuLjM4ZGY4NDI4NDMyODkgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5AQCAtNDEsNiArNDEsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWI7XFxuIFxcbiBcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbitcXHQgICAgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYIHx8XFxuIFxcdCAgICBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XFxuIFxcdCAgICAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIGF0dHItXFx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHU2NCkpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjQwLjIzMzE2NDk2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTk1MzYzNzEzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX2FsbG9jXCIsXG4gICAgXCJzb2NrX21hcF9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja19tYXBfYWxsb2MoKSBpbiBuZXQvY29yZS9zb2NrX21hcC5jIGJ5IGFkZGluZyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyAocmVqZWN0aW5nIHZhbHVlcyBcXHUwMDNlIElOVF9NQVgpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHdpdGggQlBGX01BUF9DUkVBVEUgYW5kIEJQRl9NQVBfVFlQRV9TT0NLTUFQIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyB0aGlzIHBhdGggaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHZhbGlkYXRpb24gYm91bmRhcmllcywgZXJyb3IgaGFuZGxpbmcsIGFuZCBsaWZlY3ljbGUgYmVoYXZpb3Igb2YgQlBGIHNvY2ttYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0YmJlYWY3YjUxYTIzM2Q1OTg0OWViYzVlODY5NmY4ODQzNmJlZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwODo1NjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5pbmRleCBjYTQ5YmM3Zjg2ODdjLi4zOGRmODQyODQzMjg5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xuKysrIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuQEAgLTQxLDYgKzQxLDcgQEAgc3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdHN0cnVjdCBicGZfc3RhYiAqc3RhYjtcbiBcbiBcdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcbitcdCAgICBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYIHx8XG4gXHQgICAgYXR0ci1cdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XG4gXHQgICAgKGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgYXR0ci1cdTAwM2V2YWx1ZV9zaXplICE9IHNpemVvZih1NjQpKSB8fFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6NDAuMjMzMTY2OTU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODU1MzAwNzUzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQuIEknbGwgdXNlIGBncmVwcGVyYCAob3IgYHJlYWQtZmlsZWAgaWYgdGhlIGNvbnRleHQgZGVtYW5kcyBpdCkgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiB3aXRoaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG1vZGlmaWNhdGlvbi5cblxuVGhlIGBkaWZmYCBpdHNlbGYgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgSSBzZWUgdGhleSd2ZSBhZGRlZCBhIGNoZWNrOiBgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWGAuIEFoLCByaWdodCwgdGhhdCdzIGNydWNpYWwuIFdlJ3JlIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSB3aGVuIGFsbG9jYXRpbmcgdGhlIHNvY2sgbWFwLiBBbHdheXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNpemVzIGFuZCBhbGxvY2F0aW9ucywgcGFydGljdWxhcmx5IGluIGEga2VybmVsIGNvbnRleHQuIEkgcmVtZW1iZXIgd2UgaGFkIGEgc2ltaWxhciBkaXNjdXNzaW9uIGEgd2hpbGUgYmFjayB3aXRoLi4uIGhtbSwgbmV2ZXIgbWluZC5cblxuTm93IEkgbmVlZCBhIGJpdCBtb3JlIGNvbnRleHQuIExldCBtZSBxdWlja2x5IGp1bXAgdG8gbGluZSA0MSBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgc3BlY2lmaWMgY2hlY2sgaXMgYmVpbmcgaW50cm9kdWNlZC4gV2hhdCdzIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgbGlrZT8gSG93IGlzIGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzYCB1c2VkPyBJcyBpdCBkaXJlY3RseSB1c2VkIGluIGEgbWVtb3J5IGFsbG9jYXRpb24sIG9yIGlzIGl0IHVzZWQgaW4gYW4gYXJpdGhtZXRpYyBjYWxjdWxhdGlvbj8gVGhhdCdzIHdoYXQgSSB3YW50IHRvIGVzdGFibGlzaC4gVW5kZXJzdGFuZGluZyB0aGUgKndoeSogaXMgbW9yZSBpbXBvcnRhbnQgdGhhbiB0aGUgKndoYXQqIGluIHRoaXMgY2FzZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Njo0OC43ODYxNzY1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdCAqIEEgc2luZ2xlIGdsb2JhbCBtdXRleCBsb2NrIGlzIHVzZWQgc2luY2UgaXQgaXMgZXhwZWN0ZWQgY29udGVudGlvbiBpcyBsb3cuXFxuICAzMTpcXHQgKi9cXG4gIDMyOlxcdHN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XFxuICAzMzpcXHRcXG4gIDM0OlxcdHN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiAgMzU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gIDM2OlxcdFxcdFxcdFxcdFxcdHUzMiB3aGljaCk7XFxuICAzNzpcXHRzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4gIDQwOlxcdHtcXG4gIDQxOlxcdFxcdHN0cnVjdCBicGZfc3RhYiAqc3RhYjtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0aWYgKGF0dHItXFx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcXG4gIDQ0OlxcdFxcdCAgICBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyBcXHUwMDNlIElOVF9NQVggfHxcXG4gIDQ1OlxcdFxcdCAgICBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAgICAhPSA0IHx8XFxuICA0NjpcXHRcXHQgICAgKGF0dHItXFx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHUzMikgXFx1MDAyNlxcdTAwMjZcXG4gIDQ3OlxcdFxcdCAgICAgYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHxcXG4gIDQ4OlxcdFxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiB+U09DS19DUkVBVEVfRkxBR19NQVNLKVxcbiAgNDk6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdHN0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpzdGFiKSwgTlVNQV9OT19OT0RFKTtcXG4gIDUyOlxcdFxcdGlmICghc3RhYilcXG4gIDUzOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRicGZfbWFwX2luaXRfZnJvbV9hdHRyKFxcdTAwMjZzdGFiLVxcdTAwM2VtYXAsIGF0dHIpO1xcbiAgNTY6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN0YWItXFx1MDAzZWxvY2spO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRzdGFiLVxcdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcXG4gIDU5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2sgKiksXFxuICA2MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RhYi1cXHUwMDNlbWFwLm51bWFfbm9kZSk7XFxuICA2MTpcXHRcXHRpZiAoIXN0YWItXFx1MDAzZXNrcykge1xcbiAgNjI6XFx0XFx0XFx0YnBmX21hcF9hcmVhX2ZyZWUoc3RhYik7XFxuICA2MzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gIDY0OlxcdFxcdH1cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0cmV0dXJuIFxcdTAwMjZzdGFiLVxcdTAwM2VtYXA7XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4gIDcyOlxcdFxcdGludCByZXQ7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdGlmIChhdHRyLVxcdTAwM2VhdHRhY2hfZmxhZ3MgfHwgYXR0ci1cXHUwMDNlcmVwbGFjZV9icGZfZmQpXFxuICA3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0Q0xBU1MoZmQsIGYpKGF0dHItXFx1MDAzZXRhcmdldF9mZCk7XFxuICA3ODpcXHRcXHRtYXAgPSBfX2JwZl9tYXBfZ2V0KGYpO1xcbiAgNzk6XFx0XFx0aWYgKElTX0VSUihtYXApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Njo0OC43ODYyNzkwNzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODIxMzYwMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIEJQRiBTb2NrbWFwIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc29ja19tYXBfYWxsb2NgLCBhbmQgaXQncyBjbGVhciB0aGlzIGlzIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGZvciBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBzb2NrX2hhc2hfYWxsb2NgLiBHaXZlbiB0aGUgc2ltaWxhcml0eSBpbiBwdXJwb3NlLCBJJ20gYmV0dGluZyB0aGF0IHRoZSBoYXNoIHZlcnNpb24gaXMgYWxzbyBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIEJlc3QgdG8ganVzdCBjb25maXJtIHRoYXQgcXVpY2tseSB0byBidWlsZCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjUwLjYwNzY0MTI5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzI5MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMxPUJURl9JRF9MSVNUX1NJTkdMRShzb2NrX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9zdGFiKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODMyOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjUwLjY1NTM3ODA3N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4OTcyNDAxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBTb2NrbWFwIEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYHNvY2tfbWFwX2FsbG9jYC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiB3ZSdyZSBzZXR0aW5nIHVwIGEgQlBGIHNvY2ttYXAg4oCTIHNwZWNpZmljYWxseSwgZHVyaW5nIHRoZSBgYnBmKEJQRl9NQVBfQ1JFQVRFLCAuLi4pYCBjYWxsIHdpdGggdGhlIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgbWFwIHR5cGUuIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgdGhlIGtlcm5lbCBuZWVkcyBlbmFibGVkIHRvIG1ha2UgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHdvcmsuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5IGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6NTIuNTUyNjIwMzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMTQ2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Njo1Mi42MDE2NDAyMDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzU2OTQ1NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub2AuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBpbnR1aXRpb24ga2lja3MgaW4uIFRoaXMgdGVsbHMgbWUgdGhhdCB0aGUgb2JqZWN0IGZpbGUgYHNvY2tfbWFwLm9gIGlzIG9ubHkgZ29pbmcgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWd1cmF0aW9ucyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHJlbGF0ZWQgdG8gKmVpdGhlciogdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiAqb3IqIGBzb2NrX21hcGAgaXRzZWxmIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIE15IG5leHQgYWN0aW9uIHRoZW4gaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHNwZWNpZmljYWxseSBzZWFyY2hpbmcgZm9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gYEJQRl9TWVNDQUxMYCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIHBvdGVudGlhbGx5IGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGZlYXR1cmVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gQWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBicm9hZGVyIGNvbnRleHQgYmVmb3JlIG1ha2luZyBhbnkgZGVjaXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6NTUuOTU4NTg4MjgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI4NjAyNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTY6NTYuMDA1ODgzMTc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0ODQzMzEzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZGlnIGludG8gaG93IHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBzZWFyY2hpbmcgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0IGFyZSBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzZWFyY2ggZm9yIGBjb25maWcgQlBGX1NZU0NBTExgLiBUaGF0J3MgdGhlIGtleXdvcmQgSSBuZWVkLiBUaGlzIHNob3VsZCBwaW5wb2ludCBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWNsYXJlZCBhbmQgdXNlZC4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiBpdHMgZGVwZW5kZW5jaWVzLCB3aGV0aGVyIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLCBhbmQgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24uIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU2OjU4LjQ5MDIxNzU1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNzkwODUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzowMC4zMDgxMzE4MTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzIyMDk3ODMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipCUEYgQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBkZWZpbmUgd2hhdCBCUEYgZnVuY3Rpb25hbGl0eSBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgd2hhdCBtb2R1bGVzIGFyZSBhdmFpbGFibGUsIGFuZCBwb3RlbnRpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIExpbmUgMjUgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSwgZW5hYmxpbmcgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBzZXR0aW5nIHVwIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAuIEknbSBhbnRpY2lwYXRpbmcgZmluZGluZyBzb21lIGRldGFpbHMgb24gd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIHVzaW5nIEJQRiwgb3Igd2hhdCBhcmUgZGVwZW5kZW50IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6MDcuNTI5MTEzNDkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzowNy41MjkyMDkyODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE3NzQzODI2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgU3lzY2FsbCBhbmQgU29ja2V0IE1hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGBCUEZfU1lTQ0FMTGAgaXMgYSBib29sZWFuLCBhbmQgaWYgaXQncyB0cnVlLCBpdCBlbmFibGVzIHRoZSBgYnBmKClgIHN5c3RlbSBjYWxsLiBJdCAqYWxzbyogc2VlbXMgdG8gdHJpZ2dlciB0aGUgYE5FVF9TT0NLX01TR2Agc2V0dGluZyBpZiB0aGUgYE5FVGAgb3B0aW9uIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBNeSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoZSBgc29ja19tYXAuY2AgZmlsZSBpbnRlcmFjdHMgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEkgd2FudCB0byBkZXRlcm1pbmUgaWYgaXRzIGJlaGF2aW9yIGlzIGRpcmVjdGx5IGdhdGVkIGJ5IGBCUEZfU1lTQ0FMTGAsIG9yIGlmIGl0IHJlbGllcyBvbiBvdGhlciBjb25kaXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gVG8gc3RhcnQsIEknbGwgZ28gYWhlYWQgYW5kIHJldmlldyB0aGUgZmlyc3QgNDAgbGluZXMgb2YgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHRvIGxvb2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyBvciBpbmNsdWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6MTkuMzAzNTk0NzkzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggQ292YWxlbnQgSU8sIEluYy4gaHR0cDovL2NvdmFsZW50LmlvICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsdGVyLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0LmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2ttc2cuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvamhhc2guaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrX2RpYWcuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdWRwLmhcXHUwMDNlXFxuICAxNjpcXHRcXG4gIDE3OlxcdHN0cnVjdCBicGZfc3RhYiB7XFxuICAxODpcXHRcXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxuICAxOTpcXHRcXHRzdHJ1Y3Qgc29jayAqKnNrcztcXG4gIDIwOlxcdFxcdHN0cnVjdCBza19wc29ja19wcm9ncyBwcm9ncztcXG4gIDIxOlxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gIDIyOlxcdH07XFxuICAyMzpcXHRcXG4gIDI0OlxcdCNkZWZpbmUgU09DS19DUkVBVEVfRkxBR19NQVNLXFx0XFx0XFx0XFx0XFxcXFxcbiAgMjU6XFx0XFx0KEJQRl9GX05VTUFfTk9ERSB8IEJQRl9GX1JET05MWSB8IEJQRl9GX1dST05MWSlcXG4gIDI2OlxcdFxcbiAgMjc6XFx0LyogVGhpcyBtdXRleCBpcyB1c2VkIHRvXFxuICAyODpcXHQgKiAgLSBwcm90ZWN0IHJhY2UgYmV0d2VlbiBwcm9nL2xpbmsgYXR0YWNoL2RldGFjaCBhbmQgbGluayBwcm9nIHVwZGF0ZSwgYW5kXFxuICAyOTpcXHQgKiAgLSBwcm90ZWN0IHJhY2UgYmV0d2VlbiByZWxlYXNpbmcgYW5kIGFjY2Vzc2luZyBtYXAgaW4gYnBmX2xpbmsuXFxuICAzMDpcXHQgKiBBIHNpbmdsZSBnbG9iYWwgbXV0ZXggbG9jayBpcyB1c2VkIHNpbmNlIGl0IGlzIGV4cGVjdGVkIGNvbnRlbnRpb24gaXMgbG93LlxcbiAgMzE6XFx0ICovXFxuICAzMjpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gIDM1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuICAzNjpcXHRcXHRcXHRcXHRcXHR1MzIgd2hpY2gpO1xcbiAgMzc6XFx0c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCk7XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuICA0MDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjE5LjMwMzcwNjk2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDA3OTIxNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU29jayBNYXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGNvbW1pdCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYCB3aXRoaW4gYHNvY2tfbWFwX2FsbG9jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aHkgc3BlY2lmaWNhbGx5IGBJTlRfTUFYYD8gV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgdXBwZXIgYm91bmQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsaW1pdC5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBgbWF4X2VudHJpZXNgIGFuZCBgYXR0ci1cdTAwM2VtYXhfZW50cmllc2AgYXJlIHVzZWQgdGhyb3VnaG91dCBgc29ja19tYXAuY2AuIEEgcXVpY2sgZ3JlcCB3aXRoaW4gdGhhdCBmaWxlIGZvciBcIm1heF9lbnRyaWVzXCIgc2hvdWxkIGlsbHVtaW5hdGUgYWxsIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRoYXQgd2lsbCB0ZWxsIHRoZSBzdG9yeSBvZiB0aGlzIHBhdGNoLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzoyMS4zMTE2MzI2MDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODI3MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heF9lbnRyaWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQzOlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XFxubmV0L2NvcmUvc29ja19tYXAuYzo0NDpcXHQgICAgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYIHx8XFxubmV0L2NvcmUvc29ja19tYXAuYy00NS1cXHQgICAgYXR0ci1cXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU4OlxcdHN0YWItXFx1MDAzZXNrcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKlxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTktXFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MzQwPXN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzQ5LVxcdHN5bmNocm9uaXplX3JjdSgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzUwOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKykge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUxLVxcdFxcdHN0cnVjdCBzb2NrICoqcHNrID0gXFx1MDAyNnN0YWItXFx1MDAzZXNrc1tpXTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzc4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODMtXFxubmV0L2NvcmUvc29ja19tYXAuYzozODQ6XFx0aWYgKHVubGlrZWx5KGtleSBcXHUwMDNlPSBtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4NS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NDQzPXN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQ4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQ5OlxcdGlmICh1bmxpa2VseShpIFxcdTAwM2U9IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUwLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz00NTY9c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00NjEtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NjI6XFx0aWYgKGkgPT0gc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzIC0gMSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2My1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ2NDpcXHRpZiAoaSBcXHUwMDNlPSBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXMpXFxubmV0L2NvcmUvc29ja19tYXAuYy00NjUtXFx0XFx0KmtleV9uZXh0ID0gMDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NDcxPXN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00ODItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2NvcmUvc29ja19tYXAuYzo0ODM6XFx0aWYgKHVubGlrZWx5KGlkeCBcXHUwMDNlPSBtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4NC1cXHRcXHRyZXR1cm4gLUUyQklHO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz03MjQ9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjUte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzI2OlxcdGlmICh1bmxpa2VseShpbmZvLVxcdTAwM2VpbmRleCBcXHUwMDNlPSBpbmZvLVxcdTAwM2VtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNy1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODE2PXN0YXRpYyB1NjQgc29ja19tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgxOS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyMDpcXHR1c2FnZSArPSAodTY0KW1hcC1cXHUwMDNlbWF4X2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHNvY2sgKik7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MjEtXFx0cmV0dXJuIHVzYWdlO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05Njc9c3RhdGljIHN0cnVjdCBicGZfc2h0YWJfZWxlbSAqc29ja19oYXNoX2FsbG9jX2VsZW0oc3RydWN0IGJwZl9zaHRhYiAqaHRhYixcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTczLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTc0OlxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2aHRhYi1cXHUwMDNlY291bnQpIFxcdTAwM2UgaHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzKSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy05NzUtXFx0XFx0aWYgKCFvbGQpIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA5OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfaGFzaF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTEwMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDQ6XFx0aWYgKGF0dHItXFx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDUtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgID09IDAgfHxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTExOC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMTk6XFx0aHRhYi1cXHUwMDNlYnVja2V0c19udW0gPSByb3VuZHVwX3Bvd19vZl90d28oaHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMjAtXFx0aHRhYi1cXHUwMDNlZWxlbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfc2h0YWJfZWxlbSkgK1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzoyMS4zNjQ0NjYzNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU4MDI4MjA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBzb2NrX21hcF9mcmVlYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzb2NrX21hcF9mcmVlYCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoYXQgYGlgIHZhcmlhYmxlIGluIHRoZSBsb29wLiBUaGUgY29kZSBzbmlwcGV0IHN0YXJ0cyB3aXRoIGBzeW5jaHJvbml6ZV9yY3UoKWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3RlbnRpYWwgUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZS4gSSdtIHNlZWluZyBhIGBmb3JgIGxvb3AsIGxpa2VseSBpdGVyYXRpbmcgdGhyb3VnaCBzb21lIGtpbmQgb2YgdGFibGUgb3IgbWFwLCBnaXZlbiB0aGUgY29udGV4dC4gVGhlIGNydWNpYWwgbGluZSB0byB1bmRlcnN0YW5kIHdoYXQgYGlgIGlzIGluIHRoZSBgZm9yYCBsb29wIGlzOiBgZm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKylgLlxuXG5JIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGNvZGUgdGhhdCByZXF1aXJlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgaW4gcGFydGljdWxhciB0aGUgYHN0YWItXHUwMDNlbWFwYCBzdHJ1Y3QsIHRvIGluZmVyIGBpYCdzIHR5cGUgKGdpdmVuIGl0J3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhpcyBzbmlwcGV0KS4gSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBgc29ja19tYXBfZnJlZWAgdG8gY29uZmlybSwgbGV0IG1lIHB1bGwgdXAgbGluZXMgMzQwLTM2MCB0byBzZWUgaWYgSSBjYW4gaW5mZXIgaXQgZnJvbSB0aGUgY29udGV4dCBvZiB3aGVyZSB0aGUgbG9vcCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6MjQuOTQ0NzUxODY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRzdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuIDM0MTpcXHR7XFxuIDM0MjpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XFxuIDM0MzpcXHRcXHRpbnQgaTtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0LyogQWZ0ZXIgdGhlIHN5bmMgbm8gdXBkYXRlcyBvciBkZWxldGVzIHdpbGwgYmUgaW4tZmxpZ2h0IHNvIGl0XFxuIDM0NjpcXHRcXHQgKiBpcyBzYWZlIHRvIHdhbGsgbWFwIGFuZCByZW1vdmUgZW50cmllcyB3aXRob3V0IHJpc2tpbmcgYSByYWNlXFxuIDM0NzpcXHRcXHQgKiBpbiBFRVhJU1QgdXBkYXRlIGNhc2UuXFxuIDM0ODpcXHRcXHQgKi9cXG4gMzQ5OlxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiAzNTA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllczsgaSsrKSB7XFxuIDM1MTpcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqKnBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxuIDM1MjpcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDM1MzpcXHRcXG4gMzU0OlxcdFxcdFxcdHNrID0geGNoZyhwc2ssIE5VTEwpO1xcbiAzNTU6XFx0XFx0XFx0aWYgKHNrKSB7XFxuIDM1NjpcXHRcXHRcXHRcXHRzb2NrX2hvbGQoc2spO1xcbiAzNTc6XFx0XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gMzU4OlxcdFxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzU5OlxcdFxcdFxcdFxcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xcbiAzNjA6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM2MTpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiAzNjI6XFx0XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbiAzNjM6XFx0XFx0XFx0fVxcbiAzNjQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzoyNC45NDQ4NzY1NzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzM5MzM5NDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbW1lZGlhdGUgQ29uY2VybnMgUmVnYXJkaW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIEl0ZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbG9vcDogYGludCBpO2AgYW5kIGBpIFx1MDAzYyBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllczsgaSsrYC4gTXkgYWxhcm0gYmVsbHMgYXJlIHJpbmdpbmcgaW1tZWRpYXRlbHkuIElmIGBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2AgaXMgYSBgdTMyYCAoYXMgdGhlIGNvZGUgaW1wbGllcywgbGlrZWx5IGZyb20gYGF0dHItXHUwMDNlbWF4X2VudHJpZXNgKSwgYnV0IGBpYCBpcyBhIHN0YW5kYXJkIGBpbnRgLCB3ZSBoYXZlIGEgc2VyaW91cyBwb3RlbnRpYWwgZm9yIGFuIGludGVnZXIgb3ZlcmZsb3cuIFNwZWNpZmljYWxseSwgaWYgYHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzYCBpcyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBgSU5UX01BWGAsIHRoZSBpdGVyYXRpb24gdmFyaWFibGUgYGlgIGNhbiBlYXNpbHkgd3JhcCBhcm91bmQgb3IgYmVoYXZlIGluIHVuZXhwZWN0ZWQgd2F5cy5cblxuVGhlIGNydXggb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgY29tcGFyaXNvbi4gSW4gQywgd2hlbiBjb21wYXJpbmcgYSBzaWduZWQgYGludGAgKGBpYCkgdG8gYW4gdW5zaWduZWQgYHUzMmAsIHRoZSBzaWduZWQgYGlgIGdldHMgaW1wbGljaXRseSBwcm9tb3RlZCB0byBhbiB1bnNpZ25lZCBpbnRlZ2VyLiBUaHVzLCBpdCBpcyBwb3NzaWJsZSBgaWAgd2lsbCBiZSBwcm9tb3RlZCB0byBgdW5zaWduZWQgaW50YCwgd2hlbiBgaWAgcmVhY2hlcyBgSU5UX01BWGAsIGBpKytgIG92ZXJmbG93cyB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IuIFRoaXMgcHJvbW90aW9uIGlzIHByb2JsZW1hdGljLCBzaW5jZSBgaWAgY2FuIGJlY29tZSBhIG5lZ2F0aXZlIG51bWJlciBvciBnZXQgcHJvbW90ZWQgdG8gdW5zaWduZWQuXG5cbkkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgYW5kIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMuIEknbSBmb2N1c2luZyBvbiB0aGUgbGluZXMgYXJvdW5kIDQ0MC00NjAgaW4gYHNvY2tfbWFwX2RlbGV0ZV9lbGVtYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBpczsgSSBtdXN0IHZlcmlmeSBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIHRoZSBsb29wIGFuZCB3aGV0aGVyIHRoZSBjb21wYXJpc29uIGludHJvZHVjZXMgVUIuIEkgbXVzdCB0cmFjayB0aGUgcG9zc2libGUgdmFsdWVzIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjI4LjMzODI3MzczNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDA6XFx0XFx0X19zb2NrX21hcF9kZWxldGUoc3RhYiwgc2ssIGxpbmtfcmF3KTtcXG4gNDQxOlxcdH1cXG4gNDQyOlxcdFxcbiA0NDM6XFx0c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiA0NDQ6XFx0e1xcbiA0NDU6XFx0XFx0c3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApO1xcbiA0NDY6XFx0XFx0dTMyIGkgPSAqKHUzMiAqKWtleTtcXG4gNDQ3OlxcdFxcdHN0cnVjdCBzb2NrICoqcHNrO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRpZiAodW5saWtlbHkoaSBcXHUwMDNlPSBtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG4gNDUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NTE6XFx0XFxuIDQ1MjpcXHRcXHRwc2sgPSBcXHUwMDI2c3RhYi1cXHUwMDNlc2tzW2ldO1xcbiA0NTM6XFx0XFx0cmV0dXJuIF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIE5VTEwsIHBzayk7XFxuIDQ1NDpcXHR9XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdHN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcXG4gNDU3OlxcdHtcXG4gNDU4OlxcdFxcdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcXG4gNDU5OlxcdFxcdHUzMiBpID0ga2V5ID8gKih1MzIgKilrZXkgOiBVMzJfTUFYO1xcbiA0NjA6XFx0XFx0dTMyICprZXlfbmV4dCA9IG5leHQ7XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdGlmIChpID09IHN0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXFxuIDQ2MzpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gNDY0OlxcdFxcdGlmIChpIFxcdTAwM2U9IHN0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcylcXG4gNDY1OlxcdFxcdFxcdCprZXlfbmV4dCA9IDA7XFxuIDQ2NjpcXHRcXHRlbHNlXFxuIDQ2NzpcXHRcXHRcXHQqa2V5X25leHQgPSBpICsgMTtcXG4gNDY4OlxcdFxcdHJldHVybiAwO1xcbiA0Njk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzoyOC4zMzgzODMwOTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI0NDQxMzk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZG8gYSBxdWljayBkZWVwIGRpdmUuXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBCUEYgYW5kIEFycmF5IE1hcHMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIgd2l0aCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbGVhZGluZyBtZSBkb3duIGEgY2VydGFpbiBwYXRoLCBidXQgSSBzaG91bGQgYWx3YXlzIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgc2VlIGlmIHRoZSBrZXJuZWwgaGFzIGFscmVhZHkgZW5jb3VudGVyZWQgYSBzaW1pbGFyIGlzc3VlIGVsc2V3aGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBjb2RlIGhhbmRsZXMgYGF0dHItXHUwMDNlbWF4X2VudHJpZXNgIHZhbHVlcyB0aGF0IG1pZ2h0IGJlIGxhcmdlciB0aGFuIGBJTlRfTUFYYC4gVGhpcyBmZWVscyBsaWtlIGEgY2xhc3NpYyBpbnRlZ2VyIG92ZXJmbG93IHNpdHVhdGlvbiBqdXN0IHdhaXRpbmcgdG8gaGFwcGVuLiBUbyBiZSB0aG9yb3VnaCwgbGV0J3MgcG9rZSBhcm91bmQgaW4gdGhlIEJQRiBjb2RlIOKAkyBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gYGFycmF5X21hcC5jYCBhbmQgb3RoZXIgYXJlYXMgd2hlcmUgYGJwZl9tYXBgIGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHNpbWlsYXIgY29tcGFyaXNvbnMgb3IgcG90ZW50aWFsIG92ZXJmbG93IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyaGFwcyB0aGUgZXhhY3Qgc2FtZSBjaGVjay4gSXQncyBiZXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBwcmV2YWlsaW5nIG1ldGhvZG9sb2d5IGlzIGluIHRoaXMgYXJlYSwgYW5kIHBlcmhhcHMgbGV2ZXJhZ2UgYW55IGV4aXN0aW5nIHBhdHRlcm5zIG9yIHNvbHV0aW9ucy4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjMxLjU4Mjc5OTYxOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODMzNzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfZW50cmllcyBcXHUwMDNlIElOVF9NQVhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00My1cXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQ6XFx0ICAgIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgICE9IDQgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6MzMuMzIxMTQyOTY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU4MjI0MjYyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWVwIERpdmUgaW50byBgYXJyYXlfbWFwX2FsbG9jYCoqXG5cbk9rYXksIHNvIGxldCdzIGdldCByaWdodCBpbnRvIGl0LCBJIG5lZWQgdG8gY2hlY2sgYGFycmF5X21hcF9hbGxvY2AuIFRoaXMgZnVuY3Rpb24sIEkgYmVsaWV2ZSwgbmVlZHMgYSB0aG9yb3VnaCBnb2luZyBvdmVyLiBJIHdhbnQgdG8gbG9vayBhdCBpdHMgbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWNhbGx5LiBJJ20ga2VlbiB0byBlbnN1cmUgaXQncyBub3QgbGVha2luZyBtZW1vcnkgb3IgZXhoaWJpdGluZyBhbnkgc3VidGxlIGluZWZmaWNpZW5jaWVzIHRoYXQgY291bGQgY29tcG91bmQgb3ZlciB0aW1lLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBvciBsb25nLXJ1bm5pbmcgcHJvY2Vzc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYWxsb2NhdGlvbiBzdHJhdGVneS4gRG9lcyBpdCBwcmUtYWxsb2NhdGUsIGFsbG9jYXRlIG9uIGRlbWFuZCwgb3IgdXNlIHNvbWUgaHlicmlkIGFwcHJvYWNoPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyB0byBiZSB3YXJ5IG9mP1xuXG5OZXh0LCB0aGUgZXJyb3IgaGFuZGxpbmcuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFycmF5X21hcF9hbGxvY2AgZ3JhY2VmdWxseSBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGFuZCBvdGhlciBlZGdlIGNhc2VzLiBXaGF0IGFyZSB0aGUgc3BlY2lmaWMgZXhjZXB0aW9uIG1lY2hhbmlzbXMgYW5kIHJldHVybiB2YWx1ZXMgaXQgbGV2ZXJhZ2VzPyBBbmQgaG93IGRvIHRoZXNlIGV4Y2VwdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgY2FsbGluZyBmdW5jdGlvbnM/IElzIHRoZXJlIHBvdGVudGlhbCBmb3IgcmVzb3VyY2UgbGVha3MgaWYsIHNheSwgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgbWFwcGluZyBwcm9jZXNzIGl0c2VsZj8gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBmYWlsdXJlIG1vZGVzIGNvbXByZWhlbnNpdmVseS5cblxuRmluYWxseSwgbGV0J3MgbG9vayBhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgbGFyZ2UgYW5kIHNtYWxsIGFycmF5cy4gSXMgdGhlcmUgYW55IGF2b2lkYWJsZSBjb21wdXRhdGlvbmFsIG92ZXJoZWFkIGluIHRoZSBjb2RlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlIGNob2ljZSBvZiBkYXRhIHN0cnVjdHVyZXMgb3IgYWxnb3JpdGhtcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYW55IHVubmVjZXNzYXJ5IGJvdHRsZW5lY2tzLiBDYW4gaXQgYmUgaW1wcm92ZWQgdXNpbmcgYSBtb3JlIG9wdGltYWwgYWxnb3JpdGhtaWMgYXBwcm9hY2g/IEFueSBjaGFuY2UgZm9yIHZlY3Rvcml6YXRpb24/IEknZCBsaWtlIHRvIHBlcmZvcm0gYSBxdWljayBwcm9maWxpbmcgcGFzcyB0byBkZXRlcm1pbmUgaXRzIHR5cGljYWwgcnVuLXRpbWUgYW5kIGlkZW50aWZ5IGFyZWFzIGZvciBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1NzozOS4xNDM1NzI0NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NTgyOTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfZW50cmllcyA9PSAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz0yNjY9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjc2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoyNzc6XFx0aWYgKGF0dHItXFx1MDAzZWtleV9zaXplIHx8IGF0dHItXFx1MDAzZXZhbHVlX3NpemUgfHwgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzgtXFx0ICAgIC8qIEJQRl9GX01NQVBBQkxFIG11c3QgYmUgc2V0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NTM9aW50IGFycmF5X21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01OC1cXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo1OTpcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAhPSA0IHx8XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTYwLVxcdCAgICBhdHRyLVxcdTAwM2V2YWx1ZV9zaXplID09IDAgfHxcXG4tLVxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM9OTk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpibG9vbV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTEwNi1cXHRpZiAoYXR0ci1cXHUwMDNla2V5X3NpemUgIT0gMCB8fCBhdHRyLVxcdTAwM2V2YWx1ZV9zaXplID09IDAgfHxcXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jOjEwNzpcXHQgICAgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMTA4LVxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiB+QkxPT01fQ1JFQVRFX0ZMQUdfTUFTSyB8fFxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jPTI2PXN0YXRpYyBpbnQgaW5zbl9hcnJheV9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yOS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6MzA6XFx0aWYgKGF0dHItXFx1MDAzZW1heF9lbnRyaWVzID09IDAgfHwgYXR0ci1cXHUwMDNla2V5X3NpemUgIT0gNCB8fFxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0zMS1cXHQgICAgYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSB2YWx1ZV9zaXplIHx8IGF0dHItXFx1MDAzZW1hcF9mbGFncyAhPSAwKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz04NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNwdV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTkwLVxcdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXFxua2VybmVsL2JwZi9jcHVtYXAuYzo5MTpcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAhPSA0IHx8XFxua2VybmVsL2JwZi9jcHVtYXAuYy05Mi1cXHQgICAgKHZhbHVlX3NpemUgIT0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9jcHVtYXBfdmFsLCBxc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9MTExPXN0YXRpYyBpbnQgZGV2X21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTE4LVxcdCAqL1xcbmtlcm5lbC9icGYvZGV2bWFwLmM6MTE5OlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXFx1MDAzZWtleV9zaXplICE9IDQgfHxcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTEyMC1cXHQgICAgKHZhbHNpemUgIT0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9kZXZtYXBfdmFsLCBpZmluZGV4KSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9NDEyPXN0YXRpYyBpbnQgaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NTAtXFx0ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NDUxOlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXFx1MDAzZWtleV9zaXplID09IDAgfHxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NTItXFx0ICAgIGF0dHItXFx1MDAzZXZhbHVlX3NpemUgPT0gMClcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz01NzE9c3RhdGljIHN0cnVjdCBicGZfbWFwICp0cmllX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU3Ny1cXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo1Nzg6XFx0aWYgKGF0dHItXFx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNTc5LVxcdCAgICAhKGF0dHItXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX05PX1BSRUFMTE9DKSB8fFxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9NDc9c3RhdGljIGludCBxdWV1ZV9zdGFja19tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy00OS1cXHQvKiBjaGVjayBzYW5pdHkgb2YgYXR0cmlidXRlcyAqL1xcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjUwOlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXFx1MDAzZWtleV9zaXplICE9IDAgfHxcXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy01MS1cXHQgICAgYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSA9PSAwIHx8XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9OTM9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTAzLVxcdC8qIGNoZWNrIHNhbml0eSBvZiBhdHRyaWJ1dGVzICovXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjEwNDpcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fCBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAhPSA0IHx8XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTEwNS1cXHQgICAgdmFsdWVfc2l6ZSBcXHUwMDNjIDggfHwgdmFsdWVfc2l6ZSAlIDgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjM5LjQ5OTQwOTMzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3MjYyNTY3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBuZXQvY29yZS9zb2NrX21hcC5jYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHN5emthbGxlciBzeXNjYWxscy4gU3BlY2lmaWNhbGx5LCB2aWEgYGJwZiRCUEZfTUFQX0NSRUFURWAgd2l0aCBhIGBCUEZfTUFQX1RZUEVfU09DS01BUGAuIFdlIGtub3cgYSBzdGFuZGFyZCB1c2VyIG9yIHN5emthbGxlciBwcm9ncmFtIGNhbiByZWFjaCBgc29ja19tYXBfYWxsb2NgIGJlY2F1c2UgQlBGIG1hcCBjcmVhdGlvbiBpcyBhIGNvcmUgQlBGIG9wZXJhdGlvbiBhY2Nlc3NpYmxlIHZpYSBgYnBmKEJQRl9NQVBfQ1JFQVRFLCAuLi4pYCDigJMgdGhhdOKAmXMgdGhlIGZpcnN0IGh1cmRsZSwgY2hlY2tlZC5cblxuTm93LCBkb2VzIGl0IG1lZXQgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjcml0ZXJpYT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHNvY2tfbWFwX2FsbG9jYCwgYWRkaW5nIGEgYm91bmRhcnkgY2hlY2s6IGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0sIGRpcmVjdGx5IGltcGFjdGluZyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgQlBGIHN5c2NhbGwgcGF0aC4gSXQgbG9va3MgbGlrZSBhIHN0cm9uZyAneWVzJyBmb3IgZnV6emluZyBmcm9tIHRoYXQgaW5pdGlhbCByZWFkLlxuXG5Mb29raW5nIGRlZXBlciwgdGhlIHByaW1hcnkgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIGRpc2NvdmVyaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBldmVuIG5ldyBhc3NlcnRpb25zLiBHaXZlbiB0aGUgcmVhY2hhYmlsaXR5IGlzIGNvbmZpcm1lZCwgYW5kIHRoZSBwYXRjaCBhZGRzIGEgYm91bmRhcnkgY2hlY2ssIHRoZSBuZXcgYXNzZXJ0aW9uIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBjYW4gY2hlY2sgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCBhbmQgaXQgZG9lc24ndC4gU28sIHdlJ3JlIGRlZmluaXRlbHkgbG9va2luZyBhdCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5leHQgdXA6IEZvY3VzU3ltYm9scy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBzb2NrX21hcF9hbGxvY2AuIElzIGl0IHN1ZmZpY2llbnQ/IElzIHRoZXJlIGFueXRoaW5nIGVsc2UgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgIHdlIHNob3VsZCB0YXJnZXQ/IEkgc2VlIHRoYXQgYHNvY2tfbWFwX2FsbG9jYCBpcyBzdGF0aWMsIGJ1dCBiZWNhdXNlIGl0J3MgdXNlZCBpbiB0aGUgc3RydWN0IGBicGZfbWFwX29wc2AsIGl0J3Mgbm90IGlubGluZWQgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbC4gQWxzbywgYHNvY2tfbWFwX2ZyZWVgLiBUaGUgaXNzdWUgcHJvbXB0aW5nIHRoaXMgY2hlY2sgbWlnaHQgYmUgaW4gYHNvY2tfbWFwX2ZyZWVgICh3aGVyZSB0aGUgYGludCBpYCBsb29wIGNvdWxkIG1pc2JlaGF2ZSBpZiBgbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgKS4gYHNvY2tfbWFwX2ZyZWVgIGFsc28gbmVlZHMgdG8gYmUgaW4gdGhlIGBGb2N1c1N5bWJvbHNgLiBTbywgSSdtIHRoaW5raW5nIHdlIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnM6IGBbXCJzb2NrX21hcF9hbGxvY1wiLCBcInNvY2tfbWFwX2ZyZWVcIl1gLlxuXG5GaW5hbGx5LCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFdlIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyBleHBlY3RlZC4gSG9sZCBvbi4gRG9lcyB0aGlzICphbHNvKiByZXF1aXJlIGBORVRgPyBJIGtub3cgdGhhdCBgTkVUYCBpcyByZWxldmFudCBiZWNhdXNlIG9mIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSwgYnV0IGRvZXMgYEJQRl9TWVNDQUxMYCAqcmVxdWlyZSogYE5FVGA/IExvb2tpbmcgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIEkgc2VlIGBzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVGAuIEFuZCwgbG9va2luZyBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vYC4gT2theS4gQW5kIHRoZW4gdGhlIHRvcC1sZXZlbCBgTWFrZWZpbGVgLiBMb29rcyBsaWtlIHRoZSAqZW50aXJlKiBgbmV0L2AgZGlyZWN0b3J5IGlzIGJ1aWx0IG9ubHkgaWYgYENPTkZJR19ORVQ9eWAuIFNvIHdlIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTD15YCBhbmQgYENPTkZJR19ORVQ9eWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjIxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Nzo0OS4yMjU2NjkwMzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTkxMzY5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0L1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJNYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6NDkuNDAxNTkyMzY5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3ODE1MzI5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYSBuZXR3b3JrLXJlbGF0ZWQgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0YCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBjZW50cmFsIGh1YiBmb3IgbmV0d29yay1yZWxhdGVkIHNldHRpbmdzLiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbHMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkncmUgY29ubmVjdGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGxvZ2ljYWwgc3RydWN0dXJlOiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIHRoaXMgZmVhdHVyZSBoYXZlPyBXaGF0IG90aGVyIGZlYXR1cmVzIGVuYWJsZSBpdD8gQW5kIG9mIGNvdXJzZSwgSSdtIGV4cGVjdGluZyBzb21lIG5lc3RpbmcgYW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Nzo1MS4xODMxMjg0NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2NTU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJuZXQvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9ODI9bWVudSBcXFwiTmV0d29ya2luZyBvcHRpb25zXFxcIlxcbm5ldC9LY29uZmlnLTgzLVxcbm5ldC9LY29uZmlnOjg0OnNvdXJjZSBcXFwibmV0L3BhY2tldC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjg1OnNvdXJjZSBcXFwibmV0L3BzcC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjg2OnNvdXJjZSBcXFwibmV0L3VuaXgvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo4Nzpzb3VyY2UgXFxcIm5ldC90bHMvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo4ODpzb3VyY2UgXFxcIm5ldC94ZnJtL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6ODk6c291cmNlIFxcXCJuZXQvaXVjdi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjkwOnNvdXJjZSBcXFwibmV0L3NtYy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTkxLXNvdXJjZSBcXFwiZHJpdmVycy9kaWJzL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6OTI6c291cmNlIFxcXCJuZXQveGRwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctOTMtXFxuLS1cXG5uZXQvS2NvbmZpZz0xMzY9aWYgSU5FVFxcbm5ldC9LY29uZmlnOjEzNzpzb3VyY2UgXFxcIm5ldC9pcHY0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MTM4OnNvdXJjZSBcXFwibmV0L2lwdjYvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoxMzk6c291cmNlIFxcXCJuZXQvbmV0bGFiZWwvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoxNDA6c291cmNlIFxcXCJuZXQvbXB0Y3AvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0xNDEtXFxuLS1cXG5uZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTI0Ni1cXG5uZXQvS2NvbmZpZzoyNDc6c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjQ4OnNvdXJjZSBcXFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjQ5OnNvdXJjZSBcXFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjUwOnNvdXJjZSBcXFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yNTEtXFxubmV0L0tjb25maWc9MjUyPWVuZGlmICMgaWYgTkVURklMVEVSXFxubmV0L0tjb25maWctMjUzLVxcbm5ldC9LY29uZmlnOjI1NDpzb3VyY2UgXFxcIm5ldC9zY3RwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjU1OnNvdXJjZSBcXFwibmV0L3Jkcy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI1Njpzb3VyY2UgXFxcIm5ldC90aXBjL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjU3OnNvdXJjZSBcXFwibmV0L2F0bS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI1ODpzb3VyY2UgXFxcIm5ldC9sMnRwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjU5OnNvdXJjZSBcXFwibmV0LzgwMi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI2MDpzb3VyY2UgXFxcIm5ldC9icmlkZ2UvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNjE6c291cmNlIFxcXCJuZXQvZHNhL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjYyOnNvdXJjZSBcXFwibmV0LzgwMjFxL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjYzOnNvdXJjZSBcXFwibmV0L2xsYy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI2NDpzb3VyY2UgXFxcIm5ldC94MjUvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNjU6c291cmNlIFxcXCJuZXQvbGFwYi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI2Njpzb3VyY2UgXFxcIm5ldC9waG9uZXQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNjc6c291cmNlIFxcXCJuZXQvNmxvd3Bhbi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI2ODpzb3VyY2UgXFxcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjY5OnNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXFxcIm5ldC9zY2hlZC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3MTpzb3VyY2UgXFxcIm5ldC9kY2IvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzI6c291cmNlIFxcXCJuZXQvZG5zX3Jlc29sdmVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjczOnNvdXJjZSBcXFwibmV0L2JhdG1hbi1hZHYvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzQ6c291cmNlIFxcXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzU6c291cmNlIFxcXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6Mjc2OnNvdXJjZSBcXFwibmV0L25ldGxpbmsvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzc6c291cmNlIFxcXCJuZXQvbXBscy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3ODpzb3VyY2UgXFxcIm5ldC9uc2gvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzk6c291cmNlIFxcXCJuZXQvaHNyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjgwOnNvdXJjZSBcXFwibmV0L3N3aXRjaGRldi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI4MTpzb3VyY2UgXFxcIm5ldC9sM21kZXYvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyODI6c291cmNlIFxcXCJuZXQvcXJ0ci9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI4Mzpzb3VyY2UgXFxcIm5ldC9uY3NpL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMjg0LVxcbi0tXFxubmV0L0tjb25maWc9NDE0PWVuZG1lbnUgIyBOZXR3b3JraW5nIG9wdGlvbnNcXG5uZXQvS2NvbmZpZy00MTUtXFxubmV0L0tjb25maWc6NDE2OnNvdXJjZSBcXFwibmV0L2Nhbi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjQxNzpzb3VyY2UgXFxcIm5ldC9ibHVldG9vdGgvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo0MTg6c291cmNlIFxcXCJuZXQvcnhycGMvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo0MTk6c291cmNlIFxcXCJuZXQva2NtL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDIwOnNvdXJjZSBcXFwibmV0L3N0cnBhcnNlci9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjQyMTpzb3VyY2UgXFxcIm5ldC9tY3RwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctNDIyLVxcbi0tXFxubmV0L0tjb25maWc9NDMxPWlmIFdJUkVMRVNTXFxubmV0L0tjb25maWctNDMyLVxcbm5ldC9LY29uZmlnOjQzMzpzb3VyY2UgXFxcIm5ldC93aXJlbGVzcy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjQzNDpzb3VyY2UgXFxcIm5ldC9tYWM4MDIxMS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQzNS1cXG5uZXQvS2NvbmZpZz00MzY9ZW5kaWYgIyBXSVJFTEVTU1xcbm5ldC9LY29uZmlnLTQzNy1cXG5uZXQvS2NvbmZpZzo0Mzg6c291cmNlIFxcXCJuZXQvcmZraWxsL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDM5OnNvdXJjZSBcXFwibmV0LzlwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDQwOnNvdXJjZSBcXFwibmV0L2NlcGgvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo0NDE6c291cmNlIFxcXCJuZXQvbmZjL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDQyOnNvdXJjZSBcXFwibmV0L3BzYW1wbGUvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzo0NDM6c291cmNlIFxcXCJuZXQvaWZlL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctNDQ0LVxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnPTQyPWNvbmZpZyBCVF9CUkVEUlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTUxLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1Mjpzb3VyY2UgXFxcIm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWdcXFwiXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTUzLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1NDpzb3VyY2UgXFxcIm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnXFxcIlxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy01NS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NTY6c291cmNlIFxcXCJuZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZ1xcXCJcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTctXFxuLS1cXG5uZXQvY2FuL0tjb25maWc9NDY9Y29uZmlnIENBTl9HV1xcbi0tXFxubmV0L2Nhbi9LY29uZmlnLTU2LVxcbm5ldC9jYW4vS2NvbmZpZzo1Nzpzb3VyY2UgXFxcIm5ldC9jYW4vajE5MzkvS2NvbmZpZ1xcXCJcXG5uZXQvY2FuL0tjb25maWctNTgtXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnPTIxPWNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxcbi0tXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yOC1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI5OnNvdXJjZSBcXFwibmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnXFxcIlxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMzAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTY2MD1lbmRtZW51XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2NjEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2NjI6c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWdcXFwiXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2NjMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2NjQ6c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1xcXCJcXG4tLVxcbm5ldC9uZmMvS2NvbmZpZz0xNz1jb25maWcgTkZDX0RJR0lUQUxcXG4tLVxcbm5ldC9uZmMvS2NvbmZpZy0zMC1cXG5uZXQvbmZjL0tjb25maWc6MzE6c291cmNlIFxcXCJuZXQvbmZjL25jaS9LY29uZmlnXFxcIlxcbm5ldC9uZmMvS2NvbmZpZzozMjpzb3VyY2UgXFxcIm5ldC9uZmMvaGNpL0tjb25maWdcXFwiXFxubmV0L25mYy9LY29uZmlnLTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Nzo1MS4yNTU4MDkwMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDE0NjEzNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyB3aGF0IGdvZXMgdGhyb3VnaCBteSBoZWFkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXQgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSBgbmV0L01ha2VmaWxlYC4gUmlnaHQsIHRpbWUgdG8gZGlzc2VjdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgc3BlY2lmaWMgY29udGV4dD8gQXJlIHdlIGRlYnVnZ2luZyBhIGJ1aWxkIGlzc3VlLCBleHBsb3JpbmcgbmV0d29yayBjb25maWd1cmF0aW9uLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBkZXBlbmRlbmNpZXMsIG9yIGp1c3QgZG9pbmcgYSBnZW5lcmFsIGNvZGUgcmV2aWV3PyBUaGF0J2xsIGRldGVybWluZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIEkgbmVlZCB0byBnbyBpbnRvLiBSZWdhcmRsZXNzLCBgbmV0L2AgaXMgdHlwaWNhbGx5IHdoZXJlIHRoZSBsb3dlci1sZXZlbCBuZXR3b3JrLXJlbGF0ZWQgY29tcG9uZW50cyByZXNpZGUuIFRoaXMgaXMgdXN1YWxseSB0aGUgYXJlYSB0aGF0IGRlYWxzIHdpdGggZHJpdmVycywgcHJvdG9jb2xzIGFuZCBzeXN0ZW0gY2FsbHMgYXQgYSBsb3cgbGV2ZWwuIEl04oCZcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiBmb3IgdGhlIGNyaXRpY2FsIGVsZW1lbnRzOlxuXG4qICAgKipUYXJnZXRzOioqIFdoYXQgYXJlIHRoZSBtYWluIGJ1aWxkIHRhcmdldHMgZGVmaW5lZD8gQXJlIHdlIGJ1aWxkaW5nIHNwZWNpZmljIG1vZHVsZXMsIGxpYnJhcmllcywgb3IgdGhlIHdob2xlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrPyBVbmRlcnN0YW5kaW5nIHRoZSB0YXJnZXRzIGdpdmVzIG1lIHRoZSBzdHJ1Y3R1cmUuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSdsbCBiZSBsb29raW5nIGZvciBpbmNsdWRlIGZpbGVzLCBvdGhlciBtb2R1bGVzLCBleHRlcm5hbCBsaWJyYXJpZXMgb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gRGVwZW5kZW5jaWVzIGFyZSBvZnRlbiB3aGVyZSBpc3N1ZXMgYXJpc2UgYW5kIGEgZ29vZCBtYWtlZmlsZSBjbGVhcmx5IG91dGxpbmVzIHdoYXQgbmVlZHMgdG8gYmUgcHJlc2VudCB0byBhbGxvdyB0aGUgbmV0d29yayBzdGFjayB0byBiZSBjb21waWxlZCBhbmQgbGlua2VkLlxuKiAgICoqRmxhZ3MgYW5kIFZhcmlhYmxlczoqKiBBcmUgdGhlcmUgYW55IHJlbGV2YW50IHZhcmlhYmxlcyBkZWZpbmluZyBjb21waWxlciBmbGFncyAoZS5nLiwgYC1JYCBmb3IgaW5jbHVkZSBwYXRocywgYC1EYCBmb3IgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLCBvcHRpbWl6YXRpb24gbGV2ZWxzKSwgbGlua2VyIGZsYWdzLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3M/IEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gdGhlc2UgY2FuIGNhdXNlIG1ham9yIGhlYWRhY2hlcy5cbiogICAqKlJ1bGVzOioqIEknbGwgcXVpY2tseSBzY2FuIHRoZSBydWxlcyB0byBzZWUgaG93IHRhcmdldHMgYXJlIGJ1aWx0IGFuZCBsaW5rZWQuIExvb2sgZm9yIGhvdyBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgdG9nZXRoZXIgYW5kIGlmIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIGFyZSBpbiBwbGFjZS5cblxuSSBrbm93IEkgd2lsbCBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIGRlbHZlIGludG8gYW55IGNvbmRpdGlvbmFsIGJsb2NrcywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQgYW5kIHRoZSBtYWtlZmlsZSBuZWVkcyB0byBkZWFsIHdpdGggbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyBvciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFNvLCBsZXTigJlzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg0MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTc6NTUuMjcwNDI1MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IG5ldHdvcmtpbmcuXFxuICAgNDpcXHQjXFxuICAgNTpcXHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFxcdTAwM2NoY2hAaW5mcmFkZWFkLm9yZ1xcdTAwM2VcXG4gICA2OlxcdCMgUmV3cml0dGVuIHRvIHVzZSBsaXN0cyBpbnN0ZWFkIG9mIGlmLXN0YXRlbWVudHMuXFxuICAgNzpcXHQjXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gZGV2cmVzLm8gc29ja2V0Lm8gY29yZS9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0NPTVBBVClcXHRcXHQrPSBjb21wYXQub1xcbiAgMTI6XFx0XFxuICAxMzpcXHQjIExMQyBoYXMgdG8gYmUgbGlua2VkIGJlZm9yZSB0aGUgZmlsZXMgaW4gbmV0LzgwMi9cXG4gIDE0OlxcdG9iai0kKENPTkZJR19MTEMpXFx0XFx0Kz0gbGxjL1xcbiAgMTU6XFx0b2JqLXlcXHRcXHRcXHRcXHQrPSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xcbiAgMTY6XFx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHRcXHQrPSBuZXRmaWx0ZXIvXFxuICAxNzpcXHRvYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBpcHY0L1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuICAxOTpcXHRvYmotJChDT05GSUdfWEZSTSlcXHRcXHQrPSB4ZnJtL1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1VOSVgpXFx0XFx0Kz0gdW5peC9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19JTkVUX1BTUClcXHRcXHQrPSBwc3AvXFxuICAyMjpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGlwdjYvXFxuICAyMzpcXHRvYmotJChDT05GSUdfUEFDS0VUKVxcdFxcdCs9IHBhY2tldC9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19ORVRfS0VZKVxcdFxcdCs9IGtleS9cXG4gIDI1OlxcdG9iai0kKENPTkZJR19CUklER0UpXFx0XFx0Kz0gYnJpZGdlL1xcbiAgMjY6XFx0b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVxcdCs9IGRldmxpbmsvXFxuICAyNzpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGRzYS9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19YMjUpXFx0XFx0Kz0geDI1L1xcbiAgMjk6XFx0b2JqLSQoQ09ORklHX0xBUEIpXFx0XFx0Kz0gbGFwYi9cXG4gIDMwOlxcdG9iai0kKENPTkZJR19DQU4pXFx0XFx0Kz0gY2FuL1xcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0JUKVxcdFxcdCs9IGJsdWV0b290aC9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19TVU5SUEMpXFx0XFx0Kz0gc3VucnBjL1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVxcdFxcdCs9IHJ4cnBjL1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX0FGX0tDTSlcXHRcXHQrPSBrY20vXFxuICAzNTpcXHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcXHQrPSBzdHJwYXJzZXIvXFxuICAzNjpcXHRvYmotJChDT05GSUdfQVRNKVxcdFxcdCs9IGF0bS9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19MMlRQKVxcdFxcdCs9IGwydHAvXFxuICAzODpcXHRvYmotJChDT05GSUdfUEhPTkVUKVxcdFxcdCs9IHBob25ldC9cXG4gIDM5OlxcdGlmbmVxICgkKENPTkZJR19WTEFOXzgwMjFRKSwpXFxuICA0MDpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IDgwMjFxL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1Nzo1NS4yNzA0OTI5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzA4ODc3NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgc29ja19tYXAub2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgc29ja19tYXAub2AgZ2V0cyBidWlsdCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIEJQRi4gSSByZWNhbGwgdGhhdCB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIGluY2x1ZGVzIHRoZSBgbmV0L2AgZGlyZWN0b3J5IHdoZW4gYENPTkZJR19ORVQ9eWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoYXQncyByZXF1aXJlZC5cIiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gYEJQRl9TWVNDQUxMYCdzIGNvbmZpZ3VyYXRpb24uIExvb2tpbmcgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIEkgc2VlIGl0J3MgYSBib29sIG9wdGlvbiB0aGF0IGFjdGl2YXRlcyB0aGUgYGJwZigpYCBzeXN0ZW0gY2FsbC4gSXQgKnNlbGVjdHMqIGEgZmV3IGRlcGVuZGVuY2llczogYEJQRmAsIGBJUlFfV09SS2AsIGBORUVEX1RBU0tTX1JDVWAsIGBUQVNLU19UUkFDRV9SQ1VgLCBgQklOQVJZX1BSSU5URmAsIGFuZCBjcml0aWNhbGx5LCBgTkVUX1NPQ0tfTVNHYCAqaWYqIGBORVRgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBmdXJ0aGVyIHRvIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IGBzb2NrX21hcC5vYCBpcyBidWlsdC4gQW5kIHRoZXJlIGl0IGlzOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzb2NrX21hcC5vYC4gT2theSwgc28gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgKmRpcmVjdGx5KiByZXNwb25zaWJsZSBmb3IgaW5jbHVkaW5nIGBzb2NrX21hcC5vYC4gU28gd2UgbmVlZCBib3RoIGBDT05GSUdfTkVUYCAqYW5kKiBgQ09ORklHX0JQRl9TWVNDQUxMYCB0byBnZXQgYHNvY2tfbWFwLm9gIHRvIGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbC5cblxuSSdtIGZlZWxpbmcgdGhvcm91Z2ggdG9kYXksIHNvIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIHNvdXJjZSBmaWxlIGl0c2VsZiwgYHNvY2tfbWFwLmNgLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYCNpZmRlZmApIHRoYXQgbWlnaHQgaW50cm9kdWNlIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBoaWRkZW4gcmVxdWlyZW1lbnRzIEknbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjU4LjU3OTM3MzIwN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MzI3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0xNDc4PXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTItXFx0XFx0YnJlYWs7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0OTQtXFx0Y2FzZSBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU3OjU4LjYzMDMxNjYzNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODIyMDc3NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFNvY2sgTWFwIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzb2NrX21hcF9hbGxvY2AgZnVuY3Rpb24gYW5kLi4uaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aGF0J3MgdXNpbmcgaXQuIFRoYXQncyBhIGJpdCB1bnVzdWFsLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBzb2NrX21hcF9vcHNgIHN0cnVjdHVyZSBpcyBhY3R1YWxseSByZWdpc3RlcmVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSB0aGlzIHRoaW5nIGJhY2sgdG8gaXRzIHJvb3QuIFdpdGhvdXQgdGhhdCwgSSdtIGp1c3QgcG9raW5nIGFyb3VuZCBpbiB0aGUgZGFyay4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWUgd2hlcmUgYHNvY2tfbWFwX29wc2AgaXMgZGVmaW5lZCBhbmQgY2FsbGVkLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBjbHVlcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODowMS40NTIzOTcxNjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjUzNDI1NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE5PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTIxLSNpZmRlZiBDT05GSUdfSU5FVFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTIyOkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS01BUCwgc29ja19tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTIzLUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS0hBU0gsIHNvY2tfaGFzaF9vcHMpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTgzMT1CVEZfSURfTElTVF9TSU5HTEUoc29ja19tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfc3RhYilcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzMjpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODMzLVxcdC5tYXBfbWV0YV9lcXVhbFxcdFxcdD0gYnBmX21hcF9tZXRhX2VxdWFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODowMy4wMTc3NDc0NTdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzM2NTcyMzA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJQRiBTb2NrbWFwIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgb2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3QhIExvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgLCBzcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBkZXBlbmRlbmN5OlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX0lORVRcbkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS01BUCwgc29ja19tYXBfb3BzKVxuQlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgc29ja19oYXNoX29wcylcbiNlbmRpZlxuYGBgXG5cblRoZSBkZWZpbml0aW9uIG9mIGBCUEZfTUFQX1RZUEVfU09DS01BUGAsIGFzIGV4cGVjdGVkLCBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0lORVRgLiBUaGlzIGNvbmZpcm1zIHRoYXQgc29ja21hcCBzdXBwb3J0IHJlbGllcyBvbiB0aGUgYENPTkZJR19JTkVUYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBhcm91bmQgbGluZXMgMTE1LTEzMCBvZiB0aGF0IGZpbGUgdG8gbWFrZSBjZXJ0YWluIHRoaXMgaXMgdGhlIG9ubHkgZGVwZW5kZW5jeS4gSXQncyBnb29kIHRvIGhhdmUgdGhpcyBjb25maXJtZWQgc28gcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxOTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6MDYuMzgzNDczNzA4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQX0hBU0gsIGRldl9tYXBfaGFzaF9vcHMpXFxuIDExNjpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NLX1NUT1JBR0UsIHNrX3N0b3JhZ2VfbWFwX29wcylcXG4gMTE3OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcXG4gMTE4OlxcdCNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG4gMTE5OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcXG4gMTIwOlxcdCNlbmRpZlxcbiAxMjE6XFx0I2lmZGVmIENPTkZJR19JTkVUXFxuIDEyMjpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NPQ0tNQVAsIHNvY2tfbWFwX29wcylcXG4gMTIzOlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU09DS0hBU0gsIHNvY2tfaGFzaF9vcHMpXFxuIDEyNDpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVksIHJldXNlcG9ydF9hcnJheV9vcHMpXFxuIDEyNTpcXHQjZW5kaWZcXG4gMTI2OlxcdCNlbmRpZlxcbiAxMjc6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9RVUVVRSwgcXVldWVfbWFwX29wcylcXG4gMTI4OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RBQ0ssIHN0YWNrX21hcF9vcHMpXFxuIDEyOTpcXHQjaWYgZGVmaW5lZChDT05GSUdfQlBGX0pJVClcXG4gMTMwOlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RSVUNUX09QUywgYnBmX3N0cnVjdF9vcHNfbWFwX29wcylcXG4gMTMxOlxcdCNlbmRpZlxcbiAxMzI6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSU5HQlVGLCByaW5nYnVmX21hcF9vcHMpXFxuIDEzMzpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUiwgYmxvb21fZmlsdGVyX21hcF9vcHMpXFxuIDEzNDpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1VTRVJfUklOR0JVRiwgdXNlcl9yaW5nYnVmX21hcF9vcHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjA2LjM4MzU0NDA5OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMTQyNDY3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBCUEYgVHlwZSBEZWZpbml0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGluIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYCBmb3IgYEJQRl9NQVBfVFlQRV9TT0NLTUFQYCBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfSU5FVGAuIFRoYXQgaW1tZWRpYXRlbHkgY2xpY2tzIOKAkyBpdCdzIGJlY2F1c2Ugc29ja21hcHMgYXJlIGluaGVyZW50bHkgdGllZCB0byBpbnRlcm5ldCBwcm90b2NvbCBoYW5kbGluZy4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGtlcm5lbCBvbmx5IG5lZWRzIHRvIGRlZmluZSBhbmQgaGFuZGxlIHRoYXQgbWFwIHR5cGUgaWYgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBjb25maWd1cmVkIHRvIGRlYWwgd2l0aCB0aGUgaW50ZXJuZXQgc3RhY2suIE5vIHBvaW50IGluIGJsb2F0IG90aGVyd2lzZS5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIGFib3V0IGxpbmUgMTI2IGFuZCB0aGUgYCNpZmRlZiBDT05GSUdfTkVUYC4gT2theSwgdGhhdCdzIGFub3RoZXIgaW1wb3J0YW50IG9uZS4gTGV0IG1lIHF1aWNrbHkgc2NhbiBsaW5lcyAxMDAtMTE2LiBMb29rcyBsaWtlIEknbSB0cnlpbmcgdG8gc2VlIHdoYXQgdGhlIG5ldCBjb25maWd1cmF0aW9uIGlzIGNvbnRyb2xsaW5nIGhlcmUgYXMgdGhpcyBpcyBnb2luZyB0byBpbmZsdWVuY2UgdGhlIGZlYXR1cmVzIGF2YWlsYWJsZS5cblxuTGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjA5LjUyNjAxMzAyNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNILCBodGFiX3BlcmNwdV9tYXBfb3BzKVxcbiAxMDE6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9MUlVfSEFTSCwgaHRhYl9scnVfbWFwX29wcylcXG4gMTAyOlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNILCBodGFiX2xydV9wZXJjcHVfbWFwX29wcylcXG4gMTAzOlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfTFBNX1RSSUUsIHRyaWVfbWFwX29wcylcXG4gMTA0OlxcdCNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcXG4gMTA1OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfU1RBQ0tfVFJBQ0UsIHN0YWNrX3RyYWNlX21hcF9vcHMpXFxuIDEwNjpcXHQjZW5kaWZcXG4gMTA3OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUywgYXJyYXlfb2ZfbWFwc19tYXBfb3BzKVxcbiAxMDg6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9IQVNIX09GX01BUFMsIGh0YWJfb2ZfbWFwc19tYXBfb3BzKVxcbiAxMDk6XFx0I2lmZGVmIENPTkZJR19CUEZfTFNNXFxuIDExMDpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOT0RFX1NUT1JBR0UsIGlub2RlX3N0b3JhZ2VfbWFwX29wcylcXG4gMTExOlxcdCNlbmRpZlxcbiAxMTI6XFx0QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UsIHRhc2tfc3RvcmFnZV9tYXBfb3BzKVxcbiAxMTM6XFx0I2lmZGVmIENPTkZJR19ORVRcXG4gMTE0OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQLCBkZXZfbWFwX29wcylcXG4gMTE1OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfREVWTUFQX0hBU0gsIGRldl9tYXBfaGFzaF9vcHMpXFxuIDExNjpcXHRCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1NLX1NUT1JBR0UsIHNrX3N0b3JhZ2VfbWFwX29wcylcXG4gMTE3OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcXG4gMTE4OlxcdCNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG4gMTE5OlxcdEJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6MDkuNTI2MTA4MzE2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNDUxODk2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNvY2ttYXAgQlBGIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHRyYWNlIHRoZSBwYXRoIHRvIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIHRoZSBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uLiBMaW5lcyAxMTMgYW5kIDEyMSBhcmUgdGhyb3dpbmcgdXAgc29tZSBjb25kaXRpb25hbHMuIFNwZWNpZmljYWxseSwgSSBzZWUgYCNpZmRlZiBDT05GSUdfTkVUYCBvbiBsaW5lIDExMyBhbmQgYCNpZmRlZiBDT05GSUdfSU5FVGAgb24gbGluZSAxMjEuIFRoYXQgdGVsbHMgbWUgcmlnaHQgYXdheSB0aGF0IHRvIGdldCB3aGVyZSBJIG5lZWQgdG8gYmUsIEknbSBnb2luZyB0byByZXF1aXJlIGEgZmV3IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBiZSBlbmFibGVkLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgSSBuZWVkOlxuXG4qICAgYENPTkZJR19CUEZfU1lTQ0FMTGAgKHRoYXQncyBvYnZpb3VzLCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGIHN5c2NhbGxzKVxuKiAgIGBDT05GSUdfTkVUYCAodGhhdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBmb3IgbmV0d29ya2luZyByZWxhdGVkIEJQRiBmZWF0dXJlcy4pXG4qICAgYENPTkZJR19JTkVUYCAoSSBuZWVkIElQdjQgc3VwcG9ydCB0b28gdG8gcmVhY2ggdGhlIHJlbGV2YW50IGNvZGUgcGF0aCkuXG5cbk5vdywgdG8gc29saWRpZnkgdGhpcywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGlzIGFjdHVhbGx5IHVzZWQgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdGhyb3VnaCB0aGUgYGZpbmRfYW5kX2FsbG9jX21hcGAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHF1aWNrIGNoZWNrIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LiBMZXQncyBzZWUgaWYgdGhpcyBpcyB0cnVlIGFuZCB0aGF0IEkgY2FuIHJlYWNoIHRoYXQgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODoxMi42NzEzMDIxMDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDc0NjMxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX2FuZF9hbGxvY19tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjEyLjcyMzgzMzkxNloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTE0MDg0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBCUEYgTWFwIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyBCUEYgbWFwIHR5cGVzIGFuZCB0aGVpciBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGF0IHJ1bnRpbWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGRpc3BhdGNoaW5nIGhhcHBlbmluZz9cIi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gQXJlIHdlIGxvb2tpbmcgYXQgYGJwZl9tYXBfdHlwZXNgPyBPciBwZXJoYXBzIGBicGZfbWFwX29wc2A/IFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgc3RhcnRpbmcgcG9pbnQgZm9yIGZpZ3VyaW5nIG91dCAqaG93KiBkaWZmZXJlbnQgbWFwIHR5cGVzIGFyZSBhY3R1YWxseSAqdXNlZCouIE15IG1lbnRhbCBtYXAgbmVlZHMgdG8gYmUgY2xhcmlmaWVkLCBhbmQgdGhpcyBpcyB3aGVyZSBJJ2xsIGJlZ2luLCBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjE0LjYzNzkyMDQyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MTgzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21hcF90eXBlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz02OD1pbnQgc3lzY3RsX3VucHJpdmlsZWdlZF9icGZfZGlzYWJsZWQgX19yZWFkX21vc3RseSA9XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy03MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo3MTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTcyLSNkZWZpbmUgQlBGX1BST0dfVFlQRShfaWQsIF9uYW1lLCBwcm9nX2N0eF90eXBlLCBrZXJuX2N0eF90eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzNS1cXHRtYXBfdHlwZSA9IGF0dHItXFx1MDAzZW1hcF90eXBlO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MzY6XFx0aWYgKG1hcF90eXBlIFxcdTAwM2U9IEFSUkFZX1NJWkUoYnBmX21hcF90eXBlcykpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDM3LVxcdFxcdGJwZl9sb2cobG9nLCBcXFwiSW52YWxpZCBtYXBfdHlwZS5cXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzOS1cXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ0MDpcXHRtYXBfdHlwZSA9IGFycmF5X2luZGV4X25vc3BlYyhtYXBfdHlwZSwgQVJSQVlfU0laRShicGZfbWFwX3R5cGVzKSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ0MTpcXHRvcHMgPSBicGZfbWFwX3R5cGVzW21hcF90eXBlXTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDQyLVxcdGlmICghb3BzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODoxNC42ODY4NDU1NDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTAwODgwODAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU29ja21hcCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgc29ja19tYXBfYWxsb2NgLCBhbmQgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCB3aXRoaW4gYG1hcF9jcmVhdGVfYWxsb2NgIHdoaWNoIGlzIHJlYWNoZWQgdGhyb3VnaCB0aGUgYGJwZihCUEZfTUFQX0NSRUFURSwgLi4uKWAgc3lzY2FsbCDigJMgY2xhc3NpYyBCUEYgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgaXQncyBjYWxsZWQgd2hlbiB0aGUgYGF0dHItXHUwMDNlbWFwX3R5cGVgIGlzIGBCUEZfTUFQX1RZUEVfU09DS01BUGAuIEFuZCwgYWNjb3JkaW5nIHRvIG15IHN5bWJvbHMgY2hlY2ssIGBzb2NrX21hcF9hbGxvY2AgaXMgdGhlICpleGFjdCogZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuIFRoZSBjb21taXQgYWxzbyB0b3VjaGVzIGBzb2NrX21hcF9mcmVlYCwgc2luY2Ugb2J2aW91c2x5IGZyZWVpbmcgdGhlIHNvY2ttYXAgaGluZ2VzIG9uIGVudHJpZXMuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkbyBJIGluY2x1ZGUganVzdCBgc29ja19tYXBfYWxsb2NgIG9yIGJvdGggYHNvY2tfbWFwX2FsbG9jYCBhbmQgYHNvY2tfbWFwX2ZyZWVgPyBMZXQncyBjb25zdWx0IHRoZSBndWlkZWxpbmVzIChTZWN0aW9uIDQpLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0ICpzcGVjaWZpY2FsbHkqIGltcGxlbWVudCB0aGUgYWx0ZXJlZCBsb2dpYy4gRGVmaW5pdGVseSBgc29ja19tYXBfYWxsb2NgLCB0aGF0J3MgdGhlIG9uZSB3aXRoIHRoZSBkaXJlY3QgY2hhbmdlLiBBbmQgd2hpbGUgYHNvY2tfbWFwX2ZyZWVgIGlzbid0IGRpcmVjdGx5ICptb2RpZmllZCosIGl0J3MgY3JpdGljYWwgdG8gdGhlIHNvY2ttYXAncyBsaWZlY3ljbGUsIHNvLCBsZXQncyBpbmNsdWRlIGJvdGguIFRoYXQncyB0aGUgYmVzdCBhbmQgbW9zdCBzcGVjaWZpYyBhcHByb2FjaC5cblxuTm93IGZvciB0aGUgRW5hYmxlQ29uZmlncy4gVGhlIHJlbGV2YW50IEtjb25maWcgc3ltYm9scyBzZWVtIHRvIGJlIGBCUEZfU1lTQ0FMTGAsIGBORVRgLCBhbmQgYElORVRgLiBJIHF1aWNrbHkgdmVyaWZpZWQgdGhhdCBgSU5FVGAgZG9lcywgaW4gZmFjdCwgZGVwZW5kIG9uIGBORVRgLCBhbmQgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBTbywgYFtcIkJQRl9TWVNDQUxMXCIsIFwiTkVUXCIsIFwiSU5FVFwiXWAgaXQgaXMuXG5cbkZpbmFsbHksIHRoZSByZWFzb25pbmcuIExldCdzIG1ha2UgaXQgY29uY2lzZTogVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gdXBwZXIgYm91bmQgY2hlY2sgKGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYCkgd2l0aGluIGBzb2NrX21hcF9hbGxvYygpYCBmb3Igc29ja21hcCBCUEYgbWFwcy4gVGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBwcm9ibGVtcyB0aGF0IGNhbiBvY2N1ciBkdXJpbmcgbWFwIGFsbG9jYXRpb24sIGl0ZXJhdGlvbiwgYW5kIGZyZWVpbmcuIFRoZSBjaGFuZ2VkIGV4ZWN1dGFibGUgY29kZSBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBicGYoQlBGX01BUF9DUkVBVEUsIC4uLilgIHN5c2NhbGwsIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSBjb3JlLiBJIHRoaW5rIHRoYXQgY292ZXJzIGl0LiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMDQsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjE5LjY5NTY1NjI4MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODc3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfYWxsb2NcIixcbiAgICBcInNvY2tfbWFwX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2NrX21hcF9hbGxvYygpIGluIG5ldC9jb3JlL3NvY2tfbWFwLmMgYnkgYWRkaW5nIGFuIHVwcGVyLWJvdW5kIGNoZWNrIG9uIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIChyZWplY3RpbmcgdmFsdWVzIFxcdTAwM2UgSU5UX01BWCkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQX0NSRUFURSBhbmQgQlBGX01BUF9UWVBFX1NPQ0tNQVAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHRoaXMgcGF0aCBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdmFsaWRhdGlvbiBib3VuZGFyaWVzLCBlcnJvciBoYW5kbGluZywgYW5kIGxpZmVjeWNsZSBiZWhhdmlvciBvZiBCUEYgc29ja21hcHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX2FsbG9jXCIsXG4gICAgXCJzb2NrX21hcF9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja19tYXBfYWxsb2MoKSBpbiBuZXQvY29yZS9zb2NrX21hcC5jIGJ5IGFkZGluZyBhbiB1cHBlci1ib3VuZCBjaGVjayBvbiBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyAocmVqZWN0aW5nIHZhbHVlcyBcXHUwMDNlIElOVF9NQVgpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHdpdGggQlBGX01BUF9DUkVBVEUgYW5kIEJQRl9NQVBfVFlQRV9TT0NLTUFQIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyB0aGlzIHBhdGggaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHZhbGlkYXRpb24gYm91bmRhcmllcywgZXJyb3IgaGFuZGxpbmcsIGFuZCBsaWZlY3ljbGUgYmVoYXZpb3Igb2YgQlBGIHNvY2ttYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODoxOS43Njk1NDAwMjNaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQxMzQxODQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjE5Ljc3MDA2MzYzNFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1MjQxMjg5MTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYYCkgaW4gYHNvY2tfbWFwX2FsbG9jKClgIHRvIHJlamVjdCBtYXAgY3JlYXRpb24gd2hlbiBgbWF4X2VudHJpZXNgIGV4Y2VlZHMgYElOVF9NQVhgLiBUaGlzIHByZXZlbnRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGUuZy4gaW4gYHNvY2tfbWFwX2ZyZWUoKWAgd2hlcmUgYSBzaWduZWQgYGludCBpYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbWFwIGVudHJpZXMpLiBcXG5cXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGJiZWFmN2I1MWEyMzNkNTk4NDllYmM1ZTg2OTZmODg0MzZiZWVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDg6NTY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrX21hcC5jIGIvbmV0L2NvcmUvc29ja19tYXAuY1xuaW5kZXggY2E0OWJjN2Y4Njg3Yy4uMzhkZjg0Mjg0MzI4OSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC00MSw2ICs0MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqc29ja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWI7XG4gXG4gXHRpZiAoYXR0ci1cdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XG4rXHQgICAgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWCB8fFxuIFx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuIFx0ICAgIChhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHUzMikgXHUwMDI2XHUwMDI2XG4gXHQgICAgIGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTY0KSkgfHxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjE5Ljc3MDA2NDY2NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDEwMzEzNjI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgU29ja2V0IE1hcCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHNjYW4gdGhlIGRpZmYsIGZvY3VzaW5nIG9uIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuIEkgc2VlIGFuIGFkZGl0aW9uIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gIFNwZWNpZmljYWxseSwgSSBub3RpY2UgYSBuZXcgY2hlY2sgcmVsYXRlZCB0byBgbWF4X2VudHJpZXNgIHdpdGhpbiB0aGUgYHNvY2tfbWFwX2FsbG9jYCBmdW5jdGlvbi4gVGhlIGNvZGUgbm93IGluY2x1ZGVzIGEgYm91bmRzIGNoZWNrOiBgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWGAuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBzbyBJJ2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhcm91bmQgbGluZSA0MS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBpbiB0aGUgYWxsb2NhdGlvbiBwYXRoIGZvciBhIHNvY2tldCBtYXAsIGFuZCB0aGlzIGNoZWNrIGlzIGxpa2VseSBhaW1lZCBhdCBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzLiBBIGBtYXhfZW50cmllc2Agb2YgMCBpcyBjaGVja2VkIGVhcmxpZXIuIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIG5vdCBleGNlZWQgdGhlIG1heGltdW0gc2l6ZS4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODo0My44NzMyMDQ0MTVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0ICogQSBzaW5nbGUgZ2xvYmFsIG11dGV4IGxvY2sgaXMgdXNlZCBzaW5jZSBpdCBpcyBleHBlY3RlZCBjb250ZW50aW9uIGlzIGxvdy5cXG4gIDMxOlxcdCAqL1xcbiAgMzI6XFx0c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuICAzNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbiAgMzY6XFx0XFx0XFx0XFx0XFx0dTMyIHdoaWNoKTtcXG4gIDM3OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IGJwZl9zdGFiICpzdGFiO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbiAgNDQ6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWCB8fFxcbiAgNDU6XFx0XFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgICE9IDQgfHxcXG4gIDQ2OlxcdFxcdCAgICAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcXHUwMDI2XFx1MDAyNlxcbiAgNDc6XFx0XFx0ICAgICBhdHRyLVxcdTAwM2V2YWx1ZV9zaXplICE9IHNpemVvZih1NjQpKSB8fFxcbiAgNDg6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IH5TT0NLX0NSRUFURV9GTEFHX01BU0spXFxuICA0OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0c3RhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnN0YWIpLCBOVU1BX05PX05PREUpO1xcbiAgNTI6XFx0XFx0aWYgKCFzdGFiKVxcbiAgNTM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXFx1MDAyNnN0YWItXFx1MDAzZW1hcCwgYXR0cik7XFxuICA1NjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c3RhYi1cXHUwMDNlbG9jayk7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHN0YWItXFx1MDAzZXNrcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KSBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKlxcbiAgNTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29jayAqKSxcXG4gIDYwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdGFiLVxcdTAwM2VtYXAubnVtYV9ub2RlKTtcXG4gIDYxOlxcdFxcdGlmICghc3RhYi1cXHUwMDNlc2tzKSB7XFxuICA2MjpcXHRcXHRcXHRicGZfbWFwX2FyZWFfZnJlZShzdGFiKTtcXG4gIDYzOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNjQ6XFx0XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRyZXR1cm4gXFx1MDAyNnN0YWItXFx1MDAzZW1hcDtcXG4gIDY3OlxcdH1cXG4gIDY4OlxcdFxcbiAgNjk6XFx0aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuICA3MDpcXHR7XFxuICA3MTpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbiAgNzI6XFx0XFx0aW50IHJldDtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWF0dGFjaF9mbGFncyB8fCBhdHRyLVxcdTAwM2VyZXBsYWNlX2JwZl9mZClcXG4gIDc1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRDTEFTUyhmZCwgZikoYXR0ci1cXHUwMDNldGFyZ2V0X2ZkKTtcXG4gIDc4OlxcdFxcdG1hcCA9IF9fYnBmX21hcF9nZXQoZik7XFxuICA3OTpcXHRcXHRpZiAoSVNfRVJSKG1hcCkpXFxuICA4MDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtYXApO1xcbiAgODE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuICA4MjpcXHRcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG4gIDgzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuICA4NDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRpbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG4gIDg4OlxcdHtcXG4gIDg5OlxcdFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6NDMuODczMzYwOTM1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMDgwOTg3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoZWNrOiBgYXR0ci1cdTAwM2VtYXhfZW50cmllcyBcdTAwM2UgSU5UX01BWGAuIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IHRoZSByYXRpb25hbGUgYmVoaW5kIGl0LiBXaHkgd2FzIHRoaXMgY29uZGl0aW9uIGludHJvZHVjZWQ/IFdoYXQncyB0aGUgY29udGV4dD9cblxuTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgaGlzdG9yeS4gSSdsbCByZWFjaCBmb3IgYGdpdCBsb2dgIG9yIGBncmVwYCB0byBzZWFyY2ggZm9yIHJlbGF0ZWQgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHVzZXMgb2YgYHNvY2tfbWFwX2FsbG9jYCBvciBgc29ja19oYXNoX2FsbG9jYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBzb21lIGNsdWVzLiBJJ20gaG9waW5nIHRvIHVuY292ZXIgc2ltaWxhciBjaGVja3MgaW4gdGhhdCBhcmVhIG9yIHVuZGVyc3RhbmQgdGhlIHByb2JsZW0gdGhpcyB3YXMgbWVhbnQgdG8gYWRkcmVzcy4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY2hhbmdlcyB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBiYWNrZ3JvdW5kLCBhbGxvd2luZyBtZSB0byBmdWxseSBncmFzcCB3aHkgdGhpcyB1cHBlciBib3VuZCBjb25zdHJhaW50IG9uIGBtYXhfZW50cmllc2Agd2FzIGRlZW1lZCBuZWNlc3NhcnkuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIG9yaWdpbmFsIGJ1Zy9saW1pdGF0aW9uIHRoaXMgZml4IHdhcyBkZXNpZ25lZCB0byByZXNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODo0Ni4wODE0NjE5OFoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY5NDExNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zNz1zdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODMyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX21hcF9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXFx0Lm1hcF9tZXRhX2VxdWFsXFx0XFx0PSBicGZfbWFwX21ldGFfZXF1YWwsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzQ6XFx0Lm1hcF9hbGxvY1xcdFxcdD0gc29ja19tYXBfYWxsb2MsXFxubmV0L2NvcmUvc29ja19tYXAuYy04MzUtXFx0Lm1hcF9mcmVlXFx0XFx0PSBzb2NrX21hcF9mcmVlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODo0Ni40NTA4ODAzNDdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAxNjkzMzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBzb2NrX21hcGAgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBmb2N1c2luZyBvbiBob3cgYG1heF9lbnRyaWVzYCBhbmQgdGhlIGBrZXlgIGFyZSBtYW5hZ2VkLiBNeSBpbW1lZGlhdGUgYXBwcm9hY2ggaXMgdG8gaGVhZCBvdmVyIHRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgc3RhcnQgZ3JlcHBpbmcgZm9yIGBzb2NrX21hcF9gLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IHBhdHRlcm5zIGVtZXJnZSBpbiBpdHMgdXNhZ2UuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHVuY292ZXIgdGhlIHJlbGV2YW50IHBhcnRzIEkgbmVlZCB0byBmb2N1cyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk3NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjQ4LjQ2NzgxNzQ3NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMDg1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1OTQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MzI9c3RhdGljIERFRklORV9NVVRFWChzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTMzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzYtXFx0XFx0XFx0XFx0dTMyIHdoaWNoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzozOTpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY5OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NzppbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTEwLVxcdG11dGV4X2xvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTExOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgTlVMTCwgcHJvZywgTlVMTCwgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTEyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2c29ja21hcF9tdXRleCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjExODpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19hY3F1aXJlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExOS1cXHRfX2FjcXVpcmVzKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI1OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2LVxcdF9fcmVsZWFzZXMoXFx1MDAyNnNrLVxcdTAwM2Vza19sb2NrLnNsb2NrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMzEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMzI6c3RhdGljIHZvaWQgc29ja19tYXBfYWRkX2xpbmsoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEzMy1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2tfbGluayAqbGluayxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQzOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbF9saW5rKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCB2b2lkICpsaW5rX3JhdylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyLVxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXAgPSBsaW5rLVxcdTAwM2VtYXA7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM6XFx0XFx0XFx0c3RydWN0IHNrX3Bzb2NrX3Byb2dzICpwcm9ncyA9IHNvY2tfbWFwX3Byb2dzKG1hcCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTQtXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3OS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4MDpzdGF0aWMgdm9pZCBzb2NrX21hcF91bnJlZihzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmxpbmtfcmF3KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0LVxcdGlmIChsaWtlbHkocHNvY2spKSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxODU6XFx0XFx0c29ja19tYXBfZGVsX2xpbmsoc2ssIHBzb2NrLCBsaW5rX3Jhdyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xODYtXFx0XFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4OS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5MDpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk4OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2sgKnNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTIwNC1cXHRpZiAocHNvY2spIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjIwNTpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWNsb3NlICE9IHNvY2tfbWFwX2Nsb3NlKSB7XFxubmV0L2NvcmUvc29ja19tYXAuYy0yMDYtXFx0XFx0XFx0cHNvY2sgPSBFUlJfUFRSKC1FQlVTWSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjIxODpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE5LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjIyMDpcXHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTIyMS1cXHRzdHJ1Y3QgYnBmX3Byb2cgKnN0cmVhbV92ZXJkaWN0ID0gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjYxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MjYyOlxcdHBzb2NrID0gc29ja19tYXBfcHNvY2tfZ2V0X2NoZWNrZWQoc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjYzLVxcdGlmIChJU19FUlIocHNvY2spKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTI5OC1cXHQgKi9cXG5uZXQvY29yZS9zb2NrX21hcC5jOjI5OTpcXHRyZXQgPSBzb2NrX21hcF9pbml0X3Byb3RvKHNrLCBwc29jayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMDAtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzM5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzQwOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM0MS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1OC1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzozNTk6XFx0XFx0XFx0c29ja19tYXBfdW5yZWYoc2ssIHBzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zNjAtXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3MzpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZWxlYXNlX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzQte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzctXFxubmV0L2NvcmUvc29ja19tYXAuYzozNzg6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzozODk6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTAte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTItXFxubmV0L2NvcmUvc29ja19tYXAuYzozOTM6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk0LVxcdGlmICghc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwMC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwMTpzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy00MDIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00MDctXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDg6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA5LVxcdGlmICghc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQxNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQxNjpzdGF0aWMgaW50IF9fc29ja19tYXBfZGVsZXRlKHN0cnVjdCBicGZfc3RhYiAqc3RhYiwgc3RydWN0IHNvY2sgKnNrX3Rlc3QsXFxubmV0L2NvcmUvc29ja19tYXAuYy00MTctXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc29jayAqKnBzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDI2LVxcdGlmIChsaWtlbHkoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDI3OlxcdFxcdHNvY2tfbWFwX3VucmVmKHNrLCBwc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDI4LVxcdGVsc2VcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM1OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDM2LVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmxpbmtfcmF3KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00MzktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NDA6XFx0X19zb2NrX21hcF9kZWxldGUoc3RhYiwgc2ssIGxpbmtfcmF3KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0MS19XFxubmV0L2NvcmUvc29ja19tYXAuYy00NDItXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NDM6c3RhdGljIGxvbmcgc29ja19tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQ0LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUyLVxcdHBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxubmV0L2NvcmUvc29ja19tYXAuYzo0NTM6XFx0cmV0dXJuIF9fc29ja19tYXBfZGVsZXRlKHN0YWIsIE5VTEwsIHBzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00NTQtfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDU1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDU2OnN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1Ny17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ3MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ3MTpzdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ3Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrICpzaywgdTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00ODktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0OTA6XFx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ5MS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTA2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTA3OlxcdHNvY2tfbWFwX2FkZF9saW5rKHBzb2NrLCBsaW5rLCBtYXAsIFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaWR4XSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy01MDgtXFx0c3RhYi1cXHUwMDNlc2tzW2lkeF0gPSBzaztcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUwOS1cXHRpZiAob3NrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTEwOlxcdFxcdHNvY2tfbWFwX3VucmVmKG9zaywgXFx1MDAyNnN0YWItXFx1MDAzZXNrc1tpZHhdKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUxMS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2c3RhYi1cXHUwMDNlbG9jayk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyMS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUyMjpzdGF0aWMgYm9vbCBzb2NrX21hcF9vcF9va2F5KGNvbnN0IHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqb3BzKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTI4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTI5OnN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTMwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTM3OnN0YXRpYyBib29sIHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzOC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU0MjpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0My17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1Nj1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU5OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU2MC1cXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgxLVxcdH1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU4MjpcXHRpZiAoIXNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNrKSkge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgzLVxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01ODYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODc6XFx0c29ja19tYXBfc2tfYWNxdWlyZShzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODg6XFx0aWYgKCFzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4OS1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5MC1cXHRlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTkxOlxcdFxcdHJldCA9IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc2ssIGZsYWdzKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5Mi1cXHRlbHNlXFxubmV0L2NvcmUvc29ja19tYXAuYy01OTMtXFx0XFx0cmV0ID0gc29ja19oYXNoX3VwZGF0ZV9jb21tb24obWFwLCBrZXksIHNrLCBmbGFncyk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo1OTQ6XFx0c29ja19tYXBfc2tfcmVsZWFzZShzayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy01OTUtb3V0Olxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01OTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo2MDA6c3RhdGljIGxvbmcgc29ja19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAxLVxcdFxcdFxcdFxcdCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02MDgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo2MDk6XFx0aWYgKCFzb2NrX21hcF9za19pc19zdWl0YWJsZShzaykpXFxubmV0L2NvcmUvc29ja19tYXAuYy02MTAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02MTMtXFx0YmhfbG9ja19zb2NrKHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjYxNDpcXHRpZiAoIXNvY2tfbWFwX3NrX3N0YXRlX2FsbG93ZWQoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjE1LVxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjE2LVxcdGVsc2UgaWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApXFxubmV0L2NvcmUvc29ja19tYXAuYzo2MTc6XFx0XFx0cmV0ID0gc29ja19tYXBfdXBkYXRlX2NvbW1vbihtYXAsICoodTMyICopa2V5LCBzaywgZmxhZ3MpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjE4LVxcdGVsc2VcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjI0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjI1OkJQRl9DQUxMXzQoYnBmX3NvY2tfbWFwX3VwZGF0ZSwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIHNvcHMsXFxubmV0L2NvcmUvc29ja19tYXAuYy02MjYtXFx0ICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGtleSwgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjI5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjMwOlxcdGlmIChsaWtlbHkoc29ja19tYXBfc2tfaXNfc3VpdGFibGUoc29wcy1cXHUwMDNlc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvc29ja19tYXAuYzo2MzE6XFx0XFx0ICAgc29ja19tYXBfb3Bfb2theShzb3BzKSkpXFxubmV0L2NvcmUvc29ja19tYXAuYzo2MzI6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9jb21tb24obWFwLCAqKHUzMiAqKWtleSwgc29wcy1cXHUwMDNlc2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy02MzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02MzYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo2Mzc6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX21hcF91cGRhdGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2Mzg6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX21hcF91cGRhdGUsXFxubmV0L2NvcmUvc29ja19tYXAuYy02MzktXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NjQ4PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02NTUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo2NTY6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1NzpcXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxubmV0L2NvcmUvc29ja19tYXAuYy02NTgtXFx0XFx0cmV0dXJuIFNLX0RST1A7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3Nj1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Njg0OlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODU6XFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjg2LVxcdFxcdHJldHVybiBTS19EUk9QO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz02OTc9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9tc2dfcmVkaXJlY3RfbWFwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MDYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MDc6c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcwOC1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz03MjA9REVGSU5FX0JQRl9JVEVSX0ZVTkMoc29ja21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNDpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyOC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyOTpcXHRpbmZvLVxcdTAwM2VzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0oaW5mby1cXHUwMDNlbWFwLCBpbmZvLVxcdTAwM2VpbmRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy03MzAtXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjczNTpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNi1cXHRfX2FjcXVpcmVzKHJjdSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTczNy17XFxubmV0L2NvcmUvc29ja19tYXAuYzo3Mzg6XFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzM5LVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03NDItXFxubmV0L2NvcmUvc29ja19tYXAuYzo3NDM6XFx0LyogcGFpcnMgd2l0aCBzb2NrX21hcF9zZXFfc3RvcCAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ0LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0NTpcXHRyZXR1cm4gc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKGluZm8pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ2LX1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0ODpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ5LVxcdF9fbXVzdF9ob2xkKHJjdSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1MC17XFxubmV0L2NvcmUvc29ja19tYXAuYzo3NTE6XFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzUyLVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03NTUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3NTY6XFx0cmV0dXJuIHNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShpbmZvKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1Ny19XFxubmV0L2NvcmUvc29ja19tYXAuYy03NTgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3NTk6c3RhdGljIGludCBzb2NrX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc2MC1cXHRfX211c3RfaG9sZChyY3UpXFxubmV0L2NvcmUvc29ja19tYXAuYy03NjEte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzYyOlxcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc2My1cXHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAgY3R4ID0ge307XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4My1cXHRfX3JlbGVhc2VzKHJjdSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzg1LVxcdGlmICghdilcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc4NjpcXHRcXHQodm9pZClzb2NrX21hcF9zZXFfc2hvdyhzZXEsIE5VTEwpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzg3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzg4OlxcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0YXJ0ICovXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODktXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNvY2tfbWFwX3NlcV9vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTM6XFx0LnN0YXJ0XFx0PSBzb2NrX21hcF9zZXFfc3RhcnQsXFxubmV0L2NvcmUvc29ja19tYXAuYzo3OTQ6XFx0Lm5leHRcXHQ9IHNvY2tfbWFwX3NlcV9uZXh0LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Nzk1OlxcdC5zdG9wXFx0PSBzb2NrX21hcF9zZXFfc3RvcCxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5NjpcXHQuc2hvd1xcdD0gc29ja19tYXBfc2VxX3Nob3csXFxubmV0L2NvcmUvc29ja19tYXAuYy03OTctfTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5OTpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUodm9pZCAqcHJpdl9kYXRhLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxubmV0L2NvcmUvc29ja19tYXAuYy04MDEte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODAyOlxcdHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbyA9IHByaXZfZGF0YTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwMy1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODA5OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2Zpbmlfc2VxX3ByaXZhdGUodm9pZCAqcHJpdl9kYXRhKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODEwLXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxMTpcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBwcml2X2RhdGE7XFxubmV0L2NvcmUvc29ja19tYXAuYy04MTItXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgxNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxNjpzdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODE3LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODI0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gc29ja19tYXBfaXRlcl9zZXFfaW5mbyA9IHtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgyNTpcXHQuc2VxX29wc1xcdFxcdD0gXFx1MDAyNnNvY2tfbWFwX3NlcV9vcHMsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjY6XFx0LmluaXRfc2VxX3ByaXZhdGVcXHQ9IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mjc6XFx0LmZpbmlfc2VxX3ByaXZhdGVcXHQ9IHNvY2tfbWFwX2Zpbmlfc2VxX3ByaXZhdGUsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mjg6XFx0LnNlcV9wcml2X3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8pLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODI5LX07XFxubmV0L2NvcmUvc29ja19tYXAuYy04MzAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzE6QlRGX0lEX0xJU1RfU0lOR0xFKHNvY2tfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3N0YWIpXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzI6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfbWFwX29wcyA9IHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzMy1cXHQubWFwX21ldGFfZXF1YWxcXHRcXHQ9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNDpcXHQubWFwX2FsbG9jXFx0XFx0PSBzb2NrX21hcF9hbGxvYyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNTpcXHQubWFwX2ZyZWVcXHRcXHQ9IHNvY2tfbWFwX2ZyZWUsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzY6XFx0Lm1hcF9nZXRfbmV4dF9rZXlcXHQ9IHNvY2tfbWFwX2dldF9uZXh0X2tleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzODpcXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzOTpcXHQubWFwX2RlbGV0ZV9lbGVtXFx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjg0MDpcXHQubWFwX2xvb2t1cF9lbGVtXFx0PSBzb2NrX21hcF9sb29rdXAsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDE6XFx0Lm1hcF9yZWxlYXNlX3VyZWZcXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXFxubmV0L2NvcmUvc29ja19tYXAuYy04NDItXFx0Lm1hcF9jaGVja19idGZcXHRcXHQ9IG1hcF9jaGVja19ub19idGYsXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDM6XFx0Lm1hcF9tZW1fdXNhZ2VcXHRcXHQ9IHNvY2tfbWFwX21lbV91c2FnZSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjg0NDpcXHQubWFwX2J0Zl9pZFxcdFxcdD0gXFx1MDAyNnNvY2tfbWFwX2J0Zl9pZHNbMF0sXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NDU6XFx0Lml0ZXJfc2VxX2luZm9cXHRcXHQ9IFxcdTAwMjZzb2NrX21hcF9pdGVyX3NlcV9pbmZvLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODQ2LX07XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTkxOT1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZGVsZXRlX2Zyb21fbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTkzNy1cXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjkzODpcXHRcXHRzb2NrX21hcF91bnJlZihlbGVtLVxcdTAwM2VzaywgZWxlbSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy05MzktXFx0XFx0c29ja19oYXNoX2ZyZWVfZWxlbShodGFiLCBlbGVtKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTQ0PXN0YXRpYyBsb25nIHNvY2tfaGFzaF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTk1OC1cXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjk1OTpcXHRcXHRzb2NrX21hcF91bnJlZihlbGVtLVxcdTAwM2VzaywgZWxlbSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy05NjAtXFx0XFx0c29ja19oYXNoX2ZyZWVfZWxlbShodGFiLCBlbGVtKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTk0PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMDEyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAxMzpcXHRyZXQgPSBzb2NrX21hcF9saW5rKG1hcCwgc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAxNC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAzOC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwMzk6XFx0c29ja19tYXBfYWRkX2xpbmsocHNvY2ssIGxpbmssIG1hcCwgZWxlbV9uZXcpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0MC1cXHQvKiBBZGQgbmV3IGVsZW1lbnQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXRcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0NS1cXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwNDY6XFx0XFx0c29ja19tYXBfdW5yZWYoZWxlbS1cXHUwMDNlc2ssIGVsZW0pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA0Ny1cXHRcXHRzb2NrX2hhc2hfZnJlZV9lbGVtKGh0YWIsIGVsZW0pO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMTQ3PXN0YXRpYyB2b2lkIHNvY2tfaGFzaF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExODMtXFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTE4NDpcXHRcXHRcXHRzb2NrX21hcF91bnJlZihlbGVtLVxcdTAwM2VzaywgZWxlbSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTg1LVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMjMyPUJQRl9DQUxMXzQoYnBmX3NvY2tfaGFzaF91cGRhdGUsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBzb3BzLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjM2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIzNzpcXHRpZiAobGlrZWx5KHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKHNvcHMtXFx1MDAzZXNrKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIzODpcXHRcXHQgICBzb2NrX21hcF9vcF9va2F5KHNvcHMpKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMzktXFx0XFx0cmV0dXJuIHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKG1hcCwga2V5LCBzb3BzLVxcdTAwM2VzaywgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMjU0PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2Mi1cXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNjM6XFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI2NC1cXHRcXHRyZXR1cm4gU0tfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI4Mj1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfaGFzaCwgc3RydWN0IHNrX21zZyAqLCBtc2csXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyOTAtXFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjkxOlxcdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyOTItXFx0XFx0cmV0dXJuIFNLX0RST1A7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NDg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfaGFzaF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTItXFx0Lm1hcF9nZXRfbmV4dF9rZXlcXHQ9IHNvY2tfaGFzaF9nZXRfbmV4dF9rZXksXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDUzOlxcdC5tYXBfdXBkYXRlX2VsZW1cXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1NC1cXHQubWFwX2RlbGV0ZV9lbGVtXFx0PSBzb2NrX2hhc2hfZGVsZXRlX2VsZW0sXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDY0OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDY1LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0Nzg6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqKipwcHJvZyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NzktXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2xpbmsgKioqcGxpbmssIHUzMiB3aGljaClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0ODAte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ4MTpcXHRzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnByb2dzID0gc29ja19tYXBfcHJvZ3MobWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0ODItXFx0c3RydWN0IGJwZl9wcm9nICoqY3VyX3Bwcm9nO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTIwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyMTpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzctICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM4OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTQ1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU0NjpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKG1hcCwgXFx1MDAyNnBwcm9nLCBcXHUwMDI2cGxpbmssIHdoaWNoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1NDctXFx0aWYgKHJldClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU0OS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE1NTA6XFx0cmV0ID0gc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2sod2hpY2gsIHByb2cpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU1MS1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTcyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU3MzppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTc0LVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTkzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU5NDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX2xpbmtfbG9va3VwKG1hcCwgXFx1MDAyNnBwcm9nLCBOVUxMLCBhdHRyLVxcdTAwM2VxdWVyeS5hdHRhY2hfdHlwZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTk1LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjIyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX3VubGluayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYyMy17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjUtXFx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MjY6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsobGluay1cXHUwMDNlbWFwLCBzayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjctXFx0XFx0XFx0XFx0XFx0XFx0IGxpbmstXFx1MDAzZWxpbmtfcmF3KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYzNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MzY6c3RhdGljIHZvaWQgc29ja19tYXBfcmVtb3ZlX2xpbmtzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2Mzcte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQwLVxcdHdoaWxlICgobGluayA9IHNrX3Bzb2NrX2xpbmtfcG9wKHBzb2NrKSkpIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDE6XFx0XFx0c29ja19tYXBfdW5saW5rKHNrLCBsaW5rKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDItXFx0XFx0c2tfcHNvY2tfZnJlZV9saW5rKGxpbmspO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY0Njp2b2lkIHNvY2tfbWFwX3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ3LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY1Ni1cXHRcXHRzYXZlZF91bmhhc2ggPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpLVxcdTAwM2V1bmhhc2g7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjU3OlxcdFxcdGlmICh1bmxpa2VseShzYXZlZF91bmhhc2ggPT0gc29ja19tYXBfdW5oYXNoKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NTgtXFx0XFx0XFx0Z290byByZXRyeTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY2MC1cXHRcXHRzYXZlZF91bmhhc2ggPSBwc29jay1cXHUwMDNlc2F2ZWRfdW5oYXNoO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY2MTpcXHRcXHRzb2NrX21hcF9yZW1vdmVfbGlua3Moc2ssIHBzb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NjItXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjYzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY2NDpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHNhdmVkX3VuaGFzaCA9PSBzb2NrX21hcF91bmhhc2gpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY2NS1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NzAtfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3MTpFWFBPUlRfU1lNQk9MX0dQTChzb2NrX21hcF91bmhhc2gpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NzM6dm9pZCBzb2NrX21hcF9kZXN0cm95KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NzQte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjgzLVxcdFxcdHNhdmVkX2Rlc3Ryb3kgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpLVxcdTAwM2VkZXN0cm95O1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY4NDpcXHRcXHRpZiAodW5saWtlbHkoc2F2ZWRfZGVzdHJveSA9PSBzb2NrX21hcF9kZXN0cm95KSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2ODUtXFx0XFx0XFx0Z290byByZXRyeTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY4Ny1cXHRcXHRzYXZlZF9kZXN0cm95ID0gcHNvY2stXFx1MDAzZXNhdmVkX2Rlc3Ryb3k7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjg4OlxcdFxcdHNvY2tfbWFwX3JlbW92ZV9saW5rcyhzaywgcHNvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY4OS1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY5Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2OTM6XFx0XFx0aWYgKFdBUk5fT05fT05DRShzYXZlZF9kZXN0cm95ID09IHNvY2tfbWFwX2Rlc3Ryb3kpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY5NC1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2OTktfVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTcwMDpFWFBPUlRfU1lNQk9MX0dQTChzb2NrX21hcF9kZXN0cm95KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzAyOnZvaWQgc29ja19tYXBfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzAzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcxMi1cXHRcXHRzYXZlZF9jbG9zZSA9IHBzb2NrLVxcdTAwM2VzYXZlZF9jbG9zZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MTM6XFx0XFx0c29ja19tYXBfcmVtb3ZlX2xpbmtzKHNrLCBwc29jayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzE0LVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzIyLVxcdFxcdCAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTcyMzpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHNhdmVkX2Nsb3NlID09IHNvY2tfbWFwX2Nsb3NlKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MjQtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzI5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTczMDpcXHRcXHRpZiAodW5saWtlbHkoc2F2ZWRfY2xvc2UgPT0gc29ja19tYXBfY2xvc2UpKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTczMS1cXHRcXHRcXHRnb3RvIHJldHJ5O1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzM1LX1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MzY6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfY2xvc2UpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTczNy1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6NDguNTE1OTMwNjAyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzEyMzYxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgc29ja19tYXBfZ2V0X25leHRfa2V5YC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhvc2UgbGluZXMgb2YgY29kZSwgc28gbGV0IG1lIHF1aWNrbHkganVtcCB0byBsaW5lcyA0NTYtNDcwLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcmVzaWRlcywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjUzLjM0NzE3MDc5OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdHBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxuIDQ1MzpcXHRcXHRyZXR1cm4gX19zb2NrX21hcF9kZWxldGUoc3RhYiwgTlVMTCwgcHNrKTtcXG4gNDU0OlxcdH1cXG4gNDU1OlxcdFxcbiA0NTY6XFx0c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxcbiA0NTc6XFx0e1xcbiA0NTg6XFx0XFx0c3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApO1xcbiA0NTk6XFx0XFx0dTMyIGkgPSBrZXkgPyAqKHUzMiAqKWtleSA6IFUzMl9NQVg7XFxuIDQ2MDpcXHRcXHR1MzIgKmtleV9uZXh0ID0gbmV4dDtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0aWYgKGkgPT0gc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzIC0gMSlcXG4gNDYzOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA0NjQ6XFx0XFx0aWYgKGkgXFx1MDAzZT0gc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzKVxcbiA0NjU6XFx0XFx0XFx0KmtleV9uZXh0ID0gMDtcXG4gNDY2OlxcdFxcdGVsc2VcXG4gNDY3OlxcdFxcdFxcdCprZXlfbmV4dCA9IGkgKyAxO1xcbiA0Njg6XFx0XFx0cmV0dXJuIDA7XFxuIDQ2OTpcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdHN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxcbiA0NzI6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCBmbGFncylcXG4gNDczOlxcdHtcXG4gNDc0OlxcdFxcdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcXG4gNDc1OlxcdFxcdHN0cnVjdCBza19wc29ja19saW5rICpsaW5rO1xcbiA0NzY6XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcXG4gNDc3OlxcdFxcdHN0cnVjdCBzb2NrICpvc2s7XFxuIDQ3ODpcXHRcXHRpbnQgcmV0O1xcbiA0Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU4OjUzLjM0NzQwMzYzOVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzk4ODM2NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzb2NrZXQgbWFwIGxvb2t1cCBpcyBhY3R1YWxseSBiZWhhdmluZywgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYF9fc29ja19tYXBfbG9va3VwX2VsZW1gIGZ1bmN0aW9uLiBMZXQncyB6b29tIGluIG9uIGxpbmVzIDM3NSB0aHJvdWdoIDQwMC4gVGhhdCByYW5nZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY2h1bmsgb2YgdGhlIGNvcmUgbG9naWMgSSdtIGludGVyZXN0ZWQgaW4sIGhvcGVmdWxseSByZXZlYWxpbmcgdGhlIG51YW5jZXMgb2YgaG93IHRoaXMgcGFydGljdWxhciBsb29rdXAgaXMgaW1wbGVtZW50ZWQuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCBjb250ZW50aW9uLiBJJ20gZXhwZWN0aW5nIHNvbWUgc3RhbmRhcmQgYnBmIG1hcCBsb29rdXAgcGFyYWRpZ21zLCBidXQgSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHVuZXhwZWN0ZWQgb3Igbm92ZWwgaW4gdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoYXQncyB3aGF0IG1ha2VzIHRoZSBkaWZmZXJlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTg6NTUuMTQ2MjQzNzM4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NTpcXHRcXHRwc29ja19wcm9nc19kcm9wKFxcdTAwMjZjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCktXFx1MDAzZXByb2dzKTtcXG4gMzc2OlxcdH1cXG4gMzc3OlxcdFxcbiAzNzg6XFx0c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxuIDM3OTpcXHR7XFxuIDM4MDpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdFdBUk5fT05fT05DRSghcmN1X3JlYWRfbG9ja19oZWxkKCkpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAodW5saWtlbHkoa2V5IFxcdTAwM2U9IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMpKVxcbiAzODU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDM4NjpcXHRcXHRyZXR1cm4gUkVBRF9PTkNFKHN0YWItXFx1MDAzZXNrc1trZXldKTtcXG4gMzg3OlxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIDM5MDpcXHR7XFxuIDM5MTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDM5MjpcXHRcXG4gMzkzOlxcdFxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcXG4gMzk0OlxcdFxcdGlmICghc2spXFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzk2OlxcdFxcdGlmIChza19pc19yZWZjb3VudGVkKHNrKSlcXG4gMzk3OlxcdFxcdFxcdHNvY2tfaG9sZChzayk7XFxuIDM5ODpcXHRcXHRyZXR1cm4gc2s7XFxuIDM5OTpcXHR9XFxuIDQwMDpcXHRcXG4gNDAxOlxcdHN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gNDAyOlxcdHtcXG4gNDAzOlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4gNDA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1ODo1NS4xNDYzNTQ0ODdaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTgzMzE2NDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBtYXhfZW50cmllc2AgVXNhZ2UgaW4gYHNvY2tfbWFwYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgbWF4X2VudHJpZXNgIGlzIGJlaW5nIHVzZWQgd2l0aGluIGBzb2NrX21hcGAsIGFuZCBJIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2guIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIGFsbG9jYXRpb24gcm91dGluZXMg4oCTIHNwZWNpZmljYWxseSwgYHNvY2tfaGFzaF9hbGxvY2AgYW5kIG90aGVyIG1hcCBhbGxvY2F0b3JzIGZvdW5kIHdpdGhpbiBrZXJuZWwvYnBmIGFuZCBuZXQvY29yZS9zb2NrX21hcC5jLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGVzZSBhcmVhcywgYXMgdGhleSdyZSB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb25zIGZvciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGBtYXhfZW50cmllc2AgcGFyYW1ldGVyLiBGdXJ0aGVybW9yZSwgSSdsbCBuZWVkIHRvIHJ1bGUgb3V0IGNvbW1vbiBlcnJvcnMgbGlrZSBpbnRlZ2VyIG92ZXJmbG93cyB0aGF0IG1pZ2h0IGFyaXNlIHdoZW4gd29ya2luZyB3aXRoIGEgdmFyaWFibGUgaW50ZW5kZWQgdG8gdHJhY2sgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMuIEEgY29tcHJlaGVuc2l2ZSBzZWFyY2gsIHVzaW5nIGBncmVwYCwgaXMgaW4gb3JkZXIuIEknbGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSB3aGVyZSBgbWF4X2VudHJpZXNgIGlzIGNvbXBhcmVkIGFnYWluc3QgYElOVF9NQVhgIGFjcm9zcyB0aGUga2VybmVsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIEkgbmVlZCB0byBhZGRyZXNzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIGxpbWl0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjAwLjk3OTUyMzYxNFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNzMxMzQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfZW50cmllcyBcXHUwMDNlIElOVF9NQVhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00My1cXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQ6XFx0ICAgIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgICE9IDQgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MDIuNjg2ODQzNDI0WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyODA1NjkyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGFnYWluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhpcyBgc29ja19tYXBgIGZ1bmN0aW9uYWxpdHkuXG5cbioqRGVjb25zdHJ1Y3RpbmcgU29jayBNYXAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIGBzb2NrX21hcF9hbGxvY2AuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd2hlbmV2ZXIgSSdtIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBCUEYgc2lkZS4gT3IgbWF5YmUgYGJwZl9pdGVyYCDigJMgaXQgY291bGQgYmUgaW52b2x2ZWQgaW4gaG93IHdlJ3JlIHRyYXZlcnNpbmcgb3IgaXRlcmF0aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBpbiBxdWVzdGlvbi4gVGhlbiBhZ2FpbiwgSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdG8gcGVlayBhdCBgc2VxX2ZpbGVgLlxuXG5XYWl0IGEgbWludXRlLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNvY2tfbWFwX3NlcV9zdGFydGAgYW5kIGBzb2NrX21hcF9zZXFfbmV4dGAuIFRoZXNlIGZ1bmN0aW9uIG5hbWVzIGhhdmUgXCJzZXFcIiBpbiB0aGVtLCB3aGljaCBwb2ludHMgZGlyZWN0bHkgYXQgaG93IGEgc2VxdWVudGlhbCBpbnRlcmZhY2UgbWlnaHQgYmUgaW1wbGVtZW50ZWQuXG5cbk9rYXksIGxldCdzIGN1dCByaWdodCB0byB0aGUgY2hhc2UsIEknbSBnb2luZyB0byBqdW1wIGludG8gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBMaW5lcyA3MDAgdG8gNzY1IGxvb2sgbGlrZSB0aGUgcHJpbWUgc3VzcGVjdCBhcmVhLiBUaW1lIHRvIGRpc3NlY3QgdGhhdCBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjA0Ljk2NzQxNjA3N1oiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0LnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXFxuIDcwMTpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gNzAyOlxcdFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19DT05TVF9NQVBfUFRSLFxcbiA3MDM6XFx0XFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxcbiA3MDQ6XFx0XFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxcbiA3MDU6XFx0fTtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0c3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvIHtcXG4gNzA4OlxcdFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuIDcwOTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDcxMDpcXHRcXHR1MzIgaW5kZXg7XFxuIDcxMTpcXHR9O1xcbiA3MTI6XFx0XFxuIDcxMzpcXHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAge1xcbiA3MTQ6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xcbiA3MTU6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfbWFwICosIG1hcCk7XFxuIDcxNjpcXHRcXHRfX2JwZl9tZF9wdHIodm9pZCAqLCBrZXkpO1xcbiA3MTc6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBzb2NrICosIHNrKTtcXG4gNzE4OlxcdH07XFxuIDcxOTpcXHRcXG4gNzIwOlxcdERFRklORV9CUEZfSVRFUl9GVU5DKHNvY2ttYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbiA3MjE6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIDcyMjpcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrICpzaylcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxuIDcyNTpcXHR7XFxuIDcyNjpcXHRcXHRpZiAodW5saWtlbHkoaW5mby1cXHUwMDNlaW5kZXggXFx1MDAzZT0gaW5mby1cXHUwMDNlbWFwLVxcdTAwM2VtYXhfZW50cmllcykpXFxuIDcyNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0aW5mby1cXHUwMDNlc2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKGluZm8tXFx1MDAzZW1hcCwgaW5mby1cXHUwMDNlaW5kZXgpO1xcbiA3MzA6XFx0XFxuIDczMTpcXHRcXHQvKiBjYW4ndCByZXR1cm4gc2sgZGlyZWN0bHksIHNpbmNlIHRoYXQgbWlnaHQgYmUgTlVMTCAqL1xcbiA3MzI6XFx0XFx0cmV0dXJuIGluZm87XFxuIDczMzpcXHR9XFxuIDczNDpcXHRcXG4gNzM1OlxcdHN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbiA3MzY6XFx0XFx0X19hY3F1aXJlcyhyY3UpXFxuIDczNzpcXHR7XFxuIDczODpcXHRcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuIDczOTpcXHRcXG4gNzQwOlxcdFxcdGlmICgqcG9zID09IDApXFxuIDc0MTpcXHRcXHRcXHQrKypwb3M7XFxuIDc0MjpcXHRcXG4gNzQzOlxcdFxcdC8qIHBhaXJzIHdpdGggc29ja19tYXBfc2VxX3N0b3AgKi9cXG4gNzQ0OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNzQ1OlxcdFxcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XFxuIDc0NjpcXHR9XFxuIDc0NzpcXHRcXG4gNzQ4OlxcdHN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuIDc0OTpcXHRcXHRfX211c3RfaG9sZChyY3UpXFxuIDc1MDpcXHR7XFxuIDc1MTpcXHRcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuIDc1MjpcXHRcXG4gNzUzOlxcdFxcdCsrKnBvcztcXG4gNzU0OlxcdFxcdCsraW5mby1cXHUwMDNlaW5kZXg7XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdHJldHVybiBzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oaW5mbyk7XFxuIDc1NzpcXHR9XFxuIDc1ODpcXHRcXG4gNzU5OlxcdHN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuIDc2MDpcXHRcXHRfX211c3RfaG9sZChyY3UpXFxuIDc2MTpcXHR7XFxuIDc2MjpcXHRcXHRzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8gPSBzZXEtXFx1MDAzZXByaXZhdGU7XFxuIDc2MzpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfX3NvY2ttYXAgY3R4ID0ge307XFxuIDc2NDpcXHRcXHRzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSBtZXRhO1xcbiA3NjU6XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRtZXRhLnNlcSA9IHNlcTtcXG4gNzY4OlxcdFxcdHByb2cgPSBicGZfaXRlcl9nZXRfaW5mbyhcXHUwMDI2bWV0YSwgIXYpO1xcbiA3Njk6XFx0XFx0aWYgKCFwcm9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1OTowNC45Njc1NDExNDdaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE2NjcxMjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFNpZ25lZCBJbnRlZ2VyIFVzYWdlIHdpdGggYG1heF9lbnRyaWVzYCBpbiBgc29ja19tYXAuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgd2UncmUgdXNpbmcgYG1heF9lbnRyaWVzYCB3aXRoIGEgc2lnbmVkIGludGVnZXIuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgbG9jYXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGF0IGZpbGUgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIHdoZXJlIHRoaXMga2luZCBvZiB0aGluZyB3b3VsZCBiZSBoYW5kbGVkLlxuXG5UbyBuYXJyb3cgaXQgZG93biwgSSBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZSBmb3IgaW5zdGFuY2VzIG9mIGJvdGggYG1hcC1cdTAwM2VtYXhfZW50cmllc2AgYW5kIGBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2AuIFRob3NlIHNlZW0gbGlrZSB0aGUgbW9zdCByZWxldmFudCBwYXR0ZXJucyB0byBsb29rIGZvciB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZpbGUuIEhvcGVmdWxseSwgdGhpcyBzZWFyY2ggd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSB1c2FnZSBhbmQgYWxsb3cgbWUgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFuIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MDguMTM0MjU2MjA3WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQzNTk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfZW50cmllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9Mzk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDItXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MzpcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgPT0gMCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQ6XFx0ICAgIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWCB8fFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDUtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICAgICE9IDQgfHxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTctXFxubmV0L2NvcmUvc29ja19tYXAuYzo1ODpcXHRzdGFiLVxcdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5LVxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2sgKiksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTM0MD1zdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTM0OS1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjM1MDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpKyspIHtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1MS1cXHRcXHRzdHJ1Y3Qgc29jayAqKnBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTM3OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzgzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg0OlxcdGlmICh1bmxpa2VseShrZXkgXFx1MDAzZT0gbWFwLVxcdTAwM2VtYXhfZW50cmllcykpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODUtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ0Mz1zdGF0aWMgbG9uZyBzb2NrX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0OTpcXHRpZiAodW5saWtlbHkoaSBcXHUwMDNlPSBtYXAtXFx1MDAzZW1heF9lbnRyaWVzKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1MC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NDU2PXN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDYxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDYyOlxcdGlmIChpID09IHN0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyAtIDEpXFxubmV0L2NvcmUvc29ja19tYXAuYy00NjMtXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxubmV0L2NvcmUvc29ja19tYXAuYzo0NjQ6XFx0aWYgKGkgXFx1MDAzZT0gc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDY1LVxcdFxcdCprZXlfbmV4dCA9IDA7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ3MT1zdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDgyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDgzOlxcdGlmICh1bmxpa2VseShpZHggXFx1MDAzZT0gbWFwLVxcdTAwM2VtYXhfZW50cmllcykpXFxubmV0L2NvcmUvc29ja19tYXAuYy00ODQtXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzI0PXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI1LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcXHRpZiAodW5saWtlbHkoaW5mby1cXHUwMDNlaW5kZXggXFx1MDAzZT0gaW5mby1cXHUwMDNlbWFwLVxcdTAwM2VtYXhfZW50cmllcykpXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTgxNj1zdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo4MjA6XFx0dXNhZ2UgKz0gKHU2NCltYXAtXFx1MDAzZW1heF9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBzb2NrICopO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODIxLVxcdHJldHVybiB1c2FnZTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTY3PXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKnNvY2tfaGFzaF9hbGxvY19lbGVtKHN0cnVjdCBicGZfc2h0YWIgKmh0YWIsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTk3My1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjk3NDpcXHRpZiAoYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmh0YWItXFx1MDAzZWNvdW50KSBcXHUwMDNlIGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcykge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTc1LVxcdFxcdGlmICghb2xkKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTEwOTk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX2hhc2hfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMDMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTA0OlxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTA1LVxcdCAgICBhdHRyLVxcdTAwM2VrZXlfc2l6ZSAgICA9PSAwIHx8XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTE5OlxcdGh0YWItXFx1MDAzZWJ1Y2tldHNfbnVtID0gcm91bmR1cF9wb3dfb2ZfdHdvKGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTIwLVxcdGh0YWItXFx1MDAzZWVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX3NodGFiX2VsZW0pICtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MDguMTgzNjk3NzU1WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNDc1ODQwNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU29jayBNYXAgTG9vcCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gbGluZSAzNTAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgOiBgZm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKylgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvb3AgaW4gdGhlIGBzb2NrX21hcF9mcmVlYCBmdW5jdGlvbiBtb3JlIGNsZWFybHkuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSB0eXBlIG9mIHRoZSBsb29wIGNvdW50ZXIsIGBpYC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0eXBlIGBpYCBpcyBpbiB0aGUgYHNvY2tfbWFwX2ZyZWVgIGZ1bmN0aW9uLCBhbmQgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbG9vcC4gTGV0J3MgZXhhbWluZSBsaW5lcyAzNDAgdGhyb3VnaCAzNzAgaW4gdGhlIHNhbWUgZmlsZSB0byBnYWluIHRoZSBmdWxsIGNvbnRleHQgYW5kIGNvbmZpcm0gdGhlIHR5cGUgb2YgYGlgLiBUaGlzIGlzIGNydWNpYWwgZm9yIHZlcmlmeWluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBmb3Igb3ZlcmZsb3cgaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbWFwJ3MgbWF4aW11bSBlbnRyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMyNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjIwLjY1OTU0MTA4OVoiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0c3RhdGljIHZvaWQgc29ja19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiAzNDE6XFx0e1xcbiAzNDI6XFx0XFx0c3RydWN0IGJwZl9zdGFiICpzdGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFiLCBtYXApO1xcbiAzNDM6XFx0XFx0aW50IGk7XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdC8qIEFmdGVyIHRoZSBzeW5jIG5vIHVwZGF0ZXMgb3IgZGVsZXRlcyB3aWxsIGJlIGluLWZsaWdodCBzbyBpdFxcbiAzNDY6XFx0XFx0ICogaXMgc2FmZSB0byB3YWxrIG1hcCBhbmQgcmVtb3ZlIGVudHJpZXMgd2l0aG91dCByaXNraW5nIGEgcmFjZVxcbiAzNDc6XFx0XFx0ICogaW4gRUVYSVNUIHVwZGF0ZSBjYXNlLlxcbiAzNDg6XFx0XFx0ICovXFxuIDM0OTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzUwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKykge1xcbiAzNTE6XFx0XFx0XFx0c3RydWN0IHNvY2sgKipwc2sgPSBcXHUwMDI2c3RhYi1cXHUwMDNlc2tzW2ldO1xcbiAzNTI6XFx0XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRcXHRzayA9IHhjaGcocHNrLCBOVUxMKTtcXG4gMzU1OlxcdFxcdFxcdGlmIChzaykge1xcbiAzNTY6XFx0XFx0XFx0XFx0c29ja19ob2xkKHNrKTtcXG4gMzU3OlxcdFxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuIDM1ODpcXHRcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDM1OTpcXHRcXHRcXHRcXHRzb2NrX21hcF91bnJlZihzaywgcHNrKTtcXG4gMzYwOlxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzNjE6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gMzYyOlxcdFxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4gMzYzOlxcdFxcdFxcdH1cXG4gMzY0OlxcdFxcdH1cXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0Lyogd2FpdCBmb3IgcHNvY2sgcmVhZGVycyBhY2Nlc3NpbmcgaXRzIG1hcCBsaW5rICovXFxuIDM2NzpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzY4OlxcdFxcbiAzNjk6XFx0XFx0YnBmX21hcF9hcmVhX2ZyZWUoc3RhYi1cXHUwMDNlc2tzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MjAuNjU5NjY0MzA5WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNzQ3NTI1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIGEgQyBDb2RlIFNuaXBwZXQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBMaW5lIDM0MywgYGludCBpO2Ag4oCTIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpZ25lZCBpbnRlZ2VyIGBpYCBoZXJlLiBUaGVuLCBvbiBsaW5lIDM1MCwgd2UgaGF2ZSBgZm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKylgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXM6IHdoYXQgaGFwcGVucyBpZiBgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXNgIGlzIGxhcmdlciB0aGFuIGBJTlRfTUFYYD8gU2luY2UgYGlgIGlzIHNpZ25lZCwgd2UndmUgZ290IGEgcG90ZW50aWFsIGlzc3VlLiBJZiBgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXNgIGlzIGEgYHUzMmAgKHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyKSBpbiBDLCB0aGUgY29tcGFyaXNvbiBgaSBcdTAwM2Mgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXNgIGdldHMgdHJpY2t5LlxuXG5IZXJlJ3MgaG93IEknbSBicmVha2luZyBpdCBkb3duOiBgaWAgKHNpZ25lZCBpbnQpIHdpbGwgYmUgY29udmVydGVkIHRvIGB1MzJgIGZvciB0aGUgY29tcGFyaXNvbi4gTm93LCB3aGVuIGBpYCBhcHByb2FjaGVzIGBJTlRfTUFYYCwgYGkrK2AgaGFzIHRoZSBwb3RlbnRpYWwgdG8gb3ZlcmZsb3cgdGhlIHNpZ25lZCBpbnRlZ2VyLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgaW4gQy4gSWYgYGlgIHdyYXBzIGFyb3VuZCB0byBhIG5lZ2F0aXZlIHZhbHVlLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhICpodWdlKiB1bnNpZ25lZCB2YWx1ZSwgb3IgdGhlIGxvb3AgdGVybWluYXRlcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgaSsrYCBvdmVyZmxvdyBiZWluZyB1bmRlZmluZWQgYmVoYXZpb3IsIHRoaXMgY291bGQgYmUgYSBuYXN0eSBidWchXG5cbkFuZCB3YWl0LCB0aGVyZSdzIGFub3RoZXIgcG9pbnQuIFdlIGFsc28gbmVlZCB0byBhbmFseXplIHRoZSBgc29ja19tYXBfZGVsZXRlX2VsZW1gIGZ1bmN0aW9uLiBMZXQgbWUgc2NhbiB0aHJvdWdoIHRoZSByZWxldmFudCBsaW5lcywgc3BlY2lmaWNhbGx5IDQ0MC00NTUsIHRvIHNlZSBpZiBhIHNpbWlsYXIgdnVsbmVyYWJpbGl0eSBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MjMuODM0NDE5MTI1WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogMTZcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHRcXHRfX3NvY2tfbWFwX2RlbGV0ZShzdGFiLCBzaywgbGlua19yYXcpO1xcbiA0NDE6XFx0fVxcbiA0NDI6XFx0XFxuIDQ0MzpcXHRzdGF0aWMgbG9uZyBzb2NrX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIDQ0NDpcXHR7XFxuIDQ0NTpcXHRcXHRzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWIsIG1hcCk7XFxuIDQ0NjpcXHRcXHR1MzIgaSA9ICoodTMyICopa2V5O1xcbiA0NDc6XFx0XFx0c3RydWN0IHNvY2sgKipwc2s7XFxuIDQ0ODpcXHRcXG4gNDQ5OlxcdFxcdGlmICh1bmxpa2VseShpIFxcdTAwM2U9IG1hcC1cXHUwMDNlbWF4X2VudHJpZXMpKVxcbiA0NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdHBzayA9IFxcdTAwMjZzdGFiLVxcdTAwM2Vza3NbaV07XFxuIDQ1MzpcXHRcXHRyZXR1cm4gX19zb2NrX21hcF9kZWxldGUoc3RhYiwgTlVMTCwgcHNrKTtcXG4gNDU0OlxcdH1cXG4gNDU1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1OToyMy44MzQ1MjUyMjVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMwMzE3ODA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIG91dCBsb3VkOlxuXG4qKlByb2JpbmcgZm9yIEJQRiBNYXAgSW50ZWdlciBPdmVyZmxvdyBWdWxuZXJhYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgQlBGIG1hcHMgYW5kIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGNoZWNrcyBvZiBgbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvdGhlciBtYXAgdHlwZXMsIGJlc2lkZXMgdGhlIG9uZSB0aGF0IHRyaWdnZXJlZCB0aGlzIHRob3VnaHQsIG1pZ2h0IGV4aGliaXQgc2ltaWxhciBiZWhhdmlvci5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGltcGxlbWVudGF0aW9ucyBzaW1pbGFyIHRvIGFycmF5IG1hcHMg4oCTIHRoaW5raW5nIGBhcnJheW1hcC5jYCBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgdGhhdCBjaGVjazogYG1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYCBvciBhbnkgZXF1aXZhbGVudCBsb2dpYyBpbiB0aGUgb3RoZXIgbWFwIGltcGxlbWVudGF0aW9ucy4gVGhpcyBtaWdodCBpbnZvbHZlIGRpdmluZyBpbnRvIG90aGVyIGFycmF5LWxpa2UgbWFwIGltcGxlbWVudGF0aW9ucyBhcyB3ZWxsLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBraW5kIG9mIGNoZWNrIGlzIHVzZWQsIGFuZCB3aGVyZSBpdCBtaWdodCBiZSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MjcuMTM3NzA2ODE2WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYzOTkwMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwODo1OToyNy4xODgzNTM4NDVaIiwiU2VxIjo3MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTI5NTk5MDkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgVnVsbmVyYWJpbGl0aWVzIGluIEJQRiBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGh1bnQgZG93biBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGNvZGUuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlIGFuZCBqdW1wIHJpZ2h0IGludG8gdGhlIGBrZXJuZWwvYnBmL2AgZGlyZWN0b3J5LiBUaGUgdHJpZ2dlciBJJ20ga2V5aW5nIG9uIGlzIHNvbWV0aGluZyB0aGF0IGhpbnRzIGF0IHRoZSB1cHBlciBsaW1pdCBvZiBpbnRlZ2VyIHZhbHVlcyBiZWluZyBhcHByb2FjaGVkIG9yIHBvdGVudGlhbGx5IGV4Y2VlZGVkLiBUaGF0IG1lYW5zIEknbGwgdXNlIHRoZSBzZWFyY2ggdGVybSBgXHUwMDNlIElOVF9NQVhgLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBhc3N1bWluZyB0aGF0IHBsYWNlcyB3aGVyZSBhIHZhcmlhYmxlJ3MgdmFsdWUgaXMgY2hlY2tlZCBhZ2FpbnN0IGBJTlRfTUFYYCBhcmUgZ29vZCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBrbm93IGBJTlRfTUFYYCBpcyB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBzaWduZWQgMzItYml0IGludGVnZXIsIGFuZCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXNlIGNoZWNrcyBhcmUgb2NjdXJyaW5nIHdpdGhpbiB0aGUgQlBGIGNvZGUuIFRoaXMgc2VhcmNoIHRlcm0gZmVlbHMgbGlrZSBhIGdvb2QsIGVmZmljaWVudCBmaXJzdCBzdGVwLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gcmV0dXJuIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlcywgYnV0IGl0IHNob3VsZCBhbHNvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIG9mIGxvY2F0aW9ucyB3aGVyZSBJIGNhbiByZWFsbHkgZGlnIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjEyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6MzYuNDg0MzQ3NTg4WiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY4NTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXHUwMDNlIElOVF9NQVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcnJheW1hcC5jPTUzPWludCBhcnJheV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNzQtXFx0LyogYXZvaWQgb3ZlcmZsb3cgb24gcm91bmRfdXAobWFwLVxcdTAwM2V2YWx1ZV9zaXplKSAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo3NTpcXHRpZiAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSBcXHUwMDNlIElOVF9NQVgpXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTc2LVxcdFxcdHJldHVybiAtRTJCSUc7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTIxMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9saW5lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIyNy1cXHRcXHRyZXR1cm4gMDtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjIyODpcXHRpZiAobnJfbGluZm8gXFx1MDAzZSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBicGZfbGluZV9pbmZvKSlcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTIyOS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzQxPXN0YXRpYyBpbnQgY2hlY2tfY29yZV9yZWxvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM1OC1cXHRcXHRyZXR1cm4gMDtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjM1OTpcXHRpZiAobnJfY29yZV9yZWxvIFxcdTAwM2UgSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgYnBmX2NvcmVfcmVsbykpXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNjAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MjUxPXN0YXRpYyBjaGFyICpkaWFnX2ZtdF9hbGxvYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yNTctXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjI1ODpcXHRpZiAoIWRpYWcgfHwgIXNpemUgfHwgc2l6ZSBcXHUwMDNlIElOVF9NQVgpXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTI1OS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYwOTU9c3RhdGljIGludCBicGZfZW5hYmxlX3J1bnRpbWVfc3RhdHModm9pZClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMDEtXFx0LyogU2V0IGEgdmVyeSBoaWdoIGxpbWl0IHRvIGF2b2lkIG92ZXJmbG93ICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjEwMjpcXHRpZiAoc3RhdGljX2tleV9jb3VudChcXHUwMDI2YnBmX3N0YXRzX2VuYWJsZWRfa2V5LmtleSkgXFx1MDAzZSBJTlRfTUFYIC8gMikge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYxMDMtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZicGZfc3RhdHNfZW5hYmxlZF9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjM2LjUzNTA0MzA1N1oiLCJTZXEiOjczLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDU5Nzg5MzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgQ3VyaW91cyBDaGVjayBpbiBgc29ja19tYXBfYWxsb2NgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc29ja19tYXBfYWxsb2NgIGZ1bmN0aW9uLCBhbmQgYSByZWQgZmxhZyBpbW1lZGlhdGVseSBwb3BwZWQgdXA6IHdoeSBpcyBpdCBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzYCBpcyBncmVhdGVyIHRoYW4gYElOVF9NQVhgPyBUaGF0IHNlZW1zLi4udW51c3VhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBJcyB0aGVyZSBhIHN1YnRsZSBvdmVyZmxvdyBpc3N1ZSBhdCBwbGF5LCBvciBzb21lIG90aGVyIGNvbnN0cmFpbnQgSSdtIG1pc3Npbmc/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkZWVwZXIuIElkZWFsbHksIEknZCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBgc29ja19tYXAuY2AgY29kZSBhbmQgdGhlbiB0aGUgY29tbWl0IGxvZ3MgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGhpc3RvcmljYWwgY29udGV4dC4gVW5mb3J0dW5hdGVseSwgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gZ2l0IGxvZ3Mgb24gdGhlIHN5ei1jbHVzdGVyLiBTbywgc2luY2UgdGhlIHNvY2sgbWFwIGlzIHJlbGF0ZWQgdG8gZUJQRiwgSSdsbCBzd2l0Y2ggZ2VhcnMgc2xpZ2h0bHkgYW5kIGxvb2sgYXQgaG93IGFycmF5IG1hcHMgaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AgaGFuZGxlIGBtYXhfZW50cmllc2Agd2l0aCBgYXJyYXlfbWFwX2FsbG9jX2NoZWNrYC4gSXQncyBsaWtlbHkgdGhhdCB0aGVyZSdzIGEgY29tbW9uIHBhdHRlcm4gaW4gdGhlIGtlcm5lbCdzIGVCUEYgbWFwIGltcGxlbWVudGF0aW9ucywgYW5kIHRoaXMgbWlnaHQgb2ZmZXIgc29tZSBjbHVlcy4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIGEgY29ycmVzcG9uZGluZyBvdmVyZmxvdyBjaGVjaywgb3IgcGVyaGFwcyBhIHJhbmdlIGxpbWl0YXRpb24gdGhlcmUuIFRoaXMgc2hvdWxkIGhlbHAgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGBzb2NrX21hcF9hbGxvY2AgaGFzIHRoaXMgc3BlY2lmaWMgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjQ3LjEzMjkzODk0N1oiLCJTZXEiOjc0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9hcnJheW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUzOlxcdGludCBhcnJheV9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuICA1NDpcXHR7XFxuICA1NTpcXHRcXHRib29sIHBlcmNwdSA9IGF0dHItXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk7XFxuICA1NjpcXHRcXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0LyogY2hlY2sgc2FuaXR5IG9mIGF0dHJpYnV0ZXMgKi9cXG4gIDU5OlxcdFxcdGlmIChhdHRyLVxcdTAwM2VtYXhfZW50cmllcyA9PSAwIHx8IGF0dHItXFx1MDAzZWtleV9zaXplICE9IDQgfHxcXG4gIDYwOlxcdFxcdCAgICBhdHRyLVxcdTAwM2V2YWx1ZV9zaXplID09IDAgfHxcXG4gIDYxOlxcdFxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiB+QVJSQVlfQ1JFQVRFX0ZMQUdfTUFTSyB8fFxcbiAgNjI6XFx0XFx0ICAgICFicGZfbWFwX2ZsYWdzX2FjY2Vzc19vayhhdHRyLVxcdTAwM2VtYXBfZmxhZ3MpIHx8XFxuICA2MzpcXHRcXHQgICAgKHBlcmNwdSBcXHUwMDI2XFx1MDAyNiBudW1hX25vZGUgIT0gTlVNQV9OT19OT0RFKSlcXG4gIDY0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuICA2NzpcXHRcXHQgICAgYXR0ci1cXHUwMDNlbWFwX2ZsYWdzIFxcdTAwMjYgKEJQRl9GX01NQVBBQkxFIHwgQlBGX0ZfSU5ORVJfTUFQKSlcXG4gIDY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkZfRVZFTlRfQVJSQVkgXFx1MDAyNlxcdTAwMjZcXG4gIDcxOlxcdFxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9QUkVTRVJWRV9FTEVNUylcXG4gIDcyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQvKiBhdm9pZCBvdmVyZmxvdyBvbiByb3VuZF91cChtYXAtXFx1MDAzZXZhbHVlX3NpemUpICovXFxuICA3NTpcXHRcXHRpZiAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSBcXHUwMDNlIElOVF9NQVgpXFxuICA3NjpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiAgNzc6XFx0XFx0LyogcGVyY3B1IG1hcCB2YWx1ZSBzaXplIGlzIGJvdW5kIGJ5IFBDUFVfTUlOX1VOSVRfU0laRSAqL1xcbiAgNzg6XFx0XFx0aWYgKHBlcmNwdSBcXHUwMDI2XFx1MDAyNiByb3VuZF91cChhdHRyLVxcdTAwM2V2YWx1ZV9zaXplLCA4KSBcXHUwMDNlIFBDUFVfTUlOX1VOSVRfU0laRSlcXG4gIDc5OlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdHJldHVybiAwO1xcbiAgODI6XFx0fVxcbiAgODM6XFx0XFxuICA4NDpcXHRzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFycmF5X21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4gIDg1OlxcdHtcXG4gIDg2OlxcdFxcdGJvb2wgcGVyY3B1ID0gYXR0ci1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTtcXG4gIDg3OlxcdFxcdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xcbiAgODg6XFx0XFx0dTMyIGVsZW1fc2l6ZSwgaW5kZXhfbWFzaywgbWF4X2VudHJpZXM7XFxuICA4OTpcXHRcXHRib29sIGJ5cGFzc19zcGVjX3YxID0gYnBmX2J5cGFzc19zcGVjX3YxKE5VTEwpO1xcbiAgOTA6XFx0XFx0dTY0IGFycmF5X3NpemUsIG1hc2s2NDtcXG4gIDkxOlxcdFxcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5O1xcbiAgOTI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjQ3LjEzMzA0MTY4N1oiLCJTZXEiOjc1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDgwMDEzMDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHNvY2tfbWFwX2FsbG9jYCBmb3IgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cqKlxuXG5Pa2F5LCBsZXQncyBjaXJjbGUgYmFjayB0byBgc29ja19tYXBfYWxsb2NgLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuIEknbSBnb2luZyB0aHJvdWdoIGl0IGFnYWluLCBsaW5lIGJ5IGxpbmUuIExldCBtZSBqdXN0IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldDpcblxuYGBgY1xuc3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbntcblx0c3RydWN0IGJwZl9zdGFiICpzdGFiO1xuXG5cdGlmIChhdHRyLVx1MDAzZW1heF9lbnRyaWVzID09IDAgfHxcblx0ICAgIGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVggfHxcblx0ICAgIGF0dHItXHUwMDNla2V5X3NpemUgICAgIT0gNCB8fFxuXHQgICAgKGF0dHItXHUwMDNldmFsdWVfc2l6ZSAhPSBzaXplb2YodTMyKSBcdTAwMjZcdTAwMjZcblx0ICAgICBhdHRyLVx1MDAzZXZhbHVlX3NpemUgIT0gc2l6ZW9mKHU2NCkpIHx8XG5cdCAgICBhdHRyLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgflNPQ0tfQ1JFQVRFX0ZMQUdfTUFTSylcblx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbmBgYFxuXG5XYWl0IGEgc2Vjb25k4oCmIHdoYXQgd2FzIHRoZSAqc3BlY2lmaWMqIHJlYXNvbiB3ZSBuZWVkZWQgYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgPyBNeSBtZW1vcnkgaXNuJ3QgcGVyZmVjdCwgc28gaXQncyBiZXN0IHRvIHJlZnJlc2guIE9rYXksIGxldCdzIHN0ZXAgdGhyb3VnaCBhbmQgc2VlIHdoYXQgaGFwcGVucyB3aXRoIGBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2A6XG5cbmBgYGNcblx0c3RhYi1cdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMgKlxuXHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrICopLFxuXHRcdFx0XHQgICAgICAgc3RhYi1cdTAwM2VtYXAubnVtYV9ub2RlKTtcbmBgYFxuXG5BaGEhIE5vdyBJIHNlZSBpdC4gSWYgYG1heF9lbnRyaWVzYCBpcyBhIGB1MzJgIGFuZCBpdCdzIHNldCB0byBzb21ldGhpbmcgbGlrZSBgKHUzMiktMWAsIG9yIGFueSB2YWx1ZSB0aGF0J3MgY2xvc2UgdG8gdGhlIG1heGltdW0gYHUzMmAgdmFsdWUsIHRoZSBtdWx0aXBsaWNhdGlvbiBieSBgc2l6ZW9mKHN0cnVjdCBzb2NrKilgICpjb3VsZCogb3ZlcmZsb3cuIFRoZSBjYXN0IHRvIGB1NjRgICpoZWxwcyosIGJ1dCB3aXRob3V0IHRoYXQgY2hlY2sgb24gYG1heF9lbnRyaWVzYCwgeW91IGNvdWxkIHN0aWxsIGVuZCB1cCB3aXRoIGFuIHVuZXhwZWN0ZWQgYW5kIHNtYWxsZXIgYWxsb2NhdGlvbiBzaXplLCBsZWFkaW5nIHRvIGJ1ZmZlciBvdmVyZmxvd3MuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBzaXplLlxuXG5TbywgYGJwZl9tYXBfYXJlYV9hbGxvY2AgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUhIExldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mICp0aGF0KiBmdW5jdGlvbiBub3csIHRvIHNlZSB3aGF0IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDg6NTk6NTcuOTMzMTc1MDUyWiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTcxMjg2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21hcF9hcmVhX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz0yNjY9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjk5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMDA6XFx0YXJlbmEgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCphcmVuYSksIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTMwMS1cXHRpZiAoIWFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTg0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJyYXlfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0MS1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNDI6XFx0XFx0YXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2MoYXJyYXlfc2l6ZSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTQzLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmM9OTk9c3RhdGljIHN0cnVjdCBicGZfbWFwICpibG9vbV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE0NC1cXHRiaXRzZXRfYnl0ZXMgPSBCSVRTX1RPX0xPTkdTKCh1NjQpYml0c2V0X21hc2sgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTtcXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jOjE0NTpcXHRibG9vbSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmJsb29tKSArIGJpdHNldF9ieXRlcywgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE0Ni1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYz00ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmluc25fYXJyYXlfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtNDgtXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jOjQ5OlxcdGluc25fYXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtNTAtXFx0aWYgKCFpbnNuX2FycmF5KVxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTc3Mz1icGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzgwLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo3ODE6XFx0c21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnNtYXApLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03ODItXFx0aWYgKCFzbWFwKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwODQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTEzOS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE0MDpcXHRzdF9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc3RfbWFwX3NpemUsIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNDEtXFx0aWYgKCFzdF9tYXApIHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTQ4LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTQ5OlxcdHN0X21hcC1cXHUwMDNldXZhbHVlID0gYnBmX21hcF9hcmVhX2FsbG9jKHZ0LVxcdTAwM2VzaXplLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTUwLVxcdHN0X21hcC1cXHUwMDNlZnVuY3NfY250ID0gY291bnRfZnVuY19wdHJzKGJ0ZiwgdCk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTEtXFx0c3RfbWFwLVxcdTAwM2VsaW5rcyA9XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNTI6XFx0XFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cXHUwMDNlZnVuY3NfY250ICogc2l6ZW9mKHN0cnVjdCBicGZfbGluayAqKSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1My1cXHRcXHRcXHRcXHQgICBOVU1BX05PX05PREUpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTUtXFx0c3RfbWFwLVxcdTAwM2Vrc3ltcyA9XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNTY6XFx0XFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cXHUwMDNlZnVuY3NfY250ICogc2l6ZW9mKHN0cnVjdCBicGZfa3N5bSAqKSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1Ny1cXHRcXHRcXHRcXHQgICBOVU1BX05PX05PREUpO1xcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz04NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNwdV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTEwMC1cXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwMTpcXHRjbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqY21hcCksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDItXFx0aWYgKCFjbWFwKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDctXFx0LyogQWxsb2MgYXJyYXkgZm9yIHBvc3NpYmxlIHJlbW90ZSBcXFwiZGVzdGluYXRpb25cXFwiIENQVXMgKi9cXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwODpcXHRjbWFwLVxcdTAwM2VjcHVfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKGNtYXAtXFx1MDAzZW1hcC5tYXhfZW50cmllcyAqXFxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDktXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCBicGZfY3B1X21hcF9lbnRyeSAqKSxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9OTE9c3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpkZXZfbWFwX2NyZWF0ZV9oYXNoKHVuc2lnbmVkIGludCBlbnRyaWVzLFxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy05Ni1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjk3OlxcdGhhc2ggPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgZW50cmllcyAqIHNpemVvZigqaGFzaCksIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9kZXZtYXAuYy05OC1cXHRpZiAoaGFzaCAhPSBOVUxMKVxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYz0xMzY9c3RhdGljIGludCBkZXZfbWFwX2luaXRfbWFwKHN0cnVjdCBicGZfZHRhYiAqZHRhYiwgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE1My1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvZGV2bWFwLmM6MTU0OlxcdFxcdGR0YWItXFx1MDAzZW5ldGRldl9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgZHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE1NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGJwZl9kdGFiX25ldGRldiAqKSxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9MTY0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqZGV2X21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTY4LVxcbmtlcm5lbC9icGYvZGV2bWFwLmM6MTY5OlxcdGR0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpkdGFiKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE3MC1cXHRpZiAoIWR0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTk9c3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNi1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjc6XFx0aHRhYi1cXHUwMDNlZWxlbXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NClodGFiLVxcdTAwM2VlbGVtX3NpemUgKiBudW1fZW50cmllcyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjgtXFx0XFx0XFx0XFx0XFx0IGh0YWItXFx1MDAzZW1hcC5udW1hX25vZGUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9NTQ4PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01NjEtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NTYyOlxcdGh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpodGFiKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy01NjMtXFx0aWYgKCFodGFiKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNjA0LVxcdGVyciA9IC1FTk9NRU07XFxua2VybmVsL2JwZi9oYXNodGFiLmM6NjA1OlxcdGh0YWItXFx1MDAzZWJ1Y2tldHMgPSBicGZfbWFwX2FyZWFfYWxsb2MoaHRhYi1cXHUwMDNlbl9idWNrZXRzICpcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDYtXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCBidWNrZXQpLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjgxNj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjEtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgyMjpcXHRyaHRhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnJodGFiKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODIzLVxcdGlmICghcmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz0yOTc9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjctXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzI4OlxcdG1hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXApLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMyOS1cXHRpZiAoIW1hcClcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz01NzE9c3RhdGljIHN0cnVjdCBicGZfbWFwICp0cmllX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU4Ny1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NTg4OlxcdHRyaWUgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCp0cmllKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNTg5LVxcdGlmICghdHJpZSlcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTUwMz1zdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9vZmZsb2FkX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxNS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo1MTY6XFx0b2ZmbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqb2ZmbWFwKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MTctXFx0aWYgKCFvZmZtYXApXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz02NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnF1ZXVlX3N0YWNrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTczLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjc0OlxcdHFzID0gYnBmX21hcF9hcmVhX2FsbG9jKHF1ZXVlX3NpemUsIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtNzUtXFx0aWYgKCFxcylcXG4tLVxcbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmM9MTQ5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmV1c2Vwb3J0X2FycmF5X2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9yZXVzZXBvcnRfYXJyYXkuYy0xNTQtXFx0LyogYWxsb2NhdGUgYWxsIG1hcCBlbGVtZW50cyBhbmQgemVyby1pbml0aWFsaXplIHRoZW0gKi9cXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jOjE1NTpcXHRhcnJheSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzdHJ1Y3Rfc2l6ZShhcnJheSwgcHRycywgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMpLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmMtMTU2LVxcdGlmICghYXJyYXkpXFxuLS1cXG5rZXJuZWwvYnBmL3JpbmdidWYuYz05Mz1zdGF0aWMgc3RydWN0IGJwZl9yaW5nYnVmICpicGZfcmluZ2J1Zl9hcmVhX2FsbG9jKHNpemVfdCBkYXRhX3N6LCBpbnQgbnVtYV9ub2RlKVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmMtMTIyLVxcdGFycmF5X3NpemUgPSAobnJfbWV0YV9wYWdlcyArIDIgKiBucl9kYXRhX3BhZ2VzKSAqIHNpemVvZigqcGFnZXMpO1xcbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjEyMzpcXHRwYWdlcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhhcnJheV9zaXplLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTEyNC1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmM9MTk0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmluZ2J1Zl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3JpbmdidWYuYy0yMTItXFxua2VybmVsL2JwZi9yaW5nYnVmLmM6MjEzOlxcdHJiX21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnJiX21hcCksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9yaW5nYnVmLmMtMjE0LVxcdGlmICghcmJfbWFwKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTY4PXN0YXRpYyBpbnQgcHJlYWxsb2NfZWxlbXNfYW5kX2ZyZWVsaXN0KHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwKVxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTczLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo3NDpcXHRzbWFwLVxcdTAwM2VlbGVtcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhlbGVtX3NpemUgKiBzbWFwLVxcdTAwM2VtYXAubWF4X2VudHJpZXMsXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTc1LVxcdFxcdFxcdFxcdFxcdCBzbWFwLVxcdTAwM2VtYXAubnVtYV9ub2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz05Mz1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnN0YWNrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMjUtXFx0Y29zdCA9IG5fYnVja2V0cyAqIHNpemVvZihzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKSArIHNpemVvZigqc21hcCk7XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjEyNjpcXHRzbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKGNvc3QsIGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cikpO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0xMjctXFx0aWYgKCFzbWFwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzA4PXN0YXRpYyBpbnQgYnBmX21hcF9jb3B5X3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzEtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzcyOnN0YXRpYyB2b2lkICpfX2JwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSwgYm9vbCBtbWFwYWJsZSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzMte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDA4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQwOTp2b2lkICpicGZfbWFwX2FyZWFfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDEwLXtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MTE6XFx0cmV0dXJuIF9fYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIG51bWFfbm9kZSwgZmFsc2UpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxMi19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00MTQ9dm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxNS17XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDE2OlxcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIHRydWUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA4OjU5OjU4LjI5MDMwOTU4OFoiLCJTZXEiOjc3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NzcyNTI0MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyBgX19icGZfbWFwX2FyZWFfYWxsb2NgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgbGluZSAzNzIuXG5cbioqRGl2aW5nIGludG8gYF9fYnBmX21hcF9hcmVhX2FsbG9jYCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgX19icGZfbWFwX2FyZWFfYWxsb2NgIGF0IGxpbmUgMzcyIG9mIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHRoZSBjb3JlIGFsbG9jYXRvciBmb3IgQlBGIG1hcCBhcmVhcy4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCBpdHMgcGxhY2VtZW50IHdpdGhpbiB0aGUgQlBGIHN5c2NhbGwgY29kZSwgaXQncyBoaWdobHkgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgYWxsb2NhdGlvbiBvZiBtZW1vcnkgcmVnaW9ucyB0aGF0IHdpbGwgaG9sZCB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggb3VyIEJQRiBtYXBzLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgZGV0YWlscyBvZiB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLiBXaGF0IGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaXMgaXQgdXNpbmc/IElzIGl0IHNsYWIsIGJ1ZGR5LCBvciBzb21ldGhpbmcgY3VzdG9tIHRhaWxvcmVkIGZvciB0aGUgQlBGIHN1YnN5c3RlbT8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGxvY2F0aW9uIGZsYWdzIG9yIHN0cmF0ZWdpZXMgdG8gb3B0aW1pemUgZm9yIEJQRidzIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IHJlcXVpcmVtZW50cz8gSXQgaXMgYWxzbyBpbnRlcmVzdGluZyB0byB0aGluayBhYm91dCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGFyb3VuZCB0aGlzIGFsbG9jYXRpb24uIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgbG9ja3Mgb3IgY3VzdG9tIG9wdGltaXplZCBsb2Nrcz8gQW5kIGFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFwcGVhcj8gTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGNoYXJhY3RlcmlzdGljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2NzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDowMy4wNjI4Mzc5MloiLCJTZXEiOjc4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdCAqIG1lbW9yeSBjZ3JvdXAgKHNlZSBhdCBicGZfbWFwX2ttYWxsb2Nfbm9kZSgpIGZvciBleGFtcGxlKS5cXG4gMzcxOlxcdCAqL1xcbiAzNzI6XFx0c3RhdGljIHZvaWQgKl9fYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlLCBib29sIG1tYXBhYmxlKVxcbiAzNzM6XFx0e1xcbiAzNzQ6XFx0XFx0LyogV2UgcmVhbGx5IGp1c3Qgd2FudCB0byBmYWlsIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBPT00ga2lsbGVyXFxuIDM3NTpcXHRcXHQgKiB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIHRoZXJlZm9yZSB3ZSBzZXQgX19HRlBfTk9SRVRSWSB0byBrbWFsbG9jLFxcbiAzNzY6XFx0XFx0ICogd2hpY2ggaXMgdXNlZCBmb3IgbG93ZXIgb3JkZXIgYWxsb2NhdGlvbiByZXF1ZXN0cy5cXG4gMzc3OlxcdFxcdCAqXFxuIDM3ODpcXHRcXHQgKiBJdCBoYXMgYmVlbiBvYnNlcnZlZCB0aGF0IGhpZ2hlciBvcmRlciBhbGxvY2F0aW9uIHJlcXVlc3RzIGRvbmUgYnlcXG4gMzc5OlxcdFxcdCAqIHZtYWxsb2Mgd2l0aCBfX0dGUF9OT1JFVFJZIGJlaW5nIHNldCBtaWdodCBmYWlsIGR1ZSB0byBub3QgdHJ5aW5nXFxuIDM4MDpcXHRcXHQgKiB0byByZWNsYWltIG1lbW9yeSBmcm9tIHRoZSBwYWdlIGNhY2hlLCB0aHVzIHdlIHNldFxcbiAzODE6XFx0XFx0ICogX19HRlBfUkVUUllfTUFZRkFJTCB0byBhdm9pZCBzdWNoIHNpdHVhdGlvbnMuXFxuIDM4MjpcXHRcXHQgKi9cXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0Z2ZwX3QgZ2ZwID0gYnBmX21lbWNnX2ZsYWdzKF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8pO1xcbiAzODU6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gMDtcXG4gMzg2OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWxpZ24gPSAxO1xcbiAzODc6XFx0XFx0dm9pZCAqYXJlYTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0aWYgKHNpemUgXFx1MDAzZT0gU0laRV9NQVgpXFxuIDM5MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0Lyoga21hbGxvYygpJ2VkIG1lbW9yeSBjYW4ndCBiZSBtbWFwKCknZWQgKi9cXG4gMzkzOlxcdFxcdGlmIChtbWFwYWJsZSkge1xcbiAzOTQ6XFx0XFx0XFx0QlVHX09OKCFQQUdFX0FMSUdORUQoc2l6ZSkpO1xcbiAzOTU6XFx0XFx0XFx0YWxpZ24gPSBTSE1MQkE7XFxuIDM5NjpcXHRcXHRcXHRmbGFncyA9IFZNX1VTRVJNQVA7XFxuIDM5NzpcXHRcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzYz0gKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpIHtcXG4gMzk4OlxcdFxcdFxcdGFyZWEgPSBrbWFsbG9jX25vZGUoc2l6ZSwgZ2ZwIHwgR0ZQX1VTRVIgfCBfX0dGUF9OT1JFVFJZLFxcbiAzOTk6XFx0XFx0XFx0XFx0XFx0ICAgIG51bWFfbm9kZSk7XFxuIDQwMDpcXHRcXHRcXHRpZiAoYXJlYSAhPSBOVUxMKVxcbiA0MDE6XFx0XFx0XFx0XFx0cmV0dXJuIGFyZWE7XFxuIDQwMjpcXHRcXHR9XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZShzaXplLCBhbGlnbiwgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxuIDQwNTpcXHRcXHRcXHRcXHRnZnAgfCBHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCwgUEFHRV9LRVJORUwsXFxuIDQwNjpcXHRcXHRcXHRcXHRmbGFncywgbnVtYV9ub2RlLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbiA0MDc6XFx0fVxcbiA0MDg6XFx0XFxuIDQwOTpcXHR2b2lkICpicGZfbWFwX2FyZWFfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUpXFxuIDQxMDpcXHR7XFxuIDQxMTpcXHRcXHRyZXR1cm4gX19icGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlLCBmYWxzZSk7XFxuIDQxMjpcXHR9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdHZvaWQgKmJwZl9tYXBfYXJlYV9tbWFwYWJsZV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6MDA6MDMuMDYzMDcxOTZaIiwiU2VxIjo3OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUxMTk0NDE4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIEJQRiBTb2NrIE1hcCBGcmVlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDM4NCBjYXVnaHQgbXkgZXllLCBzcGVjaWZpY2FsbHkgdGhlIGBfX0dGUF9aRVJPYCBmbGFnIHBhc3NlZCB0byBgYnBmX21lbWNnX2ZsYWdzYC4gSXQgbWVhbnMgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgYGJwZl9tYXBfYXJlYV9hbGxvY2AgaXMgYWx3YXlzIHplcm8taW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gQnV0IHRoYXQncyBub3QgdGhlIGNyaXRpY2FsIHBvaW50IGhlcmUuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoeSB0aGUgY2hlY2sgYGF0dHItXHUwMDNlbWF4X2VudHJpZXMgXHUwMDNlIElOVF9NQVhgIHdhcyBhZGRlZCBpbiB0aGUgZmlyc3QgcGxhY2U/IEl0IGdvdCBtZSB0aGlua2luZyBhYm91dCBob3cgYG1heF9lbnRyaWVzYCBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYHNvY2tfbWFwX2ZyZWVgLlxuXG5gYGBjXG5zdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG57XG5cdHN0cnVjdCBicGZfc3RhYiAqc3RhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhYiwgbWFwKTtcblx0aW50IGk7XG5cblx0LyogQWZ0ZXIgdGhlIHN5bmMgbm8gdXBkYXRlcyBvciBkZWxldGVzIHdpbGwgYmUgaW4tZmxpZ2h0IHNvIGl0XG5cdCAqIGlzIHNhZmUgdG8gd2FsayBtYXAgYW5kIHJlbW92ZSBlbnRyaWVzIHdpdGhvdXQgcmlza2luZyBhIHJhY2Vcblx0ICogaW4gRUVYSVNUIHVwZGF0ZSBjYXNlLlxuXHQgKi9cblx0c3luY2hyb25pemVfcmN1KCk7XG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpKyspIHtcbmBgYFxuXG5TbywgYHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzYCBpcyBhIGB1MzJgLCBhbmQgdGhlIGxvb3AgY291bnRlciBgaWAgaXMgYW4gYGludGAuIElmIGBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2AgaXMgaW5kZWVkIGdyZWF0ZXIgdGhhbiBgSU5UX01BWGAsIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBjb21wYXJpc29uIGBpIFx1MDAzYyBzdGFiLVx1MDAzZW1hcC5tYXhfZW50cmllc2AgaXMgaW1wbGljaXRseSBjb21wYXJpbmcgYW4gYGludGAgdG8gYSBgdTMyYC4gVGhleSB3aWxsIGJvdGggYmUgY29udmVydGVkIHRvIGB1MzJgIGZvciB0aGUgY29tcGFyaXNvbiwgYnV0IHRoYXQncyBub3QgdGhlIHByb2JsZW0uXG5cblRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGxvb3AgaXRzZWxmLiBXaGVuIGBpYCBpbmNyZW1lbnRzIGZyb20gYDBgIHRvIGBJTlRfTUFYYCAoYDB4N2ZmZmZmZmZgKSwgdGhlIG5leHQgaW5jcmVtZW50IChgaSsrYCkgaXMgYSBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyEgSW4gR0NDL0NsYW5nIHdpdGggVUJTQU4sIHRoaXMgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBFdmVuIHdvcnNlLCBpZiBgaWAgd3JhcHMgdG8gYSBuZWdhdGl2ZSB2YWx1ZSwgaXQgYmVjb21lcyBhIG1ham9yIHByb2JsZW0uIEZvciBleGFtcGxlLCBpZiBpdCB3cmFwcyB0byAtMjE0NzQ4MzY0OCwgdGhlbiBgKHUzMilpYCBpcyAweDgwMDAwMDAwLiAgVGhlbiwgd2hlbiBgaWAgcmVhY2hlcyAtMSwgYCh1MzIpaWAgaXMgMHhmZmZmZmZmZi5cblxuSWYgYG1heF9lbnRyaWVzYCBpcyBgMHhmZmZmZmZmZmAsIHRoZW4gYGlgIGxvb3BzIGJhY2sgdG8gMC4gSXQncyBhbiBpbmZpbml0ZSBsb29wISBBbHNvLCB0aGUgaW5kZXggYGlgIGlzIHVzZWQgaW4gYHN0YWItXHUwMDNlc2tzW2ldYCwgd2hlcmUgYGlgIGlzIGEgbmVnYXRpdmUgaW50ZWdlci4gVGhpcyBtZWFucyBgc3RhYi1cdTAwM2Vza3MgKyAoLTIxNDc0ODM2NDgpYCBpcyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBiZWxvdyBgc3RhYi1cdTAwM2Vza3NgISBUaGlzIGlzIGEgbWVtb3J5IGJ1Zywgb3IgaXQgdHJpZ2dlcnMgdGhlIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93LCBvciBpdCBpcyBhbiBpbmZpbml0ZSBsb29wLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgb3RoZXIgcGxhY2VzIHdoZXJlIGBtYXhfZW50cmllc2AgaXMgdXNlZCBvciBjb252ZXJ0ZWQgdG8gYW4gYGludGAsIG9yIGNvbXBhcmVkIHdpdGggYW4gYGludGAuIEkgc2hvdWxkIGNoZWNrIGFsbCB0aGUgY2FsbGVycyBvZiBgc29ja19tYXBfYWxsb2NgIGFzIHdlbGwgYXMgdGhlIEJQRiBzeXNjYWxsIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYXJvdW5kIGBtYXBfY3JlYXRlYC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjAwOjI4LjE4MjUxNjMyOFoiLCJTZXEiOjgwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MTgyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9jcmVhdGVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNjI5LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE2MzA6c3RhdGljIGludCBtYXBfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9jb21tb25fYXR0ciAqYXR0cl9jb21tb24sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTYzMS1cXHRcXHQgICAgICBicGZwdHJfdCB1YXR0cl9jb21tb24sIHUzMiBzaXplX2NvbW1vbilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2NjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTY2MjpcXHRlcnIgPSBzZWN1cml0eV9icGZfbWFwX2NyZWF0ZShtYXAsIGF0dHIsIHRva2VuLCB1YXR0ci5pc19rZXJuZWwpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE2NjMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM0My1cXHRjYXNlIEJQRl9NQVBfQ1JFQVRFOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzNDQ6XFx0XFx0ZXJyID0gbWFwX2NyZWF0ZShcXHUwMDI2YXR0ciwgdWF0dHIsIFxcdTAwMjZhdHRyX2NvbW1vbiwgdWF0dHJfY29tbW9uLCBzaXplX2NvbW1vbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM0NS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDk6MDA6MjguMzY3NzA4NzM3WiIsIlNlcSI6ODEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMDU2ODA4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBgbWFwX2NyZWF0ZWAqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aGVuIGEgbWFwIGlzIGNyZWF0ZWQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBpbnNwZWN0IHRoZSBgbWFwX2NyZWF0ZWAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gVGhlbiwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYG1hcF9jcmVhdGVfYWxsb2NgLiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBgYWxsb2NgIGZ1bmN0aW9uIG1heSBoYW5kbGUgdGhlIGFjdHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgbWFwJ3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBtYXBfY3JlYXRlYCBhbmQgYG1hcF9jcmVhdGVfYWxsb2NgIGlzIGtleSB0byBncmFzcGluZyB0aGUgZnVsbCBjcmVhdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgaW4gYSBzeXN0ZW1zIGNvbnRleHQuIEknbSBsb29raW5nIGZvciB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW55IHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGhvdyB0aGV5IHJlbGF0ZS4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDozMC40NzMzOTIxNzFaIiwiU2VxIjo4MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzODI6XFx0c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4xMzgzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX21hcCAqKm1hcHAsIHN0cnVjdCBicGZfdG9rZW4gKip0b2tlbnApXFxuMTM4NDpcXHR7XFxuMTM4NTpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgKm9wcztcXG4xMzg2OlxcdFxcdHN0cnVjdCBicGZfdG9rZW4gKnRva2VuID0gTlVMTDtcXG4xMzg3OlxcdFxcdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xcbjEzODg6XFx0XFx0dTMyIG1hcF90eXBlID0gYXR0ci1cXHUwMDNlbWFwX3R5cGU7XFxuMTM4OTpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbjEzOTA6XFx0XFx0Ym9vbCB0b2tlbl9mbGFnO1xcbjEzOTE6XFx0XFx0aW50IGVycjtcXG4xMzkyOlxcdFxcbjEzOTM6XFx0XFx0ZXJyID0gQ0hFQ0tfQVRUUihCUEZfTUFQX0NSRUFURSk7XFxuMTM5NDpcXHRcXHRpZiAoZXJyKSB7XFxuMTM5NTpcXHRcXHRcXHRicGZfbG9nKGxvZywgXFxcIkludmFsaWQgYXR0ci5cXFxcblxcXCIpO1xcbjEzOTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM5NzpcXHRcXHR9XFxuMTM5ODpcXHRcXG4xMzk5OlxcdFxcdC8qIGNoZWNrIEJQRl9GX1RPS0VOX0ZEIGZsYWcsIHJlbWVtYmVyIGlmIGl0J3Mgc2V0LCBhbmQgdGhlbiBjbGVhciBpdFxcbjE0MDA6XFx0XFx0ICogdG8gYXZvaWQgcGVyLW1hcCB0eXBlIGNoZWNrcyB0cmlwcGluZyBvbiB1bmtub3duIGZsYWdcXG4xNDAxOlxcdFxcdCAqL1xcbjE0MDI6XFx0XFx0dG9rZW5fZmxhZyA9IGF0dHItXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX1RPS0VOX0ZEO1xcbjE0MDM6XFx0XFx0YXR0ci1cXHUwMDNlbWFwX2ZsYWdzIFxcdTAwMjY9IH5CUEZfRl9UT0tFTl9GRDtcXG4xNDA0OlxcdFxcbjE0MDU6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWJ0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQpIHtcXG4xNDA2OlxcdFxcdFxcdGlmIChhdHRyLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfU1RSVUNUX09QUykge1xcbjE0MDc6XFx0XFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJidGZfdm1saW51eF92YWx1ZV90eXBlX2lkIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBzdHJ1Y3Rfb3BzIG1hcHMuXFxcXG5cXFwiKTtcXG4xNDA4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MDk6XFx0XFx0XFx0fVxcbjE0MTA6XFx0XFx0XFx0aWYgKGF0dHItXFx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCB8fCBhdHRyLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZCkge1xcbjE0MTE6XFx0XFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJidGZfdm1saW51eF92YWx1ZV90eXBlX2lkIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGJ0Zl9rZXlfdHlwZV9pZCBhbmQgYnRmX3ZhbHVlX3R5cGVfaWQuXFxcXG5cXFwiKTtcXG4xNDEyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MTM6XFx0XFx0XFx0fVxcbjE0MTQ6XFx0XFx0fSBlbHNlIGlmIChhdHRyLVxcdTAwM2VidGZfa2V5X3R5cGVfaWQgXFx1MDAyNlxcdTAwMjYgIWF0dHItXFx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKSB7XFxuMTQxNTpcXHRcXHRcXHRicGZfbG9nKGxvZywgXFxcIkludmFsaWQgYnRmX3ZhbHVlX3R5cGVfaWQuXFxcXG5cXFwiKTtcXG4xNDE2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE0MTc6XFx0XFx0fVxcbjE0MTg6XFx0XFxuMTQxOTpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUiBcXHUwMDI2XFx1MDAyNlxcbjE0MjA6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcXHUwMDI2XFx1MDAyNlxcbjE0MjE6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDozMC40NzM2MDUwNDFaIiwiU2VxIjo4MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTkwNjE5NTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbWFwX2NyZWF0ZV9hbGxvY2AqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgbWFwX2NyZWF0ZV9hbGxvY2AuIFRoaXMgc3VnZ2VzdHMgdGhlcmUncyBhIHNwZWNpZmljIGFyZWEgd2l0aGluIG91ciBtYXBwaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRoYXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJ20gYXNzdW1pbmcgd2UndmUgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBpc3N1ZSBvciBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgcmVsYXRlZCB0byBob3cgd2UncmUgY3JlYXRpbmcgYW5kIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBvdXIgbWFwcywgcG90ZW50aWFsbHkgc3RlbW1pbmcgZnJvbSB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYWxsb2NhdG9yIGl0c2VsZi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhIGZldyB0aGluZ3M6IEFyZSB3ZSBpbml0aWFsaXppbmcgdGhlIG1hcHMgZWZmaWNpZW50bHk/IElzIHRoZXJlIGFueSByZWR1bmRhbnQgYWxsb2NhdGlvbiBoYXBwZW5pbmc/IENvdWxkIHRoZXJlIGJlIGFueSBtZW1vcnkgbGVha3MgbHVya2luZyB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgaW1wYWN0IG9mIGxvY2tpbmcgKGlmIGFueSkgYW5kIGhvdyB3ZSBtaWdodCBvcHRpbWl6ZSBmb3IgcGFyYWxsZWwgYWNjZXNzLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBwcmVjaXNlIHNvdXJjZSBvZiB3aGF0ZXZlciBpcnJlZ3VsYXJpdHkgd2UndmUgZGV0ZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDozNi4zNzk4MDMzOTdaIiwiU2VxIjo4NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MjIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjI6XFx0XFx0ICAgIGF0dHItXFx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XFxuMTQyMzpcXHRcXHRcXHRicGZfbG9nKGxvZywgXFxcIkludmFsaWQgbWFwX2V4dHJhLlxcXFxuXFxcIik7XFxuMTQyNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDI1OlxcdFxcdH1cXG4xNDI2OlxcdFxcbjE0Mjc6XFx0XFx0aWYgKG51bWFfbm9kZSAhPSBOVU1BX05PX05PREUgXFx1MDAyNlxcdTAwMjZcXG4xNDI4OlxcdFxcdCAgICAoKHVuc2lnbmVkIGludCludW1hX25vZGUgXFx1MDAzZT0gbnJfbm9kZV9pZHMgfHxcXG4xNDI5OlxcdFxcdCAgICAgIW5vZGVfb25saW5lKG51bWFfbm9kZSkpKSB7XFxuMTQzMDpcXHRcXHRcXHRicGZfbG9nKGxvZywgXFxcIkludmFsaWQgbnVtYV9ub2RlLlxcXFxuXFxcIik7XFxuMTQzMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDMyOlxcdFxcdH1cXG4xNDMzOlxcdFxcbjE0MzQ6XFx0XFx0LyogZmluZCBtYXAgdHlwZSBhbmQgaW5pdCBtYXA6IGhhc2h0YWJsZSB2cyByYnRyZWUgdnMgYmxvb20gdnMgLi4uICovXFxuMTQzNTpcXHRcXHRtYXBfdHlwZSA9IGF0dHItXFx1MDAzZW1hcF90eXBlO1xcbjE0MzY6XFx0XFx0aWYgKG1hcF90eXBlIFxcdTAwM2U9IEFSUkFZX1NJWkUoYnBmX21hcF90eXBlcykpIHtcXG4xNDM3OlxcdFxcdFxcdGJwZl9sb2cobG9nLCBcXFwiSW52YWxpZCBtYXBfdHlwZS5cXFxcblxcXCIpO1xcbjE0Mzg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQzOTpcXHRcXHR9XFxuMTQ0MDpcXHRcXHRtYXBfdHlwZSA9IGFycmF5X2luZGV4X25vc3BlYyhtYXBfdHlwZSwgQVJSQVlfU0laRShicGZfbWFwX3R5cGVzKSk7XFxuMTQ0MTpcXHRcXHRvcHMgPSBicGZfbWFwX3R5cGVzW21hcF90eXBlXTtcXG4xNDQyOlxcdFxcdGlmICghb3BzKVxcbjE0NDM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ0NDpcXHRcXG4xNDQ1OlxcdFxcdGlmIChvcHMtXFx1MDAzZW1hcF9hbGxvY19jaGVjaykge1xcbjE0NDY6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VtYXBfYWxsb2NfY2hlY2soYXR0cik7XFxuMTQ0NzpcXHRcXHRcXHRpZiAoZXJyKVxcbjE0NDg6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDQ5OlxcdFxcdH1cXG4xNDUwOlxcdFxcdGlmIChhdHRyLVxcdTAwM2VtYXBfaWZpbmRleClcXG4xNDUxOlxcdFxcdFxcdG9wcyA9IFxcdTAwMjZicGZfbWFwX29mZmxvYWRfb3BzO1xcbjE0NTI6XFx0XFx0aWYgKCFvcHMtXFx1MDAzZW1hcF9tZW1fdXNhZ2UpXFxuMTQ1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDU0OlxcdFxcbjE0NTU6XFx0XFx0aWYgKHRva2VuX2ZsYWcpIHtcXG4xNDU2OlxcdFxcdFxcdHRva2VuID0gYnBmX3Rva2VuX2dldF9mcm9tX2ZkKGF0dHItXFx1MDAzZW1hcF90b2tlbl9mZCk7XFxuMTQ1NzpcXHRcXHRcXHRpZiAoSVNfRVJSKHRva2VuKSkge1xcbjE0NTg6XFx0XFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJJbnZhbGlkIG1hcF90b2tlbl9mZC5cXFxcblxcXCIpO1xcbjE0NTk6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIodG9rZW4pO1xcbjE0NjA6XFx0XFx0XFx0fVxcbjE0NjE6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA5OjAwOjM2LjM4MDAzNjkyN1oiLCJTZXEiOjg1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTgwMjg5NTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgYHNvY2tfbWFwX2FsbG9jYCBQYXRjaCBhbmQgS01TQU4gUmVxdWlyZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgd2l0aGluIGBzb2NrX21hcF9hbGxvY2A6IGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzIFx1MDAzZSBJTlRfTUFYYC4gRXNzZW50aWFsbHksIGl0J3MgYSBzaXplIGxpbWl0IG9uIHRoZSBgbWF4X2VudHJpZXNgIHZhbHVlLiBCZWZvcmUsIHRoZSBjb2RlIG1pZ2h0IGhhdmUgcHJvY2VlZGVkIHdpdGggYSBwcm9ibGVtYXRpYyBgbWF4X2VudHJpZXNgIHZhbHVlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGludGVnZXIgb3ZlcmZsb3csIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciByZXNvdXJjZSBleGhhdXN0aW9uIGxhdGVyIG9uIOKAkyBzYXksIGluIGBzb2NrX21hcF9mcmVlYCBvciBkdXJpbmcgYWxsb2NhdGlvbiBpdHNlbGYuXG5cbk5vdywgdGhpcyBwYXRjaCAqcmVqZWN0cyogb3ZlcnNpemVkIGBtYXhfZW50cmllc2AgdmFsdWVzIHJpZ2h0IGF0IHRoZSBhbGxvY2F0aW9uIHN0YWdlLCByZXR1cm5pbmcgYC1FSU5WQUxgLiAgTXkgam9iIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgY2hlY2suXG5cbkZpcnN0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgcmlza3MuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBJdCdzICphZGRpbmcqIGlucHV0IHZhbGlkYXRpb24uIERvZXMgaXQgYWZmZWN0IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZT8gTm8uIERvZXMgaXQgdG91Y2ggcGFkZGluZywgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMsIG9yIGhlYXAgbWVtb3J5IGluIGEgZGFuZ2Vyb3VzIHdheT8gTm8uIElzIGl0IGFsdGVyaW5nIGFueSBib3VuZHMgY2hlY2tzIGluIGEgbWFubmVyIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQncyBtYWtpbmcgdGhlIGJvdW5kcyAqdGlnaHRlciouIEluIGVmZmVjdCwgaXQncyBwcmV2ZW50aW5nIHRoZSBhbGxvY2F0aW9uIG9mIGV4Y2Vzc2l2ZWx5IGxhcmdlLCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBtYXBzLlxuXG5JIGhhdmUgdGhlIEtNU0FOIGd1aWRlbGluZXMgaW4gZnJvbnQgb2YgbWUsIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZS4gVGhlIHJ1bGVzIHN0YXRlIEtNU0FOIGlzIG5lZWRlZCB3aGVuIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciB0aGUgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgZml0IHRoZXNlIGNhdGVnb3JpZXMuIFRoZSBwYXRjaCBhbHNvIGRvZXMgbm90IGludm9sdmUgYm91bmRzIGNoZWNrIG1vZGlmaWNhdGlvbiB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlIHBhdGNoJ3MgcHJpbWFyeSBjb25jZXJuIGlzIHByZXZlbnRpbmcgaW50ZWdlciBvdmVyZmxvdywgb3ZlcnNpemVkIGFsbG9jYXRpb25zLCBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGR1ZSB0byBhIHRvby1sYXJnZSBtYXAgc2l6ZSB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi9VQlNBTi4gVGhlc2UgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIEtNU0FOIGNyaXRlcmlhLCBOZWVkc0tNU0FOID0gZmFsc2UuICBUaGlzIGlzIGEgc2FmZSBjaGFuZ2UgdGhhdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQ4MSwiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwOTowMDo1Mi4xODI5MzU2MjRaIiwiU2VxIjo4NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjayAoYGF0dHItXFx1MDAzZW1heF9lbnRyaWVzIFxcdTAwM2UgSU5UX01BWGApIGluIGBzb2NrX21hcF9hbGxvYygpYCB0byByZWplY3QgbWFwIGNyZWF0aW9uIHdoZW4gYG1heF9lbnRyaWVzYCBleGNlZWRzIGBJTlRfTUFYYC4gVGhpcyBwcmV2ZW50cyBzaWduZWQgaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIChlLmcuIGluIGBzb2NrX21hcF9mcmVlKClgIHdoZXJlIGEgc2lnbmVkIGBpbnQgaWAgaXMgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIG1hcCBlbnRyaWVzKS4gXFxuXFxuU3VjaCBidWdzIChpbnRlZ2VyIG92ZXJmbG93LCB1bmRlZmluZWQgYmVoYXZpb3IsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgc3RyaWN0bHkgd2l0aGluIHRoZSBzY29wZSBvZiBVQlNBTiBhbmQgS0FTQU4uIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3Igc3RydWN0IHBhZGRpbmcgdG8gdXNlcnNwYWNlIG9yIGtlcm5lbCBicmFuY2hpbmcsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrIChgYXR0ci1cXHUwMDNlbWF4X2VudHJpZXMgXFx1MDAzZSBJTlRfTUFYYCkgaW4gYHNvY2tfbWFwX2FsbG9jKClgIHRvIHJlamVjdCBtYXAgY3JlYXRpb24gd2hlbiBgbWF4X2VudHJpZXNgIGV4Y2VlZHMgYElOVF9NQVhgLiBUaGlzIHByZXZlbnRzIHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGUuZy4gaW4gYHNvY2tfbWFwX2ZyZWUoKWAgd2hlcmUgYSBzaWduZWQgYGludCBpYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbWFwIGVudHJpZXMpLiBcXG5cXG5TdWNoIGJ1Z3MgKGludGVnZXIgb3ZlcmZsb3csIHVuZGVmaW5lZCBiZWhhdmlvciwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCBzdHJpY3RseSB3aXRoaW4gdGhlIHNjb3BlIG9mIFVCU0FOIGFuZCBLQVNBTi4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3QgcGFkZGluZyB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGJyYW5jaGluZywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowshh5p[1] Phase: Succeeded StartedAt: 2026-09-15 09:01:03 +0000 UTC FinishedAt: 2026-09-15 09:01:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 09:01:03 +0000 UTC FinishedAt: 2026-09-15 09:01:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2] Phase: Running StartedAt: 2026-09-15 09:01:03 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-15 09:01:03 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 09:01:03 +0000 UTC FinishedAt: 2026-09-15 09:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 09:01:03 +0000 UTC FinishedAt: 2026-09-15 09:01:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowshh5p/series-workflowshh5p-convert-artifact-780520046/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 09:01:13 +0000 UTC FinishedAt: 2026-09-15 09:17:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 09:01:13 +0000 UTC FinishedAt: 2026-09-15 09:17:37 +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:*4b5cd5cb-295d-49f8-a09b-77a3e7001803,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-workflowshh5p/series-workflowshh5p-convert-artifact-780520046/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": "ab8fc297-60b9-4fc5-998d-5e4e1a42519f", "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-workflowshh5p/series-workflowshh5p-build-action-2932216276/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 09:01:13 +0000 UTC FinishedAt: 2026-09-15 09:17:27 +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:*4b5cd5cb-295d-49f8-a09b-77a3e7001803,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-workflowshh5p/series-workflowshh5p-convert-artifact-780520046/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": "ab8fc297-60b9-4fc5-998d-5e4e1a42519f", "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-workflowshh5p/series-workflowshh5p-build-action-2932216276/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 09:17:37 +0000 UTC FinishedAt: 2026-09-15 09:17:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 09:17:37 +0000 UTC FinishedAt: 2026-09-15 09:17:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 09:17:37 +0000 UTC FinishedAt: 2026-09-15 09:17:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 09:17:37 +0000 UTC FinishedAt: 2026-09-15 09:17:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowshh5p/series-workflowshh5p-convert-artifact-2788904289/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 09:17:47 +0000 UTC FinishedAt: 2026-09-15 09:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 09:17:47 +0000 UTC FinishedAt: 2026-09-15 09:19:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab8fc297-60b9-4fc5-998d-5e4e1a42519f,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-workflowshh5p/series-workflowshh5p-build-action-2932216276/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-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 09:20:04 +0000 UTC FinishedAt: 2026-09-15 09:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 09:20:04 +0000 UTC FinishedAt: 2026-09-15 09:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 09:20:04 +0000 UTC FinishedAt: 2026-09-15 09:36:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 09:20:04 +0000 UTC FinishedAt: 2026-09-15 09:36:20 +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:*4b5cd5cb-295d-49f8-a09b-77a3e7001803,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-workflowshh5p/series-workflowshh5p-convert-artifact-2788904289/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": "fc3c32bf-df7e-4122-beca-c04940f8fdd8", "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-workflowshh5p/series-workflowshh5p-build-action-3339898477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 09:20:04 +0000 UTC FinishedAt: 2026-09-15 09:36:10 +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:*4b5cd5cb-295d-49f8-a09b-77a3e7001803,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-workflowshh5p/series-workflowshh5p-convert-artifact-2788904289/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": "fc3c32bf-df7e-4122-beca-c04940f8fdd8", "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-workflowshh5p/series-workflowshh5p-build-action-3339898477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 09:36:20 +0000 UTC FinishedAt: 2026-09-15 09:36:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 09:36:20 +0000 UTC FinishedAt: 2026-09-15 09:36:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-09-15 09:36:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowshh5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"base_commit":"ee363e055895364039bf28348ff13c615afad4ba","base_tree":"bpf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_alloc","sock_map_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee363e055895364039bf28348ff13c615afad4ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"63018af7-a9ca-414a-a407-d4e5952904e4","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Running StartedAt: 2026-09-15 09:36:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc3c32bf-df7e-4122-beca-c04940f8fdd8,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-workflowshh5p/series-workflowshh5p-build-action-3339898477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil