Name: series-workflow8mk9k Phase: Succeeded StartedAt: 2026-08-08 16:40:08 +0000 UTC FinishedAt: 2026-08-08 20:39:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[0] Phase: Succeeded StartedAt: 2026-08-08 16:40:08 +0000 UTC FinishedAt: 2026-08-08 16:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 16:40:08 +0000 UTC FinishedAt: 2026-08-08 16:59:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT" ], "series_id": "b619b929-9a79-4c92-8db2-c370201785f2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "start_service_discovery", "mgmt_device_found", "start_discovery", "start_limited_discovery", "hci_release_dev", "hci_update_passive_scan_sync" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7c3RhcnRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O3N0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O2hjaV9yZWxlYXNlX2RldiYjMzQ7LAogICAgJiMzNDtoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBJdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIG1vZGlmeWluZyBvciByZWFkaW5nIHRoZSBkaXNjb3ZlcnkgZmlsdGVyIFVVSURzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCB1dWlkX2NvdW50IGFuZCB1dWlkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaW50ZXJmYWNlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0OWIzZmU1MzhlZWNlMDRhZTQ0YjQ3MTE0MDBkZmI0YzQ3YjZlODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDE2OjU4OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbkBAIC05MzUsOSAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiYjNDM7XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcdGtmcmVlKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gTlVMTDtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbWdtdC5jIGIvbmV0L2JsdWV0b290aC9tZ210LmNcbmluZGV4IDg2MGMwODYwMTFiNzEuLmFjNDg2NGU1NmVjNzIgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JsdWV0b290aC9tZ210LmNcbkBAIC02MTcxLDYgJiM0Mzs2MTcxLDcgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0c3RydWN0IG1nbXRfcGVuZGluZ19jbWQgKmNtZDtcbiBcdGNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTtcbiBcdHUxNiB1dWlkX2NvdW50LCBleHBlY3RlZF9sZW47XG4mIzQzO1x0dTggKCp1dWlkcylbMTZdID0gTlVMTDtcbiBcdHU4IHN0YXR1cztcbiBcdGludCBlcnI7XG4gXG5AQCAtNjI0NywxMiAmIzQzOzYyNDgsMTAgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IHRydWU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS50eXBlID0gY3AtXHUwMDNldHlwZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJzc2kgPSBjcC1cdTAwM2Vyc3NpO1xuLVx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4gXG4gXHRpZiAodXVpZF9jb3VudCBcdTAwM2UgMCkge1xuLVx0XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXHUwMDNldXVpZHMsIHV1aWRfY291bnQgKiAxNixcbi1cdFx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKCFoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xuJiM0MztcdFx0dXVpZHMgPSBrbWVtZHVwKGNwLVx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogc2l6ZW9mKCp1dWlkcyksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCF1dWlkcykge1xuIFx0XHRcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVx1MDAzZWlkLFxuIFx0XHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksXG4gXHRcdFx0XHRcdFx0TUdNVF9TVEFUVVNfRkFJTEVELFxuQEAgLTYyNjIsNiAmIzQzOzYyNjEsMTEgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuJiM0MztcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gdXVpZHM7XG4mIzQzO1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4mIzQzO1xuIFx0ZXJyID0gaGNpX2NtZF9zeW5jX3F1ZXVlKGhkZXYsIHN0YXJ0X2Rpc2NvdmVyeV9zeW5jLCBjbWQsXG4gXHRcdFx0XHQgc3RhcnRfZGlzY292ZXJ5X2NvbXBsZXRlKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbkBAIC0xMDUwNSw2ICYjNDM7MTA1MDksNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG4gXHQgICAgICFoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIpKSkpXG4gXHRcdHJldHVybiAgZmFsc2U7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0aWYgKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkge1xuIFx0XHQvKiBJZiBhIGxpc3Qgb2YgVVVJRHMgaXMgcHJvdmlkZWQgaW4gZmlsdGVyLCByZXN1bHRzIHdpdGggbm9cbiBcdFx0ICogbWF0Y2hpbmcgVVVJRCBzaG91bGQgYmUgZHJvcHBlZC5cbkBAIC0xMDUxMyw5ICYjNDM7MTA1MTgsMTIgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxuIFx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQsXG4tXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpXG4mIzQzO1x0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKSB7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiBcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcbiBcdC8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0XG4gXHQgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O21nbXRfZGV2aWNlX2ZvdW5kJiMzNDssCiAgICAmIzM0O3N0YXJ0X2Rpc2NvdmVyeSYjMzQ7LAogICAgJiMzNDtzdGFydF9saW1pdGVkX2Rpc2NvdmVyeSYjMzQ7LAogICAgJiMzNDtoY2lfcmVsZWFzZV9kZXYmIzM0OywKICAgICYjMzQ7aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIEJsdWV0b290aCBzZXJ2aWNlIGRpc2NvdmVyeSBmaWx0ZXJpbmcgYnkgYWRkaW5nIGEgc3BpbmxvY2sgYXJvdW5kIHV1aWRfY291bnQgYW5kIHV1aWRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCbHVldG9vdGggbWFuYWdlbWVudCBpbnRlcmZhY2UpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTQ5YjNmZTUzOGVlY2UwNGFlNDRiNDcxMTQwMGRmYjRjNDdiNmU4MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMTY6NTg6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC05MzUsOSAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAloZGV2LSZndDtkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXBvcnRfaW52YWxpZF9yc3NpID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7CiAJa2ZyZWUoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwppbmRleCA4NjBjMDg2MDExYjcxLi5hYzQ4NjRlNTZlYzcyIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpAQCAtNjE3MSw2ICYjNDM7NjE3MSw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAlzdHJ1Y3QgbWdtdF9wZW5kaW5nX2NtZCAqY21kOwogCWNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTsKIAl1MTYgdXVpZF9jb3VudCwgZXhwZWN0ZWRfbGVuOwomIzQzOwl1OCAoKnV1aWRzKVsxNl0gPSBOVUxMOwogCXU4IHN0YXR1czsKIAlpbnQgZXJyOwogCkBAIC02MjQ3LDEyICYjNDM7NjI0OCwxMCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSB0cnVlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS50eXBlID0gY3AtJmd0O3R5cGU7CiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnJzc2kgPSBjcC0mZ3Q7cnNzaTsKLQloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKLQkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJdXVpZHMgPSBrbWVtZHVwKGNwLSZndDt1dWlkcywgdXVpZF9jb3VudCAqIHNpemVvZigqdXVpZHMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghdXVpZHMpIHsKIAkJCWVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LSZndDtpZCwKIAkJCQkJCU1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksCiAJCQkJCQlNR01UX1NUQVRVU19GQUlMRUQsCkBAIC02MjYyLDYgJiM0Mzs2MjYxLDExIEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAkJfQogCX0KIAomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiYjNDM7CWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcyA9IHV1aWRzOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwogCWVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLAogCQkJCSBzdGFydF9kaXNjb3ZlcnlfY29tcGxldGUpOwogCWlmIChlcnIgJmx0OyAwKSB7CkBAIC0xMDUwNSw2ICYjNDM7MTA1MDksNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsCiAJICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKQogCQlyZXR1cm4gIGZhbHNlOwogCiYjNDM7CXNwaW5fbG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAlpZiAoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkgewogCQkvKiBJZiBhIGxpc3Qgb2YgVVVJRHMgaXMgcHJvdmlkZWQgaW4gZmlsdGVyLCByZXN1bHRzIHdpdGggbm8KIAkJICogbWF0Y2hpbmcgVVVJRCBzaG91bGQgYmUgZHJvcHBlZC4KQEAgLTEwNTEzLDkgJiM0MzsxMDUxOCwxMiBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsCiAJCQkJICAgaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKSAmYW1wOyZhbXA7CiAJCSAgICAhZWlyX2hhc191dWlkcyhzY2FuX3JzcCwgc2Nhbl9yc3BfbGVuLAogCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50LAotCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpCiYjNDM7CQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpIHsKJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KIAl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCiAJLyogSWYgZHVwbGljYXRlIGZpbHRlcmluZyBkb2VzIG5vdCByZXBvcnQgUlNTSSBjaGFuZ2VzLCB0aGVuIHJlc3RhcnQKIAkgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJsdWV0b290aCBTZXJ2aWNlIERpc2NvdmVyeSBGaWx0ZXJpbmcgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0d2Vha2luZyBob3cgd2UgaGFuZGxlIEJsdWV0b290aCBzZXJ2aWNlIGRpc2NvdmVyeSBmaWx0ZXJpbmcuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24sIHdoaWNoIGlzIGFsd2F5cyBnb29kIHRvIHNlZS4gVGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGEgc3BpbmxvY2sg4oCTIGBzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jaylgIOKAkyB0aGF0IHdyYXBzIGFjY2Vzc2VzIHRvIGBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHNgLiBJdCBzZWVtcyB0aGUgbG9ja2luZyBtZWNoYW5pc20gaXMgZGVwbG95ZWQgd2l0aGluIHRoZSBgaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJgLCBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb25zLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZXNlIHJvdXRpbmVzIGNhbiBsZWFkIHRvIGluc3RhYmlsaXR5LgoKVGhlIGNvZGUgY2hhbmdlcyBhcmUgdG91Y2hpbmcgYG5ldC9ibHVldG9vdGgvbWdtdC5jYCBhbmQgYGluY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oYCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgdGhpcyB0eXBlIG9mIGZpeC4gSeKAmWxsIHdhbnQgdG8gcmV2aWV3IHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGBpc19maWx0ZXJfbWF0Y2hgIHRob3JvdWdobHkuIEdpdmVuIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgaXMgZGVjbGFyZWQgaW5saW5lLCBpdCBtZWFucyBpdHMgaW1wbGVtZW50YXRpb24gaXMgZGlyZWN0bHkgYXZhaWxhYmxlIGluIHRoZSBoZWFkZXIgZmlsZSwgd2hpY2ggd2lsbCBuZWVkIHRvIGJlIGNoZWNrZWQgZm9yIGNvbnNpc3RlbmN5LgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoZSByZWxldmFudCBCbHVldG9vdGggY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIExldCYjMzk7cyBzZWUuLi4gYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2Agd2lsbCBjb250YWluIGBDT05GSUdfQlRgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWdzLiBGaW5hbGx5LCBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgY2FsbHMgdG8gYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gSeKAmWxsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBwYXRjaCBpcyBwcm9wZXJseSBhcHBsaWVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQsIGFuZCB0aGF0IHRoZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSBjb25zaXN0ZW50IHdpdGggYWxsIGV4aXN0aW5nIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvbWdtdC5jPTYxNTk9c3RhdGljIGludCBzdGFydF9saW1pdGVkX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjYtXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTY3OnN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjgtXHRcdFx0XHQgICB2b2lkICpkYXRhLCB1MTYgbGVuKVxubmV0L2JsdWV0b290aC9tZ210LmMtNjE2OS17XG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTcwOlx0c3RydWN0IG1nbXRfY3Bfc3RhcnRfc2VydmljZV9kaXNjb3ZlcnkgKmNwID0gZGF0YTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNzEtXHRzdHJ1Y3QgbWdtdF9wZW5kaW5nX2NtZCAqY21kO1xuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTk1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBoY2lfbWdtdF9oYW5kbGVyIG1nbXRfaGFuZGxlcnNbXSA9IHtcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NjczLVx0XHRcdFx0XHRcdEhDSV9NR01UX1VOQ09ORklHVVJFRCB9LFxubmV0L2JsdWV0b290aC9tZ210LmM6OTY3NDpcdHsgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnksIE1HTVRfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUllfU0laRSxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTk2NzUtXHRcdFx0XHRcdFx0SENJX01HTVRfVkFSX0xFTiB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk9wZXJhdGlvbmFsaXppbmcgU2VydmljZSBEaXNjb3ZlcnkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgaGFuZGxlciwgZm9yIHRoZSBgTUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWWAgY29tbWFuZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKmJlZ2lucyog4oCTIHRoZSB0cmlnZ2VyIHRvIGtpY2sgb2ZmIHRoZSB3aG9sZSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLCB3aGF0ZXZlciB0aGF0IHNwZWNpZmljYWxseSBlbnRhaWxzIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlICYjMzQ7Z28mIzM0OyBzaWduYWwsIHRoZSBzdGFydGluZyBndW4uIEkmIzM5O2QgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIG9idmlvdXNseSwgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCBoYW5kbGVzIHRoZSByZXF1ZXN0LCBob3cgaXQgdmFsaWRhdGVzIHRoZSBwYXJhbWV0ZXJzLCBhbmQgaG93IGl0IHRoZW4gaGFuZHMgb2ZmIHRoZSBhY3R1YWwgd29yayB0byB0aGUgbG93ZXIgbGF5ZXJzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBzY2FuLCBvciBzb21ldGhpbmcgbW9yZSByZWZpbmVkIHdpdGggc3BlY2lmaWMgZmlsdGVyaW5nPyBUaGUgZGV0YWlscyBhcmUgaW4gdGhlIGNvZGUuCgpUaGVuLCB0aGVyZSYjMzk7cyBgaXNfZmlsdGVyX21hdGNoYC4gSXRzIHByZXNlbmNlIGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB3ZSBoYXZlIHNvbWUga2luZCBvZiBmaWx0ZXJpbmcgZ29pbmcgb24gaW4gdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSB1dGlsaXR5LCBhIHByZWRpY2F0ZSB0aGF0IGlzIHVzZWQgdG8gZXZhbHVhdGUgd2hldGhlciBvciBub3QgYW4gaW5jb21pbmcgZGV2aWNlIGFkdmVydGlzZW1lbnQgbWVldHMgYSBzcGVjaWZpZWQgY3JpdGVyaWEuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCBkZWNpZGluZyBpZiBhIGRldmljZSBnZXRzIHRocm91Z2guIEtub3dpbmcgdGhpcywgaXQgaXMgbGlrZWx5IGRldGVybWluaW5nIHdoZXRoZXIgc29tZXRoaW5nIGlzIG9yIGlzIG5vdCBhbiBhcHByb3ByaWF0ZSBlbmRwb2ludC4KClRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIHN1Z2dlc3RzIGEgbW9yZSBjb21wbGV4IGZsb3c6IGEgcmVxdWVzdCB0byBzdGFydCwgYSBmaWx0ZXJpbmcgcHJvY2VzcywgYW5kIHRoZW4gcGVyaGFwcyBhbiBhY3Rpb24gb24gZGV2aWNlcyB0aGF0IG1hdGNoIHRoZSBjcml0ZXJpYS4gR29vZCwgc2Vuc2libGUgZGVzaWduLiBJJiMzOTtkIGRlZmluaXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQga2luZCBvZiBmaWx0ZXJzIGFyZSBzdXBwb3J0ZWQg4oCTIFVVSURzLCBkZXZpY2UgbmFtZXMsIFJTU0ksIG1hbnVmYWN0dXJlciBkYXRhLCBhbGwgb2YgdGhlIGFib3ZlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSBhbHNvIGtleS4gSSYjMzk7ZCBpbW1lZGlhdGVseSBzdGFydCBhc2tpbmcgcXVlc3Rpb25zOiBob3cgZWZmaWNpZW50IGlzIHRoZSBmaWx0ZXJpbmcgYWxnb3JpdGhtPyBBcmUgd2UgdXNpbmcgYW55IGhhcmR3YXJlLWFjY2VsZXJhdGVkIGZlYXR1cmVzPyBIb3cgd2VsbCBkb2VzIGl0IHNjYWxlIHdpdGggYSBsYXJnZSBudW1iZXIgb2YgZGV2aWNlcz8gSXMgdGhlcmUgYW55IGNhY2hpbmcgb3IgcHJlLWZpbHRlcmluZyBoYXBwZW5pbmc/IFRoaXMgYWxsIGlzIGltcG9ydGFudCBhcyBhIGJsdWV0b290aCBlbmdpbmVlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19maWx0ZXJfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDQzOT1zdGF0aWMgYm9vbCBlaXJfaGFzX3V1aWRzKHU4ICplaXIsIHUxNiBlaXJfbGVuLCB1MTYgdXVpZF9jb3VudCwgdTggKCp1dWlkcylbMTZdKVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNDkzLVxubmV0L2JsdWV0b290aC9tZ210LmM6MTA0OTQ6c3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxubmV0L2JsdWV0b290aC9tZ210LmMtMTA0OTUtXHRcdFx0ICAgIHUxNiBlaXJfbGVuLCB1OCAqc2Nhbl9yc3AsIHU4IHNjYW5fcnNwX2xlbilcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDcxND12b2lkIG1nbXRfZGV2aWNlX2ZvdW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBsaW5rX3R5cGUsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtMTA3NDItXHRcdC8qIFdlIGFyZSB1c2luZyBzZXJ2aWNlIGRpc2NvdmVyeSAqL1xubmV0L2JsdWV0b290aC9tZ210LmM6MTA3NDM6XHRcdGlmICghaXNfZmlsdGVyX21hdGNoKGhkZXYsIHJzc2ksIGVpciwgZWlyX2xlbiwgc2Nhbl9yc3AsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDc0NC1cdFx0XHRcdCAgICAgc2Nhbl9yc3BfbGVuKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGV2aWNlIERpc2NvdmVyeSAmYW1wOyBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKClJpZ2h0LCBgbWdtdF9kZXZpY2VfZm91bmRgIOKAkyB0aGF0JiMzOTtzIHRoZSB0cmlnZ2VyIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gIEltbWVkaWF0ZWx5LCBteSBicmFpbiBmbGFncyBpdCBhcyBjcml0aWNhbCwgKmNvcmUga2VybmVsIGxvZ2ljKiB3aXRoaW4gdGhlIEJsdWV0b290aCBtYW5hZ2VtZW50IGludGVyZmFjZS4gIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIE5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBkZXZpY2UgZGlzY292ZXJ5IGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW4gcGxheS4KCkZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYmFyZSBtaW5pbXVtIGNvbmZpZyBJIG5lZWQgdG8gaGF2ZSBsb2FkZWQgdG8gc3RhcnQgY2hlY2tpbmcuIE9mIGNvdXJzZSBgQ09ORklHX0JUYCBoYXMgdG8gYmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbnRlcnR3aW5lZCBoZXJlPyBJIHNob3VsZCBjaGVjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGF0IHBsYXkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL0tjb25maWctNS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo2Om1lbnVjb25maWcgQlRcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Qmx1ZXRvb3RoIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTQxLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjQyOmNvbmZpZyBCVF9CUkVEUlxubmV0L2JsdWV0b290aC9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtCbHVldG9vdGggQ2xhc3NpYyAoQlIvRURSKSBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZz01Nj1zb3VyY2UgXCYjMzQ7bmV0L2JsdWV0b290aC9oaWRwL0tjb25maWdcJiMzNDtcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy01Ny1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1ODpjb25maWcgQlRfTEVcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIExvdyBFbmVyZ3kgKExFKSBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy02NS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo2Njpjb25maWcgQlRfTEVfTDJDQVBfRUNSRURcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIEwyQ0FQIEVuaGFuY2VkIENyZWRpdCBGbG93IENvbnRyb2xcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNzYtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6Nzc6Y29uZmlnIEJUXzZMT1dQQU5cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0JsdWV0b290aCA2TG9XUEFOIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctODItXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6ODM6Y29uZmlnIEJUX0xFRFNcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05MS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5Mjpjb25maWcgQlRfTVNGVEVYVFxubmV0L2JsdWV0b290aC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgTWljcm9zb2Z0IGV4dGVuc2lvbnNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTgtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6OTk6Y29uZmlnIEJUX0FPU1BFWFRcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O0VuYWJsZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgZXh0ZW5zaW9uc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDUtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTA2OmNvbmZpZyBCVF9ERUJVR0ZTXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtFeHBvcnQgQmx1ZXRvb3RoIGludGVybmFscyBpbiBkZWJ1Z2ZzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTExMy1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMTQ6Y29uZmlnIEJUX1NFTEZURVNUXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtCbHVldG9vdGggc2VsZiB0ZXN0aW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTI2LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjEyNzpjb25maWcgQlRfU0VMRlRFU1RfRUNESFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyOC1cdGJvb2wgXCYjMzQ7RUNESCB0ZXN0IGNhc2VzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTEzMy1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMzQ6Y29uZmlnIEJUX1NFTEZURVNUX1NNUFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7U01QIHRlc3QgY2FzZXNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQwLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjE0MTpjb25maWcgQlRfRkVBVFVSRV9ERUJVR1xubmV0L2JsdWV0b290aC9LY29uZmlnLTE0Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHJ1bnRpbWUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgc3RhdGVtZW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkJsdWV0b290aCBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaXRlbSBJIG5lZWQgdG8gZm9jdXMgb24gaXMgdW5kb3VidGVkbHkgYENPTkZJR19CVGAuIFRoYXQmIzM5O3MgdGhlIGJpZyBvbmUgdGhhdCBkaWN0YXRlcyB3aGV0aGVyIEJsdWV0b290aCBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gaW5jbHVkZWQuIE5vdywgc2luY2UgSSBrbm93IGBtZ210LmNgIGlzIGludm9sdmVkIGluIEJsdWV0b290aCBtYW5hZ2VtZW50LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoYXQgdGhlIGNvbXBpbGF0aW9uIG9mIGBtZ210LmNgIGlzIGFjdHVhbGx5IHRpZWQgdG8gdGhlIGVuYWJsaW5nIG9mIGBDT05GSUdfQlRgLiBUbyBkbyB0aGF0LCBJJiMzOTttIGltbWVkaWF0ZWx5IGhlYWRpbmcgb3ZlciB0byBgbmV0L2JsdWV0b290aC9NYWtlZmlsZWAuIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCYjMzk7cyBzZWUgaG93IHRoYXQgdGllcyB0b2dldGhlci4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZ210Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvTWFrZWZpbGU9MTI9Ymx1ZXRvb3RoXzZsb3dwYW4teSA6PSA2bG93cGFuLm9cbm5ldC9ibHVldG9vdGgvTWFrZWZpbGUtMTMtXG5uZXQvYmx1ZXRvb3RoL01ha2VmaWxlOjE0OmJsdWV0b290aC15IDo9IGFmX2JsdWV0b290aC5vIGhjaV9jb3JlLm8gaGNpX2Nvbm4ubyBoY2lfZXZlbnQubyBtZ210Lm8gXFxcbm5ldC9ibHVldG9vdGgvTWFrZWZpbGUtMTUtXHRoY2lfc29jay5vIGhjaV9zeXNmcy5vIGwyY2FwX2NvcmUubyBsMmNhcF9zb2NrLm8gc21wLm8gbGliLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gYW5kIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJsdWV0b290aCBjb2RlLiBSaWdodCwgYG1nbXQub2AgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIGBibHVldG9vdGgteWAsIHdoaWNoIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CVGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHNldHMgdGhlIHN0YWdlLiBOb3csIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIGFuZCBgaXNfZmlsdGVyX21hdGNoYC4gV2FpdCwgSSB0aG91Z2h0IGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAgd2FzIHN0YXRpYywgd2hpY2ggd291bGQgbWFrZSBpdCBhbiBpbnRlcm5hbCBoZWxwZXIuIEJ1dCBpdCYjMzk7cyBsaXN0ZWQgYXMgYSBoYW5kbGVyIGluIGBtZ210X2hhbmRsZXJzYC4gVGltZSBmb3IgYSBxdWljayBjaGVjay4gWWVwLCBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgICppcyogc3RhdGljLgoKSGFuZyBvbi4uLiB0aGUgcHJvbXB0IG1lbnRpb25zIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlIGZyb20gYSBkZWJ1Z2dpbmcgYW5kIHN5bWJvbCByZXNvbHV0aW9uIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGZvciBhbiBleHRlcm5hbCBBUEkuIFRoaXMgY2FsbHMgZm9yIGFub3RoZXIgY2hlY2suLi4gaXMgaXQgaW5saW5lZD8gSG1tLCBpdCYjMzk7cyBhIGhhbmRsZXIgaW4gYW4gYXJyYXksIHNvIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaGF0IHByYWN0aWNhbGx5IGd1YXJhbnRlZXMgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIE1ha2VzIHNlbnNlLCBnaXZlbiBpdCYjMzk7cyBwYXJ0IG9mIGEgaGFuZGxlciB0YWJsZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyBhbHNvIGluY2x1ZGUgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYmVjYXVzZSB0aGF0IGNhbGxzIGBpc19maWx0ZXJfbWF0Y2hgLiBBbmQgZmluYWxseSwgYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYC4uLiB0aGF0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBmaW5kIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5ICpjYWxsZWQqIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTI3MDk9dm9pZCBoY2lfcmVsZWFzZV9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTI3MzAtXHRoY2lfY29ubl9wYXJhbXNfY2xlYXJfYWxsKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjI3MzE6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0yNzMyLVx0aGNpX2Jsb2NrZWRfa2V5c19jbGVhcihoZGV2KTtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9MzI5MT1pbnQgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzMxNy1cdCAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjMzMTg6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzE5LVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYwODE9c3RhdGljIGludCBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTIyLVx0ICovXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTIzOlx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTI0LVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNjc9c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyNDUtXHQgKi9cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYyNDY6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyNDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMjkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDYWxscyB0byBgaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHdoZXJlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgZ2V0cyBjYWxsZWQuIFNlZW1zIGxpa2UgYSBjcml0aWNhbCBwYXJ0IG9mIG1hbmFnaW5nIGRpc2NvdmVyeSBmaWx0ZXJzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBoY2lfcmVsZWFzZV9kZXZgLCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AsIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgLCBhbmQgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YC4KClRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGl0IGlzIGVzcGVjaWFsbHkgd29ydGggY2hlY2tpbmc6CgoqICAgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YDogVGhpcyBvbmUmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgYWRkcmVzcyBpcyB0YWtlbiwgYW5kIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCB3aGljaCBvZnRlbiBtZWFucyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LgoqICAgYG1nbXRfZGV2aWNlX2ZvdW5kYDogSXQgc2VlbXMgaXQgY2FsbHMgYGlzX2ZpbHRlcl9tYXRjaGAuCiogICBgaGNpX3JlbGVhc2VfZGV2YDoKKiAgIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYDoKKiAgIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgOiBUaGlzIG9uZSBhbHNvIHdhcnJhbnRzIHNjcnV0aW55LCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMgYW5kIHRoZSBhZGRyZXNzICp3YXMqIHRha2VuIChidXQgbm90IGFueW1vcmUsIGl0JiMzOTtzIGNhbGxlZCBieSBgc3RhcnRfZGlzY292ZXJ5YCBhbmQgYHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5YCwgc28gdGhlcmUgaXMgbm8gc3BlY2lmaWMgYWRkcmVzcyB0YWtlbikKClNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAgYW5kIGFsc28gYHN0YXJ0X2Rpc2NvdmVyeWAgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIGhvdyB0aGVzZSBmaWx0ZXJzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBjbGVhcmVkIHRocm91Z2hvdXQgdGhlIGRpc2NvdmVyeSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL21nbXQuYz02MDczPXN0YXRpYyBpbnQgc3RhcnRfZGlzY292ZXJ5X3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtNjA4MC1cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYwODE6c3RhdGljIGludCBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYwODItXHRcdFx0XHQgICAgdTE2IG9wLCB2b2lkICpkYXRhLCB1MTYgbGVuKVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNTI9c3RhdGljIGludCBzdGFydF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTU0LXtcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNTU6XHRyZXR1cm4gc3RhcnRfZGlzY292ZXJ5X2ludGVybmFsKHNrLCBoZGV2LCBNR01UX09QX1NUQVJUX0RJU0NPVkVSWSxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNTYtXHRcdFx0XHRcdGRhdGEsIGxlbik7XG4tLVxubmV0L2JsdWV0b290aC9tZ210LmM9NjE1OT1zdGF0aWMgaW50IHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtNjE2MS17XG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTYyOlx0cmV0dXJuIHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbChzaywgaGRldixcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjMtXHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfTElNSVRFRF9ESVNDT1ZFUlksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODIKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbHVldG9vdGggRGlzY292ZXJ5IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIEJsdWV0b290aCBkaXNjb3ZlcnkgZmlsdGVyaW5nIGZpeCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Qgc28gZmFyLiBXZSYjMzk7dmUgZ290IHRoZXNlIGVudHJ5IHBvaW50cyDigJMgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYHN0YXJ0X2Rpc2NvdmVyeWAsIGBzdGFydF9saW1pdGVkX2Rpc2NvdmVyeWAsIGBtZ210X2RldmljZV9mb3VuZGAsIGBoY2lfcmVsZWFzZV9kZXZgLCBhbmQgYGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmNgIOKAkyBhbGwgb2Ygd2hpY2ggYXJlIGNyaXRpY2FsIGJlY2F1c2UgYHN0YXJ0X2Rpc2NvdmVyeWAgYW5kIGBzdGFydF9saW1pdGVkX2Rpc2NvdmVyeWAgYXJlIGhhbmRsZWQgd2l0aGluIGBtZ210X2hhbmRsZXJzYC4gSSB0aGluayB0aGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiwgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCkxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEl0IHNlZW1zIHRoZSBjb3JlIGNvbmZpZyBpcyBgQlRgLgoKRmluYWxseSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBkdXJpbmcgZnV6emluZyB0byBlbnN1cmUgbWF4aW11bSBjb3ZlcmFnZSBhbmQgdGVzdGluZyB0aGUgcmVsZXZhbnQgbG9naWM6IGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGBtZ210X2RldmljZV9mb3VuZGAsIGBzdGFydF9kaXNjb3ZlcnlgLCBgc3RhcnRfbGltaXRlZF9kaXNjb3ZlcnlgLCBgaGNpX3JlbGVhc2VfZGV2YCwgYW5kIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYC4KCkkmIzM5O2xsIGJlIHV0aWxpemluZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIHByZXNlbnQgbXkgZnV6emluZyBmaW5kaW5ncywgYW5kIHNob3VsZCBiZSByZWFkeSB0byByZXBvcnQgb24gdGhlIGVmZmljYWN5IG9mIHRoZSBmaXggc29vbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7c3RhcnRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O3N0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O2hjaV9yZWxlYXNlX2RldiYjMzQ7LAogICAgJiMzNDtoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gQmx1ZXRvb3RoIHNlcnZpY2UgZGlzY292ZXJ5IGZpbHRlcmluZyBieSBhZGRpbmcgYSBzcGlubG9jayBhcm91bmQgdXVpZF9jb3VudCBhbmQgdXVpZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJsdWV0b290aCBtYW5hZ2VtZW50IGludGVyZmFjZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7c3RhcnRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O3N0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O2hjaV9yZWxlYXNlX2RldiYjMzQ7LAogICAgJiMzNDtoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gQmx1ZXRvb3RoIHNlcnZpY2UgZGlzY292ZXJ5IGZpbHRlcmluZyBieSBhZGRpbmcgYSBzcGlubG9jayBhcm91bmQgdXVpZF9jb3VudCBhbmQgdXVpZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJsdWV0b290aCBtYW5hZ2VtZW50IGludGVyZmFjZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBJdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIG1vZGlmeWluZyBvciByZWFkaW5nIHRoZSBkaXNjb3ZlcnkgZmlsdGVyIFVVSURzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTQ5YjNmZTUzOGVlY2UwNGFlNDRiNDcxMTQwMGRmYjRjNDdiNmU4MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMTY6NTg6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC05MzUsOSAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAloZGV2LSZndDtkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXBvcnRfaW52YWxpZF9yc3NpID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7CiAJa2ZyZWUoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwppbmRleCA4NjBjMDg2MDExYjcxLi5hYzQ4NjRlNTZlYzcyIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpAQCAtNjE3MSw2ICYjNDM7NjE3MSw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAlzdHJ1Y3QgbWdtdF9wZW5kaW5nX2NtZCAqY21kOwogCWNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTsKIAl1MTYgdXVpZF9jb3VudCwgZXhwZWN0ZWRfbGVuOwomIzQzOwl1OCAoKnV1aWRzKVsxNl0gPSBOVUxMOwogCXU4IHN0YXR1czsKIAlpbnQgZXJyOwogCkBAIC02MjQ3LDEyICYjNDM7NjI0OCwxMCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSB0cnVlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS50eXBlID0gY3AtJmd0O3R5cGU7CiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnJzc2kgPSBjcC0mZ3Q7cnNzaTsKLQloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKLQkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJdXVpZHMgPSBrbWVtZHVwKGNwLSZndDt1dWlkcywgdXVpZF9jb3VudCAqIHNpemVvZigqdXVpZHMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghdXVpZHMpIHsKIAkJCWVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LSZndDtpZCwKIAkJCQkJCU1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksCiAJCQkJCQlNR01UX1NUQVRVU19GQUlMRUQsCkBAIC02MjYyLDYgJiM0Mzs2MjYxLDExIEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAkJfQogCX0KIAomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiYjNDM7CWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcyA9IHV1aWRzOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwogCWVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLAogCQkJCSBzdGFydF9kaXNjb3ZlcnlfY29tcGxldGUpOwogCWlmIChlcnIgJmx0OyAwKSB7CkBAIC0xMDUwNSw2ICYjNDM7MTA1MDksNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsCiAJICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKQogCQlyZXR1cm4gIGZhbHNlOwogCiYjNDM7CXNwaW5fbG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAlpZiAoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkgewogCQkvKiBJZiBhIGxpc3Qgb2YgVVVJRHMgaXMgcHJvdmlkZWQgaW4gZmlsdGVyLCByZXN1bHRzIHdpdGggbm8KIAkJICogbWF0Y2hpbmcgVVVJRCBzaG91bGQgYmUgZHJvcHBlZC4KQEAgLTEwNTEzLDkgJiM0MzsxMDUxOCwxMiBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsCiAJCQkJICAgaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKSAmYW1wOyZhbXA7CiAJCSAgICAhZWlyX2hhc191dWlkcyhzY2FuX3JzcCwgc2Nhbl9yc3BfbGVuLAogCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50LAotCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpCiYjNDM7CQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpIHsKJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KIAl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCiAJLyogSWYgZHVwbGljYXRlIGZpbHRlcmluZyBkb2VzIG5vdCByZXBvcnQgUlNTSSBjaGFuZ2VzLCB0aGVuIHJlc3RhcnQKIAkgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3NgoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJsdWV0b290aCBNYW5hZ2VtZW50IENvZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGhpdHRpbmcgYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGBpc19maWx0ZXJfbWF0Y2hgIGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AgYW5kIGBpbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBzcGluX2xvY2tgIGFuZCBgc3Bpbl91bmxvY2tgIGFyb3VuZCB0aGUgYWNjZXNzZXMgdG8gYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkc2AuIE15IGluaXRpYWwgdGhvdWdodD8gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2NraW5nIGZpeCwgd2hpY2ggaXMgYWx3YXlzIGdvb2QgdG8gc2VlLiBJdOKAmXMgZXhwbGljaXRseSBwcm90ZWN0aW5nIHRob3NlIGB1dWlkX2NvdW50YCBhbmQgYHV1aWRzYCBtZW1iZXJzIGZyb20gY29uY3VycmVudCBhY2Nlc3MsIG1lYW5pbmcgaXQmIzM5O3MgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgQmx1ZXRvb3RoIHN0YWNrLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGEgbmV3IHZ1bG5lcmFiaWxpdHkuIEkgcXVpY2tseSBzY2FuIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBPa2F5LCBgdXVpZHNgIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXBgLCBhbmQgdGhlIHNvdXJjZSBpcyB0aGUgdXNlci1zcGFjZSBjb21tYW5kIHBheWxvYWQgYGNwLSZndDt1dWlkc2AuIEJlY2F1c2UgYGNwLSZndDt1dWlkc2AgY29tZXMgZnJvbSB0aGUgdXNlci1zcGFjZSBwYXlsb2FkLCBpdCYjMzk7cyBpbml0aWFsaXplZC4gR29vZC4gVGhpcyBpcyBvbmx5IGFkZGluZyBsb2NraW5nOyBpdCYjMzk7cyBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgb2YgYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkc2AgYW5kIGBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudGAgaW5zaWRlIHRoZSBzcGlubG9jay4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY29uY3VycmVuY3kgYnVnIGZpeC4gTm90aGluZyBoZXJlIGlzIGNyZWF0aW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suCgpUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBwYXRjaC4gVGhlIGxvY2tpbmcgaXMgcHJlY2lzZWx5IHdoYXQmIzM5O3MgbmVlZGVkLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbmV3IHNlY3VyaXR5IGlzc3Vlcy4gVGhlIHBhdGNoIGFpbXMgdG8gcHJvdGVjdCBzaGFyZWQgZGF0YSBhbmQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gc2F0aXNmaWVkLiBObyBuZWVkIHRvIHJ1biBLTVNBTiBvbiB0aGlzIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBJdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIG1vZGlmeWluZyBvciByZWFkaW5nIHRoZSBkaXNjb3ZlcnkgZmlsdGVyIFVVSURzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IGFkZGluZyBzcGlubG9ja3MgYXJvdW5kIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gSXQgcHJldmVudHMgZGF0YSByYWNlcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBtb2RpZnlpbmcgb3IgcmVhZGluZyB0aGUgZGlzY292ZXJ5IGZpbHRlciBVVUlEcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjA4Ljg1NDk1OTYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyMTA1NTAxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeVwiLFxuICAgIFwibWdtdF9kZXZpY2VfZm91bmRcIixcbiAgICBcInN0YXJ0X2Rpc2NvdmVyeVwiLFxuICAgIFwic3RhcnRfbGltaXRlZF9kaXNjb3ZlcnlcIixcbiAgICBcImhjaV9yZWxlYXNlX2RldlwiLFxuICAgIFwiaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AuIEl0IHByZXZlbnRzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gbW9kaWZ5aW5nIG9yIHJlYWRpbmcgdGhlIGRpc2NvdmVyeSBmaWx0ZXIgVVVJRHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gQmx1ZXRvb3RoIHNlcnZpY2UgZGlzY292ZXJ5IGZpbHRlcmluZyBieSBhZGRpbmcgYSBzcGlubG9jayBhcm91bmQgdXVpZF9jb3VudCBhbmQgdXVpZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJsdWV0b290aCBtYW5hZ2VtZW50IGludGVyZmFjZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjA4Ljg1NDk2NDU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEzOTc1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNDliM2ZlNTM4ZWVjZTA0YWU0NGI0NzExNDAwZGZiNGM0N2I2ZTgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMTY6NTg6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcbmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcbkBAIC05MzUsOSArOTM1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlO1xcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucmVwb3J0X2ludmFsaWRfcnNzaSA9IHRydWU7XFxuIFxcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS5yc3NpID0gSENJX1JTU0lfSU5WQUxJRDtcXG4tXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuK1xcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcXG4gXFx0a2ZyZWUoaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzKTtcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gTlVMTDtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xcbmluZGV4IDg2MGMwODYwMTFiNzEuLmFjNDg2NGU1NmVjNzIgMTAwNjQ0XFxuLS0tIGEvbmV0L2JsdWV0b290aC9tZ210LmNcXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xcbkBAIC02MTcxLDYgKzYxNzEsNyBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuIFxcdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XFxuIFxcdGNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTtcXG4gXFx0dTE2IHV1aWRfY291bnQsIGV4cGVjdGVkX2xlbjtcXG4rXFx0dTggKCp1dWlkcylbMTZdID0gTlVMTDtcXG4gXFx0dTggc3RhdHVzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtNjI0NywxMiArNjI0OCwxMCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuIFxcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTtcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnR5cGUgPSBjcC1cXHUwMDNldHlwZTtcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnJzc2kgPSBjcC1cXHUwMDNlcnNzaTtcXG4tXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xcbiBcXG4gXFx0aWYgKHV1aWRfY291bnQgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXFx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogMTYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi1cXHRcXHRpZiAoIWhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xcbitcXHRcXHR1dWlkcyA9IGttZW1kdXAoY3AtXFx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogc2l6ZW9mKCp1dWlkcyksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXV1aWRzKSB7XFxuIFxcdFxcdFxcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVxcdTAwM2VpZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0TUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0TUdNVF9TVEFUVVNfRkFJTEVELFxcbkBAIC02MjYyLDYgKzYyNjEsMTEgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aGRldi1cXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xcbitcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSB1dWlkcztcXG4rXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aGRldi1cXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xcbitcXG4gXFx0ZXJyID0gaGNpX2NtZF9zeW5jX3F1ZXVlKGhkZXYsIHN0YXJ0X2Rpc2NvdmVyeV9zeW5jLCBjbWQsXFxuIFxcdFxcdFxcdFxcdCBzdGFydF9kaXNjb3ZlcnlfY29tcGxldGUpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbkBAIC0xMDUwNSw2ICsxMDUwOSw3IEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcXG4gXFx0ICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKVxcbiBcXHRcXHRyZXR1cm4gIGZhbHNlO1xcbiBcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuIFxcdGlmIChoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCAhPSAwKSB7XFxuIFxcdFxcdC8qIElmIGEgbGlzdCBvZiBVVUlEcyBpcyBwcm92aWRlZCBpbiBmaWx0ZXIsIHJlc3VsdHMgd2l0aCBub1xcbiBcXHRcXHQgKiBtYXRjaGluZyBVVUlEIHNob3VsZCBiZSBkcm9wcGVkLlxcbkBAIC0xMDUxMyw5ICsxMDUxOCwxMiBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXFxuIFxcdFxcdFxcdFxcdCAgIGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFlaXJfaGFzX3V1aWRzKHNjYW5fcnNwLCBzY2FuX3JzcF9sZW4sXFxuIFxcdFxcdFxcdFxcdCAgIGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50LFxcbi1cXHRcXHRcXHRcXHQgICBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMpKVxcbitcXHRcXHRcXHRcXHQgICBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMpKSB7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuIFxcbiBcXHQvKiBJZiBkdXBsaWNhdGUgZmlsdGVyaW5nIGRvZXMgbm90IHJlcG9ydCBSU1NJIGNoYW5nZXMsIHRoZW4gcmVzdGFydFxcbiBcXHQgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODowOS4yNzcwODgxMjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0OTU5NzQ4MDgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5XCIsXG4gICAgXCJtZ210X2RldmljZV9mb3VuZFwiLFxuICAgIFwic3RhcnRfZGlzY292ZXJ5XCIsXG4gICAgXCJzdGFydF9saW1pdGVkX2Rpc2NvdmVyeVwiLFxuICAgIFwiaGNpX3JlbGVhc2VfZGV2XCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCB1dWlkX2NvdW50IGFuZCB1dWlkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaW50ZXJmYWNlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTQ5YjNmZTUzOGVlY2UwNGFlNDRiNDcxMTQwMGRmYjRjNDdiNmU4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTY6NTg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5pbmRleCBlMDc0MThhNWFkY2U3Li40MTA1YzQ0NmNhOTgzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5AQCAtOTM1LDkgKzkzNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFx0a2ZyZWUoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuaW5kZXggODYwYzA4NjAxMWI3MS4uYWM0ODY0ZTU2ZWM3MiAxMDA2NDRcbi0tLSBhL25ldC9ibHVldG9vdGgvbWdtdC5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuQEAgLTYxNzEsNiArNjE3MSw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XG4gXHRjb25zdCB1MTYgbWF4X3V1aWRfY291bnQgPSAoKFUxNl9NQVggLSBzaXplb2YoKmNwKSkgLyAxNik7XG4gXHR1MTYgdXVpZF9jb3VudCwgZXhwZWN0ZWRfbGVuO1xuK1x0dTggKCp1dWlkcylbMTZdID0gTlVMTDtcbiBcdHU4IHN0YXR1cztcbiBcdGludCBlcnI7XG4gXG5AQCAtNjI0NywxMiArNjI0OCwxMCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnR5cGUgPSBjcC1cdTAwM2V0eXBlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IGNwLVx1MDAzZXJzc2k7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gdXVpZF9jb3VudDtcbiBcbiBcdGlmICh1dWlkX2NvdW50IFx1MDAzZSAwKSB7XG4tXHRcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC1cdTAwM2V1dWlkcywgdXVpZF9jb3VudCAqIDE2LFxuLVx0XHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuLVx0XHRpZiAoIWhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSB7XG4rXHRcdHV1aWRzID0ga21lbWR1cChjcC1cdTAwM2V1dWlkcywgdXVpZF9jb3VudCAqIHNpemVvZigqdXVpZHMpLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCF1dWlkcykge1xuIFx0XHRcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVx1MDAzZWlkLFxuIFx0XHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksXG4gXHRcdFx0XHRcdFx0TUdNVF9TVEFUVVNfRkFJTEVELFxuQEAgLTYyNjIsNiArNjI2MSwxMSBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4gXHRcdH1cbiBcdH1cbiBcbitcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gdXVpZHM7XG4rXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gdXVpZF9jb3VudDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuK1xuIFx0ZXJyID0gaGNpX2NtZF9zeW5jX3F1ZXVlKGhkZXYsIHN0YXJ0X2Rpc2NvdmVyeV9zeW5jLCBjbWQsXG4gXHRcdFx0XHQgc3RhcnRfZGlzY292ZXJ5X2NvbXBsZXRlKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbkBAIC0xMDUwNSw2ICsxMDUwOSw3IEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcbiBcdCAgICAgIWhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19TVFJJQ1RfRFVQTElDQVRFX0ZJTFRFUikpKSlcbiBcdFx0cmV0dXJuICBmYWxzZTtcbiBcbitcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdGlmIChoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHtcbiBcdFx0LyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vXG4gXHRcdCAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuXG5AQCAtMTA1MTMsOSArMTA1MTgsMTIgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxuIFx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQsXG4tXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpXG4rXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpIHtcbitcdFx0XHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFxuIFx0LyogSWYgZHVwbGljYXRlIGZpbHRlcmluZyBkb2VzIG5vdCByZXBvcnQgUlNTSSBjaGFuZ2VzLCB0aGVuIHJlc3RhcnRcbiBcdCAqIHNjYW5uaW5nIHRvIGVuc3VyZSB1cGRhdGVkIHJlc3VsdCB3aXRoIHVwZGF0ZWQgUlNTSSB2YWx1ZXMuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODowOS4yNzcwODk4MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQ4NDY3MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJsdWV0b290aCBTZXJ2aWNlIERpc2NvdmVyeSBGaWx0ZXJpbmcgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgaG93IHdlIGhhbmRsZSBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQncyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24sIHdoaWNoIGlzIGFsd2F5cyBnb29kIHRvIHNlZS4gVGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGEgc3BpbmxvY2sg4oCTIGBzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jaylgIOKAkyB0aGF0IHdyYXBzIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gSXQgc2VlbXMgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGlzIGRlcGxveWVkIHdpdGhpbiB0aGUgYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGBpc19maWx0ZXJfbWF0Y2hgIGZ1bmN0aW9ucy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGVzZSByb3V0aW5lcyBjYW4gbGVhZCB0byBpbnN0YWJpbGl0eS5cblxuVGhlIGNvZGUgY2hhbmdlcyBhcmUgdG91Y2hpbmcgYG5ldC9ibHVldG9vdGgvbWdtdC5jYCBhbmQgYGluY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oYCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgdGhpcyB0eXBlIG9mIGZpeC4gSeKAmWxsIHdhbnQgdG8gcmV2aWV3IHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGBpc19maWx0ZXJfbWF0Y2hgIHRob3JvdWdobHkuIEdpdmVuIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgaXMgZGVjbGFyZWQgaW5saW5lLCBpdCBtZWFucyBpdHMgaW1wbGVtZW50YXRpb24gaXMgZGlyZWN0bHkgYXZhaWxhYmxlIGluIHRoZSBoZWFkZXIgZmlsZSwgd2hpY2ggd2lsbCBuZWVkIHRvIGJlIGNoZWNrZWQgZm9yIGNvbnNpc3RlbmN5LlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IEJsdWV0b290aCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gTGV0J3Mgc2VlLi4uIGBuZXQvYmx1ZXRvb3RoL0tjb25maWdgIHdpbGwgY29udGFpbiBgQ09ORklHX0JUYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlncy4gRmluYWxseSwgSSdsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgY2FsbHMgdG8gYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gSeKAmWxsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBwYXRjaCBpcyBwcm9wZXJseSBhcHBsaWVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQsIGFuZCB0aGF0IHRoZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSBjb25zaXN0ZW50IHdpdGggYWxsIGV4aXN0aW5nIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjE1LjEyNTU1OTQ1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyOTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuYz02MTU5PXN0YXRpYyBpbnQgc3RhcnRfbGltaXRlZF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjYtXFxubmV0L2JsdWV0b290aC9tZ210LmM6NjE2NzpzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE2OC1cXHRcXHRcXHRcXHQgICB2b2lkICpkYXRhLCB1MTYgbGVuKVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjkte1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNzA6XFx0c3RydWN0IG1nbXRfY3Bfc3RhcnRfc2VydmljZV9kaXNjb3ZlcnkgKmNwID0gZGF0YTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTcxLVxcdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz05NTk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNpX21nbXRfaGFuZGxlciBtZ210X2hhbmRsZXJzW10gPSB7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NjczLVxcdFxcdFxcdFxcdFxcdFxcdEhDSV9NR01UX1VOQ09ORklHVVJFRCB9LFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjk2NzQ6XFx0eyBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSwgTUdNVF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWV9TSVpFLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTk2NzUtXFx0XFx0XFx0XFx0XFx0XFx0SENJX01HTVRfVkFSX0xFTiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODoxNS4xNzE1OTE5NzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDAwMjk2NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk9wZXJhdGlvbmFsaXppbmcgU2VydmljZSBEaXNjb3ZlcnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdoZW4gSSBzZWUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGhhbmRsZXIsIGZvciB0aGUgYE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUllgIGNvbW1hbmQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljICpiZWdpbnMqIOKAkyB0aGUgdHJpZ2dlciB0byBraWNrIG9mZiB0aGUgd2hvbGUgc2VydmljZSBkaXNjb3ZlcnkgcHJvY2Vzcywgd2hhdGV2ZXIgdGhhdCBzcGVjaWZpY2FsbHkgZW50YWlscyBpbiB0aGlzIGNvbnRleHQuIEl0J3MgdGhlIFwiZ29cIiBzaWduYWwsIHRoZSBzdGFydGluZyBndW4uIEknZCBuZWVkIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgb2J2aW91c2x5LCB0byB1bmRlcnN0YW5kICpob3cqIGl0IGhhbmRsZXMgdGhlIHJlcXVlc3QsIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIHBhcmFtZXRlcnMsIGFuZCBob3cgaXQgdGhlbiBoYW5kcyBvZmYgdGhlIGFjdHVhbCB3b3JrIHRvIHRoZSBsb3dlciBsYXllcnMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHNjYW4sIG9yIHNvbWV0aGluZyBtb3JlIHJlZmluZWQgd2l0aCBzcGVjaWZpYyBmaWx0ZXJpbmc/IFRoZSBkZXRhaWxzIGFyZSBpbiB0aGUgY29kZS5cblxuVGhlbiwgdGhlcmUncyBgaXNfZmlsdGVyX21hdGNoYC4gSXRzIHByZXNlbmNlIGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB3ZSBoYXZlIHNvbWUga2luZCBvZiBmaWx0ZXJpbmcgZ29pbmcgb24gaW4gdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSB1dGlsaXR5LCBhIHByZWRpY2F0ZSB0aGF0IGlzIHVzZWQgdG8gZXZhbHVhdGUgd2hldGhlciBvciBub3QgYW4gaW5jb21pbmcgZGV2aWNlIGFkdmVydGlzZW1lbnQgbWVldHMgYSBzcGVjaWZpZWQgY3JpdGVyaWEuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIGRlY2lkaW5nIGlmIGEgZGV2aWNlIGdldHMgdGhyb3VnaC4gS25vd2luZyB0aGlzLCBpdCBpcyBsaWtlbHkgZGV0ZXJtaW5pbmcgd2hldGhlciBzb21ldGhpbmcgaXMgb3IgaXMgbm90IGFuIGFwcHJvcHJpYXRlIGVuZHBvaW50LlxuXG5UaGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBzdWdnZXN0cyBhIG1vcmUgY29tcGxleCBmbG93OiBhIHJlcXVlc3QgdG8gc3RhcnQsIGEgZmlsdGVyaW5nIHByb2Nlc3MsIGFuZCB0aGVuIHBlcmhhcHMgYW4gYWN0aW9uIG9uIGRldmljZXMgdGhhdCBtYXRjaCB0aGUgY3JpdGVyaWEuIEdvb2QsIHNlbnNpYmxlIGRlc2lnbi4gSSdkIGRlZmluaXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQga2luZCBvZiBmaWx0ZXJzIGFyZSBzdXBwb3J0ZWQg4oCTIFVVSURzLCBkZXZpY2UgbmFtZXMsIFJTU0ksIG1hbnVmYWN0dXJlciBkYXRhLCBhbGwgb2YgdGhlIGFib3ZlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSBhbHNvIGtleS4gSSdkIGltbWVkaWF0ZWx5IHN0YXJ0IGFza2luZyBxdWVzdGlvbnM6IGhvdyBlZmZpY2llbnQgaXMgdGhlIGZpbHRlcmluZyBhbGdvcml0aG0/IEFyZSB3ZSB1c2luZyBhbnkgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgZmVhdHVyZXM/IEhvdyB3ZWxsIGRvZXMgaXQgc2NhbGUgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBkZXZpY2VzPyBJcyB0aGVyZSBhbnkgY2FjaGluZyBvciBwcmUtZmlsdGVyaW5nIGhhcHBlbmluZz8gVGhpcyBhbGwgaXMgaW1wb3J0YW50IGFzIGEgYmx1ZXRvb3RoIGVuZ2luZWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6MjAuMTcxODkxMTUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTUwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2ZpbHRlcl9tYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDQzOT1zdGF0aWMgYm9vbCBlaXJfaGFzX3V1aWRzKHU4ICplaXIsIHUxNiBlaXJfbGVuLCB1MTYgdXVpZF9jb3VudCwgdTggKCp1dWlkcylbMTZdKVxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtMTA0OTMtXFxubmV0L2JsdWV0b290aC9tZ210LmM6MTA0OTQ6c3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNDk1LVxcdFxcdFxcdCAgICB1MTYgZWlyX2xlbiwgdTggKnNjYW5fcnNwLCB1OCBzY2FuX3JzcF9sZW4pXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDcxND12b2lkIG1nbXRfZGV2aWNlX2ZvdW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBsaW5rX3R5cGUsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDc0Mi1cXHRcXHQvKiBXZSBhcmUgdXNpbmcgc2VydmljZSBkaXNjb3ZlcnkgKi9cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDc0MzpcXHRcXHRpZiAoIWlzX2ZpbHRlcl9tYXRjaChoZGV2LCByc3NpLCBlaXIsIGVpcl9sZW4sIHNjYW5fcnNwLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNzQ0LVxcdFxcdFxcdFxcdCAgICAgc2Nhbl9yc3BfbGVuKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6MjAuMjE3NDQ5OTAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMDU1MjEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGV2aWNlIERpc2NvdmVyeSBcdTAwMjYgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cblJpZ2h0LCBgbWdtdF9kZXZpY2VfZm91bmRgIOKAkyB0aGF0J3MgdGhlIHRyaWdnZXIgSSdtIGludGVyZXN0ZWQgaW4uICBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgaXQgYXMgY3JpdGljYWwsICpjb3JlIGtlcm5lbCBsb2dpYyogd2l0aGluIHRoZSBCbHVldG9vdGggbWFuYWdlbWVudCBpbnRlcmZhY2UuICBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIE5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGRldmljZSBkaXNjb3ZlcnkgYW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbiBwbGF5LlxuXG5GaXJzdCwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYmFyZSBtaW5pbXVtIGNvbmZpZyBJIG5lZWQgdG8gaGF2ZSBsb2FkZWQgdG8gc3RhcnQgY2hlY2tpbmcuIE9mIGNvdXJzZSBgQ09ORklHX0JUYCBoYXMgdG8gYmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbnRlcnR3aW5lZCBoZXJlPyBJIHNob3VsZCBjaGVjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGF0IHBsYXkuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODoyNC43MTgwMDQ1MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNzUyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL0tjb25maWctNS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjptZW51Y29uZmlnIEJUXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkJsdWV0b290aCBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy00MS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NDI6Y29uZmlnIEJUX0JSRURSXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkJsdWV0b290aCBDbGFzc2ljIChCUi9FRFIpIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnPTU2PXNvdXJjZSBcXFwibmV0L2JsdWV0b290aC9oaWRwL0tjb25maWdcXFwiXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTU3LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1ODpjb25maWcgQlRfTEVcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTktXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIExvdyBFbmVyZ3kgKExFKSBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy02NS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjY6Y29uZmlnIEJUX0xFX0wyQ0FQX0VDUkVEXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIkJsdWV0b290aCBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTc2LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo3Nzpjb25maWcgQlRfNkxPV1BBTlxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04Mi1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6ODM6Y29uZmlnIEJUX0xFRFNcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05MS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6OTI6Y29uZmlnIEJUX01TRlRFWFRcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIE1pY3Jvc29mdCBleHRlbnNpb25zXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTk4LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5OTpjb25maWcgQlRfQU9TUEVYVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiRW5hYmxlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBleHRlbnNpb25zXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTA2OmNvbmZpZyBCVF9ERUJVR0ZTXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJFeHBvcnQgQmx1ZXRvb3RoIGludGVybmFscyBpbiBkZWJ1Z2ZzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTExMy1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTE0OmNvbmZpZyBCVF9TRUxGVEVTVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIHNlbGYgdGVzdGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyNi1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTI3OmNvbmZpZyBCVF9TRUxGVEVTVF9FQ0RIXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyOC1cXHRib29sIFxcXCJFQ0RIIHRlc3QgY2FzZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTMzLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMzQ6Y29uZmlnIEJUX1NFTEZURVNUX1NNUFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiU01QIHRlc3QgY2FzZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQwLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxNDE6Y29uZmlnIEJUX0ZFQVRVUkVfREVCVUdcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQyLVxcdGJvb2wgXFxcIkVuYWJsZSBydW50aW1lIG9wdGlvbiBmb3IgZGVidWdnaW5nIHN0YXRlbWVudHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjI0Ljc2MjM4MzczM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODQ2NjIyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0gSSBuZWVkIHRvIGZvY3VzIG9uIGlzIHVuZG91YnRlZGx5IGBDT05GSUdfQlRgLiBUaGF0J3MgdGhlIGJpZyBvbmUgdGhhdCBkaWN0YXRlcyB3aGV0aGVyIEJsdWV0b290aCBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gaW5jbHVkZWQuIE5vdywgc2luY2UgSSBrbm93IGBtZ210LmNgIGlzIGludm9sdmVkIGluIEJsdWV0b290aCBtYW5hZ2VtZW50LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoYXQgdGhlIGNvbXBpbGF0aW9uIG9mIGBtZ210LmNgIGlzIGFjdHVhbGx5IHRpZWQgdG8gdGhlIGVuYWJsaW5nIG9mIGBDT05GSUdfQlRgLiBUbyBkbyB0aGF0LCBJJ20gaW1tZWRpYXRlbHkgaGVhZGluZyBvdmVyIHRvIGBuZXQvYmx1ZXRvb3RoL01ha2VmaWxlYC4gSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhhdCBkZXBlbmRlbmN5IGlzIGhhbmRsZWQgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gTGV0J3Mgc2VlIGhvdyB0aGF0IHRpZXMgdG9nZXRoZXIuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY2NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjI4LjA0NzA0ODQ1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MTQ4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWdtdC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9NYWtlZmlsZT0xMj1ibHVldG9vdGhfNmxvd3Bhbi15IDo9IDZsb3dwYW4ub1xcbm5ldC9ibHVldG9vdGgvTWFrZWZpbGUtMTMtXFxubmV0L2JsdWV0b290aC9NYWtlZmlsZToxNDpibHVldG9vdGgteSA6PSBhZl9ibHVldG9vdGgubyBoY2lfY29yZS5vIGhjaV9jb25uLm8gaGNpX2V2ZW50Lm8gbWdtdC5vIFxcXFxcXG5uZXQvYmx1ZXRvb3RoL01ha2VmaWxlLTE1LVxcdGhjaV9zb2NrLm8gaGNpX3N5c2ZzLm8gbDJjYXBfY29yZS5vIGwyY2FwX3NvY2subyBzbXAubyBsaWIubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjI4LjA4OTk2NzUyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ1NzQ5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbHVldG9vdGggQ29uZmlndXJhdGlvbiBhbmQgQVBJIEVudHJ5cG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJsdWV0b290aCBjb2RlLiBSaWdodCwgYG1nbXQub2AgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIGBibHVldG9vdGgteWAsIHdoaWNoIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CVGAgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2QgdG8ga25vdywgc2V0cyB0aGUgc3RhZ2UuIE5vdywgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAgYW5kIGBpc19maWx0ZXJfbWF0Y2hgLiBXYWl0LCBJIHRob3VnaHQgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCB3YXMgc3RhdGljLCB3aGljaCB3b3VsZCBtYWtlIGl0IGFuIGludGVybmFsIGhlbHBlci4gQnV0IGl0J3MgbGlzdGVkIGFzIGEgaGFuZGxlciBpbiBgbWdtdF9oYW5kbGVyc2AuIFRpbWUgZm9yIGEgcXVpY2sgY2hlY2suIFllcCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCAqaXMqIHN0YXRpYy5cblxuSGFuZyBvbi4uLiB0aGUgcHJvbXB0IG1lbnRpb25zIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlIGZyb20gYSBkZWJ1Z2dpbmcgYW5kIHN5bWJvbCByZXNvbHV0aW9uIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGZvciBhbiBleHRlcm5hbCBBUEkuIFRoaXMgY2FsbHMgZm9yIGFub3RoZXIgY2hlY2suLi4gaXMgaXQgaW5saW5lZD8gSG1tLCBpdCdzIGEgaGFuZGxlciBpbiBhbiBhcnJheSwgc28gaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoYXQgcHJhY3RpY2FsbHkgZ3VhcmFudGVlcyBpdCB3b24ndCBiZSBpbmxpbmVkLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gaXQncyBwYXJ0IG9mIGEgaGFuZGxlciB0YWJsZS5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgbGV0J3MgYWxzbyBpbmNsdWRlIGBtZ210X2RldmljZV9mb3VuZGAsIGJlY2F1c2UgdGhhdCBjYWxscyBgaXNfZmlsdGVyX21hdGNoYC4gQW5kIGZpbmFsbHksIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAuLi4gdGhhdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBiZXN0IHRvIGZpbmQgd2hlcmUgaXQncyBhY3R1YWxseSAqY2FsbGVkKiB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6MzUuMjM1NzE5NDYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY1ODg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MjcwOT12b2lkIGhjaV9yZWxlYXNlX2RldihzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0yNzMwLVxcdGhjaV9jb25uX3BhcmFtc19jbGVhcl9hbGwoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjI3MzE6XFx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTI3MzItXFx0aGNpX2Jsb2NrZWRfa2V5c19jbGVhcihoZGV2KTtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz0zMjkxPWludCBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTMzMTctXFx0ICovXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjMzMTg6XFx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTMzMTktXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz02MDgxPXN0YXRpYyBpbnQgc3RhcnRfZGlzY292ZXJ5X2ludGVybmFsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTIyLVxcdCAqL1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxMjM6XFx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XFxubmV0L2JsdWV0b290aC9tZ210LmMtNjEyNC1cXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNjc9c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjI0NS1cXHQgKi9cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MjQ2OlxcdGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyNDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjM1LjI4NjM4M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYyOTIyODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENhbGxzIHRvIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHdoZXJlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgZ2V0cyBjYWxsZWQuIFNlZW1zIGxpa2UgYSBjcml0aWNhbCBwYXJ0IG9mIG1hbmFnaW5nIGRpc2NvdmVyeSBmaWx0ZXJzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGhjaV9yZWxlYXNlX2RldmAsIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCwgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAsIGFuZCBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLlxuXG5UaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcyBlc3BlY2lhbGx5IHdvcnRoIGNoZWNraW5nOlxuXG4qICAgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YDogVGhpcyBvbmUncyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBhZGRyZXNzIGlzIHRha2VuLCBhbmQgaXQncyBub3QgaW5saW5lZCwgd2hpY2ggb2Z0ZW4gbWVhbnMgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LlxuKiAgIGBtZ210X2RldmljZV9mb3VuZGA6IEl0IHNlZW1zIGl0IGNhbGxzIGBpc19maWx0ZXJfbWF0Y2hgLlxuKiAgIGBoY2lfcmVsZWFzZV9kZXZgOlxuKiAgIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYDpcbiogICBgc3RhcnRfZGlzY292ZXJ5X2ludGVybmFsYDogVGhpcyBvbmUgYWxzbyB3YXJyYW50cyBzY3J1dGlueSwgc2luY2UgaXQncyBzdGF0aWMgYW5kIHRoZSBhZGRyZXNzICp3YXMqIHRha2VuIChidXQgbm90IGFueW1vcmUsIGl0J3MgY2FsbGVkIGJ5IGBzdGFydF9kaXNjb3ZlcnlgIGFuZCBgc3RhcnRfbGltaXRlZF9kaXNjb3ZlcnlgLCBzbyB0aGVyZSBpcyBubyBzcGVjaWZpYyBhZGRyZXNzIHRha2VuKVxuXG5TbywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGJlaGF2aW9yIG9mIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgIGFuZCBhbHNvIGBzdGFydF9kaXNjb3ZlcnlgIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiBob3cgdGhlc2UgZmlsdGVycyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgY2xlYXJlZCB0aHJvdWdob3V0IHRoZSBkaXNjb3ZlcnkgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODo1Mi45MTU2MTMyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MzcyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhcnRfZGlzY292ZXJ5X2ludGVybmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvbWdtdC5jPTYwNzM9c3RhdGljIGludCBzdGFydF9kaXNjb3Zlcnlfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYwODAtXFxubmV0L2JsdWV0b290aC9tZ210LmM6NjA4MTpzdGF0aWMgaW50IHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYwODItXFx0XFx0XFx0XFx0ICAgIHUxNiBvcCwgdm9pZCAqZGF0YSwgdTE2IGxlbilcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNTI9c3RhdGljIGludCBzdGFydF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNTQte1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNTU6XFx0cmV0dXJuIHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbChzaywgaGRldiwgTUdNVF9PUF9TVEFSVF9ESVNDT1ZFUlksXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE1Ni1cXHRcXHRcXHRcXHRcXHRkYXRhLCBsZW4pO1xcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmM9NjE1OT1zdGF0aWMgaW50IHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTYxLXtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTYyOlxcdHJldHVybiBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwoc2ssIGhkZXYsXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE2My1cXHRcXHRcXHRcXHRcXHRNR01UX09QX1NUQVJUX0xJTUlURURfRElTQ09WRVJZLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODo1Mi45NjM0NTM0ODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgyNzI5OTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQmx1ZXRvb3RoIERpc2NvdmVyeSBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgQmx1ZXRvb3RoIGRpc2NvdmVyeSBmaWx0ZXJpbmcgZml4LCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnb3Qgc28gZmFyLiBXZSd2ZSBnb3QgdGhlc2UgZW50cnkgcG9pbnRzIOKAkyBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBgc3RhcnRfZGlzY292ZXJ5YCwgYHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5YCwgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYGhjaV9yZWxlYXNlX2RldmAsIGFuZCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2Ag4oCTIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgYmVjYXVzZSBgc3RhcnRfZGlzY292ZXJ5YCBhbmQgYHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5YCBhcmUgaGFuZGxlZCB3aXRoaW4gYG1nbXRfaGFuZGxlcnNgLiBJIHRoaW5rIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYWRkcmVzcyBhIHJhY2UgY29uZGl0aW9uLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5MZXQncyBxdWlja2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEl0IHNlZW1zIHRoZSBjb3JlIGNvbmZpZyBpcyBgQlRgLlxuXG5GaW5hbGx5LCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ2xsIGJlIHRhcmdldGluZyB0aGUgZm9sbG93aW5nIHN5bWJvbHMgZHVyaW5nIGZ1enppbmcgdG8gZW5zdXJlIG1heGltdW0gY292ZXJhZ2UgYW5kIHRlc3RpbmcgdGhlIHJlbGV2YW50IGxvZ2ljOiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBgbWdtdF9kZXZpY2VfZm91bmRgLCBgc3RhcnRfZGlzY292ZXJ5YCwgYHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5YCwgYGhjaV9yZWxlYXNlX2RldmAsIGFuZCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AuXG5cbkknbGwgYmUgdXRpbGl6aW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcHJlc2VudCBteSBmdXp6aW5nIGZpbmRpbmdzLCBhbmQgc2hvdWxkIGJlIHJlYWR5IHRvIHJlcG9ydCBvbiB0aGUgZWZmaWNhY3kgb2YgdGhlIGZpeCBzb29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODgyLCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODo1OC43OTA3NTUxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzODExMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5XCIsXG4gICAgXCJtZ210X2RldmljZV9mb3VuZFwiLFxuICAgIFwic3RhcnRfZGlzY292ZXJ5XCIsXG4gICAgXCJzdGFydF9saW1pdGVkX2Rpc2NvdmVyeVwiLFxuICAgIFwiaGNpX3JlbGVhc2VfZGV2XCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCB1dWlkX2NvdW50IGFuZCB1dWlkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaW50ZXJmYWNlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5XCIsXG4gICAgXCJtZ210X2RldmljZV9mb3VuZFwiLFxuICAgIFwic3RhcnRfZGlzY292ZXJ5XCIsXG4gICAgXCJzdGFydF9saW1pdGVkX2Rpc2NvdmVyeVwiLFxuICAgIFwiaGNpX3JlbGVhc2VfZGV2XCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCB1dWlkX2NvdW50IGFuZCB1dWlkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaW50ZXJmYWNlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6NTguODc0NTcyNDg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTkwOTI2ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6NTguODc1MDkyODQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxOTA0MDM0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IGFkZGluZyBzcGlubG9ja3MgYXJvdW5kIGFjY2Vzc2VzIHRvIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBJdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIG1vZGlmeWluZyBvciByZWFkaW5nIHRoZSBkaXNjb3ZlcnkgZmlsdGVyIFVVSURzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNDliM2ZlNTM4ZWVjZTA0YWU0NGI0NzExNDAwZGZiNGM0N2I2ZTgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxNjo1ODowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxuKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbkBAIC05MzUsOSArOTM1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVwb3J0X2ludmFsaWRfcnNzaSA9IHRydWU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS5yc3NpID0gSENJX1JTU0lfSU5WQUxJRDtcbi1cdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuK1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7XG4gXHRrZnJlZShoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyk7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IE5VTEw7XG4gXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL21nbXQuYyBiL25ldC9ibHVldG9vdGgvbWdtdC5jXG5pbmRleCA4NjBjMDg2MDExYjcxLi5hYzQ4NjRlNTZlYzcyIDEwMDY0NFxuLS0tIGEvbmV0L2JsdWV0b290aC9tZ210LmNcbisrKyBiL25ldC9ibHVldG9vdGgvbWdtdC5jXG5AQCAtNjE3MSw2ICs2MTcxLDcgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0c3RydWN0IG1nbXRfcGVuZGluZ19jbWQgKmNtZDtcbiBcdGNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTtcbiBcdHUxNiB1dWlkX2NvdW50LCBleHBlY3RlZF9sZW47XG4rXHR1OCAoKnV1aWRzKVsxNl0gPSBOVUxMO1xuIFx0dTggc3RhdHVzO1xuIFx0aW50IGVycjtcbiBcbkBAIC02MjQ3LDEyICs2MjQ4LDEwIEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudHlwZSA9IGNwLVx1MDAzZXR5cGU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS5yc3NpID0gY3AtXHUwMDNlcnNzaTtcbi1cdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xuIFxuIFx0aWYgKHV1aWRfY291bnQgXHUwMDNlIDApIHtcbi1cdFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBrbWVtZHVwKGNwLVx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogMTYsXG4tXHRcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4tXHRcdGlmICghaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpIHtcbitcdFx0dXVpZHMgPSBrbWVtZHVwKGNwLVx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogc2l6ZW9mKCp1dWlkcyksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXV1aWRzKSB7XG4gXHRcdFx0ZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtXHUwMDNlaWQsXG4gXHRcdFx0XHRcdFx0TUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSxcbiBcdFx0XHRcdFx0XHRNR01UX1NUQVRVU19GQUlMRUQsXG5AQCAtNjI2Miw2ICs2MjYxLDExIEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuK1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSB1dWlkcztcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4rXG4gXHRlcnIgPSBoY2lfY21kX3N5bmNfcXVldWUoaGRldiwgc3RhcnRfZGlzY292ZXJ5X3N5bmMsIGNtZCxcbiBcdFx0XHRcdCBzdGFydF9kaXNjb3ZlcnlfY29tcGxldGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTEwNTA1LDYgKzEwNTA5LDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxuIFx0ICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKVxuIFx0XHRyZXR1cm4gIGZhbHNlO1xuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0aWYgKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkge1xuIFx0XHQvKiBJZiBhIGxpc3Qgb2YgVVVJRHMgaXMgcHJvdmlkZWQgaW4gZmlsdGVyLCByZXN1bHRzIHdpdGggbm9cbiBcdFx0ICogbWF0Y2hpbmcgVVVJRCBzaG91bGQgYmUgZHJvcHBlZC5cbkBAIC0xMDUxMyw5ICsxMDUxOCwxMiBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG4gXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhZWlyX2hhc191dWlkcyhzY2FuX3JzcCwgc2Nhbl9yc3BfbGVuLFxuIFx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCxcbi1cdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSlcbitcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSkge1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0fVxuIFx0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHQvKiBJZiBkdXBsaWNhdGUgZmlsdGVyaW5nIGRvZXMgbm90IHJlcG9ydCBSU1NJIGNoYW5nZXMsIHRoZW4gcmVzdGFydFxuIFx0ICogc2Nhbm5pbmcgdG8gZW5zdXJlIHVwZGF0ZWQgcmVzdWx0IHdpdGggdXBkYXRlZCBSU1NJIHZhbHVlcy5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjU4Ljg3NTA5MzcwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTkwMzg1MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbHVldG9vdGggTWFuYWdlbWVudCBDb2RlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBoaXR0aW5nIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIGFuZCBgaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgc3Bpbl9sb2NrYCBhbmQgYHNwaW5fdW5sb2NrYCBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvY2tpbmcgZml4LCB3aGljaCBpcyBhbHdheXMgZ29vZCB0byBzZWUuIEl04oCZcyBleHBsaWNpdGx5IHByb3RlY3RpbmcgdGhvc2UgYHV1aWRfY291bnRgIGFuZCBgdXVpZHNgIG1lbWJlcnMgZnJvbSBjb25jdXJyZW50IGFjY2VzcywgbWVhbmluZyBpdCdzIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIEJsdWV0b290aCBzdGFjay5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYSBuZXcgdnVsbmVyYWJpbGl0eS4gSSBxdWlja2x5IHNjYW4gZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIE9rYXksIGB1dWlkc2AgYXJlIGFsbG9jYXRlZCB1c2luZyBga21lbWR1cGAsIGFuZCB0aGUgc291cmNlIGlzIHRoZSB1c2VyLXNwYWNlIGNvbW1hbmQgcGF5bG9hZCBgY3AtXHUwMDNldXVpZHNgLiBCZWNhdXNlIGBjcC1cdTAwM2V1dWlkc2AgY29tZXMgZnJvbSB0aGUgdXNlci1zcGFjZSBwYXlsb2FkLCBpdCdzIGluaXRpYWxpemVkLiBHb29kLiBUaGlzIGlzIG9ubHkgYWRkaW5nIGxvY2tpbmc7IGl0J3MgbW92aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBpbnNpZGUgdGhlIHNwaW5sb2NrLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjb25jdXJyZW5jeSBidWcgZml4LiBOb3RoaW5nIGhlcmUgaXMgY3JlYXRpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay5cblxuVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2guIFRoZSBsb2NraW5nIGlzIHByZWNpc2VseSB3aGF0J3MgbmVlZGVkLiBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBuZXcgc2VjdXJpdHkgaXNzdWVzLiBUaGUgcGF0Y2ggYWltcyB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIGFuZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gSSdtIHNhdGlzZmllZC4gTm8gbmVlZCB0byBydW4gS01TQU4gb24gdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzYsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTk6MDYuMDY1NDgxNjUxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgc3BpbmxvY2tzIGFyb3VuZCBhY2Nlc3NlcyB0byBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gSXQgcHJldmVudHMgZGF0YSByYWNlcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBtb2RpZnlpbmcgb3IgcmVhZGluZyB0aGUgZGlzY292ZXJ5IGZpbHRlciBVVUlEcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AuIEl0IHByZXZlbnRzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gbW9kaWZ5aW5nIG9yIHJlYWRpbmcgdGhlIGRpc2NvdmVyeSBmaWx0ZXIgVVVJRHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow8mk9k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 16:40:08 +0000 UTC FinishedAt: 2026-08-08 16:59:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT" ], "series_id": "b619b929-9a79-4c92-8db2-c370201785f2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "start_service_discovery", "mgmt_device_found", "start_discovery", "start_limited_discovery", "hci_release_dev", "hci_update_passive_scan_sync" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7c3RhcnRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O3N0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O2hjaV9yZWxlYXNlX2RldiYjMzQ7LAogICAgJiMzNDtoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBJdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIG1vZGlmeWluZyBvciByZWFkaW5nIHRoZSBkaXNjb3ZlcnkgZmlsdGVyIFVVSURzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCB1dWlkX2NvdW50IGFuZCB1dWlkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaW50ZXJmYWNlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0OWIzZmU1MzhlZWNlMDRhZTQ0YjQ3MTE0MDBkZmI0YzQ3YjZlODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDE2OjU4OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbkBAIC05MzUsOSAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiYjNDM7XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcdGtmcmVlKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gTlVMTDtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbWdtdC5jIGIvbmV0L2JsdWV0b290aC9tZ210LmNcbmluZGV4IDg2MGMwODYwMTFiNzEuLmFjNDg2NGU1NmVjNzIgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JsdWV0b290aC9tZ210LmNcbkBAIC02MTcxLDYgJiM0Mzs2MTcxLDcgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0c3RydWN0IG1nbXRfcGVuZGluZ19jbWQgKmNtZDtcbiBcdGNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTtcbiBcdHUxNiB1dWlkX2NvdW50LCBleHBlY3RlZF9sZW47XG4mIzQzO1x0dTggKCp1dWlkcylbMTZdID0gTlVMTDtcbiBcdHU4IHN0YXR1cztcbiBcdGludCBlcnI7XG4gXG5AQCAtNjI0NywxMiAmIzQzOzYyNDgsMTAgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IHRydWU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS50eXBlID0gY3AtXHUwMDNldHlwZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJzc2kgPSBjcC1cdTAwM2Vyc3NpO1xuLVx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4gXG4gXHRpZiAodXVpZF9jb3VudCBcdTAwM2UgMCkge1xuLVx0XHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXHUwMDNldXVpZHMsIHV1aWRfY291bnQgKiAxNixcbi1cdFx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKCFoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xuJiM0MztcdFx0dXVpZHMgPSBrbWVtZHVwKGNwLVx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogc2l6ZW9mKCp1dWlkcyksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCF1dWlkcykge1xuIFx0XHRcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVx1MDAzZWlkLFxuIFx0XHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksXG4gXHRcdFx0XHRcdFx0TUdNVF9TVEFUVVNfRkFJTEVELFxuQEAgLTYyNjIsNiAmIzQzOzYyNjEsMTEgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuJiM0MztcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gdXVpZHM7XG4mIzQzO1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4mIzQzO1xuIFx0ZXJyID0gaGNpX2NtZF9zeW5jX3F1ZXVlKGhkZXYsIHN0YXJ0X2Rpc2NvdmVyeV9zeW5jLCBjbWQsXG4gXHRcdFx0XHQgc3RhcnRfZGlzY292ZXJ5X2NvbXBsZXRlKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbkBAIC0xMDUwNSw2ICYjNDM7MTA1MDksNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG4gXHQgICAgICFoY2lfdGVzdF9xdWlyayhoZGV2LCBIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIpKSkpXG4gXHRcdHJldHVybiAgZmFsc2U7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0aWYgKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkge1xuIFx0XHQvKiBJZiBhIGxpc3Qgb2YgVVVJRHMgaXMgcHJvdmlkZWQgaW4gZmlsdGVyLCByZXN1bHRzIHdpdGggbm9cbiBcdFx0ICogbWF0Y2hpbmcgVVVJRCBzaG91bGQgYmUgZHJvcHBlZC5cbkBAIC0xMDUxMyw5ICYjNDM7MTA1MTgsMTIgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxuIFx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQsXG4tXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpXG4mIzQzO1x0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpKSB7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiBcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcbiBcdC8qIElmIGR1cGxpY2F0ZSBmaWx0ZXJpbmcgZG9lcyBub3QgcmVwb3J0IFJTU0kgY2hhbmdlcywgdGhlbiByZXN0YXJ0XG4gXHQgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O21nbXRfZGV2aWNlX2ZvdW5kJiMzNDssCiAgICAmIzM0O3N0YXJ0X2Rpc2NvdmVyeSYjMzQ7LAogICAgJiMzNDtzdGFydF9saW1pdGVkX2Rpc2NvdmVyeSYjMzQ7LAogICAgJiMzNDtoY2lfcmVsZWFzZV9kZXYmIzM0OywKICAgICYjMzQ7aGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIEJsdWV0b290aCBzZXJ2aWNlIGRpc2NvdmVyeSBmaWx0ZXJpbmcgYnkgYWRkaW5nIGEgc3BpbmxvY2sgYXJvdW5kIHV1aWRfY291bnQgYW5kIHV1aWRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCbHVldG9vdGggbWFuYWdlbWVudCBpbnRlcmZhY2UpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTQ5YjNmZTUzOGVlY2UwNGFlNDRiNDcxMTQwMGRmYjRjNDdiNmU4MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMTY6NTg6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC05MzUsOSAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAloZGV2LSZndDtkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXBvcnRfaW52YWxpZF9yc3NpID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7CiAJa2ZyZWUoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwppbmRleCA4NjBjMDg2MDExYjcxLi5hYzQ4NjRlNTZlYzcyIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpAQCAtNjE3MSw2ICYjNDM7NjE3MSw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAlzdHJ1Y3QgbWdtdF9wZW5kaW5nX2NtZCAqY21kOwogCWNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTsKIAl1MTYgdXVpZF9jb3VudCwgZXhwZWN0ZWRfbGVuOwomIzQzOwl1OCAoKnV1aWRzKVsxNl0gPSBOVUxMOwogCXU4IHN0YXR1czsKIAlpbnQgZXJyOwogCkBAIC02MjQ3LDEyICYjNDM7NjI0OCwxMCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSB0cnVlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS50eXBlID0gY3AtJmd0O3R5cGU7CiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnJzc2kgPSBjcC0mZ3Q7cnNzaTsKLQloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKLQkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJdXVpZHMgPSBrbWVtZHVwKGNwLSZndDt1dWlkcywgdXVpZF9jb3VudCAqIHNpemVvZigqdXVpZHMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghdXVpZHMpIHsKIAkJCWVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LSZndDtpZCwKIAkJCQkJCU1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksCiAJCQkJCQlNR01UX1NUQVRVU19GQUlMRUQsCkBAIC02MjYyLDYgJiM0Mzs2MjYxLDExIEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAkJfQogCX0KIAomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiYjNDM7CWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcyA9IHV1aWRzOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwogCWVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLAogCQkJCSBzdGFydF9kaXNjb3ZlcnlfY29tcGxldGUpOwogCWlmIChlcnIgJmx0OyAwKSB7CkBAIC0xMDUwNSw2ICYjNDM7MTA1MDksNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsCiAJICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKQogCQlyZXR1cm4gIGZhbHNlOwogCiYjNDM7CXNwaW5fbG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAlpZiAoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkgewogCQkvKiBJZiBhIGxpc3Qgb2YgVVVJRHMgaXMgcHJvdmlkZWQgaW4gZmlsdGVyLCByZXN1bHRzIHdpdGggbm8KIAkJICogbWF0Y2hpbmcgVVVJRCBzaG91bGQgYmUgZHJvcHBlZC4KQEAgLTEwNTEzLDkgJiM0MzsxMDUxOCwxMiBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsCiAJCQkJICAgaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKSAmYW1wOyZhbXA7CiAJCSAgICAhZWlyX2hhc191dWlkcyhzY2FuX3JzcCwgc2Nhbl9yc3BfbGVuLAogCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50LAotCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpCiYjNDM7CQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpIHsKJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KIAl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCiAJLyogSWYgZHVwbGljYXRlIGZpbHRlcmluZyBkb2VzIG5vdCByZXBvcnQgUlNTSSBjaGFuZ2VzLCB0aGVuIHJlc3RhcnQKIAkgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJsdWV0b290aCBTZXJ2aWNlIERpc2NvdmVyeSBGaWx0ZXJpbmcgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0d2Vha2luZyBob3cgd2UgaGFuZGxlIEJsdWV0b290aCBzZXJ2aWNlIGRpc2NvdmVyeSBmaWx0ZXJpbmcuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24sIHdoaWNoIGlzIGFsd2F5cyBnb29kIHRvIHNlZS4gVGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGEgc3BpbmxvY2sg4oCTIGBzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jaylgIOKAkyB0aGF0IHdyYXBzIGFjY2Vzc2VzIHRvIGBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZHNgLiBJdCBzZWVtcyB0aGUgbG9ja2luZyBtZWNoYW5pc20gaXMgZGVwbG95ZWQgd2l0aGluIHRoZSBgaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJgLCBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgZnVuY3Rpb25zLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZXNlIHJvdXRpbmVzIGNhbiBsZWFkIHRvIGluc3RhYmlsaXR5LgoKVGhlIGNvZGUgY2hhbmdlcyBhcmUgdG91Y2hpbmcgYG5ldC9ibHVldG9vdGgvbWdtdC5jYCBhbmQgYGluY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oYCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgdGhpcyB0eXBlIG9mIGZpeC4gSeKAmWxsIHdhbnQgdG8gcmV2aWV3IHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGBpc19maWx0ZXJfbWF0Y2hgIHRob3JvdWdobHkuIEdpdmVuIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgaXMgZGVjbGFyZWQgaW5saW5lLCBpdCBtZWFucyBpdHMgaW1wbGVtZW50YXRpb24gaXMgZGlyZWN0bHkgYXZhaWxhYmxlIGluIHRoZSBoZWFkZXIgZmlsZSwgd2hpY2ggd2lsbCBuZWVkIHRvIGJlIGNoZWNrZWQgZm9yIGNvbnNpc3RlbmN5LgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoZSByZWxldmFudCBCbHVldG9vdGggY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIExldCYjMzk7cyBzZWUuLi4gYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2Agd2lsbCBjb250YWluIGBDT05GSUdfQlRgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWdzLiBGaW5hbGx5LCBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgY2FsbHMgdG8gYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gSeKAmWxsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBwYXRjaCBpcyBwcm9wZXJseSBhcHBsaWVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQsIGFuZCB0aGF0IHRoZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSBjb25zaXN0ZW50IHdpdGggYWxsIGV4aXN0aW5nIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvbWdtdC5jPTYxNTk9c3RhdGljIGludCBzdGFydF9saW1pdGVkX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjYtXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTY3OnN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjgtXHRcdFx0XHQgICB2b2lkICpkYXRhLCB1MTYgbGVuKVxubmV0L2JsdWV0b290aC9tZ210LmMtNjE2OS17XG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTcwOlx0c3RydWN0IG1nbXRfY3Bfc3RhcnRfc2VydmljZV9kaXNjb3ZlcnkgKmNwID0gZGF0YTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNzEtXHRzdHJ1Y3QgbWdtdF9wZW5kaW5nX2NtZCAqY21kO1xuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTk1OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBoY2lfbWdtdF9oYW5kbGVyIG1nbXRfaGFuZGxlcnNbXSA9IHtcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NjczLVx0XHRcdFx0XHRcdEhDSV9NR01UX1VOQ09ORklHVVJFRCB9LFxubmV0L2JsdWV0b290aC9tZ210LmM6OTY3NDpcdHsgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnksIE1HTVRfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUllfU0laRSxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTk2NzUtXHRcdFx0XHRcdFx0SENJX01HTVRfVkFSX0xFTiB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk9wZXJhdGlvbmFsaXppbmcgU2VydmljZSBEaXNjb3ZlcnkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgaGFuZGxlciwgZm9yIHRoZSBgTUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWWAgY29tbWFuZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKmJlZ2lucyog4oCTIHRoZSB0cmlnZ2VyIHRvIGtpY2sgb2ZmIHRoZSB3aG9sZSBzZXJ2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLCB3aGF0ZXZlciB0aGF0IHNwZWNpZmljYWxseSBlbnRhaWxzIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlICYjMzQ7Z28mIzM0OyBzaWduYWwsIHRoZSBzdGFydGluZyBndW4uIEkmIzM5O2QgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24sIG9idmlvdXNseSwgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCBoYW5kbGVzIHRoZSByZXF1ZXN0LCBob3cgaXQgdmFsaWRhdGVzIHRoZSBwYXJhbWV0ZXJzLCBhbmQgaG93IGl0IHRoZW4gaGFuZHMgb2ZmIHRoZSBhY3R1YWwgd29yayB0byB0aGUgbG93ZXIgbGF5ZXJzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBzY2FuLCBvciBzb21ldGhpbmcgbW9yZSByZWZpbmVkIHdpdGggc3BlY2lmaWMgZmlsdGVyaW5nPyBUaGUgZGV0YWlscyBhcmUgaW4gdGhlIGNvZGUuCgpUaGVuLCB0aGVyZSYjMzk7cyBgaXNfZmlsdGVyX21hdGNoYC4gSXRzIHByZXNlbmNlIGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB3ZSBoYXZlIHNvbWUga2luZCBvZiBmaWx0ZXJpbmcgZ29pbmcgb24gaW4gdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSB1dGlsaXR5LCBhIHByZWRpY2F0ZSB0aGF0IGlzIHVzZWQgdG8gZXZhbHVhdGUgd2hldGhlciBvciBub3QgYW4gaW5jb21pbmcgZGV2aWNlIGFkdmVydGlzZW1lbnQgbWVldHMgYSBzcGVjaWZpZWQgY3JpdGVyaWEuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCBkZWNpZGluZyBpZiBhIGRldmljZSBnZXRzIHRocm91Z2guIEtub3dpbmcgdGhpcywgaXQgaXMgbGlrZWx5IGRldGVybWluaW5nIHdoZXRoZXIgc29tZXRoaW5nIGlzIG9yIGlzIG5vdCBhbiBhcHByb3ByaWF0ZSBlbmRwb2ludC4KClRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIHN1Z2dlc3RzIGEgbW9yZSBjb21wbGV4IGZsb3c6IGEgcmVxdWVzdCB0byBzdGFydCwgYSBmaWx0ZXJpbmcgcHJvY2VzcywgYW5kIHRoZW4gcGVyaGFwcyBhbiBhY3Rpb24gb24gZGV2aWNlcyB0aGF0IG1hdGNoIHRoZSBjcml0ZXJpYS4gR29vZCwgc2Vuc2libGUgZGVzaWduLiBJJiMzOTtkIGRlZmluaXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQga2luZCBvZiBmaWx0ZXJzIGFyZSBzdXBwb3J0ZWQg4oCTIFVVSURzLCBkZXZpY2UgbmFtZXMsIFJTU0ksIG1hbnVmYWN0dXJlciBkYXRhLCBhbGwgb2YgdGhlIGFib3ZlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSBhbHNvIGtleS4gSSYjMzk7ZCBpbW1lZGlhdGVseSBzdGFydCBhc2tpbmcgcXVlc3Rpb25zOiBob3cgZWZmaWNpZW50IGlzIHRoZSBmaWx0ZXJpbmcgYWxnb3JpdGhtPyBBcmUgd2UgdXNpbmcgYW55IGhhcmR3YXJlLWFjY2VsZXJhdGVkIGZlYXR1cmVzPyBIb3cgd2VsbCBkb2VzIGl0IHNjYWxlIHdpdGggYSBsYXJnZSBudW1iZXIgb2YgZGV2aWNlcz8gSXMgdGhlcmUgYW55IGNhY2hpbmcgb3IgcHJlLWZpbHRlcmluZyBoYXBwZW5pbmc/IFRoaXMgYWxsIGlzIGltcG9ydGFudCBhcyBhIGJsdWV0b290aCBlbmdpbmVlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19maWx0ZXJfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDQzOT1zdGF0aWMgYm9vbCBlaXJfaGFzX3V1aWRzKHU4ICplaXIsIHUxNiBlaXJfbGVuLCB1MTYgdXVpZF9jb3VudCwgdTggKCp1dWlkcylbMTZdKVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNDkzLVxubmV0L2JsdWV0b290aC9tZ210LmM6MTA0OTQ6c3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxubmV0L2JsdWV0b290aC9tZ210LmMtMTA0OTUtXHRcdFx0ICAgIHUxNiBlaXJfbGVuLCB1OCAqc2Nhbl9yc3AsIHU4IHNjYW5fcnNwX2xlbilcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDcxND12b2lkIG1nbXRfZGV2aWNlX2ZvdW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBsaW5rX3R5cGUsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtMTA3NDItXHRcdC8qIFdlIGFyZSB1c2luZyBzZXJ2aWNlIGRpc2NvdmVyeSAqL1xubmV0L2JsdWV0b290aC9tZ210LmM6MTA3NDM6XHRcdGlmICghaXNfZmlsdGVyX21hdGNoKGhkZXYsIHJzc2ksIGVpciwgZWlyX2xlbiwgc2Nhbl9yc3AsXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDc0NC1cdFx0XHRcdCAgICAgc2Nhbl9yc3BfbGVuKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGV2aWNlIERpc2NvdmVyeSAmYW1wOyBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKClJpZ2h0LCBgbWdtdF9kZXZpY2VfZm91bmRgIOKAkyB0aGF0JiMzOTtzIHRoZSB0cmlnZ2VyIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gIEltbWVkaWF0ZWx5LCBteSBicmFpbiBmbGFncyBpdCBhcyBjcml0aWNhbCwgKmNvcmUga2VybmVsIGxvZ2ljKiB3aXRoaW4gdGhlIEJsdWV0b290aCBtYW5hZ2VtZW50IGludGVyZmFjZS4gIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucywgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIE5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBkZXZpY2UgZGlzY292ZXJ5IGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW4gcGxheS4KCkZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYmFyZSBtaW5pbXVtIGNvbmZpZyBJIG5lZWQgdG8gaGF2ZSBsb2FkZWQgdG8gc3RhcnQgY2hlY2tpbmcuIE9mIGNvdXJzZSBgQ09ORklHX0JUYCBoYXMgdG8gYmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbnRlcnR3aW5lZCBoZXJlPyBJIHNob3VsZCBjaGVjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGF0IHBsYXkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL0tjb25maWctNS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo2Om1lbnVjb25maWcgQlRcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Qmx1ZXRvb3RoIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTQxLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjQyOmNvbmZpZyBCVF9CUkVEUlxubmV0L2JsdWV0b290aC9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtCbHVldG9vdGggQ2xhc3NpYyAoQlIvRURSKSBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZz01Nj1zb3VyY2UgXCYjMzQ7bmV0L2JsdWV0b290aC9oaWRwL0tjb25maWdcJiMzNDtcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy01Ny1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1ODpjb25maWcgQlRfTEVcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIExvdyBFbmVyZ3kgKExFKSBmZWF0dXJlc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy02NS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo2Njpjb25maWcgQlRfTEVfTDJDQVBfRUNSRURcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7Qmx1ZXRvb3RoIEwyQ0FQIEVuaGFuY2VkIENyZWRpdCBGbG93IENvbnRyb2xcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNzYtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6Nzc6Y29uZmlnIEJUXzZMT1dQQU5cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0JsdWV0b290aCA2TG9XUEFOIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctODItXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6ODM6Y29uZmlnIEJUX0xFRFNcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05MS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5Mjpjb25maWcgQlRfTVNGVEVYVFxubmV0L2JsdWV0b290aC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgTWljcm9zb2Z0IGV4dGVuc2lvbnNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTgtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6OTk6Y29uZmlnIEJUX0FPU1BFWFRcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O0VuYWJsZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgZXh0ZW5zaW9uc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDUtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTA2OmNvbmZpZyBCVF9ERUJVR0ZTXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTA3LVx0Ym9vbCBcJiMzNDtFeHBvcnQgQmx1ZXRvb3RoIGludGVybmFscyBpbiBkZWJ1Z2ZzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTExMy1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMTQ6Y29uZmlnIEJUX1NFTEZURVNUXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtCbHVldG9vdGggc2VsZiB0ZXN0aW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTI2LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjEyNzpjb25maWcgQlRfU0VMRlRFU1RfRUNESFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyOC1cdGJvb2wgXCYjMzQ7RUNESCB0ZXN0IGNhc2VzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTEzMy1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMzQ6Y29uZmlnIEJUX1NFTEZURVNUX1NNUFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7U01QIHRlc3QgY2FzZXNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQwLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjE0MTpjb25maWcgQlRfRkVBVFVSRV9ERUJVR1xubmV0L2JsdWV0b290aC9LY29uZmlnLTE0Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHJ1bnRpbWUgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgc3RhdGVtZW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkJsdWV0b290aCBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaXRlbSBJIG5lZWQgdG8gZm9jdXMgb24gaXMgdW5kb3VidGVkbHkgYENPTkZJR19CVGAuIFRoYXQmIzM5O3MgdGhlIGJpZyBvbmUgdGhhdCBkaWN0YXRlcyB3aGV0aGVyIEJsdWV0b290aCBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gaW5jbHVkZWQuIE5vdywgc2luY2UgSSBrbm93IGBtZ210LmNgIGlzIGludm9sdmVkIGluIEJsdWV0b290aCBtYW5hZ2VtZW50LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoYXQgdGhlIGNvbXBpbGF0aW9uIG9mIGBtZ210LmNgIGlzIGFjdHVhbGx5IHRpZWQgdG8gdGhlIGVuYWJsaW5nIG9mIGBDT05GSUdfQlRgLiBUbyBkbyB0aGF0LCBJJiMzOTttIGltbWVkaWF0ZWx5IGhlYWRpbmcgb3ZlciB0byBgbmV0L2JsdWV0b290aC9NYWtlZmlsZWAuIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCYjMzk7cyBzZWUgaG93IHRoYXQgdGllcyB0b2dldGhlci4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZ210Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvTWFrZWZpbGU9MTI9Ymx1ZXRvb3RoXzZsb3dwYW4teSA6PSA2bG93cGFuLm9cbm5ldC9ibHVldG9vdGgvTWFrZWZpbGUtMTMtXG5uZXQvYmx1ZXRvb3RoL01ha2VmaWxlOjE0OmJsdWV0b290aC15IDo9IGFmX2JsdWV0b290aC5vIGhjaV9jb3JlLm8gaGNpX2Nvbm4ubyBoY2lfZXZlbnQubyBtZ210Lm8gXFxcbm5ldC9ibHVldG9vdGgvTWFrZWZpbGUtMTUtXHRoY2lfc29jay5vIGhjaV9zeXNmcy5vIGwyY2FwX2NvcmUubyBsMmNhcF9zb2NrLm8gc21wLm8gbGliLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gYW5kIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJsdWV0b290aCBjb2RlLiBSaWdodCwgYG1nbXQub2AgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIGBibHVldG9vdGgteWAsIHdoaWNoIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CVGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHNldHMgdGhlIHN0YWdlLiBOb3csIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgIGFuZCBgaXNfZmlsdGVyX21hdGNoYC4gV2FpdCwgSSB0aG91Z2h0IGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAgd2FzIHN0YXRpYywgd2hpY2ggd291bGQgbWFrZSBpdCBhbiBpbnRlcm5hbCBoZWxwZXIuIEJ1dCBpdCYjMzk7cyBsaXN0ZWQgYXMgYSBoYW5kbGVyIGluIGBtZ210X2hhbmRsZXJzYC4gVGltZSBmb3IgYSBxdWljayBjaGVjay4gWWVwLCBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgICppcyogc3RhdGljLgoKSGFuZyBvbi4uLiB0aGUgcHJvbXB0IG1lbnRpb25zIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlIGZyb20gYSBkZWJ1Z2dpbmcgYW5kIHN5bWJvbCByZXNvbHV0aW9uIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGZvciBhbiBleHRlcm5hbCBBUEkuIFRoaXMgY2FsbHMgZm9yIGFub3RoZXIgY2hlY2suLi4gaXMgaXQgaW5saW5lZD8gSG1tLCBpdCYjMzk7cyBhIGhhbmRsZXIgaW4gYW4gYXJyYXksIHNvIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaGF0IHByYWN0aWNhbGx5IGd1YXJhbnRlZXMgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIE1ha2VzIHNlbnNlLCBnaXZlbiBpdCYjMzk7cyBwYXJ0IG9mIGEgaGFuZGxlciB0YWJsZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyBhbHNvIGluY2x1ZGUgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYmVjYXVzZSB0aGF0IGNhbGxzIGBpc19maWx0ZXJfbWF0Y2hgLiBBbmQgZmluYWxseSwgYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYC4uLiB0aGF0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBmaW5kIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5ICpjYWxsZWQqIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTI3MDk9dm9pZCBoY2lfcmVsZWFzZV9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYpXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTI3MzAtXHRoY2lfY29ubl9wYXJhbXNfY2xlYXJfYWxsKGhkZXYpO1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjI3MzE6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0yNzMyLVx0aGNpX2Jsb2NrZWRfa2V5c19jbGVhcihoZGV2KTtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmM9MzI5MT1pbnQgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldilcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeW5jLmMtMzMxNy1cdCAqL1xubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjMzMTg6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYy0zMzE5LVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYwODE9c3RhdGljIGludCBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTIyLVx0ICovXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTIzOlx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTI0LVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNjc9c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyNDUtXHQgKi9cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYyNDY6XHRoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTtcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyNDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMjkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDYWxscyB0byBgaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXJgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHdoZXJlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgZ2V0cyBjYWxsZWQuIFNlZW1zIGxpa2UgYSBjcml0aWNhbCBwYXJ0IG9mIG1hbmFnaW5nIGRpc2NvdmVyeSBmaWx0ZXJzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBoY2lfcmVsZWFzZV9kZXZgLCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AsIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgLCBhbmQgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YC4KClRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGl0IGlzIGVzcGVjaWFsbHkgd29ydGggY2hlY2tpbmc6CgoqICAgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YDogVGhpcyBvbmUmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgYWRkcmVzcyBpcyB0YWtlbiwgYW5kIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCB3aGljaCBvZnRlbiBtZWFucyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LgoqICAgYG1nbXRfZGV2aWNlX2ZvdW5kYDogSXQgc2VlbXMgaXQgY2FsbHMgYGlzX2ZpbHRlcl9tYXRjaGAuCiogICBgaGNpX3JlbGVhc2VfZGV2YDoKKiAgIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYDoKKiAgIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgOiBUaGlzIG9uZSBhbHNvIHdhcnJhbnRzIHNjcnV0aW55LCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMgYW5kIHRoZSBhZGRyZXNzICp3YXMqIHRha2VuIChidXQgbm90IGFueW1vcmUsIGl0JiMzOTtzIGNhbGxlZCBieSBgc3RhcnRfZGlzY292ZXJ5YCBhbmQgYHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5YCwgc28gdGhlcmUgaXMgbm8gc3BlY2lmaWMgYWRkcmVzcyB0YWtlbikKClNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYmVoYXZpb3Igb2YgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAgYW5kIGFsc28gYHN0YXJ0X2Rpc2NvdmVyeWAgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIGhvdyB0aGVzZSBmaWx0ZXJzIGFyZSBiZWluZyBtYW5hZ2VkIGFuZCBjbGVhcmVkIHRocm91Z2hvdXQgdGhlIGRpc2NvdmVyeSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL21nbXQuYz02MDczPXN0YXRpYyBpbnQgc3RhcnRfZGlzY292ZXJ5X3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEpXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtNjA4MC1cbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYwODE6c3RhdGljIGludCBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYwODItXHRcdFx0XHQgICAgdTE2IG9wLCB2b2lkICpkYXRhLCB1MTYgbGVuKVxuLS1cbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNTI9c3RhdGljIGludCBzdGFydF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbi0tXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTU0LXtcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNTU6XHRyZXR1cm4gc3RhcnRfZGlzY292ZXJ5X2ludGVybmFsKHNrLCBoZGV2LCBNR01UX09QX1NUQVJUX0RJU0NPVkVSWSxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNTYtXHRcdFx0XHRcdGRhdGEsIGxlbik7XG4tLVxubmV0L2JsdWV0b290aC9tZ210LmM9NjE1OT1zdGF0aWMgaW50IHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4tLVxubmV0L2JsdWV0b290aC9tZ210LmMtNjE2MS17XG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTYyOlx0cmV0dXJuIHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbChzaywgaGRldixcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjMtXHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfTElNSVRFRF9ESVNDT1ZFUlksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODIKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbHVldG9vdGggRGlzY292ZXJ5IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIEJsdWV0b290aCBkaXNjb3ZlcnkgZmlsdGVyaW5nIGZpeCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Qgc28gZmFyLiBXZSYjMzk7dmUgZ290IHRoZXNlIGVudHJ5IHBvaW50cyDigJMgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYHN0YXJ0X2Rpc2NvdmVyeWAsIGBzdGFydF9saW1pdGVkX2Rpc2NvdmVyeWAsIGBtZ210X2RldmljZV9mb3VuZGAsIGBoY2lfcmVsZWFzZV9kZXZgLCBhbmQgYGhjaV91cGRhdGVfcGFzc2l2ZV9zY2FuX3N5bmNgIOKAkyBhbGwgb2Ygd2hpY2ggYXJlIGNyaXRpY2FsIGJlY2F1c2UgYHN0YXJ0X2Rpc2NvdmVyeWAgYW5kIGBzdGFydF9saW1pdGVkX2Rpc2NvdmVyeWAgYXJlIGhhbmRsZWQgd2l0aGluIGBtZ210X2hhbmRsZXJzYC4gSSB0aGluayB0aGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiwgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCkxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEl0IHNlZW1zIHRoZSBjb3JlIGNvbmZpZyBpcyBgQlRgLgoKRmluYWxseSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBkdXJpbmcgZnV6emluZyB0byBlbnN1cmUgbWF4aW11bSBjb3ZlcmFnZSBhbmQgdGVzdGluZyB0aGUgcmVsZXZhbnQgbG9naWM6IGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGBtZ210X2RldmljZV9mb3VuZGAsIGBzdGFydF9kaXNjb3ZlcnlgLCBgc3RhcnRfbGltaXRlZF9kaXNjb3ZlcnlgLCBgaGNpX3JlbGVhc2VfZGV2YCwgYW5kIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYC4KCkkmIzM5O2xsIGJlIHV0aWxpemluZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIHByZXNlbnQgbXkgZnV6emluZyBmaW5kaW5ncywgYW5kIHNob3VsZCBiZSByZWFkeSB0byByZXBvcnQgb24gdGhlIGVmZmljYWN5IG9mIHRoZSBmaXggc29vbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7c3RhcnRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O3N0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O2hjaV9yZWxlYXNlX2RldiYjMzQ7LAogICAgJiMzNDtoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gQmx1ZXRvb3RoIHNlcnZpY2UgZGlzY292ZXJ5IGZpbHRlcmluZyBieSBhZGRpbmcgYSBzcGlubG9jayBhcm91bmQgdXVpZF9jb3VudCBhbmQgdXVpZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJsdWV0b290aCBtYW5hZ2VtZW50IGludGVyZmFjZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RhcnRfc2VydmljZV9kaXNjb3ZlcnkmIzM0OywKICAgICYjMzQ7bWdtdF9kZXZpY2VfZm91bmQmIzM0OywKICAgICYjMzQ7c3RhcnRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O3N0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5JiMzNDssCiAgICAmIzM0O2hjaV9yZWxlYXNlX2RldiYjMzQ7LAogICAgJiMzNDtoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gQmx1ZXRvb3RoIHNlcnZpY2UgZGlzY292ZXJ5IGZpbHRlcmluZyBieSBhZGRpbmcgYSBzcGlubG9jayBhcm91bmQgdXVpZF9jb3VudCBhbmQgdXVpZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJsdWV0b290aCBtYW5hZ2VtZW50IGludGVyZmFjZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE2OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBJdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIG1vZGlmeWluZyBvciByZWFkaW5nIHRoZSBkaXNjb3ZlcnkgZmlsdGVyIFVVSURzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTQ5YjNmZTUzOGVlY2UwNGFlNDRiNDcxMTQwMGRmYjRjNDdiNmU4MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMTY6NTg6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC05MzUsOSAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIAloZGV2LSZndDtkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS5yZXBvcnRfaW52YWxpZF9yc3NpID0gdHJ1ZTsKIAloZGV2LSZndDtkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7Ci0JaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7CiAJa2ZyZWUoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKTsKIAloZGV2LSZndDtkaXNjb3ZlcnkudXVpZHMgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwppbmRleCA4NjBjMDg2MDExYjcxLi5hYzQ4NjRlNTZlYzcyIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpAQCAtNjE3MSw2ICYjNDM7NjE3MSw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAlzdHJ1Y3QgbWdtdF9wZW5kaW5nX2NtZCAqY21kOwogCWNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTsKIAl1MTYgdXVpZF9jb3VudCwgZXhwZWN0ZWRfbGVuOwomIzQzOwl1OCAoKnV1aWRzKVsxNl0gPSBOVUxMOwogCXU4IHN0YXR1czsKIAlpbnQgZXJyOwogCkBAIC02MjQ3LDEyICYjNDM7NjI0OCwxMCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSB0cnVlOwogCWhkZXYtJmd0O2Rpc2NvdmVyeS50eXBlID0gY3AtJmd0O3R5cGU7CiAJaGRldi0mZ3Q7ZGlzY292ZXJ5LnJzc2kgPSBjcC0mZ3Q7cnNzaTsKLQloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiAKIAlpZiAodXVpZF9jb3VudCAmZ3Q7IDApIHsKLQkJaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC0mZ3Q7dXVpZHMsIHV1aWRfY291bnQgKiAxNiwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQlpZiAoIWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykgewomIzQzOwkJdXVpZHMgPSBrbWVtZHVwKGNwLSZndDt1dWlkcywgdXVpZF9jb3VudCAqIHNpemVvZigqdXVpZHMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghdXVpZHMpIHsKIAkJCWVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LSZndDtpZCwKIAkJCQkJCU1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksCiAJCQkJCQlNR01UX1NUQVRVU19GQUlMRUQsCkBAIC02MjYyLDYgJiM0Mzs2MjYxLDExIEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAkJfQogCX0KIAomIzQzOwlzcGluX2xvY2soJmFtcDtoZGV2LSZndDtkaXNjb3ZlcnkubG9jayk7CiYjNDM7CWhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcyA9IHV1aWRzOwomIzQzOwloZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudCA9IHV1aWRfY291bnQ7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwomIzQzOwogCWVyciA9IGhjaV9jbWRfc3luY19xdWV1ZShoZGV2LCBzdGFydF9kaXNjb3Zlcnlfc3luYywgY21kLAogCQkJCSBzdGFydF9kaXNjb3ZlcnlfY29tcGxldGUpOwogCWlmIChlcnIgJmx0OyAwKSB7CkBAIC0xMDUwNSw2ICYjNDM7MTA1MDksNyBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsCiAJICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKQogCQlyZXR1cm4gIGZhbHNlOwogCiYjNDM7CXNwaW5fbG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAlpZiAoaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkgewogCQkvKiBJZiBhIGxpc3Qgb2YgVVVJRHMgaXMgcHJvdmlkZWQgaW4gZmlsdGVyLCByZXN1bHRzIHdpdGggbm8KIAkJICogbWF0Y2hpbmcgVVVJRCBzaG91bGQgYmUgZHJvcHBlZC4KQEAgLTEwNTEzLDkgJiM0MzsxMDUxOCwxMiBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsCiAJCQkJICAgaGRldi0mZ3Q7ZGlzY292ZXJ5LnV1aWRzKSAmYW1wOyZhbXA7CiAJCSAgICAhZWlyX2hhc191dWlkcyhzY2FuX3JzcCwgc2Nhbl9yc3BfbGVuLAogCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50LAotCQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpCiYjNDM7CQkJCSAgIGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkcykpIHsKJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO2hkZXYtJmd0O2Rpc2NvdmVyeS5sb2NrKTsKIAkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KIAl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aGRldi0mZ3Q7ZGlzY292ZXJ5LmxvY2spOwogCiAJLyogSWYgZHVwbGljYXRlIGZpbHRlcmluZyBkb2VzIG5vdCByZXBvcnQgUlNTSSBjaGFuZ2VzLCB0aGVuIHJlc3RhcnQKIAkgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3NgoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJsdWV0b290aCBNYW5hZ2VtZW50IENvZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGhpdHRpbmcgYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGBpc19maWx0ZXJfbWF0Y2hgIGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AgYW5kIGBpbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBzcGluX2xvY2tgIGFuZCBgc3Bpbl91bmxvY2tgIGFyb3VuZCB0aGUgYWNjZXNzZXMgdG8gYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkc2AuIE15IGluaXRpYWwgdGhvdWdodD8gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2NraW5nIGZpeCwgd2hpY2ggaXMgYWx3YXlzIGdvb2QgdG8gc2VlLiBJdOKAmXMgZXhwbGljaXRseSBwcm90ZWN0aW5nIHRob3NlIGB1dWlkX2NvdW50YCBhbmQgYHV1aWRzYCBtZW1iZXJzIGZyb20gY29uY3VycmVudCBhY2Nlc3MsIG1lYW5pbmcgaXQmIzM5O3MgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgQmx1ZXRvb3RoIHN0YWNrLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGEgbmV3IHZ1bG5lcmFiaWxpdHkuIEkgcXVpY2tseSBzY2FuIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBPa2F5LCBgdXVpZHNgIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1kdXBgLCBhbmQgdGhlIHNvdXJjZSBpcyB0aGUgdXNlci1zcGFjZSBjb21tYW5kIHBheWxvYWQgYGNwLSZndDt1dWlkc2AuIEJlY2F1c2UgYGNwLSZndDt1dWlkc2AgY29tZXMgZnJvbSB0aGUgdXNlci1zcGFjZSBwYXlsb2FkLCBpdCYjMzk7cyBpbml0aWFsaXplZC4gR29vZC4gVGhpcyBpcyBvbmx5IGFkZGluZyBsb2NraW5nOyBpdCYjMzk7cyBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgb2YgYGhkZXYtJmd0O2Rpc2NvdmVyeS51dWlkc2AgYW5kIGBoZGV2LSZndDtkaXNjb3ZlcnkudXVpZF9jb3VudGAgaW5zaWRlIHRoZSBzcGlubG9jay4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY29uY3VycmVuY3kgYnVnIGZpeC4gTm90aGluZyBoZXJlIGlzIGNyZWF0aW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suCgpUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBwYXRjaC4gVGhlIGxvY2tpbmcgaXMgcHJlY2lzZWx5IHdoYXQmIzM5O3MgbmVlZGVkLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbmV3IHNlY3VyaXR5IGlzc3Vlcy4gVGhlIHBhdGNoIGFpbXMgdG8gcHJvdGVjdCBzaGFyZWQgZGF0YSBhbmQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gc2F0aXNmaWVkLiBObyBuZWVkIHRvIHJ1biBLTVNBTiBvbiB0aGlzIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBJdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIG1vZGlmeWluZyBvciByZWFkaW5nIHRoZSBkaXNjb3ZlcnkgZmlsdGVyIFVVSURzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IGFkZGluZyBzcGlubG9ja3MgYXJvdW5kIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gSXQgcHJldmVudHMgZGF0YSByYWNlcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBtb2RpZnlpbmcgb3IgcmVhZGluZyB0aGUgZGlzY292ZXJ5IGZpbHRlciBVVUlEcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjA4Ljg1NDk1OTYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyMTA1NTAxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeVwiLFxuICAgIFwibWdtdF9kZXZpY2VfZm91bmRcIixcbiAgICBcInN0YXJ0X2Rpc2NvdmVyeVwiLFxuICAgIFwic3RhcnRfbGltaXRlZF9kaXNjb3ZlcnlcIixcbiAgICBcImhjaV9yZWxlYXNlX2RldlwiLFxuICAgIFwiaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AuIEl0IHByZXZlbnRzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gbW9kaWZ5aW5nIG9yIHJlYWRpbmcgdGhlIGRpc2NvdmVyeSBmaWx0ZXIgVVVJRHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gQmx1ZXRvb3RoIHNlcnZpY2UgZGlzY292ZXJ5IGZpbHRlcmluZyBieSBhZGRpbmcgYSBzcGlubG9jayBhcm91bmQgdXVpZF9jb3VudCBhbmQgdXVpZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJsdWV0b290aCBtYW5hZ2VtZW50IGludGVyZmFjZSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjA4Ljg1NDk2NDU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEzOTc1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNDliM2ZlNTM4ZWVjZTA0YWU0NGI0NzExNDAwZGZiNGM0N2I2ZTgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMTY6NTg6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcbmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcbkBAIC05MzUsOSArOTM1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlO1xcbiBcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkucmVwb3J0X2ludmFsaWRfcnNzaSA9IHRydWU7XFxuIFxcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS5yc3NpID0gSENJX1JTU0lfSU5WQUxJRDtcXG4tXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuK1xcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcXG4gXFx0a2ZyZWUoaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzKTtcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gTlVMTDtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmhkZXYtXFx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xcbmluZGV4IDg2MGMwODYwMTFiNzEuLmFjNDg2NGU1NmVjNzIgMTAwNjQ0XFxuLS0tIGEvbmV0L2JsdWV0b290aC9tZ210LmNcXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xcbkBAIC02MTcxLDYgKzYxNzEsNyBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuIFxcdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XFxuIFxcdGNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTtcXG4gXFx0dTE2IHV1aWRfY291bnQsIGV4cGVjdGVkX2xlbjtcXG4rXFx0dTggKCp1dWlkcylbMTZdID0gTlVMTDtcXG4gXFx0dTggc3RhdHVzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtNjI0NywxMiArNjI0OCwxMCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuIFxcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTtcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnR5cGUgPSBjcC1cXHUwMDNldHlwZTtcXG4gXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnJzc2kgPSBjcC1cXHUwMDNlcnNzaTtcXG4tXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xcbiBcXG4gXFx0aWYgKHV1aWRfY291bnQgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IGttZW1kdXAoY3AtXFx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogMTYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi1cXHRcXHRpZiAoIWhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcykge1xcbitcXHRcXHR1dWlkcyA9IGttZW1kdXAoY3AtXFx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogc2l6ZW9mKCp1dWlkcyksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXV1aWRzKSB7XFxuIFxcdFxcdFxcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVxcdTAwM2VpZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0TUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0TUdNVF9TVEFUVVNfRkFJTEVELFxcbkBAIC02MjYyLDYgKzYyNjEsMTEgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aGRldi1cXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xcbitcXHRoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSB1dWlkcztcXG4rXFx0aGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aGRldi1cXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xcbitcXG4gXFx0ZXJyID0gaGNpX2NtZF9zeW5jX3F1ZXVlKGhkZXYsIHN0YXJ0X2Rpc2NvdmVyeV9zeW5jLCBjbWQsXFxuIFxcdFxcdFxcdFxcdCBzdGFydF9kaXNjb3ZlcnlfY29tcGxldGUpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbkBAIC0xMDUwNSw2ICsxMDUwOSw3IEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcXG4gXFx0ICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKVxcbiBcXHRcXHRyZXR1cm4gIGZhbHNlO1xcbiBcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuIFxcdGlmIChoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCAhPSAwKSB7XFxuIFxcdFxcdC8qIElmIGEgbGlzdCBvZiBVVUlEcyBpcyBwcm92aWRlZCBpbiBmaWx0ZXIsIHJlc3VsdHMgd2l0aCBub1xcbiBcXHRcXHQgKiBtYXRjaGluZyBVVUlEIHNob3VsZCBiZSBkcm9wcGVkLlxcbkBAIC0xMDUxMyw5ICsxMDUxOCwxMiBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXFxuIFxcdFxcdFxcdFxcdCAgIGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkcykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFlaXJfaGFzX3V1aWRzKHNjYW5fcnNwLCBzY2FuX3JzcF9sZW4sXFxuIFxcdFxcdFxcdFxcdCAgIGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50LFxcbi1cXHRcXHRcXHRcXHQgICBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMpKVxcbitcXHRcXHRcXHRcXHQgICBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHMpKSB7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZoZGV2LVxcdTAwM2VkaXNjb3ZlcnkubG9jayk7XFxuIFxcbiBcXHQvKiBJZiBkdXBsaWNhdGUgZmlsdGVyaW5nIGRvZXMgbm90IHJlcG9ydCBSU1NJIGNoYW5nZXMsIHRoZW4gcmVzdGFydFxcbiBcXHQgKiBzY2FubmluZyB0byBlbnN1cmUgdXBkYXRlZCByZXN1bHQgd2l0aCB1cGRhdGVkIFJTU0kgdmFsdWVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODowOS4yNzcwODgxMjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0OTU5NzQ4MDgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5XCIsXG4gICAgXCJtZ210X2RldmljZV9mb3VuZFwiLFxuICAgIFwic3RhcnRfZGlzY292ZXJ5XCIsXG4gICAgXCJzdGFydF9saW1pdGVkX2Rpc2NvdmVyeVwiLFxuICAgIFwiaGNpX3JlbGVhc2VfZGV2XCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCB1dWlkX2NvdW50IGFuZCB1dWlkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaW50ZXJmYWNlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTQ5YjNmZTUzOGVlY2UwNGFlNDRiNDcxMTQwMGRmYjRjNDdiNmU4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTY6NTg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5pbmRleCBlMDc0MThhNWFkY2U3Li40MTA1YzQ0NmNhOTgzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXG5AQCAtOTM1LDkgKzkzNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldilcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSBmYWxzZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IEhDSV9SU1NJX0lOVkFMSUQ7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFx0a2ZyZWUoaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuaW5kZXggODYwYzA4NjAxMWI3MS4uYWM0ODY0ZTU2ZWM3MiAxMDA2NDRcbi0tLSBhL25ldC9ibHVldG9vdGgvbWdtdC5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuY1xuQEAgLTYxNzEsNiArNjE3MSw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XG4gXHRjb25zdCB1MTYgbWF4X3V1aWRfY291bnQgPSAoKFUxNl9NQVggLSBzaXplb2YoKmNwKSkgLyAxNik7XG4gXHR1MTYgdXVpZF9jb3VudCwgZXhwZWN0ZWRfbGVuO1xuK1x0dTggKCp1dWlkcylbMTZdID0gTlVMTDtcbiBcdHU4IHN0YXR1cztcbiBcdGludCBlcnI7XG4gXG5AQCAtNjI0NywxMiArNjI0OCwxMCBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS5yZXN1bHRfZmlsdGVyaW5nID0gdHJ1ZTtcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnR5cGUgPSBjcC1cdTAwM2V0eXBlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucnNzaSA9IGNwLVx1MDAzZXJzc2k7XG4tXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gdXVpZF9jb3VudDtcbiBcbiBcdGlmICh1dWlkX2NvdW50IFx1MDAzZSAwKSB7XG4tXHRcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0ga21lbWR1cChjcC1cdTAwM2V1dWlkcywgdXVpZF9jb3VudCAqIDE2LFxuLVx0XHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuLVx0XHRpZiAoIWhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSB7XG4rXHRcdHV1aWRzID0ga21lbWR1cChjcC1cdTAwM2V1dWlkcywgdXVpZF9jb3VudCAqIHNpemVvZigqdXVpZHMpLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCF1dWlkcykge1xuIFx0XHRcdGVyciA9IG1nbXRfY21kX2NvbXBsZXRlKHNrLCBoZGV2LVx1MDAzZWlkLFxuIFx0XHRcdFx0XHRcdE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUlksXG4gXHRcdFx0XHRcdFx0TUdNVF9TVEFUVVNfRkFJTEVELFxuQEAgLTYyNjIsNiArNjI2MSwxMSBAQCBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXG4gXHRcdH1cbiBcdH1cbiBcbitcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzID0gdXVpZHM7XG4rXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ID0gdXVpZF9jb3VudDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuK1xuIFx0ZXJyID0gaGNpX2NtZF9zeW5jX3F1ZXVlKGhkZXYsIHN0YXJ0X2Rpc2NvdmVyeV9zeW5jLCBjbWQsXG4gXHRcdFx0XHQgc3RhcnRfZGlzY292ZXJ5X2NvbXBsZXRlKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbkBAIC0xMDUwNSw2ICsxMDUwOSw3IEBAIHN0YXRpYyBib29sIGlzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgczggcnNzaSwgdTggKmVpcixcbiBcdCAgICAgIWhjaV90ZXN0X3F1aXJrKGhkZXYsIEhDSV9RVUlSS19TVFJJQ1RfRFVQTElDQVRFX0ZJTFRFUikpKSlcbiBcdFx0cmV0dXJuICBmYWxzZTtcbiBcbitcdHNwaW5fbG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdGlmIChoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50ICE9IDApIHtcbiBcdFx0LyogSWYgYSBsaXN0IG9mIFVVSURzIGlzIHByb3ZpZGVkIGluIGZpbHRlciwgcmVzdWx0cyB3aXRoIG5vXG4gXHRcdCAqIG1hdGNoaW5nIFVVSUQgc2hvdWxkIGJlIGRyb3BwZWQuXG5AQCAtMTA1MTMsOSArMTA1MTgsMTIgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxuIFx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIWVpcl9oYXNfdXVpZHMoc2Nhbl9yc3AsIHNjYW5fcnNwX2xlbixcbiBcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQsXG4tXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpXG4rXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykpIHtcbitcdFx0XHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFxuIFx0LyogSWYgZHVwbGljYXRlIGZpbHRlcmluZyBkb2VzIG5vdCByZXBvcnQgUlNTSSBjaGFuZ2VzLCB0aGVuIHJlc3RhcnRcbiBcdCAqIHNjYW5uaW5nIHRvIGVuc3VyZSB1cGRhdGVkIHJlc3VsdCB3aXRoIHVwZGF0ZWQgUlNTSSB2YWx1ZXMuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODowOS4yNzcwODk4MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQ4NDY3MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJsdWV0b290aCBTZXJ2aWNlIERpc2NvdmVyeSBGaWx0ZXJpbmcgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgaG93IHdlIGhhbmRsZSBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQncyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24sIHdoaWNoIGlzIGFsd2F5cyBnb29kIHRvIHNlZS4gVGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYWRkaW5nIGEgc3BpbmxvY2sg4oCTIGBzcGluX2xvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jaylgIOKAkyB0aGF0IHdyYXBzIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gSXQgc2VlbXMgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGlzIGRlcGxveWVkIHdpdGhpbiB0aGUgYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGBpc19maWx0ZXJfbWF0Y2hgIGZ1bmN0aW9ucy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGVzZSByb3V0aW5lcyBjYW4gbGVhZCB0byBpbnN0YWJpbGl0eS5cblxuVGhlIGNvZGUgY2hhbmdlcyBhcmUgdG91Y2hpbmcgYG5ldC9ibHVldG9vdGgvbWdtdC5jYCBhbmQgYGluY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oYCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgdGhpcyB0eXBlIG9mIGZpeC4gSeKAmWxsIHdhbnQgdG8gcmV2aWV3IHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gYGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyYCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgYW5kIGBpc19maWx0ZXJfbWF0Y2hgIHRob3JvdWdobHkuIEdpdmVuIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgaXMgZGVjbGFyZWQgaW5saW5lLCBpdCBtZWFucyBpdHMgaW1wbGVtZW50YXRpb24gaXMgZGlyZWN0bHkgYXZhaWxhYmxlIGluIHRoZSBoZWFkZXIgZmlsZSwgd2hpY2ggd2lsbCBuZWVkIHRvIGJlIGNoZWNrZWQgZm9yIGNvbnNpc3RlbmN5LlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IEJsdWV0b290aCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gTGV0J3Mgc2VlLi4uIGBuZXQvYmx1ZXRvb3RoL0tjb25maWdgIHdpbGwgY29udGFpbiBgQ09ORklHX0JUYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlncy4gRmluYWxseSwgSSdsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgY2FsbHMgdG8gYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCBhbmQgYGlzX2ZpbHRlcl9tYXRjaGAgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gSeKAmWxsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhpcyBwYXRjaCBpcyBwcm9wZXJseSBhcHBsaWVkIGluIHRoZSBjb3JyZWN0IGNvbnRleHQsIGFuZCB0aGF0IHRoZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSBjb25zaXN0ZW50IHdpdGggYWxsIGV4aXN0aW5nIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjE1LjEyNTU1OTQ1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyOTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuYz02MTU5PXN0YXRpYyBpbnQgc3RhcnRfbGltaXRlZF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjYtXFxubmV0L2JsdWV0b290aC9tZ210LmM6NjE2NzpzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE2OC1cXHRcXHRcXHRcXHQgICB2b2lkICpkYXRhLCB1MTYgbGVuKVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNjkte1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNzA6XFx0c3RydWN0IG1nbXRfY3Bfc3RhcnRfc2VydmljZV9kaXNjb3ZlcnkgKmNwID0gZGF0YTtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTcxLVxcdHN0cnVjdCBtZ210X3BlbmRpbmdfY21kICpjbWQ7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz05NTk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNpX21nbXRfaGFuZGxlciBtZ210X2hhbmRsZXJzW10gPSB7XFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy05NjczLVxcdFxcdFxcdFxcdFxcdFxcdEhDSV9NR01UX1VOQ09ORklHVVJFRCB9LFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjk2NzQ6XFx0eyBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeSwgTUdNVF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWV9TSVpFLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTk2NzUtXFx0XFx0XFx0XFx0XFx0XFx0SENJX01HTVRfVkFSX0xFTiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODoxNS4xNzE1OTE5NzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDAwMjk2NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk9wZXJhdGlvbmFsaXppbmcgU2VydmljZSBEaXNjb3ZlcnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdoZW4gSSBzZWUgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGhhbmRsZXIsIGZvciB0aGUgYE1HTVRfT1BfU1RBUlRfU0VSVklDRV9ESVNDT1ZFUllgIGNvbW1hbmQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljICpiZWdpbnMqIOKAkyB0aGUgdHJpZ2dlciB0byBraWNrIG9mZiB0aGUgd2hvbGUgc2VydmljZSBkaXNjb3ZlcnkgcHJvY2Vzcywgd2hhdGV2ZXIgdGhhdCBzcGVjaWZpY2FsbHkgZW50YWlscyBpbiB0aGlzIGNvbnRleHQuIEl0J3MgdGhlIFwiZ29cIiBzaWduYWwsIHRoZSBzdGFydGluZyBndW4uIEknZCBuZWVkIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgb2J2aW91c2x5LCB0byB1bmRlcnN0YW5kICpob3cqIGl0IGhhbmRsZXMgdGhlIHJlcXVlc3QsIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIHBhcmFtZXRlcnMsIGFuZCBob3cgaXQgdGhlbiBoYW5kcyBvZmYgdGhlIGFjdHVhbCB3b3JrIHRvIHRoZSBsb3dlciBsYXllcnMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHNjYW4sIG9yIHNvbWV0aGluZyBtb3JlIHJlZmluZWQgd2l0aCBzcGVjaWZpYyBmaWx0ZXJpbmc/IFRoZSBkZXRhaWxzIGFyZSBpbiB0aGUgY29kZS5cblxuVGhlbiwgdGhlcmUncyBgaXNfZmlsdGVyX21hdGNoYC4gSXRzIHByZXNlbmNlIGluIGBuZXQvYmx1ZXRvb3RoL21nbXQuY2AgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCB3ZSBoYXZlIHNvbWUga2luZCBvZiBmaWx0ZXJpbmcgZ29pbmcgb24gaW4gdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSB1dGlsaXR5LCBhIHByZWRpY2F0ZSB0aGF0IGlzIHVzZWQgdG8gZXZhbHVhdGUgd2hldGhlciBvciBub3QgYW4gaW5jb21pbmcgZGV2aWNlIGFkdmVydGlzZW1lbnQgbWVldHMgYSBzcGVjaWZpZWQgY3JpdGVyaWEuIEl0J3MgdGhlIGdhdGVrZWVwZXIsIGRlY2lkaW5nIGlmIGEgZGV2aWNlIGdldHMgdGhyb3VnaC4gS25vd2luZyB0aGlzLCBpdCBpcyBsaWtlbHkgZGV0ZXJtaW5pbmcgd2hldGhlciBzb21ldGhpbmcgaXMgb3IgaXMgbm90IGFuIGFwcHJvcHJpYXRlIGVuZHBvaW50LlxuXG5UaGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBzdWdnZXN0cyBhIG1vcmUgY29tcGxleCBmbG93OiBhIHJlcXVlc3QgdG8gc3RhcnQsIGEgZmlsdGVyaW5nIHByb2Nlc3MsIGFuZCB0aGVuIHBlcmhhcHMgYW4gYWN0aW9uIG9uIGRldmljZXMgdGhhdCBtYXRjaCB0aGUgY3JpdGVyaWEuIEdvb2QsIHNlbnNpYmxlIGRlc2lnbi4gSSdkIGRlZmluaXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQga2luZCBvZiBmaWx0ZXJzIGFyZSBzdXBwb3J0ZWQg4oCTIFVVSURzLCBkZXZpY2UgbmFtZXMsIFJTU0ksIG1hbnVmYWN0dXJlciBkYXRhLCBhbGwgb2YgdGhlIGFib3ZlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSBhbHNvIGtleS4gSSdkIGltbWVkaWF0ZWx5IHN0YXJ0IGFza2luZyBxdWVzdGlvbnM6IGhvdyBlZmZpY2llbnQgaXMgdGhlIGZpbHRlcmluZyBhbGdvcml0aG0/IEFyZSB3ZSB1c2luZyBhbnkgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgZmVhdHVyZXM/IEhvdyB3ZWxsIGRvZXMgaXQgc2NhbGUgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBkZXZpY2VzPyBJcyB0aGVyZSBhbnkgY2FjaGluZyBvciBwcmUtZmlsdGVyaW5nIGhhcHBlbmluZz8gVGhpcyBhbGwgaXMgaW1wb3J0YW50IGFzIGEgYmx1ZXRvb3RoIGVuZ2luZWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6MjAuMTcxODkxMTUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTUwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2ZpbHRlcl9tYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDQzOT1zdGF0aWMgYm9vbCBlaXJfaGFzX3V1aWRzKHU4ICplaXIsIHUxNiBlaXJfbGVuLCB1MTYgdXVpZF9jb3VudCwgdTggKCp1dWlkcylbMTZdKVxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtMTA0OTMtXFxubmV0L2JsdWV0b290aC9tZ210LmM6MTA0OTQ6c3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNDk1LVxcdFxcdFxcdCAgICB1MTYgZWlyX2xlbiwgdTggKnNjYW5fcnNwLCB1OCBzY2FuX3JzcF9sZW4pXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz0xMDcxND12b2lkIG1nbXRfZGV2aWNlX2ZvdW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBsaW5rX3R5cGUsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy0xMDc0Mi1cXHRcXHQvKiBXZSBhcmUgdXNpbmcgc2VydmljZSBkaXNjb3ZlcnkgKi9cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzoxMDc0MzpcXHRcXHRpZiAoIWlzX2ZpbHRlcl9tYXRjaChoZGV2LCByc3NpLCBlaXIsIGVpcl9sZW4sIHNjYW5fcnNwLFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTEwNzQ0LVxcdFxcdFxcdFxcdCAgICAgc2Nhbl9yc3BfbGVuKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6MjAuMjE3NDQ5OTAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMDU1MjEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGV2aWNlIERpc2NvdmVyeSBcdTAwMjYgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cblJpZ2h0LCBgbWdtdF9kZXZpY2VfZm91bmRgIOKAkyB0aGF0J3MgdGhlIHRyaWdnZXIgSSdtIGludGVyZXN0ZWQgaW4uICBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgaXQgYXMgY3JpdGljYWwsICpjb3JlIGtlcm5lbCBsb2dpYyogd2l0aGluIHRoZSBCbHVldG9vdGggbWFuYWdlbWVudCBpbnRlcmZhY2UuICBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIE5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGRldmljZSBkaXNjb3ZlcnkgYW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBpbiBwbGF5LlxuXG5GaXJzdCwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYmFyZSBtaW5pbXVtIGNvbmZpZyBJIG5lZWQgdG8gaGF2ZSBsb2FkZWQgdG8gc3RhcnQgY2hlY2tpbmcuIE9mIGNvdXJzZSBgQ09ORklHX0JUYCBoYXMgdG8gYmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbnRlcnR3aW5lZCBoZXJlPyBJIHNob3VsZCBjaGVjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGF0IHBsYXkuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODoyNC43MTgwMDQ1MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNzUyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL0tjb25maWctNS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjptZW51Y29uZmlnIEJUXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkJsdWV0b290aCBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy00MS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NDI6Y29uZmlnIEJUX0JSRURSXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkJsdWV0b290aCBDbGFzc2ljIChCUi9FRFIpIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnPTU2PXNvdXJjZSBcXFwibmV0L2JsdWV0b290aC9oaWRwL0tjb25maWdcXFwiXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTU3LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1ODpjb25maWcgQlRfTEVcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTktXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIExvdyBFbmVyZ3kgKExFKSBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy02NS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjY6Y29uZmlnIEJUX0xFX0wyQ0FQX0VDUkVEXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIkJsdWV0b290aCBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTc2LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo3Nzpjb25maWcgQlRfNkxPV1BBTlxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04Mi1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6ODM6Y29uZmlnIEJUX0xFRFNcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05MS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6OTI6Y29uZmlnIEJUX01TRlRFWFRcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIE1pY3Jvc29mdCBleHRlbnNpb25zXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTk4LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5OTpjb25maWcgQlRfQU9TUEVYVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiRW5hYmxlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBleHRlbnNpb25zXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTA2OmNvbmZpZyBCVF9ERUJVR0ZTXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJFeHBvcnQgQmx1ZXRvb3RoIGludGVybmFscyBpbiBkZWJ1Z2ZzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTExMy1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTE0OmNvbmZpZyBCVF9TRUxGVEVTVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIHNlbGYgdGVzdGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyNi1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTI3OmNvbmZpZyBCVF9TRUxGVEVTVF9FQ0RIXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyOC1cXHRib29sIFxcXCJFQ0RIIHRlc3QgY2FzZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTMzLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMzQ6Y29uZmlnIEJUX1NFTEZURVNUX1NNUFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiU01QIHRlc3QgY2FzZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQwLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxNDE6Y29uZmlnIEJUX0ZFQVRVUkVfREVCVUdcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQyLVxcdGJvb2wgXFxcIkVuYWJsZSBydW50aW1lIG9wdGlvbiBmb3IgZGVidWdnaW5nIHN0YXRlbWVudHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjI0Ljc2MjM4MzczM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODQ2NjIyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0gSSBuZWVkIHRvIGZvY3VzIG9uIGlzIHVuZG91YnRlZGx5IGBDT05GSUdfQlRgLiBUaGF0J3MgdGhlIGJpZyBvbmUgdGhhdCBkaWN0YXRlcyB3aGV0aGVyIEJsdWV0b290aCBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gaW5jbHVkZWQuIE5vdywgc2luY2UgSSBrbm93IGBtZ210LmNgIGlzIGludm9sdmVkIGluIEJsdWV0b290aCBtYW5hZ2VtZW50LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoYXQgdGhlIGNvbXBpbGF0aW9uIG9mIGBtZ210LmNgIGlzIGFjdHVhbGx5IHRpZWQgdG8gdGhlIGVuYWJsaW5nIG9mIGBDT05GSUdfQlRgLiBUbyBkbyB0aGF0LCBJJ20gaW1tZWRpYXRlbHkgaGVhZGluZyBvdmVyIHRvIGBuZXQvYmx1ZXRvb3RoL01ha2VmaWxlYC4gSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhhdCBkZXBlbmRlbmN5IGlzIGhhbmRsZWQgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gTGV0J3Mgc2VlIGhvdyB0aGF0IHRpZXMgdG9nZXRoZXIuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY2NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjI4LjA0NzA0ODQ1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MTQ4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWdtdC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9NYWtlZmlsZT0xMj1ibHVldG9vdGhfNmxvd3Bhbi15IDo9IDZsb3dwYW4ub1xcbm5ldC9ibHVldG9vdGgvTWFrZWZpbGUtMTMtXFxubmV0L2JsdWV0b290aC9NYWtlZmlsZToxNDpibHVldG9vdGgteSA6PSBhZl9ibHVldG9vdGgubyBoY2lfY29yZS5vIGhjaV9jb25uLm8gaGNpX2V2ZW50Lm8gbWdtdC5vIFxcXFxcXG5uZXQvYmx1ZXRvb3RoL01ha2VmaWxlLTE1LVxcdGhjaV9zb2NrLm8gaGNpX3N5c2ZzLm8gbDJjYXBfY29yZS5vIGwyY2FwX3NvY2subyBzbXAubyBsaWIubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjI4LjA4OTk2NzUyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ1NzQ5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbHVldG9vdGggQ29uZmlndXJhdGlvbiBhbmQgQVBJIEVudHJ5cG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJsdWV0b290aCBjb2RlLiBSaWdodCwgYG1nbXQub2AgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIGBibHVldG9vdGgteWAsIHdoaWNoIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CVGAgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2QgdG8ga25vdywgc2V0cyB0aGUgc3RhZ2UuIE5vdywgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAgYW5kIGBpc19maWx0ZXJfbWF0Y2hgLiBXYWl0LCBJIHRob3VnaHQgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCB3YXMgc3RhdGljLCB3aGljaCB3b3VsZCBtYWtlIGl0IGFuIGludGVybmFsIGhlbHBlci4gQnV0IGl0J3MgbGlzdGVkIGFzIGEgaGFuZGxlciBpbiBgbWdtdF9oYW5kbGVyc2AuIFRpbWUgZm9yIGEgcXVpY2sgY2hlY2suIFllcCwgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YCAqaXMqIHN0YXRpYy5cblxuSGFuZyBvbi4uLiB0aGUgcHJvbXB0IG1lbnRpb25zIGEgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlIGZyb20gYSBkZWJ1Z2dpbmcgYW5kIHN5bWJvbCByZXNvbHV0aW9uIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGZvciBhbiBleHRlcm5hbCBBUEkuIFRoaXMgY2FsbHMgZm9yIGFub3RoZXIgY2hlY2suLi4gaXMgaXQgaW5saW5lZD8gSG1tLCBpdCdzIGEgaGFuZGxlciBpbiBhbiBhcnJheSwgc28gaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoYXQgcHJhY3RpY2FsbHkgZ3VhcmFudGVlcyBpdCB3b24ndCBiZSBpbmxpbmVkLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gaXQncyBwYXJ0IG9mIGEgaGFuZGxlciB0YWJsZS5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgbGV0J3MgYWxzbyBpbmNsdWRlIGBtZ210X2RldmljZV9mb3VuZGAsIGJlY2F1c2UgdGhhdCBjYWxscyBgaXNfZmlsdGVyX21hdGNoYC4gQW5kIGZpbmFsbHksIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAuLi4gdGhhdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBiZXN0IHRvIGZpbmQgd2hlcmUgaXQncyBhY3R1YWxseSAqY2FsbGVkKiB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6MzUuMjM1NzE5NDYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY1ODg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM9MjcwOT12b2lkIGhjaV9yZWxlYXNlX2RldihzdHJ1Y3QgaGNpX2RldiAqaGRldilcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYy0yNzMwLVxcdGhjaV9jb25uX3BhcmFtc19jbGVhcl9hbGwoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjI3MzE6XFx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTI3MzItXFx0aGNpX2Jsb2NrZWRfa2V5c19jbGVhcihoZGV2KTtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5bmMuYz0zMjkxPWludCBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTMzMTctXFx0ICovXFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jOjMzMTg6XFx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XFxubmV0L2JsdWV0b290aC9oY2lfc3luYy5jLTMzMTktXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYz02MDgxPXN0YXRpYyBpbnQgc3RhcnRfZGlzY292ZXJ5X2ludGVybmFsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTIyLVxcdCAqL1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxMjM6XFx0aGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7XFxubmV0L2JsdWV0b290aC9tZ210LmMtNjEyNC1cXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNjc9c3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjI0NS1cXHQgKi9cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MjQ2OlxcdGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKGhkZXYpO1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYyNDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjM1LjI4NjM4M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYyOTIyODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENhbGxzIHRvIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHdoZXJlIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAgZ2V0cyBjYWxsZWQuIFNlZW1zIGxpa2UgYSBjcml0aWNhbCBwYXJ0IG9mIG1hbmFnaW5nIGRpc2NvdmVyeSBmaWx0ZXJzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGhjaV9yZWxlYXNlX2RldmAsIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYCwgYHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbGAsIGFuZCBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLlxuXG5UaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcyBlc3BlY2lhbGx5IHdvcnRoIGNoZWNraW5nOlxuXG4qICAgYHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5YDogVGhpcyBvbmUncyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBhZGRyZXNzIGlzIHRha2VuLCBhbmQgaXQncyBub3QgaW5saW5lZCwgd2hpY2ggb2Z0ZW4gbWVhbnMgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LlxuKiAgIGBtZ210X2RldmljZV9mb3VuZGA6IEl0IHNlZW1zIGl0IGNhbGxzIGBpc19maWx0ZXJfbWF0Y2hgLlxuKiAgIGBoY2lfcmVsZWFzZV9kZXZgOlxuKiAgIGBoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jYDpcbiogICBgc3RhcnRfZGlzY292ZXJ5X2ludGVybmFsYDogVGhpcyBvbmUgYWxzbyB3YXJyYW50cyBzY3J1dGlueSwgc2luY2UgaXQncyBzdGF0aWMgYW5kIHRoZSBhZGRyZXNzICp3YXMqIHRha2VuIChidXQgbm90IGFueW1vcmUsIGl0J3MgY2FsbGVkIGJ5IGBzdGFydF9kaXNjb3ZlcnlgIGFuZCBgc3RhcnRfbGltaXRlZF9kaXNjb3ZlcnlgLCBzbyB0aGVyZSBpcyBubyBzcGVjaWZpYyBhZGRyZXNzIHRha2VuKVxuXG5TbywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGJlaGF2aW9yIG9mIGBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWxgIGFuZCBhbHNvIGBzdGFydF9kaXNjb3ZlcnlgIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiBob3cgdGhlc2UgZmlsdGVycyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgY2xlYXJlZCB0aHJvdWdob3V0IHRoZSBkaXNjb3ZlcnkgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODo1Mi45MTU2MTMyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MzcyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhcnRfZGlzY292ZXJ5X2ludGVybmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvbWdtdC5jPTYwNzM9c3RhdGljIGludCBzdGFydF9kaXNjb3Zlcnlfc3luYyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYwODAtXFxubmV0L2JsdWV0b290aC9tZ210LmM6NjA4MTpzdGF0aWMgaW50IHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYwODItXFx0XFx0XFx0XFx0ICAgIHUxNiBvcCwgdm9pZCAqZGF0YSwgdTE2IGxlbilcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jPTYxNTI9c3RhdGljIGludCBzdGFydF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcXG4tLVxcbm5ldC9ibHVldG9vdGgvbWdtdC5jLTYxNTQte1xcbm5ldC9ibHVldG9vdGgvbWdtdC5jOjYxNTU6XFx0cmV0dXJuIHN0YXJ0X2Rpc2NvdmVyeV9pbnRlcm5hbChzaywgaGRldiwgTUdNVF9PUF9TVEFSVF9ESVNDT1ZFUlksXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE1Ni1cXHRcXHRcXHRcXHRcXHRkYXRhLCBsZW4pO1xcbi0tXFxubmV0L2JsdWV0b290aC9tZ210LmM9NjE1OT1zdGF0aWMgaW50IHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL21nbXQuYy02MTYxLXtcXG5uZXQvYmx1ZXRvb3RoL21nbXQuYzo2MTYyOlxcdHJldHVybiBzdGFydF9kaXNjb3ZlcnlfaW50ZXJuYWwoc2ssIGhkZXYsXFxubmV0L2JsdWV0b290aC9tZ210LmMtNjE2My1cXHRcXHRcXHRcXHRcXHRNR01UX09QX1NUQVJUX0xJTUlURURfRElTQ09WRVJZLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODo1Mi45NjM0NTM0ODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgyNzI5OTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQmx1ZXRvb3RoIERpc2NvdmVyeSBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgQmx1ZXRvb3RoIGRpc2NvdmVyeSBmaWx0ZXJpbmcgZml4LCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnb3Qgc28gZmFyLiBXZSd2ZSBnb3QgdGhlc2UgZW50cnkgcG9pbnRzIOKAkyBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBgc3RhcnRfZGlzY292ZXJ5YCwgYHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5YCwgYG1nbXRfZGV2aWNlX2ZvdW5kYCwgYGhjaV9yZWxlYXNlX2RldmAsIGFuZCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2Ag4oCTIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgYmVjYXVzZSBgc3RhcnRfZGlzY292ZXJ5YCBhbmQgYHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5YCBhcmUgaGFuZGxlZCB3aXRoaW4gYG1nbXRfaGFuZGxlcnNgLiBJIHRoaW5rIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYWRkcmVzcyBhIHJhY2UgY29uZGl0aW9uLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5MZXQncyBxdWlja2x5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEl0IHNlZW1zIHRoZSBjb3JlIGNvbmZpZyBpcyBgQlRgLlxuXG5GaW5hbGx5LCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ2xsIGJlIHRhcmdldGluZyB0aGUgZm9sbG93aW5nIHN5bWJvbHMgZHVyaW5nIGZ1enppbmcgdG8gZW5zdXJlIG1heGltdW0gY292ZXJhZ2UgYW5kIHRlc3RpbmcgdGhlIHJlbGV2YW50IGxvZ2ljOiBgc3RhcnRfc2VydmljZV9kaXNjb3ZlcnlgLCBgbWdtdF9kZXZpY2VfZm91bmRgLCBgc3RhcnRfZGlzY292ZXJ5YCwgYHN0YXJ0X2xpbWl0ZWRfZGlzY292ZXJ5YCwgYGhjaV9yZWxlYXNlX2RldmAsIGFuZCBgaGNpX3VwZGF0ZV9wYXNzaXZlX3NjYW5fc3luY2AuXG5cbkknbGwgYmUgdXRpbGl6aW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcHJlc2VudCBteSBmdXp6aW5nIGZpbmRpbmdzLCBhbmQgc2hvdWxkIGJlIHJlYWR5IHRvIHJlcG9ydCBvbiB0aGUgZWZmaWNhY3kgb2YgdGhlIGZpeCBzb29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODgyLCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNjo1ODo1OC43OTA3NTUxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzODExMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5XCIsXG4gICAgXCJtZ210X2RldmljZV9mb3VuZFwiLFxuICAgIFwic3RhcnRfZGlzY292ZXJ5XCIsXG4gICAgXCJzdGFydF9saW1pdGVkX2Rpc2NvdmVyeVwiLFxuICAgIFwiaGNpX3JlbGVhc2VfZGV2XCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCB1dWlkX2NvdW50IGFuZCB1dWlkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaW50ZXJmYWNlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5XCIsXG4gICAgXCJtZ210X2RldmljZV9mb3VuZFwiLFxuICAgIFwic3RhcnRfZGlzY292ZXJ5XCIsXG4gICAgXCJzdGFydF9saW1pdGVkX2Rpc2NvdmVyeVwiLFxuICAgIFwiaGNpX3JlbGVhc2VfZGV2XCIsXG4gICAgXCJoY2lfdXBkYXRlX3Bhc3NpdmVfc2Nhbl9zeW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBCbHVldG9vdGggc2VydmljZSBkaXNjb3ZlcnkgZmlsdGVyaW5nIGJ5IGFkZGluZyBhIHNwaW5sb2NrIGFyb3VuZCB1dWlkX2NvdW50IGFuZCB1dWlkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaW50ZXJmYWNlKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6NTguODc0NTcyNDg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTkwOTI2ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTg6NTguODc1MDkyODQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxOTA0MDM0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGJ5IGFkZGluZyBzcGlubG9ja3MgYXJvdW5kIGFjY2Vzc2VzIHRvIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudGAgYW5kIGBoZGV2LVxcdTAwM2VkaXNjb3ZlcnkudXVpZHNgLiBJdCBwcmV2ZW50cyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIG1vZGlmeWluZyBvciByZWFkaW5nIHRoZSBkaXNjb3ZlcnkgZmlsdGVyIFVVSURzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNDliM2ZlNTM4ZWVjZTA0YWU0NGI0NzExNDAwZGZiNGM0N2I2ZTgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxNjo1ODowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbmluZGV4IGUwNzQxOGE1YWRjZTcuLjQxMDVjNDQ2Y2E5ODMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxuKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhcbkBAIC05MzUsOSArOTM1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGhjaV9kaXNjb3ZlcnlfZmlsdGVyX2NsZWFyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KVxuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVzdWx0X2ZpbHRlcmluZyA9IGZhbHNlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkucmVwb3J0X2ludmFsaWRfcnNzaSA9IHRydWU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS5yc3NpID0gSENJX1JTU0lfSU5WQUxJRDtcbi1cdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSAwO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuK1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCA9IDA7XG4gXHRrZnJlZShoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyk7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcyA9IE5VTEw7XG4gXHRzcGluX3VubG9jayhcdTAwMjZoZGV2LVx1MDAzZWRpc2NvdmVyeS5sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL21nbXQuYyBiL25ldC9ibHVldG9vdGgvbWdtdC5jXG5pbmRleCA4NjBjMDg2MDExYjcxLi5hYzQ4NjRlNTZlYzcyIDEwMDY0NFxuLS0tIGEvbmV0L2JsdWV0b290aC9tZ210LmNcbisrKyBiL25ldC9ibHVldG9vdGgvbWdtdC5jXG5AQCAtNjE3MSw2ICs2MTcxLDcgQEAgc3RhdGljIGludCBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LFxuIFx0c3RydWN0IG1nbXRfcGVuZGluZ19jbWQgKmNtZDtcbiBcdGNvbnN0IHUxNiBtYXhfdXVpZF9jb3VudCA9ICgoVTE2X01BWCAtIHNpemVvZigqY3ApKSAvIDE2KTtcbiBcdHUxNiB1dWlkX2NvdW50LCBleHBlY3RlZF9sZW47XG4rXHR1OCAoKnV1aWRzKVsxNl0gPSBOVUxMO1xuIFx0dTggc3RhdHVzO1xuIFx0aW50IGVycjtcbiBcbkBAIC02MjQ3LDEyICs2MjQ4LDEwIEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnJlc3VsdF9maWx0ZXJpbmcgPSB0cnVlO1xuIFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudHlwZSA9IGNwLVx1MDAzZXR5cGU7XG4gXHRoZGV2LVx1MDAzZWRpc2NvdmVyeS5yc3NpID0gY3AtXHUwMDNlcnNzaTtcbi1cdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xuIFxuIFx0aWYgKHV1aWRfY291bnQgXHUwMDNlIDApIHtcbi1cdFx0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSBrbWVtZHVwKGNwLVx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogMTYsXG4tXHRcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4tXHRcdGlmICghaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMpIHtcbitcdFx0dXVpZHMgPSBrbWVtZHVwKGNwLVx1MDAzZXV1aWRzLCB1dWlkX2NvdW50ICogc2l6ZW9mKCp1dWlkcyksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXV1aWRzKSB7XG4gXHRcdFx0ZXJyID0gbWdtdF9jbWRfY29tcGxldGUoc2ssIGhkZXYtXHUwMDNlaWQsXG4gXHRcdFx0XHRcdFx0TUdNVF9PUF9TVEFSVF9TRVJWSUNFX0RJU0NPVkVSWSxcbiBcdFx0XHRcdFx0XHRNR01UX1NUQVRVU19GQUlMRUQsXG5AQCAtNjI2Miw2ICs2MjYxLDExIEBAIHN0YXRpYyBpbnQgc3RhcnRfc2VydmljZV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuK1x0aGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZHMgPSB1dWlkcztcbitcdGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgPSB1dWlkX2NvdW50O1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4rXG4gXHRlcnIgPSBoY2lfY21kX3N5bmNfcXVldWUoaGRldiwgc3RhcnRfZGlzY292ZXJ5X3N5bmMsIGNtZCxcbiBcdFx0XHRcdCBzdGFydF9kaXNjb3ZlcnlfY29tcGxldGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuQEAgLTEwNTA1LDYgKzEwNTA5LDcgQEAgc3RhdGljIGJvb2wgaXNfZmlsdGVyX21hdGNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzOCByc3NpLCB1OCAqZWlyLFxuIFx0ICAgICAhaGNpX3Rlc3RfcXVpcmsoaGRldiwgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSKSkpKVxuIFx0XHRyZXR1cm4gIGZhbHNlO1xuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0aWYgKGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnQgIT0gMCkge1xuIFx0XHQvKiBJZiBhIGxpc3Qgb2YgVVVJRHMgaXMgcHJvdmlkZWQgaW4gZmlsdGVyLCByZXN1bHRzIHdpdGggbm9cbiBcdFx0ICogbWF0Y2hpbmcgVVVJRCBzaG91bGQgYmUgZHJvcHBlZC5cbkBAIC0xMDUxMyw5ICsxMDUxOCwxMiBAQCBzdGF0aWMgYm9vbCBpc19maWx0ZXJfbWF0Y2goc3RydWN0IGhjaV9kZXYgKmhkZXYsIHM4IHJzc2ksIHU4ICplaXIsXG4gXHRcdFx0XHQgICBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkcykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhZWlyX2hhc191dWlkcyhzY2FuX3JzcCwgc2Nhbl9yc3BfbGVuLFxuIFx0XHRcdFx0ICAgaGRldi1cdTAwM2VkaXNjb3ZlcnkudXVpZF9jb3VudCxcbi1cdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSlcbitcdFx0XHRcdCAgIGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzKSkge1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmhkZXYtXHUwMDNlZGlzY292ZXJ5LmxvY2spO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0fVxuIFx0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2aGRldi1cdTAwM2VkaXNjb3ZlcnkubG9jayk7XG4gXG4gXHQvKiBJZiBkdXBsaWNhdGUgZmlsdGVyaW5nIGRvZXMgbm90IHJlcG9ydCBSU1NJIGNoYW5nZXMsIHRoZW4gcmVzdGFydFxuIFx0ICogc2Nhbm5pbmcgdG8gZW5zdXJlIHVwZGF0ZWQgcmVzdWx0IHdpdGggdXBkYXRlZCBSU1NJIHZhbHVlcy5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE2OjU4OjU4Ljg3NTA5MzcwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTkwMzg1MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbHVldG9vdGggTWFuYWdlbWVudCBDb2RlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBoaXR0aW5nIGBoY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcmAsIGBzdGFydF9zZXJ2aWNlX2Rpc2NvdmVyeWAsIGFuZCBgaXNfZmlsdGVyX21hdGNoYCBpbiBgbmV0L2JsdWV0b290aC9tZ210LmNgIGFuZCBgaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmhgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgc3Bpbl9sb2NrYCBhbmQgYHNwaW5fdW5sb2NrYCBhcm91bmQgdGhlIGFjY2Vzc2VzIHRvIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvY2tpbmcgZml4LCB3aGljaCBpcyBhbHdheXMgZ29vZCB0byBzZWUuIEl04oCZcyBleHBsaWNpdGx5IHByb3RlY3RpbmcgdGhvc2UgYHV1aWRfY291bnRgIGFuZCBgdXVpZHNgIG1lbWJlcnMgZnJvbSBjb25jdXJyZW50IGFjY2VzcywgbWVhbmluZyBpdCdzIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIEJsdWV0b290aCBzdGFjay5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYSBuZXcgdnVsbmVyYWJpbGl0eS4gSSBxdWlja2x5IHNjYW4gZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIE9rYXksIGB1dWlkc2AgYXJlIGFsbG9jYXRlZCB1c2luZyBga21lbWR1cGAsIGFuZCB0aGUgc291cmNlIGlzIHRoZSB1c2VyLXNwYWNlIGNvbW1hbmQgcGF5bG9hZCBgY3AtXHUwMDNldXVpZHNgLiBCZWNhdXNlIGBjcC1cdTAwM2V1dWlkc2AgY29tZXMgZnJvbSB0aGUgdXNlci1zcGFjZSBwYXlsb2FkLCBpdCdzIGluaXRpYWxpemVkLiBHb29kLiBUaGlzIGlzIG9ubHkgYWRkaW5nIGxvY2tpbmc7IGl0J3MgbW92aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkc2AgYW5kIGBoZGV2LVx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBpbnNpZGUgdGhlIHNwaW5sb2NrLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjb25jdXJyZW5jeSBidWcgZml4LiBOb3RoaW5nIGhlcmUgaXMgY3JlYXRpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay5cblxuVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2guIFRoZSBsb2NraW5nIGlzIHByZWNpc2VseSB3aGF0J3MgbmVlZGVkLiBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBuZXcgc2VjdXJpdHkgaXNzdWVzLiBUaGUgcGF0Y2ggYWltcyB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIGFuZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gSSdtIHNhdGlzZmllZC4gTm8gbmVlZCB0byBydW4gS01TQU4gb24gdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzYsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTY6NTk6MDYuMDY1NDgxNjUxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBieSBhZGRpbmcgc3BpbmxvY2tzIGFyb3VuZCBhY2Nlc3NlcyB0byBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRfY291bnRgIGFuZCBgaGRldi1cXHUwMDNlZGlzY292ZXJ5LnV1aWRzYC4gSXQgcHJldmVudHMgZGF0YSByYWNlcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBtb2RpZnlpbmcgb3IgcmVhZGluZyB0aGUgZGlzY292ZXJ5IGZpbHRlciBVVUlEcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgYnkgYWRkaW5nIHNwaW5sb2NrcyBhcm91bmQgYWNjZXNzZXMgdG8gYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkX2NvdW50YCBhbmQgYGhkZXYtXFx1MDAzZWRpc2NvdmVyeS51dWlkc2AuIEl0IHByZXZlbnRzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gbW9kaWZ5aW5nIG9yIHJlYWRpbmcgdGhlIGRpc2NvdmVyeSBmaWx0ZXIgVVVJRHMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow8mk9k[1] Phase: Succeeded StartedAt: 2026-08-08 16:59:16 +0000 UTC FinishedAt: 2026-08-08 16:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 16:59:16 +0000 UTC FinishedAt: 2026-08-08 16:59:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2] Phase: Succeeded StartedAt: 2026-08-08 16:59:16 +0000 UTC FinishedAt: 2026-08-08 20:39:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-08 16:59:16 +0000 UTC FinishedAt: 2026-08-08 20:39:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-08 16:59:16 +0000 UTC FinishedAt: 2026-08-08 16:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-08 16:59:16 +0000 UTC FinishedAt: 2026-08-08 16:59:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8mk9k/series-workflow8mk9k-convert-artifact-4199811284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-08 16:59:26 +0000 UTC FinishedAt: 2026-08-08 17:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-08 16:59:26 +0000 UTC FinishedAt: 2026-08-08 17:15:42 +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:*1b302b28-07d2-48aa-bc42-e676054e6ec2,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-workflow8mk9k/series-workflow8mk9k-convert-artifact-4199811284/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": "30561924-e5f3-47b3-acbd-cdf5cbdba14e", "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-workflow8mk9k/series-workflow8mk9k-build-action-2057061458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-08 16:59:26 +0000 UTC FinishedAt: 2026-08-08 17:15:32 +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:*1b302b28-07d2-48aa-bc42-e676054e6ec2,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-workflow8mk9k/series-workflow8mk9k-convert-artifact-4199811284/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": "30561924-e5f3-47b3-acbd-cdf5cbdba14e", "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-workflow8mk9k/series-workflow8mk9k-build-action-2057061458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-08 17:15:42 +0000 UTC FinishedAt: 2026-08-08 17:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-08 17:15:42 +0000 UTC FinishedAt: 2026-08-08 17:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-08 17:15:42 +0000 UTC FinishedAt: 2026-08-08 17:15:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-08 17:15:42 +0000 UTC FinishedAt: 2026-08-08 17:15:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8mk9k/series-workflow8mk9k-convert-artifact-3342624915/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-08 17:15:52 +0000 UTC FinishedAt: 2026-08-08 17:18:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-08 17:15:52 +0000 UTC FinishedAt: 2026-08-08 17:17:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*30561924-e5f3-47b3-acbd-cdf5cbdba14e,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-workflow8mk9k/series-workflow8mk9k-build-action-2057061458/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-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-08 17:18:05 +0000 UTC FinishedAt: 2026-08-08 17:18:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-08 17:18:05 +0000 UTC FinishedAt: 2026-08-08 17:18:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-08 17:18:05 +0000 UTC FinishedAt: 2026-08-08 17:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-08 17:18:05 +0000 UTC FinishedAt: 2026-08-08 17:34:35 +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:*1b302b28-07d2-48aa-bc42-e676054e6ec2,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-workflow8mk9k/series-workflow8mk9k-convert-artifact-3342624915/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": "b9dc72d4-ca36-4d36-a3e4-97c0189f873c", "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-workflow8mk9k/series-workflow8mk9k-build-action-2702917319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-08 17:18:05 +0000 UTC FinishedAt: 2026-08-08 17:34:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1b302b28-07d2-48aa-bc42-e676054e6ec2,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-workflow8mk9k/series-workflow8mk9k-convert-artifact-3342624915/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": "b9dc72d4-ca36-4d36-a3e4-97c0189f873c", "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-workflow8mk9k/series-workflow8mk9k-build-action-2702917319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-08 17:34:35 +0000 UTC FinishedAt: 2026-08-08 17:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-08 17:34:35 +0000 UTC FinishedAt: 2026-08-08 17:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-08 17:34:35 +0000 UTC FinishedAt: 2026-08-08 17:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-08 17:34:35 +0000 UTC FinishedAt: 2026-08-08 17:36:30 +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:*b9dc72d4-ca36-4d36-a3e4-97c0189f873c,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-workflow8mk9k/series-workflow8mk9k-build-action-2702917319/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-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-08 17:36:40 +0000 UTC FinishedAt: 2026-08-08 20:39:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-08 17:36:40 +0000 UTC FinishedAt: 2026-08-08 20:39:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"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:*30561924-e5f3-47b3-acbd-cdf5cbdba14e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9dc72d4-ca36-4d36-a3e4-97c0189f873c,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-workflow8mk9k/series-workflow8mk9k-build-action-2057061458/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-workflow8mk9k/series-workflow8mk9k-build-action-2702917319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-08 17:36:40 +0000 UTC FinishedAt: 2026-08-08 17:36:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-08 17:36:40 +0000 UTC FinishedAt: 2026-08-08 17:36:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"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-workflow8mk9k/series-workflow8mk9k-convert-artifact-4246131980/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-08 17:36:40 +0000 UTC FinishedAt: 2026-08-08 17:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-08 17:36:40 +0000 UTC FinishedAt: 2026-08-08 17:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-08 17:36:40 +0000 UTC FinishedAt: 2026-08-08 17:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-08 17:36:50 +0000 UTC FinishedAt: 2026-08-08 20:39:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mk9k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["start_service_discovery","mgmt_device_found","start_discovery","start_limited_discovery","hci_release_dev","hci_update_passive_scan_sync"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT"],"series_id":"b619b929-9a79-4c92-8db2-c370201785f2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-08 17:36:50 +0000 UTC FinishedAt: 2026-08-08 20:39:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*30561924-e5f3-47b3-acbd-cdf5cbdba14e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9dc72d4-ca36-4d36-a3e4-97c0189f873c,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-workflow8mk9k/series-workflow8mk9k-build-action-2057061458/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-workflow8mk9k/series-workflow8mk9k-build-action-2702917319/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-workflow8mk9k/series-workflow8mk9k-convert-artifact-4246131980/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,}