Name: series-workflowzj5x4 Phase: Succeeded StartedAt: 2026-09-04 10:54:24 +0000 UTC FinishedAt: 2026-09-04 15:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[0] Phase: Succeeded StartedAt: 2026-09-04 10:54:24 +0000 UTC FinishedAt: 2026-09-04 11:45:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 10:54:24 +0000 UTC FinishedAt: 2026-09-04 11:45:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "7c1b0482-4d54-49c4-a151-377edf1b6d48" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "__htab_map_lookup_and_delete_batch", "generic_map_delete_batch", "generic_map_update_batch", "generic_map_lookup_batch", "htab_map_lookup_batch", "htab_map_lookup_and_delete_batch", "bpf_map_do_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9kb19iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplYCkuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGR1cmluZyBwb2ludGVyIGFyaXRobWV0aWMgaW4gQlBGIG1hcCBiYXRjaCBvcGVyYXRpb25zIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoIGluIGhhc2h0YWIuYyBhbmQgZ2VuZXJpY19tYXBfKl9iYXRjaCBpbiBzeXNjYWxsLmMpIGJ5IGNhc3RpbmcgY291bnRzL2luZGljZXMgdG8gc2l6ZV90LiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCAoQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg1NzcyNWRkM2RlZmRkMjk3MzQxOTNkY2JiMTg5ODRlYjA4YzBiM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDExOjQzOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xOTc3LDEwICYjNDM7MTk3NywxMCBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4tXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyAmIzQzOyB0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuLVx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcbi1cdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbi1cdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4mIzQzO1x0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuJiM0MztcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbiYjNDM7XHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbiYjNDM7XHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi43MzEzODhhZTAwYWQxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMjAzNiw3ICYjNDM7MjAzNiw3IEBAIGludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHtcbiBcdFx0ZXJyID0gLUVGQVVMVDtcbi1cdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiYjNDM7XHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiBcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMjA5OCw5ICYjNDM7MjA5OCw5IEBAIGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuJiM0MztcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuLVx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyBjcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuJiM0MztcdFx0ICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgJiM0MzsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLFxuQEAgLTIxNzksMTIgJiM0MzsyMTc5LDEyIEBAIGludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4gXHRcdFx0XHQgbWFwLVx1MDAzZWtleV9zaXplKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcdFx0fVxuLVx0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyBjcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuJiM0MztcdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgJiM0MzsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9kb19iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODU3NzI1ZGQzZGVmZGQyOTczNDE5M2RjYmIxODk4NGViMDhjMGIzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTE6NDM6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCkBAIC0xOTc3LDEwICYjNDM7MTk3NywxMCBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpOwotCWlmIChidWNrZXRfY250ICZhbXA7JmFtcDsgKGNvcHlfdG9fdXNlcih1a2V5cyAmIzQzOyB0b3RhbCAqIGtleV9zaXplLCBrZXlzLAotCSAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8Ci0JICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLAotCSAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7CiYjNDM7CWlmIChidWNrZXRfY250ICZhbXA7JmFtcDsgKGNvcHlfdG9fdXNlcih1a2V5cyAmIzQzOyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsCiYjNDM7CSAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHwKJiM0MzsJICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsCiYjNDM7CSAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBhZnRlcl9sb29wOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggNjg3NGJhMTQyNGFmMC4uNzMxMzg4YWUwMGFkMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmMKQEAgLTIwMzYsNyAmIzQzOzIwMzYsNyBAQCBpbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAKIAlmb3IgKGNwID0gMDsgY3AgJmx0OyBtYXhfY291bnQ7IGNwJiM0MzsmIzQzOykgewogCQllcnIgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IGNwICogbWFwLSZndDtrZXlfc2l6ZSwKJiM0MzsJCWlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiAJCQkJICAgbWFwLSZndDtrZXlfc2l6ZSkpCiAJCQlicmVhazsKIApAQCAtMjA5OCw5ICYjNDM7MjA5OCw5IEBAIGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLAogCiAJZm9yIChjcCA9IDA7IGNwICZsdDsgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHsKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtJmd0O2tleV9zaXplLAogCQkgICAgbWFwLSZndDtrZXlfc2l6ZSkgfHwKLQkJICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgJiM0MzsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSkKJiM0MzsJCSAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSkKIAkJCWJyZWFrOwogCiAJCWVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsCkBAIC0yMTc5LDEyICYjNDM7MjE3OSwxMiBAQCBpbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCWlmIChlcnIpCiAJCQlnb3RvIGZyZWVfYnVmOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsIGtleSwKJiM0MzsJCWlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZSwga2V5LAogCQkJCSBtYXAtJmd0O2tleV9zaXplKSkgewogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gZnJlZV9idWY7CiAJCX0KLQkJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgJiM0MzsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHsKJiM0MzsJCWlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGZyZWVfYnVmOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEJhdGNoIE1hcCBPcGVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBiYXRjaCBvcGVyYXRpb25zIHdpdGhpbiBCUEYgbWFwcywgc3BlY2lmaWNhbGx5IGhhc2ggdGFibGVzLCBnaXZlbiB0aGUgYGhhc2h0YWIuY2AgaW5jbHVzaW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkaWZmcyDigJMgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4KClRoZSBkaWZmIGhpZ2hsaWdodHMgb3BlcmF0aW9ucyBsaWtlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEkmIzM5O20gc2VlaW5nIG11bHRpcGxpY2F0aW9ucyBhbmQgcG9pbnRlciBhcml0aG1ldGljIHBvdGVudGlhbGx5IHVzaW5nIDMyLWJpdCB0eXBlcywgbGlrZSBgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplYCBvciBga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZWAuIEJpbmdvLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGFyZ2V0aW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IsIG1vcmUgbGlrZWx5LCBpc3N1ZXMgd2l0aCBwb2ludGVyIGFyaXRobWV0aWMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2VyIGtleXMgb3IgYSBoaWdoIG51bWJlciBvZiBpdGVyYXRpb25zLgoKVGhlIGxpa2VseSByb290IGNhdXNlIGlzIGEgdHlwZSBtaXNtYXRjaCBvciBwb3RlbnRpYWwgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBvZmZzZXRzIG9yIHNpemVzIHdpdGhpbiB0aGVzZSBiYXRjaCBvcGVyYXRpb25zLiBVc2luZyBhIDMyLWJpdCBpbnRlZ2VyIGZvciBtdWx0aXBsaWNhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBrZXkgc2l6ZXMgYW5kIGJhdGNoIGNvdW50cywgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyB3aXRoIHRoZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9mIHRoZSBpbnZvbHZlZCBjb2RlIHNlY3Rpb25zIGFuZCBzZWFyY2ggdXNpbmcgYGdyZXBwZXJgIG9yIHNpbWlsYXIgdG9vbGluZyB0byBlbnN1cmUgdGhlIGlzc3VlIGlzIGlzb2xhdGVkIGFuZCB0aGUgcHJvdmlkZWQgc29sdXRpb24gaXMgc291bmQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIG11bHRpcGxpY2F0aW9uIGFuZCBwb2ludGVyIGFyaXRobWV0aWMgY2FsY3VsYXRpb25zIGFyZSBiZWluZyBkb25lLCBhbmQgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdHlwZXMgYmVpbmcgdXNlZCBhbmQgd2hlcmUgdGhlc2UgdmFsdWVzIGFyZSBjb21pbmcgZnJvbS4gVGhlIGdvYWwgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3Bvc2VkIGZpeCBhZGVxdWF0ZWx5IGFkZHJlc3NlcyB0aGUgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSB3aGlsZSBtYWludGFpbmluZyBwZXJmb3JtYW5jZSBpbiBiYXRjaCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc0LVx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3NTpcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3Ni1cdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTktXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAwOlx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAxLVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE1MDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTU6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODItXHQubWFwX2RlbGV0ZV9lbGVtID0gdHJpZV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODM6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODQtXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDY1PWludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIxMjItXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMTIzOmludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIxMjQtXHRcdFx0XHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJQRiBIYXNoIFRhYmxlIElzc3VlcyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgc2VlaW5nIHNvbWV0aGluZyBmdW5reSB3aXRoIEJQRi4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBsaWtlbHkgaW52b2x2ZW1lbnQgb2YgaGFzaCB0YWJsZXMsIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSBuZWVkIHRvIHJldmlldyBob3cgdGhlIGhhc2ggdGFibGVzIHRoZW1zZWx2ZXMgYXJlIHN0cnVjdHVyZWQsIGhvdyBjb2xsaXNpb25zIGFyZSBoYW5kbGVkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zIC0gaW5zZXJ0aW9uLCBkZWxldGlvbiwgbG9va3VwLCBhbmQgaXRlcmF0aW9uIOKAkyBhcmUgaW1wbGVtZW50ZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgdGFibGUmIzM5O3MgaW50ZXJuYWxzIHdvdWxkIGJlIGEgaGlnaCBwcmlvcml0eSB0byBjaGVjay4KClRoZW4sIHNpbmNlIHRoaXMgbGlrZWx5IGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UsIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgbmVlZHMgYSB0aG9yb3VnaCBnb2luZyBvdmVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGNhbGxzIGludGVyZmFjZSB3aXRoIHRoZSBoYXNodGFibGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBwb2ludHMgd2hlcmUgZGF0YSBmbG93cyBiZXR3ZWVuIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZSDigJMgYW55IGluY29uc2lzdGVuY2llcyBvciB2dWxuZXJhYmlsaXRpZXMgdGhlcmUgY291bGQgZXhwbGFpbiB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IuIEkgbmVlZCB0byBzY3J1dGluaXplIHBhcmFtZXRlciB2YWxpZGF0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGNvbnRleHQgb2Ygc3lzY2FsbHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQlBGIGhhc2ggdGFibGUuIExldOKAmXMgbWFrZSBzdXJlIHdlIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMsIGFzIHRoZXNlIHRoaW5ncyBhcmUgYWxtb3N0IGFsd2F5cyBpbnRlcnR3aW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTcwOlx0XHQvKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxuMTk3MTpcdFx0ICogdW5sb2NraW5nIHRoZSByY3UuXG4xOTcyOlx0XHQgKi9cbjE5NzM6XHRcdGlmICghYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGJhdGNoICYjNDM7IDEgXHUwMDNjIGh0YWItXHUwMDNlbl9idWNrZXRzKSkge1xuMTk3NDpcdFx0XHRiYXRjaCYjNDM7JiM0Mzs7XG4xOTc1Olx0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuMTk3NjpcdFx0fVxuMTk3NzpcdFxuMTk3ODpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xOTc5Olx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMTk4MDpcdFx0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuMTk4MTpcdFx0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuMTk4MjpcdFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4xOTgzOlx0XHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4xOTg0Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4xOTg1Olx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE5ODY6XHRcdH1cbjE5ODc6XHRcbjE5ODg6XHRcdHRvdGFsICYjNDM7PSBidWNrZXRfY250O1xuMTk4OTpcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk5MDpcdFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpIHtcbjE5OTE6XHRcdFx0cmV0ID0gLUVOT0VOVDtcbjE5OTI6XHRcdFx0Z290byBhZnRlcl9sb29wO1xuMTk5MzpcdFx0fVxuMTk5NDpcdFx0Z290byBhZ2FpbjtcbjE5OTU6XHRcbjE5OTY6XHRhZnRlcl9sb29wOlxuMTk5NzpcdFx0aWYgKHJldCA9PSAtRUZBVUxUKVxuMTk5ODpcdFx0XHRnb3RvIG91dDtcbjE5OTk6XHRcbjIwMDA6XHRcdC8qIGNvcHkgIyBvZiBlbnRyaWVzIGFuZCBuZXh0IGJhdGNoICovXG4yMDAxOlx0XHR1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xuMjAwMjpcdFx0aWYgKGNvcHlfdG9fdXNlcih1YmF0Y2gsIFx1MDAyNmJhdGNoLCBzaXplb2YoYmF0Y2gpKSB8fFxuMjAwMzpcdFx0ICAgIHB1dF91c2VyKHRvdGFsLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDA0Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4yMDA1Olx0XG4yMDA2Olx0b3V0OlxuMjAwNzpcdFx0a3ZmcmVlKGtleXMpO1xuMjAwODpcdFx0a3ZmcmVlKHZhbHVlcyk7XG4yMDA5Olx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYSBUcmlja3kgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmdW5jdGlvbiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuLi4gc291bmRzIGxpa2UgYSBtb3V0aGZ1bCwgYW5kIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IG9uZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBLbm93aW5nIHRoZSBjYWxsZXIgaXMgKmNyaXRpY2FsKiBpbiBkZWJ1Z2dpbmcgdGhpcyBzb3J0IG9mIHRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGlzIGluaXRpYXRpbmcgdGhpcyBsb29rdXAtYW5kLWRlbGV0ZSBvcGVyYXRpb24gb24gdGhlIGhhc2ggdGFibGUuIElzIHRoaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgZXh0ZXJuYWwgZXZlbnQsIG9yIGlzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW50ZXJuYWwgcHJvY2Vzcz8gVGhlIGNhbGxlciBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgJiMzNDt3aHkmIzM0OyBhbmQsIHBvdGVudGlhbGx5LCB0aGUgcm9vdCBjYXVzZSBvZiBhbnkgaXNzdWVzIEkgZW5jb3VudGVyIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgcGVlbGluZyBiYWNrIHRob3NlIGxheWVycyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzcxPXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE3NzI6X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTc3My1cdFx0XHRcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMTM9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE1LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMTY6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTctXHRcdFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyMT1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI0LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMjU6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAyNi1cdFx0XHRcdFx0XHQgIGZhbHNlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDMwPWh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDMyLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzM6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzQtXHRcdFx0XHRcdFx0ICBmYWxzZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzg9aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDQxLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNDI6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0My1cdFx0XHRcdFx0XHQgIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0Nz1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTAte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA1MTpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1Mi1cdFx0XHRcdFx0XHQgIHRydWUsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNTY9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTkte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2MDpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYxLVx0XHRcdFx0XHRcdCAgdHJ1ZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2NT1odGFiX2xydV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjcte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2ODpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2OS1cdFx0XHRcdFx0XHQgIHRydWUsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDczPWh0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzYte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA3NzpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDc4LVx0XHRcdFx0XHRcdCAgdHJ1ZSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBCYXRjaCBPcGVyYXRpb25zIGluIEJQRiBNYXBzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJhdGNoIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZXkgaGFuZGxlIG1hcCBpbnRlcmFjdGlvbnMuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYW5kIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGVpciBsb2dpYy4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGFzcGVjdHMgb2YgYXRvbWljaXR5LCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBudWFuY2VzIG9mIGhvdyBkYXRhIGlzIGJhdGNoZWQsIGFuZCB3aGF0IHNwZWNpZmljIG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMzA6XHRcdGlmIChwdXRfdXNlcigwLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDMxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjAzMjpcdFxuMjAzMzpcdFx0a2V5ID0ga3ZtYWxsb2MobWFwLVx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDM0Olx0XHRpZiAoIWtleSlcbjIwMzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMDM2Olx0XG4yMDM3Olx0XHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7XG4yMDM4Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMDM5Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbjIwNDA6XHRcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4yMDQxOlx0XHRcdFx0YnJlYWs7XG4yMDQyOlx0XG4yMDQzOlx0XHRcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XG4yMDQ0Olx0XHRcdFx0ZXJyID0gYnBmX21hcF9vZmZsb2FkX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcbjIwNDU6XHRcdFx0XHRicmVhaztcbjIwNDY6XHRcdFx0fVxuMjA0NzpcdFxuMjA0ODpcdFx0XHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwNDk6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjA1MDpcdFx0XHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XG4yMDUxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjA1MjpcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMjA1MzpcdFx0XHRpZiAoZXJyKVxuMjA1NDpcdFx0XHRcdGJyZWFrO1xuMjA1NTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIwNTY6XHRcdH1cbjIwNTc6XHRcdGlmIChjb3B5X3RvX3VzZXIoXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQsIFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcbjIwNTg6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIwNTk6XHRcbjIwNjA6XHRcdGt2ZnJlZShrZXkpO1xuMjA2MTpcdFxuMjA2MjpcdFx0cmV0dXJuIGVycjtcbjIwNjM6XHR9XG4yMDY0Olx0XG4yMDY1Olx0aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4yMDY2Olx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjIwNjc6XHRcdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4yMDY4Olx0e1xuMjA2OTpcdFx0dm9pZCBfX3VzZXIgKnZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLnZhbHVlcyk7XG4yMDcwOlx0XHR2b2lkIF9fdXNlciAqa2V5cyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmtleXMpO1xuMjA3MTpcdFx0dTMyIHZhbHVlX3NpemUsIGNwLCBtYXhfY291bnQ7XG4yMDcyOlx0XHR2b2lkICprZXksICp2YWx1ZTtcbjIwNzM6XHRcdGludCBlcnIgPSAwO1xuMjA3NDpcdFxuMjA3NTpcdFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyxcbjIwNzY6XHRcdFx0XHRcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcbjIwNzc6XHRcdGlmIChlcnIpXG4yMDc4Olx0XHRcdHJldHVybiBlcnI7XG4yMDc5Olx0XG4yMDgwOlx0XHR2YWx1ZV9zaXplID0gYnBmX21hcF92YWx1ZV9zaXplKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcbjIwODE6XHRcbjIwODI6XHRcdG1heF9jb3VudCA9IGF0dHItXHUwMDNlYmF0Y2guY291bnQ7XG4yMDgzOlx0XHRpZiAoIW1heF9jb3VudClcbjIwODQ6XHRcdFx0cmV0dXJuIDA7XG4yMDg1Olx0XG4yMDg2Olx0XHRpZiAocHV0X3VzZXIoMCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjA4NzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIwODg6XHRcbjIwODk6XHRcdGtleSA9IGt2bWFsbG9jKG1hcC1cdTAwM2VrZXlfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuMjA5MDpcdFx0aWYgKCFrZXkpXG4yMDkxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjA5MjpcdFxuMjA5MzpcdFx0dmFsdWUgPSBrdm1hbGxvYyh2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDk0Olx0XHRpZiAoIXZhbHVlKSB7XG4yMDk1Olx0XHRcdGt2ZnJlZShrZXkpO1xuMjA5NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIwOTc6XHRcdH1cbjIwOTg6XHRcbjIwOTk6XHRcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHtcbjIxMDA6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxMDE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuMjEwMjpcdFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuMjEwMzpcdFx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4yMTA0Olx0XHRcdFx0YnJlYWs7XG4yMTA1Olx0XG4yMTA2Olx0XHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXG4yMTA3Olx0XHRcdFx0XHRcdCAgIGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XG4yMTA4Olx0XG4yMTA5Olx0XHRcdGlmIChlcnIpXG4yMTEwOlx0XHRcdFx0YnJlYWs7XG4yMTExOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjExMjpcdFx0fVxuMjExMzpcdFxuMjExNDpcdFx0aWYgKGNvcHlfdG9fdXNlcihcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCwgXHUwMDI2Y3AsIHNpemVvZihjcCkpKVxuMjExNTpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjExNjpcdFxuMjExNzpcdFx0a3ZmcmVlKHZhbHVlKTtcbjIxMTg6XHRcdGt2ZnJlZShrZXkpO1xuMjExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODE3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBTeXNjYWxsIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzcGVjaWZpYyBCUEYgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCBhdCB0aGUga2VybmVsIGxldmVsLiBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDIxMjAgdGhyb3VnaCAyMjAwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGFyZ3VtZW50IHBhcnNpbmcgYW5kIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCByZXNpZGVzLiBIb3BlZnVsbHksIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIHNlbnNpYmxlIGFuZCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIGEgY2xlYXIgd2F5LCBhcyB0aGlzIHNlY3Rpb24gbGlrZWx5IHRvdWNoZXMgdXBvbiBCUEYgcHJvZ3JhbSBsb2FkaW5nLCBtYXAgb3BlcmF0aW9ucywgb3IgcGVyaGFwcyBldmVuIGhlbHBlciBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgYXJndW1lbnQgdmFsaWRhdGlvbiwgc2VjdXJpdHkgY2hlY2tzLCBhbmQgY2FsbHMgdG8gbG93ZXItbGV2ZWwgQlBGIGhlbHBlciBmdW5jdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGxvY2tpbmcgc3RyYXRlZ2llcywgYW5kIGhvdyB0aGUgc3lzY2FsbCBpbnRlcmFjdHMgd2l0aCB0aGUgQlBGIFZNLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgbGV0IG1lIG1hcCBob3cgdGhlIHN5c2NhbGwgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgQlBGIHN1YnN5c3RlbS4gSSBhbnRpY2lwYXRlIGEgcmVhc29uYWJsZSBtaXggb2YgQyBjb2RlLCBtYXliZSBzb21lIG1hY3JvcywgYW5kIGhvcGVmdWxseSBub3QgdG9vIG1hbnkgbmVzdGVkIGNvbmRpdGlvbmFscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMjA6XHRcdHJldHVybiBlcnI7XG4yMTIxOlx0fVxuMjEyMjpcdFxuMjEyMzpcdGludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbjIxMjQ6XHRcdFx0XHRcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjIxMjU6XHRcdFx0XHRcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuMjEyNjpcdHtcbjIxMjc6XHRcdHZvaWQgX191c2VyICp1b2JhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcbjIxMjg6XHRcdHZvaWQgX191c2VyICp1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5pbl9iYXRjaCk7XG4yMTI5Olx0XHR2b2lkIF9fdXNlciAqdmFsdWVzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gudmFsdWVzKTtcbjIxMzA6XHRcdHZvaWQgX191c2VyICprZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gua2V5cyk7XG4yMTMxOlx0XHR2b2lkICpidWYsICpidWZfcHJldmtleSwgKnByZXZfa2V5LCAqa2V5LCAqdmFsdWU7XG4yMTMyOlx0XHR1MzIgdmFsdWVfc2l6ZSwgY3AsIG1heF9jb3VudDtcbjIxMzM6XHRcdGludCBlcnI7XG4yMTM0Olx0XG4yMTM1Olx0XHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzLCBCUEZfRl9MT0NLIHwgQlBGX0ZfQ1BVKTtcbjIxMzY6XHRcdGlmIChlcnIpXG4yMTM3Olx0XHRcdHJldHVybiBlcnI7XG4yMTM4Olx0XG4yMTM5Olx0XHR2YWx1ZV9zaXplID0gYnBmX21hcF92YWx1ZV9zaXplKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcbjIxNDA6XHRcbjIxNDE6XHRcdG1heF9jb3VudCA9IGF0dHItXHUwMDNlYmF0Y2guY291bnQ7XG4yMTQyOlx0XHRpZiAoIW1heF9jb3VudClcbjIxNDM6XHRcdFx0cmV0dXJuIDA7XG4yMTQ0Olx0XG4yMTQ1Olx0XHRpZiAocHV0X3VzZXIoMCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjE0NjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIxNDc6XHRcbjIxNDg6XHRcdGJ1Zl9wcmV2a2V5ID0ga3ZtYWxsb2MobWFwLVx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMTQ5Olx0XHRpZiAoIWJ1Zl9wcmV2a2V5KVxuMjE1MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIxNTE6XHRcbjIxNTI6XHRcdGJ1ZiA9IGt2bWFsbG9jKG1hcC1cdTAwM2VrZXlfc2l6ZSAmIzQzOyB2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMTUzOlx0XHRpZiAoIWJ1Zikge1xuMjE1NDpcdFx0XHRrdmZyZWUoYnVmX3ByZXZrZXkpO1xuMjE1NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIxNTY6XHRcdH1cbjIxNTc6XHRcbjIxNTg6XHRcdGVyciA9IC1FRkFVTFQ7XG4yMTU5Olx0XHRwcmV2X2tleSA9IE5VTEw7XG4yMTYwOlx0XHRpZiAodWJhdGNoIFx1MDAyNlx1MDAyNiBjb3B5X2Zyb21fdXNlcihidWZfcHJldmtleSwgdWJhdGNoLCBtYXAtXHUwMDNla2V5X3NpemUpKVxuMjE2MTpcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE2MjpcdFx0a2V5ID0gYnVmO1xuMjE2MzpcdFx0dmFsdWUgPSBrZXkgJiM0MzsgbWFwLVx1MDAzZWtleV9zaXplO1xuMjE2NDpcdFx0aWYgKHViYXRjaClcbjIxNjU6XHRcdFx0cHJldl9rZXkgPSBidWZfcHJldmtleTtcbjIxNjY6XHRcbjIxNjc6XHRcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50Oykge1xuMjE2ODpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMTY5Olx0XHRcdGVyciA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2dldF9uZXh0X2tleShtYXAsIHByZXZfa2V5LCBrZXkpO1xuMjE3MDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIxNzE6XHRcdFx0aWYgKGVycilcbjIxNzI6XHRcdFx0XHRicmVhaztcbjIxNzM6XHRcdFx0ZXJyID0gYnBmX21hcF9jb3B5X3ZhbHVlKG1hcCwga2V5LCB2YWx1ZSxcbjIxNzQ6XHRcdFx0XHRcdFx0IGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XG4yMTc1Olx0XG4yMTc2Olx0XHRcdGlmIChlcnIgPT0gLUVOT0VOVClcbjIxNzc6XHRcdFx0XHRnb3RvIG5leHRfa2V5O1xuMjE3ODpcdFxuMjE3OTpcdFx0XHRpZiAoZXJyKVxuMjE4MDpcdFx0XHRcdGdvdG8gZnJlZV9idWY7XG4yMTgxOlx0XG4yMTgyOlx0XHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4yMTgzOlx0XHRcdFx0XHQgbWFwLVx1MDAzZWtleV9zaXplKSkge1xuMjE4NDpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMTg1Olx0XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxODY6XHRcdFx0fVxuMjE4NzpcdFx0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4yMTg4Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxODk6XHRcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE5MDpcdFx0XHR9XG4yMTkxOlx0XG4yMTkyOlx0XHRcdGNwJiM0MzsmIzQzOztcbjIxOTM6XHRuZXh0X2tleTpcbjIxOTQ6XHRcdFx0aWYgKCFwcmV2X2tleSlcbjIxOTU6XHRcdFx0XHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xuMjE5NjpcdFxuMjE5NzpcdFx0XHRzd2FwKHByZXZfa2V5LCBrZXkpO1xuMjE5ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIxOTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGlzIHBhdGNoIHByZXNlbnRzIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHJlYWNoYWJpbGl0eS4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCDigJMgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Ag4oCTIGFyZSBhbGwgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbHM6IGBCUEZfTUFQX0xPT0tVUF9CQVRDSGAsIGBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIYCwgYEJQRl9NQVBfVVBEQVRFX0JBVENIYCwgYW5kIGBCUEZfTUFQX0RFTEVURV9CQVRDSGAuIENvbnNpZGVyaW5nIHRoYXQgQlBGIGlzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgTGludXgga2VybmVsLCBhIGNyaXRpY2FsIHN1YnN5c3RlbSwgdGhpcyBpcyBhIGNsZWFyICYjMzQ7eWVzJiMzNDsgaW4gdGVybXMgb2YgZnV6emluZyB2YWx1ZS4gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuCgpOb3cgZm9yIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgdG8gZW5zdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiBjb21waWxlZCBpbiBhbmQgYWNjZXNzaWJsZS4gSXQgbG9va3MgbGlrZSBCUEYgc3lzY2FsbHMgcmVxdWlyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCAoYW5kIGBDT05GSUdfQlBGYCkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBib3RoIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBhcmUgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2h0YWJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTMxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxsIHN1cHBvcnQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gZW5zdXJlIGlzIGVuYWJsZWQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4gVG8gY29uZmlybSBpdHMgZXhhY3QgbmFtZSBhbmQgbG9jYXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgdHdvIG9idmlvdXMgcGxhY2VzIHRvIGNoZWNrIGZvciBgQlBGX1NZU0NBTExgIChvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxsIHNldHVwKSBhcmUgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgYW5kIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuYXZpZ2F0ZSB0byB0aG9zZSBmaWxlcyB0byB2ZXJpZnkgdGhlIGV4YWN0IG9wdGlvbiBuYW1lIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgQlBGIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNy4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBCUEYgZmVhdHVyZSBlbmFibGVtZW50IGZsYWcsIG9yIG1heWJlIEkmIzM5O20gdHJ5aW5nIHRvIHJlY2FsbCBhIHJlbGF0ZWQgb3B0aW9uIHRoYXQgSSB3YW50IHRvIGRvdWJsZS1jaGVjay4gQ291bGQgYmUgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgZmxhZywgb3Igc29tZXRoaW5nIHRpZWQgdG8gYSBzcGVjaWZpYyBCUEYgaGVscGVyIHZlcnNpb24uIEkgc3VzcGVjdCBsaW5lIDI3IHdpbGwgbGlrZWx5IGxlYWQgbWUgdG8gdGhlIG1haW4gZW50cnkgcG9pbnQgb3IgYSBjcnVjaWFsIGRlcGVuZGVuY3kgaW4gdGhhdCBLY29uZmlnIGZpbGUuIEkgYW0gaG9waW5nIHRvIGdldCB0byB0aGUgcm9vdCBjYXVzZSBvZiBhbiBpc3N1ZSBJJiMzOTttIHdvcmtpbmcgdGhyb3VnaC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBwcm92aWRlIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gdGhhdCBhbGwgZnVydGhlciBjb25maWd1cmF0aW9uIGlzIHJlbGlhbnQgb24uIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgdGhlcmUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBidWlsZCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBDYWxscyBmb3IgU3ltYm9sIEV4dHJhY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlZDogYEJQRl9TWVNDQUxMYCDigJMgbm8gQ09ORklHXyBwcmVmaXgsIGdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZnVuY3Rpb24gYW5hbHlzaXMuIEZvY3VzaW5nIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBiZWNhdXNlIG9mIHRoZSBpbXBhY3Qgb24gc3ltYm9sIGV4dHJhY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMsIEkgc2VlIHRoYXQgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBmdW5jdGlvbnMsIGluY2x1ZGluZyB0aGUgbG9va3VwL2RlbGV0ZSBiYXRjaCBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgc2V2ZXJhbCBodGFiIGFuZCBscnUgdmFyaWFudHMuCgpNb3ZpbmcgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSBzcG90IHRoZSBgZ2VuZXJpY19tYXBfKl9iYXRjaGAgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RhdGljIG5hdHVyZSBvZiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgd2lsbCBwcmV2ZW50IGl0cyBpbmNsdXNpb24gaW4gdGhlIHN5bWJvbCB0YWJsZXMgU3l6a2FsbGVyIGlzIHB1bGxpbmcgZnJvbSAodm1saW51eC9rYWxsc3ltcykuIFNpbmNlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGEgLmMgZmlsZSwgaW5saW5pbmcgaXMgYSBwb3NzaWJpbGl0eS4gU28sIHRoZSBxdWVzdGlvbiBpcywgY2FuIHN0YXRpYyBmdW5jdGlvbnMgYmUgcmVsaWFibHkgdXNlZCBpbiBGb2N1c1N5bWJvbHMgaWYgbm90IGlubGluZWQ/CgpUaGUgc3RhbmRhcmQgYXBwcm9hY2ggdG8gaGFuZGxlIHRoaXMgaXMgdG8gaW5jbHVkZSAqYm90aCogdGhlIHN0YXRpYyBmdW5jdGlvbiAqYW5kKiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBzdWNoIGFzIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBpbiB0aGUgRm9jdXNTeW1ib2xzIGxpc3QuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYGJwZl9tYXBfZG9fYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgYmF0Y2ggb3BlcmF0aW9ucyBhcmUgYWN0dWFsbHkgZGlzcGF0Y2hlZC4gVGhpcyB3aWxsIHByb3ZpZGUgY29udGV4dCBmb3IgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBzeXNjYWxsIGZ1bmN0aW9ucyBhbmQgdGhlIGhhc2h0YWIgZnVuY3Rpb25zLCBzb2xpZGlmeWluZyB0aGUgbmVlZCB0byBlbnN1cmUgKmFsbCogdGhlc2UgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdG8gU3l6a2FsbGVyIGZvciBlZmZlY3RpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc0LVx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3NTpcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3Ni1cdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTktXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAwOlx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAxLVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE1MDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTU6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjYtI2RlZmluZSBCQVRDSF9PUFMoX25hbWUpXHRcdFx0XFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3Olx0Lm1hcF9sb29rdXBfYmF0Y2ggPVx0XHRcdFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODpcdF9uYW1lIyNfbWFwX2xvb2t1cF9iYXRjaCxcdFx0XFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5LVx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCA9XHRcdFxcXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxMj1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDEzOmh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE0LVx0XHRcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDI5PXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzA6aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzMS1cdFx0ICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDQ2PXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNDc6aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDgtXHRcdFx0XHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2ND1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY1Omh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDY2LVx0XHRcdCAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQzPXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzc4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM3OTpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgwLVx0XHRcdFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYz03NzU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRyaWVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNzgyLVx0Lm1hcF9kZWxldGVfZWxlbSA9IHRyaWVfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NzgzOlx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNzg0LVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjA2NT1pbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTIyLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEyMzppbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVx0XHRcdFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3NDc9c3RhdGljIGludCBicGZfbWFwX2RvX2JhdGNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU3NzYtXHRpZiAoY21kID09IEJQRl9NQVBfTE9PS1VQX0JBVENIKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTc3NzpcdFx0QlBGX0RPX0JBVENIKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9iYXRjaCwgbWFwLCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Nzc4LVx0ZWxzZSBpZiAoY21kID09IEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0gpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgQmF0Y2ggTWFwIE9wZXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBicGZfbWFwX2RvX2JhdGNoYCBmdW5jdGlvbi4gSXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEkga25vdyB0aGlzIGlzIHRoZSBjb3JlIG9mIGJhdGNoIHByb2Nlc3NpbmcgaW4gQlBGLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEJQRiBtYXBzIHdoZW4gbXVsdGlwbGUgb3BlcmF0aW9ucyBhcmUgZ3JvdXBlZCB0b2dldGhlci4gSeKAmW0gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgbG9ja2luZywgZXJyb3IgY2hlY2tpbmcsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBiYXRjaCBjb250ZXh0LCBhbmQgdGhlbiB0aWUgdGhhdCB0byBob3cgdGhlIHVzZXItc3BhY2Ugc2lkZSBzZW5kcyB0aGUgaW5mb3JtYXRpb24gdG8gdGhpcyBmdW5jdGlvbi4gUmlnaHQsIGxldOKAmXMgZ28gY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IGhvdyBpdOKAmXMgaW1wbGVtZW50ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBhdG9taWNpdHkgYW5kIGNvbnNpc3RlbmN5IHdpdGhpbiB0aGUgbWFwIG9wZXJhdGlvbnMsIGFuZCBpZiB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBhbnkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIGJhdGNoaW5nIHRvIHJlZHVjZSBvdmVyaGVhZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBoYXMgYW55IG9idmlvdXMgcGl0ZmFsbHMgSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIGlmIEkmIzM5O20gZGVzaWduaW5nIGEgbmV3IGJhdGNoIG1hcCBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3NDU6XHRcdH0gd2hpbGUgKDApXG41NzQ2Olx0XG41NzQ3Olx0c3RhdGljIGludCBicGZfbWFwX2RvX2JhdGNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuNTc0ODpcdFx0XHRcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuNTc0OTpcdFx0XHRcdCAgICBpbnQgY21kKVxuNTc1MDpcdHtcbjU3NTE6XHRcdGJvb2wgaGFzX3JlYWQgID0gY21kID09IEJQRl9NQVBfTE9PS1VQX0JBVENIIHx8XG41NzUyOlx0XHRcdFx0IGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIO1xuNTc1MzpcdFx0Ym9vbCBoYXNfd3JpdGUgPSBjbWQgIT0gQlBGX01BUF9MT09LVVBfQkFUQ0g7XG41NzU0Olx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuNTc1NTpcdFx0aW50IGVycjtcbjU3NTY6XHRcbjU3NTc6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9NQVBfQkFUQ0gpKVxuNTc1ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU3NTk6XHRcbjU3NjA6XHRcdENMQVNTKGZkLCBmKShhdHRyLVx1MDAzZWJhdGNoLm1hcF9mZCk7XG41NzYxOlx0XG41NzYyOlx0XHRtYXAgPSBfX2JwZl9tYXBfZ2V0KGYpO1xuNTc2MzpcdFx0aWYgKElTX0VSUihtYXApKVxuNTc2NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihtYXApO1xuNTc2NTpcdFx0aWYgKGhhc193cml0ZSlcbjU3NjY6XHRcdFx0YnBmX21hcF93cml0ZV9hY3RpdmVfaW5jKG1hcCk7XG41NzY3Olx0XHRpZiAoaGFzX3JlYWQgXHUwMDI2XHUwMDI2ICEobWFwX2dldF9zeXNfcGVybXMobWFwLCBmKSBcdTAwMjYgRk1PREVfQ0FOX1JFQUQpKSB7XG41NzY4Olx0XHRcdGVyciA9IC1FUEVSTTtcbjU3Njk6XHRcdFx0Z290byBlcnJfcHV0O1xuNTc3MDpcdFx0fVxuNTc3MTpcdFx0aWYgKGhhc193cml0ZSBcdTAwMjZcdTAwMjYgIShtYXBfZ2V0X3N5c19wZXJtcyhtYXAsIGYpIFx1MDAyNiBGTU9ERV9DQU5fV1JJVEUpKSB7XG41NzcyOlx0XHRcdGVyciA9IC1FUEVSTTtcbjU3NzM6XHRcdFx0Z290byBlcnJfcHV0O1xuNTc3NDpcdFx0fVxuNTc3NTpcdFxuNTc3NjpcdFx0aWYgKGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9CQVRDSClcbjU3Nzc6XHRcdFx0QlBGX0RPX0JBVENIKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9iYXRjaCwgbWFwLCBhdHRyLCB1YXR0cik7XG41Nzc4Olx0XHRlbHNlIGlmIChjbWQgPT0gQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSClcbjU3Nzk6XHRcdFx0QlBGX0RPX0JBVENIKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoLCBtYXAsIGF0dHIsIHVhdHRyKTtcbjU3ODA6XHRcdGVsc2UgaWYgKGNtZCA9PSBCUEZfTUFQX1VQREFURV9CQVRDSClcbjU3ODE6XHRcdFx0QlBGX0RPX0JBVENIKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX3VwZGF0ZV9iYXRjaCwgbWFwLCBmZF9maWxlKGYpLCBhdHRyLCB1YXR0cik7XG41NzgyOlx0XHRlbHNlXG41NzgzOlx0XHRcdEJQRl9ET19CQVRDSChtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kZWxldGVfYmF0Y2gsIG1hcCwgYXR0ciwgdWF0dHIpO1xuNTc4NDpcdGVycl9wdXQ6XG41Nzg1Olx0XHRpZiAoaGFzX3dyaXRlKSB7XG41Nzg2Olx0XHRcdG1heWJlX3dhaXRfYnBmX3Byb2dyYW1zKG1hcCk7XG41Nzg3Olx0XHRcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApO1xuNTc4ODpcdFx0fVxuNTc4OTpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1ODEKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogNTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJhdGNoIE1hcCBPcGVyYXRpb24gRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIG15IHRoaW5raW5nLiBXZSYjMzk7cmUgemVyb2luZyBpbiBvbiBiYXRjaCBvcGVyYXRpb25zIGZvciBCUEYgbWFwcywgd2hpY2ggaXMgYSBnb29kIHRhcmdldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFsbCBzb2xpZC4KCkZpcnN0LCB0aGUgc3ltYm9scyB0byB0YXJnZXQgYXJlIGNsZWFybHkgZGVmaW5lZDogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBicGZfbWFwX2RvX2JhdGNoYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIGluZGVlZCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIGZvciBhbGwgb2YgdGhlc2UgYmF0Y2ggb3BlcmF0aW9ucy4KCkkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbGlzdCBhcmUgZm91bmQgd2hlcmUgSSYjMzk7ZCBleHBlY3Q6IFRoZSBgaHRhYl8qYCBmdW5jdGlvbnMgYXJlIGluIGBoYXNodGFiLmNgIGFuZCBgZ2VuZXJpY18qYCBhbmQgYGJwZl8qYCBmdW5jdGlvbnMgYXJlIGluIGBzeXNjYWxsLmNgLiBUaGlzIGNvdmVycyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgb2YgaGFzaCB0YWJsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnRzLiBUaGlzIGlzIGEgc29saWQgY2hlY2sgdG8gZW5zdXJlIHRoYXQgd2UmIzM5O3JlIHRhcmdldGluZyB0aGUgY29ycmVjdCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBvdmVyYWxsIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBUaGUgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgY29ycmVjdCBzaW5jZSBiYXRjaCBtYXAgb3BlcmF0aW9ucyAqYXJlKiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwuIFRoZW4sIHRoZSBgRm9jdXNTeW1ib2xzYCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGluaXRpYWwgbGlzdCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgaW5jbHVkZXMgYEJQRl9TWVNDQUxMYCwgd2hpY2ggaXMgZXNzZW50aWFsLiBJJiMzOTttIGFsc28gc2F0aXNmaWVkIHRoYXQgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBhY2N1cmF0ZTsgYmF0Y2ggb3BlcmF0aW9ucyBwcm92aWRlIGVmZmljaWVudCBhbmQgcG90ZW50aWFsbHkgY29tcGxleCBkYXRhIG1hbmlwdWxhdGlvbi4gVGhlIGVudGlyZSBzZXR1cCBpcyByZWFkeSB0byBnbywgdGhlIGJhdGNoIGNhbGxzIHByb3ZpZGUgdGhlIGVudHJ5IHBvaW50cy4KCkZpbmFsbHksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgc2V0LXJlc3VsdHMgY2FsbCB3aWxsIGJlIHByb3Blcmx5IGZvcm1hdHRlZCBhbmQgYWNjdXJhdGVseSByZWZsZWN0cyB0aGlzIGFuYWx5c2lzLiBJIGRvbiYjMzk7dCB3YW50IHRvIGludHJvZHVjZSBhbnkgZXJyb3JzIGF0IHRoaXMgc3RhZ2UuIEl0IGlzLCBzbyB3ZSYjMzk7cmUgZ29vZCB0byBnbyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9kb19iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfZG9fYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGR1cmluZyBwb2ludGVyIGFyaXRobWV0aWMgaW4gQlBGIG1hcCBiYXRjaCBvcGVyYXRpb25zIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoIGluIGhhc2h0YWIuYyBhbmQgZ2VuZXJpY19tYXBfKl9iYXRjaCBpbiBzeXNjYWxsLmMpIGJ5IGNhc3RpbmcgY291bnRzL2luZGljZXMgdG8gc2l6ZV90LiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCAoQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplYCkuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1NzcyNWRkM2RlZmRkMjk3MzQxOTNkY2JiMTg5ODRlYjA4YzBiM2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDExOjQzOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi5iZDM3MDRlZDkzMzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTk3NywxMCAmIzQzOzE5NzcsMTAgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJYnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTsKLQlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cywKLQkgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fAotCSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcywKLQkgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkgewomIzQzOwlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLAomIzQzOwkgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8CiYjNDM7CSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLAomIzQzOwkgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gYWZ0ZXJfbG9vcDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0yMDM2LDcgJiM0MzsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJZm9yIChjcCA9IDA7IGNwICZsdDsgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHsKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtJmd0O2tleV9zaXplLAogCQkJCSAgIG1hcC0mZ3Q7a2V5X3NpemUpKQogCQkJYnJlYWs7CiAKQEAgLTIwOTgsOSAmIzQzOzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSwKIAogCWZvciAoY3AgPSAwOyBjcCAmbHQ7IG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7CiAJCWVyciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLAomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZSwKIAkJICAgIG1hcC0mZ3Q7a2V5X3NpemUpIHx8Ci0JCSAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiYjNDM7CQkgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiAJCQlicmVhazsKIAogCQllcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLApAQCAtMjE3OSwxMiAmIzQzOzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQlpZiAoZXJyKQogCQkJZ290byBmcmVlX2J1ZjsKIAotCQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLCBrZXksCiYjNDM7CQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemUsIGtleSwKIAkJCQkgbWFwLSZndDtrZXlfc2l6ZSkpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGZyZWVfYnVmOwogCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiYjNDM7CQlpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBmcmVlX2J1ZjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OQoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBkaWZmIHRob3JvdWdobHkuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB3aXRoaW4gdGhlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBmdW5jdGlvbi4gVGhlIGtleSBhc3BlY3QgaGVyZSBpcyB0aGUgZXhwbGljaXQgY2FzdGluZyBvZiBtdWx0aXBsaWNhdGlvbiByZXN1bHRzIGxpa2UgYHRvdGFsICoga2V5X3NpemVgIGFuZCBga2V5X3NpemUgKiBidWNrZXRfY250YCB0byBgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplYCBhbmQgYChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250YCwgcmVzcGVjdGl2ZWx5LiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IGludGVnZXIgb3ZlcmZsb3cgcmFkYXIuCgpUaGVuLCBtb3Zpbmcgb24gdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSBub3RpY2Ugc2ltaWxhciBjYXN0aW5nIGluIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBwYXJ0aWN1bGFybHkgd2hlcmUgYGNwICogbWFwLSZndDtrZXlfc2l6ZWAgaXMgY2FzdCB0byBgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemVgLiBJdCYjMzk7cyBhbGwgYWJvdXQgYXZvaWRpbmcgdGhvc2UgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGluIGNhbGN1bGF0aW9ucyBpbnZvbHZpbmcga2V5IHNpemVzLCBiYXRjaCBzaXplcywgYW5kIGNvdW50cy4KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIGhvdyB0aGV5IGludGVyYWN0LCBhbmQsIGNydWNpYWxseSwgaG93IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIG92ZXJhbGwgQlBGIGZyYW1ld29yay4gSSB0aGluayBJJiMzOTtsbCBmaXJlIHVwIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHNlc3Npb24gdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZXNlIGJhdGNoIG9wZXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB3aGV0aGVyIHRoZXNlIG92ZXJmbG93IGZpeGVzIHdlcmUgdHJ1bHkgbmVjZXNzYXJ5IGFuZCBpZiBhbnkgZnVydGhlciB2dWxuZXJhYmlsaXRpZXMgbWlnaHQgc3RpbGwgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5NjA6XHRcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcbjE5NjE6XHRcdFx0bCA9IG5vZGVfdG9fZnJlZTtcbjE5NjI6XHRcdFx0bm9kZV90b19mcmVlID0gbm9kZV90b19mcmVlLVx1MDAzZWJhdGNoX2ZsaW5rO1xuMTk2MzpcdFx0XHRpZiAoaXNfbHJ1X21hcClcbjE5NjQ6XHRcdFx0XHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XG4xOTY1Olx0XHRcdGVsc2VcbjE5NjY6XHRcdFx0XHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcbjE5Njc6XHRcdH1cbjE5Njg6XHRcbjE5Njk6XHRuZXh0X2JhdGNoOlxuMTk3MDpcdFx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbjE5NzE6XHRcdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuMTk3MjpcdFx0ICovXG4xOTczOlx0XHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbjE5NzQ6XHRcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk3NTpcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE5NzY6XHRcdH1cbjE5Nzc6XHRcbjE5Nzg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTk3OTpcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE5ODA6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbjE5ODE6XHRcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbjE5ODI6XHRcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuMTk4MzpcdFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuMTk4NDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMTk4NTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xOTg2Olx0XHR9XG4xOTg3Olx0XG4xOTg4Olx0XHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbjE5ODk6XHRcdGJhdGNoJiM0MzsmIzQzOztcbjE5OTA6XHRcdGlmIChiYXRjaCBcdTAwM2U9IGh0YWItXHUwMDNlbl9idWNrZXRzKSB7XG4xOTkxOlx0XHRcdHJldCA9IC1FTk9FTlQ7XG4xOTkyOlx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE5OTM6XHRcdH1cbjE5OTQ6XHRcdGdvdG8gYWdhaW47XG4xOTk1Olx0XG4xOTk2Olx0YWZ0ZXJfbG9vcDpcbjE5OTc6XHRcdGlmIChyZXQgPT0gLUVGQVVMVClcbjE5OTg6XHRcdFx0Z290byBvdXQ7XG4xOTk5Olx0XG4yMDAwOlx0XHQvKiBjb3B5ICMgb2YgZW50cmllcyBhbmQgbmV4dCBiYXRjaCAqL1xuMjAwMTpcdFx0dWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcbjIwMDI6XHRcdGlmIChjb3B5X3RvX3VzZXIodWJhdGNoLCBcdTAwMjZiYXRjaCwgc2l6ZW9mKGJhdGNoKSkgfHxcbjIwMDM6XHRcdCAgICBwdXRfdXNlcih0b3RhbCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjAwNDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjAwNTpcdFxuMjAwNjpcdG91dDpcbjIwMDc6XHRcdGt2ZnJlZShrZXlzKTtcbjIwMDg6XHRcdGt2ZnJlZSh2YWx1ZXMpO1xuMjAwOTpcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAyNTpcdFxuMjAyNjpcdFx0bWF4X2NvdW50ID0gYXR0ci1cdTAwM2ViYXRjaC5jb3VudDtcbjIwMjc6XHRcdGlmICghbWF4X2NvdW50KVxuMjAyODpcdFx0XHRyZXR1cm4gMDtcbjIwMjk6XHRcbjIwMzA6XHRcdGlmIChwdXRfdXNlcigwLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDMxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjAzMjpcdFxuMjAzMzpcdFx0a2V5ID0ga3ZtYWxsb2MobWFwLVx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDM0Olx0XHRpZiAoIWtleSlcbjIwMzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMDM2Olx0XG4yMDM3Olx0XHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7XG4yMDM4Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMDM5Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbjIwNDA6XHRcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4yMDQxOlx0XHRcdFx0YnJlYWs7XG4yMDQyOlx0XG4yMDQzOlx0XHRcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XG4yMDQ0Olx0XHRcdFx0ZXJyID0gYnBmX21hcF9vZmZsb2FkX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcbjIwNDU6XHRcdFx0XHRicmVhaztcbjIwNDY6XHRcdFx0fVxuMjA0NzpcdFxuMjA0ODpcdFx0XHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwNDk6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjA1MDpcdFx0XHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XG4yMDUxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjA1MjpcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMjA1MzpcdFx0XHRpZiAoZXJyKVxuMjA1NDpcdFx0XHRcdGJyZWFrO1xuMjA1NTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIwNTY6XHRcdH1cbjIwNTc6XHRcdGlmIChjb3B5X3RvX3VzZXIoXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQsIFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcbjIwNTg6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIwNTk6XHRcbjIwNjA6XHRcdGt2ZnJlZShrZXkpO1xuMjA2MTpcdFxuMjA2MjpcdFx0cmV0dXJuIGVycjtcbjIwNjM6XHR9XG4yMDY0Olx0XG4yMDY1Olx0aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4yMDY2Olx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjIwNjc6XHRcdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4yMDY4Olx0e1xuMjA2OTpcdFx0dm9pZCBfX3VzZXIgKnZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLnZhbHVlcyk7XG4yMDcwOlx0XHR2b2lkIF9fdXNlciAqa2V5cyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmtleXMpO1xuMjA3MTpcdFx0dTMyIHZhbHVlX3NpemUsIGNwLCBtYXhfY291bnQ7XG4yMDcyOlx0XHR2b2lkICprZXksICp2YWx1ZTtcbjIwNzM6XHRcdGludCBlcnIgPSAwO1xuMjA3NDpcdFxuMjA3NTpcdFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyxcbjIwNzY6XHRcdFx0XHRcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcbjIwNzc6XHRcdGlmIChlcnIpXG4yMDc4Olx0XHRcdHJldHVybiBlcnI7XG4yMDc5Olx0XG4yMDgwOlx0XHR2YWx1ZV9zaXplID0gYnBmX21hcF92YWx1ZV9zaXplKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcbjIwODE6XHRcbjIwODI6XHRcdG1heF9jb3VudCA9IGF0dHItXHUwMDNlYmF0Y2guY291bnQ7XG4yMDgzOlx0XHRpZiAoIW1heF9jb3VudClcbjIwODQ6XHRcdFx0cmV0dXJuIDA7XG4yMDg1Olx0XG4yMDg2Olx0XHRpZiAocHV0X3VzZXIoMCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjA4NzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIwODg6XHRcbjIwODk6XHRcdGtleSA9IGt2bWFsbG9jKG1hcC1cdTAwM2VrZXlfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuMjA5MDpcdFx0aWYgKCFrZXkpXG4yMDkxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjA5MjpcdFxuMjA5MzpcdFx0dmFsdWUgPSBrdm1hbGxvYyh2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDk0Olx0XHRpZiAoIXZhbHVlKSB7XG4yMDk1Olx0XHRcdGt2ZnJlZShrZXkpO1xuMjA5NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIwOTc6XHRcdH1cbjIwOTg6XHRcbjIwOTk6XHRcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHtcbjIxMDA6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxMDE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuMjEwMjpcdFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuMjEwMzpcdFx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4yMTA0Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGlzIHJlYWxseSB3b3JraW5nLiBJJiMzOTt2ZSBnb3QgYSBkZWNlbnQgZ3Jhc3Agb2YgdGhlIGJhc2ljIGNvbmNlcHRzLCBidXQgSSBrbm93IEkmIzM5O20gbWlzc2luZyBzb21lIG9mIHRoZSBudWFuY2VzLiBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBhbmQgcmVhbGx5IGRpc3NlY3QgaXQsIGxpbmUgYnkgbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBiYXRjaCBwcm9jZXNzaW5nIHBhcnQgYWN0dWFsbHkgZnVuY3Rpb25zLiBXaGF0JiMzOTtzIHRoZSBjbGV2ZXJuZXNzIGJlaGluZCBpdD8gV2hhdCBlZGdlIGNhc2VzIGlzIGl0IGRlc2lnbmVkIHRvIGhhbmRsZT8gVGhlIGRvY3VtZW50YXRpb24gZ2l2ZXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3LCBidXQgdGhlIHJlYWwgZGV0YWlscyBhcmUgaW4gdGhlIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gSSBzaG91bGQgYmUgYWJsZSB0byBpZGVudGlmeSBpdHMga2V5IGNvbXBvbmVudHMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcy4gV2hhdCYjMzk7cyB0aGUgY29udHJvbCBmbG93IGxvb2sgbGlrZSBmb3IgaXQ/IEFuZCB0aGVuIHRyeSBhbmQgZXZhbHVhdGUgd2hhdCB0aGUgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmcyB0aGF0IHdlcmUgbWFkZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE2MDpcdFx0aWYgKHViYXRjaCBcdTAwMjZcdTAwMjYgY29weV9mcm9tX3VzZXIoYnVmX3ByZXZrZXksIHViYXRjaCwgbWFwLVx1MDAzZWtleV9zaXplKSlcbjIxNjE6XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxNjI6XHRcdGtleSA9IGJ1ZjtcbjIxNjM6XHRcdHZhbHVlID0ga2V5ICYjNDM7IG1hcC1cdTAwM2VrZXlfc2l6ZTtcbjIxNjQ6XHRcdGlmICh1YmF0Y2gpXG4yMTY1Olx0XHRcdHByZXZfa2V5ID0gYnVmX3ByZXZrZXk7XG4yMTY2Olx0XG4yMTY3Olx0XHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDspIHtcbjIxNjg6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjE2OTpcdFx0XHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9nZXRfbmV4dF9rZXkobWFwLCBwcmV2X2tleSwga2V5KTtcbjIxNzA6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMTcxOlx0XHRcdGlmIChlcnIpXG4yMTcyOlx0XHRcdFx0YnJlYWs7XG4yMTczOlx0XHRcdGVyciA9IGJwZl9tYXBfY29weV92YWx1ZShtYXAsIGtleSwgdmFsdWUsXG4yMTc0Olx0XHRcdFx0XHRcdCBhdHRyLVx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xuMjE3NTpcdFxuMjE3NjpcdFx0XHRpZiAoZXJyID09IC1FTk9FTlQpXG4yMTc3Olx0XHRcdFx0Z290byBuZXh0X2tleTtcbjIxNzg6XHRcbjIxNzk6XHRcdFx0aWYgKGVycilcbjIxODA6XHRcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE4MTpcdFxuMjE4MjpcdFx0XHRpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSwga2V5LFxuMjE4MzpcdFx0XHRcdFx0IG1hcC1cdTAwM2VrZXlfc2l6ZSkpIHtcbjIxODQ6XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjE4NTpcdFx0XHRcdGdvdG8gZnJlZV9idWY7XG4yMTg2Olx0XHRcdH1cbjIxODc6XHRcdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgJiM0MzsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuMjE4ODpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMTg5Olx0XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxOTA6XHRcdFx0fVxuMjE5MTpcdFxuMjE5MjpcdFx0XHRjcCYjNDM7JiM0Mzs7XG4yMTkzOlx0bmV4dF9rZXk6XG4yMTk0Olx0XHRcdGlmICghcHJldl9rZXkpXG4yMTk1Olx0XHRcdFx0cHJldl9rZXkgPSBidWZfcHJldmtleTtcbjIxOTY6XHRcbjIxOTc6XHRcdFx0c3dhcChwcmV2X2tleSwga2V5KTtcbjIxOTg6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yMTk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMTIKCQkJCQkJCW91dHB1dDogMjExCgkJCQkJCQl0aG91Z2h0czogNjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgcG90ZW50aWFsIGZvciAzMi1iaXQgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgYW5kIHNpemVzIGZvciB1c2VyLXNwYWNlIG1lbW9yeSBhY2Nlc3Nlcywgc3BlY2lmaWNhbGx5IHdoZW4gbXVsdGlwbHlpbmcgYGNwYCBhbmQgYG1hcC0mZ3Q7a2V5X3NpemVgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGB1MzJgIHZhbHVlcywgYW5kIGEgbGFyZ2UgcHJvZHVjdCAoJmd0Oz0gNEdCKSBjb3VsZCB3cmFwIGFyb3VuZCwgbGVhZGluZyB0byBpbmNvcnJlY3QgcG9pbnRlciBhcml0aG1ldGljIGluIHRoZSBrZXJuZWwgd2hlbiBhY2Nlc3NpbmcgdXNlciBzcGFjZSB2aWEgYHZvaWQgX191c2VyICpgIHBvaW50ZXJzLiBUaGlzIGNvdWxkIGNhdXNlIGRhdGEgY29ycnVwdGlvbiBhbmQgcmVhZC93cml0ZSBpbnRvIHdyb25nIG1lbW9yeSBhZGRyZXNzZXMuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyB0aGlzIHdpdGggYChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZWAgY2FzdGluZywgd2hpY2ggcHJldmVudHMgdGhlIDMyLWJpdCBvdmVyZmxvdy4gTm93LCB0aGUgYHNpemVfdGAgbXVsdGlwbGljYXRpb24gc2hvdWxkIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIHJlcXVpcmVkIG9mZnNldCBhbmQgc2l6ZSwgZW5zdXJpbmcgZGF0YSBpcyBjb3BpZWQgdG8gdGhlIGludGVuZGVkIHVzZXIgc3BhY2UgbG9jYXRpb24uCgpOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgYW5hbHl6ZTogdGhlIHBhdGNoIGl0c2VsZiBhdm9pZHMgb3ZlcmZsb3cgaW4gcG9pbnRlciBjYWxjdWxhdGlvbnMsIGVuc3VyaW5nIGNvcnJlY3QgYnVmZmVyIHNpemVzIGZvciBjb3B5IG9wZXJhdGlvbnMuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBga2V5YCBhbmQgYHZhbHVlYCBkYXRhIGFyZSBmaWxsZWQgYnkgdGhlaXIgcmVzcGVjdGl2ZSBrZXJuZWwgbWFwIG9wZXJhdGlvbnMgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBpbiB0aGUgYmF0Y2ggbWFwIG9wZXJhdGlvbnMsIGBrZXlzYCBhbmQgYHZhbHVlc2Agd2VyZSBwb3B1bGF0ZWQgZnJvbSBoYXNoIG1hcCBlbGVtZW50cywgc28gdGhhdCYjMzk7cyBzYWZlLiBJdCYjMzk7cyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyBmaXggdG8gcHJvdGVjdCB1c2VyLXNwYWNlIGRhdGEgYWNjZXNzZXMuCgpTcGVjaWZpY2FsbHksIGl0IHByZXZlbnRzIGludGVnZXIgd3JhcHBpbmcgaW4gdXNlciBidWZmZXIgcG9pbnRlciBjYWxjdWxhdGlvbnMsIHdoaWNoIGlzIHZlcnkgZGlmZmVyZW50IGZyb20gS01TQU4mIzM5O3MgZm9jdXMuIEtNU0FOJiMzOTtzIHB1cnBvc2UgaXMgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvbGVha3MsIGVzcGVjaWFsbHkgd2l0aGluIGtlcm5lbCBtZW1vcnkuIEhlcmUsIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGlmIHRoZXJlIHdlcmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBrZXJuZWwgbWVtb3J5LiBCdXQgdGhpcyBpcyBwcmltYXJpbHkgYSB1c2VyIGFkZHJlc3MgY2FsY3VsYXRpb24gaXNzdWUuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgKmtlcm5lbCogbWVtb3J5OyBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSB3ZSBjb3JyZWN0bHkgY2FsY3VsYXRlIGFkZHJlc3NlcyBmb3IgKnVzZXIqIG1lbW9yeS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGZpZWxkczogTm8uCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlczogTm8uCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdpdGggbGF0ZXIgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBmaWVsZHM6IE5vLgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2VzcyBpbiBleGlzdGluZyBidWZmZXJzOiBOby4KCkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gVGhpcyBpcyBwdXJlbHkgYW4gaW50ZWdlciBvdmVyZmxvdyBmaXgsIG5vdCBhIEtNU0FOIGlzc3VlLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gd3JpdGUgYSBjbGVhciBhbmQgY29uY2lzZSBgS01TQU5SZWFzb25pbmdgIHNlY3Rpb24gdG8gY2xlYXJseSBjb250cmFzdCB0aGUgcm9sZXMgb2YgS0FTQU4gYW5kIEtNU0FOIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgMzItYml0IGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0IGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsIGFuZCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSBieSBjYXN0aW5nIG9wZXJhbmRzIHRvIGBzaXplX3RgIGJlZm9yZSBtdWx0aXBseWluZyAoZS5nLiwgYChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemVgKS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBtZW1vcnkgYnVmZmVycyBjb3BpZWQgdG8vZnJvbSB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgbWFuYWdlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHBvaW50ZXIgb2Zmc2V0cyB3b3VsZCBmYWxsIHVuZGVyIG1lbW9yeSBib3VuZHMgY2hlY2tpbmcgKEtBU0FOKSByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24gKEtNU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgMzItYml0IGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0IGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsIGFuZCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSBieSBjYXN0aW5nIG9wZXJhbmRzIHRvIGBzaXplX3RgIGJlZm9yZSBtdWx0aXBseWluZyAoZS5nLiwgYChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemVgKS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBtZW1vcnkgYnVmZmVycyBjb3BpZWQgdG8vZnJvbSB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgbWFuYWdlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHBvaW50ZXIgb2Zmc2V0cyB3b3VsZCBmYWxsIHVuZGVyIG1lbW9yeSBib3VuZHMgY2hlY2tpbmcgKEtBU0FOKSByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24gKEtNU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0MzoyNS41OTEzNzIxMTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzEyMzUwNzc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfZG9fYmF0Y2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZWApLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0MzoyNS41OTEzNzcyNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjM2NTA2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NTc3MjVkZDNkZWZkZDI5NzM0MTkzZGNiYjE4OTg0ZWIwOGMwYjNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTE6NDM6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC0xOTc3LDEwICsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbi1cXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcXG4tXFx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4tXFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXFxuLVxcdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XFxuK1xcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXFxuK1xcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4rXFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4rXFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xcbiBcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCBpbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcbiBcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcXG4gXFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4tXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4rXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbiBcXHRcXHRcXHRcXHQgICBtYXAtXFx1MDAzZWtleV9zaXplKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0yMDk4LDkgKzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4gXFxuIFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbiBcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbi1cXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsXFxuIFxcdFxcdCAgICBtYXAtXFx1MDAzZWtleV9zaXplKSB8fFxcbi1cXHRcXHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXFxuK1xcdFxcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXFxuQEAgLTIxNzksMTIgKzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbiBcXG4tXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLCBrZXksXFxuK1xcdFxcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLCBrZXksXFxuIFxcdFxcdFxcdFxcdCBtYXAtXFx1MDAzZWtleV9zaXplKSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDM6MjcuMDE1NjM0MzUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NzIyMzExNzk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfZG9fYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1NzcyNWRkM2RlZmRkMjk3MzQxOTNkY2JiMTg5ODRlYjA4YzBiM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDExOjQzOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYmQzNzA0ZWQ5MzMzZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTE5NzcsMTAgKzE5NzcsMTAgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuLVx0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyB0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuLVx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcbi1cdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuLVx0ICAgIHZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbitcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuK1x0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuK1x0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbitcdCAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbiBcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdFx0Z290byBhZnRlcl9sb29wO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCBpbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXG4gXHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHRcdFx0ICAgbWFwLVx1MDAzZWtleV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0yMDk4LDkgKzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbiBcbiBcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCsrKSB7XG4gXHRcdGVyciA9IC1FRkFVTFQ7XG4tXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbitcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4gXHRcdCAgICBtYXAtXHUwMDNla2V5X3NpemUpIHx8XG4tXHRcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSlcbitcdFx0ICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXG5AQCAtMjE3OSwxMiArMjE3OSwxMiBAQCBpbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbitcdFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSwga2V5LFxuIFx0XHRcdFx0IG1hcC1cdTAwM2VrZXlfc2l6ZSkpIHtcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXHRcdH1cbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyBjcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuK1x0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjI3LjAxNTYzNTkwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzA2OTQ4MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBCYXRjaCBNYXAgT3BlcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGJhdGNoIG9wZXJhdGlvbnMgd2l0aGluIEJQRiBtYXBzLCBzcGVjaWZpY2FsbHkgaGFzaCB0YWJsZXMsIGdpdmVuIHRoZSBgaGFzaHRhYi5jYCBpbmNsdXNpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGRpZmZzIOKAkyBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGNoYW5nZWQuXG5cblRoZSBkaWZmIGhpZ2hsaWdodHMgb3BlcmF0aW9ucyBsaWtlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEknbSBzZWVpbmcgbXVsdGlwbGljYXRpb25zIGFuZCBwb2ludGVyIGFyaXRobWV0aWMgcG90ZW50aWFsbHkgdXNpbmcgMzItYml0IHR5cGVzLCBsaWtlIGAoc2l6ZV90KXRvdGFsICoga2V5X3NpemVgIG9yIGBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZWAuIEJpbmdvLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGFyZ2V0aW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IsIG1vcmUgbGlrZWx5LCBpc3N1ZXMgd2l0aCBwb2ludGVyIGFyaXRobWV0aWMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2VyIGtleXMgb3IgYSBoaWdoIG51bWJlciBvZiBpdGVyYXRpb25zLlxuXG5UaGUgbGlrZWx5IHJvb3QgY2F1c2UgaXMgYSB0eXBlIG1pc21hdGNoIG9yIHBvdGVudGlhbCBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgb3Igc2l6ZXMgd2l0aGluIHRoZXNlIGJhdGNoIG9wZXJhdGlvbnMuIFVzaW5nIGEgMzItYml0IGludGVnZXIgZm9yIG11bHRpcGxpY2F0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtleSBzaXplcyBhbmQgYmF0Y2ggY291bnRzLCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy5cblxuSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyB3aXRoIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gcnVuIGEgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIGludm9sdmVkIGNvZGUgc2VjdGlvbnMgYW5kIHNlYXJjaCB1c2luZyBgZ3JlcHBlcmAgb3Igc2ltaWxhciB0b29saW5nIHRvIGVuc3VyZSB0aGUgaXNzdWUgaXMgaXNvbGF0ZWQgYW5kIHRoZSBwcm92aWRlZCBzb2x1dGlvbiBpcyBzb3VuZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbXVsdGlwbGljYXRpb24gYW5kIHBvaW50ZXIgYXJpdGhtZXRpYyBjYWxjdWxhdGlvbnMgYXJlIGJlaW5nIGRvbmUsIGFuZCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHR5cGVzIGJlaW5nIHVzZWQgYW5kIHdoZXJlIHRoZXNlIHZhbHVlcyBhcmUgY29taW5nIGZyb20uIFRoZSBnb2FsIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm9wb3NlZCBmaXggYWRlcXVhdGVseSBhZGRyZXNzZXMgdGhlIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hpbGUgbWFpbnRhaW5pbmcgcGVyZm9ybWFuY2UgaW4gYmF0Y2ggb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjQxLjMyMjU5MTYyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjkxMDY1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzQtXFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzU6XFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3Ni1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5OS1cXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkwMDpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAxLVxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE1MDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE0LVxcdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X29mX21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNTE1OlxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4Mi1cXHQubWFwX2RlbGV0ZV9lbGVtID0gdHJpZV9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NzgzOlxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODQtXFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDY1PWludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyMi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMTIzOmludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVxcdFxcdFxcdFxcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDM6NDEuODUxNzA0MDIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQwMjI1MDA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIEhhc2ggVGFibGUgSXNzdWVzKipcblxuQWxyaWdodCwgc28gd2UncmUgc2VlaW5nIHNvbWV0aGluZyBmdW5reSB3aXRoIEJQRi4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBsaWtlbHkgaW52b2x2ZW1lbnQgb2YgaGFzaCB0YWJsZXMsIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBJIG5lZWQgdG8gcmV2aWV3IGhvdyB0aGUgaGFzaCB0YWJsZXMgdGhlbXNlbHZlcyBhcmUgc3RydWN0dXJlZCwgaG93IGNvbGxpc2lvbnMgYXJlIGhhbmRsZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgLSBpbnNlcnRpb24sIGRlbGV0aW9uLCBsb29rdXAsIGFuZCBpdGVyYXRpb24g4oCTIGFyZSBpbXBsZW1lbnRlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gd2l0aGluIHRoZSB0YWJsZSdzIGludGVybmFscyB3b3VsZCBiZSBhIGhpZ2ggcHJpb3JpdHkgdG8gY2hlY2suXG5cblRoZW4sIHNpbmNlIHRoaXMgbGlrZWx5IGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UsIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgbmVlZHMgYSB0aG9yb3VnaCBnb2luZyBvdmVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGNhbGxzIGludGVyZmFjZSB3aXRoIHRoZSBoYXNodGFibGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIHBvaW50cyB3aGVyZSBkYXRhIGZsb3dzIGJldHdlZW4gdXNlciBzcGFjZSBhbmQga2VybmVsIHNwYWNlIOKAkyBhbnkgaW5jb25zaXN0ZW5jaWVzIG9yIHZ1bG5lcmFiaWxpdGllcyB0aGVyZSBjb3VsZCBleHBsYWluIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gSSBuZWVkIHRvIHNjcnV0aW5pemUgcGFyYW1ldGVyIHZhbGlkYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBzeXNjYWxscyBpbnRlcmFjdGluZyB3aXRoIHRoZSBCUEYgaGFzaCB0YWJsZS4gTGV04oCZcyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcywgYXMgdGhlc2UgdGhpbmdzIGFyZSBhbG1vc3QgYWx3YXlzIGludGVydHdpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDM6NDUuMjUzOTU2NzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk3MDpcXHRcXHQvKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxcbjE5NzE6XFx0XFx0ICogdW5sb2NraW5nIHRoZSByY3UuXFxuMTk3MjpcXHRcXHQgKi9cXG4xOTczOlxcdFxcdGlmICghYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoYmF0Y2ggKyAxIFxcdTAwM2MgaHRhYi1cXHUwMDNlbl9idWNrZXRzKSkge1xcbjE5NzQ6XFx0XFx0XFx0YmF0Y2grKztcXG4xOTc1OlxcdFxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbjE5NzY6XFx0XFx0fVxcbjE5Nzc6XFx0XFxuMTk3ODpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xOTc5OlxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMTk4MDpcXHRcXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxcbjE5ODE6XFx0XFx0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxcbjE5ODI6XFx0XFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4xOTgzOlxcdFxcdCAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcXG4xOTg0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMTk4NTpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMTk4NjpcXHRcXHR9XFxuMTk4NzpcXHRcXG4xOTg4OlxcdFxcdHRvdGFsICs9IGJ1Y2tldF9jbnQ7XFxuMTk4OTpcXHRcXHRiYXRjaCsrO1xcbjE5OTA6XFx0XFx0aWYgKGJhdGNoIFxcdTAwM2U9IGh0YWItXFx1MDAzZW5fYnVja2V0cykge1xcbjE5OTE6XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4xOTkyOlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xOTkzOlxcdFxcdH1cXG4xOTk0OlxcdFxcdGdvdG8gYWdhaW47XFxuMTk5NTpcXHRcXG4xOTk2OlxcdGFmdGVyX2xvb3A6XFxuMTk5NzpcXHRcXHRpZiAocmV0ID09IC1FRkFVTFQpXFxuMTk5ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTk5OlxcdFxcbjIwMDA6XFx0XFx0LyogY29weSAjIG9mIGVudHJpZXMgYW5kIG5leHQgYmF0Y2ggKi9cXG4yMDAxOlxcdFxcdHViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xcbjIwMDI6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1YmF0Y2gsIFxcdTAwMjZiYXRjaCwgc2l6ZW9mKGJhdGNoKSkgfHxcXG4yMDAzOlxcdFxcdCAgICBwdXRfdXNlcih0b3RhbCwgXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCkpXFxuMjAwNDpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIwMDU6XFx0XFxuMjAwNjpcXHRvdXQ6XFxuMjAwNzpcXHRcXHRrdmZyZWUoa2V5cyk7XFxuMjAwODpcXHRcXHRrdmZyZWUodmFsdWVzKTtcXG4yMDA5OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjQ1LjI1NDExMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDI0NjE0NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBUcmlja3kgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZnVuY3Rpb24gYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLi4uIHNvdW5kcyBsaWtlIGEgbW91dGhmdWwsIGFuZCBhIHBvdGVudGlhbGx5IGltcG9ydGFudCBvbmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGVyIGlzICpjcml0aWNhbCogaW4gZGVidWdnaW5nIHRoaXMgc29ydCBvZiB0aGluZy4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGlzIGluaXRpYXRpbmcgdGhpcyBsb29rdXAtYW5kLWRlbGV0ZSBvcGVyYXRpb24gb24gdGhlIGhhc2ggdGFibGUuIElzIHRoaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgZXh0ZXJuYWwgZXZlbnQsIG9yIGlzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW50ZXJuYWwgcHJvY2Vzcz8gVGhlIGNhbGxlciBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgXCJ3aHlcIiBhbmQsIHBvdGVudGlhbGx5LCB0aGUgcm9vdCBjYXVzZSBvZiBhbnkgaXNzdWVzIEkgZW5jb3VudGVyIGRvd24gdGhlIGxpbmUuIEl0J3MgdGltZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhvc2UgbGF5ZXJzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0Mzo1Mi42Nzg3MjczODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5MTk5Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzcxPXN0YXRpYyBpbnRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzcyOl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzczLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxMz1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxNjpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE3LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyMT1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMjQte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMjU6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzMD1odGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDMyLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDMzOlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzQtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzOD1odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0MS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0MjpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0Nz1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1MC17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA1MTpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDUyLVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDU2PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTkte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNjA6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYxLVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDY1PWh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDY3LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY4OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjktXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDczPWh0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA3Ni17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA3NzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzgtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjUzLjQ1NzkzMjU4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzMwMTI4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEJhdGNoIE9wZXJhdGlvbnMgaW4gQlBGIE1hcHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBiYXRjaCBvcGVyYXRpb25zIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5IGhhbmRsZSBtYXAgaW50ZXJhY3Rpb25zLiBNeSBpbW1lZGlhdGUgdGFyZ2V0IGlzIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBJJ20gemVyb2luZyBpbiBvbiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGVpciBsb2dpYy4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGFzcGVjdHMgb2YgYXRvbWljaXR5LCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBudWFuY2VzIG9mIGhvdyBkYXRhIGlzIGJhdGNoZWQsIGFuZCB3aGF0IHNwZWNpZmljIG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0Mzo1OC4yOTA5NDgwODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMzAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMzA6XFx0XFx0aWYgKHB1dF91c2VyKDAsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwMzE6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjAzMjpcXHRcXG4yMDMzOlxcdFxcdGtleSA9IGt2bWFsbG9jKG1hcC1cXHUwMDNla2V5X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMDM0OlxcdFxcdGlmICgha2V5KVxcbjIwMzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjAzNjpcXHRcXG4yMDM3OlxcdFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbjIwMzg6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMDM5OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4yMDQwOlxcdFxcdFxcdFxcdFxcdCAgIG1hcC1cXHUwMDNla2V5X3NpemUpKVxcbjIwNDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA0MjpcXHRcXG4yMDQzOlxcdFxcdFxcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XFxuMjA0NDpcXHRcXHRcXHRcXHRlcnIgPSBicGZfbWFwX29mZmxvYWRfZGVsZXRlX2VsZW0obWFwLCBrZXkpO1xcbjIwNDU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA0NjpcXHRcXHRcXHR9XFxuMjA0NzpcXHRcXG4yMDQ4OlxcdFxcdFxcdGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjIwNDk6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjIwNTA6XFx0XFx0XFx0ZXJyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XFxuMjA1MTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMDUyOlxcdFxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMjA1MzpcXHRcXHRcXHRpZiAoZXJyKVxcbjIwNTQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA1NTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yMDU2OlxcdFxcdH1cXG4yMDU3OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCwgXFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcXG4yMDU4OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjA1OTpcXHRcXG4yMDYwOlxcdFxcdGt2ZnJlZShrZXkpO1xcbjIwNjE6XFx0XFxuMjA2MjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIwNjM6XFx0fVxcbjIwNjQ6XFx0XFxuMjA2NTpcXHRpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4yMDY2OlxcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuMjA2NzpcXHRcXHRcXHRcXHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuMjA2ODpcXHR7XFxuMjA2OTpcXHRcXHR2b2lkIF9fdXNlciAqdmFsdWVzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLnZhbHVlcyk7XFxuMjA3MDpcXHRcXHR2b2lkIF9fdXNlciAqa2V5cyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5rZXlzKTtcXG4yMDcxOlxcdFxcdHUzMiB2YWx1ZV9zaXplLCBjcCwgbWF4X2NvdW50O1xcbjIwNzI6XFx0XFx0dm9pZCAqa2V5LCAqdmFsdWU7XFxuMjA3MzpcXHRcXHRpbnQgZXJyID0gMDtcXG4yMDc0OlxcdFxcbjIwNzU6XFx0XFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MsXFxuMjA3NjpcXHRcXHRcXHRcXHRcXHQgICAgIEJQRl9GX0xPQ0sgfCBCUEZfRl9DUFUgfCBCUEZfRl9BTExfQ1BVUyk7XFxuMjA3NzpcXHRcXHRpZiAoZXJyKVxcbjIwNzg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMDc5OlxcdFxcbjIwODA6XFx0XFx0dmFsdWVfc2l6ZSA9IGJwZl9tYXBfdmFsdWVfc2l6ZShtYXAsIGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIwODE6XFx0XFxuMjA4MjpcXHRcXHRtYXhfY291bnQgPSBhdHRyLVxcdTAwM2ViYXRjaC5jb3VudDtcXG4yMDgzOlxcdFxcdGlmICghbWF4X2NvdW50KVxcbjIwODQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjA4NTpcXHRcXG4yMDg2OlxcdFxcdGlmIChwdXRfdXNlcigwLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMDg3OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIwODg6XFx0XFxuMjA4OTpcXHRcXHRrZXkgPSBrdm1hbGxvYyhtYXAtXFx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMjA5MDpcXHRcXHRpZiAoIWtleSlcXG4yMDkxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIwOTI6XFx0XFxuMjA5MzpcXHRcXHR2YWx1ZSA9IGt2bWFsbG9jKHZhbHVlX3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMDk0OlxcdFxcdGlmICghdmFsdWUpIHtcXG4yMDk1OlxcdFxcdFxcdGt2ZnJlZShrZXkpO1xcbjIwOTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjA5NzpcXHRcXHR9XFxuMjA5ODpcXHRcXG4yMDk5OlxcdFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbjIxMDA6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTAxOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4yMTAyOlxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZWtleV9zaXplKSB8fFxcbjIxMDM6XFx0XFx0XFx0ICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXFxuMjEwNDpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTA1OlxcdFxcbjIxMDY6XFx0XFx0XFx0ZXJyID0gYnBmX21hcF91cGRhdGVfdmFsdWUobWFwLCBtYXBfZmlsZSwga2V5LCB2YWx1ZSxcXG4yMTA3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIxMDg6XFx0XFxuMjEwOTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxMTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjExMTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yMTEyOlxcdFxcdH1cXG4yMTEzOlxcdFxcbjIxMTQ6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50LCBcXHUwMDI2Y3AsIHNpemVvZihjcCkpKVxcbjIxMTU6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTE2OlxcdFxcbjIxMTc6XFx0XFx0a3ZmcmVlKHZhbHVlKTtcXG4yMTE4OlxcdFxcdGt2ZnJlZShrZXkpO1xcbjIxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjU4LjI5MTIwMDYwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzYyMjk3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgU3lzY2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzcGVjaWZpYyBCUEYgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCBhdCB0aGUga2VybmVsIGxldmVsLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMjEyMCB0aHJvdWdoIDIyMDAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBhcmd1bWVudCBwYXJzaW5nIGFuZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIHN5c2NhbGwgZW50cnkgcG9pbnQgcmVzaWRlcy4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBzZW5zaWJsZSBhbmQgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBpbiBhIGNsZWFyIHdheSwgYXMgdGhpcyBzZWN0aW9uIGxpa2VseSB0b3VjaGVzIHVwb24gQlBGIHByb2dyYW0gbG9hZGluZywgbWFwIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBoZWxwZXIgZnVuY3Rpb24gY2FsbHMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgYXJndW1lbnQgdmFsaWRhdGlvbiwgc2VjdXJpdHkgY2hlY2tzLCBhbmQgY2FsbHMgdG8gbG93ZXItbGV2ZWwgQlBGIGhlbHBlciBmdW5jdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgbG9ja2luZyBzdHJhdGVnaWVzLCBhbmQgaG93IHRoZSBzeXNjYWxsIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgVk0uIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCBsZXQgbWUgbWFwIGhvdyB0aGUgc3lzY2FsbCBpbnRlcmFjdHMgd2l0aCB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLiBJIGFudGljaXBhdGUgYSByZWFzb25hYmxlIG1peCBvZiBDIGNvZGUsIG1heWJlIHNvbWUgbWFjcm9zLCBhbmQgaG9wZWZ1bGx5IG5vdCB0b28gbWFueSBuZXN0ZWQgY29uZGl0aW9uYWxzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjAwLjY1MzUwMTAxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjIxMjE6XFx0fVxcbjIxMjI6XFx0XFxuMjEyMzpcXHRpbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuMjEyNDpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuMjEyNTpcXHRcXHRcXHRcXHRcXHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4yMTI2OlxcdHtcXG4yMTI3OlxcdFxcdHZvaWQgX191c2VyICp1b2JhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XFxuMjEyODpcXHRcXHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmluX2JhdGNoKTtcXG4yMTI5OlxcdFxcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gudmFsdWVzKTtcXG4yMTMwOlxcdFxcdHZvaWQgX191c2VyICprZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmtleXMpO1xcbjIxMzE6XFx0XFx0dm9pZCAqYnVmLCAqYnVmX3ByZXZrZXksICpwcmV2X2tleSwgKmtleSwgKnZhbHVlO1xcbjIxMzI6XFx0XFx0dTMyIHZhbHVlX3NpemUsIGNwLCBtYXhfY291bnQ7XFxuMjEzMzpcXHRcXHRpbnQgZXJyO1xcbjIxMzQ6XFx0XFxuMjEzNTpcXHRcXHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncywgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSk7XFxuMjEzNjpcXHRcXHRpZiAoZXJyKVxcbjIxMzc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTM4OlxcdFxcbjIxMzk6XFx0XFx0dmFsdWVfc2l6ZSA9IGJwZl9tYXBfdmFsdWVfc2l6ZShtYXAsIGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIxNDA6XFx0XFxuMjE0MTpcXHRcXHRtYXhfY291bnQgPSBhdHRyLVxcdTAwM2ViYXRjaC5jb3VudDtcXG4yMTQyOlxcdFxcdGlmICghbWF4X2NvdW50KVxcbjIxNDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjE0NDpcXHRcXG4yMTQ1OlxcdFxcdGlmIChwdXRfdXNlcigwLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMTQ2OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIxNDc6XFx0XFxuMjE0ODpcXHRcXHRidWZfcHJldmtleSA9IGt2bWFsbG9jKG1hcC1cXHUwMDNla2V5X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMTQ5OlxcdFxcdGlmICghYnVmX3ByZXZrZXkpXFxuMjE1MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMTUxOlxcdFxcbjIxNTI6XFx0XFx0YnVmID0ga3ZtYWxsb2MobWFwLVxcdTAwM2VrZXlfc2l6ZSArIHZhbHVlX3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMTUzOlxcdFxcdGlmICghYnVmKSB7XFxuMjE1NDpcXHRcXHRcXHRrdmZyZWUoYnVmX3ByZXZrZXkpO1xcbjIxNTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjE1NjpcXHRcXHR9XFxuMjE1NzpcXHRcXG4yMTU4OlxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjE1OTpcXHRcXHRwcmV2X2tleSA9IE5VTEw7XFxuMjE2MDpcXHRcXHRpZiAodWJhdGNoIFxcdTAwMjZcXHUwMDI2IGNvcHlfZnJvbV91c2VyKGJ1Zl9wcmV2a2V5LCB1YmF0Y2gsIG1hcC1cXHUwMDNla2V5X3NpemUpKVxcbjIxNjE6XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTYyOlxcdFxcdGtleSA9IGJ1ZjtcXG4yMTYzOlxcdFxcdHZhbHVlID0ga2V5ICsgbWFwLVxcdTAwM2VrZXlfc2l6ZTtcXG4yMTY0OlxcdFxcdGlmICh1YmF0Y2gpXFxuMjE2NTpcXHRcXHRcXHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xcbjIxNjY6XFx0XFxuMjE2NzpcXHRcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7KSB7XFxuMjE2ODpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE2OTpcXHRcXHRcXHRlcnIgPSBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2dldF9uZXh0X2tleShtYXAsIHByZXZfa2V5LCBrZXkpO1xcbjIxNzA6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjE3MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxNzI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjE3MzpcXHRcXHRcXHRlcnIgPSBicGZfbWFwX2NvcHlfdmFsdWUobWFwLCBrZXksIHZhbHVlLFxcbjIxNzQ6XFx0XFx0XFx0XFx0XFx0XFx0IGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIxNzU6XFx0XFxuMjE3NjpcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9FTlQpXFxuMjE3NzpcXHRcXHRcXHRcXHRnb3RvIG5leHRfa2V5O1xcbjIxNzg6XFx0XFxuMjE3OTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxODA6XFx0XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTgxOlxcdFxcbjIxODI6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsIGtleSxcXG4yMTgzOlxcdFxcdFxcdFxcdFxcdCBtYXAtXFx1MDAzZWtleV9zaXplKSkge1xcbjIxODQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTg1OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjE4NjpcXHRcXHRcXHR9XFxuMjE4NzpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcXG4yMTg4OlxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjE4OTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbjIxOTA6XFx0XFx0XFx0fVxcbjIxOTE6XFx0XFxuMjE5MjpcXHRcXHRcXHRjcCsrO1xcbjIxOTM6XFx0bmV4dF9rZXk6XFxuMjE5NDpcXHRcXHRcXHRpZiAoIXByZXZfa2V5KVxcbjIxOTU6XFx0XFx0XFx0XFx0cHJldl9rZXkgPSBidWZfcHJldmtleTtcXG4yMTk2OlxcdFxcbjIxOTc6XFx0XFx0XFx0c3dhcChwcmV2X2tleSwga2V5KTtcXG4yMTk4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjIxOTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDowMC42NTM3MjcxNzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzNzQ0MTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoaXMgcGF0Y2ggcHJlc2VudHMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBUaGUgZnVuY3Rpb25zIG1vZGlmaWVkIOKAkyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCDigJMgYXJlIGFsbCBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIEJQRiBzeXNjYWxsczogYEJQRl9NQVBfTE9PS1VQX0JBVENIYCwgYEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0hgLCBgQlBGX01BUF9VUERBVEVfQkFUQ0hgLCBhbmQgYEJQRl9NQVBfREVMRVRFX0JBVENIYC4gQ29uc2lkZXJpbmcgdGhhdCBCUEYgaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGEgY3JpdGljYWwgc3Vic3lzdGVtLCB0aGlzIGlzIGEgY2xlYXIgXCJ5ZXNcIiBpbiB0ZXJtcyBvZiBmdXp6aW5nIHZhbHVlLiBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC5cblxuTm93IGZvciB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgdG8gZW5zdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiBjb21waWxlZCBpbiBhbmQgYWNjZXNzaWJsZS4gSXQgbG9va3MgbGlrZSBCUEYgc3lzY2FsbHMgcmVxdWlyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCAoYW5kIGBDT05GSUdfQlBGYCkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBib3RoIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBhcmUgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MDQuMDkxMTcxMzE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyOTExMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaHRhYlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDowNC4yMTQ0NjUwNjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIwODA0MzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGwgc3VwcG9ydC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZC4gTGV0J3Mgc3RhcnQgdGhlcmUuIFRvIGNvbmZpcm0gaXRzIGV4YWN0IG5hbWUgYW5kIGxvY2F0aW9uLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgdHdvIG9idmlvdXMgcGxhY2VzIHRvIGNoZWNrIGZvciBgQlBGX1NZU0NBTExgIChvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxsIHNldHVwKSBhcmUgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgYW5kIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJ2xsIG5hdmlnYXRlIHRvIHRob3NlIGZpbGVzIHRvIHZlcmlmeSB0aGUgZXhhY3Qgb3B0aW9uIG5hbWUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTMxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MDcuNDIyNTEwNjM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYwNzYwMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjA4Ljk4MzI3NTEzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTg3MDI0MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBCUEYgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIEJQRiBmZWF0dXJlIGVuYWJsZW1lbnQgZmxhZywgb3IgbWF5YmUgSSdtIHRyeWluZyB0byByZWNhbGwgYSByZWxhdGVkIG9wdGlvbiB0aGF0IEkgd2FudCB0byBkb3VibGUtY2hlY2suIENvdWxkIGJlIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aWVkIHRvIGEgc3BlY2lmaWMgQlBGIGhlbHBlciB2ZXJzaW9uLiBJIHN1c3BlY3QgbGluZSAyNyB3aWxsIGxpa2VseSBsZWFkIG1lIHRvIHRoZSBtYWluIGVudHJ5IHBvaW50IG9yIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJIGFtIGhvcGluZyB0byBnZXQgdG8gdGhlIHJvb3QgY2F1c2Ugb2YgYW4gaXNzdWUgSSdtIHdvcmtpbmcgdGhyb3VnaC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlIGJhc2UgY29uZmlndXJhdGlvbiB0aGF0IGFsbCBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gaXMgcmVsaWFudCBvbi4gVGltZSB0byBzZWUgd2hhdCdzIHRoZXJlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoxMC45NzAzMDEzMjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjEwLjk3MDM2MTc1NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzU4NzYwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgRnVuY3Rpb24gQ2FsbHMgZm9yIFN5bWJvbCBFeHRyYWN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVkOiBgQlBGX1NZU0NBTExgIOKAkyBubyBDT05GSUdfIHByZWZpeCwgZ290IGl0LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZnVuY3Rpb24gYW5hbHlzaXMuIEZvY3VzaW5nIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSdtIHN0YXJ0aW5nIHdpdGggYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBub24tc3RhdGljIGNhbGxlcnMgYmVjYXVzZSBvZiB0aGUgaW1wYWN0IG9uIHN5bWJvbCBleHRyYWN0aW9uLiBMb29raW5nIGF0IHRoZSBjYWxsIHNpdGVzLCBJIHNlZSB0aGF0IHRoaXMgc3RhdGljIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhIHZhcmlldHkgb2YgZnVuY3Rpb25zLCBpbmNsdWRpbmcgdGhlIGxvb2t1cC9kZWxldGUgYmF0Y2ggZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHNldmVyYWwgaHRhYiBhbmQgbHJ1IHZhcmlhbnRzLlxuXG5Nb3ZpbmcgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSBzcG90IHRoZSBgZ2VuZXJpY19tYXBfKl9iYXRjaGAgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RhdGljIG5hdHVyZSBvZiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgd2lsbCBwcmV2ZW50IGl0cyBpbmNsdXNpb24gaW4gdGhlIHN5bWJvbCB0YWJsZXMgU3l6a2FsbGVyIGlzIHB1bGxpbmcgZnJvbSAodm1saW51eC9rYWxsc3ltcykuIFNpbmNlIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYSAuYyBmaWxlLCBpbmxpbmluZyBpcyBhIHBvc3NpYmlsaXR5LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3RhdGljIGZ1bmN0aW9ucyBiZSByZWxpYWJseSB1c2VkIGluIEZvY3VzU3ltYm9scyBpZiBub3QgaW5saW5lZD9cblxuVGhlIHN0YW5kYXJkIGFwcHJvYWNoIHRvIGhhbmRsZSB0aGlzIGlzIHRvIGluY2x1ZGUgKmJvdGgqIHRoZSBzdGF0aWMgZnVuY3Rpb24gKmFuZCogdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCwgc3VjaCBhcyBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gZXhhbWluZSBgYnBmX21hcF9kb19iYXRjaGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBiYXRjaCBvcGVyYXRpb25zIGFyZSBhY3R1YWxseSBkaXNwYXRjaGVkLiBUaGlzIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHN5c2NhbGwgZnVuY3Rpb25zIGFuZCB0aGUgaGFzaHRhYiBmdW5jdGlvbnMsIHNvbGlkaWZ5aW5nIHRoZSBuZWVkIHRvIGVuc3VyZSAqYWxsKiB0aGVzZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBTeXprYWxsZXIgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjE2LjcyOTEyNDQ2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MDE2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2xvb2t1cF9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJyYXltYXAuYz04NTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc0LVxcdC5tYXBfY2hlY2tfYnRmID0gYXJyYXlfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODc1OlxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzYtXFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTktXFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo5MDA6XFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwMS1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cXHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNTpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNi1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2LSNkZWZpbmUgQkFUQ0hfT1BTKF9uYW1lKVxcdFxcdFxcdFxcXFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzpcXHQubWFwX2xvb2t1cF9iYXRjaCA9XFx0XFx0XFx0XFxcXFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4OlxcdF9uYW1lIyNfbWFwX2xvb2t1cF9iYXRjaCxcXHRcXHRcXFxcXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjktXFx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCA9XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxMj1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxMzpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTQtXFx0XFx0XFx0ICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyOT1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAzMDpodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzMS1cXHRcXHQgICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0Nj1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0NzpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDgtXFx0XFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2ND1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2NTpodGFiX2xydV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjYtXFx0XFx0XFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0Mz1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzc4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNzk6c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzODAtXFx0XFx0XFx0XFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4Mi1cXHQubWFwX2RlbGV0ZV9lbGVtID0gdHJpZV9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NzgzOlxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODQtXFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDY1PWludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyMi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMTIzOmludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVxcdFxcdFxcdFxcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3NDc9c3RhdGljIGludCBicGZfbWFwX2RvX2JhdGNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTc3Ni1cXHRpZiAoY21kID09IEJQRl9NQVBfTE9PS1VQX0JBVENIKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU3Nzc6XFx0XFx0QlBGX0RPX0JBVENIKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbG9va3VwX2JhdGNoLCBtYXAsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Nzc4LVxcdGVsc2UgaWYgKGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoxNi43ODY3MjgzMjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNTMwOTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQmF0Y2ggTWFwIE9wZXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGJwZl9tYXBfZG9fYmF0Y2hgIGZ1bmN0aW9uLiBJdCdzIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEkga25vdyB0aGlzIGlzIHRoZSBjb3JlIG9mIGJhdGNoIHByb2Nlc3NpbmcgaW4gQlBGLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEJQRiBtYXBzIHdoZW4gbXVsdGlwbGUgb3BlcmF0aW9ucyBhcmUgZ3JvdXBlZCB0b2dldGhlci4gSeKAmW0gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgbG9ja2luZywgZXJyb3IgY2hlY2tpbmcsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBiYXRjaCBjb250ZXh0LCBhbmQgdGhlbiB0aWUgdGhhdCB0byBob3cgdGhlIHVzZXItc3BhY2Ugc2lkZSBzZW5kcyB0aGUgaW5mb3JtYXRpb24gdG8gdGhpcyBmdW5jdGlvbi4gUmlnaHQsIGxldOKAmXMgZ28gY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IGhvdyBpdOKAmXMgaW1wbGVtZW50ZWQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkncmUgaGFuZGxpbmcgYXRvbWljaXR5IGFuZCBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIG1hcCBvcGVyYXRpb25zLCBhbmQgaWYgdGhleSd2ZSBpbXBsZW1lbnRlZCBhbnkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIGJhdGNoaW5nIHRvIHJlZHVjZSBvdmVyaGVhZC4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGhhcyBhbnkgb2J2aW91cyBwaXRmYWxscyBJJ2QgbmVlZCB0byBjb25zaWRlciBpZiBJJ20gZGVzaWduaW5nIGEgbmV3IGJhdGNoIG1hcCBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MTkuNjIyMDQwNzczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Mjg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzQ1OlxcdFxcdH0gd2hpbGUgKDApXFxuNTc0NjpcXHRcXG41NzQ3OlxcdHN0YXRpYyBpbnQgYnBmX21hcF9kb19iYXRjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG41NzQ4OlxcdFxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxcbjU3NDk6XFx0XFx0XFx0XFx0ICAgIGludCBjbWQpXFxuNTc1MDpcXHR7XFxuNTc1MTpcXHRcXHRib29sIGhhc19yZWFkICA9IGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9CQVRDSCB8fFxcbjU3NTI6XFx0XFx0XFx0XFx0IGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIO1xcbjU3NTM6XFx0XFx0Ym9vbCBoYXNfd3JpdGUgPSBjbWQgIT0gQlBGX01BUF9MT09LVVBfQkFUQ0g7XFxuNTc1NDpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbjU3NTU6XFx0XFx0aW50IGVycjtcXG41NzU2OlxcdFxcbjU3NTc6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX01BUF9CQVRDSCkpXFxuNTc1ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41NzU5OlxcdFxcbjU3NjA6XFx0XFx0Q0xBU1MoZmQsIGYpKGF0dHItXFx1MDAzZWJhdGNoLm1hcF9mZCk7XFxuNTc2MTpcXHRcXG41NzYyOlxcdFxcdG1hcCA9IF9fYnBmX21hcF9nZXQoZik7XFxuNTc2MzpcXHRcXHRpZiAoSVNfRVJSKG1hcCkpXFxuNTc2NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtYXApO1xcbjU3NjU6XFx0XFx0aWYgKGhhc193cml0ZSlcXG41NzY2OlxcdFxcdFxcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2luYyhtYXApO1xcbjU3Njc6XFx0XFx0aWYgKGhhc19yZWFkIFxcdTAwMjZcXHUwMDI2ICEobWFwX2dldF9zeXNfcGVybXMobWFwLCBmKSBcXHUwMDI2IEZNT0RFX0NBTl9SRUFEKSkge1xcbjU3Njg6XFx0XFx0XFx0ZXJyID0gLUVQRVJNO1xcbjU3Njk6XFx0XFx0XFx0Z290byBlcnJfcHV0O1xcbjU3NzA6XFx0XFx0fVxcbjU3NzE6XFx0XFx0aWYgKGhhc193cml0ZSBcXHUwMDI2XFx1MDAyNiAhKG1hcF9nZXRfc3lzX3Blcm1zKG1hcCwgZikgXFx1MDAyNiBGTU9ERV9DQU5fV1JJVEUpKSB7XFxuNTc3MjpcXHRcXHRcXHRlcnIgPSAtRVBFUk07XFxuNTc3MzpcXHRcXHRcXHRnb3RvIGVycl9wdXQ7XFxuNTc3NDpcXHRcXHR9XFxuNTc3NTpcXHRcXG41Nzc2OlxcdFxcdGlmIChjbWQgPT0gQlBGX01BUF9MT09LVVBfQkFUQ0gpXFxuNTc3NzpcXHRcXHRcXHRCUEZfRE9fQkFUQ0gobWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfYmF0Y2gsIG1hcCwgYXR0ciwgdWF0dHIpO1xcbjU3Nzg6XFx0XFx0ZWxzZSBpZiAoY21kID09IEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0gpXFxuNTc3OTpcXHRcXHRcXHRCUEZfRE9fQkFUQ0gobWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCwgbWFwLCBhdHRyLCB1YXR0cik7XFxuNTc4MDpcXHRcXHRlbHNlIGlmIChjbWQgPT0gQlBGX01BUF9VUERBVEVfQkFUQ0gpXFxuNTc4MTpcXHRcXHRcXHRCUEZfRE9fQkFUQ0gobWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF91cGRhdGVfYmF0Y2gsIG1hcCwgZmRfZmlsZShmKSwgYXR0ciwgdWF0dHIpO1xcbjU3ODI6XFx0XFx0ZWxzZVxcbjU3ODM6XFx0XFx0XFx0QlBGX0RPX0JBVENIKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZGVsZXRlX2JhdGNoLCBtYXAsIGF0dHIsIHVhdHRyKTtcXG41Nzg0OlxcdGVycl9wdXQ6XFxuNTc4NTpcXHRcXHRpZiAoaGFzX3dyaXRlKSB7XFxuNTc4NjpcXHRcXHRcXHRtYXliZV93YWl0X2JwZl9wcm9ncmFtcyhtYXApO1xcbjU3ODc6XFx0XFx0XFx0YnBmX21hcF93cml0ZV9hY3RpdmVfZGVjKG1hcCk7XFxuNTc4ODpcXHRcXHR9XFxuNTc4OTpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoxOS42MjIyOTUxNjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU0MDIxNDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCYXRjaCBNYXAgT3BlcmF0aW9uIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgbXkgdGhpbmtpbmcuIFdlJ3JlIHplcm9pbmcgaW4gb24gYmF0Y2ggb3BlcmF0aW9ucyBmb3IgQlBGIG1hcHMsIHdoaWNoIGlzIGEgZ29vZCB0YXJnZXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbGwgc29saWQuXG5cbkZpcnN0LCB0aGUgc3ltYm9scyB0byB0YXJnZXQgYXJlIGNsZWFybHkgZGVmaW5lZDogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBicGZfbWFwX2RvX2JhdGNoYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIGluZGVlZCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIGZvciBhbGwgb2YgdGhlc2UgYmF0Y2ggb3BlcmF0aW9ucy5cblxuSSd2ZSB2ZXJpZmllZCB0aGF0IHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxpc3QgYXJlIGZvdW5kIHdoZXJlIEknZCBleHBlY3Q6IFRoZSBgaHRhYl8qYCBmdW5jdGlvbnMgYXJlIGluIGBoYXNodGFiLmNgIGFuZCBgZ2VuZXJpY18qYCBhbmQgYGJwZl8qYCBmdW5jdGlvbnMgYXJlIGluIGBzeXNjYWxsLmNgLiBUaGlzIGNvdmVycyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgb2YgaGFzaCB0YWJsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnRzLiBUaGlzIGlzIGEgc29saWQgY2hlY2sgdG8gZW5zdXJlIHRoYXQgd2UncmUgdGFyZ2V0aW5nIHRoZSBjb3JyZWN0IGZ1bmN0aW9ucy5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBvdmVyYWxsIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBUaGUgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgY29ycmVjdCBzaW5jZSBiYXRjaCBtYXAgb3BlcmF0aW9ucyAqYXJlKiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwuIFRoZW4sIHRoZSBgRm9jdXNTeW1ib2xzYCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGluaXRpYWwgbGlzdCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgaW5jbHVkZXMgYEJQRl9TWVNDQUxMYCwgd2hpY2ggaXMgZXNzZW50aWFsLiBJJ20gYWxzbyBzYXRpc2ZpZWQgdGhhdCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIGFjY3VyYXRlOyBiYXRjaCBvcGVyYXRpb25zIHByb3ZpZGUgZWZmaWNpZW50IGFuZCBwb3RlbnRpYWxseSBjb21wbGV4IGRhdGEgbWFuaXB1bGF0aW9uLiBUaGUgZW50aXJlIHNldHVwIGlzIHJlYWR5IHRvIGdvLCB0aGUgYmF0Y2ggY2FsbHMgcHJvdmlkZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHNldC1yZXN1bHRzIGNhbGwgd2lsbCBiZSBwcm9wZXJseSBmb3JtYXR0ZWQgYW5kIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhpcyBhbmFseXNpcy4gSSBkb24ndCB3YW50IHRvIGludHJvZHVjZSBhbnkgZXJyb3JzIGF0IHRoaXMgc3RhZ2UuIEl0IGlzLCBzbyB3ZSdyZSBnb29kIHRvIGdvIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU4MSwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoyNC4xNjI1MTI0NTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIzNjg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX2RvX2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGR1cmluZyBwb2ludGVyIGFyaXRobWV0aWMgaW4gQlBGIG1hcCBiYXRjaCBvcGVyYXRpb25zIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoIGluIGhhc2h0YWIuYyBhbmQgZ2VuZXJpY19tYXBfKl9iYXRjaCBpbiBzeXNjYWxsLmMpIGJ5IGNhc3RpbmcgY291bnRzL2luZGljZXMgdG8gc2l6ZV90LiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCAoQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfZG9fYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoyNC4yMzg3NTYwODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDc2MTE0ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MjQuMjM5Mjg1NDg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg0NzU1ODE4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZWApLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTc3MjVkZDNkZWZkZDI5NzM0MTkzZGNiYjE4OTg0ZWIwOGMwYjNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMTo0MzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xOTc3LDEwICsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbi1cdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbi1cdCAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XG4tXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbi1cdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4rXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyArIChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbitcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbitcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4rXHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi43MzEzODhhZTAwYWQxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMjAzNiw3ICsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcbiBcdFx0ZXJyID0gLUVGQVVMVDtcbi1cdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiBcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMjA5OCw5ICsyMDk4LDkgQEAgaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4gXG4gXHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuLVx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4rXHRcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLFxuQEAgLTIxNzksMTIgKzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4rXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbiBcdFx0XHRcdCBtYXAtXHUwMDNla2V5X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoyNC4yMzkyODc0NTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0MTgxNjg1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoIGZvciBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBjb2RlIGRpZmYgdGhvcm91Z2hseS4gSSdtIHNlZWluZyBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2Agd2l0aGluIHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgZnVuY3Rpb24uIFRoZSBrZXkgYXNwZWN0IGhlcmUgaXMgdGhlIGV4cGxpY2l0IGNhc3Rpbmcgb2YgbXVsdGlwbGljYXRpb24gcmVzdWx0cyBsaWtlIGB0b3RhbCAqIGtleV9zaXplYCBhbmQgYGtleV9zaXplICogYnVja2V0X2NudGAgdG8gYChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZWAgYW5kIGAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudGAsIHJlc3BlY3RpdmVseS4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBpbnRlZ2VyIG92ZXJmbG93IHJhZGFyLlxuXG5UaGVuLCBtb3Zpbmcgb24gdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSBub3RpY2Ugc2ltaWxhciBjYXN0aW5nIGluIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBwYXJ0aWN1bGFybHkgd2hlcmUgYGNwICogbWFwLVx1MDAzZWtleV9zaXplYCBpcyBjYXN0IHRvIGAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplYC4gSXQncyBhbGwgYWJvdXQgYXZvaWRpbmcgdGhvc2UgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGluIGNhbGN1bGF0aW9ucyBpbnZvbHZpbmcga2V5IHNpemVzLCBiYXRjaCBzaXplcywgYW5kIGNvdW50cy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCwgY3J1Y2lhbGx5LCBob3cgdGhlc2UgY2FsY3VsYXRpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBCUEYgZnJhbWV3b3JrLiBJIHRoaW5rIEknbGwgZmlyZSB1cCBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzZXNzaW9uIHRvIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGRldGVybWluZSB0aGUgcHVycG9zZSBvZiB0aGVzZSBiYXRjaCBvcGVyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gd2hldGhlciB0aGVzZSBvdmVyZmxvdyBmaXhlcyB3ZXJlIHRydWx5IG5lY2Vzc2FyeSBhbmQgaWYgYW55IGZ1cnRoZXIgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IHN0aWxsIGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ5LCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MzcuNjU3NDU5NDQzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTYwOlxcdFxcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcXG4xOTYxOlxcdFxcdFxcdGwgPSBub2RlX3RvX2ZyZWU7XFxuMTk2MjpcXHRcXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZWJhdGNoX2ZsaW5rO1xcbjE5NjM6XFx0XFx0XFx0aWYgKGlzX2xydV9tYXApXFxuMTk2NDpcXHRcXHRcXHRcXHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XFxuMTk2NTpcXHRcXHRcXHRlbHNlXFxuMTk2NjpcXHRcXHRcXHRcXHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcXG4xOTY3OlxcdFxcdH1cXG4xOTY4OlxcdFxcbjE5Njk6XFx0bmV4dF9iYXRjaDpcXG4xOTcwOlxcdFxcdC8qIElmIHdlIGFyZSBub3QgY29weWluZyBkYXRhLCB3ZSBjYW4gZ28gdG8gbmV4dCBidWNrZXQgYW5kIGF2b2lkXFxuMTk3MTpcXHRcXHQgKiB1bmxvY2tpbmcgdGhlIHJjdS5cXG4xOTcyOlxcdFxcdCAqL1xcbjE5NzM6XFx0XFx0aWYgKCFidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChiYXRjaCArIDEgXFx1MDAzYyBodGFiLVxcdTAwM2VuX2J1Y2tldHMpKSB7XFxuMTk3NDpcXHRcXHRcXHRiYXRjaCsrO1xcbjE5NzU6XFx0XFx0XFx0Z290byBhZ2Fpbl9ub2NvcHk7XFxuMTk3NjpcXHRcXHR9XFxuMTk3NzpcXHRcXG4xOTc4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE5Nzk6XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4xOTgwOlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXFxuMTk4MTpcXHRcXHQgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XFxuMTk4MjpcXHRcXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxcbjE5ODM6XFx0XFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xcbjE5ODQ6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4xOTg1OlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xOTg2OlxcdFxcdH1cXG4xOTg3OlxcdFxcbjE5ODg6XFx0XFx0dG90YWwgKz0gYnVja2V0X2NudDtcXG4xOTg5OlxcdFxcdGJhdGNoKys7XFxuMTk5MDpcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZT0gaHRhYi1cXHUwMDNlbl9idWNrZXRzKSB7XFxuMTk5MTpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbjE5OTI6XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjE5OTM6XFx0XFx0fVxcbjE5OTQ6XFx0XFx0Z290byBhZ2FpbjtcXG4xOTk1OlxcdFxcbjE5OTY6XFx0YWZ0ZXJfbG9vcDpcXG4xOTk3OlxcdFxcdGlmIChyZXQgPT0gLUVGQVVMVClcXG4xOTk4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE5OTk6XFx0XFxuMjAwMDpcXHRcXHQvKiBjb3B5ICMgb2YgZW50cmllcyBhbmQgbmV4dCBiYXRjaCAqL1xcbjIwMDE6XFx0XFx0dWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XFxuMjAwMjpcXHRcXHRpZiAoY29weV90b191c2VyKHViYXRjaCwgXFx1MDAyNmJhdGNoLCBzaXplb2YoYmF0Y2gpKSB8fFxcbjIwMDM6XFx0XFx0ICAgIHB1dF91c2VyKHRvdGFsLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMDA0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjAwNTpcXHRcXG4yMDA2OlxcdG91dDpcXG4yMDA3OlxcdFxcdGt2ZnJlZShrZXlzKTtcXG4yMDA4OlxcdFxcdGt2ZnJlZSh2YWx1ZXMpO1xcbjIwMDk6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MzcuNjU3Njc2MTAzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDI1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDI1OlxcdFxcbjIwMjY6XFx0XFx0bWF4X2NvdW50ID0gYXR0ci1cXHUwMDNlYmF0Y2guY291bnQ7XFxuMjAyNzpcXHRcXHRpZiAoIW1heF9jb3VudClcXG4yMDI4OlxcdFxcdFxcdHJldHVybiAwO1xcbjIwMjk6XFx0XFxuMjAzMDpcXHRcXHRpZiAocHV0X3VzZXIoMCwgXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCkpXFxuMjAzMTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yMDMyOlxcdFxcbjIwMzM6XFx0XFx0a2V5ID0ga3ZtYWxsb2MobWFwLVxcdTAwM2VrZXlfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbjIwMzQ6XFx0XFx0aWYgKCFrZXkpXFxuMjAzNTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDM2OlxcdFxcbjIwMzc6XFx0XFx0Zm9yIChjcCA9IDA7IGNwIFxcdTAwM2MgbWF4X2NvdW50OyBjcCsrKSB7XFxuMjAzODpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIwMzk6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbjIwNDA6XFx0XFx0XFx0XFx0XFx0ICAgbWFwLVxcdTAwM2VrZXlfc2l6ZSkpXFxuMjA0MTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDQyOlxcdFxcbjIwNDM6XFx0XFx0XFx0aWYgKGJwZl9tYXBfaXNfb2ZmbG9hZGVkKG1hcCkpIHtcXG4yMDQ0OlxcdFxcdFxcdFxcdGVyciA9IGJwZl9tYXBfb2ZmbG9hZF9kZWxldGVfZWxlbShtYXAsIGtleSk7XFxuMjA0NTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDQ2OlxcdFxcdFxcdH1cXG4yMDQ3OlxcdFxcbjIwNDg6XFx0XFx0XFx0YnBmX2Rpc2FibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMjA0OTpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjA1MDpcXHRcXHRcXHRlcnIgPSBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcXG4yMDUxOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIwNTI6XFx0XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4yMDUzOlxcdFxcdFxcdGlmIChlcnIpXFxuMjA1NDpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDU1OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjIwNTY6XFx0XFx0fVxcbjIwNTc6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50LCBcXHUwMDI2Y3AsIHNpemVvZihjcCkpKVxcbjIwNTg6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMDU5OlxcdFxcbjIwNjA6XFx0XFx0a3ZmcmVlKGtleSk7XFxuMjA2MTpcXHRcXG4yMDYyOlxcdFxcdHJldHVybiBlcnI7XFxuMjA2MzpcXHR9XFxuMjA2NDpcXHRcXG4yMDY1OlxcdGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbjIwNjY6XFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4yMDY3OlxcdFxcdFxcdFxcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4yMDY4OlxcdHtcXG4yMDY5OlxcdFxcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gudmFsdWVzKTtcXG4yMDcwOlxcdFxcdHZvaWQgX191c2VyICprZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmtleXMpO1xcbjIwNzE6XFx0XFx0dTMyIHZhbHVlX3NpemUsIGNwLCBtYXhfY291bnQ7XFxuMjA3MjpcXHRcXHR2b2lkICprZXksICp2YWx1ZTtcXG4yMDczOlxcdFxcdGludCBlcnIgPSAwO1xcbjIwNzQ6XFx0XFxuMjA3NTpcXHRcXHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyxcXG4yMDc2OlxcdFxcdFxcdFxcdFxcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcXG4yMDc3OlxcdFxcdGlmIChlcnIpXFxuMjA3ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIwNzk6XFx0XFxuMjA4MDpcXHRcXHR2YWx1ZV9zaXplID0gYnBmX21hcF92YWx1ZV9zaXplKG1hcCwgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XFxuMjA4MTpcXHRcXG4yMDgyOlxcdFxcdG1heF9jb3VudCA9IGF0dHItXFx1MDAzZWJhdGNoLmNvdW50O1xcbjIwODM6XFx0XFx0aWYgKCFtYXhfY291bnQpXFxuMjA4NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMDg1OlxcdFxcbjIwODY6XFx0XFx0aWYgKHB1dF91c2VyKDAsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwODc6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjA4ODpcXHRcXG4yMDg5OlxcdFxcdGtleSA9IGt2bWFsbG9jKG1hcC1cXHUwMDNla2V5X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMDkwOlxcdFxcdGlmICgha2V5KVxcbjIwOTE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjA5MjpcXHRcXG4yMDkzOlxcdFxcdHZhbHVlID0ga3ZtYWxsb2ModmFsdWVfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbjIwOTQ6XFx0XFx0aWYgKCF2YWx1ZSkge1xcbjIwOTU6XFx0XFx0XFx0a3ZmcmVlKGtleSk7XFxuMjA5NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDk3OlxcdFxcdH1cXG4yMDk4OlxcdFxcbjIwOTk6XFx0XFx0Zm9yIChjcCA9IDA7IGNwIFxcdTAwM2MgbWF4X2NvdW50OyBjcCsrKSB7XFxuMjEwMDpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIxMDE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbjIxMDI6XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNla2V5X3NpemUpIHx8XFxuMjEwMzpcXHRcXHRcXHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSlcXG4yMTA0OlxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDozNy42NTc4Njk5MzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0OTM2MzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAgaXMgcmVhbGx5IHdvcmtpbmcuIEkndmUgZ290IGEgZGVjZW50IGdyYXNwIG9mIHRoZSBiYXNpYyBjb25jZXB0cywgYnV0IEkga25vdyBJJ20gbWlzc2luZyBzb21lIG9mIHRoZSBudWFuY2VzLiBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBhbmQgcmVhbGx5IGRpc3NlY3QgaXQsIGxpbmUgYnkgbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBiYXRjaCBwcm9jZXNzaW5nIHBhcnQgYWN0dWFsbHkgZnVuY3Rpb25zLiBXaGF0J3MgdGhlIGNsZXZlcm5lc3MgYmVoaW5kIGl0PyBXaGF0IGVkZ2UgY2FzZXMgaXMgaXQgZGVzaWduZWQgdG8gaGFuZGxlPyBUaGUgZG9jdW1lbnRhdGlvbiBnaXZlcyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcsIGJ1dCB0aGUgcmVhbCBkZXRhaWxzIGFyZSBpbiB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJIHNob3VsZCBiZSBhYmxlIHRvIGlkZW50aWZ5IGl0cyBrZXkgY29tcG9uZW50cy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLiBXaGF0J3MgdGhlIGNvbnRyb2wgZmxvdyBsb29rIGxpa2UgZm9yIGl0PyBBbmQgdGhlbiB0cnkgYW5kIGV2YWx1YXRlIHdoYXQgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMgdGhhdCB3ZXJlIG1hZGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjQwLjkwNzIzNjIwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2MDpcXHRcXHRpZiAodWJhdGNoIFxcdTAwMjZcXHUwMDI2IGNvcHlfZnJvbV91c2VyKGJ1Zl9wcmV2a2V5LCB1YmF0Y2gsIG1hcC1cXHUwMDNla2V5X3NpemUpKVxcbjIxNjE6XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTYyOlxcdFxcdGtleSA9IGJ1ZjtcXG4yMTYzOlxcdFxcdHZhbHVlID0ga2V5ICsgbWFwLVxcdTAwM2VrZXlfc2l6ZTtcXG4yMTY0OlxcdFxcdGlmICh1YmF0Y2gpXFxuMjE2NTpcXHRcXHRcXHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xcbjIxNjY6XFx0XFxuMjE2NzpcXHRcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7KSB7XFxuMjE2ODpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE2OTpcXHRcXHRcXHRlcnIgPSBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2dldF9uZXh0X2tleShtYXAsIHByZXZfa2V5LCBrZXkpO1xcbjIxNzA6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjE3MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxNzI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjE3MzpcXHRcXHRcXHRlcnIgPSBicGZfbWFwX2NvcHlfdmFsdWUobWFwLCBrZXksIHZhbHVlLFxcbjIxNzQ6XFx0XFx0XFx0XFx0XFx0XFx0IGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIxNzU6XFx0XFxuMjE3NjpcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9FTlQpXFxuMjE3NzpcXHRcXHRcXHRcXHRnb3RvIG5leHRfa2V5O1xcbjIxNzg6XFx0XFxuMjE3OTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxODA6XFx0XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTgxOlxcdFxcbjIxODI6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsIGtleSxcXG4yMTgzOlxcdFxcdFxcdFxcdFxcdCBtYXAtXFx1MDAzZWtleV9zaXplKSkge1xcbjIxODQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTg1OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjE4NjpcXHRcXHRcXHR9XFxuMjE4NzpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcXG4yMTg4OlxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjE4OTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbjIxOTA6XFx0XFx0XFx0fVxcbjIxOTE6XFx0XFxuMjE5MjpcXHRcXHRcXHRjcCsrO1xcbjIxOTM6XFx0bmV4dF9rZXk6XFxuMjE5NDpcXHRcXHRcXHRpZiAoIXByZXZfa2V5KVxcbjIxOTU6XFx0XFx0XFx0XFx0cHJldl9rZXkgPSBidWZfcHJldmtleTtcXG4yMTk2OlxcdFxcbjIxOTc6XFx0XFx0XFx0c3dhcChwcmV2X2tleSwga2V5KTtcXG4yMTk4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjIxOTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDo0MC45MDc2MTU5MDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE4MDcyMzAwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgcG90ZW50aWFsIGZvciAzMi1iaXQgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgYW5kIHNpemVzIGZvciB1c2VyLXNwYWNlIG1lbW9yeSBhY2Nlc3Nlcywgc3BlY2lmaWNhbGx5IHdoZW4gbXVsdGlwbHlpbmcgYGNwYCBhbmQgYG1hcC1cdTAwM2VrZXlfc2l6ZWAuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgdTMyYCB2YWx1ZXMsIGFuZCBhIGxhcmdlIHByb2R1Y3QgKFx1MDAzZT0gNEdCKSBjb3VsZCB3cmFwIGFyb3VuZCwgbGVhZGluZyB0byBpbmNvcnJlY3QgcG9pbnRlciBhcml0aG1ldGljIGluIHRoZSBrZXJuZWwgd2hlbiBhY2Nlc3NpbmcgdXNlciBzcGFjZSB2aWEgYHZvaWQgX191c2VyICpgIHBvaW50ZXJzLiBUaGlzIGNvdWxkIGNhdXNlIGRhdGEgY29ycnVwdGlvbiBhbmQgcmVhZC93cml0ZSBpbnRvIHdyb25nIG1lbW9yeSBhZGRyZXNzZXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIHRoaXMgd2l0aCBgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplYCBjYXN0aW5nLCB3aGljaCBwcmV2ZW50cyB0aGUgMzItYml0IG92ZXJmbG93LiBOb3csIHRoZSBgc2l6ZV90YCBtdWx0aXBsaWNhdGlvbiBzaG91bGQgY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgb2Zmc2V0IGFuZCBzaXplLCBlbnN1cmluZyBkYXRhIGlzIGNvcGllZCB0byB0aGUgaW50ZW5kZWQgdXNlciBzcGFjZSBsb2NhdGlvbi5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0J3MgYW5hbHl6ZTogdGhlIHBhdGNoIGl0c2VsZiBhdm9pZHMgb3ZlcmZsb3cgaW4gcG9pbnRlciBjYWxjdWxhdGlvbnMsIGVuc3VyaW5nIGNvcnJlY3QgYnVmZmVyIHNpemVzIGZvciBjb3B5IG9wZXJhdGlvbnMuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGBrZXlgIGFuZCBgdmFsdWVgIGRhdGEgYXJlIGZpbGxlZCBieSB0aGVpciByZXNwZWN0aXZlIGtlcm5lbCBtYXAgb3BlcmF0aW9ucyBiZWZvcmUgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGluIHRoZSBiYXRjaCBtYXAgb3BlcmF0aW9ucywgYGtleXNgIGFuZCBgdmFsdWVzYCB3ZXJlIHBvcHVsYXRlZCBmcm9tIGhhc2ggbWFwIGVsZW1lbnRzLCBzbyB0aGF0J3Mgc2FmZS4gSXQncyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyBmaXggdG8gcHJvdGVjdCB1c2VyLXNwYWNlIGRhdGEgYWNjZXNzZXMuXG5cblNwZWNpZmljYWxseSwgaXQgcHJldmVudHMgaW50ZWdlciB3cmFwcGluZyBpbiB1c2VyIGJ1ZmZlciBwb2ludGVyIGNhbGN1bGF0aW9ucywgd2hpY2ggaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSBLTVNBTidzIGZvY3VzLiBLTVNBTidzIHB1cnBvc2UgaXMgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvbGVha3MsIGVzcGVjaWFsbHkgd2l0aGluIGtlcm5lbCBtZW1vcnkuIEhlcmUsIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGlmIHRoZXJlIHdlcmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBrZXJuZWwgbWVtb3J5LiBCdXQgdGhpcyBpcyBwcmltYXJpbHkgYSB1c2VyIGFkZHJlc3MgY2FsY3VsYXRpb24gaXNzdWUuIFRoaXMgcGF0Y2ggaXNuJ3QgYWJvdXQgdW5pbml0aWFsaXplZCAqa2VybmVsKiBtZW1vcnk7IGl0J3MgYWJvdXQgbWFraW5nIHN1cmUgd2UgY29ycmVjdGx5IGNhbGN1bGF0ZSBhZGRyZXNzZXMgZm9yICp1c2VyKiBtZW1vcnkuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgbXkgbWVudGFsIGNoZWNrbGlzdDpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHM6IE5vLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzOiBOby5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdpdGggbGF0ZXIgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBmaWVsZHM6IE5vLlxuNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3MgaW4gZXhpc3RpbmcgYnVmZmVyczogTm8uXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gVGhpcyBpcyBwdXJlbHkgYW4gaW50ZWdlciBvdmVyZmxvdyBmaXgsIG5vdCBhIEtNU0FOIGlzc3VlLiBJJ2xsIG1ha2Ugc3VyZSB0byB3cml0ZSBhIGNsZWFyIGFuZCBjb25jaXNlIGBLTVNBTlJlYXNvbmluZ2Agc2VjdGlvbiB0byBjbGVhcmx5IGNvbnRyYXN0IHRoZSByb2xlcyBvZiBLQVNBTiBhbmQgS01TQU4gaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjEyLCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjUyLjcxNDg0ODg4N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgMzItYml0IGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0IGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsIGFuZCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSBieSBjYXN0aW5nIG9wZXJhbmRzIHRvIGBzaXplX3RgIGJlZm9yZSBtdWx0aXBseWluZyAoZS5nLiwgYChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplYCkuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBtZW1vcnkgYnVmZmVycyBjb3BpZWQgdG8vZnJvbSB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgbWFuYWdlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHBvaW50ZXIgb2Zmc2V0cyB3b3VsZCBmYWxsIHVuZGVyIG1lbW9yeSBib3VuZHMgY2hlY2tpbmcgKEtBU0FOKSByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24gKEtNU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZWApLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzj5x4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 10:54:24 +0000 UTC FinishedAt: 2026-09-04 11:44:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "7c1b0482-4d54-49c4-a151-377edf1b6d48" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "__htab_map_lookup_and_delete_batch", "generic_map_delete_batch", "generic_map_update_batch", "generic_map_lookup_batch", "htab_map_lookup_batch", "htab_map_lookup_and_delete_batch", "bpf_map_do_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9kb19iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplYCkuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGR1cmluZyBwb2ludGVyIGFyaXRobWV0aWMgaW4gQlBGIG1hcCBiYXRjaCBvcGVyYXRpb25zIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoIGluIGhhc2h0YWIuYyBhbmQgZ2VuZXJpY19tYXBfKl9iYXRjaCBpbiBzeXNjYWxsLmMpIGJ5IGNhc3RpbmcgY291bnRzL2luZGljZXMgdG8gc2l6ZV90LiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCAoQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg1NzcyNWRkM2RlZmRkMjk3MzQxOTNkY2JiMTg5ODRlYjA4YzBiM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDExOjQzOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xOTc3LDEwICYjNDM7MTk3NywxMCBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4tXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyAmIzQzOyB0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuLVx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcbi1cdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbi1cdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4mIzQzO1x0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuJiM0MztcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbiYjNDM7XHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbiYjNDM7XHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi43MzEzODhhZTAwYWQxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMjAzNiw3ICYjNDM7MjAzNiw3IEBAIGludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHtcbiBcdFx0ZXJyID0gLUVGQVVMVDtcbi1cdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiYjNDM7XHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiBcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMjA5OCw5ICYjNDM7MjA5OCw5IEBAIGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuJiM0MztcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuLVx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyBjcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuJiM0MztcdFx0ICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgJiM0MzsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLFxuQEAgLTIxNzksMTIgJiM0MzsyMTc5LDEyIEBAIGludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4gXHRcdFx0XHQgbWFwLVx1MDAzZWtleV9zaXplKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcdFx0fVxuLVx0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyBjcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuJiM0MztcdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgJiM0MzsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9kb19iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODU3NzI1ZGQzZGVmZGQyOTczNDE5M2RjYmIxODk4NGViMDhjMGIzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTE6NDM6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCkBAIC0xOTc3LDEwICYjNDM7MTk3NywxMCBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpOwotCWlmIChidWNrZXRfY250ICZhbXA7JmFtcDsgKGNvcHlfdG9fdXNlcih1a2V5cyAmIzQzOyB0b3RhbCAqIGtleV9zaXplLCBrZXlzLAotCSAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8Ci0JICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLAotCSAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7CiYjNDM7CWlmIChidWNrZXRfY250ICZhbXA7JmFtcDsgKGNvcHlfdG9fdXNlcih1a2V5cyAmIzQzOyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsCiYjNDM7CSAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHwKJiM0MzsJICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsCiYjNDM7CSAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBhZnRlcl9sb29wOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggNjg3NGJhMTQyNGFmMC4uNzMxMzg4YWUwMGFkMSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmMKQEAgLTIwMzYsNyAmIzQzOzIwMzYsNyBAQCBpbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAKIAlmb3IgKGNwID0gMDsgY3AgJmx0OyBtYXhfY291bnQ7IGNwJiM0MzsmIzQzOykgewogCQllcnIgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IGNwICogbWFwLSZndDtrZXlfc2l6ZSwKJiM0MzsJCWlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiAJCQkJICAgbWFwLSZndDtrZXlfc2l6ZSkpCiAJCQlicmVhazsKIApAQCAtMjA5OCw5ICYjNDM7MjA5OCw5IEBAIGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLAogCiAJZm9yIChjcCA9IDA7IGNwICZsdDsgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHsKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtJmd0O2tleV9zaXplLAogCQkgICAgbWFwLSZndDtrZXlfc2l6ZSkgfHwKLQkJICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgJiM0MzsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSkKJiM0MzsJCSAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSkKIAkJCWJyZWFrOwogCiAJCWVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsCkBAIC0yMTc5LDEyICYjNDM7MjE3OSwxMiBAQCBpbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCWlmIChlcnIpCiAJCQlnb3RvIGZyZWVfYnVmOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsIGtleSwKJiM0MzsJCWlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZSwga2V5LAogCQkJCSBtYXAtJmd0O2tleV9zaXplKSkgewogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gZnJlZV9idWY7CiAJCX0KLQkJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgJiM0MzsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHsKJiM0MzsJCWlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGZyZWVfYnVmOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEJhdGNoIE1hcCBPcGVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBiYXRjaCBvcGVyYXRpb25zIHdpdGhpbiBCUEYgbWFwcywgc3BlY2lmaWNhbGx5IGhhc2ggdGFibGVzLCBnaXZlbiB0aGUgYGhhc2h0YWIuY2AgaW5jbHVzaW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkaWZmcyDigJMgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4KClRoZSBkaWZmIGhpZ2hsaWdodHMgb3BlcmF0aW9ucyBsaWtlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEkmIzM5O20gc2VlaW5nIG11bHRpcGxpY2F0aW9ucyBhbmQgcG9pbnRlciBhcml0aG1ldGljIHBvdGVudGlhbGx5IHVzaW5nIDMyLWJpdCB0eXBlcywgbGlrZSBgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplYCBvciBga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZWAuIEJpbmdvLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGFyZ2V0aW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IsIG1vcmUgbGlrZWx5LCBpc3N1ZXMgd2l0aCBwb2ludGVyIGFyaXRobWV0aWMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2VyIGtleXMgb3IgYSBoaWdoIG51bWJlciBvZiBpdGVyYXRpb25zLgoKVGhlIGxpa2VseSByb290IGNhdXNlIGlzIGEgdHlwZSBtaXNtYXRjaCBvciBwb3RlbnRpYWwgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBvZmZzZXRzIG9yIHNpemVzIHdpdGhpbiB0aGVzZSBiYXRjaCBvcGVyYXRpb25zLiBVc2luZyBhIDMyLWJpdCBpbnRlZ2VyIGZvciBtdWx0aXBsaWNhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBrZXkgc2l6ZXMgYW5kIGJhdGNoIGNvdW50cywgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyB3aXRoIHRoZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGByZWFkLWZpbGVgIHRvIGdldCBhIGRpcmVjdCB2aWV3IG9mIHRoZSBpbnZvbHZlZCBjb2RlIHNlY3Rpb25zIGFuZCBzZWFyY2ggdXNpbmcgYGdyZXBwZXJgIG9yIHNpbWlsYXIgdG9vbGluZyB0byBlbnN1cmUgdGhlIGlzc3VlIGlzIGlzb2xhdGVkIGFuZCB0aGUgcHJvdmlkZWQgc29sdXRpb24gaXMgc291bmQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIG11bHRpcGxpY2F0aW9uIGFuZCBwb2ludGVyIGFyaXRobWV0aWMgY2FsY3VsYXRpb25zIGFyZSBiZWluZyBkb25lLCBhbmQgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdHlwZXMgYmVpbmcgdXNlZCBhbmQgd2hlcmUgdGhlc2UgdmFsdWVzIGFyZSBjb21pbmcgZnJvbS4gVGhlIGdvYWwgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3Bvc2VkIGZpeCBhZGVxdWF0ZWx5IGFkZHJlc3NlcyB0aGUgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSB3aGlsZSBtYWludGFpbmluZyBwZXJmb3JtYW5jZSBpbiBiYXRjaCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc0LVx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3NTpcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3Ni1cdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTktXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAwOlx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAxLVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE1MDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTU6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODItXHQubWFwX2RlbGV0ZV9lbGVtID0gdHJpZV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODM6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODQtXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDY1PWludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIxMjItXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMTIzOmludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIxMjQtXHRcdFx0XHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJQRiBIYXNoIFRhYmxlIElzc3VlcyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgc2VlaW5nIHNvbWV0aGluZyBmdW5reSB3aXRoIEJQRi4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBsaWtlbHkgaW52b2x2ZW1lbnQgb2YgaGFzaCB0YWJsZXMsIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSBuZWVkIHRvIHJldmlldyBob3cgdGhlIGhhc2ggdGFibGVzIHRoZW1zZWx2ZXMgYXJlIHN0cnVjdHVyZWQsIGhvdyBjb2xsaXNpb25zIGFyZSBoYW5kbGVkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zIC0gaW5zZXJ0aW9uLCBkZWxldGlvbiwgbG9va3VwLCBhbmQgaXRlcmF0aW9uIOKAkyBhcmUgaW1wbGVtZW50ZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgdGFibGUmIzM5O3MgaW50ZXJuYWxzIHdvdWxkIGJlIGEgaGlnaCBwcmlvcml0eSB0byBjaGVjay4KClRoZW4sIHNpbmNlIHRoaXMgbGlrZWx5IGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UsIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgbmVlZHMgYSB0aG9yb3VnaCBnb2luZyBvdmVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGNhbGxzIGludGVyZmFjZSB3aXRoIHRoZSBoYXNodGFibGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBwb2ludHMgd2hlcmUgZGF0YSBmbG93cyBiZXR3ZWVuIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZSDigJMgYW55IGluY29uc2lzdGVuY2llcyBvciB2dWxuZXJhYmlsaXRpZXMgdGhlcmUgY291bGQgZXhwbGFpbiB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IuIEkgbmVlZCB0byBzY3J1dGluaXplIHBhcmFtZXRlciB2YWxpZGF0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGNvbnRleHQgb2Ygc3lzY2FsbHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQlBGIGhhc2ggdGFibGUuIExldOKAmXMgbWFrZSBzdXJlIHdlIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMsIGFzIHRoZXNlIHRoaW5ncyBhcmUgYWxtb3N0IGFsd2F5cyBpbnRlcnR3aW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTcwOlx0XHQvKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxuMTk3MTpcdFx0ICogdW5sb2NraW5nIHRoZSByY3UuXG4xOTcyOlx0XHQgKi9cbjE5NzM6XHRcdGlmICghYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGJhdGNoICYjNDM7IDEgXHUwMDNjIGh0YWItXHUwMDNlbl9idWNrZXRzKSkge1xuMTk3NDpcdFx0XHRiYXRjaCYjNDM7JiM0Mzs7XG4xOTc1Olx0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuMTk3NjpcdFx0fVxuMTk3NzpcdFxuMTk3ODpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xOTc5Olx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMTk4MDpcdFx0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuMTk4MTpcdFx0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuMTk4MjpcdFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4xOTgzOlx0XHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4xOTg0Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4xOTg1Olx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE5ODY6XHRcdH1cbjE5ODc6XHRcbjE5ODg6XHRcdHRvdGFsICYjNDM7PSBidWNrZXRfY250O1xuMTk4OTpcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk5MDpcdFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpIHtcbjE5OTE6XHRcdFx0cmV0ID0gLUVOT0VOVDtcbjE5OTI6XHRcdFx0Z290byBhZnRlcl9sb29wO1xuMTk5MzpcdFx0fVxuMTk5NDpcdFx0Z290byBhZ2FpbjtcbjE5OTU6XHRcbjE5OTY6XHRhZnRlcl9sb29wOlxuMTk5NzpcdFx0aWYgKHJldCA9PSAtRUZBVUxUKVxuMTk5ODpcdFx0XHRnb3RvIG91dDtcbjE5OTk6XHRcbjIwMDA6XHRcdC8qIGNvcHkgIyBvZiBlbnRyaWVzIGFuZCBuZXh0IGJhdGNoICovXG4yMDAxOlx0XHR1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xuMjAwMjpcdFx0aWYgKGNvcHlfdG9fdXNlcih1YmF0Y2gsIFx1MDAyNmJhdGNoLCBzaXplb2YoYmF0Y2gpKSB8fFxuMjAwMzpcdFx0ICAgIHB1dF91c2VyKHRvdGFsLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDA0Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4yMDA1Olx0XG4yMDA2Olx0b3V0OlxuMjAwNzpcdFx0a3ZmcmVlKGtleXMpO1xuMjAwODpcdFx0a3ZmcmVlKHZhbHVlcyk7XG4yMDA5Olx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYSBUcmlja3kgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmdW5jdGlvbiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuLi4gc291bmRzIGxpa2UgYSBtb3V0aGZ1bCwgYW5kIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IG9uZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBLbm93aW5nIHRoZSBjYWxsZXIgaXMgKmNyaXRpY2FsKiBpbiBkZWJ1Z2dpbmcgdGhpcyBzb3J0IG9mIHRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGlzIGluaXRpYXRpbmcgdGhpcyBsb29rdXAtYW5kLWRlbGV0ZSBvcGVyYXRpb24gb24gdGhlIGhhc2ggdGFibGUuIElzIHRoaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgZXh0ZXJuYWwgZXZlbnQsIG9yIGlzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW50ZXJuYWwgcHJvY2Vzcz8gVGhlIGNhbGxlciBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgJiMzNDt3aHkmIzM0OyBhbmQsIHBvdGVudGlhbGx5LCB0aGUgcm9vdCBjYXVzZSBvZiBhbnkgaXNzdWVzIEkgZW5jb3VudGVyIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgcGVlbGluZyBiYWNrIHRob3NlIGxheWVycyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzcxPXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE3NzI6X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTc3My1cdFx0XHRcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMTM9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE1LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMTY6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTctXHRcdFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyMT1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI0LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMjU6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAyNi1cdFx0XHRcdFx0XHQgIGZhbHNlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDMwPWh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDMyLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzM6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzQtXHRcdFx0XHRcdFx0ICBmYWxzZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzg9aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDQxLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNDI6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0My1cdFx0XHRcdFx0XHQgIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0Nz1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTAte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA1MTpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1Mi1cdFx0XHRcdFx0XHQgIHRydWUsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNTY9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTkte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2MDpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYxLVx0XHRcdFx0XHRcdCAgdHJ1ZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2NT1odGFiX2xydV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjcte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2ODpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2OS1cdFx0XHRcdFx0XHQgIHRydWUsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDczPWh0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzYte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA3NzpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDc4LVx0XHRcdFx0XHRcdCAgdHJ1ZSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBCYXRjaCBPcGVyYXRpb25zIGluIEJQRiBNYXBzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJhdGNoIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZXkgaGFuZGxlIG1hcCBpbnRlcmFjdGlvbnMuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYW5kIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGVpciBsb2dpYy4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGFzcGVjdHMgb2YgYXRvbWljaXR5LCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBudWFuY2VzIG9mIGhvdyBkYXRhIGlzIGJhdGNoZWQsIGFuZCB3aGF0IHNwZWNpZmljIG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMzA6XHRcdGlmIChwdXRfdXNlcigwLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDMxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjAzMjpcdFxuMjAzMzpcdFx0a2V5ID0ga3ZtYWxsb2MobWFwLVx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDM0Olx0XHRpZiAoIWtleSlcbjIwMzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMDM2Olx0XG4yMDM3Olx0XHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7XG4yMDM4Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMDM5Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbjIwNDA6XHRcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4yMDQxOlx0XHRcdFx0YnJlYWs7XG4yMDQyOlx0XG4yMDQzOlx0XHRcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XG4yMDQ0Olx0XHRcdFx0ZXJyID0gYnBmX21hcF9vZmZsb2FkX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcbjIwNDU6XHRcdFx0XHRicmVhaztcbjIwNDY6XHRcdFx0fVxuMjA0NzpcdFxuMjA0ODpcdFx0XHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwNDk6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjA1MDpcdFx0XHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XG4yMDUxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjA1MjpcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMjA1MzpcdFx0XHRpZiAoZXJyKVxuMjA1NDpcdFx0XHRcdGJyZWFrO1xuMjA1NTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIwNTY6XHRcdH1cbjIwNTc6XHRcdGlmIChjb3B5X3RvX3VzZXIoXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQsIFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcbjIwNTg6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIwNTk6XHRcbjIwNjA6XHRcdGt2ZnJlZShrZXkpO1xuMjA2MTpcdFxuMjA2MjpcdFx0cmV0dXJuIGVycjtcbjIwNjM6XHR9XG4yMDY0Olx0XG4yMDY1Olx0aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4yMDY2Olx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjIwNjc6XHRcdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4yMDY4Olx0e1xuMjA2OTpcdFx0dm9pZCBfX3VzZXIgKnZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLnZhbHVlcyk7XG4yMDcwOlx0XHR2b2lkIF9fdXNlciAqa2V5cyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmtleXMpO1xuMjA3MTpcdFx0dTMyIHZhbHVlX3NpemUsIGNwLCBtYXhfY291bnQ7XG4yMDcyOlx0XHR2b2lkICprZXksICp2YWx1ZTtcbjIwNzM6XHRcdGludCBlcnIgPSAwO1xuMjA3NDpcdFxuMjA3NTpcdFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyxcbjIwNzY6XHRcdFx0XHRcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcbjIwNzc6XHRcdGlmIChlcnIpXG4yMDc4Olx0XHRcdHJldHVybiBlcnI7XG4yMDc5Olx0XG4yMDgwOlx0XHR2YWx1ZV9zaXplID0gYnBmX21hcF92YWx1ZV9zaXplKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcbjIwODE6XHRcbjIwODI6XHRcdG1heF9jb3VudCA9IGF0dHItXHUwMDNlYmF0Y2guY291bnQ7XG4yMDgzOlx0XHRpZiAoIW1heF9jb3VudClcbjIwODQ6XHRcdFx0cmV0dXJuIDA7XG4yMDg1Olx0XG4yMDg2Olx0XHRpZiAocHV0X3VzZXIoMCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjA4NzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIwODg6XHRcbjIwODk6XHRcdGtleSA9IGt2bWFsbG9jKG1hcC1cdTAwM2VrZXlfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuMjA5MDpcdFx0aWYgKCFrZXkpXG4yMDkxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjA5MjpcdFxuMjA5MzpcdFx0dmFsdWUgPSBrdm1hbGxvYyh2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDk0Olx0XHRpZiAoIXZhbHVlKSB7XG4yMDk1Olx0XHRcdGt2ZnJlZShrZXkpO1xuMjA5NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIwOTc6XHRcdH1cbjIwOTg6XHRcbjIwOTk6XHRcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHtcbjIxMDA6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxMDE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuMjEwMjpcdFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuMjEwMzpcdFx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4yMTA0Olx0XHRcdFx0YnJlYWs7XG4yMTA1Olx0XG4yMTA2Olx0XHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXG4yMTA3Olx0XHRcdFx0XHRcdCAgIGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XG4yMTA4Olx0XG4yMTA5Olx0XHRcdGlmIChlcnIpXG4yMTEwOlx0XHRcdFx0YnJlYWs7XG4yMTExOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjExMjpcdFx0fVxuMjExMzpcdFxuMjExNDpcdFx0aWYgKGNvcHlfdG9fdXNlcihcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCwgXHUwMDI2Y3AsIHNpemVvZihjcCkpKVxuMjExNTpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjExNjpcdFxuMjExNzpcdFx0a3ZmcmVlKHZhbHVlKTtcbjIxMTg6XHRcdGt2ZnJlZShrZXkpO1xuMjExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODE3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBTeXNjYWxsIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzcGVjaWZpYyBCUEYgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCBhdCB0aGUga2VybmVsIGxldmVsLiBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDIxMjAgdGhyb3VnaCAyMjAwLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGFyZ3VtZW50IHBhcnNpbmcgYW5kIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCByZXNpZGVzLiBIb3BlZnVsbHksIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIHNlbnNpYmxlIGFuZCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIGEgY2xlYXIgd2F5LCBhcyB0aGlzIHNlY3Rpb24gbGlrZWx5IHRvdWNoZXMgdXBvbiBCUEYgcHJvZ3JhbSBsb2FkaW5nLCBtYXAgb3BlcmF0aW9ucywgb3IgcGVyaGFwcyBldmVuIGhlbHBlciBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgYXJndW1lbnQgdmFsaWRhdGlvbiwgc2VjdXJpdHkgY2hlY2tzLCBhbmQgY2FsbHMgdG8gbG93ZXItbGV2ZWwgQlBGIGhlbHBlciBmdW5jdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGxvY2tpbmcgc3RyYXRlZ2llcywgYW5kIGhvdyB0aGUgc3lzY2FsbCBpbnRlcmFjdHMgd2l0aCB0aGUgQlBGIFZNLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgbGV0IG1lIG1hcCBob3cgdGhlIHN5c2NhbGwgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgQlBGIHN1YnN5c3RlbS4gSSBhbnRpY2lwYXRlIGEgcmVhc29uYWJsZSBtaXggb2YgQyBjb2RlLCBtYXliZSBzb21lIG1hY3JvcywgYW5kIGhvcGVmdWxseSBub3QgdG9vIG1hbnkgbmVzdGVkIGNvbmRpdGlvbmFscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMjA6XHRcdHJldHVybiBlcnI7XG4yMTIxOlx0fVxuMjEyMjpcdFxuMjEyMzpcdGludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbjIxMjQ6XHRcdFx0XHRcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjIxMjU6XHRcdFx0XHRcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuMjEyNjpcdHtcbjIxMjc6XHRcdHZvaWQgX191c2VyICp1b2JhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcbjIxMjg6XHRcdHZvaWQgX191c2VyICp1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5pbl9iYXRjaCk7XG4yMTI5Olx0XHR2b2lkIF9fdXNlciAqdmFsdWVzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gudmFsdWVzKTtcbjIxMzA6XHRcdHZvaWQgX191c2VyICprZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gua2V5cyk7XG4yMTMxOlx0XHR2b2lkICpidWYsICpidWZfcHJldmtleSwgKnByZXZfa2V5LCAqa2V5LCAqdmFsdWU7XG4yMTMyOlx0XHR1MzIgdmFsdWVfc2l6ZSwgY3AsIG1heF9jb3VudDtcbjIxMzM6XHRcdGludCBlcnI7XG4yMTM0Olx0XG4yMTM1Olx0XHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzLCBCUEZfRl9MT0NLIHwgQlBGX0ZfQ1BVKTtcbjIxMzY6XHRcdGlmIChlcnIpXG4yMTM3Olx0XHRcdHJldHVybiBlcnI7XG4yMTM4Olx0XG4yMTM5Olx0XHR2YWx1ZV9zaXplID0gYnBmX21hcF92YWx1ZV9zaXplKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcbjIxNDA6XHRcbjIxNDE6XHRcdG1heF9jb3VudCA9IGF0dHItXHUwMDNlYmF0Y2guY291bnQ7XG4yMTQyOlx0XHRpZiAoIW1heF9jb3VudClcbjIxNDM6XHRcdFx0cmV0dXJuIDA7XG4yMTQ0Olx0XG4yMTQ1Olx0XHRpZiAocHV0X3VzZXIoMCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjE0NjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIxNDc6XHRcbjIxNDg6XHRcdGJ1Zl9wcmV2a2V5ID0ga3ZtYWxsb2MobWFwLVx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMTQ5Olx0XHRpZiAoIWJ1Zl9wcmV2a2V5KVxuMjE1MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIxNTE6XHRcbjIxNTI6XHRcdGJ1ZiA9IGt2bWFsbG9jKG1hcC1cdTAwM2VrZXlfc2l6ZSAmIzQzOyB2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMTUzOlx0XHRpZiAoIWJ1Zikge1xuMjE1NDpcdFx0XHRrdmZyZWUoYnVmX3ByZXZrZXkpO1xuMjE1NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIxNTY6XHRcdH1cbjIxNTc6XHRcbjIxNTg6XHRcdGVyciA9IC1FRkFVTFQ7XG4yMTU5Olx0XHRwcmV2X2tleSA9IE5VTEw7XG4yMTYwOlx0XHRpZiAodWJhdGNoIFx1MDAyNlx1MDAyNiBjb3B5X2Zyb21fdXNlcihidWZfcHJldmtleSwgdWJhdGNoLCBtYXAtXHUwMDNla2V5X3NpemUpKVxuMjE2MTpcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE2MjpcdFx0a2V5ID0gYnVmO1xuMjE2MzpcdFx0dmFsdWUgPSBrZXkgJiM0MzsgbWFwLVx1MDAzZWtleV9zaXplO1xuMjE2NDpcdFx0aWYgKHViYXRjaClcbjIxNjU6XHRcdFx0cHJldl9rZXkgPSBidWZfcHJldmtleTtcbjIxNjY6XHRcbjIxNjc6XHRcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50Oykge1xuMjE2ODpcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMTY5Olx0XHRcdGVyciA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2dldF9uZXh0X2tleShtYXAsIHByZXZfa2V5LCBrZXkpO1xuMjE3MDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIxNzE6XHRcdFx0aWYgKGVycilcbjIxNzI6XHRcdFx0XHRicmVhaztcbjIxNzM6XHRcdFx0ZXJyID0gYnBmX21hcF9jb3B5X3ZhbHVlKG1hcCwga2V5LCB2YWx1ZSxcbjIxNzQ6XHRcdFx0XHRcdFx0IGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XG4yMTc1Olx0XG4yMTc2Olx0XHRcdGlmIChlcnIgPT0gLUVOT0VOVClcbjIxNzc6XHRcdFx0XHRnb3RvIG5leHRfa2V5O1xuMjE3ODpcdFxuMjE3OTpcdFx0XHRpZiAoZXJyKVxuMjE4MDpcdFx0XHRcdGdvdG8gZnJlZV9idWY7XG4yMTgxOlx0XG4yMTgyOlx0XHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4yMTgzOlx0XHRcdFx0XHQgbWFwLVx1MDAzZWtleV9zaXplKSkge1xuMjE4NDpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMTg1Olx0XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxODY6XHRcdFx0fVxuMjE4NzpcdFx0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4yMTg4Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxODk6XHRcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE5MDpcdFx0XHR9XG4yMTkxOlx0XG4yMTkyOlx0XHRcdGNwJiM0MzsmIzQzOztcbjIxOTM6XHRuZXh0X2tleTpcbjIxOTQ6XHRcdFx0aWYgKCFwcmV2X2tleSlcbjIxOTU6XHRcdFx0XHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xuMjE5NjpcdFxuMjE5NzpcdFx0XHRzd2FwKHByZXZfa2V5LCBrZXkpO1xuMjE5ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIxOTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGlzIHBhdGNoIHByZXNlbnRzIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHJlYWNoYWJpbGl0eS4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCDigJMgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Ag4oCTIGFyZSBhbGwgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbHM6IGBCUEZfTUFQX0xPT0tVUF9CQVRDSGAsIGBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIYCwgYEJQRl9NQVBfVVBEQVRFX0JBVENIYCwgYW5kIGBCUEZfTUFQX0RFTEVURV9CQVRDSGAuIENvbnNpZGVyaW5nIHRoYXQgQlBGIGlzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgTGludXgga2VybmVsLCBhIGNyaXRpY2FsIHN1YnN5c3RlbSwgdGhpcyBpcyBhIGNsZWFyICYjMzQ7eWVzJiMzNDsgaW4gdGVybXMgb2YgZnV6emluZyB2YWx1ZS4gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuCgpOb3cgZm9yIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgdG8gZW5zdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiBjb21waWxlZCBpbiBhbmQgYWNjZXNzaWJsZS4gSXQgbG9va3MgbGlrZSBCUEYgc3lzY2FsbHMgcmVxdWlyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCAoYW5kIGBDT05GSUdfQlBGYCkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBib3RoIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBhcmUgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2h0YWJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTMxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxsIHN1cHBvcnQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gZW5zdXJlIGlzIGVuYWJsZWQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4gVG8gY29uZmlybSBpdHMgZXhhY3QgbmFtZSBhbmQgbG9jYXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgdHdvIG9idmlvdXMgcGxhY2VzIHRvIGNoZWNrIGZvciBgQlBGX1NZU0NBTExgIChvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxsIHNldHVwKSBhcmUgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgYW5kIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuYXZpZ2F0ZSB0byB0aG9zZSBmaWxlcyB0byB2ZXJpZnkgdGhlIGV4YWN0IG9wdGlvbiBuYW1lIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgQlBGIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNy4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBCUEYgZmVhdHVyZSBlbmFibGVtZW50IGZsYWcsIG9yIG1heWJlIEkmIzM5O20gdHJ5aW5nIHRvIHJlY2FsbCBhIHJlbGF0ZWQgb3B0aW9uIHRoYXQgSSB3YW50IHRvIGRvdWJsZS1jaGVjay4gQ291bGQgYmUgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgZmxhZywgb3Igc29tZXRoaW5nIHRpZWQgdG8gYSBzcGVjaWZpYyBCUEYgaGVscGVyIHZlcnNpb24uIEkgc3VzcGVjdCBsaW5lIDI3IHdpbGwgbGlrZWx5IGxlYWQgbWUgdG8gdGhlIG1haW4gZW50cnkgcG9pbnQgb3IgYSBjcnVjaWFsIGRlcGVuZGVuY3kgaW4gdGhhdCBLY29uZmlnIGZpbGUuIEkgYW0gaG9waW5nIHRvIGdldCB0byB0aGUgcm9vdCBjYXVzZSBvZiBhbiBpc3N1ZSBJJiMzOTttIHdvcmtpbmcgdGhyb3VnaC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBwcm92aWRlIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gdGhhdCBhbGwgZnVydGhlciBjb25maWd1cmF0aW9uIGlzIHJlbGlhbnQgb24uIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgdGhlcmUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBidWlsZCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBDYWxscyBmb3IgU3ltYm9sIEV4dHJhY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlZDogYEJQRl9TWVNDQUxMYCDigJMgbm8gQ09ORklHXyBwcmVmaXgsIGdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZnVuY3Rpb24gYW5hbHlzaXMuIEZvY3VzaW5nIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBiZWNhdXNlIG9mIHRoZSBpbXBhY3Qgb24gc3ltYm9sIGV4dHJhY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMsIEkgc2VlIHRoYXQgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBmdW5jdGlvbnMsIGluY2x1ZGluZyB0aGUgbG9va3VwL2RlbGV0ZSBiYXRjaCBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgc2V2ZXJhbCBodGFiIGFuZCBscnUgdmFyaWFudHMuCgpNb3ZpbmcgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSBzcG90IHRoZSBgZ2VuZXJpY19tYXBfKl9iYXRjaGAgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RhdGljIG5hdHVyZSBvZiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgd2lsbCBwcmV2ZW50IGl0cyBpbmNsdXNpb24gaW4gdGhlIHN5bWJvbCB0YWJsZXMgU3l6a2FsbGVyIGlzIHB1bGxpbmcgZnJvbSAodm1saW51eC9rYWxsc3ltcykuIFNpbmNlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGEgLmMgZmlsZSwgaW5saW5pbmcgaXMgYSBwb3NzaWJpbGl0eS4gU28sIHRoZSBxdWVzdGlvbiBpcywgY2FuIHN0YXRpYyBmdW5jdGlvbnMgYmUgcmVsaWFibHkgdXNlZCBpbiBGb2N1c1N5bWJvbHMgaWYgbm90IGlubGluZWQ/CgpUaGUgc3RhbmRhcmQgYXBwcm9hY2ggdG8gaGFuZGxlIHRoaXMgaXMgdG8gaW5jbHVkZSAqYm90aCogdGhlIHN0YXRpYyBmdW5jdGlvbiAqYW5kKiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBzdWNoIGFzIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBpbiB0aGUgRm9jdXNTeW1ib2xzIGxpc3QuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYGJwZl9tYXBfZG9fYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgYmF0Y2ggb3BlcmF0aW9ucyBhcmUgYWN0dWFsbHkgZGlzcGF0Y2hlZC4gVGhpcyB3aWxsIHByb3ZpZGUgY29udGV4dCBmb3IgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBzeXNjYWxsIGZ1bmN0aW9ucyBhbmQgdGhlIGhhc2h0YWIgZnVuY3Rpb25zLCBzb2xpZGlmeWluZyB0aGUgbmVlZCB0byBlbnN1cmUgKmFsbCogdGhlc2UgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdG8gU3l6a2FsbGVyIGZvciBlZmZlY3RpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc0LVx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3NTpcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3Ni1cdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTktXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAwOlx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAxLVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE1MDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X29mX21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTU6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjYtI2RlZmluZSBCQVRDSF9PUFMoX25hbWUpXHRcdFx0XFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3Olx0Lm1hcF9sb29rdXBfYmF0Y2ggPVx0XHRcdFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODpcdF9uYW1lIyNfbWFwX2xvb2t1cF9iYXRjaCxcdFx0XFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5LVx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCA9XHRcdFxcXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxMj1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDEzOmh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE0LVx0XHRcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDI5PXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzA6aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzMS1cdFx0ICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDQ2PXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNDc6aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDgtXHRcdFx0XHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2ND1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY1Omh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDY2LVx0XHRcdCAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQzPXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzc4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM3OTpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgwLVx0XHRcdFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYz03NzU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRyaWVfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNzgyLVx0Lm1hcF9kZWxldGVfZWxlbSA9IHRyaWVfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NzgzOlx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNzg0LVx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjA2NT1pbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTIyLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEyMzppbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVx0XHRcdFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3NDc9c3RhdGljIGludCBicGZfbWFwX2RvX2JhdGNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU3NzYtXHRpZiAoY21kID09IEJQRl9NQVBfTE9PS1VQX0JBVENIKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTc3NzpcdFx0QlBGX0RPX0JBVENIKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9iYXRjaCwgbWFwLCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Nzc4LVx0ZWxzZSBpZiAoY21kID09IEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0gpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgQmF0Y2ggTWFwIE9wZXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBicGZfbWFwX2RvX2JhdGNoYCBmdW5jdGlvbi4gSXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEkga25vdyB0aGlzIGlzIHRoZSBjb3JlIG9mIGJhdGNoIHByb2Nlc3NpbmcgaW4gQlBGLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEJQRiBtYXBzIHdoZW4gbXVsdGlwbGUgb3BlcmF0aW9ucyBhcmUgZ3JvdXBlZCB0b2dldGhlci4gSeKAmW0gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgbG9ja2luZywgZXJyb3IgY2hlY2tpbmcsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBiYXRjaCBjb250ZXh0LCBhbmQgdGhlbiB0aWUgdGhhdCB0byBob3cgdGhlIHVzZXItc3BhY2Ugc2lkZSBzZW5kcyB0aGUgaW5mb3JtYXRpb24gdG8gdGhpcyBmdW5jdGlvbi4gUmlnaHQsIGxldOKAmXMgZ28gY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IGhvdyBpdOKAmXMgaW1wbGVtZW50ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBhdG9taWNpdHkgYW5kIGNvbnNpc3RlbmN5IHdpdGhpbiB0aGUgbWFwIG9wZXJhdGlvbnMsIGFuZCBpZiB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBhbnkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIGJhdGNoaW5nIHRvIHJlZHVjZSBvdmVyaGVhZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBoYXMgYW55IG9idmlvdXMgcGl0ZmFsbHMgSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIGlmIEkmIzM5O20gZGVzaWduaW5nIGEgbmV3IGJhdGNoIG1hcCBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3NDU6XHRcdH0gd2hpbGUgKDApXG41NzQ2Olx0XG41NzQ3Olx0c3RhdGljIGludCBicGZfbWFwX2RvX2JhdGNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuNTc0ODpcdFx0XHRcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuNTc0OTpcdFx0XHRcdCAgICBpbnQgY21kKVxuNTc1MDpcdHtcbjU3NTE6XHRcdGJvb2wgaGFzX3JlYWQgID0gY21kID09IEJQRl9NQVBfTE9PS1VQX0JBVENIIHx8XG41NzUyOlx0XHRcdFx0IGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIO1xuNTc1MzpcdFx0Ym9vbCBoYXNfd3JpdGUgPSBjbWQgIT0gQlBGX01BUF9MT09LVVBfQkFUQ0g7XG41NzU0Olx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuNTc1NTpcdFx0aW50IGVycjtcbjU3NTY6XHRcbjU3NTc6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9NQVBfQkFUQ0gpKVxuNTc1ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU3NTk6XHRcbjU3NjA6XHRcdENMQVNTKGZkLCBmKShhdHRyLVx1MDAzZWJhdGNoLm1hcF9mZCk7XG41NzYxOlx0XG41NzYyOlx0XHRtYXAgPSBfX2JwZl9tYXBfZ2V0KGYpO1xuNTc2MzpcdFx0aWYgKElTX0VSUihtYXApKVxuNTc2NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihtYXApO1xuNTc2NTpcdFx0aWYgKGhhc193cml0ZSlcbjU3NjY6XHRcdFx0YnBmX21hcF93cml0ZV9hY3RpdmVfaW5jKG1hcCk7XG41NzY3Olx0XHRpZiAoaGFzX3JlYWQgXHUwMDI2XHUwMDI2ICEobWFwX2dldF9zeXNfcGVybXMobWFwLCBmKSBcdTAwMjYgRk1PREVfQ0FOX1JFQUQpKSB7XG41NzY4Olx0XHRcdGVyciA9IC1FUEVSTTtcbjU3Njk6XHRcdFx0Z290byBlcnJfcHV0O1xuNTc3MDpcdFx0fVxuNTc3MTpcdFx0aWYgKGhhc193cml0ZSBcdTAwMjZcdTAwMjYgIShtYXBfZ2V0X3N5c19wZXJtcyhtYXAsIGYpIFx1MDAyNiBGTU9ERV9DQU5fV1JJVEUpKSB7XG41NzcyOlx0XHRcdGVyciA9IC1FUEVSTTtcbjU3NzM6XHRcdFx0Z290byBlcnJfcHV0O1xuNTc3NDpcdFx0fVxuNTc3NTpcdFxuNTc3NjpcdFx0aWYgKGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9CQVRDSClcbjU3Nzc6XHRcdFx0QlBGX0RPX0JBVENIKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9iYXRjaCwgbWFwLCBhdHRyLCB1YXR0cik7XG41Nzc4Olx0XHRlbHNlIGlmIChjbWQgPT0gQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSClcbjU3Nzk6XHRcdFx0QlBGX0RPX0JBVENIKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoLCBtYXAsIGF0dHIsIHVhdHRyKTtcbjU3ODA6XHRcdGVsc2UgaWYgKGNtZCA9PSBCUEZfTUFQX1VQREFURV9CQVRDSClcbjU3ODE6XHRcdFx0QlBGX0RPX0JBVENIKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX3VwZGF0ZV9iYXRjaCwgbWFwLCBmZF9maWxlKGYpLCBhdHRyLCB1YXR0cik7XG41NzgyOlx0XHRlbHNlXG41NzgzOlx0XHRcdEJQRl9ET19CQVRDSChtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kZWxldGVfYmF0Y2gsIG1hcCwgYXR0ciwgdWF0dHIpO1xuNTc4NDpcdGVycl9wdXQ6XG41Nzg1Olx0XHRpZiAoaGFzX3dyaXRlKSB7XG41Nzg2Olx0XHRcdG1heWJlX3dhaXRfYnBmX3Byb2dyYW1zKG1hcCk7XG41Nzg3Olx0XHRcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApO1xuNTc4ODpcdFx0fVxuNTc4OTpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1ODEKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogNTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJhdGNoIE1hcCBPcGVyYXRpb24gRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIG15IHRoaW5raW5nLiBXZSYjMzk7cmUgemVyb2luZyBpbiBvbiBiYXRjaCBvcGVyYXRpb25zIGZvciBCUEYgbWFwcywgd2hpY2ggaXMgYSBnb29kIHRhcmdldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFsbCBzb2xpZC4KCkZpcnN0LCB0aGUgc3ltYm9scyB0byB0YXJnZXQgYXJlIGNsZWFybHkgZGVmaW5lZDogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBicGZfbWFwX2RvX2JhdGNoYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIGluZGVlZCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIGZvciBhbGwgb2YgdGhlc2UgYmF0Y2ggb3BlcmF0aW9ucy4KCkkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbGlzdCBhcmUgZm91bmQgd2hlcmUgSSYjMzk7ZCBleHBlY3Q6IFRoZSBgaHRhYl8qYCBmdW5jdGlvbnMgYXJlIGluIGBoYXNodGFiLmNgIGFuZCBgZ2VuZXJpY18qYCBhbmQgYGJwZl8qYCBmdW5jdGlvbnMgYXJlIGluIGBzeXNjYWxsLmNgLiBUaGlzIGNvdmVycyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgb2YgaGFzaCB0YWJsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnRzLiBUaGlzIGlzIGEgc29saWQgY2hlY2sgdG8gZW5zdXJlIHRoYXQgd2UmIzM5O3JlIHRhcmdldGluZyB0aGUgY29ycmVjdCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBvdmVyYWxsIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBUaGUgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgY29ycmVjdCBzaW5jZSBiYXRjaCBtYXAgb3BlcmF0aW9ucyAqYXJlKiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwuIFRoZW4sIHRoZSBgRm9jdXNTeW1ib2xzYCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGluaXRpYWwgbGlzdCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgaW5jbHVkZXMgYEJQRl9TWVNDQUxMYCwgd2hpY2ggaXMgZXNzZW50aWFsLiBJJiMzOTttIGFsc28gc2F0aXNmaWVkIHRoYXQgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlIGFuZCBhY2N1cmF0ZTsgYmF0Y2ggb3BlcmF0aW9ucyBwcm92aWRlIGVmZmljaWVudCBhbmQgcG90ZW50aWFsbHkgY29tcGxleCBkYXRhIG1hbmlwdWxhdGlvbi4gVGhlIGVudGlyZSBzZXR1cCBpcyByZWFkeSB0byBnbywgdGhlIGJhdGNoIGNhbGxzIHByb3ZpZGUgdGhlIGVudHJ5IHBvaW50cy4KCkZpbmFsbHksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgc2V0LXJlc3VsdHMgY2FsbCB3aWxsIGJlIHByb3Blcmx5IGZvcm1hdHRlZCBhbmQgYWNjdXJhdGVseSByZWZsZWN0cyB0aGlzIGFuYWx5c2lzLiBJIGRvbiYjMzk7dCB3YW50IHRvIGludHJvZHVjZSBhbnkgZXJyb3JzIGF0IHRoaXMgc3RhZ2UuIEl0IGlzLCBzbyB3ZSYjMzk7cmUgZ29vZCB0byBnbyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9kb19iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfZG9fYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGR1cmluZyBwb2ludGVyIGFyaXRobWV0aWMgaW4gQlBGIG1hcCBiYXRjaCBvcGVyYXRpb25zIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoIGluIGhhc2h0YWIuYyBhbmQgZ2VuZXJpY19tYXBfKl9iYXRjaCBpbiBzeXNjYWxsLmMpIGJ5IGNhc3RpbmcgY291bnRzL2luZGljZXMgdG8gc2l6ZV90LiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCAoQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplYCkuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1NzcyNWRkM2RlZmRkMjk3MzQxOTNkY2JiMTg5ODRlYjA4YzBiM2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDExOjQzOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi5iZDM3MDRlZDkzMzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTk3NywxMCAmIzQzOzE5NzcsMTAgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJYnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTsKLQlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cywKLQkgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fAotCSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcywKLQkgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkgewomIzQzOwlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLAomIzQzOwkgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8CiYjNDM7CSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLAomIzQzOwkgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gYWZ0ZXJfbG9vcDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0yMDM2LDcgJiM0MzsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJZm9yIChjcCA9IDA7IGNwICZsdDsgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHsKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtJmd0O2tleV9zaXplLAogCQkJCSAgIG1hcC0mZ3Q7a2V5X3NpemUpKQogCQkJYnJlYWs7CiAKQEAgLTIwOTgsOSAmIzQzOzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSwKIAogCWZvciAoY3AgPSAwOyBjcCAmbHQ7IG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7CiAJCWVyciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLAomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZSwKIAkJICAgIG1hcC0mZ3Q7a2V5X3NpemUpIHx8Ci0JCSAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiYjNDM7CQkgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiAJCQlicmVhazsKIAogCQllcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLApAQCAtMjE3OSwxMiAmIzQzOzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQlpZiAoZXJyKQogCQkJZ290byBmcmVlX2J1ZjsKIAotCQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLCBrZXksCiYjNDM7CQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemUsIGtleSwKIAkJCQkgbWFwLSZndDtrZXlfc2l6ZSkpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGZyZWVfYnVmOwogCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiYjNDM7CQlpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBmcmVlX2J1ZjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OQoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBkaWZmIHRob3JvdWdobHkuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB3aXRoaW4gdGhlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBmdW5jdGlvbi4gVGhlIGtleSBhc3BlY3QgaGVyZSBpcyB0aGUgZXhwbGljaXQgY2FzdGluZyBvZiBtdWx0aXBsaWNhdGlvbiByZXN1bHRzIGxpa2UgYHRvdGFsICoga2V5X3NpemVgIGFuZCBga2V5X3NpemUgKiBidWNrZXRfY250YCB0byBgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplYCBhbmQgYChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250YCwgcmVzcGVjdGl2ZWx5LiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IGludGVnZXIgb3ZlcmZsb3cgcmFkYXIuCgpUaGVuLCBtb3Zpbmcgb24gdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSBub3RpY2Ugc2ltaWxhciBjYXN0aW5nIGluIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBwYXJ0aWN1bGFybHkgd2hlcmUgYGNwICogbWFwLSZndDtrZXlfc2l6ZWAgaXMgY2FzdCB0byBgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemVgLiBJdCYjMzk7cyBhbGwgYWJvdXQgYXZvaWRpbmcgdGhvc2UgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGluIGNhbGN1bGF0aW9ucyBpbnZvbHZpbmcga2V5IHNpemVzLCBiYXRjaCBzaXplcywgYW5kIGNvdW50cy4KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIGhvdyB0aGV5IGludGVyYWN0LCBhbmQsIGNydWNpYWxseSwgaG93IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIG92ZXJhbGwgQlBGIGZyYW1ld29yay4gSSB0aGluayBJJiMzOTtsbCBmaXJlIHVwIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHNlc3Npb24gdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZXNlIGJhdGNoIG9wZXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB3aGV0aGVyIHRoZXNlIG92ZXJmbG93IGZpeGVzIHdlcmUgdHJ1bHkgbmVjZXNzYXJ5IGFuZCBpZiBhbnkgZnVydGhlciB2dWxuZXJhYmlsaXRpZXMgbWlnaHQgc3RpbGwgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5NjA6XHRcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcbjE5NjE6XHRcdFx0bCA9IG5vZGVfdG9fZnJlZTtcbjE5NjI6XHRcdFx0bm9kZV90b19mcmVlID0gbm9kZV90b19mcmVlLVx1MDAzZWJhdGNoX2ZsaW5rO1xuMTk2MzpcdFx0XHRpZiAoaXNfbHJ1X21hcClcbjE5NjQ6XHRcdFx0XHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XG4xOTY1Olx0XHRcdGVsc2VcbjE5NjY6XHRcdFx0XHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcbjE5Njc6XHRcdH1cbjE5Njg6XHRcbjE5Njk6XHRuZXh0X2JhdGNoOlxuMTk3MDpcdFx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbjE5NzE6XHRcdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuMTk3MjpcdFx0ICovXG4xOTczOlx0XHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbjE5NzQ6XHRcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk3NTpcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE5NzY6XHRcdH1cbjE5Nzc6XHRcbjE5Nzg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTk3OTpcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE5ODA6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbjE5ODE6XHRcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbjE5ODI6XHRcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuMTk4MzpcdFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuMTk4NDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMTk4NTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xOTg2Olx0XHR9XG4xOTg3Olx0XG4xOTg4Olx0XHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbjE5ODk6XHRcdGJhdGNoJiM0MzsmIzQzOztcbjE5OTA6XHRcdGlmIChiYXRjaCBcdTAwM2U9IGh0YWItXHUwMDNlbl9idWNrZXRzKSB7XG4xOTkxOlx0XHRcdHJldCA9IC1FTk9FTlQ7XG4xOTkyOlx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE5OTM6XHRcdH1cbjE5OTQ6XHRcdGdvdG8gYWdhaW47XG4xOTk1Olx0XG4xOTk2Olx0YWZ0ZXJfbG9vcDpcbjE5OTc6XHRcdGlmIChyZXQgPT0gLUVGQVVMVClcbjE5OTg6XHRcdFx0Z290byBvdXQ7XG4xOTk5Olx0XG4yMDAwOlx0XHQvKiBjb3B5ICMgb2YgZW50cmllcyBhbmQgbmV4dCBiYXRjaCAqL1xuMjAwMTpcdFx0dWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcbjIwMDI6XHRcdGlmIChjb3B5X3RvX3VzZXIodWJhdGNoLCBcdTAwMjZiYXRjaCwgc2l6ZW9mKGJhdGNoKSkgfHxcbjIwMDM6XHRcdCAgICBwdXRfdXNlcih0b3RhbCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjAwNDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjAwNTpcdFxuMjAwNjpcdG91dDpcbjIwMDc6XHRcdGt2ZnJlZShrZXlzKTtcbjIwMDg6XHRcdGt2ZnJlZSh2YWx1ZXMpO1xuMjAwOTpcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAyNTpcdFxuMjAyNjpcdFx0bWF4X2NvdW50ID0gYXR0ci1cdTAwM2ViYXRjaC5jb3VudDtcbjIwMjc6XHRcdGlmICghbWF4X2NvdW50KVxuMjAyODpcdFx0XHRyZXR1cm4gMDtcbjIwMjk6XHRcbjIwMzA6XHRcdGlmIChwdXRfdXNlcigwLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDMxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjAzMjpcdFxuMjAzMzpcdFx0a2V5ID0ga3ZtYWxsb2MobWFwLVx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDM0Olx0XHRpZiAoIWtleSlcbjIwMzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMDM2Olx0XG4yMDM3Olx0XHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7XG4yMDM4Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMDM5Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbjIwNDA6XHRcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4yMDQxOlx0XHRcdFx0YnJlYWs7XG4yMDQyOlx0XG4yMDQzOlx0XHRcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XG4yMDQ0Olx0XHRcdFx0ZXJyID0gYnBmX21hcF9vZmZsb2FkX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcbjIwNDU6XHRcdFx0XHRicmVhaztcbjIwNDY6XHRcdFx0fVxuMjA0NzpcdFxuMjA0ODpcdFx0XHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwNDk6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjA1MDpcdFx0XHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XG4yMDUxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjA1MjpcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMjA1MzpcdFx0XHRpZiAoZXJyKVxuMjA1NDpcdFx0XHRcdGJyZWFrO1xuMjA1NTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIwNTY6XHRcdH1cbjIwNTc6XHRcdGlmIChjb3B5X3RvX3VzZXIoXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQsIFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcbjIwNTg6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIwNTk6XHRcbjIwNjA6XHRcdGt2ZnJlZShrZXkpO1xuMjA2MTpcdFxuMjA2MjpcdFx0cmV0dXJuIGVycjtcbjIwNjM6XHR9XG4yMDY0Olx0XG4yMDY1Olx0aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4yMDY2Olx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjIwNjc6XHRcdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4yMDY4Olx0e1xuMjA2OTpcdFx0dm9pZCBfX3VzZXIgKnZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLnZhbHVlcyk7XG4yMDcwOlx0XHR2b2lkIF9fdXNlciAqa2V5cyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmtleXMpO1xuMjA3MTpcdFx0dTMyIHZhbHVlX3NpemUsIGNwLCBtYXhfY291bnQ7XG4yMDcyOlx0XHR2b2lkICprZXksICp2YWx1ZTtcbjIwNzM6XHRcdGludCBlcnIgPSAwO1xuMjA3NDpcdFxuMjA3NTpcdFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyxcbjIwNzY6XHRcdFx0XHRcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcbjIwNzc6XHRcdGlmIChlcnIpXG4yMDc4Olx0XHRcdHJldHVybiBlcnI7XG4yMDc5Olx0XG4yMDgwOlx0XHR2YWx1ZV9zaXplID0gYnBmX21hcF92YWx1ZV9zaXplKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcbjIwODE6XHRcbjIwODI6XHRcdG1heF9jb3VudCA9IGF0dHItXHUwMDNlYmF0Y2guY291bnQ7XG4yMDgzOlx0XHRpZiAoIW1heF9jb3VudClcbjIwODQ6XHRcdFx0cmV0dXJuIDA7XG4yMDg1Olx0XG4yMDg2Olx0XHRpZiAocHV0X3VzZXIoMCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjA4NzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIwODg6XHRcbjIwODk6XHRcdGtleSA9IGt2bWFsbG9jKG1hcC1cdTAwM2VrZXlfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuMjA5MDpcdFx0aWYgKCFrZXkpXG4yMDkxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjA5MjpcdFxuMjA5MzpcdFx0dmFsdWUgPSBrdm1hbGxvYyh2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDk0Olx0XHRpZiAoIXZhbHVlKSB7XG4yMDk1Olx0XHRcdGt2ZnJlZShrZXkpO1xuMjA5NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIwOTc6XHRcdH1cbjIwOTg6XHRcbjIwOTk6XHRcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHtcbjIxMDA6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxMDE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuMjEwMjpcdFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuMjEwMzpcdFx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4yMTA0Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGlzIHJlYWxseSB3b3JraW5nLiBJJiMzOTt2ZSBnb3QgYSBkZWNlbnQgZ3Jhc3Agb2YgdGhlIGJhc2ljIGNvbmNlcHRzLCBidXQgSSBrbm93IEkmIzM5O20gbWlzc2luZyBzb21lIG9mIHRoZSBudWFuY2VzLiBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBhbmQgcmVhbGx5IGRpc3NlY3QgaXQsIGxpbmUgYnkgbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBiYXRjaCBwcm9jZXNzaW5nIHBhcnQgYWN0dWFsbHkgZnVuY3Rpb25zLiBXaGF0JiMzOTtzIHRoZSBjbGV2ZXJuZXNzIGJlaGluZCBpdD8gV2hhdCBlZGdlIGNhc2VzIGlzIGl0IGRlc2lnbmVkIHRvIGhhbmRsZT8gVGhlIGRvY3VtZW50YXRpb24gZ2l2ZXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3LCBidXQgdGhlIHJlYWwgZGV0YWlscyBhcmUgaW4gdGhlIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gSSBzaG91bGQgYmUgYWJsZSB0byBpZGVudGlmeSBpdHMga2V5IGNvbXBvbmVudHMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcy4gV2hhdCYjMzk7cyB0aGUgY29udHJvbCBmbG93IGxvb2sgbGlrZSBmb3IgaXQ/IEFuZCB0aGVuIHRyeSBhbmQgZXZhbHVhdGUgd2hhdCB0aGUgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmcyB0aGF0IHdlcmUgbWFkZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE2MDpcdFx0aWYgKHViYXRjaCBcdTAwMjZcdTAwMjYgY29weV9mcm9tX3VzZXIoYnVmX3ByZXZrZXksIHViYXRjaCwgbWFwLVx1MDAzZWtleV9zaXplKSlcbjIxNjE6XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxNjI6XHRcdGtleSA9IGJ1ZjtcbjIxNjM6XHRcdHZhbHVlID0ga2V5ICYjNDM7IG1hcC1cdTAwM2VrZXlfc2l6ZTtcbjIxNjQ6XHRcdGlmICh1YmF0Y2gpXG4yMTY1Olx0XHRcdHByZXZfa2V5ID0gYnVmX3ByZXZrZXk7XG4yMTY2Olx0XG4yMTY3Olx0XHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDspIHtcbjIxNjg6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjE2OTpcdFx0XHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9nZXRfbmV4dF9rZXkobWFwLCBwcmV2X2tleSwga2V5KTtcbjIxNzA6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMTcxOlx0XHRcdGlmIChlcnIpXG4yMTcyOlx0XHRcdFx0YnJlYWs7XG4yMTczOlx0XHRcdGVyciA9IGJwZl9tYXBfY29weV92YWx1ZShtYXAsIGtleSwgdmFsdWUsXG4yMTc0Olx0XHRcdFx0XHRcdCBhdHRyLVx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xuMjE3NTpcdFxuMjE3NjpcdFx0XHRpZiAoZXJyID09IC1FTk9FTlQpXG4yMTc3Olx0XHRcdFx0Z290byBuZXh0X2tleTtcbjIxNzg6XHRcbjIxNzk6XHRcdFx0aWYgKGVycilcbjIxODA6XHRcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE4MTpcdFxuMjE4MjpcdFx0XHRpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSwga2V5LFxuMjE4MzpcdFx0XHRcdFx0IG1hcC1cdTAwM2VrZXlfc2l6ZSkpIHtcbjIxODQ6XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjE4NTpcdFx0XHRcdGdvdG8gZnJlZV9idWY7XG4yMTg2Olx0XHRcdH1cbjIxODc6XHRcdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgJiM0MzsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuMjE4ODpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMTg5Olx0XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxOTA6XHRcdFx0fVxuMjE5MTpcdFxuMjE5MjpcdFx0XHRjcCYjNDM7JiM0Mzs7XG4yMTkzOlx0bmV4dF9rZXk6XG4yMTk0Olx0XHRcdGlmICghcHJldl9rZXkpXG4yMTk1Olx0XHRcdFx0cHJldl9rZXkgPSBidWZfcHJldmtleTtcbjIxOTY6XHRcbjIxOTc6XHRcdFx0c3dhcChwcmV2X2tleSwga2V5KTtcbjIxOTg6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yMTk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMTIKCQkJCQkJCW91dHB1dDogMjExCgkJCQkJCQl0aG91Z2h0czogNjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgcG90ZW50aWFsIGZvciAzMi1iaXQgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgYW5kIHNpemVzIGZvciB1c2VyLXNwYWNlIG1lbW9yeSBhY2Nlc3Nlcywgc3BlY2lmaWNhbGx5IHdoZW4gbXVsdGlwbHlpbmcgYGNwYCBhbmQgYG1hcC0mZ3Q7a2V5X3NpemVgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGB1MzJgIHZhbHVlcywgYW5kIGEgbGFyZ2UgcHJvZHVjdCAoJmd0Oz0gNEdCKSBjb3VsZCB3cmFwIGFyb3VuZCwgbGVhZGluZyB0byBpbmNvcnJlY3QgcG9pbnRlciBhcml0aG1ldGljIGluIHRoZSBrZXJuZWwgd2hlbiBhY2Nlc3NpbmcgdXNlciBzcGFjZSB2aWEgYHZvaWQgX191c2VyICpgIHBvaW50ZXJzLiBUaGlzIGNvdWxkIGNhdXNlIGRhdGEgY29ycnVwdGlvbiBhbmQgcmVhZC93cml0ZSBpbnRvIHdyb25nIG1lbW9yeSBhZGRyZXNzZXMuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyB0aGlzIHdpdGggYChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZWAgY2FzdGluZywgd2hpY2ggcHJldmVudHMgdGhlIDMyLWJpdCBvdmVyZmxvdy4gTm93LCB0aGUgYHNpemVfdGAgbXVsdGlwbGljYXRpb24gc2hvdWxkIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIHJlcXVpcmVkIG9mZnNldCBhbmQgc2l6ZSwgZW5zdXJpbmcgZGF0YSBpcyBjb3BpZWQgdG8gdGhlIGludGVuZGVkIHVzZXIgc3BhY2UgbG9jYXRpb24uCgpOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgYW5hbHl6ZTogdGhlIHBhdGNoIGl0c2VsZiBhdm9pZHMgb3ZlcmZsb3cgaW4gcG9pbnRlciBjYWxjdWxhdGlvbnMsIGVuc3VyaW5nIGNvcnJlY3QgYnVmZmVyIHNpemVzIGZvciBjb3B5IG9wZXJhdGlvbnMuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwgbWVtb3J5IGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBga2V5YCBhbmQgYHZhbHVlYCBkYXRhIGFyZSBmaWxsZWQgYnkgdGhlaXIgcmVzcGVjdGl2ZSBrZXJuZWwgbWFwIG9wZXJhdGlvbnMgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBpbiB0aGUgYmF0Y2ggbWFwIG9wZXJhdGlvbnMsIGBrZXlzYCBhbmQgYHZhbHVlc2Agd2VyZSBwb3B1bGF0ZWQgZnJvbSBoYXNoIG1hcCBlbGVtZW50cywgc28gdGhhdCYjMzk7cyBzYWZlLiBJdCYjMzk7cyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyBmaXggdG8gcHJvdGVjdCB1c2VyLXNwYWNlIGRhdGEgYWNjZXNzZXMuCgpTcGVjaWZpY2FsbHksIGl0IHByZXZlbnRzIGludGVnZXIgd3JhcHBpbmcgaW4gdXNlciBidWZmZXIgcG9pbnRlciBjYWxjdWxhdGlvbnMsIHdoaWNoIGlzIHZlcnkgZGlmZmVyZW50IGZyb20gS01TQU4mIzM5O3MgZm9jdXMuIEtNU0FOJiMzOTtzIHB1cnBvc2UgaXMgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvbGVha3MsIGVzcGVjaWFsbHkgd2l0aGluIGtlcm5lbCBtZW1vcnkuIEhlcmUsIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGlmIHRoZXJlIHdlcmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBrZXJuZWwgbWVtb3J5LiBCdXQgdGhpcyBpcyBwcmltYXJpbHkgYSB1c2VyIGFkZHJlc3MgY2FsY3VsYXRpb24gaXNzdWUuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgKmtlcm5lbCogbWVtb3J5OyBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSB3ZSBjb3JyZWN0bHkgY2FsY3VsYXRlIGFkZHJlc3NlcyBmb3IgKnVzZXIqIG1lbW9yeS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGZpZWxkczogTm8uCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlczogTm8uCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdpdGggbGF0ZXIgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBmaWVsZHM6IE5vLgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2VzcyBpbiBleGlzdGluZyBidWZmZXJzOiBOby4KCkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gVGhpcyBpcyBwdXJlbHkgYW4gaW50ZWdlciBvdmVyZmxvdyBmaXgsIG5vdCBhIEtNU0FOIGlzc3VlLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gd3JpdGUgYSBjbGVhciBhbmQgY29uY2lzZSBgS01TQU5SZWFzb25pbmdgIHNlY3Rpb24gdG8gY2xlYXJseSBjb250cmFzdCB0aGUgcm9sZXMgb2YgS0FTQU4gYW5kIEtNU0FOIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgMzItYml0IGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0IGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsIGFuZCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSBieSBjYXN0aW5nIG9wZXJhbmRzIHRvIGBzaXplX3RgIGJlZm9yZSBtdWx0aXBseWluZyAoZS5nLiwgYChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemVgKS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBtZW1vcnkgYnVmZmVycyBjb3BpZWQgdG8vZnJvbSB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgbWFuYWdlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHBvaW50ZXIgb2Zmc2V0cyB3b3VsZCBmYWxsIHVuZGVyIG1lbW9yeSBib3VuZHMgY2hlY2tpbmcgKEtBU0FOKSByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24gKEtNU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgMzItYml0IGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0IGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsIGFuZCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSBieSBjYXN0aW5nIG9wZXJhbmRzIHRvIGBzaXplX3RgIGJlZm9yZSBtdWx0aXBseWluZyAoZS5nLiwgYChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemVgKS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBtZW1vcnkgYnVmZmVycyBjb3BpZWQgdG8vZnJvbSB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgbWFuYWdlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHBvaW50ZXIgb2Zmc2V0cyB3b3VsZCBmYWxsIHVuZGVyIG1lbW9yeSBib3VuZHMgY2hlY2tpbmcgKEtBU0FOKSByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24gKEtNU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0MzoyNS41OTEzNzIxMTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzEyMzUwNzc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfZG9fYmF0Y2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZWApLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0MzoyNS41OTEzNzcyNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjM2NTA2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NTc3MjVkZDNkZWZkZDI5NzM0MTkzZGNiYjE4OTg0ZWIwOGMwYjNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTE6NDM6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC0xOTc3LDEwICsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbi1cXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcXG4tXFx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4tXFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXFxuLVxcdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XFxuK1xcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXFxuK1xcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4rXFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4rXFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xcbiBcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCBpbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcbiBcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcXG4gXFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4tXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4rXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbiBcXHRcXHRcXHRcXHQgICBtYXAtXFx1MDAzZWtleV9zaXplKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0yMDk4LDkgKzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4gXFxuIFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbiBcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbi1cXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsXFxuIFxcdFxcdCAgICBtYXAtXFx1MDAzZWtleV9zaXplKSB8fFxcbi1cXHRcXHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXFxuK1xcdFxcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXFxuQEAgLTIxNzksMTIgKzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbiBcXG4tXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLCBrZXksXFxuK1xcdFxcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLCBrZXksXFxuIFxcdFxcdFxcdFxcdCBtYXAtXFx1MDAzZWtleV9zaXplKSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDM6MjcuMDE1NjM0MzUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NzIyMzExNzk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfZG9fYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1NzcyNWRkM2RlZmRkMjk3MzQxOTNkY2JiMTg5ODRlYjA4YzBiM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDExOjQzOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYmQzNzA0ZWQ5MzMzZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTE5NzcsMTAgKzE5NzcsMTAgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuLVx0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyB0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuLVx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcbi1cdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuLVx0ICAgIHZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbitcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxuK1x0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuK1x0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbitcdCAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbiBcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdFx0Z290byBhZnRlcl9sb29wO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCBpbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXG4gXHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHRcdFx0ICAgbWFwLVx1MDAzZWtleV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0yMDk4LDkgKzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbiBcbiBcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCsrKSB7XG4gXHRcdGVyciA9IC1FRkFVTFQ7XG4tXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbitcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4gXHRcdCAgICBtYXAtXHUwMDNla2V5X3NpemUpIHx8XG4tXHRcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSlcbitcdFx0ICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXG5AQCAtMjE3OSwxMiArMjE3OSwxMiBAQCBpbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcbi1cdFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbitcdFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSwga2V5LFxuIFx0XHRcdFx0IG1hcC1cdTAwM2VrZXlfc2l6ZSkpIHtcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXHRcdH1cbi1cdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyBjcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuK1x0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjI3LjAxNTYzNTkwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzA2OTQ4MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBCYXRjaCBNYXAgT3BlcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGJhdGNoIG9wZXJhdGlvbnMgd2l0aGluIEJQRiBtYXBzLCBzcGVjaWZpY2FsbHkgaGFzaCB0YWJsZXMsIGdpdmVuIHRoZSBgaGFzaHRhYi5jYCBpbmNsdXNpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGRpZmZzIOKAkyBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGNoYW5nZWQuXG5cblRoZSBkaWZmIGhpZ2hsaWdodHMgb3BlcmF0aW9ucyBsaWtlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEknbSBzZWVpbmcgbXVsdGlwbGljYXRpb25zIGFuZCBwb2ludGVyIGFyaXRobWV0aWMgcG90ZW50aWFsbHkgdXNpbmcgMzItYml0IHR5cGVzLCBsaWtlIGAoc2l6ZV90KXRvdGFsICoga2V5X3NpemVgIG9yIGBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZWAuIEJpbmdvLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGFyZ2V0aW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3IsIG1vcmUgbGlrZWx5LCBpc3N1ZXMgd2l0aCBwb2ludGVyIGFyaXRobWV0aWMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2VyIGtleXMgb3IgYSBoaWdoIG51bWJlciBvZiBpdGVyYXRpb25zLlxuXG5UaGUgbGlrZWx5IHJvb3QgY2F1c2UgaXMgYSB0eXBlIG1pc21hdGNoIG9yIHBvdGVudGlhbCBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgb3Igc2l6ZXMgd2l0aGluIHRoZXNlIGJhdGNoIG9wZXJhdGlvbnMuIFVzaW5nIGEgMzItYml0IGludGVnZXIgZm9yIG11bHRpcGxpY2F0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtleSBzaXplcyBhbmQgYmF0Y2ggY291bnRzLCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy5cblxuSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyB3aXRoIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gcnVuIGEgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIGludm9sdmVkIGNvZGUgc2VjdGlvbnMgYW5kIHNlYXJjaCB1c2luZyBgZ3JlcHBlcmAgb3Igc2ltaWxhciB0b29saW5nIHRvIGVuc3VyZSB0aGUgaXNzdWUgaXMgaXNvbGF0ZWQgYW5kIHRoZSBwcm92aWRlZCBzb2x1dGlvbiBpcyBzb3VuZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbXVsdGlwbGljYXRpb24gYW5kIHBvaW50ZXIgYXJpdGhtZXRpYyBjYWxjdWxhdGlvbnMgYXJlIGJlaW5nIGRvbmUsIGFuZCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHR5cGVzIGJlaW5nIHVzZWQgYW5kIHdoZXJlIHRoZXNlIHZhbHVlcyBhcmUgY29taW5nIGZyb20uIFRoZSBnb2FsIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm9wb3NlZCBmaXggYWRlcXVhdGVseSBhZGRyZXNzZXMgdGhlIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hpbGUgbWFpbnRhaW5pbmcgcGVyZm9ybWFuY2UgaW4gYmF0Y2ggb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjQxLjMyMjU5MTYyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjkxMDY1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcnJheW1hcC5jPTg1OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzQtXFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzU6XFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3Ni1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5OS1cXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkwMDpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAxLVxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE1MDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE0LVxcdC5tYXBfZ2VuX2xvb2t1cCA9IGFycmF5X29mX21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNTE1OlxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE2LVxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4Mi1cXHQubWFwX2RlbGV0ZV9lbGVtID0gdHJpZV9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NzgzOlxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODQtXFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDY1PWludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyMi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMTIzOmludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVxcdFxcdFxcdFxcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDM6NDEuODUxNzA0MDIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQwMjI1MDA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQlBGIEhhc2ggVGFibGUgSXNzdWVzKipcblxuQWxyaWdodCwgc28gd2UncmUgc2VlaW5nIHNvbWV0aGluZyBmdW5reSB3aXRoIEJQRi4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBsaWtlbHkgaW52b2x2ZW1lbnQgb2YgaGFzaCB0YWJsZXMsIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBJIG5lZWQgdG8gcmV2aWV3IGhvdyB0aGUgaGFzaCB0YWJsZXMgdGhlbXNlbHZlcyBhcmUgc3RydWN0dXJlZCwgaG93IGNvbGxpc2lvbnMgYXJlIGhhbmRsZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgLSBpbnNlcnRpb24sIGRlbGV0aW9uLCBsb29rdXAsIGFuZCBpdGVyYXRpb24g4oCTIGFyZSBpbXBsZW1lbnRlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gd2l0aGluIHRoZSB0YWJsZSdzIGludGVybmFscyB3b3VsZCBiZSBhIGhpZ2ggcHJpb3JpdHkgdG8gY2hlY2suXG5cblRoZW4sIHNpbmNlIHRoaXMgbGlrZWx5IGludGVyYWN0cyB3aXRoIHVzZXIgc3BhY2UsIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgbmVlZHMgYSB0aG9yb3VnaCBnb2luZyBvdmVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGNhbGxzIGludGVyZmFjZSB3aXRoIHRoZSBoYXNodGFibGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIHBvaW50cyB3aGVyZSBkYXRhIGZsb3dzIGJldHdlZW4gdXNlciBzcGFjZSBhbmQga2VybmVsIHNwYWNlIOKAkyBhbnkgaW5jb25zaXN0ZW5jaWVzIG9yIHZ1bG5lcmFiaWxpdGllcyB0aGVyZSBjb3VsZCBleHBsYWluIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gSSBuZWVkIHRvIHNjcnV0aW5pemUgcGFyYW1ldGVyIHZhbGlkYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBzeXNjYWxscyBpbnRlcmFjdGluZyB3aXRoIHRoZSBCUEYgaGFzaCB0YWJsZS4gTGV04oCZcyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcywgYXMgdGhlc2UgdGhpbmdzIGFyZSBhbG1vc3QgYWx3YXlzIGludGVydHdpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDM6NDUuMjUzOTU2NzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk3MDpcXHRcXHQvKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxcbjE5NzE6XFx0XFx0ICogdW5sb2NraW5nIHRoZSByY3UuXFxuMTk3MjpcXHRcXHQgKi9cXG4xOTczOlxcdFxcdGlmICghYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoYmF0Y2ggKyAxIFxcdTAwM2MgaHRhYi1cXHUwMDNlbl9idWNrZXRzKSkge1xcbjE5NzQ6XFx0XFx0XFx0YmF0Y2grKztcXG4xOTc1OlxcdFxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbjE5NzY6XFx0XFx0fVxcbjE5Nzc6XFx0XFxuMTk3ODpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xOTc5OlxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMTk4MDpcXHRcXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxcbjE5ODE6XFx0XFx0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxcbjE5ODI6XFx0XFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4xOTgzOlxcdFxcdCAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcXG4xOTg0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMTk4NTpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMTk4NjpcXHRcXHR9XFxuMTk4NzpcXHRcXG4xOTg4OlxcdFxcdHRvdGFsICs9IGJ1Y2tldF9jbnQ7XFxuMTk4OTpcXHRcXHRiYXRjaCsrO1xcbjE5OTA6XFx0XFx0aWYgKGJhdGNoIFxcdTAwM2U9IGh0YWItXFx1MDAzZW5fYnVja2V0cykge1xcbjE5OTE6XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4xOTkyOlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xOTkzOlxcdFxcdH1cXG4xOTk0OlxcdFxcdGdvdG8gYWdhaW47XFxuMTk5NTpcXHRcXG4xOTk2OlxcdGFmdGVyX2xvb3A6XFxuMTk5NzpcXHRcXHRpZiAocmV0ID09IC1FRkFVTFQpXFxuMTk5ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTk5OlxcdFxcbjIwMDA6XFx0XFx0LyogY29weSAjIG9mIGVudHJpZXMgYW5kIG5leHQgYmF0Y2ggKi9cXG4yMDAxOlxcdFxcdHViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xcbjIwMDI6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1YmF0Y2gsIFxcdTAwMjZiYXRjaCwgc2l6ZW9mKGJhdGNoKSkgfHxcXG4yMDAzOlxcdFxcdCAgICBwdXRfdXNlcih0b3RhbCwgXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCkpXFxuMjAwNDpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIwMDU6XFx0XFxuMjAwNjpcXHRvdXQ6XFxuMjAwNzpcXHRcXHRrdmZyZWUoa2V5cyk7XFxuMjAwODpcXHRcXHRrdmZyZWUodmFsdWVzKTtcXG4yMDA5OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjQ1LjI1NDExMDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDI0NjE0NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBUcmlja3kgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZnVuY3Rpb24gYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLi4uIHNvdW5kcyBsaWtlIGEgbW91dGhmdWwsIGFuZCBhIHBvdGVudGlhbGx5IGltcG9ydGFudCBvbmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGVyIGlzICpjcml0aWNhbCogaW4gZGVidWdnaW5nIHRoaXMgc29ydCBvZiB0aGluZy4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGlzIGluaXRpYXRpbmcgdGhpcyBsb29rdXAtYW5kLWRlbGV0ZSBvcGVyYXRpb24gb24gdGhlIGhhc2ggdGFibGUuIElzIHRoaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgZXh0ZXJuYWwgZXZlbnQsIG9yIGlzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW50ZXJuYWwgcHJvY2Vzcz8gVGhlIGNhbGxlciBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgXCJ3aHlcIiBhbmQsIHBvdGVudGlhbGx5LCB0aGUgcm9vdCBjYXVzZSBvZiBhbnkgaXNzdWVzIEkgZW5jb3VudGVyIGRvd24gdGhlIGxpbmUuIEl0J3MgdGltZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhvc2UgbGF5ZXJzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0Mzo1Mi42Nzg3MjczODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5MTk5Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzcxPXN0YXRpYyBpbnRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzcyOl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzczLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxMz1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxNjpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE3LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyMT1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMjQte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMjU6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzMD1odGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDMyLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDMzOlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzQtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzOD1odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0MS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0MjpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0Nz1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1MC17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA1MTpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDUyLVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDU2PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTkte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNjA6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYxLVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDY1PWh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDY3LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY4OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjktXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDczPWh0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA3Ni17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA3NzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzgtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjUzLjQ1NzkzMjU4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzMwMTI4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEJhdGNoIE9wZXJhdGlvbnMgaW4gQlBGIE1hcHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBiYXRjaCBvcGVyYXRpb25zIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGV5IGhhbmRsZSBtYXAgaW50ZXJhY3Rpb25zLiBNeSBpbW1lZGlhdGUgdGFyZ2V0IGlzIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBJJ20gemVyb2luZyBpbiBvbiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGVpciBsb2dpYy4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGFzcGVjdHMgb2YgYXRvbWljaXR5LCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBudWFuY2VzIG9mIGhvdyBkYXRhIGlzIGJhdGNoZWQsIGFuZCB3aGF0IHNwZWNpZmljIG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0Mzo1OC4yOTA5NDgwODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMzAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMzA6XFx0XFx0aWYgKHB1dF91c2VyKDAsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwMzE6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjAzMjpcXHRcXG4yMDMzOlxcdFxcdGtleSA9IGt2bWFsbG9jKG1hcC1cXHUwMDNla2V5X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMDM0OlxcdFxcdGlmICgha2V5KVxcbjIwMzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjAzNjpcXHRcXG4yMDM3OlxcdFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbjIwMzg6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMDM5OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4yMDQwOlxcdFxcdFxcdFxcdFxcdCAgIG1hcC1cXHUwMDNla2V5X3NpemUpKVxcbjIwNDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA0MjpcXHRcXG4yMDQzOlxcdFxcdFxcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XFxuMjA0NDpcXHRcXHRcXHRcXHRlcnIgPSBicGZfbWFwX29mZmxvYWRfZGVsZXRlX2VsZW0obWFwLCBrZXkpO1xcbjIwNDU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA0NjpcXHRcXHRcXHR9XFxuMjA0NzpcXHRcXG4yMDQ4OlxcdFxcdFxcdGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjIwNDk6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjIwNTA6XFx0XFx0XFx0ZXJyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XFxuMjA1MTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMDUyOlxcdFxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMjA1MzpcXHRcXHRcXHRpZiAoZXJyKVxcbjIwNTQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA1NTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yMDU2OlxcdFxcdH1cXG4yMDU3OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCwgXFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcXG4yMDU4OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjA1OTpcXHRcXG4yMDYwOlxcdFxcdGt2ZnJlZShrZXkpO1xcbjIwNjE6XFx0XFxuMjA2MjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIwNjM6XFx0fVxcbjIwNjQ6XFx0XFxuMjA2NTpcXHRpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4yMDY2OlxcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuMjA2NzpcXHRcXHRcXHRcXHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuMjA2ODpcXHR7XFxuMjA2OTpcXHRcXHR2b2lkIF9fdXNlciAqdmFsdWVzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLnZhbHVlcyk7XFxuMjA3MDpcXHRcXHR2b2lkIF9fdXNlciAqa2V5cyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5rZXlzKTtcXG4yMDcxOlxcdFxcdHUzMiB2YWx1ZV9zaXplLCBjcCwgbWF4X2NvdW50O1xcbjIwNzI6XFx0XFx0dm9pZCAqa2V5LCAqdmFsdWU7XFxuMjA3MzpcXHRcXHRpbnQgZXJyID0gMDtcXG4yMDc0OlxcdFxcbjIwNzU6XFx0XFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MsXFxuMjA3NjpcXHRcXHRcXHRcXHRcXHQgICAgIEJQRl9GX0xPQ0sgfCBCUEZfRl9DUFUgfCBCUEZfRl9BTExfQ1BVUyk7XFxuMjA3NzpcXHRcXHRpZiAoZXJyKVxcbjIwNzg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMDc5OlxcdFxcbjIwODA6XFx0XFx0dmFsdWVfc2l6ZSA9IGJwZl9tYXBfdmFsdWVfc2l6ZShtYXAsIGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIwODE6XFx0XFxuMjA4MjpcXHRcXHRtYXhfY291bnQgPSBhdHRyLVxcdTAwM2ViYXRjaC5jb3VudDtcXG4yMDgzOlxcdFxcdGlmICghbWF4X2NvdW50KVxcbjIwODQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjA4NTpcXHRcXG4yMDg2OlxcdFxcdGlmIChwdXRfdXNlcigwLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMDg3OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIwODg6XFx0XFxuMjA4OTpcXHRcXHRrZXkgPSBrdm1hbGxvYyhtYXAtXFx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMjA5MDpcXHRcXHRpZiAoIWtleSlcXG4yMDkxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIwOTI6XFx0XFxuMjA5MzpcXHRcXHR2YWx1ZSA9IGt2bWFsbG9jKHZhbHVlX3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMDk0OlxcdFxcdGlmICghdmFsdWUpIHtcXG4yMDk1OlxcdFxcdFxcdGt2ZnJlZShrZXkpO1xcbjIwOTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjA5NzpcXHRcXHR9XFxuMjA5ODpcXHRcXG4yMDk5OlxcdFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbjIxMDA6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTAxOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4yMTAyOlxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZWtleV9zaXplKSB8fFxcbjIxMDM6XFx0XFx0XFx0ICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXFxuMjEwNDpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTA1OlxcdFxcbjIxMDY6XFx0XFx0XFx0ZXJyID0gYnBmX21hcF91cGRhdGVfdmFsdWUobWFwLCBtYXBfZmlsZSwga2V5LCB2YWx1ZSxcXG4yMTA3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIxMDg6XFx0XFxuMjEwOTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxMTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjExMTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yMTEyOlxcdFxcdH1cXG4yMTEzOlxcdFxcbjIxMTQ6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50LCBcXHUwMDI2Y3AsIHNpemVvZihjcCkpKVxcbjIxMTU6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTE2OlxcdFxcbjIxMTc6XFx0XFx0a3ZmcmVlKHZhbHVlKTtcXG4yMTE4OlxcdFxcdGt2ZnJlZShrZXkpO1xcbjIxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQzOjU4LjI5MTIwMDYwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzYyMjk3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgU3lzY2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzcGVjaWZpYyBCUEYgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCBhdCB0aGUga2VybmVsIGxldmVsLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMjEyMCB0aHJvdWdoIDIyMDAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBhcmd1bWVudCBwYXJzaW5nIGFuZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIHN5c2NhbGwgZW50cnkgcG9pbnQgcmVzaWRlcy4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBzZW5zaWJsZSBhbmQgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBpbiBhIGNsZWFyIHdheSwgYXMgdGhpcyBzZWN0aW9uIGxpa2VseSB0b3VjaGVzIHVwb24gQlBGIHByb2dyYW0gbG9hZGluZywgbWFwIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBoZWxwZXIgZnVuY3Rpb24gY2FsbHMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgYXJndW1lbnQgdmFsaWRhdGlvbiwgc2VjdXJpdHkgY2hlY2tzLCBhbmQgY2FsbHMgdG8gbG93ZXItbGV2ZWwgQlBGIGhlbHBlciBmdW5jdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgbG9ja2luZyBzdHJhdGVnaWVzLCBhbmQgaG93IHRoZSBzeXNjYWxsIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgVk0uIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCBsZXQgbWUgbWFwIGhvdyB0aGUgc3lzY2FsbCBpbnRlcmFjdHMgd2l0aCB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLiBJIGFudGljaXBhdGUgYSByZWFzb25hYmxlIG1peCBvZiBDIGNvZGUsIG1heWJlIHNvbWUgbWFjcm9zLCBhbmQgaG9wZWZ1bGx5IG5vdCB0b28gbWFueSBuZXN0ZWQgY29uZGl0aW9uYWxzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjAwLjY1MzUwMTAxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjIxMjE6XFx0fVxcbjIxMjI6XFx0XFxuMjEyMzpcXHRpbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuMjEyNDpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuMjEyNTpcXHRcXHRcXHRcXHRcXHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4yMTI2OlxcdHtcXG4yMTI3OlxcdFxcdHZvaWQgX191c2VyICp1b2JhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XFxuMjEyODpcXHRcXHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmluX2JhdGNoKTtcXG4yMTI5OlxcdFxcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gudmFsdWVzKTtcXG4yMTMwOlxcdFxcdHZvaWQgX191c2VyICprZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmtleXMpO1xcbjIxMzE6XFx0XFx0dm9pZCAqYnVmLCAqYnVmX3ByZXZrZXksICpwcmV2X2tleSwgKmtleSwgKnZhbHVlO1xcbjIxMzI6XFx0XFx0dTMyIHZhbHVlX3NpemUsIGNwLCBtYXhfY291bnQ7XFxuMjEzMzpcXHRcXHRpbnQgZXJyO1xcbjIxMzQ6XFx0XFxuMjEzNTpcXHRcXHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncywgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSk7XFxuMjEzNjpcXHRcXHRpZiAoZXJyKVxcbjIxMzc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMTM4OlxcdFxcbjIxMzk6XFx0XFx0dmFsdWVfc2l6ZSA9IGJwZl9tYXBfdmFsdWVfc2l6ZShtYXAsIGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIxNDA6XFx0XFxuMjE0MTpcXHRcXHRtYXhfY291bnQgPSBhdHRyLVxcdTAwM2ViYXRjaC5jb3VudDtcXG4yMTQyOlxcdFxcdGlmICghbWF4X2NvdW50KVxcbjIxNDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjE0NDpcXHRcXG4yMTQ1OlxcdFxcdGlmIChwdXRfdXNlcigwLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMTQ2OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIxNDc6XFx0XFxuMjE0ODpcXHRcXHRidWZfcHJldmtleSA9IGt2bWFsbG9jKG1hcC1cXHUwMDNla2V5X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMTQ5OlxcdFxcdGlmICghYnVmX3ByZXZrZXkpXFxuMjE1MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMTUxOlxcdFxcbjIxNTI6XFx0XFx0YnVmID0ga3ZtYWxsb2MobWFwLVxcdTAwM2VrZXlfc2l6ZSArIHZhbHVlX3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMTUzOlxcdFxcdGlmICghYnVmKSB7XFxuMjE1NDpcXHRcXHRcXHRrdmZyZWUoYnVmX3ByZXZrZXkpO1xcbjIxNTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjE1NjpcXHRcXHR9XFxuMjE1NzpcXHRcXG4yMTU4OlxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjE1OTpcXHRcXHRwcmV2X2tleSA9IE5VTEw7XFxuMjE2MDpcXHRcXHRpZiAodWJhdGNoIFxcdTAwMjZcXHUwMDI2IGNvcHlfZnJvbV91c2VyKGJ1Zl9wcmV2a2V5LCB1YmF0Y2gsIG1hcC1cXHUwMDNla2V5X3NpemUpKVxcbjIxNjE6XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTYyOlxcdFxcdGtleSA9IGJ1ZjtcXG4yMTYzOlxcdFxcdHZhbHVlID0ga2V5ICsgbWFwLVxcdTAwM2VrZXlfc2l6ZTtcXG4yMTY0OlxcdFxcdGlmICh1YmF0Y2gpXFxuMjE2NTpcXHRcXHRcXHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xcbjIxNjY6XFx0XFxuMjE2NzpcXHRcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7KSB7XFxuMjE2ODpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE2OTpcXHRcXHRcXHRlcnIgPSBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2dldF9uZXh0X2tleShtYXAsIHByZXZfa2V5LCBrZXkpO1xcbjIxNzA6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjE3MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxNzI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjE3MzpcXHRcXHRcXHRlcnIgPSBicGZfbWFwX2NvcHlfdmFsdWUobWFwLCBrZXksIHZhbHVlLFxcbjIxNzQ6XFx0XFx0XFx0XFx0XFx0XFx0IGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIxNzU6XFx0XFxuMjE3NjpcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9FTlQpXFxuMjE3NzpcXHRcXHRcXHRcXHRnb3RvIG5leHRfa2V5O1xcbjIxNzg6XFx0XFxuMjE3OTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxODA6XFx0XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTgxOlxcdFxcbjIxODI6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsIGtleSxcXG4yMTgzOlxcdFxcdFxcdFxcdFxcdCBtYXAtXFx1MDAzZWtleV9zaXplKSkge1xcbjIxODQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTg1OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjE4NjpcXHRcXHRcXHR9XFxuMjE4NzpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcXG4yMTg4OlxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjE4OTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbjIxOTA6XFx0XFx0XFx0fVxcbjIxOTE6XFx0XFxuMjE5MjpcXHRcXHRcXHRjcCsrO1xcbjIxOTM6XFx0bmV4dF9rZXk6XFxuMjE5NDpcXHRcXHRcXHRpZiAoIXByZXZfa2V5KVxcbjIxOTU6XFx0XFx0XFx0XFx0cHJldl9rZXkgPSBidWZfcHJldmtleTtcXG4yMTk2OlxcdFxcbjIxOTc6XFx0XFx0XFx0c3dhcChwcmV2X2tleSwga2V5KTtcXG4yMTk4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjIxOTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDowMC42NTM3MjcxNzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzNzQ0MTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoaXMgcGF0Y2ggcHJlc2VudHMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgcmVhY2hhYmlsaXR5LiBUaGUgZnVuY3Rpb25zIG1vZGlmaWVkIOKAkyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCDigJMgYXJlIGFsbCBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIEJQRiBzeXNjYWxsczogYEJQRl9NQVBfTE9PS1VQX0JBVENIYCwgYEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0hgLCBgQlBGX01BUF9VUERBVEVfQkFUQ0hgLCBhbmQgYEJQRl9NQVBfREVMRVRFX0JBVENIYC4gQ29uc2lkZXJpbmcgdGhhdCBCUEYgaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGEgY3JpdGljYWwgc3Vic3lzdGVtLCB0aGlzIGlzIGEgY2xlYXIgXCJ5ZXNcIiBpbiB0ZXJtcyBvZiBmdXp6aW5nIHZhbHVlLiBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC5cblxuTm93IGZvciB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgdG8gZW5zdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXZlbiBjb21waWxlZCBpbiBhbmQgYWNjZXNzaWJsZS4gSXQgbG9va3MgbGlrZSBCUEYgc3lzY2FsbHMgcmVxdWlyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCAoYW5kIGBDT05GSUdfQlBGYCkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGZvciBib3RoIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHZlcmlmeSB0aGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBhcmUgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MDQuMDkxMTcxMzE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyOTExMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaHRhYlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDowNC4yMTQ0NjUwNjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIwODA0MzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGwgc3VwcG9ydC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZC4gTGV0J3Mgc3RhcnQgdGhlcmUuIFRvIGNvbmZpcm0gaXRzIGV4YWN0IG5hbWUgYW5kIGxvY2F0aW9uLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgdHdvIG9idmlvdXMgcGxhY2VzIHRvIGNoZWNrIGZvciBgQlBGX1NZU0NBTExgIChvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxsIHNldHVwKSBhcmUgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgYW5kIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJ2xsIG5hdmlnYXRlIHRvIHRob3NlIGZpbGVzIHRvIHZlcmlmeSB0aGUgZXhhY3Qgb3B0aW9uIG5hbWUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTMxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MDcuNDIyNTEwNjM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYwNzYwMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjA4Ljk4MzI3NTEzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTg3MDI0MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBCUEYgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIEJQRiBmZWF0dXJlIGVuYWJsZW1lbnQgZmxhZywgb3IgbWF5YmUgSSdtIHRyeWluZyB0byByZWNhbGwgYSByZWxhdGVkIG9wdGlvbiB0aGF0IEkgd2FudCB0byBkb3VibGUtY2hlY2suIENvdWxkIGJlIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aWVkIHRvIGEgc3BlY2lmaWMgQlBGIGhlbHBlciB2ZXJzaW9uLiBJIHN1c3BlY3QgbGluZSAyNyB3aWxsIGxpa2VseSBsZWFkIG1lIHRvIHRoZSBtYWluIGVudHJ5IHBvaW50IG9yIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJIGFtIGhvcGluZyB0byBnZXQgdG8gdGhlIHJvb3QgY2F1c2Ugb2YgYW4gaXNzdWUgSSdtIHdvcmtpbmcgdGhyb3VnaC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlIGJhc2UgY29uZmlndXJhdGlvbiB0aGF0IGFsbCBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gaXMgcmVsaWFudCBvbi4gVGltZSB0byBzZWUgd2hhdCdzIHRoZXJlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoxMC45NzAzMDEzMjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjEwLjk3MDM2MTc1NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzU4NzYwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgRnVuY3Rpb24gQ2FsbHMgZm9yIFN5bWJvbCBFeHRyYWN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVkOiBgQlBGX1NZU0NBTExgIOKAkyBubyBDT05GSUdfIHByZWZpeCwgZ290IGl0LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZnVuY3Rpb24gYW5hbHlzaXMuIEZvY3VzaW5nIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSdtIHN0YXJ0aW5nIHdpdGggYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBub24tc3RhdGljIGNhbGxlcnMgYmVjYXVzZSBvZiB0aGUgaW1wYWN0IG9uIHN5bWJvbCBleHRyYWN0aW9uLiBMb29raW5nIGF0IHRoZSBjYWxsIHNpdGVzLCBJIHNlZSB0aGF0IHRoaXMgc3RhdGljIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhIHZhcmlldHkgb2YgZnVuY3Rpb25zLCBpbmNsdWRpbmcgdGhlIGxvb2t1cC9kZWxldGUgYmF0Y2ggZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHNldmVyYWwgaHRhYiBhbmQgbHJ1IHZhcmlhbnRzLlxuXG5Nb3ZpbmcgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSBzcG90IHRoZSBgZ2VuZXJpY19tYXBfKl9iYXRjaGAgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RhdGljIG5hdHVyZSBvZiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgd2lsbCBwcmV2ZW50IGl0cyBpbmNsdXNpb24gaW4gdGhlIHN5bWJvbCB0YWJsZXMgU3l6a2FsbGVyIGlzIHB1bGxpbmcgZnJvbSAodm1saW51eC9rYWxsc3ltcykuIFNpbmNlIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYSAuYyBmaWxlLCBpbmxpbmluZyBpcyBhIHBvc3NpYmlsaXR5LiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3RhdGljIGZ1bmN0aW9ucyBiZSByZWxpYWJseSB1c2VkIGluIEZvY3VzU3ltYm9scyBpZiBub3QgaW5saW5lZD9cblxuVGhlIHN0YW5kYXJkIGFwcHJvYWNoIHRvIGhhbmRsZSB0aGlzIGlzIHRvIGluY2x1ZGUgKmJvdGgqIHRoZSBzdGF0aWMgZnVuY3Rpb24gKmFuZCogdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCwgc3VjaCBhcyBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gZXhhbWluZSBgYnBmX21hcF9kb19iYXRjaGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBiYXRjaCBvcGVyYXRpb25zIGFyZSBhY3R1YWxseSBkaXNwYXRjaGVkLiBUaGlzIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHN5c2NhbGwgZnVuY3Rpb25zIGFuZCB0aGUgaGFzaHRhYiBmdW5jdGlvbnMsIHNvbGlkaWZ5aW5nIHRoZSBuZWVkIHRvIGVuc3VyZSAqYWxsKiB0aGVzZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBTeXprYWxsZXIgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjE2LjcyOTEyNDQ2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MDE2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2xvb2t1cF9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJyYXltYXAuYz04NTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODc0LVxcdC5tYXBfY2hlY2tfYnRmID0gYXJyYXlfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODc1OlxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzYtXFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODg1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTktXFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo5MDA6XFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkwMS1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cXHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNTpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNi1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2LSNkZWZpbmUgQkFUQ0hfT1BTKF9uYW1lKVxcdFxcdFxcdFxcXFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzpcXHQubWFwX2xvb2t1cF9iYXRjaCA9XFx0XFx0XFx0XFxcXFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4OlxcdF9uYW1lIyNfbWFwX2xvb2t1cF9iYXRjaCxcXHRcXHRcXFxcXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjktXFx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCA9XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxMj1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxMzpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTQtXFx0XFx0XFx0ICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyOT1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAzMDpodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzMS1cXHRcXHQgICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0Nj1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0NzpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDgtXFx0XFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2ND1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2NTpodGFiX2xydV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjYtXFx0XFx0XFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0Mz1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzc4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNzk6c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzODAtXFx0XFx0XFx0XFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4Mi1cXHQubWFwX2RlbGV0ZV9lbGVtID0gdHJpZV9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NzgzOlxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODQtXFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDY1PWludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyMi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMTIzOmludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVxcdFxcdFxcdFxcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU3NDc9c3RhdGljIGludCBicGZfbWFwX2RvX2JhdGNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTc3Ni1cXHRpZiAoY21kID09IEJQRl9NQVBfTE9PS1VQX0JBVENIKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU3Nzc6XFx0XFx0QlBGX0RPX0JBVENIKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbG9va3VwX2JhdGNoLCBtYXAsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Nzc4LVxcdGVsc2UgaWYgKGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoxNi43ODY3MjgzMjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNTMwOTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQmF0Y2ggTWFwIE9wZXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGJwZl9tYXBfZG9fYmF0Y2hgIGZ1bmN0aW9uLiBJdCdzIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEkga25vdyB0aGlzIGlzIHRoZSBjb3JlIG9mIGJhdGNoIHByb2Nlc3NpbmcgaW4gQlBGLCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEJQRiBtYXBzIHdoZW4gbXVsdGlwbGUgb3BlcmF0aW9ucyBhcmUgZ3JvdXBlZCB0b2dldGhlci4gSeKAmW0gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgbG9ja2luZywgZXJyb3IgY2hlY2tpbmcsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBiYXRjaCBjb250ZXh0LCBhbmQgdGhlbiB0aWUgdGhhdCB0byBob3cgdGhlIHVzZXItc3BhY2Ugc2lkZSBzZW5kcyB0aGUgaW5mb3JtYXRpb24gdG8gdGhpcyBmdW5jdGlvbi4gUmlnaHQsIGxldOKAmXMgZ28gY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IGhvdyBpdOKAmXMgaW1wbGVtZW50ZWQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkncmUgaGFuZGxpbmcgYXRvbWljaXR5IGFuZCBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIG1hcCBvcGVyYXRpb25zLCBhbmQgaWYgdGhleSd2ZSBpbXBsZW1lbnRlZCBhbnkgb3B0aW1pemF0aW9ucyBmb3IgdGhlIGJhdGNoaW5nIHRvIHJlZHVjZSBvdmVyaGVhZC4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGhhcyBhbnkgb2J2aW91cyBwaXRmYWxscyBJJ2QgbmVlZCB0byBjb25zaWRlciBpZiBJJ20gZGVzaWduaW5nIGEgbmV3IGJhdGNoIG1hcCBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MTkuNjIyMDQwNzczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Mjg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NzQ1OlxcdFxcdH0gd2hpbGUgKDApXFxuNTc0NjpcXHRcXG41NzQ3OlxcdHN0YXRpYyBpbnQgYnBmX21hcF9kb19iYXRjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG41NzQ4OlxcdFxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxcbjU3NDk6XFx0XFx0XFx0XFx0ICAgIGludCBjbWQpXFxuNTc1MDpcXHR7XFxuNTc1MTpcXHRcXHRib29sIGhhc19yZWFkICA9IGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9CQVRDSCB8fFxcbjU3NTI6XFx0XFx0XFx0XFx0IGNtZCA9PSBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIO1xcbjU3NTM6XFx0XFx0Ym9vbCBoYXNfd3JpdGUgPSBjbWQgIT0gQlBGX01BUF9MT09LVVBfQkFUQ0g7XFxuNTc1NDpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbjU3NTU6XFx0XFx0aW50IGVycjtcXG41NzU2OlxcdFxcbjU3NTc6XFx0XFx0aWYgKENIRUNLX0FUVFIoQlBGX01BUF9CQVRDSCkpXFxuNTc1ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41NzU5OlxcdFxcbjU3NjA6XFx0XFx0Q0xBU1MoZmQsIGYpKGF0dHItXFx1MDAzZWJhdGNoLm1hcF9mZCk7XFxuNTc2MTpcXHRcXG41NzYyOlxcdFxcdG1hcCA9IF9fYnBmX21hcF9nZXQoZik7XFxuNTc2MzpcXHRcXHRpZiAoSVNfRVJSKG1hcCkpXFxuNTc2NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtYXApO1xcbjU3NjU6XFx0XFx0aWYgKGhhc193cml0ZSlcXG41NzY2OlxcdFxcdFxcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2luYyhtYXApO1xcbjU3Njc6XFx0XFx0aWYgKGhhc19yZWFkIFxcdTAwMjZcXHUwMDI2ICEobWFwX2dldF9zeXNfcGVybXMobWFwLCBmKSBcXHUwMDI2IEZNT0RFX0NBTl9SRUFEKSkge1xcbjU3Njg6XFx0XFx0XFx0ZXJyID0gLUVQRVJNO1xcbjU3Njk6XFx0XFx0XFx0Z290byBlcnJfcHV0O1xcbjU3NzA6XFx0XFx0fVxcbjU3NzE6XFx0XFx0aWYgKGhhc193cml0ZSBcXHUwMDI2XFx1MDAyNiAhKG1hcF9nZXRfc3lzX3Blcm1zKG1hcCwgZikgXFx1MDAyNiBGTU9ERV9DQU5fV1JJVEUpKSB7XFxuNTc3MjpcXHRcXHRcXHRlcnIgPSAtRVBFUk07XFxuNTc3MzpcXHRcXHRcXHRnb3RvIGVycl9wdXQ7XFxuNTc3NDpcXHRcXHR9XFxuNTc3NTpcXHRcXG41Nzc2OlxcdFxcdGlmIChjbWQgPT0gQlBGX01BUF9MT09LVVBfQkFUQ0gpXFxuNTc3NzpcXHRcXHRcXHRCUEZfRE9fQkFUQ0gobWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfYmF0Y2gsIG1hcCwgYXR0ciwgdWF0dHIpO1xcbjU3Nzg6XFx0XFx0ZWxzZSBpZiAoY21kID09IEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0gpXFxuNTc3OTpcXHRcXHRcXHRCUEZfRE9fQkFUQ0gobWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCwgbWFwLCBhdHRyLCB1YXR0cik7XFxuNTc4MDpcXHRcXHRlbHNlIGlmIChjbWQgPT0gQlBGX01BUF9VUERBVEVfQkFUQ0gpXFxuNTc4MTpcXHRcXHRcXHRCUEZfRE9fQkFUQ0gobWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF91cGRhdGVfYmF0Y2gsIG1hcCwgZmRfZmlsZShmKSwgYXR0ciwgdWF0dHIpO1xcbjU3ODI6XFx0XFx0ZWxzZVxcbjU3ODM6XFx0XFx0XFx0QlBGX0RPX0JBVENIKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZGVsZXRlX2JhdGNoLCBtYXAsIGF0dHIsIHVhdHRyKTtcXG41Nzg0OlxcdGVycl9wdXQ6XFxuNTc4NTpcXHRcXHRpZiAoaGFzX3dyaXRlKSB7XFxuNTc4NjpcXHRcXHRcXHRtYXliZV93YWl0X2JwZl9wcm9ncmFtcyhtYXApO1xcbjU3ODc6XFx0XFx0XFx0YnBmX21hcF93cml0ZV9hY3RpdmVfZGVjKG1hcCk7XFxuNTc4ODpcXHRcXHR9XFxuNTc4OTpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoxOS42MjIyOTUxNjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU0MDIxNDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCYXRjaCBNYXAgT3BlcmF0aW9uIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgbXkgdGhpbmtpbmcuIFdlJ3JlIHplcm9pbmcgaW4gb24gYmF0Y2ggb3BlcmF0aW9ucyBmb3IgQlBGIG1hcHMsIHdoaWNoIGlzIGEgZ29vZCB0YXJnZXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhbGwgc29saWQuXG5cbkZpcnN0LCB0aGUgc3ltYm9scyB0byB0YXJnZXQgYXJlIGNsZWFybHkgZGVmaW5lZDogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBicGZfbWFwX2RvX2JhdGNoYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIGluZGVlZCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIGZvciBhbGwgb2YgdGhlc2UgYmF0Y2ggb3BlcmF0aW9ucy5cblxuSSd2ZSB2ZXJpZmllZCB0aGF0IHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxpc3QgYXJlIGZvdW5kIHdoZXJlIEknZCBleHBlY3Q6IFRoZSBgaHRhYl8qYCBmdW5jdGlvbnMgYXJlIGluIGBoYXNodGFiLmNgIGFuZCBgZ2VuZXJpY18qYCBhbmQgYGJwZl8qYCBmdW5jdGlvbnMgYXJlIGluIGBzeXNjYWxsLmNgLiBUaGlzIGNvdmVycyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgb2YgaGFzaCB0YWJsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnRzLiBUaGlzIGlzIGEgc29saWQgY2hlY2sgdG8gZW5zdXJlIHRoYXQgd2UncmUgdGFyZ2V0aW5nIHRoZSBjb3JyZWN0IGZ1bmN0aW9ucy5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBvdmVyYWxsIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBUaGUgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgY29ycmVjdCBzaW5jZSBiYXRjaCBtYXAgb3BlcmF0aW9ucyAqYXJlKiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwuIFRoZW4sIHRoZSBgRm9jdXNTeW1ib2xzYCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIGluaXRpYWwgbGlzdCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgaW5jbHVkZXMgYEJQRl9TWVNDQUxMYCwgd2hpY2ggaXMgZXNzZW50aWFsLiBJJ20gYWxzbyBzYXRpc2ZpZWQgdGhhdCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIGFjY3VyYXRlOyBiYXRjaCBvcGVyYXRpb25zIHByb3ZpZGUgZWZmaWNpZW50IGFuZCBwb3RlbnRpYWxseSBjb21wbGV4IGRhdGEgbWFuaXB1bGF0aW9uLiBUaGUgZW50aXJlIHNldHVwIGlzIHJlYWR5IHRvIGdvLCB0aGUgYmF0Y2ggY2FsbHMgcHJvdmlkZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHNldC1yZXN1bHRzIGNhbGwgd2lsbCBiZSBwcm9wZXJseSBmb3JtYXR0ZWQgYW5kIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhpcyBhbmFseXNpcy4gSSBkb24ndCB3YW50IHRvIGludHJvZHVjZSBhbnkgZXJyb3JzIGF0IHRoaXMgc3RhZ2UuIEl0IGlzLCBzbyB3ZSdyZSBnb29kIHRvIGdvIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU4MSwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoyNC4xNjI1MTI0NTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIzNjg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX2RvX2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGR1cmluZyBwb2ludGVyIGFyaXRobWV0aWMgaW4gQlBGIG1hcCBiYXRjaCBvcGVyYXRpb25zIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoIGluIGhhc2h0YWIuYyBhbmQgZ2VuZXJpY19tYXBfKl9iYXRjaCBpbiBzeXNjYWxsLmMpIGJ5IGNhc3RpbmcgY291bnRzL2luZGljZXMgdG8gc2l6ZV90LiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCBleGVyY2lzYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCAoQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfZG9fYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBpbiBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMgKF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2ggaW4gaGFzaHRhYi5jIGFuZCBnZW5lcmljX21hcF8qX2JhdGNoIGluIHN5c2NhbGwuYykgYnkgY2FzdGluZyBjb3VudHMvaW5kaWNlcyB0byBzaXplX3QuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgYW5kIGV4ZXJjaXNhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIChCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoyNC4yMzg3NTYwODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDc2MTE0ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MjQuMjM5Mjg1NDg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg0NzU1ODE4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZWApLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NTc3MjVkZDNkZWZkZDI5NzM0MTkzZGNiYjE4OTg0ZWIwOGMwYjNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMTo0MzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xOTc3LDEwICsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbi1cdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbi1cdCAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XG4tXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbi1cdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4rXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyArIChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbitcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbitcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4rXHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi43MzEzODhhZTAwYWQxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMjAzNiw3ICsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcbiBcdFx0ZXJyID0gLUVGQVVMVDtcbi1cdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiBcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMjA5OCw5ICsyMDk4LDkgQEAgaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4gXG4gXHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuLVx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4rXHRcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLFxuQEAgLTIxNzksMTIgKzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4rXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbiBcdFx0XHRcdCBtYXAtXHUwMDNla2V5X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDoyNC4yMzkyODc0NTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0MTgxNjg1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoIGZvciBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoZSBjb2RlIGRpZmYgdGhvcm91Z2hseS4gSSdtIHNlZWluZyBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2Agd2l0aGluIHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgZnVuY3Rpb24uIFRoZSBrZXkgYXNwZWN0IGhlcmUgaXMgdGhlIGV4cGxpY2l0IGNhc3Rpbmcgb2YgbXVsdGlwbGljYXRpb24gcmVzdWx0cyBsaWtlIGB0b3RhbCAqIGtleV9zaXplYCBhbmQgYGtleV9zaXplICogYnVja2V0X2NudGAgdG8gYChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZWAgYW5kIGAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudGAsIHJlc3BlY3RpdmVseS4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBpbnRlZ2VyIG92ZXJmbG93IHJhZGFyLlxuXG5UaGVuLCBtb3Zpbmcgb24gdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgSSBub3RpY2Ugc2ltaWxhciBjYXN0aW5nIGluIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBwYXJ0aWN1bGFybHkgd2hlcmUgYGNwICogbWFwLVx1MDAzZWtleV9zaXplYCBpcyBjYXN0IHRvIGAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplYC4gSXQncyBhbGwgYWJvdXQgYXZvaWRpbmcgdGhvc2UgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGluIGNhbGN1bGF0aW9ucyBpbnZvbHZpbmcga2V5IHNpemVzLCBiYXRjaCBzaXplcywgYW5kIGNvdW50cy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCwgY3J1Y2lhbGx5LCBob3cgdGhlc2UgY2FsY3VsYXRpb25zIGFyZSB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBCUEYgZnJhbWV3b3JrLiBJIHRoaW5rIEknbGwgZmlyZSB1cCBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBzZXNzaW9uIHRvIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGRldGVybWluZSB0aGUgcHVycG9zZSBvZiB0aGVzZSBiYXRjaCBvcGVyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gd2hldGhlciB0aGVzZSBvdmVyZmxvdyBmaXhlcyB3ZXJlIHRydWx5IG5lY2Vzc2FyeSBhbmQgaWYgYW55IGZ1cnRoZXIgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IHN0aWxsIGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ5LCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MzcuNjU3NDU5NDQzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTYwOlxcdFxcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcXG4xOTYxOlxcdFxcdFxcdGwgPSBub2RlX3RvX2ZyZWU7XFxuMTk2MjpcXHRcXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZWJhdGNoX2ZsaW5rO1xcbjE5NjM6XFx0XFx0XFx0aWYgKGlzX2xydV9tYXApXFxuMTk2NDpcXHRcXHRcXHRcXHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XFxuMTk2NTpcXHRcXHRcXHRlbHNlXFxuMTk2NjpcXHRcXHRcXHRcXHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcXG4xOTY3OlxcdFxcdH1cXG4xOTY4OlxcdFxcbjE5Njk6XFx0bmV4dF9iYXRjaDpcXG4xOTcwOlxcdFxcdC8qIElmIHdlIGFyZSBub3QgY29weWluZyBkYXRhLCB3ZSBjYW4gZ28gdG8gbmV4dCBidWNrZXQgYW5kIGF2b2lkXFxuMTk3MTpcXHRcXHQgKiB1bmxvY2tpbmcgdGhlIHJjdS5cXG4xOTcyOlxcdFxcdCAqL1xcbjE5NzM6XFx0XFx0aWYgKCFidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChiYXRjaCArIDEgXFx1MDAzYyBodGFiLVxcdTAwM2VuX2J1Y2tldHMpKSB7XFxuMTk3NDpcXHRcXHRcXHRiYXRjaCsrO1xcbjE5NzU6XFx0XFx0XFx0Z290byBhZ2Fpbl9ub2NvcHk7XFxuMTk3NjpcXHRcXHR9XFxuMTk3NzpcXHRcXG4xOTc4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE5Nzk6XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4xOTgwOlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXFxuMTk4MTpcXHRcXHQgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XFxuMTk4MjpcXHRcXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxcbjE5ODM6XFx0XFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xcbjE5ODQ6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4xOTg1OlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xOTg2OlxcdFxcdH1cXG4xOTg3OlxcdFxcbjE5ODg6XFx0XFx0dG90YWwgKz0gYnVja2V0X2NudDtcXG4xOTg5OlxcdFxcdGJhdGNoKys7XFxuMTk5MDpcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZT0gaHRhYi1cXHUwMDNlbl9idWNrZXRzKSB7XFxuMTk5MTpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbjE5OTI6XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjE5OTM6XFx0XFx0fVxcbjE5OTQ6XFx0XFx0Z290byBhZ2FpbjtcXG4xOTk1OlxcdFxcbjE5OTY6XFx0YWZ0ZXJfbG9vcDpcXG4xOTk3OlxcdFxcdGlmIChyZXQgPT0gLUVGQVVMVClcXG4xOTk4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE5OTk6XFx0XFxuMjAwMDpcXHRcXHQvKiBjb3B5ICMgb2YgZW50cmllcyBhbmQgbmV4dCBiYXRjaCAqL1xcbjIwMDE6XFx0XFx0dWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XFxuMjAwMjpcXHRcXHRpZiAoY29weV90b191c2VyKHViYXRjaCwgXFx1MDAyNmJhdGNoLCBzaXplb2YoYmF0Y2gpKSB8fFxcbjIwMDM6XFx0XFx0ICAgIHB1dF91c2VyKHRvdGFsLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMDA0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjAwNTpcXHRcXG4yMDA2OlxcdG91dDpcXG4yMDA3OlxcdFxcdGt2ZnJlZShrZXlzKTtcXG4yMDA4OlxcdFxcdGt2ZnJlZSh2YWx1ZXMpO1xcbjIwMDk6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTE6NDQ6MzcuNjU3Njc2MTAzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDI1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDI1OlxcdFxcbjIwMjY6XFx0XFx0bWF4X2NvdW50ID0gYXR0ci1cXHUwMDNlYmF0Y2guY291bnQ7XFxuMjAyNzpcXHRcXHRpZiAoIW1heF9jb3VudClcXG4yMDI4OlxcdFxcdFxcdHJldHVybiAwO1xcbjIwMjk6XFx0XFxuMjAzMDpcXHRcXHRpZiAocHV0X3VzZXIoMCwgXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCkpXFxuMjAzMTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yMDMyOlxcdFxcbjIwMzM6XFx0XFx0a2V5ID0ga3ZtYWxsb2MobWFwLVxcdTAwM2VrZXlfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbjIwMzQ6XFx0XFx0aWYgKCFrZXkpXFxuMjAzNTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDM2OlxcdFxcbjIwMzc6XFx0XFx0Zm9yIChjcCA9IDA7IGNwIFxcdTAwM2MgbWF4X2NvdW50OyBjcCsrKSB7XFxuMjAzODpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIwMzk6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbjIwNDA6XFx0XFx0XFx0XFx0XFx0ICAgbWFwLVxcdTAwM2VrZXlfc2l6ZSkpXFxuMjA0MTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDQyOlxcdFxcbjIwNDM6XFx0XFx0XFx0aWYgKGJwZl9tYXBfaXNfb2ZmbG9hZGVkKG1hcCkpIHtcXG4yMDQ0OlxcdFxcdFxcdFxcdGVyciA9IGJwZl9tYXBfb2ZmbG9hZF9kZWxldGVfZWxlbShtYXAsIGtleSk7XFxuMjA0NTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDQ2OlxcdFxcdFxcdH1cXG4yMDQ3OlxcdFxcbjIwNDg6XFx0XFx0XFx0YnBmX2Rpc2FibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMjA0OTpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjA1MDpcXHRcXHRcXHRlcnIgPSBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcXG4yMDUxOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjIwNTI6XFx0XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4yMDUzOlxcdFxcdFxcdGlmIChlcnIpXFxuMjA1NDpcXHRcXHRcXHRcXHRicmVhaztcXG4yMDU1OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjIwNTY6XFx0XFx0fVxcbjIwNTc6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50LCBcXHUwMDI2Y3AsIHNpemVvZihjcCkpKVxcbjIwNTg6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMDU5OlxcdFxcbjIwNjA6XFx0XFx0a3ZmcmVlKGtleSk7XFxuMjA2MTpcXHRcXG4yMDYyOlxcdFxcdHJldHVybiBlcnI7XFxuMjA2MzpcXHR9XFxuMjA2NDpcXHRcXG4yMDY1OlxcdGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbjIwNjY6XFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4yMDY3OlxcdFxcdFxcdFxcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4yMDY4OlxcdHtcXG4yMDY5OlxcdFxcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gudmFsdWVzKTtcXG4yMDcwOlxcdFxcdHZvaWQgX191c2VyICprZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmtleXMpO1xcbjIwNzE6XFx0XFx0dTMyIHZhbHVlX3NpemUsIGNwLCBtYXhfY291bnQ7XFxuMjA3MjpcXHRcXHR2b2lkICprZXksICp2YWx1ZTtcXG4yMDczOlxcdFxcdGludCBlcnIgPSAwO1xcbjIwNzQ6XFx0XFxuMjA3NTpcXHRcXHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyxcXG4yMDc2OlxcdFxcdFxcdFxcdFxcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcXG4yMDc3OlxcdFxcdGlmIChlcnIpXFxuMjA3ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjIwNzk6XFx0XFxuMjA4MDpcXHRcXHR2YWx1ZV9zaXplID0gYnBmX21hcF92YWx1ZV9zaXplKG1hcCwgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XFxuMjA4MTpcXHRcXG4yMDgyOlxcdFxcdG1heF9jb3VudCA9IGF0dHItXFx1MDAzZWJhdGNoLmNvdW50O1xcbjIwODM6XFx0XFx0aWYgKCFtYXhfY291bnQpXFxuMjA4NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMDg1OlxcdFxcbjIwODY6XFx0XFx0aWYgKHB1dF91c2VyKDAsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwODc6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjA4ODpcXHRcXG4yMDg5OlxcdFxcdGtleSA9IGt2bWFsbG9jKG1hcC1cXHUwMDNla2V5X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMDkwOlxcdFxcdGlmICgha2V5KVxcbjIwOTE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjA5MjpcXHRcXG4yMDkzOlxcdFxcdHZhbHVlID0ga3ZtYWxsb2ModmFsdWVfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbjIwOTQ6XFx0XFx0aWYgKCF2YWx1ZSkge1xcbjIwOTU6XFx0XFx0XFx0a3ZmcmVlKGtleSk7XFxuMjA5NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDk3OlxcdFxcdH1cXG4yMDk4OlxcdFxcbjIwOTk6XFx0XFx0Zm9yIChjcCA9IDA7IGNwIFxcdTAwM2MgbWF4X2NvdW50OyBjcCsrKSB7XFxuMjEwMDpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIxMDE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbjIxMDI6XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNla2V5X3NpemUpIHx8XFxuMjEwMzpcXHRcXHRcXHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSlcXG4yMTA0OlxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDozNy42NTc4Njk5MzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0OTM2MzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAgaXMgcmVhbGx5IHdvcmtpbmcuIEkndmUgZ290IGEgZGVjZW50IGdyYXNwIG9mIHRoZSBiYXNpYyBjb25jZXB0cywgYnV0IEkga25vdyBJJ20gbWlzc2luZyBzb21lIG9mIHRoZSBudWFuY2VzLiBJIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBhbmQgcmVhbGx5IGRpc3NlY3QgaXQsIGxpbmUgYnkgbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBiYXRjaCBwcm9jZXNzaW5nIHBhcnQgYWN0dWFsbHkgZnVuY3Rpb25zLiBXaGF0J3MgdGhlIGNsZXZlcm5lc3MgYmVoaW5kIGl0PyBXaGF0IGVkZ2UgY2FzZXMgaXMgaXQgZGVzaWduZWQgdG8gaGFuZGxlPyBUaGUgZG9jdW1lbnRhdGlvbiBnaXZlcyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcsIGJ1dCB0aGUgcmVhbCBkZXRhaWxzIGFyZSBpbiB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJIHNob3VsZCBiZSBhYmxlIHRvIGlkZW50aWZ5IGl0cyBrZXkgY29tcG9uZW50cy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLiBXaGF0J3MgdGhlIGNvbnRyb2wgZmxvdyBsb29rIGxpa2UgZm9yIGl0PyBBbmQgdGhlbiB0cnkgYW5kIGV2YWx1YXRlIHdoYXQgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMgdGhhdCB3ZXJlIG1hZGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjQwLjkwNzIzNjIwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2MDpcXHRcXHRpZiAodWJhdGNoIFxcdTAwMjZcXHUwMDI2IGNvcHlfZnJvbV91c2VyKGJ1Zl9wcmV2a2V5LCB1YmF0Y2gsIG1hcC1cXHUwMDNla2V5X3NpemUpKVxcbjIxNjE6XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTYyOlxcdFxcdGtleSA9IGJ1ZjtcXG4yMTYzOlxcdFxcdHZhbHVlID0ga2V5ICsgbWFwLVxcdTAwM2VrZXlfc2l6ZTtcXG4yMTY0OlxcdFxcdGlmICh1YmF0Y2gpXFxuMjE2NTpcXHRcXHRcXHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xcbjIxNjY6XFx0XFxuMjE2NzpcXHRcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7KSB7XFxuMjE2ODpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMjE2OTpcXHRcXHRcXHRlcnIgPSBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2dldF9uZXh0X2tleShtYXAsIHByZXZfa2V5LCBrZXkpO1xcbjIxNzA6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjE3MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxNzI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjE3MzpcXHRcXHRcXHRlcnIgPSBicGZfbWFwX2NvcHlfdmFsdWUobWFwLCBrZXksIHZhbHVlLFxcbjIxNzQ6XFx0XFx0XFx0XFx0XFx0XFx0IGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MpO1xcbjIxNzU6XFx0XFxuMjE3NjpcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9FTlQpXFxuMjE3NzpcXHRcXHRcXHRcXHRnb3RvIG5leHRfa2V5O1xcbjIxNzg6XFx0XFxuMjE3OTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxODA6XFx0XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTgxOlxcdFxcbjIxODI6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsIGtleSxcXG4yMTgzOlxcdFxcdFxcdFxcdFxcdCBtYXAtXFx1MDAzZWtleV9zaXplKSkge1xcbjIxODQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTg1OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjE4NjpcXHRcXHRcXHR9XFxuMjE4NzpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcXG4yMTg4OlxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjE4OTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbjIxOTA6XFx0XFx0XFx0fVxcbjIxOTE6XFx0XFxuMjE5MjpcXHRcXHRcXHRjcCsrO1xcbjIxOTM6XFx0bmV4dF9rZXk6XFxuMjE5NDpcXHRcXHRcXHRpZiAoIXByZXZfa2V5KVxcbjIxOTU6XFx0XFx0XFx0XFx0cHJldl9rZXkgPSBidWZfcHJldmtleTtcXG4yMTk2OlxcdFxcbjIxOTc6XFx0XFx0XFx0c3dhcChwcmV2X2tleSwga2V5KTtcXG4yMTk4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjIxOTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMTo0NDo0MC45MDc2MTU5MDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE4MDcyMzAwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgcG90ZW50aWFsIGZvciAzMi1iaXQgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgYW5kIHNpemVzIGZvciB1c2VyLXNwYWNlIG1lbW9yeSBhY2Nlc3Nlcywgc3BlY2lmaWNhbGx5IHdoZW4gbXVsdGlwbHlpbmcgYGNwYCBhbmQgYG1hcC1cdTAwM2VrZXlfc2l6ZWAuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgdTMyYCB2YWx1ZXMsIGFuZCBhIGxhcmdlIHByb2R1Y3QgKFx1MDAzZT0gNEdCKSBjb3VsZCB3cmFwIGFyb3VuZCwgbGVhZGluZyB0byBpbmNvcnJlY3QgcG9pbnRlciBhcml0aG1ldGljIGluIHRoZSBrZXJuZWwgd2hlbiBhY2Nlc3NpbmcgdXNlciBzcGFjZSB2aWEgYHZvaWQgX191c2VyICpgIHBvaW50ZXJzLiBUaGlzIGNvdWxkIGNhdXNlIGRhdGEgY29ycnVwdGlvbiBhbmQgcmVhZC93cml0ZSBpbnRvIHdyb25nIG1lbW9yeSBhZGRyZXNzZXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIHRoaXMgd2l0aCBgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplYCBjYXN0aW5nLCB3aGljaCBwcmV2ZW50cyB0aGUgMzItYml0IG92ZXJmbG93LiBOb3csIHRoZSBgc2l6ZV90YCBtdWx0aXBsaWNhdGlvbiBzaG91bGQgY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgb2Zmc2V0IGFuZCBzaXplLCBlbnN1cmluZyBkYXRhIGlzIGNvcGllZCB0byB0aGUgaW50ZW5kZWQgdXNlciBzcGFjZSBsb2NhdGlvbi5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0J3MgYW5hbHl6ZTogdGhlIHBhdGNoIGl0c2VsZiBhdm9pZHMgb3ZlcmZsb3cgaW4gcG9pbnRlciBjYWxjdWxhdGlvbnMsIGVuc3VyaW5nIGNvcnJlY3QgYnVmZmVyIHNpemVzIGZvciBjb3B5IG9wZXJhdGlvbnMuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbCBtZW1vcnkgbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGBrZXlgIGFuZCBgdmFsdWVgIGRhdGEgYXJlIGZpbGxlZCBieSB0aGVpciByZXNwZWN0aXZlIGtlcm5lbCBtYXAgb3BlcmF0aW9ucyBiZWZvcmUgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGluIHRoZSBiYXRjaCBtYXAgb3BlcmF0aW9ucywgYGtleXNgIGFuZCBgdmFsdWVzYCB3ZXJlIHBvcHVsYXRlZCBmcm9tIGhhc2ggbWFwIGVsZW1lbnRzLCBzbyB0aGF0J3Mgc2FmZS4gSXQncyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyBmaXggdG8gcHJvdGVjdCB1c2VyLXNwYWNlIGRhdGEgYWNjZXNzZXMuXG5cblNwZWNpZmljYWxseSwgaXQgcHJldmVudHMgaW50ZWdlciB3cmFwcGluZyBpbiB1c2VyIGJ1ZmZlciBwb2ludGVyIGNhbGN1bGF0aW9ucywgd2hpY2ggaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSBLTVNBTidzIGZvY3VzLiBLTVNBTidzIHB1cnBvc2UgaXMgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvbGVha3MsIGVzcGVjaWFsbHkgd2l0aGluIGtlcm5lbCBtZW1vcnkuIEhlcmUsIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTQU5pdGl6ZXIpIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGlmIHRoZXJlIHdlcmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiBrZXJuZWwgbWVtb3J5LiBCdXQgdGhpcyBpcyBwcmltYXJpbHkgYSB1c2VyIGFkZHJlc3MgY2FsY3VsYXRpb24gaXNzdWUuIFRoaXMgcGF0Y2ggaXNuJ3QgYWJvdXQgdW5pbml0aWFsaXplZCAqa2VybmVsKiBtZW1vcnk7IGl0J3MgYWJvdXQgbWFraW5nIHN1cmUgd2UgY29ycmVjdGx5IGNhbGN1bGF0ZSBhZGRyZXNzZXMgZm9yICp1c2VyKiBtZW1vcnkuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgbXkgbWVudGFsIGNoZWNrbGlzdDpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHM6IE5vLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzOiBOby5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdpdGggbGF0ZXIgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBmaWVsZHM6IE5vLlxuNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3MgaW4gZXhpc3RpbmcgYnVmZmVyczogTm8uXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gVGhpcyBpcyBwdXJlbHkgYW4gaW50ZWdlciBvdmVyZmxvdyBmaXgsIG5vdCBhIEtNU0FOIGlzc3VlLiBJJ2xsIG1ha2Ugc3VyZSB0byB3cml0ZSBhIGNsZWFyIGFuZCBjb25jaXNlIGBLTVNBTlJlYXNvbmluZ2Agc2VjdGlvbiB0byBjbGVhcmx5IGNvbnRyYXN0IHRoZSByb2xlcyBvZiBLQVNBTiBhbmQgS01TQU4gaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjEyLCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDExOjQ0OjUyLjcxNDg0ODg4N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgMzItYml0IGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0IGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsIGFuZCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSBieSBjYXN0aW5nIG9wZXJhbmRzIHRvIGBzaXplX3RgIGJlZm9yZSBtdWx0aXBseWluZyAoZS5nLiwgYChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplYCkuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBtZW1vcnkgYnVmZmVycyBjb3BpZWQgdG8vZnJvbSB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgbWFuYWdlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIHBvaW50ZXIgb2Zmc2V0cyB3b3VsZCBmYWxsIHVuZGVyIG1lbW9yeSBib3VuZHMgY2hlY2tpbmcgKEtBU0FOKSByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24gKEtNU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgdXNlciBwb2ludGVyIG9mZnNldCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCwgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLCBhbmQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgYnkgY2FzdGluZyBvcGVyYW5kcyB0byBgc2l6ZV90YCBiZWZvcmUgbXVsdGlwbHlpbmcgKGUuZy4sIGAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZWApLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZywgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgbWVtb3J5IGJ1ZmZlcnMgY29waWVkIHRvL2Zyb20gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIG1hbmFnZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBwb2ludGVyIG9mZnNldHMgd291bGQgZmFsbCB1bmRlciBtZW1vcnkgYm91bmRzIGNoZWNraW5nIChLQVNBTikgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uIChLTVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzj5x4[1] Phase: Succeeded StartedAt: 2026-09-04 11:45:04 +0000 UTC FinishedAt: 2026-09-04 11:45:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 11:45:04 +0000 UTC FinishedAt: 2026-09-04 11:45:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2] Phase: Succeeded StartedAt: 2026-09-04 11:45:04 +0000 UTC FinishedAt: 2026-09-04 15:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 11:45:04 +0000 UTC FinishedAt: 2026-09-04 15:24:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 11:45:04 +0000 UTC FinishedAt: 2026-09-04 11:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 11:45:04 +0000 UTC FinishedAt: 2026-09-04 11:45:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzj5x4/series-workflowzj5x4-convert-artifact-2376806611/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 11:45:14 +0000 UTC FinishedAt: 2026-09-04 12:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 11:45:14 +0000 UTC FinishedAt: 2026-09-04 12:01:31 +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:*d22c3013-8d89-42f0-8103-b2498cdd9e14,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-workflowzj5x4/series-workflowzj5x4-convert-artifact-2376806611/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": "7a8fe875-2d61-4aea-98c3-7137c13fdcce", "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-workflowzj5x4/series-workflowzj5x4-build-action-1570403329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 11:45:14 +0000 UTC FinishedAt: 2026-09-04 12:01:21 +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:*d22c3013-8d89-42f0-8103-b2498cdd9e14,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-workflowzj5x4/series-workflowzj5x4-convert-artifact-2376806611/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": "7a8fe875-2d61-4aea-98c3-7137c13fdcce", "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-workflowzj5x4/series-workflowzj5x4-build-action-1570403329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 12:01:31 +0000 UTC FinishedAt: 2026-09-04 12:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 12:01:31 +0000 UTC FinishedAt: 2026-09-04 12:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 12:01:31 +0000 UTC FinishedAt: 2026-09-04 12:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 12:01:31 +0000 UTC FinishedAt: 2026-09-04 12:01:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzj5x4/series-workflowzj5x4-convert-artifact-1115935178/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 12:01:41 +0000 UTC FinishedAt: 2026-09-04 12:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 12:01:41 +0000 UTC FinishedAt: 2026-09-04 12:03:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7a8fe875-2d61-4aea-98c3-7137c13fdcce,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-workflowzj5x4/series-workflowzj5x4-build-action-1570403329/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-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 12:03:38 +0000 UTC FinishedAt: 2026-09-04 12:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 12:03:38 +0000 UTC FinishedAt: 2026-09-04 12:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 12:03:38 +0000 UTC FinishedAt: 2026-09-04 12:19:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 12:03:38 +0000 UTC FinishedAt: 2026-09-04 12:19:55 +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:*d22c3013-8d89-42f0-8103-b2498cdd9e14,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-workflowzj5x4/series-workflowzj5x4-convert-artifact-1115935178/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": "f3f96978-b8c6-4bf1-bf16-dfef5365fd68", "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-workflowzj5x4/series-workflowzj5x4-build-action-1943811566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 12:03:38 +0000 UTC FinishedAt: 2026-09-04 12:19:45 +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:*d22c3013-8d89-42f0-8103-b2498cdd9e14,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-workflowzj5x4/series-workflowzj5x4-convert-artifact-1115935178/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": "f3f96978-b8c6-4bf1-bf16-dfef5365fd68", "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-workflowzj5x4/series-workflowzj5x4-build-action-1943811566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 12:19:55 +0000 UTC FinishedAt: 2026-09-04 12:19:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 12:19:55 +0000 UTC FinishedAt: 2026-09-04 12:19:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 12:19:55 +0000 UTC FinishedAt: 2026-09-04 12:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 12:19:55 +0000 UTC FinishedAt: 2026-09-04 12:21:41 +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:*f3f96978-b8c6-4bf1-bf16-dfef5365fd68,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-workflowzj5x4/series-workflowzj5x4-build-action-1943811566/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-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 12:21:51 +0000 UTC FinishedAt: 2026-09-04 15:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 12:21:51 +0000 UTC FinishedAt: 2026-09-04 15:24:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7a8fe875-2d61-4aea-98c3-7137c13fdcce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3f96978-b8c6-4bf1-bf16-dfef5365fd68,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzj5x4/series-workflowzj5x4-build-action-1570403329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzj5x4/series-workflowzj5x4-build-action-1943811566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 12:21:51 +0000 UTC FinishedAt: 2026-09-04 12:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 12:21:51 +0000 UTC FinishedAt: 2026-09-04 12:21:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzj5x4/series-workflowzj5x4-convert-artifact-1716797535/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 12:21:51 +0000 UTC FinishedAt: 2026-09-04 12:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 12:21:51 +0000 UTC FinishedAt: 2026-09-04 12:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 12:21:51 +0000 UTC FinishedAt: 2026-09-04 12:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 12:22:01 +0000 UTC FinishedAt: 2026-09-04 15:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzj5x4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","bpf_map_do_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"7c1b0482-4d54-49c4-a151-377edf1b6d48","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 12:22:01 +0000 UTC FinishedAt: 2026-09-04 15:24:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7a8fe875-2d61-4aea-98c3-7137c13fdcce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3f96978-b8c6-4bf1-bf16-dfef5365fd68,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzj5x4/series-workflowzj5x4-build-action-1570403329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzj5x4/series-workflowzj5x4-build-action-1943811566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzj5x4/series-workflowzj5x4-convert-artifact-1716797535/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}