Name: series-workflow796lx Phase: Succeeded StartedAt: 2026-08-11 19:33:34 +0000 UTC FinishedAt: 2026-08-11 23:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[0] Phase: Succeeded StartedAt: 2026-08-11 19:33:34 +0000 UTC FinishedAt: 2026-08-11 19:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 19:33:34 +0000 UTC FinishedAt: 2026-08-11 19:37:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NVME", "NVME_MULTIPATH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NVME", "NVME_MULTIPATH" ], "series_id": "99ad8393-c9da-4b87-b7e8-511e71e5223d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nvme_passthru_end", "nvme_queue_scan" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O252bWVfcGFzc3RocnVfZW5kJiMzNDssCiAgICAmIzM0O252bWVfcXVldWVfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBhbmQgdXNlcyBpdCB0byBwcmV2ZW50IHVuc29saWNpdGVkIExCQSBmb3JtYXQgb3IgbWV0YWRhdGEgc2l6ZSBjaGFuZ2VzIG9uIGluLXVzZSBOVk1lIG5hbWVzcGFjZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBkYXRhIGNvcnJ1cHRpb24gb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVlIHRvIGJsb2NrIHNpemUgY2hhbmdlcyB3aGlsZSBpbiB1c2UpIGFyZSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5WTWUgY29yZSBkcml2ZXIgdG8gcmVmdXNlIHVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2VzIG9uIGFuIGluLXVzZSBuYW1lc3BhY2UsIGFuZCBhZGRzIGEgZmxhZyB0byBhbGxvdyBmb3JtYXQgY2hhbmdlcyBpZiB0aGUgaG9zdCByZXF1ZXN0ZWQgaXQgdmlhIE5WTWUgcGFzc3Rocm91Z2ggY29tbWFuZHMuIFRoaXMgYWZmZWN0cyBjb3JlIE5WTWUgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYyODA3MTAyYWUwYjUwOTExOTdmMDNiNWE0OTliNjg2ZmJjMjZjODFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxOTozNTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbmluZGV4IDQ1M2MxZjBiMmRkMDkuLmViYWM1YTNkMWEwNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuQEAgLTEyODUsOCAmIzQzOzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuIFx0XHR9XG4gXHR9XG4gXHRpZiAoZWZmZWN0cyBcdTAwMjYgKE5WTUVfQ01EX0VGRkVDVFNfTklDIHwgTlZNRV9DTURfRUZGRUNUU19OQ0MpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGhvc3QgYXNrZWQgZm9yIHRoaXMgY2hhbmdlLCBzbyBsZXQgdGhlIHJlc2NhbiBhZG9wdCB0aGVcbiYjNDM7XHRcdCAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhblxuJiM0MztcdFx0ICogdW5zb2xpY2l0ZWQgY2hhbmdlIGlzIHJlZnVzZWQsIHNlZSBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNldF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZjdHJsLVx1MDAzZWZsYWdzKTtcbiBcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNmN0cmwtXHUwMDNlc2Nhbl93b3JrKTtcbiYjNDM7XHRcdGNsZWFyX2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFx1MDAyNmN0cmwtXHUwMDNlZmxhZ3MpO1xuIFx0fVxuIFx0aWYgKG5zKVxuIFx0XHRyZXR1cm47XG5AQCAtMjM4NCw2ICYjNDM7MjM5MSwxNyBAQCBzdGF0aWMgYm9vbCBudm1lX2ludmFsaWRfbGJhX3N6KHU2NCBuc3plLCBzaWduZWQgaW50IHNoaWZ0LCBzZWN0b3JfdCAqY2FwYWNpdHkpXG4gXHRyZXR1cm4gY2hlY2tfc2hsX292ZXJmbG93KG5zemUsIHNoaWZ0LCBjYXBhY2l0eSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBPcGVuZXJzIG9mIGEgbXVsdGlwYXRoIG5hbWVzcGFjZSBnbyB0byB0aGUgaGVhZCBkaXNrOyB0aGUgcGVyLXBhdGggZGlzayBpc1xuJiM0MzsgKiBoaWRkZW4gYW5kIG5ldmVyIGhhcyBhbnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG52bWVfbnNfb3BlbmVycyhzdHJ1Y3QgbnZtZV9ucyAqbnMpXG4mIzQzO3tcbiYjNDM7XHRpZiAobnZtZV9uc19oZWFkX211bHRpcGF0aChucy1cdTAwM2VoZWFkKSlcbiYjNDM7XHRcdHJldHVybiBkaXNrX29wZW5lcnMobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrKTtcbiYjNDM7XHRyZXR1cm4gZGlza19vcGVuZXJzKG5zLVx1MDAzZWRpc2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4gXHRcdHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4ge1xuQEAgLTI0MzYsNiAmIzQzOzI0NTQsMjggQEAgc3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDaGFuZ2luZyB0aGUgTEJBIGZvcm1hdCBvciB0aGUgbWV0YWRhdGEgc2l6ZSByZWludGVycHJldHMgZXZlcnl0aGluZ1xuJiM0MztcdCAqIHRoZSBob3N0IGhhcyBhbHJlYWR5IGNhY2hlZCwgcXVldWVkIG9yIGhhbmRlZCB0byB0aGUgaW50ZWdyaXR5IGNvZGVcbiYjNDM7XHQgKiBmb3IgdGhpcyBuYW1lc3BhY2UsIGFuZCBmcmVlemluZyB0aGUgcXVldWUgZG9lcyBub3QgY292ZXIgYW55IG9mIGl0OlxuJiM0MztcdCAqIHBhZ2UgY2FjaGUgY29udGVudHMsIGJpb3MgYmF0Y2hlZCBvbiBhIHBsdWcgYW5kIHRoZSBkZWZlcnJlZFxuJiM0MztcdCAqIGludGVncml0eSB2ZXJpZnkgd29yayBhbGwgb3V0bGl2ZSB0aGUgZnJlZXplLiAgSWYgc3VjaCBhIGNoYW5nZVxuJiM0MztcdCAqIGFycml2ZXMgdW5zb2xpY2l0ZWQgd2hpbGUgdGhlIG5hbWVzcGFjZSBpcyBpbiB1c2UsIHJlZnVzZSBpdCBhbmQgbGV0XG4mIzQzO1x0ICogdGhlIGNhbGxlciB0YWtlIHRoZSBuYW1lc3BhY2Ugb2ZmbGluZSByYXRoZXIgdGhhbiBhZG9wdCBhIGdlb21ldHJ5XG4mIzQzO1x0ICogdGhhdCBkZXNjcmliZXMgc29tZXRoaW5nIGVsc2UgdGhhbiB3aGF0IHRoZSBob3N0IGlzIGhvbGRpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG52bWVfbnNfb3BlbmVycyhucykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF0ZXN0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFx1MDAyNm5zLVx1MDAzZWN0cmwtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAobnMtXHUwMDNlaGVhZC1cdTAwM2VsYmFfc2hpZnQgIT0gaWQtXHUwMDNlbGJhZltsYmFmXS5kcyB8fFxuJiM0MztcdCAgICAgbnMtXHUwMDNlaGVhZC1cdTAwM2VtcyAhPSBsZTE2X3RvX2NwdShpZC1cdTAwM2VsYmFmW2xiYWZdLm1zKSkpIHtcbiYjNDM7XHRcdGRldl9lcnIobnMtXHUwMDNlY3RybC1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O3Vuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2Ugb24gaW4tdXNlIG5zaWQgJXUgKGxiYV9zaGlmdCAldSAtXHUwMDNlICV1LCBtcyAldSAtXHUwMDNlICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2Vuc2lkLCBucy1cdTAwM2VoZWFkLVx1MDAzZWxiYV9zaGlmdCwgaWQtXHUwMDNlbGJhZltsYmFmXS5kcyxcbiYjNDM7XHRcdFx0bnMtXHUwMDNlaGVhZC1cdTAwM2VtcywgbGUxNl90b19jcHUoaWQtXHUwMDNlbGJhZltsYmFmXS5tcykpO1xuJiM0MztcdFx0cmV0ID0gTlZNRV9TQ19JTlZBTElEX05TIHwgTlZNRV9TVEFUVVNfRE5SO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4gXG4gXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobnMtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG5pbmRleCA4MjQ2NTFjYzg5OGRiLi45M2MxNWQ1NTgwZTMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcbkBAIC0zMjksNiAmIzQzOzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHtcbiBcdE5WTUVfQ1RSTF9TS0lQX0lEX0NOU19DU1x0PSA0LFxuIFx0TlZNRV9DVFJMX0RJUlRZX0NBUEFCSUxJVFlcdD0gNSxcbiBcdE5WTUVfQ1RSTF9GUk9aRU5cdFx0PSA2LFxuJiM0MztcdE5WTUVfQ1RSTF9TRUxGX1JFU0NBTlx0XHQ9IDcsXG4gfTtcbiBcbiBzdHJ1Y3QgbnZtZV9jdHJsIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnZtZV9wYXNzdGhydV9lbmQmIzM0OywKICAgICYjMzQ7bnZtZV9xdWV1ZV9zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIGNvcmUgZHJpdmVyIHRvIHJlZnVzZSB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyBvbiBhbiBpbi11c2UgbmFtZXNwYWNlLCBhbmQgYWRkcyBhIGZsYWcgdG8gYWxsb3cgZm9ybWF0IGNoYW5nZXMgaWYgdGhlIGhvc3QgcmVxdWVzdGVkIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIGFmZmVjdHMgY29yZSBOVk1lIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjgwNzEwMmFlMGI1MDkxMTk3ZjAzYjVhNDk5YjY4NmZiYzI2YzgxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTk6MzU6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKaW5kZXggNDUzYzFmMGIyZGQwOS4uZWJhYzVhM2QxYTA3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwpAQCAtMTI4NSw4ICYjNDM7MTI4NSwxNSBAQCB2b2lkIG52bWVfcGFzc3RocnVfZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTMyIGVmZmVjdHMsCiAJCX0KIAl9CiAJaWYgKGVmZmVjdHMgJmFtcDsgKE5WTUVfQ01EX0VGRkVDVFNfTklDIHwgTlZNRV9DTURfRUZGRUNUU19OQ0MpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGhvc3QgYXNrZWQgZm9yIHRoaXMgY2hhbmdlLCBzbyBsZXQgdGhlIHJlc2NhbiBhZG9wdCB0aGUKJiM0MzsJCSAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhbgomIzQzOwkJICogdW5zb2xpY2l0ZWQgY2hhbmdlIGlzIHJlZnVzZWQsIHNlZSBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKCkuCiYjNDM7CQkgKi8KJiM0MzsJCXNldF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCAmYW1wO2N0cmwtJmd0O2ZsYWdzKTsKIAkJbnZtZV9xdWV1ZV9zY2FuKGN0cmwpOwogCQlmbHVzaF93b3JrKCZhbXA7Y3RybC0mZ3Q7c2Nhbl93b3JrKTsKJiM0MzsJCWNsZWFyX2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sICZhbXA7Y3RybC0mZ3Q7ZmxhZ3MpOwogCX0KIAlpZiAobnMpCiAJCXJldHVybjsKQEAgLTIzODQsNiAmIzQzOzIzOTEsMTcgQEAgc3RhdGljIGJvb2wgbnZtZV9pbnZhbGlkX2xiYV9zeih1NjQgbnN6ZSwgc2lnbmVkIGludCBzaGlmdCwgc2VjdG9yX3QgKmNhcGFjaXR5KQogCXJldHVybiBjaGVja19zaGxfb3ZlcmZsb3cobnN6ZSwgc2hpZnQsIGNhcGFjaXR5KTsKIH0KIAomIzQzOy8qCiYjNDM7ICogT3BlbmVycyBvZiBhIG11bHRpcGF0aCBuYW1lc3BhY2UgZ28gdG8gdGhlIGhlYWQgZGlzazsgdGhlIHBlci1wYXRoIGRpc2sgaXMKJiM0MzsgKiBoaWRkZW4gYW5kIG5ldmVyIGhhcyBhbnkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBudm1lX25zX29wZW5lcnMoc3RydWN0IG52bWVfbnMgKm5zKQomIzQzO3sKJiM0MzsJaWYgKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtJmd0O2hlYWQpKQomIzQzOwkJcmV0dXJuIGRpc2tfb3BlbmVycyhucy0mZ3Q7aGVhZC0mZ3Q7ZGlzayk7CiYjNDM7CXJldHVybiBkaXNrX29wZW5lcnMobnMtJmd0O2Rpc2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsCiAJCXN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pCiB7CkBAIC0yNDM2LDYgJiM0MzsyNDU0LDI4IEBAIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBDaGFuZ2luZyB0aGUgTEJBIGZvcm1hdCBvciB0aGUgbWV0YWRhdGEgc2l6ZSByZWludGVycHJldHMgZXZlcnl0aGluZwomIzQzOwkgKiB0aGUgaG9zdCBoYXMgYWxyZWFkeSBjYWNoZWQsIHF1ZXVlZCBvciBoYW5kZWQgdG8gdGhlIGludGVncml0eSBjb2RlCiYjNDM7CSAqIGZvciB0aGlzIG5hbWVzcGFjZSwgYW5kIGZyZWV6aW5nIHRoZSBxdWV1ZSBkb2VzIG5vdCBjb3ZlciBhbnkgb2YgaXQ6CiYjNDM7CSAqIHBhZ2UgY2FjaGUgY29udGVudHMsIGJpb3MgYmF0Y2hlZCBvbiBhIHBsdWcgYW5kIHRoZSBkZWZlcnJlZAomIzQzOwkgKiBpbnRlZ3JpdHkgdmVyaWZ5IHdvcmsgYWxsIG91dGxpdmUgdGhlIGZyZWV6ZS4gIElmIHN1Y2ggYSBjaGFuZ2UKJiM0MzsJICogYXJyaXZlcyB1bnNvbGljaXRlZCB3aGlsZSB0aGUgbmFtZXNwYWNlIGlzIGluIHVzZSwgcmVmdXNlIGl0IGFuZCBsZXQKJiM0MzsJICogdGhlIGNhbGxlciB0YWtlIHRoZSBuYW1lc3BhY2Ugb2ZmbGluZSByYXRoZXIgdGhhbiBhZG9wdCBhIGdlb21ldHJ5CiYjNDM7CSAqIHRoYXQgZGVzY3JpYmVzIHNvbWV0aGluZyBlbHNlIHRoYW4gd2hhdCB0aGUgaG9zdCBpcyBob2xkaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKG52bWVfbnNfb3BlbmVycyhucykgJmFtcDsmYW1wOwomIzQzOwkgICAgIXRlc3RfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgJmFtcDtucy0mZ3Q7Y3RybC0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJICAgIChucy0mZ3Q7aGVhZC0mZ3Q7bGJhX3NoaWZ0ICE9IGlkLSZndDtsYmFmW2xiYWZdLmRzIHx8CiYjNDM7CSAgICAgbnMtJmd0O2hlYWQtJmd0O21zICE9IGxlMTZfdG9fY3B1KGlkLSZndDtsYmFmW2xiYWZdLm1zKSkpIHsKJiM0MzsJCWRldl9lcnIobnMtJmd0O2N0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O3Vuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2Ugb24gaW4tdXNlIG5zaWQgJXUgKGxiYV9zaGlmdCAldSAtJmd0OyAldSwgbXMgJXUgLSZndDsgJXUpXG4mIzM0OywKJiM0MzsJCQlpbmZvLSZndDtuc2lkLCBucy0mZ3Q7aGVhZC0mZ3Q7bGJhX3NoaWZ0LCBpZC0mZ3Q7bGJhZltsYmFmXS5kcywKJiM0MzsJCQlucy0mZ3Q7aGVhZC0mZ3Q7bXMsIGxlMTZfdG9fY3B1KGlkLSZndDtsYmFmW2xiYWZdLm1zKSk7CiYjNDM7CQlyZXQgPSBOVk1FX1NDX0lOVkFMSURfTlMgfCBOVk1FX1NUQVRVU19ETlI7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKIAogCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShucy0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCmluZGV4IDgyNDY1MWNjODk4ZGIuLjkzYzE1ZDU1ODBlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgKQEAgLTMyOSw2ICYjNDM7MzI5LDcgQEAgZW51bSBudm1lX2N0cmxfZmxhZ3MgewogCU5WTUVfQ1RSTF9TS0lQX0lEX0NOU19DUwk9IDQsCiAJTlZNRV9DVFJMX0RJUlRZX0NBUEFCSUxJVFkJPSA1LAogCU5WTUVfQ1RSTF9GUk9aRU4JCT0gNiwKJiM0MzsJTlZNRV9DVFJMX1NFTEZfUkVTQ0FOCQk9IDcsCiB9OwogCiBzdHJ1Y3QgbnZtZV9jdHJsIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTWUgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRhcmdldGluZyBgZHJpdmVycy9udm1lL2hvc3QvY29yZS5jYCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L252bWUuaGAuIEl0IHNlZW1zIHRvIGJlIGEgc2VjdXJpdHkgaGFyZGVuaW5nIGNoYW5nZSwgd2hpY2ggYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggcHJldmVudHMgdW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZXMgb24gYW4gYWN0aXZlIG5hbWVzcGFjZSB3aXRoaW4gdGhlIE5WTWUgZHJpdmVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGVwIHRvd2FyZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGxvc3Mgb3IgY29ycnVwdGlvbiwgSSYjMzk7ZCBzYXkuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgZmxhZyBpcyBpbnRlcmVzdGluZyB0b287IGl0IGFsbG93cyBjb250cm9sbGVkIGZvcm1hdCBjaGFuZ2VzIGluaXRpYXRlZCBieSB0aGUgaG9zdC4gVGhpcyBpbXBsaWVzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZmxvdyB3aGVyZSBmb3JtYXR0aW5nIGlzIGFjY2VwdGFibGUuCgpOb3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHRhcmdldC4gVGhlIGNvcmUgTlZNZSBkcml2ZXIgY2hhbmdlcywgYW5kIEkga25vdyBRRU1VIGhhcyBhIE5WTWUgZW11bGF0b3IuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgY29kZSBwYXRocyB0aGF0IGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHRoZSB1c2VyIHNwYWNlLiBUaGUgY2hhbGxlbmdlIHdpbGwgYmUgY3JhZnRpbmcgaW5wdXRzIHRoYXQgdHJpZ2dlciB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyBhZGRlZCBieSB0aGlzIHBhdGNoLCB0byBwcm9iZSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCkxldCYjMzk7cyBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSBjYW4gZW5hYmxlIE5WTWUgcHJvcGVybHkgaW4gbXkgdGVzdCBlbnZpcm9ubWVudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGluIGBkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBlbnN1cmUgaXQmIzM5O3MgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHRoZSB0ZXN0aW5nLiBLbm93aW5nIGhvdyBOVk1lIGlzIGNvbmZpZ3VyZWQgaXMga2V5LiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZmxhZ3MgZm9yIHRoZSBlbXVsYXRlZCBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTlZNRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0yPWNvbmZpZyBOVk1FX0NPUkVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTQtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjU6Y29uZmlnIEJMS19ERVZfTlZNRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyBOVk1lIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYEJMS19ERVZfTlZNRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGUgY29yZSBOVk1lIGZ1bmN0aW9uYWxpdHksIHRoYXQgaXMgYE5WTUVfQ09SRWAsIGlzIGFsc28gYmVpbmcgZW5hYmxlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBpc24mIzM5O3Qgc29tZSBpbXBsaWNpdCBkZXBlbmRlbmN5IG9yIHNlbGVjdGlvbiBpc3N1ZS4gQWgsIGdvb2QuIGBCTEtfREVWX05WTUVgIGRvZXMgaW5kZWVkIHNlbGVjdCBgTlZNRV9DT1JFYC4gVGhhdOKAmXMgd2hhdCBJIGV4cGVjdGVkLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncyB0byBhdm9pZCBkb3duc3RyZWFtIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYWN0dWFsIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSBzZWUgd2UgaGF2ZSBjaGFuZ2VzIHRvIGBudm1lX3Bhc3N0aHJ1X2VuZGAsIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCwgYW5kIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiwgYG52bWVfbnNfb3BlbmVyc2AuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgdG8gd29yayBmcm9tLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIGVmZmVjdHMgb2YgdGhlIGNoYW5nZXMgdG8gdGhlc2UgZnVuY3Rpb25zIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGNvZGUuIFRoZXkgYXJlIGxpa2VseSB0b3VjaGluZyBvbiBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSwgYW5kIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiB3aWxsIGJlIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX3Bhc3N0aHJ1X2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI2OT1FWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX3Bhc3N0aHJ1X3N0YXJ0LCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI3MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjcxOnZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcyLVx0XHQgICAgICAgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLCBpbnQgc3RhdHVzKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMzIxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfZW5kLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjY0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTlZNZSBDb25jZXJuOiBFeHBvcnRlZCBTeW1ib2xzKioKCkFscmlnaHQsIHNvIGBudm1lX3Bhc3N0aHJ1X2VuZGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZmluZSwgSSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgZm9yIHRoYXQuIEl0IG1ha2VzIHNlbnNlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgTlZNZSBkZXZpY2UgbWFuYWdlbWVudCBhbmQgaW50ZXJhY3Rpb24uIEJ1dC4uLiBub3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uLCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AuIElzICp0aGF0KiBhbHNvIGV4cG9ydGVkPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBjb25zaWRlci4gSSYjMzk7bSB3b25kZXJpbmcgaWYgaXQmIzM5O3MgZ290IHRoZSBzYW1lIHNvcnQgb2Ygb3V0d2FyZCBmYWNpbmcgbmVlZC4gV2UmIzM5O3ZlIGdvdCB0byBlbnN1cmUgdGhlIHJpZ2h0IHRoaW5ncyBhcmUgZXhwb3NlZCB3aGlsZSBrZWVwaW5nIHRoZSByZXN0IGludGVybmFsLCBtYWludGFpbmluZyBvdXIgaW50ZW5kZWQgYWJzdHJhY3Rpb24sIGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IG9yIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEFuZCBob3cgZG9lcyB0aGF0IGFmZmVjdCB0aGUgZGV2aWNlIHN0YWNrPyBBbmQgd2hhdCB3b3VsZCBpdCBpbXBseSBmb3IgdGhlIG92ZXJhbGwga2VybmVsIGRlc2lnbj8gVGhpcyBjb3VsZCBoYXZlIGEgcmlwcGxlIGVmZmVjdC4gSSByZWFsbHkgbmVlZCB0byBjaGVjayBvbiB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGF0IG90aGVyIGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGVpdGhlciBiZWluZyBleHBvc2VkIG9yIGludGVybmFsLCBhcyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIHRoZSBkZXNpZ24gb2YgdGhpcyBuZXh0IG1vZHVsZSBJJiMzOTttIHdvcmtpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI3MT12b2lkIG52bWVfcGFzc3RocnVfZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTMyIGVmZmVjdHMsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTAtXHRcdCAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhblxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyOTE6XHRcdCAqIHVuc29saWNpdGVkIGNoYW5nZSBpcyByZWZ1c2VkLCBzZWUgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jaygpLlxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTItXHRcdCAqL1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzk4PXN0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDA1OnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNi1cdFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm8oc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTczLVx0XHR9XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU3NDpcdFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhucywgaW5mbyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3NS1cdFx0YnJlYWs7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3Ni1cdGNhc2UgTlZNRV9DU0lfTlZNOlxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1Nzc6XHRcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2sobnMsIGluZm8pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIE5WTWUgZXhwZXJ0OgoKKipJbnRlcm5hbCBOVk1lIE5hbWVzcGFjZSBCbG9jayBVcGRhdGVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4uLiBobW0sIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZmlsZSBvciBtb2R1bGUgd2l0aGluIHRoZSBOVk1lIGRyaXZlci4gSXQmIzM5O3Mgbm90IGRlc2lnbmVkIHRvIGJlIGFjY2Vzc2VkIGV4dGVybmFsbHkuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgdXBkYXRpbmcgdGhlIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBibG9jayBpcyBhIGNyaXRpY2FsLCBsb3ctbGV2ZWwgb3BlcmF0aW9uLiBZb3Ugd291bGRuJiMzOTt0IHdhbnQgdG8gZXhwb3NlIHRoYXQgZGlyZWN0bHkgdG8gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSB3aXRob3V0IGNhcmVmdWwgY29udHJvbC4KCk5vdywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBudm1lX3VwZGF0ZV9uc19pbmZvYC4gQWgsIG9rYXksIHNvIGBudm1lX3VwZGF0ZV9uc19pbmZvYCBpcyB0aGUgbGlrZWx5IHB1YmxpYyBpbnRlcmZhY2UsIG9yIGF0IGxlYXN0IHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24sIHRoYXQgYWN0dWFsbHkgb3JjaGVzdHJhdGVzIHRoZSBwcm9jZXNzIG9mIHVwZGF0aW5nIHRoZSBuYW1lc3BhY2UgaW5mb3JtYXRpb24uIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCBpcyB0aGVuIHRoZSB3b3JraG9yc2UsIHRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcgb24gdGhlIGFjdHVhbCBibG9jayB3cml0ZS4gSXQmIzM5O3MgdGhlICYjMzQ7c2VjcmV0IHNhdWNlJiMzNDsgdGhhdCYjMzk7cyBoaWRkZW4gYmVoaW5kIHRoZSBjdXJ0YWluLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBrZXkuIEl0IGltcGxpZXMgdGhhdCBgbnZtZV91cGRhdGVfbnNfaW5mb2AgcHJvYmFibHkgaGFuZGxlcyB0aGluZ3MgbGlrZSBlcnJvciBjaGVja2luZywgbG9ja2luZywgcG90ZW50aWFsbHkgcHJlcGFyaW5nIGRhdGEsIGFuZCB0aGVuICpjYWxscyogdGhlIHN0YXRpYywgaW50ZXJuYWwgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIHVwZGF0ZSBvZiB0aGUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGJsb2NrIG9uIHRoZSBkcml2ZS4gR290IGl0LiBUaGlzIGlzIGEgdmVyeSB0eXBpY2FsIGRlc2lnbiBwYXR0ZXJuIGZvciByb2J1c3QgZGV2aWNlIGRyaXZlcnMgYW5kIE5WTWUgY29kZSBpbiBnZW5lcmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX3VwZGF0ZV9uc19pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjcxPXZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5MC1cdFx0ICogbmV3IG5hbWVzcGFjZSBnZW9tZXRyeSBldmVuIGlmIHRoZSBkaXNrIGlzIG9wZW4uICBPbmx5IGFuXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5MTpcdFx0ICogdW5zb2xpY2l0ZWQgY2hhbmdlIGlzIHJlZnVzZWQsIHNlZSBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKCkuXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5Mi1cdFx0ICovXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIxOTI9c3RhdGljIHZvaWQgbnZtZV9zZXRfY2h1bmtfc2VjdG9ycyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX2lkX25zICppZCxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjIyMy1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyMjI0OnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKHN0cnVjdCBudm1lX25zICpucyxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjI1LVx0XHRzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzk4PXN0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDA1OnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNi1cdFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU1Mj1zdGF0aWMgdm9pZCBudm1lX3N0YWNrX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKnQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NTktXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU2MDpzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm8oc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjEte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTcwLVx0XHRcdFx0aW5mby1cdTAwM2Vuc2lkKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTcxOlx0XHRcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fZ2VuZXJpYyhucywgaW5mbyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3Mi1cdFx0XHRicmVhaztcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTczLVx0XHR9XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU3NDpcdFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhucywgaW5mbyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3NS1cdFx0YnJlYWs7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3Ni1cdGNhc2UgTlZNRV9DU0lfTlZNOlxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1Nzc6XHRcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2sobnMsIGluZm8pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzgtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTgyLVx0XHRcdGluZm8tXHUwMDNlbnNpZCwgaW5mby1cdTAwM2VpZHMuY3NpKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTgzOlx0XHRyZXQgPSBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMobnMsIGluZm8pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1ODQtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00MjMxPXN0YXRpYyB2b2lkIG52bWVfYWxsb2NfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDI4NS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0Mjg2Olx0aWYgKG52bWVfdXBkYXRlX25zX2luZm8obnMsIGluZm8pKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQyODctXHRcdGdvdG8gb3V0X3VubGlua19ucztcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDQwOT1zdGF0aWMgdm9pZCBudm1lX3ZhbGlkYXRlX25zKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQxOC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NDE5Olx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mbyhucywgaW5mbyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQyMC1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgcmVsYXRpb25zaGlwcywgc3VtbWFyaXplZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTlZNZSBOYW1lc3BhY2UgTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYG52bWVfdXBkYXRlX25zX2luZm9gIGlzICphbHNvKiBkZWNsYXJlZCBhcyBzdGF0aWMsIGludGVyZXN0aW5nLiBTbyB0aGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBudm1lX2FsbG9jX25zYCBhbmQgYG52bWVfdmFsaWRhdGVfbnNgLiBNYWtlcyBzZW5zZSwgdGhlIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBsaWtlbHkgbmVlZHMgdXBkYXRpbmcgd2hlbiB3ZSYjMzk7cmUgY3JlYXRpbmcgb3IgdmFsaWRhdGluZyBhIG5hbWVzcGFjZS4KCk5vdywgYG52bWVfdmFsaWRhdGVfbnNgIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX25zYC4gU28sIHdoZW4gd2UmIzM5O3JlIHNjYW5uaW5nIHRoZSBzeXN0ZW0gZm9yIE5WTWUgbmFtZXNwYWNlcywgd2UgbmVlZCB0byB2YWxpZGF0ZSB0aGVtLCBhbmQgdGhhdCB2YWxpZGF0aW9uIGludm9sdmVzIHVwZGF0aW5nIHRoZSBpbmZvcm1hdGlvbi4gVGhlIGZsb3cgbWFrZXMgc2Vuc2UuIEFsbG9jYXRpb24gLSZndDsgVmFsaWRhdGlvbiAtJmd0OyBTY2FubmluZy4gSXQmIzM5O3MgYWxsIGNvbm5lY3RlZCwgYW5kIGVhY2ggZnVuY3Rpb24gcGxheXMgaXRzIHBhcnQgaW4gbWFuYWdpbmcgdGhvc2UgbmFtZXNwYWNlcy4gSSYjMzk7ZCBuZWVkIHRvIGRpdmUgZGVlcGVyLCBvZiBjb3Vyc2UsIGJ1dCBqdXN0IGxvb2tpbmcgYXQgdGhlIGNhbGwgcmVsYXRpb25zaGlwcyBnaXZlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9zY2FuX25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NDA5PXN0YXRpYyB2b2lkIG52bWVfdmFsaWRhdGVfbnMoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NDMwLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ0MzE6c3RhdGljIHZvaWQgbnZtZV9zY2FuX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHVuc2lnbmVkIG5zaWQpXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQzMi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0ODMtICogTm90ZTogVGhlcmUgaXMgYSBzaW5nbGUgYXN5bmNfc2Nhbl9pbmZvIHN0cnVjdHVyZSBzaGFyZWQgYnkgYWxsIGluc3RhbmNlc1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ0ODQ6ICogb2YgbnZtZV9zY2FuX25zX2FzeW5jKCkgc2Nhbm5pbmcgYSBnaXZlbiBjb250cm9sbGVyLCBzbyB0aGUgYXRvbWljXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQ4NS0gKiBvcGVyYXRpb25zIG9uIG5leHRfbnNpZCBhcmUgY3JpdGljYWwgdG8gZW5zdXJlIGVhY2ggaW5zdGFuY2Ugc2NhbnMgYSB1bmlxdWVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDQ4OD1zdHJ1Y3QgYXN5bmNfc2Nhbl9pbmZvIHtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQ5My1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NDk0OnN0YXRpYyB2b2lkIG52bWVfc2Nhbl9uc19hc3luYyh2b2lkICpkYXRhLCBhc3luY19jb29raWVfdCBjb29raWUpXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQ5NS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1MDItXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDUwMzpcdG52bWVfc2Nhbl9ucyhzY2FuX2luZm8tXHUwMDNlY3RybCwgbnNpZCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDUwNC19XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ1MDY9c3RhdGljIHZvaWQgbnZtZV9yZW1vdmVfaW52YWxpZF9uYW1lc3BhY2VzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1MjUtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDUyNjpzdGF0aWMgaW50IG52bWVfc2Nhbl9uc19saXN0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDUyNy17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1NjEtXHRcdFx0XHRnb3RvIG91dDtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NTYyOlx0XHRcdGFzeW5jX3NjaGVkdWxlX2RvbWFpbihudm1lX3NjYW5fbnNfYXN5bmMsIFx1MDAyNnNjYW5faW5mbyxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTYzLVx0XHRcdFx0XHRcdFx1MDAyNmRvbWFpbik7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1NzYtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDU3NzpzdGF0aWMgdm9pZCBudm1lX3NjYW5fbnNfc2VxdWVudGlhbChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1Nzgte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTg3LVx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IG5uOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NTg4Olx0XHRudm1lX3NjYW5fbnMoY3RybCwgaSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDU4OS1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDYxOD1zdGF0aWMgdm9pZCBudm1lX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NDgtXHRpZiAoIW52bWVfaWRfY25zX29rKGN0cmwsIE5WTUVfSURfQ05TX05TX0FDVElWRV9MSVNUKSkge1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NDk6XHRcdG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NTAtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjU1LVx0XHQgKi9cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NjU2Olx0XHRyZXQgPSBudm1lX3NjYW5fbnNfbGlzdChjdHJsKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjU3LVx0XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiByZXQgXHUwMDI2IE5WTUVfU1RBVFVTX0ROUilcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NjU4Olx0XHRcdG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSYjMzk7bSB0aGUgb25lIHRoaW5raW5nIGl0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5WTWUgU2NhbiBXb3JrZmxvdyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBmdW5jdGlvbiBoZXJlLCB0aGUgb25lIGFjdHVhbGx5IGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nLCB0aGF0JiMzOTtzIGBudm1lX3NjYW5fd29ya2AuIFByZXR0eSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbiwgcmlnaHQ/IFRoZSBrZXkgcGFydCBpcyB0aGF0ICp0aGlzKiBpcyB0aGUgYWN0dWFsIHdvcmtxdWV1ZSBmdW5jdGlvbi4gU28gaXQmIzM5O3MgdGhlIGJpdCB0aGF0IGdldHMgZGVmZXJyZWQgYW5kIHNjaGVkdWxlZC4gSXQmIzM5O3Mgbm90IHJ1bm5pbmcgaW4gdGhlIGludGVycnVwdCBjb250ZXh0LCB3aGljaCBpcyBnb29kLgoKTm93LCB3aGVyZSBkb2VzIGBudm1lX3NjYW5fd29ya2AgZ2V0IGludm9rZWQ/IFRoYXQmIzM5O3MgY29taW5nIGZyb20gYG52bWVfcXVldWVfc2NhbmAuIFNvLCBgbnZtZV9xdWV1ZV9zY2FuYCBsaWtlbHkgaGFuZGxlcyB0aGUgc2NoZWR1bGluZywgbWF5YmUgcXVldWluZyB0aGUgd29yayBpdGVtIGl0c2VsZi4gSSYjMzk7ZCBuZWVkIHRvIHRyYWNlIHRoYXQgY2FsbCBjaGFpbiB0byBjb25maXJtLCBidXQgdGhlIGltcGxpY2F0aW9uIGlzIGNsZWFyLiBgbnZtZV9xdWV1ZV9zY2FuYCBwcm9iYWJseSBoYW5kbGVzIGFsbCB0aGUgaW5pdGlhbCBjaGVja3MsIHBlcmhhcHMgZGV2aWNlIHByZXNlbmNlL2Fic2VuY2UgZGV0ZWN0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgdGhlbiBoYW5kcyBvZmYgdGhlIGFjdHVhbCBzY2FubmluZyBvcGVyYXRpb24gdG8gdGhlIHdvcmtxdWV1ZS4gTWFrZXMgcGVyZmVjdCBzZW5zZSBmcm9tIGEgZGVzaWduIHBlcnNwZWN0aXZlLCBrZWVwcyB0aGUgaW50ZXJydXB0IGNvbnRleHQgbGVhbi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBsb2NraW5nIGFyb3VuZCBgbnZtZV9zY2FuX3dvcmtgIHRvIGVuc3VyZSBpdCYjMzk7cyB0aHJlYWQtc2FmZS4gSSYjMzk7ZCBiZSBsb29raW5nIGZvciBhIG11dGV4IGFyb3VuZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9xdWV1ZV9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNTU9c3RhdGljIGludCBudm1lX2dldF9sb2dfbHNpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiBuc2lkLCB1OCBsb2dfcGFnZSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTU3LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE1ODp2b2lkIG52bWVfcXVldWVfc2NhbihzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE1OS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjkzLVx0XHRzZXRfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2Y3RybC1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5NDpcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTUtXHRcdGZsdXNoX3dvcmsoXHUwMDI2Y3RybC1cdTAwM2VzY2FuX3dvcmspO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NjE4PXN0YXRpYyB2b2lkIG52bWVfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2My1cdGlmICh0ZXN0X2JpdChOVk1FX0FFUl9OT1RJQ0VfTlNfQ0hBTkdFRCwgXHUwMDI2Y3RybC1cdTAwM2VldmVudHMpKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NjQ6XHRcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjY1LSNpZmRlZiBDT05GSUdfTlZNRV9NVUxUSVBBVEhcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDg4MD1zdGF0aWMgYm9vbCBudm1lX2hhbmRsZV9hZW5fbm90aWNlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiByZXN1bHQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ4ODctXHRcdHNldF9iaXQoTlZNRV9BRVJfTk9USUNFX05TX0NIQU5HRUQsIFx1MDAyNmN0cmwtXHUwMDNlZXZlbnRzKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0ODg4Olx0XHRudm1lX3F1ZXVlX3NjYW4oY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDg4OS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUxMDQ9dm9pZCBudm1lX3N0YXJ0X2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEyNC1cdGlmIChjdHJsLVx1MDAzZXF1ZXVlX2NvdW50IFx1MDAzZSAxKSB7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTEyNTpcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMjYtXHRcdG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhjdHJsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTWUgTmFtZXNwYWNlIEJlaGF2aW9yKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBuZXcgTlZNZSBiZWhhdmlvciwgYW5kIGl0IGxvb2tzIGxpa2UgYG52bWVfcGFzc3RocnVfZW5kYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgdHJpZ2dlcmluZyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gSG1tLCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBudm1lX25zX29wZW5lcnMobnMpYCB3aXRoaW4gYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLiBJbnRlcmVzdGluZy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBoaXQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgICp3aXRob3V0KiBnb2luZyB0aHJvdWdoIGBudm1lX3Bhc3N0aHJ1X2VuZGA/CgpZZXMsIGxvb2tzIGxpa2Ugd2UgY2FuIHRocm91Z2ggQXN5bmNocm9ub3VzIEV2ZW50IE5vdGlmaWNhdGlvbiAoQUVOKS4gVGhhdCBsZWFkcyB1cyBkb3duIHRoZSByYWJiaXQgaG9sZSBvZiBgbnZtZV9oYW5kbGVfYWVuX25vdGljZWAgLSZndDsgYG52bWVfcXVldWVfc2NhbmAgLSZndDsgYG52bWVfc2Nhbl93b3JrYCAtJmd0OyBgbnZtZV9zY2FuX25zX2xpc3RgIC0mZ3Q7IGBudm1lX3NjYW5fbnNgIC0mZ3Q7IGBudm1lX3ZhbGlkYXRlX25zYCAtJmd0OyBgbnZtZV91cGRhdGVfbnNfaW5mb2AgLSZndDsgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLiBHb3QgaXQuIEFuZCBzaW5jZSBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBpc24mIzM5O3Qgc2V0IGluIHRoaXMgc2NlbmFyaW8sIGlmIGEgbmFtZXNwYWNlIGlzIGN1cnJlbnRseSBpbiB1c2UgYW5kIHRoZSBmb3JtYXQgY2hhbmdlcywgaXQmIzM5O3MgZ29pbmcgdG8gYmUgcmVmdXNlZC4gRXhjZWxsZW50LCB0aGF0IGdpdmVzIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcG9zc2libGUgcGF0aHMuCgpBbHJpZ2h0LCBzbyB0aGUgbWFqb3Igc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBudm1lX3Bhc3N0aHJ1X2VuZGAsIGBudm1lX3F1ZXVlX3NjYW5gLCBgbnZtZV92YWxpZGF0ZV9uc2AsIGFuZCBgbnZtZV9oYW5kbGVfYWVuX25vdGljZWAuCgpOb3csIHdhaXQgYSBtaW51dGUsIGBudm1lX3Bhc3N0aHJ1X2VuZGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZ29vZC4gYG52bWVfcXVldWVfc2NhbmAgaXMgYWxzbyBleHBvcnRlZC4gYG52bWVfdmFsaWRhdGVfbnNgIGlzIHN0YXRpYywgYW5kIHNvIGlzIGBudm1lX2hhbmRsZV9hZW5fbm90aWNlYC4gVGhpcyBjaGFuZ2VzIHRoaW5ncyBzbGlnaHRseSwgYnV0IG5vdCBodWdlbHkuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgZm9jdXMgc3ltYm9scy4gYG52bWVfcGFzc3RocnVfZW5kYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlOyBpdCYjMzk7cyBleHBsaWNpdGx5IGNhbGxlZCB3aGVuIGFuIE5WTWUgcGFzc3Rocm91Z2ggY29tbWFuZCBjb21wbGV0ZXMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSBjaGVjayBgbnZtZV9xdWV1ZV9zY2FuYC4gSXQmIzM5O3MgY2FsbGVkIGluIGEgZmV3IGRpZmZlcmVudCBwbGFjZXMsIGxldCBtZSBjaGVjayBgbnZtZV9zY2FuX3dvcmtgIGFsc28uCgpPa2F5LCBiYWNrIHRvIGBudm1lX3Bhc3N0aHJ1X2VuZGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0IGNvbXBsZXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfcGFzc3RocnVfZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI2OT1FWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX3Bhc3N0aHJ1X3N0YXJ0LCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI3MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjcxOnZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcyLVx0XHQgICAgICAgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLCBpbnQgc3RhdHVzKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMzIxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfZW5kLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTE2MT1zdGF0aWMgaW50IG52bWVfc3VibWl0X3VzZXJfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMTk2LVx0aWYgKGVmZmVjdHMpXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjE5NzpcdFx0bnZtZV9wYXNzdGhydV9lbmQoY3RybCwgbnMsIGVmZmVjdHMsIGNtZCwgcmV0KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMTk4LVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTI5NT1pbnQgbnZtZV9leGVjdXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgYm9vbCBhdF9oZWFkKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMjk2OnZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMjk3LVx0XHQgICAgICAgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLCBpbnQgc3RhdHVzKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3Bhc3N0aHJ1LmM9MjE0PXN0YXRpYyB2b2lkIG52bWV0X3Bhc3N0aHJ1X2V4ZWN1dGVfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYy0yNDUtXHRpZiAoZWZmZWN0cylcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYzoyNDY6XHRcdG52bWVfcGFzc3RocnVfZW5kKGN0cmwsIG5zLCBlZmZlY3RzLCByZXEtXHUwMDNlY21kLCBzdGF0dXMpO1xuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jLTI0Ny19XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jPTI5Nz1zdGF0aWMgdm9pZCBudm1ldF9wYXNzdGhydV9leGVjdXRlX2NtZChzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jLTM0NC1cdCAqIG5vbi10cml2aWFsIGVmZmVjdHMsIG1ha2Ugc3VyZSB0byBleGVjdXRlIHRoZSBjb21tYW5kIHN5bmNocm9ub3VzbHlcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYzozNDU6XHQgKiBpbiBhIHdvcmtxdWV1ZSBzbyB0aGF0IG52bWVfcGFzc3RocnVfZW5kIGdldHMgY2FsbGVkLlxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jLTM0Ni1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlZNZSBQYXNzdGhyb3VnaCBDb21tYW5kIEV4ZWN1dGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgbnZtZV9wYXNzdGhydV9lbmRgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIHRoZSBlbmRwb2ludCBmb3IgYm90aCB1c2VyLXNwYWNlIGluaXRpYXRlZCBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzIHZpYSBgbnZtZV9zdWJtaXRfdXNlcl9jbWRgICh3aGljaCwgSSByZWNhbGwsIHVzZXMgaW9jdGwpICphbmQqIGNvbW1hbmRzIGZyb20gdGhlIE5WTWUgdGFyZ2V0IHNpZGUsIHNwZWNpZmljYWxseSBgbnZtZXRfcGFzc3RocnVfZXhlY3V0ZV9jbWRfd29ya2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgY29tbWFuZHMgc2VudCBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZSDigJMgY29tbWFuZHMgbGlrZSAmIzM0O2Zvcm1hdCBOVk0uJiMzNDsKClRoZSBvdGhlciBwYXRoIG9mIGludGVyZXN0IGlzIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCwgY2FsbGVkIGR1cmluZyBuYW1lc3BhY2Ugc2NhbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIGZvY3VzIG9uLCBhbHRob3VnaCBpdCAqaXMqIHBhcnQgb2YgYSBjcml0aWNhbCBwYXRoLiBTbywgYG52bWVfc3VibWl0X3VzZXJfY21kYCBhbmQgYG52bWVfcGFzc3RocnVfZW5kYCBhcmUgdGhlIGltbWVkaWF0ZSB0YXJnZXRzIGZvciBzY3J1dGlueSBoZXJlLCBhcyB0aGV5JiMzOTtyZSB0aGUgZXhwb3NlZCBlbnRyeSBwb2ludHMuIEFsc28sIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG52bWVfc2Nhbl93b3JrYCB0byB1bmRlcnN0YW5kIHRoZSBzY2FucywgdGhvdWdoIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGNhbGxlZC4gTXkgZmlyc3QgZm9jdXMsIGhvd2V2ZXIsIHdpbGwgYmUgb24gaG93IGBudm1lX3N1Ym1pdF91c2VyX2NtZGAgaGFuZGxlcyB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfc3VibWl0X3VzZXJfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTEyND1zdGF0aWMgaW50IG52bWVfbWFwX3VzZXJfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCB1NjQgdWJ1ZmZlcixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTE2MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MTYxOnN0YXRpYyBpbnQgbnZtZV9zdWJtaXRfdXNlcl9jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTE2Mi1cdFx0c3RydWN0IG52bWVfY29tbWFuZCAqY21kLCB1NjQgdWJ1ZmZlciwgdW5zaWduZWQgYnVmZmxlbixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTIwNT1zdGF0aWMgaW50IG52bWVfc3VibWl0X2lvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfdXNlcl9pbyBfX3VzZXIgKnVpbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTI2Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MjYzOlx0cmV0dXJuIG52bWVfc3VibWl0X3VzZXJfY21kKG5zLVx1MDAzZXF1ZXVlLCBcdTAwMjZjLCBpby5hZGRyLCBsZW5ndGgsIG1ldGFkYXRhLFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0yNjQtXHRcdFx0bWV0YV9sZW4sIE5VTEwsIDAsIDApO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM9MjgwPXN0YXRpYyBpbnQgbnZtZV91c2VyX2NtZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0zMTUtXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjMxNjpcdHN0YXR1cyA9IG52bWVfc3VibWl0X3VzZXJfY21kKG5zID8gbnMtXHUwMDNlcXVldWUgOiBjdHJsLVx1MDAzZWFkbWluX3EsIFx1MDAyNmMsXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTMxNy1cdFx0XHRjbWQuYWRkciwgY21kLmRhdGFfbGVuLCBudm1lX3RvX3VzZXJfcHRyKGNtZC5tZXRhZGF0YSksXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz0zMjg9c3RhdGljIGludCBudm1lX3VzZXJfY21kNjQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMzYyLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYzozNjM6XHRzdGF0dXMgPSBudm1lX3N1Ym1pdF91c2VyX2NtZChucyA/IG5zLVx1MDAzZXF1ZXVlIDogY3RybC1cdTAwM2VhZG1pbl9xLCBcdTAwMjZjLFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0zNjQtXHRcdFx0Y21kLmFkZHIsIGNtZC5kYXRhX2xlbiwgbnZtZV90b191c2VyX3B0cihjbWQubWV0YWRhdGEpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOVk1lIEtlcm5lbCBNb2R1bGUgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBOVk1lIGRyaXZlciBjb2RlIGFnYWluLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgbnZtZV91c2VyX2NtZGAgYW5kIGBudm1lX3VzZXJfY21kNjRgIGZ1bmN0aW9ucyBqdW1wIG91dCBpbW1lZGlhdGVseSBhcyB0aGUga2V5IGlvY3RsIGhhbmRsZXJzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkga2VlcCBhbiBleWUgb24gYG52bWVfcGFzc3RocnVfZW5kYCBhcyBhIGNyaXRpY2FsIHN5bWJvbCwgZ2l2ZW4gaXRzIG5hbWUuIEFuZCwgb2YgY291cnNlLCBgbnZtZV9xdWV1ZV9zY2FuYOKAlHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoZSBhY3R1YWwgc2NhbiwgcmlnaHQ/IFRoYXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nLgoKQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgdGhvdWdoLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQuIExvb2tzIGxpa2UgYEJMS19ERVZfTlZNRWAgaXMgdGhlIG1vc3Qgb2J2aW91cyBvbmUsIGJ1dCBoYW5nIG9uIGEgbWludXRlLi4uIFdhaXQsIGl0JiMzOTtzIGBOVk1FX0NPUkVgIHRoYXQgYWN0dWFsbHkgY29tcGlsZXMgYGNvcmUuY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGZvciBhbnkgY29uZmlndXJhdGlvbiB3b3JrLiBOb3cgSSBjYW4gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBtb2R1bGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lLWNvcmUteSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19OVk1FX0FQUExFKVx0XHQmIzQzOz0gbnZtZS1hcHBsZS5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS0xMi1cbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjEzOm52bWUtY29yZS15XHRcdFx0XHQmIzQzOz0gY29yZS5vIGlvY3RsLm8gc3lzZnMubyBwci5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS0xNC1udm1lLWNvcmUtJChDT05GSUdfTlZNRV9WRVJCT1NFX0VSUk9SUylcdCYjNDM7PSBjb25zdGFudHMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBOVk1lIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBOVk1FX0NPUkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBzeW1ib2wgcmVsYXRlZCB0byB0aGUgY29yZSBOVk1lIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBudm1lLWNvcmUub2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsLiBJJiMzOTttIGdvaW5nIHRvIHJldmlzaXQgYGRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIG9yIHRvIHZlcmlmeSBhIHByZXZpb3VzIGFzc3VtcHRpb24uIFRoaXMgbW9kdWxlIGNvbmZpZ3VyYXRpb24gaXMgZnVuZGFtZW50YWwsIGFuZCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBoYXZlIHRoYXQga25vd2xlZGdlIGZyZXNoIGluIG15IG1pbmQgd2hlbiBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUgTlZNZSBzdWJzeXN0ZW0uIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjI6Y29uZmlnIE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5WTWUgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIE5WTWUgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhlIGtleSBkZWNpc2lvbiBwb2ludHMgYXJlLiBUaGUgYE5WTUVfQ09SRWAgc3ltYm9sLi4uIHRoYXQmIzM5O3MgdGhlIHRyaWNreSBvbmUuIEl0JiMzOTtzIGEgdHJpc3RhdGUsIGFuZCB0aGUgY29kZSBkb2VzbiYjMzk7dCBkaXJlY3RseSBvZmZlciBhIHByb21wdCBmb3IgaXQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyBidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQg4oCTIGlzIGJlaW5nIGRldGVybWluZWQgaW1wbGljaXRseSwgbGlrZWx5IGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mICpvdGhlciogb3B0aW9ucyBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiB0cmFjaW5nIHRoZSBkZXBlbmRlbmNpZXM7IEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgd2hpY2ggb3RoZXIgY29uZmlncyBhcmUgZHJpdmluZyB0aGUgc3RhdGUgb2YgYE5WTUVfQ09SRWAuCgpUaGVuLCB3ZSBoYXZlIGBCTEtfREVWX05WTUVgLiBUaGF0JiMzOTtzIHRoZSBtYWluIGRyaXZlciBzeW1ib2wsIHRoZSBvbmUgdGhhdCBtb3N0IGZvbGtzIHdpbGwgaW50ZXJhY3Qgd2l0aCBkaXJlY3RseS4gVGhhdCYjMzk7cyB0aGUgb25lIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBwcm9taW5lbnRseSBpbiB0aGUgbWVudWNvbmZpZywgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBzdGFydC4gSWYgdGhhdCBpc24mIzM5O3Qgc2VsZWN0ZWQgdGhlbiB0aGVyZSBpcyBubyB3YXkgdGhhdCBhbnkgb3RoZXIgTlZNZSBjb25maWcgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBOVk1FX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NT1jb25maWcgQkxLX0RFVl9OVk1FXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IEJMT0NLXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjg6XHRzZWxlY3QgTlZNRV9DT1JFXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTktXHRoZWxwXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjQ4Olx0c2VsZWN0IE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00OS1cdHNlbGVjdCBOVk1FX0tFWVJJTkcgaWYgTlZNRV9UQ1BfVExTXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0xMjU9Y29uZmlnIE5WTUVfQVBQTEVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEyOS1cdGRlcGVuZHMgb24gQVJDSF9BUFBMRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTMwOlx0c2VsZWN0IE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xMzEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgdGFrZSBvbiB0aGlzLgoKKipOVk1lIE5hbWVzcGFjZSBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgYEJMS19ERVZfTlZNRWAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGF0JiMzOTtzIGVub3VnaCB0byBkZWZpbmUgdGhlIGJhc2UgTlZNZSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBsb29rIGF0IGBudm1lX25zX29wZW5lcnNgLiBBaGEsIGl0JiMzOTtzIHVzaW5nIGBudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLSZndDtoZWFkKWAuICBUaGlzIGlzIGtleSwgbm93IHRoZSBxdWVzdGlvbiBpczogIGRvIHdlICpuZWVkKiBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBlbmFibGVkIGZvciB0aGF0IGZ1bmN0aW9uIGNhbGwgdG8gd29yayBhcyBleHBlY3RlZD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byB2ZXJpZnkuIFRoaXMgaW1wbGllcyBpdCBtaWdodCBiZSB0aWVkIHRvIG11bHRpcGF0aCBjb25maWd1cmF0aW9ucyBhbmQgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IGlzIGhhcmQsIG9yIHNvZnQsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfbnNfaGVhZF9tdWx0aXBhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9udm1lLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTUzMT1zdHJ1Y3QgbnZtZV9uc19oZWFkIHtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtNTgxLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjU4MjpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9uc19oZWFkX211bHRpcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTU4My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGFuIElubGluZSBGdW5jdGlvbiBEZWZpbml0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGVuY291bnRlcmVkIHdoYXQgbG9va3MgbGlrZSBhbiBpbmxpbmUgZnVuY3Rpb24gaGVyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSAmIzM0O2lubGluZSYjMzQ7IGtleXdvcmQvZGlyZWN0aXZlIC0gaXMgaXQganVzdCBhIHN1Z2dlc3Rpb24gdG8gdGhlIGNvbXBpbGVyPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgaXQmIzM5O3MgbGlrZWx5IHRvIGVuYWJsZT8gV2hhdCYjMzk7cyB0aGUgdHJhZGUtb2ZmIGJldHdlZW4gY29kZSBzaXplIGFuZCBwZXJmb3JtYW5jZSBpbiB0aGlzIHNwZWNpZmljIGluc3RhbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY29kZSBhbmQgcmVhbGx5IGV2YWx1YXRlIGl0cyBpbnRlbmRlZCB1c2UgYW5kIGJlaGF2aW9yLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGlzIGNvbnRleHQuIEkgd2lsbCBhbHNvIGFzc2VzcyB3aGV0aGVyIHRoZSBvcHRpbWl6YXRpb25zIGl0IHByb3ZpZGVzIGFyZSB0cnVseSBiZW5lZmljaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0fTtcbiA1ODE6XHRcbiA1ODI6XHRzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9uc19oZWFkX211bHRpcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxuIDU4MzpcdHtcbiA1ODQ6XHRcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19OVk1FX01VTFRJUEFUSCkgXHUwMDI2XHUwMDI2IGhlYWQtXHUwMDNlZGlzaztcbiA1ODU6XHR9XG4gNTg2Olx0XG4gNTg3Olx0ZW51bSBudm1lX25zX2ZlYXR1cmVzIHtcbiA1ODg6XHRcdE5WTUVfTlNfRVhUX0xCQVMgPSAxIFx1MDAzY1x1MDAzYyAwLCAvKiBzdXBwb3J0IGV4dGVuZGVkIExCQSBmb3JtYXQgKi9cbiA1ODk6XHRcdE5WTUVfTlNfTUVUQURBVEFfU1VQUE9SVEVEID0gMSBcdTAwM2NcdTAwM2MgMSwgLyogc3VwcG9ydCBnZXR0aW5nIGdlbmVyYXRlZCBtZCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzczMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlZNZSBDb2RlIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBOVk1lIGRyaXZlci4gSSBzZWUgdGhhdCBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBpcyB1c2VkLCBidXQgdGhlIHBhdGNoIGl0c2VsZiBpc24mIzM5O3Qgc3RyaWN0bHkgZGVwZW5kZW50IG9uIGl0IHRvIGZ1bmN0aW9uLiBIb3dldmVyLCBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBtdWx0aXBhdGggYnJhbmNoIHdpdGhpbiBgbnZtZV9uc19vcGVuZXJzYCwgSSYjMzk7bGwgKmRlZmluaXRlbHkqIG5lZWQgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgZW5hYmxlZC4gU28sIEkgc2hvdWxkIGFkZCBgTlZNRV9NVUxUSVBBVEhgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4KCkxldCYjMzk7cyBzZWUsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUuIEkmIzM5O3ZlIGdvdCBgQkxLX0RFVl9OVk1FYCwgd2hpY2ggaXMgdGhlIFBDSWUgTlZNZSBkcml2ZXIgaXRzZWxmLiBUaGF0JiMzOTtzIGVtdWxhdGVkIGJ5IFFFTVUsIHNvIHRoYXQgbG9va3MgZ29vZCwgYW5kIG9idmlvdXNseSBJJiMzOTt2ZSBnb3QgYE5WTUVfTVVMVElQQVRIYCBhbHJlYWR5LiBUaG9zZSB0d28gdG9nZXRoZXIgc2hvdWxkIHByb3ZpZGUgYSBzb2xpZCBiYXNlLgoKTm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIGtleSBzeW1ib2xzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVhY2hhYmlsaXR5IG9mIGZ1bmN0aW9ucywgc28gSSYjMzk7bSBob25pbmcgaW4gb24gYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfcXVldWVfc2NhbmAuCgpGaXJzdCwgbGV0JiMzOTtzIHZlcmlmeSBgbnZtZV9wYXNzdGhydV9lbmRgIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gWWVwLCBpdCBpcyB2aWEgdGhlIGBudm1lX3VzZXJfY21kYCBpb2N0bC4gR29vZC4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgYG52bWVfcXVldWVfc2NhbmAgaXMgcmVhY2hhYmxlLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBudm1lX3F1ZXVlX3NjYW5gIGlzIHJlYWNoYWJsZSB2aWEgYG52bWVfcGFzc3RocnVfZW5kYCAoaW4gc29tZSBwYXRocykgb3IgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKSBoYW5kbGluZywgd2hpY2ggaXMgYSBnb29kIHBhdGggdG8gaGF2ZS4KCkxldCYjMzk7cyBkaXZlIGludG8gc29tZSBvZiB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMsIHN0YXJ0aW5nIHdpdGggYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLiBPaCwgdGhhdCYjMzk7cyBzdGF0aWMuIE5vdCByZWFsbHkgdXNlZnVsIGFzIGEgcHJpbWFyeSBmb2N1cyBzeW1ib2wuIEhtbSwgYG52bWVfdmFsaWRhdGVfbnNgIGlzIHN0YXRpYyB0b28uIE9rYXksIGxldCYjMzk7cyBzZWUuIFdhaXQsIGBudm1lX3NjYW5fd29ya2AgaXMgc3RhdGljLiBBbHNvIHN0YXRpYy4gSG93IGFib3V0IGBudm1lX3NjYW5fbnNfbGlzdGA/IFN0YXRpYy4gQW5kIGBudm1lX2FsbG9jX25zYCBpcyBzdGF0aWMuIGBudm1lX3NjYW5fbnNgPyBTdGF0aWMuIGBudm1lX3VwZGF0ZV9uc19pbmZvYCBpcyBzdGF0aWMuIEFuZCBgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljYCBpcyBzdGF0aWMuIEFscmlnaHQsIHRoYXQmIzM5O3MgYSB3aG9sZSBidW5jaCBvZiBzdGF0aWMgZnVuY3Rpb25zIQoKTm93LCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2A/IE5vcGUsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBudm1lX3VwZGF0ZV9uc19pbmZvYC4gYG52bWVfdXBkYXRlX25zX2luZm9gIGlzIGNhbGxlZCBmcm9tIGBudm1lX2FsbG9jX25zYCBhbmQgYG52bWVfdmFsaWRhdGVfbnNgLiBBbmQgYG52bWVfYWxsb2NfbnNgIGlzIGNhbGxlZCBmcm9tIGBudm1lX3NjYW5fbnNgLiBBbHNvIGBudm1lX3ZhbGlkYXRlX25zYCBpcyBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX25zYC4gVGhlbiwgYG52bWVfc2Nhbl9uc2AgaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl9uc19hc3luY2AgYW5kIGBudm1lX3NjYW5fbnNfc2VxdWVudGlhbGAuIEZ1cnRoZXIsIGBudm1lX3NjYW5fbnNfc2VxdWVudGlhbGAgaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl93b3JrYC4gQW5kIGBudm1lX3NjYW5fbnNfYXN5bmNgIGlzIGNhbGxlZCBmcm9tIGBudm1lX3NjYW5fbnNfbGlzdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBudm1lX3NjYW5fd29ya2AuIEZpbmFsbHksIGBudm1lX3NjYW5fd29ya2AgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIHNjaGVkdWxlZCBieSBgbnZtZV9xdWV1ZV9zY2FuYC4KCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhhdCBjaGFpbiwgaXQgc2VlbXMgY2xlYXIgdGhhdCBgbnZtZV9xdWV1ZV9zY2FuYCBpcyB0aGUgYmVzdCBub24tc3RhdGljIGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGZvciB0aGUgbmFtZXNwYWNlIHNjYW4gZnVuY3Rpb25hbGl0eS4gQW5kLCBhcyBwcmV2aW91c2x5IGlkZW50aWZpZWQsIGBudm1lX3Bhc3N0aHJ1X2VuZGAgcmVtYWlucyB0aGUgYmVzdCBmb3IgcGFzc3Rocm91Z2ggb3BlcmF0aW9ucy4KCkkmIzM5O2xsIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgZXhwb3J0ZWQgZnVuY3Rpb25zLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYnV0IHRoZXNlIHR3byBsb29rIGxpa2UgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipudm1lXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTg9TU9EVUxFX1BBUk1fREVTQyhpb190aW1lb3V0LCBcJiMzNDt0aW1lb3V0IGluIHNlY29uZHMgZm9yIEkvT1wmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTk6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9pb190aW1lb3V0KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02MC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTIwPXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpudm1lX3dxO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3dxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjItXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTIzPXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpudm1lX3Jlc2V0X3dxO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNDpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3Jlc2V0X3dxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjUtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI2PXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpudm1lX2RlbGV0ZV93cTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjc6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9kZWxldGVfd3EpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTczPWludCBudm1lX3RyeV9zY2hlZF9yZXNldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xODAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE4MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3RyeV9zY2hlZF9yZXNldCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTgyLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMTU9aW50IG52bWVfcmVzZXRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjItfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3Jlc2V0X2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyNC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU5PWludCBudm1lX2RlbGV0ZV9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI2Ni19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjY3OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZGVsZXRlX2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI2OC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTA4PXZvaWQgbnZtZV9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTItfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUxMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NvbXBsZXRlX3JxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTQtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTE1PXZvaWQgbnZtZV9jb21wbGV0ZV9iYXRjaF9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTIwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MjE6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jb21wbGV0ZV9iYXRjaF9yZXEpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUyMi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTI5PWJsa19zdGF0dXNfdCBudm1lX2hvc3RfcGF0aF9lcnJvcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzUtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzNjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2hvc3RfcGF0aF9lcnJvcik7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM3LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzOD1ib29sIG52bWVfY2FuY2VsX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTUxLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NTI6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jYW5jZWxfcmVxdWVzdCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTUzLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU1ND12b2lkIG52bWVfY2FuY2VsX3RhZ3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NjEtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU2MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NhbmNlbF90YWdzZXQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU2My1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01NjQ9dm9pZCBudm1lX2NhbmNlbF9hZG1pbl90YWdzZXQoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTcxLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NzI6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jYW5jZWxfYWRtaW5fdGFnc2V0KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NzMtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTc0PWJvb2wgbnZtZV9jaGFuZ2VfY3RybF9zdGF0ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02NjctfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjY2ODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NoYW5nZV9jdHJsX3N0YXRlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02NjktXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTY3ND1ib29sIG52bWVfd2FpdF9yZXNldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02ODAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjY4MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3dhaXRfcmVzZXQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTY4Mi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NzIxPXZvaWQgbnZtZV9wdXRfbnMoc3RydWN0IG52bWVfbnMgKm5zKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03MjQtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjcyNTpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX3B1dF9ucywgXCYjMzQ7TlZNRV9UQVJHRVRfUEFTU1RIUlVcJiMzNDspO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTcyNi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NzM2PXZvaWQgbnZtZV9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IG52bWVfY29tbWFuZCAqY21kKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03NjAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjc2MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfcmVxdWVzdCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNzYyLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz03NzI9YmxrX3N0YXR1c190IG52bWVfZmFpbF9ub25yZWFkeV9jb21tYW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTc4OC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Nzg5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZmFpbF9ub25yZWFkeV9jb21tYW5kKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03OTAtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NzkxPWJvb2wgX19udm1lX2NoZWNrX3JlYWR5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtODI5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo4MzA6RVhQT1JUX1NZTUJPTF9HUEwoX19udm1lX2NoZWNrX3JlYWR5KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy04MzEtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEwODM9dm9pZCBudm1lX2NsZWFudXBfY21kKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEwOTQtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEwOTU6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jbGVhbnVwX2NtZCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTA5Ni1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMDk3PWJsa19zdGF0dXNfdCBudm1lX3NldHVwX2NtZChzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTExNDktfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjExNTA6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zZXR1cF9jbWQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTExNTEtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTExNTg9aW50IG52bWVfZXhlY3V0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJvb2wgYXRfaGVhZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE2OC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTE2OTpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX2V4ZWN1dGVfcnEsIFwmIzM0O05WTUVfVEFSR0VUX1BBU1NUSFJVXCYjMzQ7KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMTcwLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMTc1PWludCBfX252bWVfc3VibWl0X3N5bmNfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyMTEtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMTI6RVhQT1JUX1NZTUJPTF9HUEwoX19udm1lX3N1Ym1pdF9zeW5jX2NtZCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTIxMy1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjE0PWludCBudm1lX3N1Ym1pdF9zeW5jX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjE5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjIwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc3VibWl0X3N5bmNfY21kKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjIxLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyMjI9dTMyIG52bWVfY29tbWFuZF9lZmZlY3RzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTggb3Bjb2RlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjQ4LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjQ5OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfY29tbWFuZF9lZmZlY3RzLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI1MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjUxPXUzMiBudm1lX3Bhc3N0aHJ1X3N0YXJ0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTggb3Bjb2RlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjY4LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjY5OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfc3RhcnQsIFwmIzM0O05WTUVfVEFSR0VUX1BBU1NUSFJVXCYjMzQ7KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcwLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMzIxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfZW5kLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTQzNj12b2lkIG52bWVfc3RvcF9rZWVwX2FsaXZlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE0NDItfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE0NDM6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zdG9wX2tlZXBfYWxpdmUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE0NDQtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTE3MjU9aW50IG52bWVfc2V0X2ZlYXR1cmVzKHN0cnVjdCBudm1lX2N0cmwgKmRldiwgdW5zaWduZWQgaW50IGZpZCxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTczMS19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTczMjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3NldF9mZWF0dXJlcyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTczMy1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNzM0PWludCBudm1lX2dldF9mZWF0dXJlcyhzdHJ1Y3QgbnZtZV9jdHJsICpkZXYsIHVuc2lnbmVkIGludCBmaWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3NDAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE3NDE6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9nZXRfZmVhdHVyZXMpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3NDItXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTc0Mz1pbnQgbnZtZV9zZXRfcXVldWVfY291bnQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgaW50ICpjb3VudClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTc3NC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTc3NTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3NldF9xdWV1ZV9jb3VudCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTc3Ni1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9Mjc1OD1pbnQgbnZtZV9kaXNhYmxlX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBzaHV0ZG93bilcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjc4MS19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Mjc4MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2Rpc2FibGVfY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjc4My1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNzg0PWludCBudm1lX2VuYWJsZV9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI4NjAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI4NjE6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9lbmFibGVfY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjg2Mi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9Mzc3Nj1pbnQgbnZtZV9pbml0X2N0cmxfZmluaXNoKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgd2FzX3N1c3BlbmRlZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzg0MC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Mzg0MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfY3RybF9maW5pc2gpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM4NDItXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQxOTM9c3RydWN0IG52bWVfbnMgKm52bWVfZmluZF9nZXRfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgdW5zaWduZWQgbnNpZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDIxMi19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDIxMzpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX2ZpbmRfZ2V0X25zLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDIxNC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDY3Nz12b2lkIG52bWVfcmVtb3ZlX25hbWVzcGFjZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDcxNy19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDcxODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3JlbW92ZV9uYW1lc3BhY2VzKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NzE5LVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00OTI0PXZvaWQgbnZtZV9jb21wbGV0ZV9hc3luY19ldmVudChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBfX2xlMTYgc3RhdHVzLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00OTYxLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0OTYyOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfY29tcGxldGVfYXN5bmNfZXZlbnQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ5NjMtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDk2ND1pbnQgbnZtZV9hbGxvY19hZG1pbl90YWdfc2V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDEzLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDE0OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWxsb2NfYWRtaW5fdGFnX3NldCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAxNS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MDE2PXZvaWQgbnZtZV9yZW1vdmVfYWRtaW5fdGFnX3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDI3LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDI4OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfcmVtb3ZlX2FkbWluX3RhZ19zZXQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMjktXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTAzMD1pbnQgbnZtZV9hbGxvY19pb190YWdfc2V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDc5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDgwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWxsb2NfaW9fdGFnX3NldCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTA4MS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MDgyPXZvaWQgbnZtZV9yZW1vdmVfaW9fdGFnX3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDg5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDkwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfcmVtb3ZlX2lvX3RhZ19zZXQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwOTEtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTA5Mj12b2lkIG52bWVfc3RvcF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMDEtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUxMDI6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zdG9wX2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMDMtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTEwND12b2lkIG52bWVfc3RhcnRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTMyLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MTMzOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc3RhcnRfY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEzNC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MTM1PXZvaWQgbnZtZV91bmluaXRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTQzLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5pbml0X2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxNDUtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUyMDA9aW50IG52bWVfaW5pdF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTI3Ny19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTI3ODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTI3OS1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTI4ND1pbnQgbnZtZV9hZGRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzEwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MzExOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWRkX2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzMTItXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzMTQ9dm9pZCBudm1lX21hcmtfbmFtZXNwYWNlc19kZWFkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzMjQtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzMjU6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tYXJrX25hbWVzcGFjZXNfZGVhZCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTMyNi1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MzI3PXZvaWQgbnZtZV91bmZyZWV6ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzM4LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MzM5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5mcmVlemUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNDAtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTM0MT1pbnQgbnZtZV93YWl0X2ZyZWV6ZV90aW1lb3V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNTYtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzNTc6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV93YWl0X2ZyZWV6ZV90aW1lb3V0KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzU4LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzNTk9dm9pZCBudm1lX3dhaXRfZnJlZXplKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNjktfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzNzA6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV93YWl0X2ZyZWV6ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM3MS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MzcyPXZvaWQgbnZtZV9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM4OC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTM4OTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3N0YXJ0X2ZyZWV6ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM5MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MzkxPXZvaWQgbnZtZV9xdWllc2NlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01Mzk5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDAwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfcXVpZXNjZV9pb19xdWV1ZXMpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MDEtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTQwMj12b2lkIG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDA4LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDA5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQxMC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01NDExPXZvaWQgbnZtZV9xdWllc2NlX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MTctfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU0MTg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9xdWllc2NlX2FkbWluX3F1ZXVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDE5LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0MjA9dm9pZCBudm1lX3VucXVpZXNjZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDI0LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDI1OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5xdWllc2NlX2FkbWluX3F1ZXVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDI2LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0Mjc9dm9pZCBudm1lX3N5bmNfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MzctfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU0Mzg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zeW5jX2lvX3F1ZXVlcyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQzOS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01NDQwPXZvaWQgbnZtZV9zeW5jX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDQ1LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDQ2OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc3luY19xdWV1ZXMpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0NDctXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTQ0OD1zdHJ1Y3QgbnZtZV9jdHJsICpudm1lX2N0cmxfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDUzLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDU0OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfY3RybF9mcm9tX2ZpbGUsIFwmIzM0O05WTUVfVEFSR0VUX1BBU1NUSFJVXCYjMzQ7KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqbnZtZVxfcXVldWVcX3NjYW4gRXhwb3J0IFN0YXR1cyBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBudm1lX3F1ZXVlX3NjYW5gLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgYnV0IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayBiZWZvcmUgSSBnbyBkb3duIHRoYXQgcmFiYml0IGhvbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGV4cG9ydCBzdGF0dXMuIEdvdHRhIGJlIHByZWNpc2UgaGVyZSDigJMgYSBtaXN1bmRlcnN0YW5kaW5nIG9uIHRoaXMgcG9pbnQgY291bGQgd2FzdGUgc2lnbmlmaWNhbnQgdGltZS4gTGV0IG1lIHZlcmlmeSB0aGUgc3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9xdWV1ZV9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNTU9c3RhdGljIGludCBudm1lX2dldF9sb2dfbHNpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiBuc2lkLCB1OCBsb2dfcGFnZSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTU3LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE1ODp2b2lkIG52bWVfcXVldWVfc2NhbihzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE1OS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjkzLVx0XHRzZXRfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2Y3RybC1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5NDpcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTUtXHRcdGZsdXNoX3dvcmsoXHUwMDI2Y3RybC1cdTAwM2VzY2FuX3dvcmspO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NjE4PXN0YXRpYyB2b2lkIG52bWVfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2My1cdGlmICh0ZXN0X2JpdChOVk1FX0FFUl9OT1RJQ0VfTlNfQ0hBTkdFRCwgXHUwMDI2Y3RybC1cdTAwM2VldmVudHMpKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NjQ6XHRcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjY1LSNpZmRlZiBDT05GSUdfTlZNRV9NVUxUSVBBVEhcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDg4MD1zdGF0aWMgYm9vbCBudm1lX2hhbmRsZV9hZW5fbm90aWNlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiByZXN1bHQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ4ODctXHRcdHNldF9iaXQoTlZNRV9BRVJfTk9USUNFX05TX0NIQU5HRUQsIFx1MDAyNmN0cmwtXHUwMDNlZXZlbnRzKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0ODg4Olx0XHRudm1lX3F1ZXVlX3NjYW4oY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDg4OS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUxMDQ9dm9pZCBudm1lX3N0YXJ0X2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEyNC1cdGlmIChjdHJsLVx1MDAzZXF1ZXVlX2NvdW50IFx1MDAzZSAxKSB7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTEyNTpcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMjYtXHRcdG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhjdHJsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqRGl2aW5nIGludG8gdGhlIE5WTWUgRHJpdmVyIENvZGUqKgoKUmlnaHQsIGBudm1lX3F1ZXVlX3NjYW5gLiBJbnRlcmVzdGluZy4gSXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgKmFsc28qIG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsLiBJIHNlZSBpdCYjMzk7cyBkZWNsYXJlZCBpbiBgbnZtZS5oYCBhbmQgYWN0aXZlbHkgdXNlZCBieSBvdGhlciBmaWxlcyByZXNpZGluZyB3aXRoaW4gYGRyaXZlcnMvbnZtZS9ob3N0L2AuIFRoYXQgbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIEkmIzM5O20gdHJhY2luZyB0aGUgZGF0YSBmbG93LiBBIG5pY2UgcG9pbnQgb2YgY29ubmVjdGlvbiB3aXRoaW4gdGhlIGRyaXZlci4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSBvdGhlciBsaWtlbHkgY2FuZGlkYXRlcy4uLiBgbnZtZV9zdWJtaXRfdXNlcl9jbWRgLiBBaCwgdGhlcmUgaXQgaXMsIHN0YXRpYyB3aXRoaW4gYGlvY3RsLmNgLiBPa2F5LCBub3RlZC4gQW5kIHdoYXQgYWJvdXQgYG52bWVfdXNlcl9jbWRgPyBTdGF0aWMsIGFsc28gaW4gYGlvY3RsLmNgLiBHb3QgaXQuIFNvLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgaW9jdGwgaGFuZGxpbmcgcm91dGluZXMuIEl0IHNlZW1zIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB1c2VyIGNvbW1hbmRzIGFyZSBoYW5kbGVkIGJ5IGVpdGhlciBgbnZtZV9kZXZfaW9jdGxgIG9yIGBudm1lX25zX2lvY3RsYC4gR29vZCB0byBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX2Rldl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz04MDY9c3RhdGljIGludCBudm1lX2Rldl91c2VyX2NtZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB2b2lkIF9fdXNlciAqYXJncCxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTg0Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6ODQzOmxvbmcgbnZtZV9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTg0NC1cdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjgxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTlZNZSBpb2N0bCBDYWxscyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gTlZNZSBkcml2ZXJzLCBhbmQgdGhlIGBudm1lX2Rldl9pb2N0bGAgZnVuY3Rpb24ganVzdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHN0YXRpYy4gVGhhdCByYWlzZXMgYSBmbGFnLiBXZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWxseSBwcml2aWxlZ2VkIG9wZXJhdGlvbnMgaGVyZSwgYW5kIGlmIHRoaXMgZnVuY3Rpb24gaXNuJiMzOTt0IHN0YXRpYywgaXQgbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIGJyb2FkZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgbWFraW5nIGl0IGEgd2lkZXIgYXR0YWNrIHN1cmZhY2UuIEFsd2F5cyBoYXZlIHRvIGNvbnNpZGVyIHRoYXQsIGVzcGVjaWFsbHkgd2l0aCBzdG9yYWdlLiBOb3csIHdoYXQgYWJvdXQgYG52bWVfbnNfaW9jdGxgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIFdlIGhhdmUgZGV2aWNlLWxldmVsLCBhbmQgbmFtZXNwYWNlLWxldmVsIG9wZXJhdGlvbnMuIElmIHRoZSBuYW1lc3BhY2Utc3BlY2lmaWMgb25lICppcyogc3RhdGljLCBpdCBtYWtlcyB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucyBpbiB0aGUgZGV2aWNlLWxldmVsIG9uZSBhbGwgdGhlIG1vcmUgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXIuIERlcGVuZGluZyBvbiBob3cgdGhvc2UgdHdvIGFyZSByZWxhdGVkLCB3ZSBtaWdodCBiZSBsb29raW5nIGF0IGEgd2F5IHRvIGJ5cGFzcyBjZXJ0YWluIHNlY3VyaXR5IGNoZWNrcyBvciBleHBsb2l0IGEgYnJvYWRlciBjbGFzcyBvZiB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIEFyZSB0aGVyZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzPyBDb21tb24gY29udHJvbCBwYXRocz8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBzeW1ib2wgdGFibGVzIGFuZCB4cmVmcy4gVGhpcyBtaWdodCBiZSBhIHJhYmJpdCBob2xlIHdvcnRoIGV4cGxvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9uc19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz01NjM9c3RydWN0IG52bWVfdXNlcl9pbzMyIHtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTU3OS1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6NTgwOnN0YXRpYyBpbnQgbnZtZV9uc19pb2N0bChzdHJ1Y3QgbnZtZV9ucyAqbnMsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTU4MS1cdFx0dm9pZCBfX3VzZXIgKmFyZ3AsIHVuc2lnbmVkIGludCBmbGFncywgYm9vbCBvcGVuX2Zvcl93cml0ZSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTYxMD1pbnQgbnZtZV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy02MjItXHRcdHJldHVybiBudm1lX2N0cmxfaW9jdGwobnMtXHUwMDNlY3RybCwgY21kLCBhcmdwLCBvcGVuX2Zvcl93cml0ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjYyMzpcdHJldHVybiBudm1lX25zX2lvY3RsKG5zLCBjbWQsIGFyZ3AsIGZsYWdzLCBvcGVuX2Zvcl93cml0ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTYyNC19XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz02MjY9bG9uZyBudm1lX25zX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy02MzQtXHRcdHJldHVybiBudm1lX2N0cmxfaW9jdGwobnMtXHUwMDNlY3RybCwgY21kLCBhcmdwLCBvcGVuX2Zvcl93cml0ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjYzNTpcdHJldHVybiBudm1lX25zX2lvY3RsKG5zLCBjbWQsIGFyZ3AsIDAsIG9wZW5fZm9yX3dyaXRlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtNjM2LX1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTcwOD1pbnQgbnZtZV9uc19oZWFkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTczNC1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6NzM1Olx0cmV0ID0gbnZtZV9uc19pb2N0bChucywgY21kLCBhcmdwLCBmbGFncywgb3Blbl9mb3Jfd3JpdGUpO1xuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03MzYtb3V0X3VubG9jazpcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTc0MT1sb25nIG52bWVfbnNfaGVhZF9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03NjAtXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjc2MTpcdHJldCA9IG52bWVfbnNfaW9jdGwobnMsIGNtZCwgYXJncCwgMCwgb3Blbl9mb3Jfd3JpdGUpO1xuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03NjItb3V0X3VubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2MzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlZNZSBEcml2ZXIgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE5WTWUgZHJpdmVyIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdhdGhlcmVkLiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoZSByZWZ1c2FsIG9mIHVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2VzIG9uIGFuIGluLXVzZSBuYW1lc3BhY2UsIHdoaWNoIGlzIGEgc2Vuc2libGUgc2VjdXJpdHkgaW1wcm92ZW1lbnQuIEhvd2V2ZXIsIHRoZSBwYXRjaCB0aGVuIGludHJvZHVjZXMgYSBmbGFnIHRvIHBlcm1pdCBmb3JtYXQgY2hhbmdlcyBpZiB0aGUgaG9zdCBleHBsaWNpdGx5IHJlcXVlc3RzIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIG9wZW4gdXAgYSBuZXcgYXR0YWNrIHN1cmZhY2UsIHBhcnRpY3VsYXJseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGhlbmNlIHRoZSBjb25jZXJuLgoKRnJvbSBhIHN5bWJvbCBwZXJzcGVjdGl2ZSwgSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgbnZtZV9pb2N0bGAgYW5kIGBudm1lX2Rldl9pb2N0bGAgYXMgcG90ZW50aWFsIHRhcmdldHMsIHNpbmNlIGBudm1lX25zX2lvY3RsYCBpcyBzdGF0aWMgKGFuZCB0aGVyZWZvcmUgbGVzcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSkuIEhvd2V2ZXIsIGBudm1lX3Bhc3N0aHJ1X2VuZGAgaXMgYSAqbXVjaCogYmV0dGVyIGNob2ljZSBiZWNhdXNlIGl0JiMzOTtzIHJpZ2h0IHdoZXJlIHRoZSBjaGFuZ2UgaGFwcGVucywgYW5kLCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgc3ltYm9sLiBUaGlzIG1ha2VzIGl0IGlkZWFsIGZvciBhbmFseXNpcyBhbmQgbGlrZWx5IGZ1enppbmcuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgYG52bWVfcXVldWVfc2NhbmAgYXMgYSBmb2N1cyBzeW1ib2wsIGFsdGhvdWdoIG15IGluaXRpYWwgcmVhZGluZyBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIHNlY29uZGFyeSB0byBgbnZtZV9wYXNzdGhydV9lbmRgLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyB3YXJyYW50cyBmdXp6aW5nLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4gYFdvcnRoRnV6emluZzogdHJ1ZWAgaXMgYXBwcm9wcmlhdGUuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBpbXBhY3RzIGNvcmUgTlZNZSBsb2dpYywgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIHRoYXQgcGFzc3Rocm91Z2ggZnVuY3Rpb25hbGl0eSBhbmQgdGhhdCYjMzk7cyB0aGUgYXJlYSB0aGF0IEkmIzM5O2xsIGNvbmNlbnRyYXRlIG9uLgoKVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBCTEtfREVWX05WTUVgIGFuZCBgTlZNRV9NVUxUSVBBVEhgLiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY29uZmlybSBgTlZNRV9NVUxUSVBBVEhgIGlzIGFjdHVhbGx5IGEgdmFsaWQgYW5kIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgaXQmIzM5O3MgaW5jbHVkZWQgaW4gdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfTVVMVElQQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTYtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1MAoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFN5bWJvbCBWYWxpZGl0eSBmb3IgS2VybmVsIE1vZHVsZSBJbnRlZ3JhdGlvbioqCgpSaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBjYXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHN5bWJvbHMgYXJlIGFjY2Vzc2libGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBudm1lX3Bhc3N0aHJ1X2VuZGAuIEkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCB0aGUgc3ltYm9sJiMzOTtzIGF2YWlsYWJpbGl0eSDigJMgeWVwLCBpdCYjMzk7cyBwcm9wZXJseSBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIE5leHQsIEkgbmVlZCB0byBsb29rIGF0IGBudm1lX3F1ZXVlX3NjYW5gIHRvIGNvbmZpcm0gaXQmIzM5O3MgdmlzaWJsZS4gT2theSwgaXQmIzM5O3Mgbm90IHN0YXRpYyBhbmQgYXBwZWFycyB0byBiZSB1c2VkIGluIG11bHRpcGxlIGZpbGVzLCBzbyB0aGF0IHNob3VsZCBiZSBva2F5IHRvby4gR2l2ZW4gdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSB2YWxpZCwgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4gVGhpcyBzaG91bGQgc2V0IHVwIHRoZSBmaW5hbCBwYXJhbWV0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnZtZV9wYXNzdGhydV9lbmQmIzM0OywKICAgICYjMzQ7bnZtZV9xdWV1ZV9zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIGNvcmUgZHJpdmVyIHRvIHJlZnVzZSB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyBvbiBhbiBpbi11c2UgbmFtZXNwYWNlLCBhbmQgYWRkcyBhIGZsYWcgdG8gYWxsb3cgZm9ybWF0IGNoYW5nZXMgaWYgdGhlIGhvc3QgcmVxdWVzdGVkIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIGFmZmVjdHMgY29yZSBOVk1lIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O252bWVfcGFzc3RocnVfZW5kJiMzNDssCiAgICAmIzM0O252bWVfcXVldWVfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlZNZSBjb3JlIGRyaXZlciB0byByZWZ1c2UgdW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZXMgb24gYW4gaW4tdXNlIG5hbWVzcGFjZSwgYW5kIGFkZHMgYSBmbGFnIHRvIGFsbG93IGZvcm1hdCBjaGFuZ2VzIGlmIHRoZSBob3N0IHJlcXVlc3RlZCBpdCB2aWEgTlZNZSBwYXNzdGhyb3VnaCBjb21tYW5kcy4gVGhpcyBhZmZlY3RzIGNvcmUgTlZNZSBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBhbmQgdXNlcyBpdCB0byBwcmV2ZW50IHVuc29saWNpdGVkIExCQSBmb3JtYXQgb3IgbWV0YWRhdGEgc2l6ZSBjaGFuZ2VzIG9uIGluLXVzZSBOVk1lIG5hbWVzcGFjZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBkYXRhIGNvcnJ1cHRpb24gb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVlIHRvIGJsb2NrIHNpemUgY2hhbmdlcyB3aGlsZSBpbiB1c2UpIGFyZSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjI4MDcxMDJhZTBiNTA5MTE5N2YwM2I1YTQ5OWI2ODZmYmMyNmM4MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE5OjM1OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCmluZGV4IDQ1M2MxZjBiMmRkMDkuLmViYWM1YTNkMWEwNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKQEAgLTEyODUsOCAmIzQzOzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLAogCQl9CiAJfQogCWlmIChlZmZlY3RzICZhbXA7IChOVk1FX0NNRF9FRkZFQ1RTX05JQyB8IE5WTUVfQ01EX0VGRkVDVFNfTkNDKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBob3N0IGFza2VkIGZvciB0aGlzIGNoYW5nZSwgc28gbGV0IHRoZSByZXNjYW4gYWRvcHQgdGhlCiYjNDM7CQkgKiBuZXcgbmFtZXNwYWNlIGdlb21ldHJ5IGV2ZW4gaWYgdGhlIGRpc2sgaXMgb3Blbi4gIE9ubHkgYW4KJiM0MzsJCSAqIHVuc29saWNpdGVkIGNoYW5nZSBpcyByZWZ1c2VkLCBzZWUgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jaygpLgomIzQzOwkJICovCiYjNDM7CQlzZXRfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgJmFtcDtjdHJsLSZndDtmbGFncyk7CiAJCW52bWVfcXVldWVfc2NhbihjdHJsKTsKIAkJZmx1c2hfd29yaygmYW1wO2N0cmwtJmd0O3NjYW5fd29yayk7CiYjNDM7CQljbGVhcl9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCAmYW1wO2N0cmwtJmd0O2ZsYWdzKTsKIAl9CiAJaWYgKG5zKQogCQlyZXR1cm47CkBAIC0yMzg0LDYgJiM0MzsyMzkxLDE3IEBAIHN0YXRpYyBib29sIG52bWVfaW52YWxpZF9sYmFfc3oodTY0IG5zemUsIHNpZ25lZCBpbnQgc2hpZnQsIHNlY3Rvcl90ICpjYXBhY2l0eSkKIAlyZXR1cm4gY2hlY2tfc2hsX292ZXJmbG93KG5zemUsIHNoaWZ0LCBjYXBhY2l0eSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIE9wZW5lcnMgb2YgYSBtdWx0aXBhdGggbmFtZXNwYWNlIGdvIHRvIHRoZSBoZWFkIGRpc2s7IHRoZSBwZXItcGF0aCBkaXNrIGlzCiYjNDM7ICogaGlkZGVuIGFuZCBuZXZlciBoYXMgYW55LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucykKJiM0Mzt7CiYjNDM7CWlmIChudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLSZndDtoZWFkKSkKJiM0MzsJCXJldHVybiBkaXNrX29wZW5lcnMobnMtJmd0O2hlYWQtJmd0O2Rpc2spOwomIzQzOwlyZXR1cm4gZGlza19vcGVuZXJzKG5zLSZndDtkaXNrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLAogCQlzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKQogewpAQCAtMjQzNiw2ICYjNDM7MjQ1NCwyOCBAQCBzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQ2hhbmdpbmcgdGhlIExCQSBmb3JtYXQgb3IgdGhlIG1ldGFkYXRhIHNpemUgcmVpbnRlcnByZXRzIGV2ZXJ5dGhpbmcKJiM0MzsJICogdGhlIGhvc3QgaGFzIGFscmVhZHkgY2FjaGVkLCBxdWV1ZWQgb3IgaGFuZGVkIHRvIHRoZSBpbnRlZ3JpdHkgY29kZQomIzQzOwkgKiBmb3IgdGhpcyBuYW1lc3BhY2UsIGFuZCBmcmVlemluZyB0aGUgcXVldWUgZG9lcyBub3QgY292ZXIgYW55IG9mIGl0OgomIzQzOwkgKiBwYWdlIGNhY2hlIGNvbnRlbnRzLCBiaW9zIGJhdGNoZWQgb24gYSBwbHVnIGFuZCB0aGUgZGVmZXJyZWQKJiM0MzsJICogaW50ZWdyaXR5IHZlcmlmeSB3b3JrIGFsbCBvdXRsaXZlIHRoZSBmcmVlemUuICBJZiBzdWNoIGEgY2hhbmdlCiYjNDM7CSAqIGFycml2ZXMgdW5zb2xpY2l0ZWQgd2hpbGUgdGhlIG5hbWVzcGFjZSBpcyBpbiB1c2UsIHJlZnVzZSBpdCBhbmQgbGV0CiYjNDM7CSAqIHRoZSBjYWxsZXIgdGFrZSB0aGUgbmFtZXNwYWNlIG9mZmxpbmUgcmF0aGVyIHRoYW4gYWRvcHQgYSBnZW9tZXRyeQomIzQzOwkgKiB0aGF0IGRlc2NyaWJlcyBzb21ldGhpbmcgZWxzZSB0aGFuIHdoYXQgdGhlIGhvc3QgaXMgaG9sZGluZy4KJiM0MzsJICovCiYjNDM7CWlmIChudm1lX25zX29wZW5lcnMobnMpICZhbXA7JmFtcDsKJiM0MzsJICAgICF0ZXN0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sICZhbXA7bnMtJmd0O2N0cmwtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAobnMtJmd0O2hlYWQtJmd0O2xiYV9zaGlmdCAhPSBpZC0mZ3Q7bGJhZltsYmFmXS5kcyB8fAomIzQzOwkgICAgIG5zLSZndDtoZWFkLSZndDttcyAhPSBsZTE2X3RvX2NwdShpZC0mZ3Q7bGJhZltsYmFmXS5tcykpKSB7CiYjNDM7CQlkZXZfZXJyKG5zLSZndDtjdHJsLSZndDtkZXZpY2UsCiYjNDM7CQkJJiMzNDt1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlIG9uIGluLXVzZSBuc2lkICV1IChsYmFfc2hpZnQgJXUgLSZndDsgJXUsIG1zICV1IC0mZ3Q7ICV1KVxuJiMzNDssCiYjNDM7CQkJaW5mby0mZ3Q7bnNpZCwgbnMtJmd0O2hlYWQtJmd0O2xiYV9zaGlmdCwgaWQtJmd0O2xiYWZbbGJhZl0uZHMsCiYjNDM7CQkJbnMtJmd0O2hlYWQtJmd0O21zLCBsZTE2X3RvX2NwdShpZC0mZ3Q7bGJhZltsYmFmXS5tcykpOwomIzQzOwkJcmV0ID0gTlZNRV9TQ19JTlZBTElEX05TIHwgTlZNRV9TVEFUVVNfRE5SOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLSZndDtkaXNrLSZndDtxdWV1ZSk7CiAKIAltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobnMtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaAppbmRleCA4MjQ2NTFjYzg5OGRiLi45M2MxNWQ1NTgwZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCkBAIC0zMjksNiAmIzQzOzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHsKIAlOVk1FX0NUUkxfU0tJUF9JRF9DTlNfQ1MJPSA0LAogCU5WTUVfQ1RSTF9ESVJUWV9DQVBBQklMSVRZCT0gNSwKIAlOVk1FX0NUUkxfRlJPWkVOCQk9IDYsCiYjNDM7CU5WTUVfQ1RSTF9TRUxGX1JFU0NBTgkJPSA3LAogfTsKIAogc3RydWN0IG52bWVfY3RybCB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTkwCgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTWUgTmFtZXNwYWNlIEdlb21ldHJ5IFByb3RlY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNgIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhleSYjMzk7cmUgYWRkaW5nIGEgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgZmxhZyB0byBgbnZtZV9jdHJsX2ZsYWdzYC4gVGhlIGtleSBsb2dpYyBzZWVtcyB0byBiZSBhcm91bmQgYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLgoKSW4gYG52bWVfcGFzc3RocnVfZW5kYCwgdGhleSYjMzk7cmUgc2V0dGluZyB0aGlzIG5ldyBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBmbGFnIGJlZm9yZSBjYWxsaW5nIGBudm1lX3F1ZXVlX3NjYW5gIGFuZCBjbGVhcmluZyBpdCBhZnRlcndhcmQuIE1ha2VzIHNlbnNlOiB0aGlzIGluZGljYXRlcyBhIGRlbGliZXJhdGUsIGNvbnRyb2xsZWQgcmUtc2Nhbi4gVGhlbiwgaW4gYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNydWNpYWwgY2hlY2suIFRoZXkgdmVyaWZ5IGlmIHRoZSBuYW1lc3BhY2UgaXMgaW4gdXNlIHZpYSBgbnZtZV9uc19vcGVuZXJzKG5zKWAuIElmIGl0ICppcyogaW4gdXNlICphbmQqIGl0JiMzOTtzICpub3QqIGEgc2VsZi1yZXNjYW4gKHRoZSBgIXRlc3RfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgJmFtcDtucy0mZ3Q7Y3RybC0mZ3Q7ZmxhZ3MpYCBwYXJ0KSwgdGhleSYjMzk7cmUgYmxvY2tpbmcgY2hhbmdlcyB0byB0aGUgTEJBIGZvcm1hdCBvciBtZXRhZGF0YSBzaXplLCByZXR1cm5pbmcgYW4gYE5WTUVfU0NfSU5WQUxJRF9OUyB8IE5WTUVfU1RBVFVTX0ROUmAgZXJyb3IuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBwcm90ZWN0aW9uLgoKVGhlIHJhdGlvbmFsZSBpcyBjbGVhcjogcHJldmVudCB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyB0byBuYW1lc3BhY2VzIHRoYXQgYXJlIGFjdGl2ZWx5IGJlaW5nIHVzZWQuIFRoaXMgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgY29uc2VxdWVuY2VzIOKAkyBkYXRhIGNvcnJ1cHRpb24sIGNyYXNoZXMsIHlvdSBuYW1lIGl0LCBiZWNhdXNlIHRoZSBob3N0IGhhcyBjYWNoZWQgZGF0YSwgcXVldWVkIEkvT3MsIGFuZCB2ZXJpZmljYXRpb24gd29yayB0aGF0IHdvdWxkIGJlY29tZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbmV3IGdlb21ldHJ5IGlmIGNoYW5nZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbm8uIEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJdCBzaW1wbHkgYWRkcyBhIGNoZWNrIHRvIHByZXZlbnQgZ2VvbWV0cnkgY2hhbmdlcyB3aGVuIHRoZSBuYW1lc3BhY2UgaXMgYWN0aXZlLCBleGNlcHQgZHVyaW5nIGEgc2VsZi1yZXNjYW4uIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHVzZXItc3BhY2Ugc3RydWN0dXJlcywgbm9yIGFsbG9jYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcHJvYmxlbWF0aWMuIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2sgY2hhbmdlcyB0aGF0IHdvdWxkIHBlcm1pdCB1bmluaXRpYWxpemVkIGRhdGEgdG8gYmUgcmVhZC4gVGhlIG9yaWdpbmFsIGlzc3VlIHRoaXMgaXMgZml4aW5nIGlzIGxpa2VseSBkdWUgdG8gdGhlIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLCBkYXRhIGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdGhhdCBjYW4gcmVzdWx0IHdoZW4gdGhlIGJsb2NrIHNpemUgb3IgbWV0YWRhdGEgaXMgbW9kaWZpZWQgd2hpbGUgdGhlIGRldmljZSBpcyBpbiB1c2UsIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgS0FTQU4gb3IgbW9yZSBzdGFuZGFyZCBjaGVja3MgKGxpa2UgaXNzdWVzIHdpdGhpbiB0aGUgcGFnZSBjYWNoZSBvciBiaW8gaXNzdWVzKS4KCkxldCBtZSBkb3VibGUtY2hlY2sgYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgIGFnYWluLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTm90aGluZyBzdGlja3Mgb3V0LiBUaGUgdmFyaWFibGVzIHVzZWQgKGBpZGAgaXMgYSBwb2ludGVyIHRvIGBzdHJ1Y3QgbnZtZV9pZF9uc2Agd2hpY2ggaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBlbHNld2hlcmUsIGFuZCBgbGJhZmAgaXMgYW4gaW5kZXgpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGp1c3QgYWRkcyBhIGZsYWcgYW5kIGEgY29uZGl0aW9uYWwgY2hlY2suCgpTbywgeWVhaCwgaXQgbG9va3MgbGlrZSBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGZvciB0aGlzIG9uZS4gVGhpcyBpcyBhIGNsZWFuLCB3ZWxsLWZvY3VzZWQgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSByZWFsIHBvdGVudGlhbCBwcm9ibGVtIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5ldyBzZWN1cml0eSBjb25jZXJucyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgYW5kIHVzZXMgaXQgdG8gcHJldmVudCB1bnNvbGljaXRlZCBMQkEgZm9ybWF0IG9yIG1ldGFkYXRhIHNpemUgY2hhbmdlcyBvbiBpbi11c2UgTlZNZSBuYW1lc3BhY2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1ZSB0byBibG9jayBzaXplIGNoYW5nZXMgd2hpbGUgaW4gdXNlKSBhcmUgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgYW5kIHVzZXMgaXQgdG8gcHJldmVudCB1bnNvbGljaXRlZCBMQkEgZm9ybWF0IG9yIG1ldGFkYXRhIHNpemUgY2hhbmdlcyBvbiBpbi11c2UgTlZNZSBuYW1lc3BhY2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1ZSB0byBibG9jayBzaXplIGNoYW5nZXMgd2hpbGUgaW4gdXNlKSBhcmUgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM1OjM0LjM5NDgyNzU5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQxNzI2NzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIk5WTUVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV9wYXNzdGhydV9lbmRcIixcbiAgICBcIm52bWVfcXVldWVfc2NhblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBOVk1FX0NUUkxfU0VMRl9SRVNDQU5gIGFuZCB1c2VzIGl0IHRvIHByZXZlbnQgdW5zb2xpY2l0ZWQgTEJBIGZvcm1hdCBvciBtZXRhZGF0YSBzaXplIGNoYW5nZXMgb24gaW4tdXNlIE5WTWUgbmFtZXNwYWNlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGRhdGEgY29ycnVwdGlvbiBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdWUgdG8gYmxvY2sgc2l6ZSBjaGFuZ2VzIHdoaWxlIGluIHVzZSkgYXJlIHJlbGF0ZWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIGNvcmUgZHJpdmVyIHRvIHJlZnVzZSB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyBvbiBhbiBpbi11c2UgbmFtZXNwYWNlLCBhbmQgYWRkcyBhIGZsYWcgdG8gYWxsb3cgZm9ybWF0IGNoYW5nZXMgaWYgdGhlIGhvc3QgcmVxdWVzdGVkIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIGFmZmVjdHMgY29yZSBOVk1lIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM1OjM0LjM5NDgzMzEwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMDgwOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjI4MDcxMDJhZTBiNTA5MTE5N2YwM2I1YTQ5OWI2ODZmYmMyNmM4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxOTozNTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcXG5pbmRleCA0NTNjMWYwYjJkZDA5Li5lYmFjNWEzZDFhMDc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbkBAIC0xMjg1LDggKzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0aWYgKGVmZmVjdHMgXFx1MDAyNiAoTlZNRV9DTURfRUZGRUNUU19OSUMgfCBOVk1FX0NNRF9FRkZFQ1RTX05DQykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIGhvc3QgYXNrZWQgZm9yIHRoaXMgY2hhbmdlLCBzbyBsZXQgdGhlIHJlc2NhbiBhZG9wdCB0aGVcXG4rXFx0XFx0ICogbmV3IG5hbWVzcGFjZSBnZW9tZXRyeSBldmVuIGlmIHRoZSBkaXNrIGlzIG9wZW4uICBPbmx5IGFuXFxuK1xcdFxcdCAqIHVuc29saWNpdGVkIGNoYW5nZSBpcyByZWZ1c2VkLCBzZWUgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jaygpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2V0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFxcdTAwMjZjdHJsLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcXG4gXFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2Y3RybC1cXHUwMDNlc2Nhbl93b3JrKTtcXG4rXFx0XFx0Y2xlYXJfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXFx1MDAyNmN0cmwtXFx1MDAzZWZsYWdzKTtcXG4gXFx0fVxcbiBcXHRpZiAobnMpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjM4NCw2ICsyMzkxLDE3IEBAIHN0YXRpYyBib29sIG52bWVfaW52YWxpZF9sYmFfc3oodTY0IG5zemUsIHNpZ25lZCBpbnQgc2hpZnQsIHNlY3Rvcl90ICpjYXBhY2l0eSlcXG4gXFx0cmV0dXJuIGNoZWNrX3NobF9vdmVyZmxvdyhuc3plLCBzaGlmdCwgY2FwYWNpdHkpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBPcGVuZXJzIG9mIGEgbXVsdGlwYXRoIG5hbWVzcGFjZSBnbyB0byB0aGUgaGVhZCBkaXNrOyB0aGUgcGVyLXBhdGggZGlzayBpc1xcbisgKiBoaWRkZW4gYW5kIG5ldmVyIGhhcyBhbnkuXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IG52bWVfbnNfb3BlbmVycyhzdHJ1Y3QgbnZtZV9ucyAqbnMpXFxuK3tcXG4rXFx0aWYgKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtXFx1MDAzZWhlYWQpKVxcbitcXHRcXHRyZXR1cm4gZGlza19vcGVuZXJzKG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrKTtcXG4rXFx0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cXHUwMDNlZGlzayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuIFxcdFxcdHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuIHtcXG5AQCAtMjQzNiw2ICsyNDU0LDI4IEBAIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDaGFuZ2luZyB0aGUgTEJBIGZvcm1hdCBvciB0aGUgbWV0YWRhdGEgc2l6ZSByZWludGVycHJldHMgZXZlcnl0aGluZ1xcbitcXHQgKiB0aGUgaG9zdCBoYXMgYWxyZWFkeSBjYWNoZWQsIHF1ZXVlZCBvciBoYW5kZWQgdG8gdGhlIGludGVncml0eSBjb2RlXFxuK1xcdCAqIGZvciB0aGlzIG5hbWVzcGFjZSwgYW5kIGZyZWV6aW5nIHRoZSBxdWV1ZSBkb2VzIG5vdCBjb3ZlciBhbnkgb2YgaXQ6XFxuK1xcdCAqIHBhZ2UgY2FjaGUgY29udGVudHMsIGJpb3MgYmF0Y2hlZCBvbiBhIHBsdWcgYW5kIHRoZSBkZWZlcnJlZFxcbitcXHQgKiBpbnRlZ3JpdHkgdmVyaWZ5IHdvcmsgYWxsIG91dGxpdmUgdGhlIGZyZWV6ZS4gIElmIHN1Y2ggYSBjaGFuZ2VcXG4rXFx0ICogYXJyaXZlcyB1bnNvbGljaXRlZCB3aGlsZSB0aGUgbmFtZXNwYWNlIGlzIGluIHVzZSwgcmVmdXNlIGl0IGFuZCBsZXRcXG4rXFx0ICogdGhlIGNhbGxlciB0YWtlIHRoZSBuYW1lc3BhY2Ugb2ZmbGluZSByYXRoZXIgdGhhbiBhZG9wdCBhIGdlb21ldHJ5XFxuK1xcdCAqIHRoYXQgZGVzY3JpYmVzIHNvbWV0aGluZyBlbHNlIHRoYW4gd2hhdCB0aGUgaG9zdCBpcyBob2xkaW5nLlxcbitcXHQgKi9cXG4rXFx0aWYgKG52bWVfbnNfb3BlbmVycyhucykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICF0ZXN0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFxcdTAwMjZucy1cXHUwMDNlY3RybC1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWxiYV9zaGlmdCAhPSBpZC1cXHUwMDNlbGJhZltsYmFmXS5kcyB8fFxcbitcXHQgICAgIG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VtcyAhPSBsZTE2X3RvX2NwdShpZC1cXHUwMDNlbGJhZltsYmFmXS5tcykpKSB7XFxuK1xcdFxcdGRldl9lcnIobnMtXFx1MDAzZWN0cmwtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcInVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2Ugb24gaW4tdXNlIG5zaWQgJXUgKGxiYV9zaGlmdCAldSAtXFx1MDAzZSAldSwgbXMgJXUgLVxcdTAwM2UgJXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2Vuc2lkLCBucy1cXHUwMDNlaGVhZC1cXHUwMDNlbGJhX3NoaWZ0LCBpZC1cXHUwMDNlbGJhZltsYmFmXS5kcyxcXG4rXFx0XFx0XFx0bnMtXFx1MDAzZWhlYWQtXFx1MDAzZW1zLCBsZTE2X3RvX2NwdShpZC1cXHUwMDNlbGJhZltsYmFmXS5tcykpO1xcbitcXHRcXHRyZXQgPSBOVk1FX1NDX0lOVkFMSURfTlMgfCBOVk1FX1NUQVRVU19ETlI7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuIFxcbiBcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobnMtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXFxuaW5kZXggODI0NjUxY2M4OThkYi4uOTNjMTVkNTU4MGUzMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcXG5AQCAtMzI5LDYgKzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHtcXG4gXFx0TlZNRV9DVFJMX1NLSVBfSURfQ05TX0NTXFx0PSA0LFxcbiBcXHROVk1FX0NUUkxfRElSVFlfQ0FQQUJJTElUWVxcdD0gNSxcXG4gXFx0TlZNRV9DVFJMX0ZST1pFTlxcdFxcdD0gNixcXG4rXFx0TlZNRV9DVFJMX1NFTEZfUkVTQ0FOXFx0XFx0PSA3LFxcbiB9O1xcbiBcXG4gc3RydWN0IG52bWVfY3RybCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM1OjM0LjgyNTY2ODYyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzMTM3NTAyMDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudm1lX3Bhc3N0aHJ1X2VuZFwiLFxuICAgIFwibnZtZV9xdWV1ZV9zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5WTWUgY29yZSBkcml2ZXIgdG8gcmVmdXNlIHVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2VzIG9uIGFuIGluLXVzZSBuYW1lc3BhY2UsIGFuZCBhZGRzIGEgZmxhZyB0byBhbGxvdyBmb3JtYXQgY2hhbmdlcyBpZiB0aGUgaG9zdCByZXF1ZXN0ZWQgaXQgdmlhIE5WTWUgcGFzc3Rocm91Z2ggY29tbWFuZHMuIFRoaXMgYWZmZWN0cyBjb3JlIE5WTWUgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI4MDcxMDJhZTBiNTA5MTE5N2YwM2I1YTQ5OWI2ODZmYmMyNmM4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE5OjM1OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCA0NTNjMWYwYjJkZDA5Li5lYmFjNWEzZDFhMDc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC0xMjg1LDggKzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuIFx0XHR9XG4gXHR9XG4gXHRpZiAoZWZmZWN0cyBcdTAwMjYgKE5WTUVfQ01EX0VGRkVDVFNfTklDIHwgTlZNRV9DTURfRUZGRUNUU19OQ0MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBob3N0IGFza2VkIGZvciB0aGlzIGNoYW5nZSwgc28gbGV0IHRoZSByZXNjYW4gYWRvcHQgdGhlXG4rXHRcdCAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhblxuK1x0XHQgKiB1bnNvbGljaXRlZCBjaGFuZ2UgaXMgcmVmdXNlZCwgc2VlIG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soKS5cbitcdFx0ICovXG4rXHRcdHNldF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZjdHJsLVx1MDAzZWZsYWdzKTtcbiBcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNmN0cmwtXHUwMDNlc2Nhbl93b3JrKTtcbitcdFx0Y2xlYXJfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2Y3RybC1cdTAwM2VmbGFncyk7XG4gXHR9XG4gXHRpZiAobnMpXG4gXHRcdHJldHVybjtcbkBAIC0yMzg0LDYgKzIzOTEsMTcgQEAgc3RhdGljIGJvb2wgbnZtZV9pbnZhbGlkX2xiYV9zeih1NjQgbnN6ZSwgc2lnbmVkIGludCBzaGlmdCwgc2VjdG9yX3QgKmNhcGFjaXR5KVxuIFx0cmV0dXJuIGNoZWNrX3NobF9vdmVyZmxvdyhuc3plLCBzaGlmdCwgY2FwYWNpdHkpO1xuIH1cbiBcbisvKlxuKyAqIE9wZW5lcnMgb2YgYSBtdWx0aXBhdGggbmFtZXNwYWNlIGdvIHRvIHRoZSBoZWFkIGRpc2s7IHRoZSBwZXItcGF0aCBkaXNrIGlzXG4rICogaGlkZGVuIGFuZCBuZXZlciBoYXMgYW55LlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcbit7XG4rXHRpZiAobnZtZV9uc19oZWFkX211bHRpcGF0aChucy1cdTAwM2VoZWFkKSlcbitcdFx0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2spO1xuK1x0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cdTAwM2VkaXNrKTtcbit9XG4rXG4gc3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbiBcdFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbiB7XG5AQCAtMjQzNiw2ICsyNDU0LDI4IEBAIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIENoYW5naW5nIHRoZSBMQkEgZm9ybWF0IG9yIHRoZSBtZXRhZGF0YSBzaXplIHJlaW50ZXJwcmV0cyBldmVyeXRoaW5nXG4rXHQgKiB0aGUgaG9zdCBoYXMgYWxyZWFkeSBjYWNoZWQsIHF1ZXVlZCBvciBoYW5kZWQgdG8gdGhlIGludGVncml0eSBjb2RlXG4rXHQgKiBmb3IgdGhpcyBuYW1lc3BhY2UsIGFuZCBmcmVlemluZyB0aGUgcXVldWUgZG9lcyBub3QgY292ZXIgYW55IG9mIGl0OlxuK1x0ICogcGFnZSBjYWNoZSBjb250ZW50cywgYmlvcyBiYXRjaGVkIG9uIGEgcGx1ZyBhbmQgdGhlIGRlZmVycmVkXG4rXHQgKiBpbnRlZ3JpdHkgdmVyaWZ5IHdvcmsgYWxsIG91dGxpdmUgdGhlIGZyZWV6ZS4gIElmIHN1Y2ggYSBjaGFuZ2VcbitcdCAqIGFycml2ZXMgdW5zb2xpY2l0ZWQgd2hpbGUgdGhlIG5hbWVzcGFjZSBpcyBpbiB1c2UsIHJlZnVzZSBpdCBhbmQgbGV0XG4rXHQgKiB0aGUgY2FsbGVyIHRha2UgdGhlIG5hbWVzcGFjZSBvZmZsaW5lIHJhdGhlciB0aGFuIGFkb3B0IGEgZ2VvbWV0cnlcbitcdCAqIHRoYXQgZGVzY3JpYmVzIHNvbWV0aGluZyBlbHNlIHRoYW4gd2hhdCB0aGUgaG9zdCBpcyBob2xkaW5nLlxuK1x0ICovXG4rXHRpZiAobnZtZV9uc19vcGVuZXJzKG5zKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhdGVzdF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZucy1cdTAwM2VjdHJsLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAobnMtXHUwMDNlaGVhZC1cdTAwM2VsYmFfc2hpZnQgIT0gaWQtXHUwMDNlbGJhZltsYmFmXS5kcyB8fFxuK1x0ICAgICBucy1cdTAwM2VoZWFkLVx1MDAzZW1zICE9IGxlMTZfdG9fY3B1KGlkLVx1MDAzZWxiYWZbbGJhZl0ubXMpKSkge1xuK1x0XHRkZXZfZXJyKG5zLVx1MDAzZWN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwidW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZSBvbiBpbi11c2UgbnNpZCAldSAobGJhX3NoaWZ0ICV1IC1cdTAwM2UgJXUsIG1zICV1IC1cdTAwM2UgJXUpXFxuXCIsXG4rXHRcdFx0aW5mby1cdTAwM2Vuc2lkLCBucy1cdTAwM2VoZWFkLVx1MDAzZWxiYV9zaGlmdCwgaWQtXHUwMDNlbGJhZltsYmFmXS5kcyxcbitcdFx0XHRucy1cdTAwM2VoZWFkLVx1MDAzZW1zLCBsZTE2X3RvX2NwdShpZC1cdTAwM2VsYmFmW2xiYWZdLm1zKSk7XG4rXHRcdHJldCA9IE5WTUVfU0NfSU5WQUxJRF9OUyB8IE5WTUVfU1RBVFVTX0ROUjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuIFxuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuaW5kZXggODI0NjUxY2M4OThkYi4uOTNjMTVkNTU4MGUzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG5AQCAtMzI5LDYgKzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHtcbiBcdE5WTUVfQ1RSTF9TS0lQX0lEX0NOU19DU1x0PSA0LFxuIFx0TlZNRV9DVFJMX0RJUlRZX0NBUEFCSUxJVFlcdD0gNSxcbiBcdE5WTUVfQ1RSTF9GUk9aRU5cdFx0PSA2LFxuK1x0TlZNRV9DVFJMX1NFTEZfUkVTQ0FOXHRcdD0gNyxcbiB9O1xuIFxuIHN0cnVjdCBudm1lX2N0cmwge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzU6MzQuODI1NjcxNDUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxNTcyNTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5WTWUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AgYW5kIGBkcml2ZXJzL252bWUvaG9zdC9udm1lLmhgLiBJdCBzZWVtcyB0byBiZSBhIHNlY3VyaXR5IGhhcmRlbmluZyBjaGFuZ2UsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHByZXZlbnRzIHVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2VzIG9uIGFuIGFjdGl2ZSBuYW1lc3BhY2Ugd2l0aGluIHRoZSBOVk1lIGRyaXZlci4gVGhhdCdzIGEgZ29vZCBzdGVwIHRvd2FyZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGxvc3Mgb3IgY29ycnVwdGlvbiwgSSdkIHNheS4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBmbGFnIGlzIGludGVyZXN0aW5nIHRvbzsgaXQgYWxsb3dzIGNvbnRyb2xsZWQgZm9ybWF0IGNoYW5nZXMgaW5pdGlhdGVkIGJ5IHRoZSBob3N0LiBUaGlzIGltcGxpZXMgdGhlcmUncyBhIHNwZWNpZmljIGZsb3cgd2hlcmUgZm9ybWF0dGluZyBpcyBhY2NlcHRhYmxlLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHRhcmdldC4gVGhlIGNvcmUgTlZNZSBkcml2ZXIgY2hhbmdlcywgYW5kIEkga25vdyBRRU1VIGhhcyBhIE5WTWUgZW11bGF0b3IuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgY29kZSBwYXRocyB0aGF0IGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHRoZSB1c2VyIHNwYWNlLiBUaGUgY2hhbGxlbmdlIHdpbGwgYmUgY3JhZnRpbmcgaW5wdXRzIHRoYXQgdHJpZ2dlciB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyBhZGRlZCBieSB0aGlzIHBhdGNoLCB0byBwcm9iZSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTGV0J3MgZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gbWFrZSBzdXJlIEkgY2FuIGVuYWJsZSBOVk1lIHByb3Blcmx5IGluIG15IHRlc3QgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBsb29rIGluIGBkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBlbnN1cmUgaXQncyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgdGhlIHRlc3RpbmcuIEtub3dpbmcgaG93IE5WTWUgaXMgY29uZmlndXJlZCBpcyBrZXkuIEknbGwgYmUgbG9va2luZyB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZsYWdzIGZvciB0aGUgZW11bGF0ZWQgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzU6NDAuNTQxMzk5Njc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTY5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05WTUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTI9Y29uZmlnIE5WTUVfQ09SRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00LVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9OVk1FXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJOVk0gRXhwcmVzcyBibG9jayBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM1OjQwLjYwMTk3NTEyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzkwMDg2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIE5WTWUgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYEJMS19ERVZfTlZNRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGUgY29yZSBOVk1lIGZ1bmN0aW9uYWxpdHksIHRoYXQgaXMgYE5WTUVfQ09SRWAsIGlzIGFsc28gYmVpbmcgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGlzbid0IHNvbWUgaW1wbGljaXQgZGVwZW5kZW5jeSBvciBzZWxlY3Rpb24gaXNzdWUuIEFoLCBnb29kLiBgQkxLX0RFVl9OVk1FYCBkb2VzIGluZGVlZCBzZWxlY3QgYE5WTUVfQ09SRWAuIFRoYXTigJlzIHdoYXQgSSBleHBlY3RlZCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncyB0byBhdm9pZCBkb3duc3RyZWFtIGlzc3Vlcy5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIG1vZGlmaWNhdGlvbnMuIEkgc2VlIHdlIGhhdmUgY2hhbmdlcyB0byBgbnZtZV9wYXNzdGhydV9lbmRgLCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AsIGFuZCBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBudm1lX25zX29wZW5lcnNgLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgdG8gd29yayBmcm9tLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIGVmZmVjdHMgb2YgdGhlIGNoYW5nZXMgdG8gdGhlc2UgZnVuY3Rpb25zIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGNvZGUuIFRoZXkgYXJlIGxpa2VseSB0b3VjaGluZyBvbiBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSwgYW5kIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiB3aWxsIGJlIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo0NS4xODA5ODYyOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIxNTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3Bhc3N0aHJ1X2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNjk9RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9zdGFydCwgXFxcIk5WTUVfVEFSR0VUX1BBU1NUSFJVXFxcIik7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyNzAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNzE6dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcyLVxcdFxcdCAgICAgICBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsIGludCBzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEzMjE6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9lbmQsIFxcXCJOVk1FX1RBUkdFVF9QQVNTVEhSVVxcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo0NS4yMzAyMDc4MDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU1ODcxMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipOVk1lIENvbmNlcm46IEV4cG9ydGVkIFN5bWJvbHMqKlxuXG5BbHJpZ2h0LCBzbyBgbnZtZV9wYXNzdGhydV9lbmRgIGlzIGV4cG9ydGVkLCB0aGF0J3MgZmluZSwgSSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgZm9yIHRoYXQuIEl0IG1ha2VzIHNlbnNlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgTlZNZSBkZXZpY2UgbWFuYWdlbWVudCBhbmQgaW50ZXJhY3Rpb24uIEJ1dC4uLiBub3cgSSdtIHRoaW5raW5nIGFib3V0IGFub3RoZXIgZnVuY3Rpb24sIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYC4gSXMgKnRoYXQqIGFsc28gZXhwb3J0ZWQ/IFRoYXQncyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gY29uc2lkZXIuIEknbSB3b25kZXJpbmcgaWYgaXQncyBnb3QgdGhlIHNhbWUgc29ydCBvZiBvdXR3YXJkIGZhY2luZyBuZWVkLiBXZSd2ZSBnb3QgdG8gZW5zdXJlIHRoZSByaWdodCB0aGluZ3MgYXJlIGV4cG9zZWQgd2hpbGUga2VlcGluZyB0aGUgcmVzdCBpbnRlcm5hbCwgbWFpbnRhaW5pbmcgb3VyIGludGVuZGVkIGFic3RyYWN0aW9uLCBhbmQgYXZvaWRpbmcgdW5uZWNlc3NhcnkgY29tcGxleGl0eSBvciBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBBbmQgaG93IGRvZXMgdGhhdCBhZmZlY3QgdGhlIGRldmljZSBzdGFjaz8gQW5kIHdoYXQgd291bGQgaXQgaW1wbHkgZm9yIHRoZSBvdmVyYWxsIGtlcm5lbCBkZXNpZ24/IFRoaXMgY291bGQgaGF2ZSBhIHJpcHBsZSBlZmZlY3QuIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgb24gdGhlIGV4cG9ydCBzdGF0dXMgb2YgdGhhdCBvdGhlciBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBlaXRoZXIgYmVpbmcgZXhwb3NlZCBvciBpbnRlcm5hbCwgYXMgdGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgZGVzaWduIG9mIHRoaXMgbmV4dCBtb2R1bGUgSSdtIHdvcmtpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo0OC41ODYwODIwMjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MTU2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTAtXFx0XFx0ICogbmV3IG5hbWVzcGFjZSBnZW9tZXRyeSBldmVuIGlmIHRoZSBkaXNrIGlzIG9wZW4uICBPbmx5IGFuXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyOTE6XFx0XFx0ICogdW5zb2xpY2l0ZWQgY2hhbmdlIGlzIHJlZnVzZWQsIHNlZSBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKCkuXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTItXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjM5OD1zdGF0aWMgdW5zaWduZWQgaW50IG52bWVfbnNfb3BlbmVycyhzdHJ1Y3QgbnZtZV9ucyAqbnMpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNC1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjQwNTpzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDA2LVxcdFxcdHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm8oc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzMtXFx0XFx0fVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTc0OlxcdFxcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2sobnMsIGluZm8pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTc1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTc2LVxcdGNhc2UgTlZNRV9DU0lfTlZNOlxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTc3OlxcdFxcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2sobnMsIGluZm8pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTc4LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo0OC42MzQ4MDU4NjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEwNDk2ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBOVk1lIGV4cGVydDpcblxuKipJbnRlcm5hbCBOVk1lIE5hbWVzcGFjZSBCbG9jayBVcGRhdGVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uLi4gaG1tLCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZmlsZSBvciBtb2R1bGUgd2l0aGluIHRoZSBOVk1lIGRyaXZlci4gSXQncyBub3QgZGVzaWduZWQgdG8gYmUgYWNjZXNzZWQgZXh0ZXJuYWxseS4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSB1cGRhdGluZyB0aGUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGJsb2NrIGlzIGEgY3JpdGljYWwsIGxvdy1sZXZlbCBvcGVyYXRpb24uIFlvdSB3b3VsZG4ndCB3YW50IHRvIGV4cG9zZSB0aGF0IGRpcmVjdGx5IHRvIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gd2l0aG91dCBjYXJlZnVsIGNvbnRyb2wuXG5cbk5vdywgaXQncyBjYWxsZWQgYnkgYG52bWVfdXBkYXRlX25zX2luZm9gLiBBaCwgb2theSwgc28gYG52bWVfdXBkYXRlX25zX2luZm9gIGlzIHRoZSBsaWtlbHkgcHVibGljIGludGVyZmFjZSwgb3IgYXQgbGVhc3QgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiwgdGhhdCBhY3R1YWxseSBvcmNoZXN0cmF0ZXMgdGhlIHByb2Nlc3Mgb2YgdXBkYXRpbmcgdGhlIG5hbWVzcGFjZSBpbmZvcm1hdGlvbi4gYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgIGlzIHRoZW4gdGhlIHdvcmtob3JzZSwgdGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgaGVhdnkgbGlmdGluZyBvbiB0aGUgYWN0dWFsIGJsb2NrIHdyaXRlLiBJdCdzIHRoZSBcInNlY3JldCBzYXVjZVwiIHRoYXQncyBoaWRkZW4gYmVoaW5kIHRoZSBjdXJ0YWluLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBrZXkuIEl0IGltcGxpZXMgdGhhdCBgbnZtZV91cGRhdGVfbnNfaW5mb2AgcHJvYmFibHkgaGFuZGxlcyB0aGluZ3MgbGlrZSBlcnJvciBjaGVja2luZywgbG9ja2luZywgcG90ZW50aWFsbHkgcHJlcGFyaW5nIGRhdGEsIGFuZCB0aGVuICpjYWxscyogdGhlIHN0YXRpYywgaW50ZXJuYWwgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIHVwZGF0ZSBvZiB0aGUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGJsb2NrIG9uIHRoZSBkcml2ZS4gR290IGl0LiBUaGlzIGlzIGEgdmVyeSB0eXBpY2FsIGRlc2lnbiBwYXR0ZXJuIGZvciByb2J1c3QgZGV2aWNlIGRyaXZlcnMgYW5kIE5WTWUgY29kZSBpbiBnZW5lcmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzU6NTIuNTQ1MzA1MzM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzNzg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3VwZGF0ZV9uc19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI3MT12b2lkIG52bWVfcGFzc3RocnVfZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTMyIGVmZmVjdHMsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5MC1cXHRcXHQgKiBuZXcgbmFtZXNwYWNlIGdlb21ldHJ5IGV2ZW4gaWYgdGhlIGRpc2sgaXMgb3Blbi4gIE9ubHkgYW5cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5MTpcXHRcXHQgKiB1bnNvbGljaXRlZCBjaGFuZ2UgaXMgcmVmdXNlZCwgc2VlIG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soKS5cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5Mi1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMTkyPXN0YXRpYyB2b2lkIG52bWVfc2V0X2NodW5rX3NlY3RvcnMoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9pZF9ucyAqaWQsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjIyMy1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjIyNDpzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fZ2VuZXJpYyhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyMjUtXFx0XFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzk4PXN0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDA0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDA1OnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0MDYtXFx0XFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTUyPXN0YXRpYyB2b2lkIG52bWVfc3RhY2tfem9uZV9yZXNvdXJjZXMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqdCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTU5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTYwOnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjEte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzAtXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlbnNpZCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1NzE6XFx0XFx0XFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKG5zLCBpbmZvKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3Mi1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3My1cXHRcXHR9XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1NzQ6XFx0XFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhucywgaW5mbyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzUtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzYtXFx0Y2FzZSBOVk1FX0NTSV9OVk06XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1Nzc6XFx0XFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhucywgaW5mbyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU4Mi1cXHRcXHRcXHRpbmZvLVxcdTAwM2Vuc2lkLCBpbmZvLVxcdTAwM2VpZHMuY3NpKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU4MzpcXHRcXHRyZXQgPSBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMobnMsIGluZm8pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTg0LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQyMzE9c3RhdGljIHZvaWQgbnZtZV9hbGxvY19ucyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQyODUtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQyODY6XFx0aWYgKG52bWVfdXBkYXRlX25zX2luZm8obnMsIGluZm8pKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00Mjg3LVxcdFxcdGdvdG8gb3V0X3VubGlua19ucztcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NDA5PXN0YXRpYyB2b2lkIG52bWVfdmFsaWRhdGVfbnMoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0MTgtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ0MTk6XFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mbyhucywgaW5mbyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0MjAtb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo1Mi41OTU2NTUyODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNDY2MTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSByZWxhdGlvbnNoaXBzLCBzdW1tYXJpemVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTlZNZSBOYW1lc3BhY2UgTG9naWMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBudm1lX3VwZGF0ZV9uc19pbmZvYCBpcyAqYWxzbyogZGVjbGFyZWQgYXMgc3RhdGljLCBpbnRlcmVzdGluZy4gU28gdGhhdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4uIEl0J3MgY2FsbGVkIGZyb20gYG52bWVfYWxsb2NfbnNgIGFuZCBgbnZtZV92YWxpZGF0ZV9uc2AuIE1ha2VzIHNlbnNlLCB0aGUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGxpa2VseSBuZWVkcyB1cGRhdGluZyB3aGVuIHdlJ3JlIGNyZWF0aW5nIG9yIHZhbGlkYXRpbmcgYSBuYW1lc3BhY2UuXG5cbk5vdywgYG52bWVfdmFsaWRhdGVfbnNgIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX25zYC4gU28sIHdoZW4gd2UncmUgc2Nhbm5pbmcgdGhlIHN5c3RlbSBmb3IgTlZNZSBuYW1lc3BhY2VzLCB3ZSBuZWVkIHRvIHZhbGlkYXRlIHRoZW0sIGFuZCB0aGF0IHZhbGlkYXRpb24gaW52b2x2ZXMgdXBkYXRpbmcgdGhlIGluZm9ybWF0aW9uLiBUaGUgZmxvdyBtYWtlcyBzZW5zZS4gQWxsb2NhdGlvbiAtXHUwMDNlIFZhbGlkYXRpb24gLVx1MDAzZSBTY2FubmluZy4gSXQncyBhbGwgY29ubmVjdGVkLCBhbmQgZWFjaCBmdW5jdGlvbiBwbGF5cyBpdHMgcGFydCBpbiBtYW5hZ2luZyB0aG9zZSBuYW1lc3BhY2VzLiBJJ2QgbmVlZCB0byBkaXZlIGRlZXBlciwgb2YgY291cnNlLCBidXQganVzdCBsb29raW5nIGF0IHRoZSBjYWxsIHJlbGF0aW9uc2hpcHMgZ2l2ZXMgYSBxdWljayBvdmVydmlldyBvZiB0aGlzIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo1Ni4yMjAzMTkxNTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODY2ODcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3NjYW5fbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NDA5PXN0YXRpYyB2b2lkIG52bWVfdmFsaWRhdGVfbnMoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0MzAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ0MzE6c3RhdGljIHZvaWQgbnZtZV9zY2FuX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHVuc2lnbmVkIG5zaWQpXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0MzIte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0ODMtICogTm90ZTogVGhlcmUgaXMgYSBzaW5nbGUgYXN5bmNfc2Nhbl9pbmZvIHN0cnVjdHVyZSBzaGFyZWQgYnkgYWxsIGluc3RhbmNlc1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NDg0OiAqIG9mIG52bWVfc2Nhbl9uc19hc3luYygpIHNjYW5uaW5nIGEgZ2l2ZW4gY29udHJvbGxlciwgc28gdGhlIGF0b21pY1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NDg1LSAqIG9wZXJhdGlvbnMgb24gbmV4dF9uc2lkIGFyZSBjcml0aWNhbCB0byBlbnN1cmUgZWFjaCBpbnN0YW5jZSBzY2FucyBhIHVuaXF1ZVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ0ODg9c3RydWN0IGFzeW5jX3NjYW5faW5mbyB7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQ5My1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDQ5NDpzdGF0aWMgdm9pZCBudm1lX3NjYW5fbnNfYXN5bmModm9pZCAqZGF0YSwgYXN5bmNfY29va2llX3QgY29va2llKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NDk1LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTAyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NTAzOlxcdG52bWVfc2Nhbl9ucyhzY2FuX2luZm8tXFx1MDAzZWN0cmwsIG5zaWQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTA0LX1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NTA2PXN0YXRpYyB2b2lkIG52bWVfcmVtb3ZlX2ludmFsaWRfbmFtZXNwYWNlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1MjUtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ1MjY6c3RhdGljIGludCBudm1lX3NjYW5fbnNfbGlzdChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTI3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTYxLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NTYyOlxcdFxcdFxcdGFzeW5jX3NjaGVkdWxlX2RvbWFpbihudm1lX3NjYW5fbnNfYXN5bmMsIFxcdTAwMjZzY2FuX2luZm8sXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1NjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRvbWFpbik7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDU3Ni1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDU3NzpzdGF0aWMgdm9pZCBudm1lX3NjYW5fbnNfc2VxdWVudGlhbChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTc4LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTg3LVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gbm47IGkrKylcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDU4ODpcXHRcXHRudm1lX3NjYW5fbnMoY3RybCwgaSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1ODktXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDYxOD1zdGF0aWMgdm9pZCBudm1lX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY0OC1cXHRpZiAoIW52bWVfaWRfY25zX29rKGN0cmwsIE5WTUVfSURfQ05TX05TX0FDVElWRV9MSVNUKSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NjQ5OlxcdFxcdG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsKGN0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjUwLVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY1NS1cXHRcXHQgKi9cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDY1NjpcXHRcXHRyZXQgPSBudm1lX3NjYW5fbnNfbGlzdChjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY1Ny1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAyNiBOVk1FX1NUQVRVU19ETlIpXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NTg6XFx0XFx0XFx0bnZtZV9zY2FuX25zX3NlcXVlbnRpYWwoY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NTktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo1Ni4zMzg5OTQzNDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NjQ5NzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJJ20gdGhlIG9uZSB0aGlua2luZyBpdCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5WTWUgU2NhbiBXb3JrZmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgZnVuY3Rpb24gaGVyZSwgdGhlIG9uZSBhY3R1YWxseSBkb2luZyB0aGUgaGVhdnkgbGlmdGluZywgdGhhdCdzIGBudm1lX3NjYW5fd29ya2AuIFByZXR0eSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbiwgcmlnaHQ/IFRoZSBrZXkgcGFydCBpcyB0aGF0ICp0aGlzKiBpcyB0aGUgYWN0dWFsIHdvcmtxdWV1ZSBmdW5jdGlvbi4gU28gaXQncyB0aGUgYml0IHRoYXQgZ2V0cyBkZWZlcnJlZCBhbmQgc2NoZWR1bGVkLiBJdCdzIG5vdCBydW5uaW5nIGluIHRoZSBpbnRlcnJ1cHQgY29udGV4dCwgd2hpY2ggaXMgZ29vZC5cblxuTm93LCB3aGVyZSBkb2VzIGBudm1lX3NjYW5fd29ya2AgZ2V0IGludm9rZWQ/IFRoYXQncyBjb21pbmcgZnJvbSBgbnZtZV9xdWV1ZV9zY2FuYC4gU28sIGBudm1lX3F1ZXVlX3NjYW5gIGxpa2VseSBoYW5kbGVzIHRoZSBzY2hlZHVsaW5nLCBtYXliZSBxdWV1aW5nIHRoZSB3b3JrIGl0ZW0gaXRzZWxmLiBJJ2QgbmVlZCB0byB0cmFjZSB0aGF0IGNhbGwgY2hhaW4gdG8gY29uZmlybSwgYnV0IHRoZSBpbXBsaWNhdGlvbiBpcyBjbGVhci4gYG52bWVfcXVldWVfc2NhbmAgcHJvYmFibHkgaGFuZGxlcyBhbGwgdGhlIGluaXRpYWwgY2hlY2tzLCBwZXJoYXBzIGRldmljZSBwcmVzZW5jZS9hYnNlbmNlIGRldGVjdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIHRoZW4gaGFuZHMgb2ZmIHRoZSBhY3R1YWwgc2Nhbm5pbmcgb3BlcmF0aW9uIHRvIHRoZSB3b3JrcXVldWUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZSwga2VlcHMgdGhlIGludGVycnVwdCBjb250ZXh0IGxlYW4uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgbG9ja2luZyBhcm91bmQgYG52bWVfc2Nhbl93b3JrYCB0byBlbnN1cmUgaXQncyB0aHJlYWQtc2FmZS4gSSdkIGJlIGxvb2tpbmcgZm9yIGEgbXV0ZXggYXJvdW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6MDAuMDE1NDk0NTk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjIxMTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3F1ZXVlX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNTU9c3RhdGljIGludCBudm1lX2dldF9sb2dfbHNpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiBuc2lkLCB1OCBsb2dfcGFnZSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xNTctXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE1ODp2b2lkIG52bWVfcXVldWVfc2NhbihzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xNTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTMtXFx0XFx0c2V0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFxcdTAwMjZjdHJsLVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyOTQ6XFx0XFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjk1LVxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNmN0cmwtXFx1MDAzZXNjYW5fd29yayk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDYxOD1zdGF0aWMgdm9pZCBudm1lX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2My1cXHRpZiAodGVzdF9iaXQoTlZNRV9BRVJfTk9USUNFX05TX0NIQU5HRUQsIFxcdTAwMjZjdHJsLVxcdTAwM2VldmVudHMpKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NjY0OlxcdFxcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2NS0jaWZkZWYgQ09ORklHX05WTUVfTVVMVElQQVRIXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDg4MD1zdGF0aWMgYm9vbCBudm1lX2hhbmRsZV9hZW5fbm90aWNlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiByZXN1bHQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDg4Ny1cXHRcXHRzZXRfYml0KE5WTUVfQUVSX05PVElDRV9OU19DSEFOR0VELCBcXHUwMDI2Y3RybC1cXHUwMDNlZXZlbnRzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDg4ODpcXHRcXHRudm1lX3F1ZXVlX3NjYW4oY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ4ODktXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTEwND12b2lkIG52bWVfc3RhcnRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMjQtXFx0aWYgKGN0cmwtXFx1MDAzZXF1ZXVlX2NvdW50IFxcdTAwM2UgMSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MTI1OlxcdFxcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEyNi1cXHRcXHRudm1lX3VucXVpZXNjZV9pb19xdWV1ZXMoY3RybCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjAwLjA2NzcxMjc0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODgxODYzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlZNZSBOYW1lc3BhY2UgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBuZXcgTlZNZSBiZWhhdmlvciwgYW5kIGl0IGxvb2tzIGxpa2UgYG52bWVfcGFzc3RocnVfZW5kYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQncyB0cmlnZ2VyaW5nIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLiBIbW0sIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG52bWVfbnNfb3BlbmVycyhucylgIHdpdGhpbiBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AuIEludGVyZXN0aW5nLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGhpdCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AgKndpdGhvdXQqIGdvaW5nIHRocm91Z2ggYG52bWVfcGFzc3RocnVfZW5kYD9cblxuWWVzLCBsb29rcyBsaWtlIHdlIGNhbiB0aHJvdWdoIEFzeW5jaHJvbm91cyBFdmVudCBOb3RpZmljYXRpb24gKEFFTikuIFRoYXQgbGVhZHMgdXMgZG93biB0aGUgcmFiYml0IGhvbGUgb2YgYG52bWVfaGFuZGxlX2Flbl9ub3RpY2VgIC1cdTAwM2UgYG52bWVfcXVldWVfc2NhbmAgLVx1MDAzZSBgbnZtZV9zY2FuX3dvcmtgIC1cdTAwM2UgYG52bWVfc2Nhbl9uc19saXN0YCAtXHUwMDNlIGBudm1lX3NjYW5fbnNgIC1cdTAwM2UgYG52bWVfdmFsaWRhdGVfbnNgIC1cdTAwM2UgYG52bWVfdXBkYXRlX25zX2luZm9gIC1cdTAwM2UgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLiBHb3QgaXQuIEFuZCBzaW5jZSBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBpc24ndCBzZXQgaW4gdGhpcyBzY2VuYXJpbywgaWYgYSBuYW1lc3BhY2UgaXMgY3VycmVudGx5IGluIHVzZSBhbmQgdGhlIGZvcm1hdCBjaGFuZ2VzLCBpdCdzIGdvaW5nIHRvIGJlIHJlZnVzZWQuIEV4Y2VsbGVudCwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBvc3NpYmxlIHBhdGhzLlxuXG5BbHJpZ2h0LCBzbyB0aGUgbWFqb3Igc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBudm1lX3Bhc3N0aHJ1X2VuZGAsIGBudm1lX3F1ZXVlX3NjYW5gLCBgbnZtZV92YWxpZGF0ZV9uc2AsIGFuZCBgbnZtZV9oYW5kbGVfYWVuX25vdGljZWAuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgYG52bWVfcGFzc3RocnVfZW5kYCBpcyBleHBvcnRlZCwgdGhhdCdzIGdvb2QuIGBudm1lX3F1ZXVlX3NjYW5gIGlzIGFsc28gZXhwb3J0ZWQuIGBudm1lX3ZhbGlkYXRlX25zYCBpcyBzdGF0aWMsIGFuZCBzbyBpcyBgbnZtZV9oYW5kbGVfYWVuX25vdGljZWAuIFRoaXMgY2hhbmdlcyB0aGluZ3Mgc2xpZ2h0bHksIGJ1dCBub3QgaHVnZWx5LlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBgbnZtZV9wYXNzdGhydV9lbmRgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGU7IGl0J3MgZXhwbGljaXRseSBjYWxsZWQgd2hlbiBhbiBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmQgY29tcGxldGVzLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBMZXQgbWUgY2hlY2sgYG52bWVfcXVldWVfc2NhbmAuIEl0J3MgY2FsbGVkIGluIGEgZmV3IGRpZmZlcmVudCBwbGFjZXMsIGxldCBtZSBjaGVjayBgbnZtZV9zY2FuX3dvcmtgIGFsc28uXG5cbk9rYXksIGJhY2sgdG8gYG52bWVfcGFzc3RocnVfZW5kYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXQgY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg0OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjowOC45NDk1Nzg0ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjcxODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfcGFzc3RocnVfZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNjk9RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9zdGFydCwgXFxcIk5WTUVfVEFSR0VUX1BBU1NUSFJVXFxcIik7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyNzAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNzE6dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcyLVxcdFxcdCAgICAgICBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsIGludCBzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEzMjE6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9lbmQsIFxcXCJOVk1FX1RBUkdFVF9QQVNTVEhSVVxcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIyLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz0xNjE9c3RhdGljIGludCBudm1lX3N1Ym1pdF91c2VyX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMTk2LVxcdGlmIChlZmZlY3RzKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MTk3OlxcdFxcdG52bWVfcGFzc3RocnVfZW5kKGN0cmwsIG5zLCBlZmZlY3RzLCBjbWQsIHJldCk7XFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0xOTgtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMjk1PWludCBudm1lX2V4ZWN1dGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGF0X2hlYWQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMjk2OnZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTI5Ny1cXHRcXHQgICAgICAgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLCBpbnQgc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYz0yMTQ9c3RhdGljIHZvaWQgbnZtZXRfcGFzc3RocnVfZXhlY3V0ZV9jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3Bhc3N0aHJ1LmMtMjQ1LVxcdGlmIChlZmZlY3RzKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYzoyNDY6XFx0XFx0bnZtZV9wYXNzdGhydV9lbmQoY3RybCwgbnMsIGVmZmVjdHMsIHJlcS1cXHUwMDNlY21kLCBzdGF0dXMpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYy0yNDctfVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jPTI5Nz1zdGF0aWMgdm9pZCBudm1ldF9wYXNzdGhydV9leGVjdXRlX2NtZChzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3Bhc3N0aHJ1LmMtMzQ0LVxcdCAqIG5vbi10cml2aWFsIGVmZmVjdHMsIG1ha2Ugc3VyZSB0byBleGVjdXRlIHRoZSBjb21tYW5kIHN5bmNocm9ub3VzbHlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3Bhc3N0aHJ1LmM6MzQ1OlxcdCAqIGluIGEgd29ya3F1ZXVlIHNvIHRoYXQgbnZtZV9wYXNzdGhydV9lbmQgZ2V0cyBjYWxsZWQuXFxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jLTM0Ni1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6MDkuMDA0MjU1MjQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTA3NDkzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5WTWUgUGFzc3Rocm91Z2ggQ29tbWFuZCBFeGVjdXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGBudm1lX3Bhc3N0aHJ1X2VuZGAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQncyB0aGUgZW5kcG9pbnQgZm9yIGJvdGggdXNlci1zcGFjZSBpbml0aWF0ZWQgTlZNZSBwYXNzdGhyb3VnaCBjb21tYW5kcyB2aWEgYG52bWVfc3VibWl0X3VzZXJfY21kYCAod2hpY2gsIEkgcmVjYWxsLCB1c2VzIGlvY3RsKSAqYW5kKiBjb21tYW5kcyBmcm9tIHRoZSBOVk1lIHRhcmdldCBzaWRlLCBzcGVjaWZpY2FsbHkgYG52bWV0X3Bhc3N0aHJ1X2V4ZWN1dGVfY21kX3dvcmtgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgbWVhbnMgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIGNvbW1hbmRzIHNlbnQgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2Ug4oCTIGNvbW1hbmRzIGxpa2UgXCJmb3JtYXQgTlZNLlwiXG5cblRoZSBvdGhlciBwYXRoIG9mIGludGVyZXN0IGlzIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCwgY2FsbGVkIGR1cmluZyBuYW1lc3BhY2Ugc2NhbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLCBidXQgaXQncyBub3QgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gZm9jdXMgb24sIGFsdGhvdWdoIGl0ICppcyogcGFydCBvZiBhIGNyaXRpY2FsIHBhdGguIFNvLCBgbnZtZV9zdWJtaXRfdXNlcl9jbWRgIGFuZCBgbnZtZV9wYXNzdGhydV9lbmRgIGFyZSB0aGUgaW1tZWRpYXRlIHRhcmdldHMgZm9yIHNjcnV0aW55IGhlcmUsIGFzIHRoZXkncmUgdGhlIGV4cG9zZWQgZW50cnkgcG9pbnRzLiBBbHNvLCBJJ2xsIG5lZWQgdG8gY2hlY2sgYG52bWVfc2Nhbl93b3JrYCB0byB1bmRlcnN0YW5kIHRoZSBzY2FucywgdGhvdWdoIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgY2FsbGVkLiBNeSBmaXJzdCBmb2N1cywgaG93ZXZlciwgd2lsbCBiZSBvbiBob3cgYG52bWVfc3VibWl0X3VzZXJfY21kYCBoYW5kbGVzIHRoaXMuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU0MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjoxMy45MTUwMDgxNTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mzg1NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfc3VibWl0X3VzZXJfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz0xMjQ9c3RhdGljIGludCBudm1lX21hcF91c2VyX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgdTY0IHVidWZmZXIsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTE2MC1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjE2MTpzdGF0aWMgaW50IG52bWVfc3VibWl0X3VzZXJfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMTYyLVxcdFxcdHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtZCwgdTY0IHVidWZmZXIsIHVuc2lnbmVkIGJ1ZmZsZW4sXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTIwNT1zdGF0aWMgaW50IG52bWVfc3VibWl0X2lvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfdXNlcl9pbyBfX3VzZXIgKnVpbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMjYyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MjYzOlxcdHJldHVybiBudm1lX3N1Ym1pdF91c2VyX2NtZChucy1cXHUwMDNlcXVldWUsIFxcdTAwMjZjLCBpby5hZGRyLCBsZW5ndGgsIG1ldGFkYXRhLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMjY0LVxcdFxcdFxcdG1ldGFfbGVuLCBOVUxMLCAwLCAwKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM9MjgwPXN0YXRpYyBpbnQgbnZtZV91c2VyX2NtZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTMxNS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjMxNjpcXHRzdGF0dXMgPSBudm1lX3N1Ym1pdF91c2VyX2NtZChucyA/IG5zLVxcdTAwM2VxdWV1ZSA6IGN0cmwtXFx1MDAzZWFkbWluX3EsIFxcdTAwMjZjLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMzE3LVxcdFxcdFxcdGNtZC5hZGRyLCBjbWQuZGF0YV9sZW4sIG52bWVfdG9fdXNlcl9wdHIoY21kLm1ldGFkYXRhKSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM9MzI4PXN0YXRpYyBpbnQgbnZtZV91c2VyX2NtZDY0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMzYyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MzYzOlxcdHN0YXR1cyA9IG52bWVfc3VibWl0X3VzZXJfY21kKG5zID8gbnMtXFx1MDAzZXF1ZXVlIDogY3RybC1cXHUwMDNlYWRtaW5fcSwgXFx1MDAyNmMsXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0zNjQtXFx0XFx0XFx0Y21kLmFkZHIsIGNtZC5kYXRhX2xlbiwgbnZtZV90b191c2VyX3B0cihjbWQubWV0YWRhdGEpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjoxMy45NjQzOTkxMzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMTY2NjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOVk1lIEtlcm5lbCBNb2R1bGUgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgTlZNZSBkcml2ZXIgY29kZSBhZ2Fpbi4gTGV0J3Mgc2VlLi4uIHRoZSBgbnZtZV91c2VyX2NtZGAgYW5kIGBudm1lX3VzZXJfY21kNjRgIGZ1bmN0aW9ucyBqdW1wIG91dCBpbW1lZGlhdGVseSBhcyB0aGUga2V5IGlvY3RsIGhhbmRsZXJzLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBrZWVwIGFuIGV5ZSBvbiBgbnZtZV9wYXNzdGhydV9lbmRgIGFzIGEgY3JpdGljYWwgc3ltYm9sLCBnaXZlbiBpdHMgbmFtZS4gQW5kLCBvZiBjb3Vyc2UsIGBudm1lX3F1ZXVlX3NjYW5g4oCUdGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlcyB0aGUgYWN0dWFsIHNjYW4sIHJpZ2h0PyBUaGF0J3MgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciB0aG91Z2gsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnZvbHZlZC4gTG9va3MgbGlrZSBgQkxLX0RFVl9OVk1FYCBpcyB0aGUgbW9zdCBvYnZpb3VzIG9uZSwgYnV0IGhhbmcgb24gYSBtaW51dGUuLi4gV2FpdCwgaXQncyBgTlZNRV9DT1JFYCB0aGF0IGFjdHVhbGx5IGNvbXBpbGVzIGBjb3JlLmNgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGZvciBhbnkgY29uZmlndXJhdGlvbiB3b3JrLiBOb3cgSSBjYW4gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBtb2R1bGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjoxOC4wOTYwNjg3NzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjMyNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWUtY29yZS15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19OVk1FX0FQUExFKVxcdFxcdCs9IG52bWUtYXBwbGUub1xcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjEzOm52bWUtY29yZS15XFx0XFx0XFx0XFx0Kz0gY29yZS5vIGlvY3RsLm8gc3lzZnMubyBwci5vXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUtMTQtbnZtZS1jb3JlLSQoQ09ORklHX05WTUVfVkVSQk9TRV9FUlJPUlMpXFx0Kz0gY29uc3RhbnRzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6MTguMTQ0MzA1ODMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjE0MTk3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBOVk1lIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYE5WTUVfQ09SRWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHN5bWJvbCByZWxhdGVkIHRvIHRoZSBjb3JlIE5WTWUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYG52bWUtY29yZS5vYC4gVGltZSB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nIGNydWNpYWwuIEknbSBnb2luZyB0byByZXZpc2l0IGBkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIG9yIHRvIHZlcmlmeSBhIHByZXZpb3VzIGFzc3VtcHRpb24uIFRoaXMgbW9kdWxlIGNvbmZpZ3VyYXRpb24gaXMgZnVuZGFtZW50YWwsIGFuZCBpdCdzIGFsd2F5cyBnb29kIHRvIGhhdmUgdGhhdCBrbm93bGVkZ2UgZnJlc2ggaW4gbXkgbWluZCB3aGVuIEknbSB3b3JraW5nIHdpdGggdGhlIE5WTWUgc3Vic3lzdGVtLiBMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjoyMS44MDU3Mjg3MjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Nzg2MDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6Mjpjb25maWcgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjIyLjA5MzU5NTgxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM0NjE5MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5WTWUgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBOVk1lIGRyaXZlciBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhlIGtleSBkZWNpc2lvbiBwb2ludHMgYXJlLiBUaGUgYE5WTUVfQ09SRWAgc3ltYm9sLi4uIHRoYXQncyB0aGUgdHJpY2t5IG9uZS4gSXQncyBhIHRyaXN0YXRlLCBhbmQgdGhlIGNvZGUgZG9lc24ndCBkaXJlY3RseSBvZmZlciBhIHByb21wdCBmb3IgaXQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyBidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQg4oCTIGlzIGJlaW5nIGRldGVybWluZWQgaW1wbGljaXRseSwgbGlrZWx5IGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mICpvdGhlciogb3B0aW9ucyBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiB0cmFjaW5nIHRoZSBkZXBlbmRlbmNpZXM7IEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB3aGljaCBvdGhlciBjb25maWdzIGFyZSBkcml2aW5nIHRoZSBzdGF0ZSBvZiBgTlZNRV9DT1JFYC5cblxuVGhlbiwgd2UgaGF2ZSBgQkxLX0RFVl9OVk1FYC4gVGhhdCdzIHRoZSBtYWluIGRyaXZlciBzeW1ib2wsIHRoZSBvbmUgdGhhdCBtb3N0IGZvbGtzIHdpbGwgaW50ZXJhY3Qgd2l0aCBkaXJlY3RseS4gVGhhdCdzIHRoZSBvbmUgSSdkIGV4cGVjdCB0byBzZWUgcHJvbWluZW50bHkgaW4gdGhlIG1lbnVjb25maWcsIGFuZCB0aGF0J3Mgd2hlcmUgSSdkIHN0YXJ0LiBJZiB0aGF0IGlzbid0IHNlbGVjdGVkIHRoZW4gdGhlcmUgaXMgbm8gd2F5IHRoYXQgYW55IG90aGVyIE5WTWUgY29uZmlnIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjI1LjgyODIxNjg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ1Njk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTlZNRV9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz01PWNvbmZpZyBCTEtfREVWX05WTUVcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNy1cXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6ODpcXHRzZWxlY3QgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NDc9Y29uZmlnIE5WTUVfRkFCUklDU1xcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NDg6XFx0c2VsZWN0IE5WTUVfQ09SRVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNDktXFx0c2VsZWN0IE5WTUVfS0VZUklORyBpZiBOVk1FX1RDUF9UTFNcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9MTI1PWNvbmZpZyBOVk1FX0FQUExFXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEyOS1cXHRkZXBlbmRzIG9uIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoxMzA6XFx0c2VsZWN0IE5WTUVfQ09SRVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTMxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6MjUuODc0NjgxNDk1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDc0MjQwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBxdWljayB0YWtlIG9uIHRoaXMuXG5cbioqTlZNZSBOYW1lc3BhY2UgQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgYEJMS19ERVZfTlZNRWAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGF0J3MgZW5vdWdoIHRvIGRlZmluZSB0aGUgYmFzZSBOVk1lIGRldmljZS4gTm93LCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTGV0J3MgbG9vayBhdCBgbnZtZV9uc19vcGVuZXJzYC4gQWhhLCBpdCdzIHVzaW5nIGBudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLVx1MDAzZWhlYWQpYC4gIFRoaXMgaXMga2V5LCBub3cgdGhlIHF1ZXN0aW9uIGlzOiAgZG8gd2UgKm5lZWQqIGBDT05GSUdfTlZNRV9NVUxUSVBBVEhgIGVuYWJsZWQgZm9yIHRoYXQgZnVuY3Rpb24gY2FsbCB0byB3b3JrIGFzIGV4cGVjdGVkPyBUaGF0J3Mgd2hhdCBJIG5lZWQgdG8gdmVyaWZ5LiBUaGlzIGltcGxpZXMgaXQgbWlnaHQgYmUgdGllZCB0byBtdWx0aXBhdGggY29uZmlndXJhdGlvbnMgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZGVwZW5kZW5jeSBpcyBoYXJkLCBvciBzb2Z0LCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk1NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjMwLjYyMjEwODg1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NzMyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV9uc19oZWFkX211bHRpcGF0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9udm1lLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTUzMT1zdHJ1Y3QgbnZtZV9uc19oZWFkIHtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC01ODEtXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjU4MjpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9uc19oZWFkX211bHRpcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC01ODMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjozMC42Njk4ODgwNTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTYxMjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGFuIElubGluZSBGdW5jdGlvbiBEZWZpbml0aW9uKipcblxuT2theSwgc28gSSd2ZSBlbmNvdW50ZXJlZCB3aGF0IGxvb2tzIGxpa2UgYW4gaW5saW5lIGZ1bmN0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFwiaW5saW5lXCIga2V5d29yZC9kaXJlY3RpdmUgLSBpcyBpdCBqdXN0IGEgc3VnZ2VzdGlvbiB0byB0aGUgY29tcGlsZXI/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBpdCdzIGxpa2VseSB0byBlbmFibGU/IFdoYXQncyB0aGUgdHJhZGUtb2ZmIGJldHdlZW4gY29kZSBzaXplIGFuZCBwZXJmb3JtYW5jZSBpbiB0aGlzIHNwZWNpZmljIGluc3RhbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY29kZSBhbmQgcmVhbGx5IGV2YWx1YXRlIGl0cyBpbnRlbmRlZCB1c2UgYW5kIGJlaGF2aW9yLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGlzIGNvbnRleHQuIEkgd2lsbCBhbHNvIGFzc2VzcyB3aGV0aGVyIHRoZSBvcHRpbWl6YXRpb25zIGl0IHByb3ZpZGVzIGFyZSB0cnVseSBiZW5lZmljaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjMzLjc0OTUwMzczMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvaG9zdC9udm1lLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdH07XFxuIDU4MTpcXHRcXG4gNTgyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX25zX2hlYWRfbXVsdGlwYXRoKHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQpXFxuIDU4MzpcXHR7XFxuIDU4NDpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfTlZNRV9NVUxUSVBBVEgpIFxcdTAwMjZcXHUwMDI2IGhlYWQtXFx1MDAzZWRpc2s7XFxuIDU4NTpcXHR9XFxuIDU4NjpcXHRcXG4gNTg3OlxcdGVudW0gbnZtZV9uc19mZWF0dXJlcyB7XFxuIDU4ODpcXHRcXHROVk1FX05TX0VYVF9MQkFTID0gMSBcXHUwMDNjXFx1MDAzYyAwLCAvKiBzdXBwb3J0IGV4dGVuZGVkIExCQSBmb3JtYXQgKi9cXG4gNTg5OlxcdFxcdE5WTUVfTlNfTUVUQURBVEFfU1VQUE9SVEVEID0gMSBcXHUwMDNjXFx1MDAzYyAxLCAvKiBzdXBwb3J0IGdldHRpbmcgZ2VuZXJhdGVkIG1kICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjMzLjc0OTYwNDI3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE2NzkyNzQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTlZNZSBDb2RlIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTlZNZSBkcml2ZXIuIEkgc2VlIHRoYXQgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgaXMgdXNlZCwgYnV0IHRoZSBwYXRjaCBpdHNlbGYgaXNuJ3Qgc3RyaWN0bHkgZGVwZW5kZW50IG9uIGl0IHRvIGZ1bmN0aW9uLiBIb3dldmVyLCBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBtdWx0aXBhdGggYnJhbmNoIHdpdGhpbiBgbnZtZV9uc19vcGVuZXJzYCwgSSdsbCAqZGVmaW5pdGVseSogbmVlZCBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBlbmFibGVkLiBTbywgSSBzaG91bGQgYWRkIGBOVk1FX01VTFRJUEFUSGAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LlxuXG5MZXQncyBzZWUsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUuIEkndmUgZ290IGBCTEtfREVWX05WTUVgLCB3aGljaCBpcyB0aGUgUENJZSBOVk1lIGRyaXZlciBpdHNlbGYuIFRoYXQncyBlbXVsYXRlZCBieSBRRU1VLCBzbyB0aGF0IGxvb2tzIGdvb2QsIGFuZCBvYnZpb3VzbHkgSSd2ZSBnb3QgYE5WTUVfTVVMVElQQVRIYCBhbHJlYWR5LiBUaG9zZSB0d28gdG9nZXRoZXIgc2hvdWxkIHByb3ZpZGUgYSBzb2xpZCBiYXNlLlxuXG5Ob3csIEknbSBmb2N1c2luZyBvbiBrZXkgc3ltYm9scy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlYWNoYWJpbGl0eSBvZiBmdW5jdGlvbnMsIHNvIEknbSBob25pbmcgaW4gb24gYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfcXVldWVfc2NhbmAuXG5cbkZpcnN0LCBsZXQncyB2ZXJpZnkgYG52bWVfcGFzc3RocnVfZW5kYCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UuIFllcCwgaXQgaXMgdmlhIHRoZSBgbnZtZV91c2VyX2NtZGAgaW9jdGwuIEdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgYG52bWVfcXVldWVfc2NhbmAgaXMgcmVhY2hhYmxlLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBudm1lX3F1ZXVlX3NjYW5gIGlzIHJlYWNoYWJsZSB2aWEgYG52bWVfcGFzc3RocnVfZW5kYCAoaW4gc29tZSBwYXRocykgb3IgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKSBoYW5kbGluZywgd2hpY2ggaXMgYSBnb29kIHBhdGggdG8gaGF2ZS5cblxuTGV0J3MgZGl2ZSBpbnRvIHNvbWUgb2YgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zLCBzdGFydGluZyB3aXRoIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYC4gT2gsIHRoYXQncyBzdGF0aWMuIE5vdCByZWFsbHkgdXNlZnVsIGFzIGEgcHJpbWFyeSBmb2N1cyBzeW1ib2wuIEhtbSwgYG52bWVfdmFsaWRhdGVfbnNgIGlzIHN0YXRpYyB0b28uIE9rYXksIGxldCdzIHNlZS4gV2FpdCwgYG52bWVfc2Nhbl93b3JrYCBpcyBzdGF0aWMuIEFsc28gc3RhdGljLiBIb3cgYWJvdXQgYG52bWVfc2Nhbl9uc19saXN0YD8gU3RhdGljLiBBbmQgYG52bWVfYWxsb2NfbnNgIGlzIHN0YXRpYy4gYG52bWVfc2Nhbl9uc2A/IFN0YXRpYy4gYG52bWVfdXBkYXRlX25zX2luZm9gIGlzIHN0YXRpYy4gQW5kIGBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWNgIGlzIHN0YXRpYy4gQWxyaWdodCwgdGhhdCdzIGEgd2hvbGUgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9ucyFcblxuTm93LCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2A/IE5vcGUsIGl0J3MgY2FsbGVkIGZyb20gYG52bWVfdXBkYXRlX25zX2luZm9gLiBgbnZtZV91cGRhdGVfbnNfaW5mb2AgaXMgY2FsbGVkIGZyb20gYG52bWVfYWxsb2NfbnNgIGFuZCBgbnZtZV92YWxpZGF0ZV9uc2AuIEFuZCBgbnZtZV9hbGxvY19uc2AgaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl9uc2AuIEFsc28gYG52bWVfdmFsaWRhdGVfbnNgIGlzIGNhbGxlZCBmcm9tIGBudm1lX3NjYW5fbnNgLiBUaGVuLCBgbnZtZV9zY2FuX25zYCBpcyBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX25zX2FzeW5jYCBhbmQgYG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsYC4gRnVydGhlciwgYG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsYCBpcyBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX3dvcmtgLiBBbmQgYG52bWVfc2Nhbl9uc19hc3luY2AgaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl9uc19saXN0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl93b3JrYC4gRmluYWxseSwgYG52bWVfc2Nhbl93b3JrYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgc2NoZWR1bGVkIGJ5IGBudm1lX3F1ZXVlX3NjYW5gLlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoYXQgY2hhaW4sIGl0IHNlZW1zIGNsZWFyIHRoYXQgYG52bWVfcXVldWVfc2NhbmAgaXMgdGhlIGJlc3Qgbm9uLXN0YXRpYyBmdW5jdGlvbiB0byBmb2N1cyBvbiBmb3IgdGhlIG5hbWVzcGFjZSBzY2FuIGZ1bmN0aW9uYWxpdHkuIEFuZCwgYXMgcHJldmlvdXNseSBpZGVudGlmaWVkLCBgbnZtZV9wYXNzdGhydV9lbmRgIHJlbWFpbnMgdGhlIGJlc3QgZm9yIHBhc3N0aHJvdWdoIG9wZXJhdGlvbnMuXG5cbkknbGwgZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxldmFudCBleHBvcnRlZCBmdW5jdGlvbnMsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGJ1dCB0aGVzZSB0d28gbG9vayBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjo0My45MTc1MzUwOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5Mjg5NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbnZtZV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01OD1NT0RVTEVfUEFSTV9ERVNDKGlvX3RpbWVvdXQsIFxcXCJ0aW1lb3V0IGluIHNlY29uZHMgZm9yIEkvT1xcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1OTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2lvX3RpbWVvdXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02MC1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjA9c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm52bWVfd3E7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3dxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTIyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjM9c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm52bWVfcmVzZXRfd3E7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNDpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3Jlc2V0X3dxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjY9c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm52bWVfZGVsZXRlX3dxO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjc6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9kZWxldGVfd3EpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjgtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTczPWludCBudm1lX3RyeV9zY2hlZF9yZXNldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE4MC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE4MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3RyeV9zY2hlZF9yZXNldCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE4Mi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMTU9aW50IG52bWVfcmVzZXRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyMi19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3Jlc2V0X2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjQtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU5PWludCBudm1lX2RlbGV0ZV9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjY2LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjY3OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZGVsZXRlX2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNjgtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTA4PXZvaWQgbnZtZV9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMi19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUxMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NvbXBsZXRlX3JxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTE0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MTU9dm9pZCBudm1lX2NvbXBsZXRlX2JhdGNoX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUyMC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUyMTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NvbXBsZXRlX2JhdGNoX3JlcSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUyMi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01Mjk9YmxrX3N0YXR1c190IG52bWVfaG9zdF9wYXRoX2Vycm9yKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM1LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTM2OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfaG9zdF9wYXRoX2Vycm9yKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01Mzg9Ym9vbCBudm1lX2NhbmNlbF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTUxLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTUyOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfY2FuY2VsX3JlcXVlc3QpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NTMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU1ND12b2lkIG52bWVfY2FuY2VsX3RhZ3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU2MS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU2MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NhbmNlbF90YWdzZXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NjMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU2ND12b2lkIG52bWVfY2FuY2VsX2FkbWluX3RhZ3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU3MS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU3MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NhbmNlbF9hZG1pbl90YWdzZXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NzMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU3ND1ib29sIG52bWVfY2hhbmdlX2N0cmxfc3RhdGUoc3RydWN0IG52bWVfY3RybCAqY3RybCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02NjctfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo2Njg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jaGFuZ2VfY3RybF9zdGF0ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTY2OS1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz02NzQ9Ym9vbCBudm1lX3dhaXRfcmVzZXQoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02ODAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo2ODE6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV93YWl0X3Jlc2V0KTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNjgyLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTcyMT12b2lkIG52bWVfcHV0X25zKHN0cnVjdCBudm1lX25zICpucylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03MjQtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo3MjU6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wdXRfbnMsIFxcXCJOVk1FX1RBUkdFVF9QQVNTVEhSVVxcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03MjYtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NzM2PXZvaWQgbnZtZV9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IG52bWVfY29tbWFuZCAqY21kKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTc2MC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjc2MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfcmVxdWVzdCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTc2Mi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz03NzI9YmxrX3N0YXR1c190IG52bWVfZmFpbF9ub25yZWFkeV9jb21tYW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNzg4LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Nzg5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZmFpbF9ub25yZWFkeV9jb21tYW5kKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNzkwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz03OTE9Ym9vbCBfX252bWVfY2hlY2tfcmVhZHkoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTgyOS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjgzMDpFWFBPUlRfU1lNQk9MX0dQTChfX252bWVfY2hlY2tfcmVhZHkpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy04MzEtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTA4Mz12b2lkIG52bWVfY2xlYW51cF9jbWQoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMDk0LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTA5NTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NsZWFudXBfY21kKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTA5Ni1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTA5Nz1ibGtfc3RhdHVzX3QgbnZtZV9zZXR1cF9jbWQoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTExNDktfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMTUwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc2V0dXBfY21kKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE1MS1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMTU4PWludCBudm1lX2V4ZWN1dGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGF0X2hlYWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE2OC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjExNjk6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9leGVjdXRlX3JxLCBcXFwiTlZNRV9UQVJHRVRfUEFTU1RIUlVcXFwiKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE3MC1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMTc1PWludCBfX252bWVfc3VibWl0X3N5bmNfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTIxMS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMTI6RVhQT1JUX1NZTUJPTF9HUEwoX19udm1lX3N1Ym1pdF9zeW5jX2NtZCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyMTMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyMTQ9aW50IG52bWVfc3VibWl0X3N5bmNfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTIxOS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMjA6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zdWJtaXRfc3luY19jbWQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjIxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjIyPXUzMiBudm1lX2NvbW1hbmRfZWZmZWN0cyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHU4IG9wY29kZSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjQ4LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI0OTpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX2NvbW1hbmRfZWZmZWN0cywgXFxcIk5WTUVfVEFSR0VUX1BBU1NUSFJVXFxcIik7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyNTAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNTE9dTMyIG52bWVfcGFzc3RocnVfc3RhcnQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1OCBvcGNvZGUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI2OC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNjk6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9zdGFydCwgXFxcIk5WTUVfVEFSR0VUX1BBU1NUSFJVXFxcIik7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyNzAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEzMjAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMzIxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfZW5kLCBcXFwiTlZNRV9UQVJHRVRfUEFTU1RIUlVcXFwiKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNDM2PXZvaWQgbnZtZV9zdG9wX2tlZXBfYWxpdmUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xNDQyLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTQ0MzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3N0b3Bfa2VlcF9hbGl2ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE0NDQtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTcyNT1pbnQgbnZtZV9zZXRfZmVhdHVyZXMoc3RydWN0IG52bWVfY3RybCAqZGV2LCB1bnNpZ25lZCBpbnQgZmlkLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3MzEtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxNzMyOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc2V0X2ZlYXR1cmVzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTczMy1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTczND1pbnQgbnZtZV9nZXRfZmVhdHVyZXMoc3RydWN0IG52bWVfY3RybCAqZGV2LCB1bnNpZ25lZCBpbnQgZmlkLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3NDAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxNzQxOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZ2V0X2ZlYXR1cmVzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTc0Mi1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTc0Mz1pbnQgbnZtZV9zZXRfcXVldWVfY291bnQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgaW50ICpjb3VudClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xNzc0LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTc3NTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3NldF9xdWV1ZV9jb3VudCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3NzYtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9Mjc1OD1pbnQgbnZtZV9kaXNhYmxlX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBzaHV0ZG93bilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNzgxLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Mjc4MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2Rpc2FibGVfY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI3ODMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTI3ODQ9aW50IG52bWVfZW5hYmxlX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yODYwLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Mjg2MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2VuYWJsZV9jdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjg2Mi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNzc2PWludCBudm1lX2luaXRfY3RybF9maW5pc2goc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCB3YXNfc3VzcGVuZGVkKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM4NDAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzozODQxOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfaW5pdF9jdHJsX2ZpbmlzaCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM4NDItXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDE5Mz1zdHJ1Y3QgbnZtZV9ucyAqbnZtZV9maW5kX2dldF9ucyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB1bnNpZ25lZCBuc2lkKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQyMTItfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0MjEzOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfZmluZF9nZXRfbnMsIFxcXCJOVk1FX1RBUkdFVF9QQVNTVEhSVVxcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00MjE0LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ2Nzc9dm9pZCBudm1lX3JlbW92ZV9uYW1lc3BhY2VzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDcxNy19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ3MTg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9yZW1vdmVfbmFtZXNwYWNlcyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ3MTktXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDkyND12b2lkIG52bWVfY29tcGxldGVfYXN5bmNfZXZlbnQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgX19sZTE2IHN0YXR1cyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00OTYxLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDk2MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NvbXBsZXRlX2FzeW5jX2V2ZW50KTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDk2My1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDk2ND1pbnQgbnZtZV9hbGxvY19hZG1pbl90YWdfc2V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMTMtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDE0OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWxsb2NfYWRtaW5fdGFnX3NldCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMTUtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUwMTY9dm9pZCBudm1lX3JlbW92ZV9hZG1pbl90YWdfc2V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAyNy19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUwMjg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9yZW1vdmVfYWRtaW5fdGFnX3NldCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMjktXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUwMzA9aW50IG52bWVfYWxsb2NfaW9fdGFnX3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDc5LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTA4MDpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2FsbG9jX2lvX3RhZ19zZXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDgxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MDgyPXZvaWQgbnZtZV9yZW1vdmVfaW9fdGFnX3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwODktfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDkwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfcmVtb3ZlX2lvX3RhZ19zZXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDkxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MDkyPXZvaWQgbnZtZV9zdG9wX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTAxLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTEwMjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3N0b3BfY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMDMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUxMDQ9dm9pZCBudm1lX3N0YXJ0X2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTMyLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTEzMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3N0YXJ0X2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTM0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MTM1PXZvaWQgbnZtZV91bmluaXRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxNDMtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5pbml0X2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTQ1LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUyMDA9aW50IG52bWVfaW5pdF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01Mjc3LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTI3ODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUyNzktXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTI4ND1pbnQgbnZtZV9hZGRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzMTAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MzExOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWRkX2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzEyLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzMTQ9dm9pZCBudm1lX21hcmtfbmFtZXNwYWNlc19kZWFkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTMyNC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzMjU6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tYXJrX25hbWVzcGFjZXNfZGVhZCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzMjYtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzMjc9dm9pZCBudm1lX3VuZnJlZXplKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTMzOC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzMzk6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV91bmZyZWV6ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNDAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzNDE9aW50IG52bWVfd2FpdF9mcmVlemVfdGltZW91dChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNTYtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MzU3OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfd2FpdF9mcmVlemVfdGltZW91dCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNTgtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzNTk9dm9pZCBudm1lX3dhaXRfZnJlZXplKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM2OS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzNzA6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV93YWl0X2ZyZWV6ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNzEtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzNzI9dm9pZCBudm1lX3N0YXJ0X2ZyZWV6ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzODgtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc3RhcnRfZnJlZXplKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM5MC1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTM5MT12b2lkIG52bWVfcXVpZXNjZV9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01Mzk5LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTQwMDpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3F1aWVzY2VfaW9fcXVldWVzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQwMS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTQwMj12b2lkIG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MDgtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDA5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MTAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0MTE9dm9pZCBudm1lX3F1aWVzY2VfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDE3LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTQxODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3F1aWVzY2VfYWRtaW5fcXVldWUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDE5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01NDIwPXZvaWQgbnZtZV91bnF1aWVzY2VfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDI0LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTQyNTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3VucXVpZXNjZV9hZG1pbl9xdWV1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MjYtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0Mjc9dm9pZCBudm1lX3N5bmNfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQzNy19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU0Mzg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zeW5jX2lvX3F1ZXVlcyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MzktXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0NDA9dm9pZCBudm1lX3N5bmNfcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQ0NS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU0NDY6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zeW5jX3F1ZXVlcyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0NDctXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0NDg9c3RydWN0IG52bWVfY3RybCAqbnZtZV9jdHJsX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDUzLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTQ1NDpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX2N0cmxfZnJvbV9maWxlLCBcXFwiTlZNRV9UQVJHRVRfUEFTU1RIUlVcXFwiKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQ1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6NDMuOTgzNDg1OTQzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTgzNTAwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqbnZtZVxcX3F1ZXVlXFxfc2NhbiBFeHBvcnQgU3RhdHVzIENoZWNrKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBudm1lX3F1ZXVlX3NjYW5gLiBJJ20gcHJldHR5IHN1cmUgaXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayBiZWZvcmUgSSBnbyBkb3duIHRoYXQgcmFiYml0IGhvbGUuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBpdHMgZXhwb3J0IHN0YXR1cy4gR290dGEgYmUgcHJlY2lzZSBoZXJlIOKAkyBhIG1pc3VuZGVyc3RhbmRpbmcgb24gdGhpcyBwb2ludCBjb3VsZCB3YXN0ZSBzaWduaWZpY2FudCB0aW1lLiBMZXQgbWUgdmVyaWZ5IHRoZSBzeW1ib2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM1MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjQ5LjQwMTgzOTAzNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzg2OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfcXVldWVfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTE1NT1zdGF0aWMgaW50IG52bWVfZ2V0X2xvZ19sc2koc3RydWN0IG52bWVfY3RybCAqY3RybCwgdTMyIG5zaWQsIHU4IGxvZ19wYWdlLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE1Ny1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTU4OnZvaWQgbnZtZV9xdWV1ZV9zY2FuKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE1OS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI3MT12b2lkIG52bWVfcGFzc3RocnVfZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTMyIGVmZmVjdHMsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5My1cXHRcXHRzZXRfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXFx1MDAyNmN0cmwtXFx1MDAzZWZsYWdzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5NDpcXHRcXHRudm1lX3F1ZXVlX3NjYW4oY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTUtXFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2Y3RybC1cXHUwMDNlc2Nhbl93b3JrKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NjE4PXN0YXRpYyB2b2lkIG52bWVfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjYzLVxcdGlmICh0ZXN0X2JpdChOVk1FX0FFUl9OT1RJQ0VfTlNfQ0hBTkdFRCwgXFx1MDAyNmN0cmwtXFx1MDAzZWV2ZW50cykpXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NjQ6XFx0XFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjY1LSNpZmRlZiBDT05GSUdfTlZNRV9NVUxUSVBBVEhcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00ODgwPXN0YXRpYyBib29sIG52bWVfaGFuZGxlX2Flbl9ub3RpY2Uoc3RydWN0IG52bWVfY3RybCAqY3RybCwgdTMyIHJlc3VsdClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00ODg3LVxcdFxcdHNldF9iaXQoTlZNRV9BRVJfTk9USUNFX05TX0NIQU5HRUQsIFxcdTAwMjZjdHJsLVxcdTAwM2VldmVudHMpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0ODg4OlxcdFxcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDg4OS1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MTA0PXZvaWQgbnZtZV9zdGFydF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEyNC1cXHRpZiAoY3RybC1cXHUwMDNlcXVldWVfY291bnQgXFx1MDAzZSAxKSB7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUxMjU6XFx0XFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTI2LVxcdFxcdG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhjdHJsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6NDkuNTMyMjMyMzQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTc4ODQ5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVk1lIERyaXZlciBDb2RlKipcblxuUmlnaHQsIGBudm1lX3F1ZXVlX3NjYW5gLiBJbnRlcmVzdGluZy4gSXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCdzICphbHNvKiBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3MgYSBrZXkgZGV0YWlsLiBJIHNlZSBpdCdzIGRlY2xhcmVkIGluIGBudm1lLmhgIGFuZCBhY3RpdmVseSB1c2VkIGJ5IG90aGVyIGZpbGVzIHJlc2lkaW5nIHdpdGhpbiBgZHJpdmVycy9udm1lL2hvc3QvYC4gVGhhdCBtYWtlcyBpdCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIHdoZW4gSSdtIHRyYWNpbmcgdGhlIGRhdGEgZmxvdy4gQSBuaWNlIHBvaW50IG9mIGNvbm5lY3Rpb24gd2l0aGluIHRoZSBkcml2ZXIuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBvdGhlciBsaWtlbHkgY2FuZGlkYXRlcy4uLiBgbnZtZV9zdWJtaXRfdXNlcl9jbWRgLiBBaCwgdGhlcmUgaXQgaXMsIHN0YXRpYyB3aXRoaW4gYGlvY3RsLmNgLiBPa2F5LCBub3RlZC4gQW5kIHdoYXQgYWJvdXQgYG52bWVfdXNlcl9jbWRgPyBTdGF0aWMsIGFsc28gaW4gYGlvY3RsLmNgLiBHb3QgaXQuIFNvLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgaW9jdGwgaGFuZGxpbmcgcm91dGluZXMuIEl0IHNlZW1zIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB1c2VyIGNvbW1hbmRzIGFyZSBoYW5kbGVkIGJ5IGVpdGhlciBgbnZtZV9kZXZfaW9jdGxgIG9yIGBudm1lX25zX2lvY3RsYC4gR29vZCB0byBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjo1NC4xNTAxMTk5NzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjA1MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfZGV2X2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz04MDY9c3RhdGljIGludCBudm1lX2Rldl91c2VyX2NtZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB2b2lkIF9fdXNlciAqYXJncCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtODQyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6ODQzOmxvbmcgbnZtZV9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy04NDQtXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjU0LjE5NzMzMzcxNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU4NjgxNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5WTWUgaW9jdGwgQ2FsbHMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBOVk1lIGRyaXZlcnMsIGFuZCB0aGUgYG52bWVfZGV2X2lvY3RsYCBmdW5jdGlvbiBqdXN0IGRvZXNuJ3Qgc2VlbSB0byBiZSBzdGF0aWMuIFRoYXQgcmFpc2VzIGEgZmxhZy4gV2UncmUgbG9va2luZyBhdCBwb3RlbnRpYWxseSBwcml2aWxlZ2VkIG9wZXJhdGlvbnMgaGVyZSwgYW5kIGlmIHRoaXMgZnVuY3Rpb24gaXNuJ3Qgc3RhdGljLCBpdCBtZWFucyBpdCdzIGFjY2Vzc2libGUgZnJvbSBicm9hZGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIG1ha2luZyBpdCBhIHdpZGVyIGF0dGFjayBzdXJmYWNlLiBBbHdheXMgaGF2ZSB0byBjb25zaWRlciB0aGF0LCBlc3BlY2lhbGx5IHdpdGggc3RvcmFnZS4gTm93LCB3aGF0IGFib3V0IGBudm1lX25zX2lvY3RsYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIFdlIGhhdmUgZGV2aWNlLWxldmVsLCBhbmQgbmFtZXNwYWNlLWxldmVsIG9wZXJhdGlvbnMuIElmIHRoZSBuYW1lc3BhY2Utc3BlY2lmaWMgb25lICppcyogc3RhdGljLCBpdCBtYWtlcyB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucyBpbiB0aGUgZGV2aWNlLWxldmVsIG9uZSBhbGwgdGhlIG1vcmUgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXIuIERlcGVuZGluZyBvbiBob3cgdGhvc2UgdHdvIGFyZSByZWxhdGVkLCB3ZSBtaWdodCBiZSBsb29raW5nIGF0IGEgd2F5IHRvIGJ5cGFzcyBjZXJ0YWluIHNlY3VyaXR5IGNoZWNrcyBvciBleHBsb2l0IGEgYnJvYWRlciBjbGFzcyBvZiB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIEFyZSB0aGVyZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzPyBDb21tb24gY29udHJvbCBwYXRocz8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBzeW1ib2wgdGFibGVzIGFuZCB4cmVmcy4gVGhpcyBtaWdodCBiZSBhIHJhYmJpdCBob2xlIHdvcnRoIGV4cGxvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjo1Ny43NTYwMTcwMDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzE3NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfbnNfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTU2Mz1zdHJ1Y3QgbnZtZV91c2VyX2lvMzIge1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy01NzktXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYzo1ODA6c3RhdGljIGludCBudm1lX25zX2lvY3RsKHN0cnVjdCBudm1lX25zICpucywgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTU4MS1cXHRcXHR2b2lkIF9fdXNlciAqYXJncCwgdW5zaWduZWQgaW50IGZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz02MTA9aW50IG52bWVfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy02MjItXFx0XFx0cmV0dXJuIG52bWVfY3RybF9pb2N0bChucy1cXHUwMDNlY3RybCwgY21kLCBhcmdwLCBvcGVuX2Zvcl93cml0ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYzo2MjM6XFx0cmV0dXJuIG52bWVfbnNfaW9jdGwobnMsIGNtZCwgYXJncCwgZmxhZ3MsIG9wZW5fZm9yX3dyaXRlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTYyNC19XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTYyNj1sb25nIG52bWVfbnNfY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtNjM0LVxcdFxcdHJldHVybiBudm1lX2N0cmxfaW9jdGwobnMtXFx1MDAzZWN0cmwsIGNtZCwgYXJncCwgb3Blbl9mb3Jfd3JpdGUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6NjM1OlxcdHJldHVybiBudm1lX25zX2lvY3RsKG5zLCBjbWQsIGFyZ3AsIDAsIG9wZW5fZm9yX3dyaXRlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTYzNi19XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTcwOD1pbnQgbnZtZV9uc19oZWFkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtNzM0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6NzM1OlxcdHJldCA9IG52bWVfbnNfaW9jdGwobnMsIGNtZCwgYXJncCwgZmxhZ3MsIG9wZW5fZm9yX3dyaXRlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTczNi1vdXRfdW5sb2NrOlxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz03NDE9bG9uZyBudm1lX25zX2hlYWRfY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03NjAtXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYzo3NjE6XFx0cmV0ID0gbnZtZV9uc19pb2N0bChucywgY21kLCBhcmdwLCAwLCBvcGVuX2Zvcl93cml0ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03NjItb3V0X3VubG9jazpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6NTcuODA0MzQwODI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDc5NDg3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlZNZSBEcml2ZXIgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBOVk1lIGRyaXZlciBwYXRjaCwgYW5kIGhlcmUncyB3aGF0IEkndmUgZ2F0aGVyZWQuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIHJlZnVzYWwgb2YgdW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZXMgb24gYW4gaW4tdXNlIG5hbWVzcGFjZSwgd2hpY2ggaXMgYSBzZW5zaWJsZSBzZWN1cml0eSBpbXByb3ZlbWVudC4gSG93ZXZlciwgdGhlIHBhdGNoIHRoZW4gaW50cm9kdWNlcyBhIGZsYWcgdG8gcGVybWl0IGZvcm1hdCBjaGFuZ2VzIGlmIHRoZSBob3N0IGV4cGxpY2l0bHkgcmVxdWVzdHMgaXQgdmlhIE5WTWUgcGFzc3Rocm91Z2ggY29tbWFuZHMuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgb3BlbiB1cCBhIG5ldyBhdHRhY2sgc3VyZmFjZSwgcGFydGljdWxhcmx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaGVuY2UgdGhlIGNvbmNlcm4uXG5cbkZyb20gYSBzeW1ib2wgcGVyc3BlY3RpdmUsIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYG52bWVfaW9jdGxgIGFuZCBgbnZtZV9kZXZfaW9jdGxgIGFzIHBvdGVudGlhbCB0YXJnZXRzLCBzaW5jZSBgbnZtZV9uc19pb2N0bGAgaXMgc3RhdGljIChhbmQgdGhlcmVmb3JlIGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUpLiBIb3dldmVyLCBgbnZtZV9wYXNzdGhydV9lbmRgIGlzIGEgKm11Y2gqIGJldHRlciBjaG9pY2UgYmVjYXVzZSBpdCdzIHJpZ2h0IHdoZXJlIHRoZSBjaGFuZ2UgaGFwcGVucywgYW5kLCBpbXBvcnRhbnRseSwgaXQncyBhbiBleHBvcnRlZCBzeW1ib2wuIFRoaXMgbWFrZXMgaXQgaWRlYWwgZm9yIGFuYWx5c2lzIGFuZCBsaWtlbHkgZnV6emluZy4gSSdtIGFsc28gaW5jbHVkaW5nIGBudm1lX3F1ZXVlX3NjYW5gIGFzIGEgZm9jdXMgc3ltYm9sLCBhbHRob3VnaCBteSBpbml0aWFsIHJlYWRpbmcgc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSBzZWNvbmRhcnkgdG8gYG52bWVfcGFzc3RocnVfZW5kYC5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyB3YXJyYW50cyBmdXp6aW5nLCBhbmQgaXQncyBkZWZpbml0ZWx5IHdvcnRoIHB1cnN1aW5nLiBgV29ydGhGdXp6aW5nOiB0cnVlYCBpcyBhcHByb3ByaWF0ZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogdGhlIHBhdGNoIGltcGFjdHMgY29yZSBOVk1lIGxvZ2ljLCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gdGhhdCBwYXNzdGhyb3VnaCBmdW5jdGlvbmFsaXR5IGFuZCB0aGF0J3MgdGhlIGFyZWEgdGhhdCBJJ2xsIGNvbmNlbnRyYXRlIG9uLlxuXG5UaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYEJMS19ERVZfTlZNRWAgYW5kIGBOVk1FX01VTFRJUEFUSGAuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNvbmZpcm0gYE5WTUVfTVVMVElQQVRIYCBpcyBhY3R1YWxseSBhIHZhbGlkIGFuZCByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiwganVzdCB0byBiZSB0aG9yb3VnaC4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGl0J3MgaW5jbHVkZWQgaW4gdGhlIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2MzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6Mzc6MDMuNDUyMjkyOTM5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ5NTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9NVUxUSVBBVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTgtXFx0Ym9vbCBcXFwiTlZNZSBtdWx0aXBhdGggc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6Mzc6MDMuNTAzNzk0NDgzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzc0NzQ1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgU3ltYm9sIFZhbGlkaXR5IGZvciBLZXJuZWwgTW9kdWxlIEludGVncmF0aW9uKipcblxuUmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBjYXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHN5bWJvbHMgYXJlIGFjY2Vzc2libGUuIExldCdzIHN0YXJ0IHdpdGggYG52bWVfcGFzc3RocnVfZW5kYC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBzeW1ib2wncyBhdmFpbGFiaWxpdHkg4oCTIHllcCwgaXQncyBwcm9wZXJseSBleHBvcnRlZC4gVGhhdCdzIGEgZ29vZCBzdGFydC4gTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYG52bWVfcXVldWVfc2NhbmAgdG8gY29uZmlybSBpdCdzIHZpc2libGUuIE9rYXksIGl0J3Mgbm90IHN0YXRpYyBhbmQgYXBwZWFycyB0byBiZSB1c2VkIGluIG11bHRpcGxlIGZpbGVzLCBzbyB0aGF0IHNob3VsZCBiZSBva2F5IHRvby4gR2l2ZW4gdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSB2YWxpZCwgSSdsbCBnbyBhaGVhZCBhbmQgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LiBUaGlzIHNob3VsZCBzZXQgdXAgdGhlIGZpbmFsIHBhcmFtZXRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzUwLCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM3OjA3Ljg4MTI3NDE0N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxODkzNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIk5WTUVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV9wYXNzdGhydV9lbmRcIixcbiAgICBcIm52bWVfcXVldWVfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIGNvcmUgZHJpdmVyIHRvIHJlZnVzZSB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyBvbiBhbiBpbi11c2UgbmFtZXNwYWNlLCBhbmQgYWRkcyBhIGZsYWcgdG8gYWxsb3cgZm9ybWF0IGNoYW5nZXMgaWYgdGhlIGhvc3QgcmVxdWVzdGVkIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIGFmZmVjdHMgY29yZSBOVk1lIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJOVk1FX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm52bWVfcGFzc3RocnVfZW5kXCIsXG4gICAgXCJudm1lX3F1ZXVlX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlZNZSBjb3JlIGRyaXZlciB0byByZWZ1c2UgdW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZXMgb24gYW4gaW4tdXNlIG5hbWVzcGFjZSwgYW5kIGFkZHMgYSBmbGFnIHRvIGFsbG93IGZvcm1hdCBjaGFuZ2VzIGlmIHRoZSBob3N0IHJlcXVlc3RlZCBpdCB2aWEgTlZNZSBwYXNzdGhyb3VnaCBjb21tYW5kcy4gVGhpcyBhZmZlY3RzIGNvcmUgTlZNZSBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNzowNy45NjMyMzU4MDlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ4ODQ2NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6Mzc6MDcuOTY1MjI5MDI5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwODQ2ODQ1MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgYW5kIHVzZXMgaXQgdG8gcHJldmVudCB1bnNvbGljaXRlZCBMQkEgZm9ybWF0IG9yIG1ldGFkYXRhIHNpemUgY2hhbmdlcyBvbiBpbi11c2UgTlZNZSBuYW1lc3BhY2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1ZSB0byBibG9jayBzaXplIGNoYW5nZXMgd2hpbGUgaW4gdXNlKSBhcmUgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI4MDcxMDJhZTBiNTA5MTE5N2YwM2I1YTQ5OWI2ODZmYmMyNmM4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE5OjM1OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCA0NTNjMWYwYjJkZDA5Li5lYmFjNWEzZDFhMDc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC0xMjg1LDggKzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuIFx0XHR9XG4gXHR9XG4gXHRpZiAoZWZmZWN0cyBcdTAwMjYgKE5WTUVfQ01EX0VGRkVDVFNfTklDIHwgTlZNRV9DTURfRUZGRUNUU19OQ0MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBob3N0IGFza2VkIGZvciB0aGlzIGNoYW5nZSwgc28gbGV0IHRoZSByZXNjYW4gYWRvcHQgdGhlXG4rXHRcdCAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhblxuK1x0XHQgKiB1bnNvbGljaXRlZCBjaGFuZ2UgaXMgcmVmdXNlZCwgc2VlIG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soKS5cbitcdFx0ICovXG4rXHRcdHNldF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZjdHJsLVx1MDAzZWZsYWdzKTtcbiBcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNmN0cmwtXHUwMDNlc2Nhbl93b3JrKTtcbitcdFx0Y2xlYXJfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2Y3RybC1cdTAwM2VmbGFncyk7XG4gXHR9XG4gXHRpZiAobnMpXG4gXHRcdHJldHVybjtcbkBAIC0yMzg0LDYgKzIzOTEsMTcgQEAgc3RhdGljIGJvb2wgbnZtZV9pbnZhbGlkX2xiYV9zeih1NjQgbnN6ZSwgc2lnbmVkIGludCBzaGlmdCwgc2VjdG9yX3QgKmNhcGFjaXR5KVxuIFx0cmV0dXJuIGNoZWNrX3NobF9vdmVyZmxvdyhuc3plLCBzaGlmdCwgY2FwYWNpdHkpO1xuIH1cbiBcbisvKlxuKyAqIE9wZW5lcnMgb2YgYSBtdWx0aXBhdGggbmFtZXNwYWNlIGdvIHRvIHRoZSBoZWFkIGRpc2s7IHRoZSBwZXItcGF0aCBkaXNrIGlzXG4rICogaGlkZGVuIGFuZCBuZXZlciBoYXMgYW55LlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcbit7XG4rXHRpZiAobnZtZV9uc19oZWFkX211bHRpcGF0aChucy1cdTAwM2VoZWFkKSlcbitcdFx0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2spO1xuK1x0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cdTAwM2VkaXNrKTtcbit9XG4rXG4gc3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbiBcdFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbiB7XG5AQCAtMjQzNiw2ICsyNDU0LDI4IEBAIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIENoYW5naW5nIHRoZSBMQkEgZm9ybWF0IG9yIHRoZSBtZXRhZGF0YSBzaXplIHJlaW50ZXJwcmV0cyBldmVyeXRoaW5nXG4rXHQgKiB0aGUgaG9zdCBoYXMgYWxyZWFkeSBjYWNoZWQsIHF1ZXVlZCBvciBoYW5kZWQgdG8gdGhlIGludGVncml0eSBjb2RlXG4rXHQgKiBmb3IgdGhpcyBuYW1lc3BhY2UsIGFuZCBmcmVlemluZyB0aGUgcXVldWUgZG9lcyBub3QgY292ZXIgYW55IG9mIGl0OlxuK1x0ICogcGFnZSBjYWNoZSBjb250ZW50cywgYmlvcyBiYXRjaGVkIG9uIGEgcGx1ZyBhbmQgdGhlIGRlZmVycmVkXG4rXHQgKiBpbnRlZ3JpdHkgdmVyaWZ5IHdvcmsgYWxsIG91dGxpdmUgdGhlIGZyZWV6ZS4gIElmIHN1Y2ggYSBjaGFuZ2VcbitcdCAqIGFycml2ZXMgdW5zb2xpY2l0ZWQgd2hpbGUgdGhlIG5hbWVzcGFjZSBpcyBpbiB1c2UsIHJlZnVzZSBpdCBhbmQgbGV0XG4rXHQgKiB0aGUgY2FsbGVyIHRha2UgdGhlIG5hbWVzcGFjZSBvZmZsaW5lIHJhdGhlciB0aGFuIGFkb3B0IGEgZ2VvbWV0cnlcbitcdCAqIHRoYXQgZGVzY3JpYmVzIHNvbWV0aGluZyBlbHNlIHRoYW4gd2hhdCB0aGUgaG9zdCBpcyBob2xkaW5nLlxuK1x0ICovXG4rXHRpZiAobnZtZV9uc19vcGVuZXJzKG5zKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhdGVzdF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZucy1cdTAwM2VjdHJsLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAobnMtXHUwMDNlaGVhZC1cdTAwM2VsYmFfc2hpZnQgIT0gaWQtXHUwMDNlbGJhZltsYmFmXS5kcyB8fFxuK1x0ICAgICBucy1cdTAwM2VoZWFkLVx1MDAzZW1zICE9IGxlMTZfdG9fY3B1KGlkLVx1MDAzZWxiYWZbbGJhZl0ubXMpKSkge1xuK1x0XHRkZXZfZXJyKG5zLVx1MDAzZWN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwidW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZSBvbiBpbi11c2UgbnNpZCAldSAobGJhX3NoaWZ0ICV1IC1cdTAwM2UgJXUsIG1zICV1IC1cdTAwM2UgJXUpXFxuXCIsXG4rXHRcdFx0aW5mby1cdTAwM2Vuc2lkLCBucy1cdTAwM2VoZWFkLVx1MDAzZWxiYV9zaGlmdCwgaWQtXHUwMDNlbGJhZltsYmFmXS5kcyxcbitcdFx0XHRucy1cdTAwM2VoZWFkLVx1MDAzZW1zLCBsZTE2X3RvX2NwdShpZC1cdTAwM2VsYmFmW2xiYWZdLm1zKSk7XG4rXHRcdHJldCA9IE5WTUVfU0NfSU5WQUxJRF9OUyB8IE5WTUVfU1RBVFVTX0ROUjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuIFxuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuaW5kZXggODI0NjUxY2M4OThkYi4uOTNjMTVkNTU4MGUzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG5AQCAtMzI5LDYgKzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHtcbiBcdE5WTUVfQ1RSTF9TS0lQX0lEX0NOU19DU1x0PSA0LFxuIFx0TlZNRV9DVFJMX0RJUlRZX0NBUEFCSUxJVFlcdD0gNSxcbiBcdE5WTUVfQ1RSTF9GUk9aRU5cdFx0PSA2LFxuK1x0TlZNRV9DVFJMX1NFTEZfUkVTQ0FOXHRcdD0gNyxcbiB9O1xuIFxuIHN0cnVjdCBudm1lX2N0cmwge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6Mzc6MDcuOTY1MjMxMjA5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODQ2ODIyNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlZNZSBOYW1lc3BhY2UgR2VvbWV0cnkgUHJvdGVjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNgIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGV5J3JlIGFkZGluZyBhIGBOVk1FX0NUUkxfU0VMRl9SRVNDQU5gIGZsYWcgdG8gYG52bWVfY3RybF9mbGFnc2AuIFRoZSBrZXkgbG9naWMgc2VlbXMgdG8gYmUgYXJvdW5kIGBudm1lX3Bhc3N0aHJ1X2VuZGAgYW5kIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYC5cblxuSW4gYG52bWVfcGFzc3RocnVfZW5kYCwgdGhleSdyZSBzZXR0aW5nIHRoaXMgbmV3IGBOVk1FX0NUUkxfU0VMRl9SRVNDQU5gIGZsYWcgYmVmb3JlIGNhbGxpbmcgYG52bWVfcXVldWVfc2NhbmAgYW5kIGNsZWFyaW5nIGl0IGFmdGVyd2FyZC4gTWFrZXMgc2Vuc2U6IHRoaXMgaW5kaWNhdGVzIGEgZGVsaWJlcmF0ZSwgY29udHJvbGxlZCByZS1zY2FuLiBUaGVuLCBpbiBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AsIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrLiBUaGV5IHZlcmlmeSBpZiB0aGUgbmFtZXNwYWNlIGlzIGluIHVzZSB2aWEgYG52bWVfbnNfb3BlbmVycyhucylgLiBJZiBpdCAqaXMqIGluIHVzZSAqYW5kKiBpdCdzICpub3QqIGEgc2VsZi1yZXNjYW4gKHRoZSBgIXRlc3RfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2bnMtXHUwMDNlY3RybC1cdTAwM2VmbGFncylgIHBhcnQpLCB0aGV5J3JlIGJsb2NraW5nIGNoYW5nZXMgdG8gdGhlIExCQSBmb3JtYXQgb3IgbWV0YWRhdGEgc2l6ZSwgcmV0dXJuaW5nIGFuIGBOVk1FX1NDX0lOVkFMSURfTlMgfCBOVk1FX1NUQVRVU19ETlJgIGVycm9yLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgcHJvdGVjdGlvbi5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhcjogcHJldmVudCB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyB0byBuYW1lc3BhY2VzIHRoYXQgYXJlIGFjdGl2ZWx5IGJlaW5nIHVzZWQuIFRoaXMgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgY29uc2VxdWVuY2VzIOKAkyBkYXRhIGNvcnJ1cHRpb24sIGNyYXNoZXMsIHlvdSBuYW1lIGl0LCBiZWNhdXNlIHRoZSBob3N0IGhhcyBjYWNoZWQgZGF0YSwgcXVldWVkIEkvT3MsIGFuZCB2ZXJpZmljYXRpb24gd29yayB0aGF0IHdvdWxkIGJlY29tZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbmV3IGdlb21ldHJ5IGlmIGNoYW5nZWQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBuby4gSXQgZG9lc24ndCBzZWVtIHRvIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gSXQgc2ltcGx5IGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IGdlb21ldHJ5IGNoYW5nZXMgd2hlbiB0aGUgbmFtZXNwYWNlIGlzIGFjdGl2ZSwgZXhjZXB0IGR1cmluZyBhIHNlbGYtcmVzY2FuLiBJdCdzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHVzZXItc3BhY2Ugc3RydWN0dXJlcywgbm9yIGFsbG9jYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcHJvYmxlbWF0aWMuIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2sgY2hhbmdlcyB0aGF0IHdvdWxkIHBlcm1pdCB1bmluaXRpYWxpemVkIGRhdGEgdG8gYmUgcmVhZC4gVGhlIG9yaWdpbmFsIGlzc3VlIHRoaXMgaXMgZml4aW5nIGlzIGxpa2VseSBkdWUgdG8gdGhlIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLCBkYXRhIGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdGhhdCBjYW4gcmVzdWx0IHdoZW4gdGhlIGJsb2NrIHNpemUgb3IgbWV0YWRhdGEgaXMgbW9kaWZpZWQgd2hpbGUgdGhlIGRldmljZSBpcyBpbiB1c2UsIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgS0FTQU4gb3IgbW9yZSBzdGFuZGFyZCBjaGVja3MgKGxpa2UgaXNzdWVzIHdpdGhpbiB0aGUgcGFnZSBjYWNoZSBvciBiaW8gaXNzdWVzKS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBgbnZtZV9wYXNzdGhydV9lbmRgIGFuZCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBOb3RoaW5nIHN0aWNrcyBvdXQuIFRoZSB2YXJpYWJsZXMgdXNlZCAoYGlkYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBudm1lX2lkX25zYCB3aGljaCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGVsc2V3aGVyZSwgYW5kIGBsYmFmYCBpcyBhbiBpbmRleCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2gganVzdCBhZGRzIGEgZmxhZyBhbmQgYSBjb25kaXRpb25hbCBjaGVjay5cblxuU28sIHllYWgsIGl0IGxvb2tzIGxpa2UgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZSBmb3IgdGhpcyBvbmUuIFRoaXMgaXMgYSBjbGVhbiwgd2VsbC1mb2N1c2VkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcmVhbCBwb3RlbnRpYWwgcHJvYmxlbSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBuZXcgc2VjdXJpdHkgY29uY2VybnMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5MCwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNzoxOC44MTIwNTc0MTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBhbmQgdXNlcyBpdCB0byBwcmV2ZW50IHVuc29saWNpdGVkIExCQSBmb3JtYXQgb3IgbWV0YWRhdGEgc2l6ZSBjaGFuZ2VzIG9uIGluLXVzZSBOVk1lIG5hbWVzcGFjZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBkYXRhIGNvcnJ1cHRpb24gb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVlIHRvIGJsb2NrIHNpemUgY2hhbmdlcyB3aGlsZSBpbiB1c2UpIGFyZSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgYW5kIHVzZXMgaXQgdG8gcHJldmVudCB1bnNvbGljaXRlZCBMQkEgZm9ybWF0IG9yIG1ldGFkYXRhIHNpemUgY2hhbmdlcyBvbiBpbi11c2UgTlZNZSBuYW1lc3BhY2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1ZSB0byBibG9jayBzaXplIGNoYW5nZXMgd2hpbGUgaW4gdXNlKSBhcmUgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow796lx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 19:33:34 +0000 UTC FinishedAt: 2026-08-11 19:37:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NVME", "NVME_MULTIPATH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NVME", "NVME_MULTIPATH" ], "series_id": "99ad8393-c9da-4b87-b7e8-511e71e5223d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nvme_passthru_end", "nvme_queue_scan" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O252bWVfcGFzc3RocnVfZW5kJiMzNDssCiAgICAmIzM0O252bWVfcXVldWVfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBhbmQgdXNlcyBpdCB0byBwcmV2ZW50IHVuc29saWNpdGVkIExCQSBmb3JtYXQgb3IgbWV0YWRhdGEgc2l6ZSBjaGFuZ2VzIG9uIGluLXVzZSBOVk1lIG5hbWVzcGFjZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBkYXRhIGNvcnJ1cHRpb24gb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVlIHRvIGJsb2NrIHNpemUgY2hhbmdlcyB3aGlsZSBpbiB1c2UpIGFyZSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5WTWUgY29yZSBkcml2ZXIgdG8gcmVmdXNlIHVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2VzIG9uIGFuIGluLXVzZSBuYW1lc3BhY2UsIGFuZCBhZGRzIGEgZmxhZyB0byBhbGxvdyBmb3JtYXQgY2hhbmdlcyBpZiB0aGUgaG9zdCByZXF1ZXN0ZWQgaXQgdmlhIE5WTWUgcGFzc3Rocm91Z2ggY29tbWFuZHMuIFRoaXMgYWZmZWN0cyBjb3JlIE5WTWUgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYyODA3MTAyYWUwYjUwOTExOTdmMDNiNWE0OTliNjg2ZmJjMjZjODFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxOTozNTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbmluZGV4IDQ1M2MxZjBiMmRkMDkuLmViYWM1YTNkMWEwNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuQEAgLTEyODUsOCAmIzQzOzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuIFx0XHR9XG4gXHR9XG4gXHRpZiAoZWZmZWN0cyBcdTAwMjYgKE5WTUVfQ01EX0VGRkVDVFNfTklDIHwgTlZNRV9DTURfRUZGRUNUU19OQ0MpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGhvc3QgYXNrZWQgZm9yIHRoaXMgY2hhbmdlLCBzbyBsZXQgdGhlIHJlc2NhbiBhZG9wdCB0aGVcbiYjNDM7XHRcdCAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhblxuJiM0MztcdFx0ICogdW5zb2xpY2l0ZWQgY2hhbmdlIGlzIHJlZnVzZWQsIHNlZSBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNldF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZjdHJsLVx1MDAzZWZsYWdzKTtcbiBcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNmN0cmwtXHUwMDNlc2Nhbl93b3JrKTtcbiYjNDM7XHRcdGNsZWFyX2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFx1MDAyNmN0cmwtXHUwMDNlZmxhZ3MpO1xuIFx0fVxuIFx0aWYgKG5zKVxuIFx0XHRyZXR1cm47XG5AQCAtMjM4NCw2ICYjNDM7MjM5MSwxNyBAQCBzdGF0aWMgYm9vbCBudm1lX2ludmFsaWRfbGJhX3N6KHU2NCBuc3plLCBzaWduZWQgaW50IHNoaWZ0LCBzZWN0b3JfdCAqY2FwYWNpdHkpXG4gXHRyZXR1cm4gY2hlY2tfc2hsX292ZXJmbG93KG5zemUsIHNoaWZ0LCBjYXBhY2l0eSk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBPcGVuZXJzIG9mIGEgbXVsdGlwYXRoIG5hbWVzcGFjZSBnbyB0byB0aGUgaGVhZCBkaXNrOyB0aGUgcGVyLXBhdGggZGlzayBpc1xuJiM0MzsgKiBoaWRkZW4gYW5kIG5ldmVyIGhhcyBhbnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG52bWVfbnNfb3BlbmVycyhzdHJ1Y3QgbnZtZV9ucyAqbnMpXG4mIzQzO3tcbiYjNDM7XHRpZiAobnZtZV9uc19oZWFkX211bHRpcGF0aChucy1cdTAwM2VoZWFkKSlcbiYjNDM7XHRcdHJldHVybiBkaXNrX29wZW5lcnMobnMtXHUwMDNlaGVhZC1cdTAwM2VkaXNrKTtcbiYjNDM7XHRyZXR1cm4gZGlza19vcGVuZXJzKG5zLVx1MDAzZWRpc2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4gXHRcdHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4ge1xuQEAgLTI0MzYsNiAmIzQzOzI0NTQsMjggQEAgc3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDaGFuZ2luZyB0aGUgTEJBIGZvcm1hdCBvciB0aGUgbWV0YWRhdGEgc2l6ZSByZWludGVycHJldHMgZXZlcnl0aGluZ1xuJiM0MztcdCAqIHRoZSBob3N0IGhhcyBhbHJlYWR5IGNhY2hlZCwgcXVldWVkIG9yIGhhbmRlZCB0byB0aGUgaW50ZWdyaXR5IGNvZGVcbiYjNDM7XHQgKiBmb3IgdGhpcyBuYW1lc3BhY2UsIGFuZCBmcmVlemluZyB0aGUgcXVldWUgZG9lcyBub3QgY292ZXIgYW55IG9mIGl0OlxuJiM0MztcdCAqIHBhZ2UgY2FjaGUgY29udGVudHMsIGJpb3MgYmF0Y2hlZCBvbiBhIHBsdWcgYW5kIHRoZSBkZWZlcnJlZFxuJiM0MztcdCAqIGludGVncml0eSB2ZXJpZnkgd29yayBhbGwgb3V0bGl2ZSB0aGUgZnJlZXplLiAgSWYgc3VjaCBhIGNoYW5nZVxuJiM0MztcdCAqIGFycml2ZXMgdW5zb2xpY2l0ZWQgd2hpbGUgdGhlIG5hbWVzcGFjZSBpcyBpbiB1c2UsIHJlZnVzZSBpdCBhbmQgbGV0XG4mIzQzO1x0ICogdGhlIGNhbGxlciB0YWtlIHRoZSBuYW1lc3BhY2Ugb2ZmbGluZSByYXRoZXIgdGhhbiBhZG9wdCBhIGdlb21ldHJ5XG4mIzQzO1x0ICogdGhhdCBkZXNjcmliZXMgc29tZXRoaW5nIGVsc2UgdGhhbiB3aGF0IHRoZSBob3N0IGlzIGhvbGRpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG52bWVfbnNfb3BlbmVycyhucykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF0ZXN0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFx1MDAyNm5zLVx1MDAzZWN0cmwtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAobnMtXHUwMDNlaGVhZC1cdTAwM2VsYmFfc2hpZnQgIT0gaWQtXHUwMDNlbGJhZltsYmFmXS5kcyB8fFxuJiM0MztcdCAgICAgbnMtXHUwMDNlaGVhZC1cdTAwM2VtcyAhPSBsZTE2X3RvX2NwdShpZC1cdTAwM2VsYmFmW2xiYWZdLm1zKSkpIHtcbiYjNDM7XHRcdGRldl9lcnIobnMtXHUwMDNlY3RybC1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O3Vuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2Ugb24gaW4tdXNlIG5zaWQgJXUgKGxiYV9zaGlmdCAldSAtXHUwMDNlICV1LCBtcyAldSAtXHUwMDNlICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2Vuc2lkLCBucy1cdTAwM2VoZWFkLVx1MDAzZWxiYV9zaGlmdCwgaWQtXHUwMDNlbGJhZltsYmFmXS5kcyxcbiYjNDM7XHRcdFx0bnMtXHUwMDNlaGVhZC1cdTAwM2VtcywgbGUxNl90b19jcHUoaWQtXHUwMDNlbGJhZltsYmFmXS5tcykpO1xuJiM0MztcdFx0cmV0ID0gTlZNRV9TQ19JTlZBTElEX05TIHwgTlZNRV9TVEFUVVNfRE5SO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4gXG4gXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobnMtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG5pbmRleCA4MjQ2NTFjYzg5OGRiLi45M2MxNWQ1NTgwZTMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcbkBAIC0zMjksNiAmIzQzOzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHtcbiBcdE5WTUVfQ1RSTF9TS0lQX0lEX0NOU19DU1x0PSA0LFxuIFx0TlZNRV9DVFJMX0RJUlRZX0NBUEFCSUxJVFlcdD0gNSxcbiBcdE5WTUVfQ1RSTF9GUk9aRU5cdFx0PSA2LFxuJiM0MztcdE5WTUVfQ1RSTF9TRUxGX1JFU0NBTlx0XHQ9IDcsXG4gfTtcbiBcbiBzdHJ1Y3QgbnZtZV9jdHJsIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnZtZV9wYXNzdGhydV9lbmQmIzM0OywKICAgICYjMzQ7bnZtZV9xdWV1ZV9zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIGNvcmUgZHJpdmVyIHRvIHJlZnVzZSB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyBvbiBhbiBpbi11c2UgbmFtZXNwYWNlLCBhbmQgYWRkcyBhIGZsYWcgdG8gYWxsb3cgZm9ybWF0IGNoYW5nZXMgaWYgdGhlIGhvc3QgcmVxdWVzdGVkIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIGFmZmVjdHMgY29yZSBOVk1lIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjgwNzEwMmFlMGI1MDkxMTk3ZjAzYjVhNDk5YjY4NmZiYzI2YzgxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTk6MzU6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKaW5kZXggNDUzYzFmMGIyZGQwOS4uZWJhYzVhM2QxYTA3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwpAQCAtMTI4NSw4ICYjNDM7MTI4NSwxNSBAQCB2b2lkIG52bWVfcGFzc3RocnVfZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTMyIGVmZmVjdHMsCiAJCX0KIAl9CiAJaWYgKGVmZmVjdHMgJmFtcDsgKE5WTUVfQ01EX0VGRkVDVFNfTklDIHwgTlZNRV9DTURfRUZGRUNUU19OQ0MpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGhvc3QgYXNrZWQgZm9yIHRoaXMgY2hhbmdlLCBzbyBsZXQgdGhlIHJlc2NhbiBhZG9wdCB0aGUKJiM0MzsJCSAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhbgomIzQzOwkJICogdW5zb2xpY2l0ZWQgY2hhbmdlIGlzIHJlZnVzZWQsIHNlZSBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKCkuCiYjNDM7CQkgKi8KJiM0MzsJCXNldF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCAmYW1wO2N0cmwtJmd0O2ZsYWdzKTsKIAkJbnZtZV9xdWV1ZV9zY2FuKGN0cmwpOwogCQlmbHVzaF93b3JrKCZhbXA7Y3RybC0mZ3Q7c2Nhbl93b3JrKTsKJiM0MzsJCWNsZWFyX2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sICZhbXA7Y3RybC0mZ3Q7ZmxhZ3MpOwogCX0KIAlpZiAobnMpCiAJCXJldHVybjsKQEAgLTIzODQsNiAmIzQzOzIzOTEsMTcgQEAgc3RhdGljIGJvb2wgbnZtZV9pbnZhbGlkX2xiYV9zeih1NjQgbnN6ZSwgc2lnbmVkIGludCBzaGlmdCwgc2VjdG9yX3QgKmNhcGFjaXR5KQogCXJldHVybiBjaGVja19zaGxfb3ZlcmZsb3cobnN6ZSwgc2hpZnQsIGNhcGFjaXR5KTsKIH0KIAomIzQzOy8qCiYjNDM7ICogT3BlbmVycyBvZiBhIG11bHRpcGF0aCBuYW1lc3BhY2UgZ28gdG8gdGhlIGhlYWQgZGlzazsgdGhlIHBlci1wYXRoIGRpc2sgaXMKJiM0MzsgKiBoaWRkZW4gYW5kIG5ldmVyIGhhcyBhbnkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBudm1lX25zX29wZW5lcnMoc3RydWN0IG52bWVfbnMgKm5zKQomIzQzO3sKJiM0MzsJaWYgKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtJmd0O2hlYWQpKQomIzQzOwkJcmV0dXJuIGRpc2tfb3BlbmVycyhucy0mZ3Q7aGVhZC0mZ3Q7ZGlzayk7CiYjNDM7CXJldHVybiBkaXNrX29wZW5lcnMobnMtJmd0O2Rpc2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsCiAJCXN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pCiB7CkBAIC0yNDM2LDYgJiM0MzsyNDU0LDI4IEBAIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBDaGFuZ2luZyB0aGUgTEJBIGZvcm1hdCBvciB0aGUgbWV0YWRhdGEgc2l6ZSByZWludGVycHJldHMgZXZlcnl0aGluZwomIzQzOwkgKiB0aGUgaG9zdCBoYXMgYWxyZWFkeSBjYWNoZWQsIHF1ZXVlZCBvciBoYW5kZWQgdG8gdGhlIGludGVncml0eSBjb2RlCiYjNDM7CSAqIGZvciB0aGlzIG5hbWVzcGFjZSwgYW5kIGZyZWV6aW5nIHRoZSBxdWV1ZSBkb2VzIG5vdCBjb3ZlciBhbnkgb2YgaXQ6CiYjNDM7CSAqIHBhZ2UgY2FjaGUgY29udGVudHMsIGJpb3MgYmF0Y2hlZCBvbiBhIHBsdWcgYW5kIHRoZSBkZWZlcnJlZAomIzQzOwkgKiBpbnRlZ3JpdHkgdmVyaWZ5IHdvcmsgYWxsIG91dGxpdmUgdGhlIGZyZWV6ZS4gIElmIHN1Y2ggYSBjaGFuZ2UKJiM0MzsJICogYXJyaXZlcyB1bnNvbGljaXRlZCB3aGlsZSB0aGUgbmFtZXNwYWNlIGlzIGluIHVzZSwgcmVmdXNlIGl0IGFuZCBsZXQKJiM0MzsJICogdGhlIGNhbGxlciB0YWtlIHRoZSBuYW1lc3BhY2Ugb2ZmbGluZSByYXRoZXIgdGhhbiBhZG9wdCBhIGdlb21ldHJ5CiYjNDM7CSAqIHRoYXQgZGVzY3JpYmVzIHNvbWV0aGluZyBlbHNlIHRoYW4gd2hhdCB0aGUgaG9zdCBpcyBob2xkaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKG52bWVfbnNfb3BlbmVycyhucykgJmFtcDsmYW1wOwomIzQzOwkgICAgIXRlc3RfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgJmFtcDtucy0mZ3Q7Y3RybC0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsKJiM0MzsJICAgIChucy0mZ3Q7aGVhZC0mZ3Q7bGJhX3NoaWZ0ICE9IGlkLSZndDtsYmFmW2xiYWZdLmRzIHx8CiYjNDM7CSAgICAgbnMtJmd0O2hlYWQtJmd0O21zICE9IGxlMTZfdG9fY3B1KGlkLSZndDtsYmFmW2xiYWZdLm1zKSkpIHsKJiM0MzsJCWRldl9lcnIobnMtJmd0O2N0cmwtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O3Vuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2Ugb24gaW4tdXNlIG5zaWQgJXUgKGxiYV9zaGlmdCAldSAtJmd0OyAldSwgbXMgJXUgLSZndDsgJXUpXG4mIzM0OywKJiM0MzsJCQlpbmZvLSZndDtuc2lkLCBucy0mZ3Q7aGVhZC0mZ3Q7bGJhX3NoaWZ0LCBpZC0mZ3Q7bGJhZltsYmFmXS5kcywKJiM0MzsJCQlucy0mZ3Q7aGVhZC0mZ3Q7bXMsIGxlMTZfdG9fY3B1KGlkLSZndDtsYmFmW2xiYWZdLm1zKSk7CiYjNDM7CQlyZXQgPSBOVk1FX1NDX0lOVkFMSURfTlMgfCBOVk1FX1NUQVRVU19ETlI7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKIAogCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShucy0mZ3Q7ZGlzay0mZ3Q7cXVldWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCmluZGV4IDgyNDY1MWNjODk4ZGIuLjkzYzE1ZDU1ODBlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgKQEAgLTMyOSw2ICYjNDM7MzI5LDcgQEAgZW51bSBudm1lX2N0cmxfZmxhZ3MgewogCU5WTUVfQ1RSTF9TS0lQX0lEX0NOU19DUwk9IDQsCiAJTlZNRV9DVFJMX0RJUlRZX0NBUEFCSUxJVFkJPSA1LAogCU5WTUVfQ1RSTF9GUk9aRU4JCT0gNiwKJiM0MzsJTlZNRV9DVFJMX1NFTEZfUkVTQ0FOCQk9IDcsCiB9OwogCiBzdHJ1Y3QgbnZtZV9jdHJsIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTWUgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRhcmdldGluZyBgZHJpdmVycy9udm1lL2hvc3QvY29yZS5jYCBhbmQgYGRyaXZlcnMvbnZtZS9ob3N0L252bWUuaGAuIEl0IHNlZW1zIHRvIGJlIGEgc2VjdXJpdHkgaGFyZGVuaW5nIGNoYW5nZSwgd2hpY2ggYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggcHJldmVudHMgdW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZXMgb24gYW4gYWN0aXZlIG5hbWVzcGFjZSB3aXRoaW4gdGhlIE5WTWUgZHJpdmVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGVwIHRvd2FyZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGxvc3Mgb3IgY29ycnVwdGlvbiwgSSYjMzk7ZCBzYXkuIFRoZSBhZGRpdGlvbiBvZiB0aGUgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgZmxhZyBpcyBpbnRlcmVzdGluZyB0b287IGl0IGFsbG93cyBjb250cm9sbGVkIGZvcm1hdCBjaGFuZ2VzIGluaXRpYXRlZCBieSB0aGUgaG9zdC4gVGhpcyBpbXBsaWVzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZmxvdyB3aGVyZSBmb3JtYXR0aW5nIGlzIGFjY2VwdGFibGUuCgpOb3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHRhcmdldC4gVGhlIGNvcmUgTlZNZSBkcml2ZXIgY2hhbmdlcywgYW5kIEkga25vdyBRRU1VIGhhcyBhIE5WTWUgZW11bGF0b3IuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgY29kZSBwYXRocyB0aGF0IGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHRoZSB1c2VyIHNwYWNlLiBUaGUgY2hhbGxlbmdlIHdpbGwgYmUgY3JhZnRpbmcgaW5wdXRzIHRoYXQgdHJpZ2dlciB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyBhZGRlZCBieSB0aGlzIHBhdGNoLCB0byBwcm9iZSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCkxldCYjMzk7cyBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSBjYW4gZW5hYmxlIE5WTWUgcHJvcGVybHkgaW4gbXkgdGVzdCBlbnZpcm9ubWVudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGluIGBkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBlbnN1cmUgaXQmIzM5O3MgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHRoZSB0ZXN0aW5nLiBLbm93aW5nIGhvdyBOVk1lIGlzIGNvbmZpZ3VyZWQgaXMga2V5LiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZmxhZ3MgZm9yIHRoZSBlbXVsYXRlZCBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTlZNRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0yPWNvbmZpZyBOVk1FX0NPUkVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTQtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjU6Y29uZmlnIEJMS19ERVZfTlZNRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyBOVk1lIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYEJMS19ERVZfTlZNRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGUgY29yZSBOVk1lIGZ1bmN0aW9uYWxpdHksIHRoYXQgaXMgYE5WTUVfQ09SRWAsIGlzIGFsc28gYmVpbmcgZW5hYmxlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBpc24mIzM5O3Qgc29tZSBpbXBsaWNpdCBkZXBlbmRlbmN5IG9yIHNlbGVjdGlvbiBpc3N1ZS4gQWgsIGdvb2QuIGBCTEtfREVWX05WTUVgIGRvZXMgaW5kZWVkIHNlbGVjdCBgTlZNRV9DT1JFYC4gVGhhdOKAmXMgd2hhdCBJIGV4cGVjdGVkLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncyB0byBhdm9pZCBkb3duc3RyZWFtIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYWN0dWFsIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSBzZWUgd2UgaGF2ZSBjaGFuZ2VzIHRvIGBudm1lX3Bhc3N0aHJ1X2VuZGAsIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCwgYW5kIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiwgYG52bWVfbnNfb3BlbmVyc2AuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgdG8gd29yayBmcm9tLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIGVmZmVjdHMgb2YgdGhlIGNoYW5nZXMgdG8gdGhlc2UgZnVuY3Rpb25zIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGNvZGUuIFRoZXkgYXJlIGxpa2VseSB0b3VjaGluZyBvbiBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSwgYW5kIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiB3aWxsIGJlIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX3Bhc3N0aHJ1X2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI2OT1FWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX3Bhc3N0aHJ1X3N0YXJ0LCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI3MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjcxOnZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcyLVx0XHQgICAgICAgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLCBpbnQgc3RhdHVzKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMzIxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfZW5kLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjY0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTlZNZSBDb25jZXJuOiBFeHBvcnRlZCBTeW1ib2xzKioKCkFscmlnaHQsIHNvIGBudm1lX3Bhc3N0aHJ1X2VuZGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZmluZSwgSSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgZm9yIHRoYXQuIEl0IG1ha2VzIHNlbnNlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgTlZNZSBkZXZpY2UgbWFuYWdlbWVudCBhbmQgaW50ZXJhY3Rpb24uIEJ1dC4uLiBub3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uLCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AuIElzICp0aGF0KiBhbHNvIGV4cG9ydGVkPyBUaGF0JiMzOTtzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBjb25zaWRlci4gSSYjMzk7bSB3b25kZXJpbmcgaWYgaXQmIzM5O3MgZ290IHRoZSBzYW1lIHNvcnQgb2Ygb3V0d2FyZCBmYWNpbmcgbmVlZC4gV2UmIzM5O3ZlIGdvdCB0byBlbnN1cmUgdGhlIHJpZ2h0IHRoaW5ncyBhcmUgZXhwb3NlZCB3aGlsZSBrZWVwaW5nIHRoZSByZXN0IGludGVybmFsLCBtYWludGFpbmluZyBvdXIgaW50ZW5kZWQgYWJzdHJhY3Rpb24sIGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IG9yIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEFuZCBob3cgZG9lcyB0aGF0IGFmZmVjdCB0aGUgZGV2aWNlIHN0YWNrPyBBbmQgd2hhdCB3b3VsZCBpdCBpbXBseSBmb3IgdGhlIG92ZXJhbGwga2VybmVsIGRlc2lnbj8gVGhpcyBjb3VsZCBoYXZlIGEgcmlwcGxlIGVmZmVjdC4gSSByZWFsbHkgbmVlZCB0byBjaGVjayBvbiB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGF0IG90aGVyIGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGVpdGhlciBiZWluZyBleHBvc2VkIG9yIGludGVybmFsLCBhcyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIHRoZSBkZXNpZ24gb2YgdGhpcyBuZXh0IG1vZHVsZSBJJiMzOTttIHdvcmtpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI3MT12b2lkIG52bWVfcGFzc3RocnVfZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTMyIGVmZmVjdHMsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTAtXHRcdCAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhblxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyOTE6XHRcdCAqIHVuc29saWNpdGVkIGNoYW5nZSBpcyByZWZ1c2VkLCBzZWUgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jaygpLlxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTItXHRcdCAqL1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzk4PXN0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDA1OnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNi1cdFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm8oc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTczLVx0XHR9XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU3NDpcdFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhucywgaW5mbyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3NS1cdFx0YnJlYWs7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3Ni1cdGNhc2UgTlZNRV9DU0lfTlZNOlxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1Nzc6XHRcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2sobnMsIGluZm8pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIE5WTWUgZXhwZXJ0OgoKKipJbnRlcm5hbCBOVk1lIE5hbWVzcGFjZSBCbG9jayBVcGRhdGVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4uLiBobW0sIHRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZmlsZSBvciBtb2R1bGUgd2l0aGluIHRoZSBOVk1lIGRyaXZlci4gSXQmIzM5O3Mgbm90IGRlc2lnbmVkIHRvIGJlIGFjY2Vzc2VkIGV4dGVybmFsbHkuIFRoYXQgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgdXBkYXRpbmcgdGhlIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBibG9jayBpcyBhIGNyaXRpY2FsLCBsb3ctbGV2ZWwgb3BlcmF0aW9uLiBZb3Ugd291bGRuJiMzOTt0IHdhbnQgdG8gZXhwb3NlIHRoYXQgZGlyZWN0bHkgdG8gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSB3aXRob3V0IGNhcmVmdWwgY29udHJvbC4KCk5vdywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBudm1lX3VwZGF0ZV9uc19pbmZvYC4gQWgsIG9rYXksIHNvIGBudm1lX3VwZGF0ZV9uc19pbmZvYCBpcyB0aGUgbGlrZWx5IHB1YmxpYyBpbnRlcmZhY2UsIG9yIGF0IGxlYXN0IHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24sIHRoYXQgYWN0dWFsbHkgb3JjaGVzdHJhdGVzIHRoZSBwcm9jZXNzIG9mIHVwZGF0aW5nIHRoZSBuYW1lc3BhY2UgaW5mb3JtYXRpb24uIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCBpcyB0aGVuIHRoZSB3b3JraG9yc2UsIHRoZSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcgb24gdGhlIGFjdHVhbCBibG9jayB3cml0ZS4gSXQmIzM5O3MgdGhlICYjMzQ7c2VjcmV0IHNhdWNlJiMzNDsgdGhhdCYjMzk7cyBoaWRkZW4gYmVoaW5kIHRoZSBjdXJ0YWluLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBrZXkuIEl0IGltcGxpZXMgdGhhdCBgbnZtZV91cGRhdGVfbnNfaW5mb2AgcHJvYmFibHkgaGFuZGxlcyB0aGluZ3MgbGlrZSBlcnJvciBjaGVja2luZywgbG9ja2luZywgcG90ZW50aWFsbHkgcHJlcGFyaW5nIGRhdGEsIGFuZCB0aGVuICpjYWxscyogdGhlIHN0YXRpYywgaW50ZXJuYWwgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIHVwZGF0ZSBvZiB0aGUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGJsb2NrIG9uIHRoZSBkcml2ZS4gR290IGl0LiBUaGlzIGlzIGEgdmVyeSB0eXBpY2FsIGRlc2lnbiBwYXR0ZXJuIGZvciByb2J1c3QgZGV2aWNlIGRyaXZlcnMgYW5kIE5WTWUgY29kZSBpbiBnZW5lcmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX3VwZGF0ZV9uc19pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjcxPXZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5MC1cdFx0ICogbmV3IG5hbWVzcGFjZSBnZW9tZXRyeSBldmVuIGlmIHRoZSBkaXNrIGlzIG9wZW4uICBPbmx5IGFuXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5MTpcdFx0ICogdW5zb2xpY2l0ZWQgY2hhbmdlIGlzIHJlZnVzZWQsIHNlZSBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKCkuXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5Mi1cdFx0ICovXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIxOTI9c3RhdGljIHZvaWQgbnZtZV9zZXRfY2h1bmtfc2VjdG9ycyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX2lkX25zICppZCxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjIyMy1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyMjI0OnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKHN0cnVjdCBudm1lX25zICpucyxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjI1LVx0XHRzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzk4PXN0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDA1OnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNi1cdFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU1Mj1zdGF0aWMgdm9pZCBudm1lX3N0YWNrX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKnQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NTktXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU2MDpzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm8oc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjEte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTcwLVx0XHRcdFx0aW5mby1cdTAwM2Vuc2lkKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTcxOlx0XHRcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fZ2VuZXJpYyhucywgaW5mbyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3Mi1cdFx0XHRicmVhaztcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTczLVx0XHR9XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU3NDpcdFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhucywgaW5mbyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3NS1cdFx0YnJlYWs7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3Ni1cdGNhc2UgTlZNRV9DU0lfTlZNOlxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1Nzc6XHRcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2sobnMsIGluZm8pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzgtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTgyLVx0XHRcdGluZm8tXHUwMDNlbnNpZCwgaW5mby1cdTAwM2VpZHMuY3NpKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTgzOlx0XHRyZXQgPSBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMobnMsIGluZm8pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1ODQtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00MjMxPXN0YXRpYyB2b2lkIG52bWVfYWxsb2NfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDI4NS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0Mjg2Olx0aWYgKG52bWVfdXBkYXRlX25zX2luZm8obnMsIGluZm8pKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQyODctXHRcdGdvdG8gb3V0X3VubGlua19ucztcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDQwOT1zdGF0aWMgdm9pZCBudm1lX3ZhbGlkYXRlX25zKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQxOC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NDE5Olx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mbyhucywgaW5mbyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQyMC1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgcmVsYXRpb25zaGlwcywgc3VtbWFyaXplZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTlZNZSBOYW1lc3BhY2UgTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYG52bWVfdXBkYXRlX25zX2luZm9gIGlzICphbHNvKiBkZWNsYXJlZCBhcyBzdGF0aWMsIGludGVyZXN0aW5nLiBTbyB0aGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBudm1lX2FsbG9jX25zYCBhbmQgYG52bWVfdmFsaWRhdGVfbnNgLiBNYWtlcyBzZW5zZSwgdGhlIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBsaWtlbHkgbmVlZHMgdXBkYXRpbmcgd2hlbiB3ZSYjMzk7cmUgY3JlYXRpbmcgb3IgdmFsaWRhdGluZyBhIG5hbWVzcGFjZS4KCk5vdywgYG52bWVfdmFsaWRhdGVfbnNgIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX25zYC4gU28sIHdoZW4gd2UmIzM5O3JlIHNjYW5uaW5nIHRoZSBzeXN0ZW0gZm9yIE5WTWUgbmFtZXNwYWNlcywgd2UgbmVlZCB0byB2YWxpZGF0ZSB0aGVtLCBhbmQgdGhhdCB2YWxpZGF0aW9uIGludm9sdmVzIHVwZGF0aW5nIHRoZSBpbmZvcm1hdGlvbi4gVGhlIGZsb3cgbWFrZXMgc2Vuc2UuIEFsbG9jYXRpb24gLSZndDsgVmFsaWRhdGlvbiAtJmd0OyBTY2FubmluZy4gSXQmIzM5O3MgYWxsIGNvbm5lY3RlZCwgYW5kIGVhY2ggZnVuY3Rpb24gcGxheXMgaXRzIHBhcnQgaW4gbWFuYWdpbmcgdGhvc2UgbmFtZXNwYWNlcy4gSSYjMzk7ZCBuZWVkIHRvIGRpdmUgZGVlcGVyLCBvZiBjb3Vyc2UsIGJ1dCBqdXN0IGxvb2tpbmcgYXQgdGhlIGNhbGwgcmVsYXRpb25zaGlwcyBnaXZlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9zY2FuX25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NDA5PXN0YXRpYyB2b2lkIG52bWVfdmFsaWRhdGVfbnMoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NDMwLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ0MzE6c3RhdGljIHZvaWQgbnZtZV9zY2FuX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHVuc2lnbmVkIG5zaWQpXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQzMi17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0ODMtICogTm90ZTogVGhlcmUgaXMgYSBzaW5nbGUgYXN5bmNfc2Nhbl9pbmZvIHN0cnVjdHVyZSBzaGFyZWQgYnkgYWxsIGluc3RhbmNlc1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ0ODQ6ICogb2YgbnZtZV9zY2FuX25zX2FzeW5jKCkgc2Nhbm5pbmcgYSBnaXZlbiBjb250cm9sbGVyLCBzbyB0aGUgYXRvbWljXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQ4NS0gKiBvcGVyYXRpb25zIG9uIG5leHRfbnNpZCBhcmUgY3JpdGljYWwgdG8gZW5zdXJlIGVhY2ggaW5zdGFuY2Ugc2NhbnMgYSB1bmlxdWVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDQ4OD1zdHJ1Y3QgYXN5bmNfc2Nhbl9pbmZvIHtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQ5My1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NDk0OnN0YXRpYyB2b2lkIG52bWVfc2Nhbl9uc19hc3luYyh2b2lkICpkYXRhLCBhc3luY19jb29raWVfdCBjb29raWUpXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQ5NS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1MDItXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDUwMzpcdG52bWVfc2Nhbl9ucyhzY2FuX2luZm8tXHUwMDNlY3RybCwgbnNpZCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDUwNC19XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ1MDY9c3RhdGljIHZvaWQgbnZtZV9yZW1vdmVfaW52YWxpZF9uYW1lc3BhY2VzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1MjUtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDUyNjpzdGF0aWMgaW50IG52bWVfc2Nhbl9uc19saXN0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDUyNy17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1NjEtXHRcdFx0XHRnb3RvIG91dDtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NTYyOlx0XHRcdGFzeW5jX3NjaGVkdWxlX2RvbWFpbihudm1lX3NjYW5fbnNfYXN5bmMsIFx1MDAyNnNjYW5faW5mbyxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTYzLVx0XHRcdFx0XHRcdFx1MDAyNmRvbWFpbik7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1NzYtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDU3NzpzdGF0aWMgdm9pZCBudm1lX3NjYW5fbnNfc2VxdWVudGlhbChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1Nzgte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTg3LVx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IG5uOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NTg4Olx0XHRudm1lX3NjYW5fbnMoY3RybCwgaSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDU4OS1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDYxOD1zdGF0aWMgdm9pZCBudm1lX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NDgtXHRpZiAoIW52bWVfaWRfY25zX29rKGN0cmwsIE5WTUVfSURfQ05TX05TX0FDVElWRV9MSVNUKSkge1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NDk6XHRcdG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NTAtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjU1LVx0XHQgKi9cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NjU2Olx0XHRyZXQgPSBudm1lX3NjYW5fbnNfbGlzdChjdHJsKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjU3LVx0XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiByZXQgXHUwMDI2IE5WTUVfU1RBVFVTX0ROUilcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NjU4Olx0XHRcdG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSYjMzk7bSB0aGUgb25lIHRoaW5raW5nIGl0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5WTWUgU2NhbiBXb3JrZmxvdyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBmdW5jdGlvbiBoZXJlLCB0aGUgb25lIGFjdHVhbGx5IGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nLCB0aGF0JiMzOTtzIGBudm1lX3NjYW5fd29ya2AuIFByZXR0eSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbiwgcmlnaHQ/IFRoZSBrZXkgcGFydCBpcyB0aGF0ICp0aGlzKiBpcyB0aGUgYWN0dWFsIHdvcmtxdWV1ZSBmdW5jdGlvbi4gU28gaXQmIzM5O3MgdGhlIGJpdCB0aGF0IGdldHMgZGVmZXJyZWQgYW5kIHNjaGVkdWxlZC4gSXQmIzM5O3Mgbm90IHJ1bm5pbmcgaW4gdGhlIGludGVycnVwdCBjb250ZXh0LCB3aGljaCBpcyBnb29kLgoKTm93LCB3aGVyZSBkb2VzIGBudm1lX3NjYW5fd29ya2AgZ2V0IGludm9rZWQ/IFRoYXQmIzM5O3MgY29taW5nIGZyb20gYG52bWVfcXVldWVfc2NhbmAuIFNvLCBgbnZtZV9xdWV1ZV9zY2FuYCBsaWtlbHkgaGFuZGxlcyB0aGUgc2NoZWR1bGluZywgbWF5YmUgcXVldWluZyB0aGUgd29yayBpdGVtIGl0c2VsZi4gSSYjMzk7ZCBuZWVkIHRvIHRyYWNlIHRoYXQgY2FsbCBjaGFpbiB0byBjb25maXJtLCBidXQgdGhlIGltcGxpY2F0aW9uIGlzIGNsZWFyLiBgbnZtZV9xdWV1ZV9zY2FuYCBwcm9iYWJseSBoYW5kbGVzIGFsbCB0aGUgaW5pdGlhbCBjaGVja3MsIHBlcmhhcHMgZGV2aWNlIHByZXNlbmNlL2Fic2VuY2UgZGV0ZWN0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgdGhlbiBoYW5kcyBvZmYgdGhlIGFjdHVhbCBzY2FubmluZyBvcGVyYXRpb24gdG8gdGhlIHdvcmtxdWV1ZS4gTWFrZXMgcGVyZmVjdCBzZW5zZSBmcm9tIGEgZGVzaWduIHBlcnNwZWN0aXZlLCBrZWVwcyB0aGUgaW50ZXJydXB0IGNvbnRleHQgbGVhbi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSBsb2NraW5nIGFyb3VuZCBgbnZtZV9zY2FuX3dvcmtgIHRvIGVuc3VyZSBpdCYjMzk7cyB0aHJlYWQtc2FmZS4gSSYjMzk7ZCBiZSBsb29raW5nIGZvciBhIG11dGV4IGFyb3VuZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9xdWV1ZV9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNTU9c3RhdGljIGludCBudm1lX2dldF9sb2dfbHNpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiBuc2lkLCB1OCBsb2dfcGFnZSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTU3LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE1ODp2b2lkIG52bWVfcXVldWVfc2NhbihzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE1OS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjkzLVx0XHRzZXRfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2Y3RybC1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5NDpcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTUtXHRcdGZsdXNoX3dvcmsoXHUwMDI2Y3RybC1cdTAwM2VzY2FuX3dvcmspO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NjE4PXN0YXRpYyB2b2lkIG52bWVfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2My1cdGlmICh0ZXN0X2JpdChOVk1FX0FFUl9OT1RJQ0VfTlNfQ0hBTkdFRCwgXHUwMDI2Y3RybC1cdTAwM2VldmVudHMpKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NjQ6XHRcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjY1LSNpZmRlZiBDT05GSUdfTlZNRV9NVUxUSVBBVEhcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDg4MD1zdGF0aWMgYm9vbCBudm1lX2hhbmRsZV9hZW5fbm90aWNlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiByZXN1bHQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ4ODctXHRcdHNldF9iaXQoTlZNRV9BRVJfTk9USUNFX05TX0NIQU5HRUQsIFx1MDAyNmN0cmwtXHUwMDNlZXZlbnRzKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0ODg4Olx0XHRudm1lX3F1ZXVlX3NjYW4oY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDg4OS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUxMDQ9dm9pZCBudm1lX3N0YXJ0X2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEyNC1cdGlmIChjdHJsLVx1MDAzZXF1ZXVlX2NvdW50IFx1MDAzZSAxKSB7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTEyNTpcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMjYtXHRcdG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhjdHJsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTWUgTmFtZXNwYWNlIEJlaGF2aW9yKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBuZXcgTlZNZSBiZWhhdmlvciwgYW5kIGl0IGxvb2tzIGxpa2UgYG52bWVfcGFzc3RocnVfZW5kYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgdHJpZ2dlcmluZyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gSG1tLCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBudm1lX25zX29wZW5lcnMobnMpYCB3aXRoaW4gYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLiBJbnRlcmVzdGluZy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBoaXQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgICp3aXRob3V0KiBnb2luZyB0aHJvdWdoIGBudm1lX3Bhc3N0aHJ1X2VuZGA/CgpZZXMsIGxvb2tzIGxpa2Ugd2UgY2FuIHRocm91Z2ggQXN5bmNocm9ub3VzIEV2ZW50IE5vdGlmaWNhdGlvbiAoQUVOKS4gVGhhdCBsZWFkcyB1cyBkb3duIHRoZSByYWJiaXQgaG9sZSBvZiBgbnZtZV9oYW5kbGVfYWVuX25vdGljZWAgLSZndDsgYG52bWVfcXVldWVfc2NhbmAgLSZndDsgYG52bWVfc2Nhbl93b3JrYCAtJmd0OyBgbnZtZV9zY2FuX25zX2xpc3RgIC0mZ3Q7IGBudm1lX3NjYW5fbnNgIC0mZ3Q7IGBudm1lX3ZhbGlkYXRlX25zYCAtJmd0OyBgbnZtZV91cGRhdGVfbnNfaW5mb2AgLSZndDsgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLiBHb3QgaXQuIEFuZCBzaW5jZSBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBpc24mIzM5O3Qgc2V0IGluIHRoaXMgc2NlbmFyaW8sIGlmIGEgbmFtZXNwYWNlIGlzIGN1cnJlbnRseSBpbiB1c2UgYW5kIHRoZSBmb3JtYXQgY2hhbmdlcywgaXQmIzM5O3MgZ29pbmcgdG8gYmUgcmVmdXNlZC4gRXhjZWxsZW50LCB0aGF0IGdpdmVzIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcG9zc2libGUgcGF0aHMuCgpBbHJpZ2h0LCBzbyB0aGUgbWFqb3Igc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBudm1lX3Bhc3N0aHJ1X2VuZGAsIGBudm1lX3F1ZXVlX3NjYW5gLCBgbnZtZV92YWxpZGF0ZV9uc2AsIGFuZCBgbnZtZV9oYW5kbGVfYWVuX25vdGljZWAuCgpOb3csIHdhaXQgYSBtaW51dGUsIGBudm1lX3Bhc3N0aHJ1X2VuZGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZ29vZC4gYG52bWVfcXVldWVfc2NhbmAgaXMgYWxzbyBleHBvcnRlZC4gYG52bWVfdmFsaWRhdGVfbnNgIGlzIHN0YXRpYywgYW5kIHNvIGlzIGBudm1lX2hhbmRsZV9hZW5fbm90aWNlYC4gVGhpcyBjaGFuZ2VzIHRoaW5ncyBzbGlnaHRseSwgYnV0IG5vdCBodWdlbHkuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgZm9jdXMgc3ltYm9scy4gYG52bWVfcGFzc3RocnVfZW5kYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlOyBpdCYjMzk7cyBleHBsaWNpdGx5IGNhbGxlZCB3aGVuIGFuIE5WTWUgcGFzc3Rocm91Z2ggY29tbWFuZCBjb21wbGV0ZXMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSBjaGVjayBgbnZtZV9xdWV1ZV9zY2FuYC4gSXQmIzM5O3MgY2FsbGVkIGluIGEgZmV3IGRpZmZlcmVudCBwbGFjZXMsIGxldCBtZSBjaGVjayBgbnZtZV9zY2FuX3dvcmtgIGFsc28uCgpPa2F5LCBiYWNrIHRvIGBudm1lX3Bhc3N0aHJ1X2VuZGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0IGNvbXBsZXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfcGFzc3RocnVfZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI2OT1FWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX3Bhc3N0aHJ1X3N0YXJ0LCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI3MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjcxOnZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcyLVx0XHQgICAgICAgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLCBpbnQgc3RhdHVzKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMzIxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfZW5kLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTE2MT1zdGF0aWMgaW50IG52bWVfc3VibWl0X3VzZXJfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMTk2LVx0aWYgKGVmZmVjdHMpXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjE5NzpcdFx0bnZtZV9wYXNzdGhydV9lbmQoY3RybCwgbnMsIGVmZmVjdHMsIGNtZCwgcmV0KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMTk4LVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmg9MTI5NT1pbnQgbnZtZV9leGVjdXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgYm9vbCBhdF9oZWFkKTtcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMjk2OnZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC0xMjk3LVx0XHQgICAgICAgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLCBpbnQgc3RhdHVzKTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3Bhc3N0aHJ1LmM9MjE0PXN0YXRpYyB2b2lkIG52bWV0X3Bhc3N0aHJ1X2V4ZWN1dGVfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYy0yNDUtXHRpZiAoZWZmZWN0cylcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYzoyNDY6XHRcdG52bWVfcGFzc3RocnVfZW5kKGN0cmwsIG5zLCBlZmZlY3RzLCByZXEtXHUwMDNlY21kLCBzdGF0dXMpO1xuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jLTI0Ny19XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jPTI5Nz1zdGF0aWMgdm9pZCBudm1ldF9wYXNzdGhydV9leGVjdXRlX2NtZChzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jLTM0NC1cdCAqIG5vbi10cml2aWFsIGVmZmVjdHMsIG1ha2Ugc3VyZSB0byBleGVjdXRlIHRoZSBjb21tYW5kIHN5bmNocm9ub3VzbHlcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYzozNDU6XHQgKiBpbiBhIHdvcmtxdWV1ZSBzbyB0aGF0IG52bWVfcGFzc3RocnVfZW5kIGdldHMgY2FsbGVkLlxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jLTM0Ni1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlZNZSBQYXNzdGhyb3VnaCBDb21tYW5kIEV4ZWN1dGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgbnZtZV9wYXNzdGhydV9lbmRgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIHRoZSBlbmRwb2ludCBmb3IgYm90aCB1c2VyLXNwYWNlIGluaXRpYXRlZCBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzIHZpYSBgbnZtZV9zdWJtaXRfdXNlcl9jbWRgICh3aGljaCwgSSByZWNhbGwsIHVzZXMgaW9jdGwpICphbmQqIGNvbW1hbmRzIGZyb20gdGhlIE5WTWUgdGFyZ2V0IHNpZGUsIHNwZWNpZmljYWxseSBgbnZtZXRfcGFzc3RocnVfZXhlY3V0ZV9jbWRfd29ya2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgY29tbWFuZHMgc2VudCBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZSDigJMgY29tbWFuZHMgbGlrZSAmIzM0O2Zvcm1hdCBOVk0uJiMzNDsKClRoZSBvdGhlciBwYXRoIG9mIGludGVyZXN0IGlzIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCwgY2FsbGVkIGR1cmluZyBuYW1lc3BhY2Ugc2NhbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIGZvY3VzIG9uLCBhbHRob3VnaCBpdCAqaXMqIHBhcnQgb2YgYSBjcml0aWNhbCBwYXRoLiBTbywgYG52bWVfc3VibWl0X3VzZXJfY21kYCBhbmQgYG52bWVfcGFzc3RocnVfZW5kYCBhcmUgdGhlIGltbWVkaWF0ZSB0YXJnZXRzIGZvciBzY3J1dGlueSBoZXJlLCBhcyB0aGV5JiMzOTtyZSB0aGUgZXhwb3NlZCBlbnRyeSBwb2ludHMuIEFsc28sIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG52bWVfc2Nhbl93b3JrYCB0byB1bmRlcnN0YW5kIHRoZSBzY2FucywgdGhvdWdoIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGNhbGxlZC4gTXkgZmlyc3QgZm9jdXMsIGhvd2V2ZXIsIHdpbGwgYmUgb24gaG93IGBudm1lX3N1Ym1pdF91c2VyX2NtZGAgaGFuZGxlcyB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfc3VibWl0X3VzZXJfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTEyND1zdGF0aWMgaW50IG52bWVfbWFwX3VzZXJfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCB1NjQgdWJ1ZmZlcixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTE2MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MTYxOnN0YXRpYyBpbnQgbnZtZV9zdWJtaXRfdXNlcl9jbWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTE2Mi1cdFx0c3RydWN0IG52bWVfY29tbWFuZCAqY21kLCB1NjQgdWJ1ZmZlciwgdW5zaWduZWQgYnVmZmxlbixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTIwNT1zdGF0aWMgaW50IG52bWVfc3VibWl0X2lvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfdXNlcl9pbyBfX3VzZXIgKnVpbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTI2Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MjYzOlx0cmV0dXJuIG52bWVfc3VibWl0X3VzZXJfY21kKG5zLVx1MDAzZXF1ZXVlLCBcdTAwMjZjLCBpby5hZGRyLCBsZW5ndGgsIG1ldGFkYXRhLFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0yNjQtXHRcdFx0bWV0YV9sZW4sIE5VTEwsIDAsIDApO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM9MjgwPXN0YXRpYyBpbnQgbnZtZV91c2VyX2NtZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0zMTUtXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjMxNjpcdHN0YXR1cyA9IG52bWVfc3VibWl0X3VzZXJfY21kKG5zID8gbnMtXHUwMDNlcXVldWUgOiBjdHJsLVx1MDAzZWFkbWluX3EsIFx1MDAyNmMsXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTMxNy1cdFx0XHRjbWQuYWRkciwgY21kLmRhdGFfbGVuLCBudm1lX3RvX3VzZXJfcHRyKGNtZC5tZXRhZGF0YSksXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz0zMjg9c3RhdGljIGludCBudm1lX3VzZXJfY21kNjQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMzYyLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYzozNjM6XHRzdGF0dXMgPSBudm1lX3N1Ym1pdF91c2VyX2NtZChucyA/IG5zLVx1MDAzZXF1ZXVlIDogY3RybC1cdTAwM2VhZG1pbl9xLCBcdTAwMjZjLFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0zNjQtXHRcdFx0Y21kLmFkZHIsIGNtZC5kYXRhX2xlbiwgbnZtZV90b191c2VyX3B0cihjbWQubWV0YWRhdGEpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOVk1lIEtlcm5lbCBNb2R1bGUgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBOVk1lIGRyaXZlciBjb2RlIGFnYWluLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgbnZtZV91c2VyX2NtZGAgYW5kIGBudm1lX3VzZXJfY21kNjRgIGZ1bmN0aW9ucyBqdW1wIG91dCBpbW1lZGlhdGVseSBhcyB0aGUga2V5IGlvY3RsIGhhbmRsZXJzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkga2VlcCBhbiBleWUgb24gYG52bWVfcGFzc3RocnVfZW5kYCBhcyBhIGNyaXRpY2FsIHN5bWJvbCwgZ2l2ZW4gaXRzIG5hbWUuIEFuZCwgb2YgY291cnNlLCBgbnZtZV9xdWV1ZV9zY2FuYOKAlHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoZSBhY3R1YWwgc2NhbiwgcmlnaHQ/IFRoYXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nLgoKQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgdGhvdWdoLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQuIExvb2tzIGxpa2UgYEJMS19ERVZfTlZNRWAgaXMgdGhlIG1vc3Qgb2J2aW91cyBvbmUsIGJ1dCBoYW5nIG9uIGEgbWludXRlLi4uIFdhaXQsIGl0JiMzOTtzIGBOVk1FX0NPUkVgIHRoYXQgYWN0dWFsbHkgY29tcGlsZXMgYGNvcmUuY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGZvciBhbnkgY29uZmlndXJhdGlvbiB3b3JrLiBOb3cgSSBjYW4gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBtb2R1bGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lLWNvcmUteSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19OVk1FX0FQUExFKVx0XHQmIzQzOz0gbnZtZS1hcHBsZS5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS0xMi1cbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjEzOm52bWUtY29yZS15XHRcdFx0XHQmIzQzOz0gY29yZS5vIGlvY3RsLm8gc3lzZnMubyBwci5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS0xNC1udm1lLWNvcmUtJChDT05GSUdfTlZNRV9WRVJCT1NFX0VSUk9SUylcdCYjNDM7PSBjb25zdGFudHMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBOVk1lIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBOVk1FX0NPUkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBzeW1ib2wgcmVsYXRlZCB0byB0aGUgY29yZSBOVk1lIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBudm1lLWNvcmUub2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsLiBJJiMzOTttIGdvaW5nIHRvIHJldmlzaXQgYGRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIG9yIHRvIHZlcmlmeSBhIHByZXZpb3VzIGFzc3VtcHRpb24uIFRoaXMgbW9kdWxlIGNvbmZpZ3VyYXRpb24gaXMgZnVuZGFtZW50YWwsIGFuZCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBoYXZlIHRoYXQga25vd2xlZGdlIGZyZXNoIGluIG15IG1pbmQgd2hlbiBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUgTlZNZSBzdWJzeXN0ZW0uIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjI6Y29uZmlnIE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5WTWUgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIE5WTWUgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhlIGtleSBkZWNpc2lvbiBwb2ludHMgYXJlLiBUaGUgYE5WTUVfQ09SRWAgc3ltYm9sLi4uIHRoYXQmIzM5O3MgdGhlIHRyaWNreSBvbmUuIEl0JiMzOTtzIGEgdHJpc3RhdGUsIGFuZCB0aGUgY29kZSBkb2VzbiYjMzk7dCBkaXJlY3RseSBvZmZlciBhIHByb21wdCBmb3IgaXQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyBidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQg4oCTIGlzIGJlaW5nIGRldGVybWluZWQgaW1wbGljaXRseSwgbGlrZWx5IGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mICpvdGhlciogb3B0aW9ucyBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiB0cmFjaW5nIHRoZSBkZXBlbmRlbmNpZXM7IEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgd2hpY2ggb3RoZXIgY29uZmlncyBhcmUgZHJpdmluZyB0aGUgc3RhdGUgb2YgYE5WTUVfQ09SRWAuCgpUaGVuLCB3ZSBoYXZlIGBCTEtfREVWX05WTUVgLiBUaGF0JiMzOTtzIHRoZSBtYWluIGRyaXZlciBzeW1ib2wsIHRoZSBvbmUgdGhhdCBtb3N0IGZvbGtzIHdpbGwgaW50ZXJhY3Qgd2l0aCBkaXJlY3RseS4gVGhhdCYjMzk7cyB0aGUgb25lIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBwcm9taW5lbnRseSBpbiB0aGUgbWVudWNvbmZpZywgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBzdGFydC4gSWYgdGhhdCBpc24mIzM5O3Qgc2VsZWN0ZWQgdGhlbiB0aGVyZSBpcyBubyB3YXkgdGhhdCBhbnkgb3RoZXIgTlZNZSBjb25maWcgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBOVk1FX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NT1jb25maWcgQkxLX0RFVl9OVk1FXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IEJMT0NLXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjg6XHRzZWxlY3QgTlZNRV9DT1JFXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTktXHRoZWxwXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz00Nz1jb25maWcgTlZNRV9GQUJSSUNTXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjQ4Olx0c2VsZWN0IE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00OS1cdHNlbGVjdCBOVk1FX0tFWVJJTkcgaWYgTlZNRV9UQ1BfVExTXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0xMjU9Y29uZmlnIE5WTUVfQVBQTEVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEyOS1cdGRlcGVuZHMgb24gQVJDSF9BUFBMRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6MTMwOlx0c2VsZWN0IE5WTUVfQ09SRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xMzEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgdGFrZSBvbiB0aGlzLgoKKipOVk1lIE5hbWVzcGFjZSBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgYEJMS19ERVZfTlZNRWAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGF0JiMzOTtzIGVub3VnaCB0byBkZWZpbmUgdGhlIGJhc2UgTlZNZSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBsb29rIGF0IGBudm1lX25zX29wZW5lcnNgLiBBaGEsIGl0JiMzOTtzIHVzaW5nIGBudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLSZndDtoZWFkKWAuICBUaGlzIGlzIGtleSwgbm93IHRoZSBxdWVzdGlvbiBpczogIGRvIHdlICpuZWVkKiBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBlbmFibGVkIGZvciB0aGF0IGZ1bmN0aW9uIGNhbGwgdG8gd29yayBhcyBleHBlY3RlZD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byB2ZXJpZnkuIFRoaXMgaW1wbGllcyBpdCBtaWdodCBiZSB0aWVkIHRvIG11bHRpcGF0aCBjb25maWd1cmF0aW9ucyBhbmQgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IGlzIGhhcmQsIG9yIHNvZnQsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O252bWVfbnNfaGVhZF9tdWx0aXBhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9udm1lLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTUzMT1zdHJ1Y3QgbnZtZV9uc19oZWFkIHtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtNTgxLVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjU4MjpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9uc19oZWFkX211bHRpcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oLTU4My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGFuIElubGluZSBGdW5jdGlvbiBEZWZpbml0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGVuY291bnRlcmVkIHdoYXQgbG9va3MgbGlrZSBhbiBpbmxpbmUgZnVuY3Rpb24gaGVyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSAmIzM0O2lubGluZSYjMzQ7IGtleXdvcmQvZGlyZWN0aXZlIC0gaXMgaXQganVzdCBhIHN1Z2dlc3Rpb24gdG8gdGhlIGNvbXBpbGVyPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgaXQmIzM5O3MgbGlrZWx5IHRvIGVuYWJsZT8gV2hhdCYjMzk7cyB0aGUgdHJhZGUtb2ZmIGJldHdlZW4gY29kZSBzaXplIGFuZCBwZXJmb3JtYW5jZSBpbiB0aGlzIHNwZWNpZmljIGluc3RhbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY29kZSBhbmQgcmVhbGx5IGV2YWx1YXRlIGl0cyBpbnRlbmRlZCB1c2UgYW5kIGJlaGF2aW9yLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGlzIGNvbnRleHQuIEkgd2lsbCBhbHNvIGFzc2VzcyB3aGV0aGVyIHRoZSBvcHRpbWl6YXRpb25zIGl0IHByb3ZpZGVzIGFyZSB0cnVseSBiZW5lZmljaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0fTtcbiA1ODE6XHRcbiA1ODI6XHRzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9uc19oZWFkX211bHRpcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxuIDU4MzpcdHtcbiA1ODQ6XHRcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19OVk1FX01VTFRJUEFUSCkgXHUwMDI2XHUwMDI2IGhlYWQtXHUwMDNlZGlzaztcbiA1ODU6XHR9XG4gNTg2Olx0XG4gNTg3Olx0ZW51bSBudm1lX25zX2ZlYXR1cmVzIHtcbiA1ODg6XHRcdE5WTUVfTlNfRVhUX0xCQVMgPSAxIFx1MDAzY1x1MDAzYyAwLCAvKiBzdXBwb3J0IGV4dGVuZGVkIExCQSBmb3JtYXQgKi9cbiA1ODk6XHRcdE5WTUVfTlNfTUVUQURBVEFfU1VQUE9SVEVEID0gMSBcdTAwM2NcdTAwM2MgMSwgLyogc3VwcG9ydCBnZXR0aW5nIGdlbmVyYXRlZCBtZCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzczMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTlZNZSBDb2RlIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBOVk1lIGRyaXZlci4gSSBzZWUgdGhhdCBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBpcyB1c2VkLCBidXQgdGhlIHBhdGNoIGl0c2VsZiBpc24mIzM5O3Qgc3RyaWN0bHkgZGVwZW5kZW50IG9uIGl0IHRvIGZ1bmN0aW9uLiBIb3dldmVyLCBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBtdWx0aXBhdGggYnJhbmNoIHdpdGhpbiBgbnZtZV9uc19vcGVuZXJzYCwgSSYjMzk7bGwgKmRlZmluaXRlbHkqIG5lZWQgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgZW5hYmxlZC4gU28sIEkgc2hvdWxkIGFkZCBgTlZNRV9NVUxUSVBBVEhgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4KCkxldCYjMzk7cyBzZWUsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUuIEkmIzM5O3ZlIGdvdCBgQkxLX0RFVl9OVk1FYCwgd2hpY2ggaXMgdGhlIFBDSWUgTlZNZSBkcml2ZXIgaXRzZWxmLiBUaGF0JiMzOTtzIGVtdWxhdGVkIGJ5IFFFTVUsIHNvIHRoYXQgbG9va3MgZ29vZCwgYW5kIG9idmlvdXNseSBJJiMzOTt2ZSBnb3QgYE5WTUVfTVVMVElQQVRIYCBhbHJlYWR5LiBUaG9zZSB0d28gdG9nZXRoZXIgc2hvdWxkIHByb3ZpZGUgYSBzb2xpZCBiYXNlLgoKTm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIGtleSBzeW1ib2xzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVhY2hhYmlsaXR5IG9mIGZ1bmN0aW9ucywgc28gSSYjMzk7bSBob25pbmcgaW4gb24gYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfcXVldWVfc2NhbmAuCgpGaXJzdCwgbGV0JiMzOTtzIHZlcmlmeSBgbnZtZV9wYXNzdGhydV9lbmRgIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gWWVwLCBpdCBpcyB2aWEgdGhlIGBudm1lX3VzZXJfY21kYCBpb2N0bC4gR29vZC4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgYG52bWVfcXVldWVfc2NhbmAgaXMgcmVhY2hhYmxlLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBudm1lX3F1ZXVlX3NjYW5gIGlzIHJlYWNoYWJsZSB2aWEgYG52bWVfcGFzc3RocnVfZW5kYCAoaW4gc29tZSBwYXRocykgb3IgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKSBoYW5kbGluZywgd2hpY2ggaXMgYSBnb29kIHBhdGggdG8gaGF2ZS4KCkxldCYjMzk7cyBkaXZlIGludG8gc29tZSBvZiB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMsIHN0YXJ0aW5nIHdpdGggYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLiBPaCwgdGhhdCYjMzk7cyBzdGF0aWMuIE5vdCByZWFsbHkgdXNlZnVsIGFzIGEgcHJpbWFyeSBmb2N1cyBzeW1ib2wuIEhtbSwgYG52bWVfdmFsaWRhdGVfbnNgIGlzIHN0YXRpYyB0b28uIE9rYXksIGxldCYjMzk7cyBzZWUuIFdhaXQsIGBudm1lX3NjYW5fd29ya2AgaXMgc3RhdGljLiBBbHNvIHN0YXRpYy4gSG93IGFib3V0IGBudm1lX3NjYW5fbnNfbGlzdGA/IFN0YXRpYy4gQW5kIGBudm1lX2FsbG9jX25zYCBpcyBzdGF0aWMuIGBudm1lX3NjYW5fbnNgPyBTdGF0aWMuIGBudm1lX3VwZGF0ZV9uc19pbmZvYCBpcyBzdGF0aWMuIEFuZCBgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljYCBpcyBzdGF0aWMuIEFscmlnaHQsIHRoYXQmIzM5O3MgYSB3aG9sZSBidW5jaCBvZiBzdGF0aWMgZnVuY3Rpb25zIQoKTm93LCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2A/IE5vcGUsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBudm1lX3VwZGF0ZV9uc19pbmZvYC4gYG52bWVfdXBkYXRlX25zX2luZm9gIGlzIGNhbGxlZCBmcm9tIGBudm1lX2FsbG9jX25zYCBhbmQgYG52bWVfdmFsaWRhdGVfbnNgLiBBbmQgYG52bWVfYWxsb2NfbnNgIGlzIGNhbGxlZCBmcm9tIGBudm1lX3NjYW5fbnNgLiBBbHNvIGBudm1lX3ZhbGlkYXRlX25zYCBpcyBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX25zYC4gVGhlbiwgYG52bWVfc2Nhbl9uc2AgaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl9uc19hc3luY2AgYW5kIGBudm1lX3NjYW5fbnNfc2VxdWVudGlhbGAuIEZ1cnRoZXIsIGBudm1lX3NjYW5fbnNfc2VxdWVudGlhbGAgaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl93b3JrYC4gQW5kIGBudm1lX3NjYW5fbnNfYXN5bmNgIGlzIGNhbGxlZCBmcm9tIGBudm1lX3NjYW5fbnNfbGlzdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBudm1lX3NjYW5fd29ya2AuIEZpbmFsbHksIGBudm1lX3NjYW5fd29ya2AgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIHNjaGVkdWxlZCBieSBgbnZtZV9xdWV1ZV9zY2FuYC4KCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhhdCBjaGFpbiwgaXQgc2VlbXMgY2xlYXIgdGhhdCBgbnZtZV9xdWV1ZV9zY2FuYCBpcyB0aGUgYmVzdCBub24tc3RhdGljIGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGZvciB0aGUgbmFtZXNwYWNlIHNjYW4gZnVuY3Rpb25hbGl0eS4gQW5kLCBhcyBwcmV2aW91c2x5IGlkZW50aWZpZWQsIGBudm1lX3Bhc3N0aHJ1X2VuZGAgcmVtYWlucyB0aGUgYmVzdCBmb3IgcGFzc3Rocm91Z2ggb3BlcmF0aW9ucy4KCkkmIzM5O2xsIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgZXhwb3J0ZWQgZnVuY3Rpb25zLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYnV0IHRoZXNlIHR3byBsb29rIGxpa2UgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipudm1lXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTg9TU9EVUxFX1BBUk1fREVTQyhpb190aW1lb3V0LCBcJiMzNDt0aW1lb3V0IGluIHNlY29uZHMgZm9yIEkvT1wmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTk6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9pb190aW1lb3V0KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02MC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTIwPXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpudm1lX3dxO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3dxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjItXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTIzPXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpudm1lX3Jlc2V0X3dxO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNDpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3Jlc2V0X3dxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjUtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI2PXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpudm1lX2RlbGV0ZV93cTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjc6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9kZWxldGVfd3EpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTczPWludCBudm1lX3RyeV9zY2hlZF9yZXNldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xODAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE4MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3RyeV9zY2hlZF9yZXNldCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTgyLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMTU9aW50IG52bWVfcmVzZXRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjItfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3Jlc2V0X2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyNC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU5PWludCBudm1lX2RlbGV0ZV9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI2Ni19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjY3OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZGVsZXRlX2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI2OC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTA4PXZvaWQgbnZtZV9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTItfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUxMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NvbXBsZXRlX3JxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTQtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTE1PXZvaWQgbnZtZV9jb21wbGV0ZV9iYXRjaF9yZXEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTIwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MjE6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jb21wbGV0ZV9iYXRjaF9yZXEpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUyMi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTI5PWJsa19zdGF0dXNfdCBudm1lX2hvc3RfcGF0aF9lcnJvcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzUtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzNjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2hvc3RfcGF0aF9lcnJvcik7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM3LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzOD1ib29sIG52bWVfY2FuY2VsX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTUxLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NTI6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jYW5jZWxfcmVxdWVzdCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTUzLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU1ND12b2lkIG52bWVfY2FuY2VsX3RhZ3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NjEtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU2MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NhbmNlbF90YWdzZXQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU2My1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01NjQ9dm9pZCBudm1lX2NhbmNlbF9hZG1pbl90YWdzZXQoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTcxLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NzI6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jYW5jZWxfYWRtaW5fdGFnc2V0KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NzMtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTc0PWJvb2wgbnZtZV9jaGFuZ2VfY3RybF9zdGF0ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02NjctfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjY2ODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NoYW5nZV9jdHJsX3N0YXRlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02NjktXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTY3ND1ib29sIG52bWVfd2FpdF9yZXNldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02ODAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjY4MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3dhaXRfcmVzZXQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTY4Mi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NzIxPXZvaWQgbnZtZV9wdXRfbnMoc3RydWN0IG52bWVfbnMgKm5zKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03MjQtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjcyNTpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX3B1dF9ucywgXCYjMzQ7TlZNRV9UQVJHRVRfUEFTU1RIUlVcJiMzNDspO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTcyNi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NzM2PXZvaWQgbnZtZV9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IG52bWVfY29tbWFuZCAqY21kKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03NjAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjc2MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfcmVxdWVzdCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNzYyLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz03NzI9YmxrX3N0YXR1c190IG52bWVfZmFpbF9ub25yZWFkeV9jb21tYW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTc4OC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Nzg5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZmFpbF9ub25yZWFkeV9jb21tYW5kKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03OTAtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NzkxPWJvb2wgX19udm1lX2NoZWNrX3JlYWR5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtODI5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo4MzA6RVhQT1JUX1NZTUJPTF9HUEwoX19udm1lX2NoZWNrX3JlYWR5KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy04MzEtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEwODM9dm9pZCBudm1lX2NsZWFudXBfY21kKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEwOTQtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEwOTU6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jbGVhbnVwX2NtZCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTA5Ni1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMDk3PWJsa19zdGF0dXNfdCBudm1lX3NldHVwX2NtZChzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTExNDktfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjExNTA6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zZXR1cF9jbWQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTExNTEtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTExNTg9aW50IG52bWVfZXhlY3V0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJvb2wgYXRfaGVhZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE2OC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTE2OTpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX2V4ZWN1dGVfcnEsIFwmIzM0O05WTUVfVEFSR0VUX1BBU1NUSFJVXCYjMzQ7KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMTcwLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMTc1PWludCBfX252bWVfc3VibWl0X3N5bmNfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyMTEtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMTI6RVhQT1JUX1NZTUJPTF9HUEwoX19udm1lX3N1Ym1pdF9zeW5jX2NtZCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTIxMy1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjE0PWludCBudm1lX3N1Ym1pdF9zeW5jX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjE5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjIwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc3VibWl0X3N5bmNfY21kKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjIxLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyMjI9dTMyIG52bWVfY29tbWFuZF9lZmZlY3RzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTggb3Bjb2RlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjQ4LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjQ5OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfY29tbWFuZF9lZmZlY3RzLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI1MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjUxPXUzMiBudm1lX3Bhc3N0aHJ1X3N0YXJ0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTggb3Bjb2RlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjY4LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjY5OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfc3RhcnQsIFwmIzM0O05WTUVfVEFSR0VUX1BBU1NUSFJVXCYjMzQ7KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcwLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMzIxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfZW5kLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTQzNj12b2lkIG52bWVfc3RvcF9rZWVwX2FsaXZlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE0NDItfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE0NDM6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zdG9wX2tlZXBfYWxpdmUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE0NDQtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTE3MjU9aW50IG52bWVfc2V0X2ZlYXR1cmVzKHN0cnVjdCBudm1lX2N0cmwgKmRldiwgdW5zaWduZWQgaW50IGZpZCxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTczMS19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTczMjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3NldF9mZWF0dXJlcyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTczMy1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNzM0PWludCBudm1lX2dldF9mZWF0dXJlcyhzdHJ1Y3QgbnZtZV9jdHJsICpkZXYsIHVuc2lnbmVkIGludCBmaWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3NDAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE3NDE6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9nZXRfZmVhdHVyZXMpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3NDItXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTc0Mz1pbnQgbnZtZV9zZXRfcXVldWVfY291bnQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgaW50ICpjb3VudClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTc3NC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTc3NTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3NldF9xdWV1ZV9jb3VudCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTc3Ni1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9Mjc1OD1pbnQgbnZtZV9kaXNhYmxlX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBzaHV0ZG93bilcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjc4MS19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Mjc4MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2Rpc2FibGVfY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjc4My1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNzg0PWludCBudm1lX2VuYWJsZV9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI4NjAtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI4NjE6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9lbmFibGVfY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjg2Mi1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9Mzc3Nj1pbnQgbnZtZV9pbml0X2N0cmxfZmluaXNoKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgd2FzX3N1c3BlbmRlZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzg0MC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Mzg0MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfY3RybF9maW5pc2gpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM4NDItXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQxOTM9c3RydWN0IG52bWVfbnMgKm52bWVfZmluZF9nZXRfbnMoc3RydWN0IG52bWVfY3RybCAqY3RybCwgdW5zaWduZWQgbnNpZClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDIxMi19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDIxMzpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX2ZpbmRfZ2V0X25zLCBcJiMzNDtOVk1FX1RBUkdFVF9QQVNTVEhSVVwmIzM0Oyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDIxNC1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDY3Nz12b2lkIG52bWVfcmVtb3ZlX25hbWVzcGFjZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDcxNy19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDcxODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3JlbW92ZV9uYW1lc3BhY2VzKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NzE5LVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00OTI0PXZvaWQgbnZtZV9jb21wbGV0ZV9hc3luY19ldmVudChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBfX2xlMTYgc3RhdHVzLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00OTYxLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0OTYyOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfY29tcGxldGVfYXN5bmNfZXZlbnQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ5NjMtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDk2ND1pbnQgbnZtZV9hbGxvY19hZG1pbl90YWdfc2V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDEzLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDE0OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWxsb2NfYWRtaW5fdGFnX3NldCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAxNS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MDE2PXZvaWQgbnZtZV9yZW1vdmVfYWRtaW5fdGFnX3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDI3LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDI4OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfcmVtb3ZlX2FkbWluX3RhZ19zZXQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMjktXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTAzMD1pbnQgbnZtZV9hbGxvY19pb190YWdfc2V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDc5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDgwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWxsb2NfaW9fdGFnX3NldCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTA4MS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MDgyPXZvaWQgbnZtZV9yZW1vdmVfaW9fdGFnX3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDg5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDkwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfcmVtb3ZlX2lvX3RhZ19zZXQpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwOTEtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTA5Mj12b2lkIG52bWVfc3RvcF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMDEtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUxMDI6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zdG9wX2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMDMtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTEwND12b2lkIG52bWVfc3RhcnRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTMyLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MTMzOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc3RhcnRfY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEzNC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MTM1PXZvaWQgbnZtZV91bmluaXRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTQzLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5pbml0X2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxNDUtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUyMDA9aW50IG52bWVfaW5pdF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTI3Ny19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTI3ODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTI3OS1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTI4ND1pbnQgbnZtZV9hZGRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzEwLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MzExOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWRkX2N0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzMTItXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzMTQ9dm9pZCBudm1lX21hcmtfbmFtZXNwYWNlc19kZWFkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzMjQtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzMjU6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tYXJrX25hbWVzcGFjZXNfZGVhZCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTMyNi1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MzI3PXZvaWQgbnZtZV91bmZyZWV6ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzM4LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MzM5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5mcmVlemUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNDAtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTM0MT1pbnQgbnZtZV93YWl0X2ZyZWV6ZV90aW1lb3V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNTYtfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzNTc6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV93YWl0X2ZyZWV6ZV90aW1lb3V0KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzU4LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzNTk9dm9pZCBudm1lX3dhaXRfZnJlZXplKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNjktfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzNzA6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV93YWl0X2ZyZWV6ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM3MS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MzcyPXZvaWQgbnZtZV9zdGFydF9mcmVlemUoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM4OC19XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTM4OTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3N0YXJ0X2ZyZWV6ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM5MC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MzkxPXZvaWQgbnZtZV9xdWllc2NlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01Mzk5LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDAwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfcXVpZXNjZV9pb19xdWV1ZXMpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MDEtXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTQwMj12b2lkIG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDA4LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDA5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQxMC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01NDExPXZvaWQgbnZtZV9xdWllc2NlX2FkbWluX3F1ZXVlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MTctfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU0MTg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9xdWllc2NlX2FkbWluX3F1ZXVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDE5LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0MjA9dm9pZCBudm1lX3VucXVpZXNjZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDI0LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDI1OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5xdWllc2NlX2FkbWluX3F1ZXVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDI2LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0Mjc9dm9pZCBudm1lX3N5bmNfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MzctfVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU0Mzg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zeW5jX2lvX3F1ZXVlcyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQzOS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01NDQwPXZvaWQgbnZtZV9zeW5jX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDQ1LX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDQ2OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc3luY19xdWV1ZXMpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0NDctXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTQ0OD1zdHJ1Y3QgbnZtZV9jdHJsICpudm1lX2N0cmxfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDUzLX1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDU0OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfY3RybF9mcm9tX2ZpbGUsIFwmIzM0O05WTUVfVEFSR0VUX1BBU1NUSFJVXCYjMzQ7KTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqbnZtZVxfcXVldWVcX3NjYW4gRXhwb3J0IFN0YXR1cyBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBudm1lX3F1ZXVlX3NjYW5gLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgYnV0IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayBiZWZvcmUgSSBnbyBkb3duIHRoYXQgcmFiYml0IGhvbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGV4cG9ydCBzdGF0dXMuIEdvdHRhIGJlIHByZWNpc2UgaGVyZSDigJMgYSBtaXN1bmRlcnN0YW5kaW5nIG9uIHRoaXMgcG9pbnQgY291bGQgd2FzdGUgc2lnbmlmaWNhbnQgdGltZS4gTGV0IG1lIHZlcmlmeSB0aGUgc3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9xdWV1ZV9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNTU9c3RhdGljIGludCBudm1lX2dldF9sb2dfbHNpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiBuc2lkLCB1OCBsb2dfcGFnZSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTU3LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE1ODp2b2lkIG52bWVfcXVldWVfc2NhbihzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE1OS17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjkzLVx0XHRzZXRfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2Y3RybC1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5NDpcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTUtXHRcdGZsdXNoX3dvcmsoXHUwMDI2Y3RybC1cdTAwM2VzY2FuX3dvcmspO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NjE4PXN0YXRpYyB2b2lkIG52bWVfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2My1cdGlmICh0ZXN0X2JpdChOVk1FX0FFUl9OT1RJQ0VfTlNfQ0hBTkdFRCwgXHUwMDI2Y3RybC1cdTAwM2VldmVudHMpKVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NjQ6XHRcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjY1LSNpZmRlZiBDT05GSUdfTlZNRV9NVUxUSVBBVEhcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDg4MD1zdGF0aWMgYm9vbCBudm1lX2hhbmRsZV9hZW5fbm90aWNlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiByZXN1bHQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ4ODctXHRcdHNldF9iaXQoTlZNRV9BRVJfTk9USUNFX05TX0NIQU5HRUQsIFx1MDAyNmN0cmwtXHUwMDNlZXZlbnRzKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0ODg4Olx0XHRudm1lX3F1ZXVlX3NjYW4oY3RybCk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDg4OS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUxMDQ9dm9pZCBudm1lX3N0YXJ0X2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEyNC1cdGlmIChjdHJsLVx1MDAzZXF1ZXVlX2NvdW50IFx1MDAzZSAxKSB7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTEyNTpcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMjYtXHRcdG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhjdHJsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqRGl2aW5nIGludG8gdGhlIE5WTWUgRHJpdmVyIENvZGUqKgoKUmlnaHQsIGBudm1lX3F1ZXVlX3NjYW5gLiBJbnRlcmVzdGluZy4gSXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgKmFsc28qIG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsLiBJIHNlZSBpdCYjMzk7cyBkZWNsYXJlZCBpbiBgbnZtZS5oYCBhbmQgYWN0aXZlbHkgdXNlZCBieSBvdGhlciBmaWxlcyByZXNpZGluZyB3aXRoaW4gYGRyaXZlcnMvbnZtZS9ob3N0L2AuIFRoYXQgbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIEkmIzM5O20gdHJhY2luZyB0aGUgZGF0YSBmbG93LiBBIG5pY2UgcG9pbnQgb2YgY29ubmVjdGlvbiB3aXRoaW4gdGhlIGRyaXZlci4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSBvdGhlciBsaWtlbHkgY2FuZGlkYXRlcy4uLiBgbnZtZV9zdWJtaXRfdXNlcl9jbWRgLiBBaCwgdGhlcmUgaXQgaXMsIHN0YXRpYyB3aXRoaW4gYGlvY3RsLmNgLiBPa2F5LCBub3RlZC4gQW5kIHdoYXQgYWJvdXQgYG52bWVfdXNlcl9jbWRgPyBTdGF0aWMsIGFsc28gaW4gYGlvY3RsLmNgLiBHb3QgaXQuIFNvLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgaW9jdGwgaGFuZGxpbmcgcm91dGluZXMuIEl0IHNlZW1zIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB1c2VyIGNvbW1hbmRzIGFyZSBoYW5kbGVkIGJ5IGVpdGhlciBgbnZtZV9kZXZfaW9jdGxgIG9yIGBudm1lX25zX2lvY3RsYC4gR29vZCB0byBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudm1lX2Rldl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz04MDY9c3RhdGljIGludCBudm1lX2Rldl91c2VyX2NtZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB2b2lkIF9fdXNlciAqYXJncCxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTg0Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6ODQzOmxvbmcgbnZtZV9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTg0NC1cdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjgxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTlZNZSBpb2N0bCBDYWxscyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gTlZNZSBkcml2ZXJzLCBhbmQgdGhlIGBudm1lX2Rldl9pb2N0bGAgZnVuY3Rpb24ganVzdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHN0YXRpYy4gVGhhdCByYWlzZXMgYSBmbGFnLiBXZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWxseSBwcml2aWxlZ2VkIG9wZXJhdGlvbnMgaGVyZSwgYW5kIGlmIHRoaXMgZnVuY3Rpb24gaXNuJiMzOTt0IHN0YXRpYywgaXQgbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIGJyb2FkZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgbWFraW5nIGl0IGEgd2lkZXIgYXR0YWNrIHN1cmZhY2UuIEFsd2F5cyBoYXZlIHRvIGNvbnNpZGVyIHRoYXQsIGVzcGVjaWFsbHkgd2l0aCBzdG9yYWdlLiBOb3csIHdoYXQgYWJvdXQgYG52bWVfbnNfaW9jdGxgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIFdlIGhhdmUgZGV2aWNlLWxldmVsLCBhbmQgbmFtZXNwYWNlLWxldmVsIG9wZXJhdGlvbnMuIElmIHRoZSBuYW1lc3BhY2Utc3BlY2lmaWMgb25lICppcyogc3RhdGljLCBpdCBtYWtlcyB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucyBpbiB0aGUgZGV2aWNlLWxldmVsIG9uZSBhbGwgdGhlIG1vcmUgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXIuIERlcGVuZGluZyBvbiBob3cgdGhvc2UgdHdvIGFyZSByZWxhdGVkLCB3ZSBtaWdodCBiZSBsb29raW5nIGF0IGEgd2F5IHRvIGJ5cGFzcyBjZXJ0YWluIHNlY3VyaXR5IGNoZWNrcyBvciBleHBsb2l0IGEgYnJvYWRlciBjbGFzcyBvZiB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIEFyZSB0aGVyZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzPyBDb21tb24gY29udHJvbCBwYXRocz8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBzeW1ib2wgdGFibGVzIGFuZCB4cmVmcy4gVGhpcyBtaWdodCBiZSBhIHJhYmJpdCBob2xlIHdvcnRoIGV4cGxvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9uc19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz01NjM9c3RydWN0IG52bWVfdXNlcl9pbzMyIHtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTU3OS1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6NTgwOnN0YXRpYyBpbnQgbnZtZV9uc19pb2N0bChzdHJ1Y3QgbnZtZV9ucyAqbnMsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTU4MS1cdFx0dm9pZCBfX3VzZXIgKmFyZ3AsIHVuc2lnbmVkIGludCBmbGFncywgYm9vbCBvcGVuX2Zvcl93cml0ZSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTYxMD1pbnQgbnZtZV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy02MjItXHRcdHJldHVybiBudm1lX2N0cmxfaW9jdGwobnMtXHUwMDNlY3RybCwgY21kLCBhcmdwLCBvcGVuX2Zvcl93cml0ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjYyMzpcdHJldHVybiBudm1lX25zX2lvY3RsKG5zLCBjbWQsIGFyZ3AsIGZsYWdzLCBvcGVuX2Zvcl93cml0ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTYyNC19XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz02MjY9bG9uZyBudm1lX25zX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy02MzQtXHRcdHJldHVybiBudm1lX2N0cmxfaW9jdGwobnMtXHUwMDNlY3RybCwgY21kLCBhcmdwLCBvcGVuX2Zvcl93cml0ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjYzNTpcdHJldHVybiBudm1lX25zX2lvY3RsKG5zLCBjbWQsIGFyZ3AsIDAsIG9wZW5fZm9yX3dyaXRlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtNjM2LX1cbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTcwOD1pbnQgbnZtZV9uc19oZWFkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTczNC1cbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6NzM1Olx0cmV0ID0gbnZtZV9uc19pb2N0bChucywgY21kLCBhcmdwLCBmbGFncywgb3Blbl9mb3Jfd3JpdGUpO1xuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03MzYtb3V0X3VubG9jazpcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTc0MT1sb25nIG52bWVfbnNfaGVhZF9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03NjAtXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjc2MTpcdHJldCA9IG52bWVfbnNfaW9jdGwobnMsIGNtZCwgYXJncCwgMCwgb3Blbl9mb3Jfd3JpdGUpO1xuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03NjItb3V0X3VubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2MzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlZNZSBEcml2ZXIgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE5WTWUgZHJpdmVyIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdhdGhlcmVkLiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoZSByZWZ1c2FsIG9mIHVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2VzIG9uIGFuIGluLXVzZSBuYW1lc3BhY2UsIHdoaWNoIGlzIGEgc2Vuc2libGUgc2VjdXJpdHkgaW1wcm92ZW1lbnQuIEhvd2V2ZXIsIHRoZSBwYXRjaCB0aGVuIGludHJvZHVjZXMgYSBmbGFnIHRvIHBlcm1pdCBmb3JtYXQgY2hhbmdlcyBpZiB0aGUgaG9zdCBleHBsaWNpdGx5IHJlcXVlc3RzIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIG9wZW4gdXAgYSBuZXcgYXR0YWNrIHN1cmZhY2UsIHBhcnRpY3VsYXJseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGhlbmNlIHRoZSBjb25jZXJuLgoKRnJvbSBhIHN5bWJvbCBwZXJzcGVjdGl2ZSwgSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgbnZtZV9pb2N0bGAgYW5kIGBudm1lX2Rldl9pb2N0bGAgYXMgcG90ZW50aWFsIHRhcmdldHMsIHNpbmNlIGBudm1lX25zX2lvY3RsYCBpcyBzdGF0aWMgKGFuZCB0aGVyZWZvcmUgbGVzcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSkuIEhvd2V2ZXIsIGBudm1lX3Bhc3N0aHJ1X2VuZGAgaXMgYSAqbXVjaCogYmV0dGVyIGNob2ljZSBiZWNhdXNlIGl0JiMzOTtzIHJpZ2h0IHdoZXJlIHRoZSBjaGFuZ2UgaGFwcGVucywgYW5kLCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgc3ltYm9sLiBUaGlzIG1ha2VzIGl0IGlkZWFsIGZvciBhbmFseXNpcyBhbmQgbGlrZWx5IGZ1enppbmcuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgYG52bWVfcXVldWVfc2NhbmAgYXMgYSBmb2N1cyBzeW1ib2wsIGFsdGhvdWdoIG15IGluaXRpYWwgcmVhZGluZyBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIHNlY29uZGFyeSB0byBgbnZtZV9wYXNzdGhydV9lbmRgLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyB3YXJyYW50cyBmdXp6aW5nLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4gYFdvcnRoRnV6emluZzogdHJ1ZWAgaXMgYXBwcm9wcmlhdGUuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBpbXBhY3RzIGNvcmUgTlZNZSBsb2dpYywgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIHRoYXQgcGFzc3Rocm91Z2ggZnVuY3Rpb25hbGl0eSBhbmQgdGhhdCYjMzk7cyB0aGUgYXJlYSB0aGF0IEkmIzM5O2xsIGNvbmNlbnRyYXRlIG9uLgoKVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBCTEtfREVWX05WTUVgIGFuZCBgTlZNRV9NVUxUSVBBVEhgLiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY29uZmlybSBgTlZNRV9NVUxUSVBBVEhgIGlzIGFjdHVhbGx5IGEgdmFsaWQgYW5kIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgaXQmIzM5O3MgaW5jbHVkZWQgaW4gdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfTVVMVElQQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTYtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7TlZNZSBtdWx0aXBhdGggc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1MAoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFN5bWJvbCBWYWxpZGl0eSBmb3IgS2VybmVsIE1vZHVsZSBJbnRlZ3JhdGlvbioqCgpSaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBjYXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHN5bWJvbHMgYXJlIGFjY2Vzc2libGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBudm1lX3Bhc3N0aHJ1X2VuZGAuIEkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCB0aGUgc3ltYm9sJiMzOTtzIGF2YWlsYWJpbGl0eSDigJMgeWVwLCBpdCYjMzk7cyBwcm9wZXJseSBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIE5leHQsIEkgbmVlZCB0byBsb29rIGF0IGBudm1lX3F1ZXVlX3NjYW5gIHRvIGNvbmZpcm0gaXQmIzM5O3MgdmlzaWJsZS4gT2theSwgaXQmIzM5O3Mgbm90IHN0YXRpYyBhbmQgYXBwZWFycyB0byBiZSB1c2VkIGluIG11bHRpcGxlIGZpbGVzLCBzbyB0aGF0IHNob3VsZCBiZSBva2F5IHRvby4gR2l2ZW4gdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSB2YWxpZCwgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4gVGhpcyBzaG91bGQgc2V0IHVwIHRoZSBmaW5hbCBwYXJhbWV0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O05WTUVfTVVMVElQQVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnZtZV9wYXNzdGhydV9lbmQmIzM0OywKICAgICYjMzQ7bnZtZV9xdWV1ZV9zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIGNvcmUgZHJpdmVyIHRvIHJlZnVzZSB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyBvbiBhbiBpbi11c2UgbmFtZXNwYWNlLCBhbmQgYWRkcyBhIGZsYWcgdG8gYWxsb3cgZm9ybWF0IGNoYW5nZXMgaWYgdGhlIGhvc3QgcmVxdWVzdGVkIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIGFmZmVjdHMgY29yZSBOVk1lIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O252bWVfcGFzc3RocnVfZW5kJiMzNDssCiAgICAmIzM0O252bWVfcXVldWVfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlZNZSBjb3JlIGRyaXZlciB0byByZWZ1c2UgdW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZXMgb24gYW4gaW4tdXNlIG5hbWVzcGFjZSwgYW5kIGFkZHMgYSBmbGFnIHRvIGFsbG93IGZvcm1hdCBjaGFuZ2VzIGlmIHRoZSBob3N0IHJlcXVlc3RlZCBpdCB2aWEgTlZNZSBwYXNzdGhyb3VnaCBjb21tYW5kcy4gVGhpcyBhZmZlY3RzIGNvcmUgTlZNZSBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE5OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBhbmQgdXNlcyBpdCB0byBwcmV2ZW50IHVuc29saWNpdGVkIExCQSBmb3JtYXQgb3IgbWV0YWRhdGEgc2l6ZSBjaGFuZ2VzIG9uIGluLXVzZSBOVk1lIG5hbWVzcGFjZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBkYXRhIGNvcnJ1cHRpb24gb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVlIHRvIGJsb2NrIHNpemUgY2hhbmdlcyB3aGlsZSBpbiB1c2UpIGFyZSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjI4MDcxMDJhZTBiNTA5MTE5N2YwM2I1YTQ5OWI2ODZmYmMyNmM4MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE5OjM1OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCmluZGV4IDQ1M2MxZjBiMmRkMDkuLmViYWM1YTNkMWEwNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKQEAgLTEyODUsOCAmIzQzOzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLAogCQl9CiAJfQogCWlmIChlZmZlY3RzICZhbXA7IChOVk1FX0NNRF9FRkZFQ1RTX05JQyB8IE5WTUVfQ01EX0VGRkVDVFNfTkNDKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBob3N0IGFza2VkIGZvciB0aGlzIGNoYW5nZSwgc28gbGV0IHRoZSByZXNjYW4gYWRvcHQgdGhlCiYjNDM7CQkgKiBuZXcgbmFtZXNwYWNlIGdlb21ldHJ5IGV2ZW4gaWYgdGhlIGRpc2sgaXMgb3Blbi4gIE9ubHkgYW4KJiM0MzsJCSAqIHVuc29saWNpdGVkIGNoYW5nZSBpcyByZWZ1c2VkLCBzZWUgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jaygpLgomIzQzOwkJICovCiYjNDM7CQlzZXRfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgJmFtcDtjdHJsLSZndDtmbGFncyk7CiAJCW52bWVfcXVldWVfc2NhbihjdHJsKTsKIAkJZmx1c2hfd29yaygmYW1wO2N0cmwtJmd0O3NjYW5fd29yayk7CiYjNDM7CQljbGVhcl9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCAmYW1wO2N0cmwtJmd0O2ZsYWdzKTsKIAl9CiAJaWYgKG5zKQogCQlyZXR1cm47CkBAIC0yMzg0LDYgJiM0MzsyMzkxLDE3IEBAIHN0YXRpYyBib29sIG52bWVfaW52YWxpZF9sYmFfc3oodTY0IG5zemUsIHNpZ25lZCBpbnQgc2hpZnQsIHNlY3Rvcl90ICpjYXBhY2l0eSkKIAlyZXR1cm4gY2hlY2tfc2hsX292ZXJmbG93KG5zemUsIHNoaWZ0LCBjYXBhY2l0eSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIE9wZW5lcnMgb2YgYSBtdWx0aXBhdGggbmFtZXNwYWNlIGdvIHRvIHRoZSBoZWFkIGRpc2s7IHRoZSBwZXItcGF0aCBkaXNrIGlzCiYjNDM7ICogaGlkZGVuIGFuZCBuZXZlciBoYXMgYW55LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucykKJiM0Mzt7CiYjNDM7CWlmIChudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLSZndDtoZWFkKSkKJiM0MzsJCXJldHVybiBkaXNrX29wZW5lcnMobnMtJmd0O2hlYWQtJmd0O2Rpc2spOwomIzQzOwlyZXR1cm4gZGlza19vcGVuZXJzKG5zLSZndDtkaXNrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLAogCQlzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKQogewpAQCAtMjQzNiw2ICYjNDM7MjQ1NCwyOCBAQCBzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQ2hhbmdpbmcgdGhlIExCQSBmb3JtYXQgb3IgdGhlIG1ldGFkYXRhIHNpemUgcmVpbnRlcnByZXRzIGV2ZXJ5dGhpbmcKJiM0MzsJICogdGhlIGhvc3QgaGFzIGFscmVhZHkgY2FjaGVkLCBxdWV1ZWQgb3IgaGFuZGVkIHRvIHRoZSBpbnRlZ3JpdHkgY29kZQomIzQzOwkgKiBmb3IgdGhpcyBuYW1lc3BhY2UsIGFuZCBmcmVlemluZyB0aGUgcXVldWUgZG9lcyBub3QgY292ZXIgYW55IG9mIGl0OgomIzQzOwkgKiBwYWdlIGNhY2hlIGNvbnRlbnRzLCBiaW9zIGJhdGNoZWQgb24gYSBwbHVnIGFuZCB0aGUgZGVmZXJyZWQKJiM0MzsJICogaW50ZWdyaXR5IHZlcmlmeSB3b3JrIGFsbCBvdXRsaXZlIHRoZSBmcmVlemUuICBJZiBzdWNoIGEgY2hhbmdlCiYjNDM7CSAqIGFycml2ZXMgdW5zb2xpY2l0ZWQgd2hpbGUgdGhlIG5hbWVzcGFjZSBpcyBpbiB1c2UsIHJlZnVzZSBpdCBhbmQgbGV0CiYjNDM7CSAqIHRoZSBjYWxsZXIgdGFrZSB0aGUgbmFtZXNwYWNlIG9mZmxpbmUgcmF0aGVyIHRoYW4gYWRvcHQgYSBnZW9tZXRyeQomIzQzOwkgKiB0aGF0IGRlc2NyaWJlcyBzb21ldGhpbmcgZWxzZSB0aGFuIHdoYXQgdGhlIGhvc3QgaXMgaG9sZGluZy4KJiM0MzsJICovCiYjNDM7CWlmIChudm1lX25zX29wZW5lcnMobnMpICZhbXA7JmFtcDsKJiM0MzsJICAgICF0ZXN0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sICZhbXA7bnMtJmd0O2N0cmwtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAobnMtJmd0O2hlYWQtJmd0O2xiYV9zaGlmdCAhPSBpZC0mZ3Q7bGJhZltsYmFmXS5kcyB8fAomIzQzOwkgICAgIG5zLSZndDtoZWFkLSZndDttcyAhPSBsZTE2X3RvX2NwdShpZC0mZ3Q7bGJhZltsYmFmXS5tcykpKSB7CiYjNDM7CQlkZXZfZXJyKG5zLSZndDtjdHJsLSZndDtkZXZpY2UsCiYjNDM7CQkJJiMzNDt1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlIG9uIGluLXVzZSBuc2lkICV1IChsYmFfc2hpZnQgJXUgLSZndDsgJXUsIG1zICV1IC0mZ3Q7ICV1KVxuJiMzNDssCiYjNDM7CQkJaW5mby0mZ3Q7bnNpZCwgbnMtJmd0O2hlYWQtJmd0O2xiYV9zaGlmdCwgaWQtJmd0O2xiYWZbbGJhZl0uZHMsCiYjNDM7CQkJbnMtJmd0O2hlYWQtJmd0O21zLCBsZTE2X3RvX2NwdShpZC0mZ3Q7bGJhZltsYmFmXS5tcykpOwomIzQzOwkJcmV0ID0gTlZNRV9TQ19JTlZBTElEX05TIHwgTlZNRV9TVEFUVVNfRE5SOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLSZndDtkaXNrLSZndDtxdWV1ZSk7CiAKIAltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobnMtJmd0O2Rpc2stJmd0O3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaAppbmRleCA4MjQ2NTFjYzg5OGRiLi45M2MxNWQ1NTgwZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCkBAIC0zMjksNiAmIzQzOzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHsKIAlOVk1FX0NUUkxfU0tJUF9JRF9DTlNfQ1MJPSA0LAogCU5WTUVfQ1RSTF9ESVJUWV9DQVBBQklMSVRZCT0gNSwKIAlOVk1FX0NUUkxfRlJPWkVOCQk9IDYsCiYjNDM7CU5WTUVfQ1RSTF9TRUxGX1JFU0NBTgkJPSA3LAogfTsKIAogc3RydWN0IG52bWVfY3RybCB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTkwCgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTWUgTmFtZXNwYWNlIEdlb21ldHJ5IFByb3RlY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNgIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhleSYjMzk7cmUgYWRkaW5nIGEgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgZmxhZyB0byBgbnZtZV9jdHJsX2ZsYWdzYC4gVGhlIGtleSBsb2dpYyBzZWVtcyB0byBiZSBhcm91bmQgYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLgoKSW4gYG52bWVfcGFzc3RocnVfZW5kYCwgdGhleSYjMzk7cmUgc2V0dGluZyB0aGlzIG5ldyBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBmbGFnIGJlZm9yZSBjYWxsaW5nIGBudm1lX3F1ZXVlX3NjYW5gIGFuZCBjbGVhcmluZyBpdCBhZnRlcndhcmQuIE1ha2VzIHNlbnNlOiB0aGlzIGluZGljYXRlcyBhIGRlbGliZXJhdGUsIGNvbnRyb2xsZWQgcmUtc2Nhbi4gVGhlbiwgaW4gYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNydWNpYWwgY2hlY2suIFRoZXkgdmVyaWZ5IGlmIHRoZSBuYW1lc3BhY2UgaXMgaW4gdXNlIHZpYSBgbnZtZV9uc19vcGVuZXJzKG5zKWAuIElmIGl0ICppcyogaW4gdXNlICphbmQqIGl0JiMzOTtzICpub3QqIGEgc2VsZi1yZXNjYW4gKHRoZSBgIXRlc3RfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgJmFtcDtucy0mZ3Q7Y3RybC0mZ3Q7ZmxhZ3MpYCBwYXJ0KSwgdGhleSYjMzk7cmUgYmxvY2tpbmcgY2hhbmdlcyB0byB0aGUgTEJBIGZvcm1hdCBvciBtZXRhZGF0YSBzaXplLCByZXR1cm5pbmcgYW4gYE5WTUVfU0NfSU5WQUxJRF9OUyB8IE5WTUVfU1RBVFVTX0ROUmAgZXJyb3IuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBwcm90ZWN0aW9uLgoKVGhlIHJhdGlvbmFsZSBpcyBjbGVhcjogcHJldmVudCB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyB0byBuYW1lc3BhY2VzIHRoYXQgYXJlIGFjdGl2ZWx5IGJlaW5nIHVzZWQuIFRoaXMgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgY29uc2VxdWVuY2VzIOKAkyBkYXRhIGNvcnJ1cHRpb24sIGNyYXNoZXMsIHlvdSBuYW1lIGl0LCBiZWNhdXNlIHRoZSBob3N0IGhhcyBjYWNoZWQgZGF0YSwgcXVldWVkIEkvT3MsIGFuZCB2ZXJpZmljYXRpb24gd29yayB0aGF0IHdvdWxkIGJlY29tZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbmV3IGdlb21ldHJ5IGlmIGNoYW5nZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbm8uIEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJdCBzaW1wbHkgYWRkcyBhIGNoZWNrIHRvIHByZXZlbnQgZ2VvbWV0cnkgY2hhbmdlcyB3aGVuIHRoZSBuYW1lc3BhY2UgaXMgYWN0aXZlLCBleGNlcHQgZHVyaW5nIGEgc2VsZi1yZXNjYW4uIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHVzZXItc3BhY2Ugc3RydWN0dXJlcywgbm9yIGFsbG9jYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcHJvYmxlbWF0aWMuIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2sgY2hhbmdlcyB0aGF0IHdvdWxkIHBlcm1pdCB1bmluaXRpYWxpemVkIGRhdGEgdG8gYmUgcmVhZC4gVGhlIG9yaWdpbmFsIGlzc3VlIHRoaXMgaXMgZml4aW5nIGlzIGxpa2VseSBkdWUgdG8gdGhlIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLCBkYXRhIGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdGhhdCBjYW4gcmVzdWx0IHdoZW4gdGhlIGJsb2NrIHNpemUgb3IgbWV0YWRhdGEgaXMgbW9kaWZpZWQgd2hpbGUgdGhlIGRldmljZSBpcyBpbiB1c2UsIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgS0FTQU4gb3IgbW9yZSBzdGFuZGFyZCBjaGVja3MgKGxpa2UgaXNzdWVzIHdpdGhpbiB0aGUgcGFnZSBjYWNoZSBvciBiaW8gaXNzdWVzKS4KCkxldCBtZSBkb3VibGUtY2hlY2sgYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgIGFnYWluLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTm90aGluZyBzdGlja3Mgb3V0LiBUaGUgdmFyaWFibGVzIHVzZWQgKGBpZGAgaXMgYSBwb2ludGVyIHRvIGBzdHJ1Y3QgbnZtZV9pZF9uc2Agd2hpY2ggaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBlbHNld2hlcmUsIGFuZCBgbGJhZmAgaXMgYW4gaW5kZXgpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGp1c3QgYWRkcyBhIGZsYWcgYW5kIGEgY29uZGl0aW9uYWwgY2hlY2suCgpTbywgeWVhaCwgaXQgbG9va3MgbGlrZSBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGZvciB0aGlzIG9uZS4gVGhpcyBpcyBhIGNsZWFuLCB3ZWxsLWZvY3VzZWQgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSByZWFsIHBvdGVudGlhbCBwcm9ibGVtIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5ldyBzZWN1cml0eSBjb25jZXJucyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgYW5kIHVzZXMgaXQgdG8gcHJldmVudCB1bnNvbGljaXRlZCBMQkEgZm9ybWF0IG9yIG1ldGFkYXRhIHNpemUgY2hhbmdlcyBvbiBpbi11c2UgTlZNZSBuYW1lc3BhY2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1ZSB0byBibG9jayBzaXplIGNoYW5nZXMgd2hpbGUgaW4gdXNlKSBhcmUgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgYW5kIHVzZXMgaXQgdG8gcHJldmVudCB1bnNvbGljaXRlZCBMQkEgZm9ybWF0IG9yIG1ldGFkYXRhIHNpemUgY2hhbmdlcyBvbiBpbi11c2UgTlZNZSBuYW1lc3BhY2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1ZSB0byBibG9jayBzaXplIGNoYW5nZXMgd2hpbGUgaW4gdXNlKSBhcmUgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM1OjM0LjM5NDgyNzU5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQxNzI2NzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIk5WTUVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV9wYXNzdGhydV9lbmRcIixcbiAgICBcIm52bWVfcXVldWVfc2NhblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBOVk1FX0NUUkxfU0VMRl9SRVNDQU5gIGFuZCB1c2VzIGl0IHRvIHByZXZlbnQgdW5zb2xpY2l0ZWQgTEJBIGZvcm1hdCBvciBtZXRhZGF0YSBzaXplIGNoYW5nZXMgb24gaW4tdXNlIE5WTWUgbmFtZXNwYWNlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGRhdGEgY29ycnVwdGlvbiBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdWUgdG8gYmxvY2sgc2l6ZSBjaGFuZ2VzIHdoaWxlIGluIHVzZSkgYXJlIHJlbGF0ZWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIGNvcmUgZHJpdmVyIHRvIHJlZnVzZSB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyBvbiBhbiBpbi11c2UgbmFtZXNwYWNlLCBhbmQgYWRkcyBhIGZsYWcgdG8gYWxsb3cgZm9ybWF0IGNoYW5nZXMgaWYgdGhlIGhvc3QgcmVxdWVzdGVkIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIGFmZmVjdHMgY29yZSBOVk1lIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM1OjM0LjM5NDgzMzEwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMDgwOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjI4MDcxMDJhZTBiNTA5MTE5N2YwM2I1YTQ5OWI2ODZmYmMyNmM4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxOTozNTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcXG5pbmRleCA0NTNjMWYwYjJkZDA5Li5lYmFjNWEzZDFhMDc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbkBAIC0xMjg1LDggKzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0aWYgKGVmZmVjdHMgXFx1MDAyNiAoTlZNRV9DTURfRUZGRUNUU19OSUMgfCBOVk1FX0NNRF9FRkZFQ1RTX05DQykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIGhvc3QgYXNrZWQgZm9yIHRoaXMgY2hhbmdlLCBzbyBsZXQgdGhlIHJlc2NhbiBhZG9wdCB0aGVcXG4rXFx0XFx0ICogbmV3IG5hbWVzcGFjZSBnZW9tZXRyeSBldmVuIGlmIHRoZSBkaXNrIGlzIG9wZW4uICBPbmx5IGFuXFxuK1xcdFxcdCAqIHVuc29saWNpdGVkIGNoYW5nZSBpcyByZWZ1c2VkLCBzZWUgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jaygpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2V0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFxcdTAwMjZjdHJsLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcXG4gXFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2Y3RybC1cXHUwMDNlc2Nhbl93b3JrKTtcXG4rXFx0XFx0Y2xlYXJfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXFx1MDAyNmN0cmwtXFx1MDAzZWZsYWdzKTtcXG4gXFx0fVxcbiBcXHRpZiAobnMpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjM4NCw2ICsyMzkxLDE3IEBAIHN0YXRpYyBib29sIG52bWVfaW52YWxpZF9sYmFfc3oodTY0IG5zemUsIHNpZ25lZCBpbnQgc2hpZnQsIHNlY3Rvcl90ICpjYXBhY2l0eSlcXG4gXFx0cmV0dXJuIGNoZWNrX3NobF9vdmVyZmxvdyhuc3plLCBzaGlmdCwgY2FwYWNpdHkpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBPcGVuZXJzIG9mIGEgbXVsdGlwYXRoIG5hbWVzcGFjZSBnbyB0byB0aGUgaGVhZCBkaXNrOyB0aGUgcGVyLXBhdGggZGlzayBpc1xcbisgKiBoaWRkZW4gYW5kIG5ldmVyIGhhcyBhbnkuXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IG52bWVfbnNfb3BlbmVycyhzdHJ1Y3QgbnZtZV9ucyAqbnMpXFxuK3tcXG4rXFx0aWYgKG52bWVfbnNfaGVhZF9tdWx0aXBhdGgobnMtXFx1MDAzZWhlYWQpKVxcbitcXHRcXHRyZXR1cm4gZGlza19vcGVuZXJzKG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrKTtcXG4rXFx0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cXHUwMDNlZGlzayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuIFxcdFxcdHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuIHtcXG5AQCAtMjQzNiw2ICsyNDU0LDI4IEBAIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDaGFuZ2luZyB0aGUgTEJBIGZvcm1hdCBvciB0aGUgbWV0YWRhdGEgc2l6ZSByZWludGVycHJldHMgZXZlcnl0aGluZ1xcbitcXHQgKiB0aGUgaG9zdCBoYXMgYWxyZWFkeSBjYWNoZWQsIHF1ZXVlZCBvciBoYW5kZWQgdG8gdGhlIGludGVncml0eSBjb2RlXFxuK1xcdCAqIGZvciB0aGlzIG5hbWVzcGFjZSwgYW5kIGZyZWV6aW5nIHRoZSBxdWV1ZSBkb2VzIG5vdCBjb3ZlciBhbnkgb2YgaXQ6XFxuK1xcdCAqIHBhZ2UgY2FjaGUgY29udGVudHMsIGJpb3MgYmF0Y2hlZCBvbiBhIHBsdWcgYW5kIHRoZSBkZWZlcnJlZFxcbitcXHQgKiBpbnRlZ3JpdHkgdmVyaWZ5IHdvcmsgYWxsIG91dGxpdmUgdGhlIGZyZWV6ZS4gIElmIHN1Y2ggYSBjaGFuZ2VcXG4rXFx0ICogYXJyaXZlcyB1bnNvbGljaXRlZCB3aGlsZSB0aGUgbmFtZXNwYWNlIGlzIGluIHVzZSwgcmVmdXNlIGl0IGFuZCBsZXRcXG4rXFx0ICogdGhlIGNhbGxlciB0YWtlIHRoZSBuYW1lc3BhY2Ugb2ZmbGluZSByYXRoZXIgdGhhbiBhZG9wdCBhIGdlb21ldHJ5XFxuK1xcdCAqIHRoYXQgZGVzY3JpYmVzIHNvbWV0aGluZyBlbHNlIHRoYW4gd2hhdCB0aGUgaG9zdCBpcyBob2xkaW5nLlxcbitcXHQgKi9cXG4rXFx0aWYgKG52bWVfbnNfb3BlbmVycyhucykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICF0ZXN0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFxcdTAwMjZucy1cXHUwMDNlY3RybC1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWxiYV9zaGlmdCAhPSBpZC1cXHUwMDNlbGJhZltsYmFmXS5kcyB8fFxcbitcXHQgICAgIG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VtcyAhPSBsZTE2X3RvX2NwdShpZC1cXHUwMDNlbGJhZltsYmFmXS5tcykpKSB7XFxuK1xcdFxcdGRldl9lcnIobnMtXFx1MDAzZWN0cmwtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcInVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2Ugb24gaW4tdXNlIG5zaWQgJXUgKGxiYV9zaGlmdCAldSAtXFx1MDAzZSAldSwgbXMgJXUgLVxcdTAwM2UgJXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2Vuc2lkLCBucy1cXHUwMDNlaGVhZC1cXHUwMDNlbGJhX3NoaWZ0LCBpZC1cXHUwMDNlbGJhZltsYmFmXS5kcyxcXG4rXFx0XFx0XFx0bnMtXFx1MDAzZWhlYWQtXFx1MDAzZW1zLCBsZTE2X3RvX2NwdShpZC1cXHUwMDNlbGJhZltsYmFmXS5tcykpO1xcbitcXHRcXHRyZXQgPSBOVk1FX1NDX0lOVkFMSURfTlMgfCBOVk1FX1NUQVRVU19ETlI7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuIFxcbiBcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobnMtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXFxuaW5kZXggODI0NjUxY2M4OThkYi4uOTNjMTVkNTU4MGUzMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcXG5AQCAtMzI5LDYgKzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHtcXG4gXFx0TlZNRV9DVFJMX1NLSVBfSURfQ05TX0NTXFx0PSA0LFxcbiBcXHROVk1FX0NUUkxfRElSVFlfQ0FQQUJJTElUWVxcdD0gNSxcXG4gXFx0TlZNRV9DVFJMX0ZST1pFTlxcdFxcdD0gNixcXG4rXFx0TlZNRV9DVFJMX1NFTEZfUkVTQ0FOXFx0XFx0PSA3LFxcbiB9O1xcbiBcXG4gc3RydWN0IG52bWVfY3RybCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM1OjM0LjgyNTY2ODYyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzMTM3NTAyMDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudm1lX3Bhc3N0aHJ1X2VuZFwiLFxuICAgIFwibnZtZV9xdWV1ZV9zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5WTWUgY29yZSBkcml2ZXIgdG8gcmVmdXNlIHVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2VzIG9uIGFuIGluLXVzZSBuYW1lc3BhY2UsIGFuZCBhZGRzIGEgZmxhZyB0byBhbGxvdyBmb3JtYXQgY2hhbmdlcyBpZiB0aGUgaG9zdCByZXF1ZXN0ZWQgaXQgdmlhIE5WTWUgcGFzc3Rocm91Z2ggY29tbWFuZHMuIFRoaXMgYWZmZWN0cyBjb3JlIE5WTWUgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI4MDcxMDJhZTBiNTA5MTE5N2YwM2I1YTQ5OWI2ODZmYmMyNmM4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE5OjM1OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCA0NTNjMWYwYjJkZDA5Li5lYmFjNWEzZDFhMDc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC0xMjg1LDggKzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuIFx0XHR9XG4gXHR9XG4gXHRpZiAoZWZmZWN0cyBcdTAwMjYgKE5WTUVfQ01EX0VGRkVDVFNfTklDIHwgTlZNRV9DTURfRUZGRUNUU19OQ0MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBob3N0IGFza2VkIGZvciB0aGlzIGNoYW5nZSwgc28gbGV0IHRoZSByZXNjYW4gYWRvcHQgdGhlXG4rXHRcdCAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhblxuK1x0XHQgKiB1bnNvbGljaXRlZCBjaGFuZ2UgaXMgcmVmdXNlZCwgc2VlIG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soKS5cbitcdFx0ICovXG4rXHRcdHNldF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZjdHJsLVx1MDAzZWZsYWdzKTtcbiBcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNmN0cmwtXHUwMDNlc2Nhbl93b3JrKTtcbitcdFx0Y2xlYXJfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2Y3RybC1cdTAwM2VmbGFncyk7XG4gXHR9XG4gXHRpZiAobnMpXG4gXHRcdHJldHVybjtcbkBAIC0yMzg0LDYgKzIzOTEsMTcgQEAgc3RhdGljIGJvb2wgbnZtZV9pbnZhbGlkX2xiYV9zeih1NjQgbnN6ZSwgc2lnbmVkIGludCBzaGlmdCwgc2VjdG9yX3QgKmNhcGFjaXR5KVxuIFx0cmV0dXJuIGNoZWNrX3NobF9vdmVyZmxvdyhuc3plLCBzaGlmdCwgY2FwYWNpdHkpO1xuIH1cbiBcbisvKlxuKyAqIE9wZW5lcnMgb2YgYSBtdWx0aXBhdGggbmFtZXNwYWNlIGdvIHRvIHRoZSBoZWFkIGRpc2s7IHRoZSBwZXItcGF0aCBkaXNrIGlzXG4rICogaGlkZGVuIGFuZCBuZXZlciBoYXMgYW55LlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcbit7XG4rXHRpZiAobnZtZV9uc19oZWFkX211bHRpcGF0aChucy1cdTAwM2VoZWFkKSlcbitcdFx0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2spO1xuK1x0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cdTAwM2VkaXNrKTtcbit9XG4rXG4gc3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbiBcdFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbiB7XG5AQCAtMjQzNiw2ICsyNDU0LDI4IEBAIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIENoYW5naW5nIHRoZSBMQkEgZm9ybWF0IG9yIHRoZSBtZXRhZGF0YSBzaXplIHJlaW50ZXJwcmV0cyBldmVyeXRoaW5nXG4rXHQgKiB0aGUgaG9zdCBoYXMgYWxyZWFkeSBjYWNoZWQsIHF1ZXVlZCBvciBoYW5kZWQgdG8gdGhlIGludGVncml0eSBjb2RlXG4rXHQgKiBmb3IgdGhpcyBuYW1lc3BhY2UsIGFuZCBmcmVlemluZyB0aGUgcXVldWUgZG9lcyBub3QgY292ZXIgYW55IG9mIGl0OlxuK1x0ICogcGFnZSBjYWNoZSBjb250ZW50cywgYmlvcyBiYXRjaGVkIG9uIGEgcGx1ZyBhbmQgdGhlIGRlZmVycmVkXG4rXHQgKiBpbnRlZ3JpdHkgdmVyaWZ5IHdvcmsgYWxsIG91dGxpdmUgdGhlIGZyZWV6ZS4gIElmIHN1Y2ggYSBjaGFuZ2VcbitcdCAqIGFycml2ZXMgdW5zb2xpY2l0ZWQgd2hpbGUgdGhlIG5hbWVzcGFjZSBpcyBpbiB1c2UsIHJlZnVzZSBpdCBhbmQgbGV0XG4rXHQgKiB0aGUgY2FsbGVyIHRha2UgdGhlIG5hbWVzcGFjZSBvZmZsaW5lIHJhdGhlciB0aGFuIGFkb3B0IGEgZ2VvbWV0cnlcbitcdCAqIHRoYXQgZGVzY3JpYmVzIHNvbWV0aGluZyBlbHNlIHRoYW4gd2hhdCB0aGUgaG9zdCBpcyBob2xkaW5nLlxuK1x0ICovXG4rXHRpZiAobnZtZV9uc19vcGVuZXJzKG5zKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhdGVzdF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZucy1cdTAwM2VjdHJsLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAobnMtXHUwMDNlaGVhZC1cdTAwM2VsYmFfc2hpZnQgIT0gaWQtXHUwMDNlbGJhZltsYmFmXS5kcyB8fFxuK1x0ICAgICBucy1cdTAwM2VoZWFkLVx1MDAzZW1zICE9IGxlMTZfdG9fY3B1KGlkLVx1MDAzZWxiYWZbbGJhZl0ubXMpKSkge1xuK1x0XHRkZXZfZXJyKG5zLVx1MDAzZWN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwidW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZSBvbiBpbi11c2UgbnNpZCAldSAobGJhX3NoaWZ0ICV1IC1cdTAwM2UgJXUsIG1zICV1IC1cdTAwM2UgJXUpXFxuXCIsXG4rXHRcdFx0aW5mby1cdTAwM2Vuc2lkLCBucy1cdTAwM2VoZWFkLVx1MDAzZWxiYV9zaGlmdCwgaWQtXHUwMDNlbGJhZltsYmFmXS5kcyxcbitcdFx0XHRucy1cdTAwM2VoZWFkLVx1MDAzZW1zLCBsZTE2X3RvX2NwdShpZC1cdTAwM2VsYmFmW2xiYWZdLm1zKSk7XG4rXHRcdHJldCA9IE5WTUVfU0NfSU5WQUxJRF9OUyB8IE5WTUVfU1RBVFVTX0ROUjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuIFxuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuaW5kZXggODI0NjUxY2M4OThkYi4uOTNjMTVkNTU4MGUzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG5AQCAtMzI5LDYgKzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHtcbiBcdE5WTUVfQ1RSTF9TS0lQX0lEX0NOU19DU1x0PSA0LFxuIFx0TlZNRV9DVFJMX0RJUlRZX0NBUEFCSUxJVFlcdD0gNSxcbiBcdE5WTUVfQ1RSTF9GUk9aRU5cdFx0PSA2LFxuK1x0TlZNRV9DVFJMX1NFTEZfUkVTQ0FOXHRcdD0gNyxcbiB9O1xuIFxuIHN0cnVjdCBudm1lX2N0cmwge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzU6MzQuODI1NjcxNDUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxNTcyNTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5WTWUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY2AgYW5kIGBkcml2ZXJzL252bWUvaG9zdC9udm1lLmhgLiBJdCBzZWVtcyB0byBiZSBhIHNlY3VyaXR5IGhhcmRlbmluZyBjaGFuZ2UsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHByZXZlbnRzIHVuc29saWNpdGVkIGZvcm1hdCBjaGFuZ2VzIG9uIGFuIGFjdGl2ZSBuYW1lc3BhY2Ugd2l0aGluIHRoZSBOVk1lIGRyaXZlci4gVGhhdCdzIGEgZ29vZCBzdGVwIHRvd2FyZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGxvc3Mgb3IgY29ycnVwdGlvbiwgSSdkIHNheS4gVGhlIGFkZGl0aW9uIG9mIHRoZSBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBmbGFnIGlzIGludGVyZXN0aW5nIHRvbzsgaXQgYWxsb3dzIGNvbnRyb2xsZWQgZm9ybWF0IGNoYW5nZXMgaW5pdGlhdGVkIGJ5IHRoZSBob3N0LiBUaGlzIGltcGxpZXMgdGhlcmUncyBhIHNwZWNpZmljIGZsb3cgd2hlcmUgZm9ybWF0dGluZyBpcyBhY2NlcHRhYmxlLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHRhcmdldC4gVGhlIGNvcmUgTlZNZSBkcml2ZXIgY2hhbmdlcywgYW5kIEkga25vdyBRRU1VIGhhcyBhIE5WTWUgZW11bGF0b3IuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgY29kZSBwYXRocyB0aGF0IGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHRoZSB1c2VyIHNwYWNlLiBUaGUgY2hhbGxlbmdlIHdpbGwgYmUgY3JhZnRpbmcgaW5wdXRzIHRoYXQgdHJpZ2dlciB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyBhZGRlZCBieSB0aGlzIHBhdGNoLCB0byBwcm9iZSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTGV0J3MgZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gbWFrZSBzdXJlIEkgY2FuIGVuYWJsZSBOVk1lIHByb3Blcmx5IGluIG15IHRlc3QgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBsb29rIGluIGBkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBlbnN1cmUgaXQncyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgdGhlIHRlc3RpbmcuIEtub3dpbmcgaG93IE5WTWUgaXMgY29uZmlndXJlZCBpcyBrZXkuIEknbGwgYmUgbG9va2luZyB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZsYWdzIGZvciB0aGUgZW11bGF0ZWQgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzU6NDAuNTQxMzk5Njc2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTY5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05WTUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTI9Y29uZmlnIE5WTUVfQ09SRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00LVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9OVk1FXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJOVk0gRXhwcmVzcyBibG9jayBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM1OjQwLjYwMTk3NTEyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzkwMDg2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIE5WTWUgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYEJMS19ERVZfTlZNRWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGUgY29yZSBOVk1lIGZ1bmN0aW9uYWxpdHksIHRoYXQgaXMgYE5WTUVfQ09SRWAsIGlzIGFsc28gYmVpbmcgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGlzbid0IHNvbWUgaW1wbGljaXQgZGVwZW5kZW5jeSBvciBzZWxlY3Rpb24gaXNzdWUuIEFoLCBnb29kLiBgQkxLX0RFVl9OVk1FYCBkb2VzIGluZGVlZCBzZWxlY3QgYE5WTUVfQ09SRWAuIFRoYXTigJlzIHdoYXQgSSBleHBlY3RlZCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncyB0byBhdm9pZCBkb3duc3RyZWFtIGlzc3Vlcy5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIG1vZGlmaWNhdGlvbnMuIEkgc2VlIHdlIGhhdmUgY2hhbmdlcyB0byBgbnZtZV9wYXNzdGhydV9lbmRgLCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AsIGFuZCBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBudm1lX25zX29wZW5lcnNgLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgIGFyZSBnb29kIGZvY3VzIHN5bWJvbHMgdG8gd29yayBmcm9tLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIGVmZmVjdHMgb2YgdGhlIGNoYW5nZXMgdG8gdGhlc2UgZnVuY3Rpb25zIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGNvZGUuIFRoZXkgYXJlIGxpa2VseSB0b3VjaGluZyBvbiBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSwgYW5kIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiB3aWxsIGJlIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo0NS4xODA5ODYyOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIxNTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3Bhc3N0aHJ1X2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNjk9RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9zdGFydCwgXFxcIk5WTUVfVEFSR0VUX1BBU1NUSFJVXFxcIik7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyNzAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNzE6dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcyLVxcdFxcdCAgICAgICBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsIGludCBzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEzMjE6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9lbmQsIFxcXCJOVk1FX1RBUkdFVF9QQVNTVEhSVVxcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo0NS4yMzAyMDc4MDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU1ODcxMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipOVk1lIENvbmNlcm46IEV4cG9ydGVkIFN5bWJvbHMqKlxuXG5BbHJpZ2h0LCBzbyBgbnZtZV9wYXNzdGhydV9lbmRgIGlzIGV4cG9ydGVkLCB0aGF0J3MgZmluZSwgSSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgZm9yIHRoYXQuIEl0IG1ha2VzIHNlbnNlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgTlZNZSBkZXZpY2UgbWFuYWdlbWVudCBhbmQgaW50ZXJhY3Rpb24uIEJ1dC4uLiBub3cgSSdtIHRoaW5raW5nIGFib3V0IGFub3RoZXIgZnVuY3Rpb24sIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYC4gSXMgKnRoYXQqIGFsc28gZXhwb3J0ZWQ/IFRoYXQncyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gY29uc2lkZXIuIEknbSB3b25kZXJpbmcgaWYgaXQncyBnb3QgdGhlIHNhbWUgc29ydCBvZiBvdXR3YXJkIGZhY2luZyBuZWVkLiBXZSd2ZSBnb3QgdG8gZW5zdXJlIHRoZSByaWdodCB0aGluZ3MgYXJlIGV4cG9zZWQgd2hpbGUga2VlcGluZyB0aGUgcmVzdCBpbnRlcm5hbCwgbWFpbnRhaW5pbmcgb3VyIGludGVuZGVkIGFic3RyYWN0aW9uLCBhbmQgYXZvaWRpbmcgdW5uZWNlc3NhcnkgY29tcGxleGl0eSBvciBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBBbmQgaG93IGRvZXMgdGhhdCBhZmZlY3QgdGhlIGRldmljZSBzdGFjaz8gQW5kIHdoYXQgd291bGQgaXQgaW1wbHkgZm9yIHRoZSBvdmVyYWxsIGtlcm5lbCBkZXNpZ24/IFRoaXMgY291bGQgaGF2ZSBhIHJpcHBsZSBlZmZlY3QuIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgb24gdGhlIGV4cG9ydCBzdGF0dXMgb2YgdGhhdCBvdGhlciBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBlaXRoZXIgYmVpbmcgZXhwb3NlZCBvciBpbnRlcm5hbCwgYXMgdGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgZGVzaWduIG9mIHRoaXMgbmV4dCBtb2R1bGUgSSdtIHdvcmtpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo0OC41ODYwODIwMjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MTU2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTAtXFx0XFx0ICogbmV3IG5hbWVzcGFjZSBnZW9tZXRyeSBldmVuIGlmIHRoZSBkaXNrIGlzIG9wZW4uICBPbmx5IGFuXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyOTE6XFx0XFx0ICogdW5zb2xpY2l0ZWQgY2hhbmdlIGlzIHJlZnVzZWQsIHNlZSBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKCkuXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTItXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjM5OD1zdGF0aWMgdW5zaWduZWQgaW50IG52bWVfbnNfb3BlbmVycyhzdHJ1Y3QgbnZtZV9ucyAqbnMpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQwNC1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjQwNTpzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDA2LVxcdFxcdHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm8oc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzMtXFx0XFx0fVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTc0OlxcdFxcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2sobnMsIGluZm8pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTc1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTc2LVxcdGNhc2UgTlZNRV9DU0lfTlZNOlxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTc3OlxcdFxcdHJldCA9IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2sobnMsIGluZm8pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTc4LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo0OC42MzQ4MDU4NjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEwNDk2ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBOVk1lIGV4cGVydDpcblxuKipJbnRlcm5hbCBOVk1lIE5hbWVzcGFjZSBCbG9jayBVcGRhdGVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uLi4gaG1tLCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZmlsZSBvciBtb2R1bGUgd2l0aGluIHRoZSBOVk1lIGRyaXZlci4gSXQncyBub3QgZGVzaWduZWQgdG8gYmUgYWNjZXNzZWQgZXh0ZXJuYWxseS4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSB1cGRhdGluZyB0aGUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGJsb2NrIGlzIGEgY3JpdGljYWwsIGxvdy1sZXZlbCBvcGVyYXRpb24uIFlvdSB3b3VsZG4ndCB3YW50IHRvIGV4cG9zZSB0aGF0IGRpcmVjdGx5IHRvIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gd2l0aG91dCBjYXJlZnVsIGNvbnRyb2wuXG5cbk5vdywgaXQncyBjYWxsZWQgYnkgYG52bWVfdXBkYXRlX25zX2luZm9gLiBBaCwgb2theSwgc28gYG52bWVfdXBkYXRlX25zX2luZm9gIGlzIHRoZSBsaWtlbHkgcHVibGljIGludGVyZmFjZSwgb3IgYXQgbGVhc3QgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiwgdGhhdCBhY3R1YWxseSBvcmNoZXN0cmF0ZXMgdGhlIHByb2Nlc3Mgb2YgdXBkYXRpbmcgdGhlIG5hbWVzcGFjZSBpbmZvcm1hdGlvbi4gYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgIGlzIHRoZW4gdGhlIHdvcmtob3JzZSwgdGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgaGVhdnkgbGlmdGluZyBvbiB0aGUgYWN0dWFsIGJsb2NrIHdyaXRlLiBJdCdzIHRoZSBcInNlY3JldCBzYXVjZVwiIHRoYXQncyBoaWRkZW4gYmVoaW5kIHRoZSBjdXJ0YWluLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBrZXkuIEl0IGltcGxpZXMgdGhhdCBgbnZtZV91cGRhdGVfbnNfaW5mb2AgcHJvYmFibHkgaGFuZGxlcyB0aGluZ3MgbGlrZSBlcnJvciBjaGVja2luZywgbG9ja2luZywgcG90ZW50aWFsbHkgcHJlcGFyaW5nIGRhdGEsIGFuZCB0aGVuICpjYWxscyogdGhlIHN0YXRpYywgaW50ZXJuYWwgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIHVwZGF0ZSBvZiB0aGUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGJsb2NrIG9uIHRoZSBkcml2ZS4gR290IGl0LiBUaGlzIGlzIGEgdmVyeSB0eXBpY2FsIGRlc2lnbiBwYXR0ZXJuIGZvciByb2J1c3QgZGV2aWNlIGRyaXZlcnMgYW5kIE5WTWUgY29kZSBpbiBnZW5lcmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzU6NTIuNTQ1MzA1MzM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzNzg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3VwZGF0ZV9uc19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI3MT12b2lkIG52bWVfcGFzc3RocnVfZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTMyIGVmZmVjdHMsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5MC1cXHRcXHQgKiBuZXcgbmFtZXNwYWNlIGdlb21ldHJ5IGV2ZW4gaWYgdGhlIGRpc2sgaXMgb3Blbi4gIE9ubHkgYW5cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5MTpcXHRcXHQgKiB1bnNvbGljaXRlZCBjaGFuZ2UgaXMgcmVmdXNlZCwgc2VlIG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soKS5cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5Mi1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMTkyPXN0YXRpYyB2b2lkIG52bWVfc2V0X2NodW5rX3NlY3RvcnMoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9pZF9ucyAqaWQsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjIyMy1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjIyNDpzdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fZ2VuZXJpYyhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyMjUtXFx0XFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzk4PXN0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDA0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDA1OnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0MDYtXFx0XFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTUyPXN0YXRpYyB2b2lkIG52bWVfc3RhY2tfem9uZV9yZXNvdXJjZXMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqdCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTU5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTYwOnN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjEte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzAtXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlbnNpZCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1NzE6XFx0XFx0XFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKG5zLCBpbmZvKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3Mi1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU3My1cXHRcXHR9XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1NzQ6XFx0XFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhucywgaW5mbyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzUtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzYtXFx0Y2FzZSBOVk1FX0NTSV9OVk06XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1Nzc6XFx0XFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhucywgaW5mbyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU4Mi1cXHRcXHRcXHRpbmZvLVxcdTAwM2Vuc2lkLCBpbmZvLVxcdTAwM2VpZHMuY3NpKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU4MzpcXHRcXHRyZXQgPSBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMobnMsIGluZm8pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTg0LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQyMzE9c3RhdGljIHZvaWQgbnZtZV9hbGxvY19ucyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQyODUtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQyODY6XFx0aWYgKG52bWVfdXBkYXRlX25zX2luZm8obnMsIGluZm8pKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00Mjg3LVxcdFxcdGdvdG8gb3V0X3VubGlua19ucztcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NDA5PXN0YXRpYyB2b2lkIG52bWVfdmFsaWRhdGVfbnMoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0MTgtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ0MTk6XFx0cmV0ID0gbnZtZV91cGRhdGVfbnNfaW5mbyhucywgaW5mbyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0MjAtb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo1Mi41OTU2NTUyODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNDY2MTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSByZWxhdGlvbnNoaXBzLCBzdW1tYXJpemVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTlZNZSBOYW1lc3BhY2UgTG9naWMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBudm1lX3VwZGF0ZV9uc19pbmZvYCBpcyAqYWxzbyogZGVjbGFyZWQgYXMgc3RhdGljLCBpbnRlcmVzdGluZy4gU28gdGhhdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4uIEl0J3MgY2FsbGVkIGZyb20gYG52bWVfYWxsb2NfbnNgIGFuZCBgbnZtZV92YWxpZGF0ZV9uc2AuIE1ha2VzIHNlbnNlLCB0aGUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGxpa2VseSBuZWVkcyB1cGRhdGluZyB3aGVuIHdlJ3JlIGNyZWF0aW5nIG9yIHZhbGlkYXRpbmcgYSBuYW1lc3BhY2UuXG5cbk5vdywgYG52bWVfdmFsaWRhdGVfbnNgIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX25zYC4gU28sIHdoZW4gd2UncmUgc2Nhbm5pbmcgdGhlIHN5c3RlbSBmb3IgTlZNZSBuYW1lc3BhY2VzLCB3ZSBuZWVkIHRvIHZhbGlkYXRlIHRoZW0sIGFuZCB0aGF0IHZhbGlkYXRpb24gaW52b2x2ZXMgdXBkYXRpbmcgdGhlIGluZm9ybWF0aW9uLiBUaGUgZmxvdyBtYWtlcyBzZW5zZS4gQWxsb2NhdGlvbiAtXHUwMDNlIFZhbGlkYXRpb24gLVx1MDAzZSBTY2FubmluZy4gSXQncyBhbGwgY29ubmVjdGVkLCBhbmQgZWFjaCBmdW5jdGlvbiBwbGF5cyBpdHMgcGFydCBpbiBtYW5hZ2luZyB0aG9zZSBuYW1lc3BhY2VzLiBJJ2QgbmVlZCB0byBkaXZlIGRlZXBlciwgb2YgY291cnNlLCBidXQganVzdCBsb29raW5nIGF0IHRoZSBjYWxsIHJlbGF0aW9uc2hpcHMgZ2l2ZXMgYSBxdWljayBvdmVydmlldyBvZiB0aGlzIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo1Ni4yMjAzMTkxNTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODY2ODcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3NjYW5fbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NDA5PXN0YXRpYyB2b2lkIG52bWVfdmFsaWRhdGVfbnMoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9uc19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0MzAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ0MzE6c3RhdGljIHZvaWQgbnZtZV9zY2FuX25zKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHVuc2lnbmVkIG5zaWQpXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0MzIte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ0ODMtICogTm90ZTogVGhlcmUgaXMgYSBzaW5nbGUgYXN5bmNfc2Nhbl9pbmZvIHN0cnVjdHVyZSBzaGFyZWQgYnkgYWxsIGluc3RhbmNlc1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NDg0OiAqIG9mIG52bWVfc2Nhbl9uc19hc3luYygpIHNjYW5uaW5nIGEgZ2l2ZW4gY29udHJvbGxlciwgc28gdGhlIGF0b21pY1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NDg1LSAqIG9wZXJhdGlvbnMgb24gbmV4dF9uc2lkIGFyZSBjcml0aWNhbCB0byBlbnN1cmUgZWFjaCBpbnN0YW5jZSBzY2FucyBhIHVuaXF1ZVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ0ODg9c3RydWN0IGFzeW5jX3NjYW5faW5mbyB7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDQ5My1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDQ5NDpzdGF0aWMgdm9pZCBudm1lX3NjYW5fbnNfYXN5bmModm9pZCAqZGF0YSwgYXN5bmNfY29va2llX3QgY29va2llKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NDk1LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTAyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NTAzOlxcdG52bWVfc2Nhbl9ucyhzY2FuX2luZm8tXFx1MDAzZWN0cmwsIG5zaWQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTA0LX1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NTA2PXN0YXRpYyB2b2lkIG52bWVfcmVtb3ZlX2ludmFsaWRfbmFtZXNwYWNlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1MjUtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ1MjY6c3RhdGljIGludCBudm1lX3NjYW5fbnNfbGlzdChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTI3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTYxLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NTYyOlxcdFxcdFxcdGFzeW5jX3NjaGVkdWxlX2RvbWFpbihudm1lX3NjYW5fbnNfYXN5bmMsIFxcdTAwMjZzY2FuX2luZm8sXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1NjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRvbWFpbik7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDU3Ni1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDU3NzpzdGF0aWMgdm9pZCBudm1lX3NjYW5fbnNfc2VxdWVudGlhbChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTc4LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NTg3LVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gbm47IGkrKylcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDU4ODpcXHRcXHRudm1lX3NjYW5fbnMoY3RybCwgaSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ1ODktXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDYxOD1zdGF0aWMgdm9pZCBudm1lX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY0OC1cXHRpZiAoIW52bWVfaWRfY25zX29rKGN0cmwsIE5WTUVfSURfQ05TX05TX0FDVElWRV9MSVNUKSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NjQ5OlxcdFxcdG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsKGN0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjUwLVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY1NS1cXHRcXHQgKi9cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDY1NjpcXHRcXHRyZXQgPSBudm1lX3NjYW5fbnNfbGlzdChjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY1Ny1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAyNiBOVk1FX1NUQVRVU19ETlIpXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NTg6XFx0XFx0XFx0bnZtZV9zY2FuX25zX3NlcXVlbnRpYWwoY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ2NTktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNTo1Ni4zMzg5OTQzNDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NjQ5NzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJJ20gdGhlIG9uZSB0aGlua2luZyBpdCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5WTWUgU2NhbiBXb3JrZmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgZnVuY3Rpb24gaGVyZSwgdGhlIG9uZSBhY3R1YWxseSBkb2luZyB0aGUgaGVhdnkgbGlmdGluZywgdGhhdCdzIGBudm1lX3NjYW5fd29ya2AuIFByZXR0eSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbiwgcmlnaHQ/IFRoZSBrZXkgcGFydCBpcyB0aGF0ICp0aGlzKiBpcyB0aGUgYWN0dWFsIHdvcmtxdWV1ZSBmdW5jdGlvbi4gU28gaXQncyB0aGUgYml0IHRoYXQgZ2V0cyBkZWZlcnJlZCBhbmQgc2NoZWR1bGVkLiBJdCdzIG5vdCBydW5uaW5nIGluIHRoZSBpbnRlcnJ1cHQgY29udGV4dCwgd2hpY2ggaXMgZ29vZC5cblxuTm93LCB3aGVyZSBkb2VzIGBudm1lX3NjYW5fd29ya2AgZ2V0IGludm9rZWQ/IFRoYXQncyBjb21pbmcgZnJvbSBgbnZtZV9xdWV1ZV9zY2FuYC4gU28sIGBudm1lX3F1ZXVlX3NjYW5gIGxpa2VseSBoYW5kbGVzIHRoZSBzY2hlZHVsaW5nLCBtYXliZSBxdWV1aW5nIHRoZSB3b3JrIGl0ZW0gaXRzZWxmLiBJJ2QgbmVlZCB0byB0cmFjZSB0aGF0IGNhbGwgY2hhaW4gdG8gY29uZmlybSwgYnV0IHRoZSBpbXBsaWNhdGlvbiBpcyBjbGVhci4gYG52bWVfcXVldWVfc2NhbmAgcHJvYmFibHkgaGFuZGxlcyBhbGwgdGhlIGluaXRpYWwgY2hlY2tzLCBwZXJoYXBzIGRldmljZSBwcmVzZW5jZS9hYnNlbmNlIGRldGVjdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIHRoZW4gaGFuZHMgb2ZmIHRoZSBhY3R1YWwgc2Nhbm5pbmcgb3BlcmF0aW9uIHRvIHRoZSB3b3JrcXVldWUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZSwga2VlcHMgdGhlIGludGVycnVwdCBjb250ZXh0IGxlYW4uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgbG9ja2luZyBhcm91bmQgYG52bWVfc2Nhbl93b3JrYCB0byBlbnN1cmUgaXQncyB0aHJlYWQtc2FmZS4gSSdkIGJlIGxvb2tpbmcgZm9yIGEgbXV0ZXggYXJvdW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6MDAuMDE1NDk0NTk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjIxMTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3F1ZXVlX3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNTU9c3RhdGljIGludCBudm1lX2dldF9sb2dfbHNpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiBuc2lkLCB1OCBsb2dfcGFnZSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xNTctXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE1ODp2b2lkIG52bWVfcXVldWVfc2NhbihzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xNTkte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTMtXFx0XFx0c2V0X2JpdChOVk1FX0NUUkxfU0VMRl9SRVNDQU4sIFxcdTAwMjZjdHJsLVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyOTQ6XFx0XFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjk1LVxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNmN0cmwtXFx1MDAzZXNjYW5fd29yayk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDYxOD1zdGF0aWMgdm9pZCBudm1lX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2My1cXHRpZiAodGVzdF9iaXQoTlZNRV9BRVJfTk9USUNFX05TX0NIQU5HRUQsIFxcdTAwMjZjdHJsLVxcdTAwM2VldmVudHMpKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0NjY0OlxcdFxcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDY2NS0jaWZkZWYgQ09ORklHX05WTUVfTVVMVElQQVRIXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDg4MD1zdGF0aWMgYm9vbCBudm1lX2hhbmRsZV9hZW5fbm90aWNlKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiByZXN1bHQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDg4Ny1cXHRcXHRzZXRfYml0KE5WTUVfQUVSX05PVElDRV9OU19DSEFOR0VELCBcXHUwMDI2Y3RybC1cXHUwMDNlZXZlbnRzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDg4ODpcXHRcXHRudm1lX3F1ZXVlX3NjYW4oY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ4ODktXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTEwND12b2lkIG52bWVfc3RhcnRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMjQtXFx0aWYgKGN0cmwtXFx1MDAzZXF1ZXVlX2NvdW50IFxcdTAwM2UgMSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MTI1OlxcdFxcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEyNi1cXHRcXHRudm1lX3VucXVpZXNjZV9pb19xdWV1ZXMoY3RybCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjAwLjA2NzcxMjc0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODgxODYzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlZNZSBOYW1lc3BhY2UgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBuZXcgTlZNZSBiZWhhdmlvciwgYW5kIGl0IGxvb2tzIGxpa2UgYG52bWVfcGFzc3RocnVfZW5kYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQncyB0cmlnZ2VyaW5nIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLiBIbW0sIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG52bWVfbnNfb3BlbmVycyhucylgIHdpdGhpbiBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AuIEludGVyZXN0aW5nLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGhpdCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AgKndpdGhvdXQqIGdvaW5nIHRocm91Z2ggYG52bWVfcGFzc3RocnVfZW5kYD9cblxuWWVzLCBsb29rcyBsaWtlIHdlIGNhbiB0aHJvdWdoIEFzeW5jaHJvbm91cyBFdmVudCBOb3RpZmljYXRpb24gKEFFTikuIFRoYXQgbGVhZHMgdXMgZG93biB0aGUgcmFiYml0IGhvbGUgb2YgYG52bWVfaGFuZGxlX2Flbl9ub3RpY2VgIC1cdTAwM2UgYG52bWVfcXVldWVfc2NhbmAgLVx1MDAzZSBgbnZtZV9zY2FuX3dvcmtgIC1cdTAwM2UgYG52bWVfc2Nhbl9uc19saXN0YCAtXHUwMDNlIGBudm1lX3NjYW5fbnNgIC1cdTAwM2UgYG52bWVfdmFsaWRhdGVfbnNgIC1cdTAwM2UgYG52bWVfdXBkYXRlX25zX2luZm9gIC1cdTAwM2UgYG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2tgLiBHb3QgaXQuIEFuZCBzaW5jZSBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBpc24ndCBzZXQgaW4gdGhpcyBzY2VuYXJpbywgaWYgYSBuYW1lc3BhY2UgaXMgY3VycmVudGx5IGluIHVzZSBhbmQgdGhlIGZvcm1hdCBjaGFuZ2VzLCBpdCdzIGdvaW5nIHRvIGJlIHJlZnVzZWQuIEV4Y2VsbGVudCwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBvc3NpYmxlIHBhdGhzLlxuXG5BbHJpZ2h0LCBzbyB0aGUgbWFqb3Igc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBudm1lX3Bhc3N0aHJ1X2VuZGAsIGBudm1lX3F1ZXVlX3NjYW5gLCBgbnZtZV92YWxpZGF0ZV9uc2AsIGFuZCBgbnZtZV9oYW5kbGVfYWVuX25vdGljZWAuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgYG52bWVfcGFzc3RocnVfZW5kYCBpcyBleHBvcnRlZCwgdGhhdCdzIGdvb2QuIGBudm1lX3F1ZXVlX3NjYW5gIGlzIGFsc28gZXhwb3J0ZWQuIGBudm1lX3ZhbGlkYXRlX25zYCBpcyBzdGF0aWMsIGFuZCBzbyBpcyBgbnZtZV9oYW5kbGVfYWVuX25vdGljZWAuIFRoaXMgY2hhbmdlcyB0aGluZ3Mgc2xpZ2h0bHksIGJ1dCBub3QgaHVnZWx5LlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBgbnZtZV9wYXNzdGhydV9lbmRgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGU7IGl0J3MgZXhwbGljaXRseSBjYWxsZWQgd2hlbiBhbiBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmQgY29tcGxldGVzLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBMZXQgbWUgY2hlY2sgYG52bWVfcXVldWVfc2NhbmAuIEl0J3MgY2FsbGVkIGluIGEgZmV3IGRpZmZlcmVudCBwbGFjZXMsIGxldCBtZSBjaGVjayBgbnZtZV9zY2FuX3dvcmtgIGFsc28uXG5cbk9rYXksIGJhY2sgdG8gYG52bWVfcGFzc3RocnVfZW5kYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXQgY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg0OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjowOC45NDk1Nzg0ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjcxODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfcGFzc3RocnVfZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNjk9RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9zdGFydCwgXFxcIk5WTUVfVEFSR0VUX1BBU1NUSFJVXFxcIik7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyNzAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNzE6dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjcyLVxcdFxcdCAgICAgICBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsIGludCBzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEzMjE6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9lbmQsIFxcXCJOVk1FX1RBUkdFVF9QQVNTVEhSVVxcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMzIyLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz0xNjE9c3RhdGljIGludCBudm1lX3N1Ym1pdF91c2VyX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMTk2LVxcdGlmIChlZmZlY3RzKVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MTk3OlxcdFxcdG52bWVfcGFzc3RocnVfZW5kKGN0cmwsIG5zLCBlZmZlY3RzLCBjbWQsIHJldCk7XFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0xOTgtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaD0xMjk1PWludCBudm1lX2V4ZWN1dGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGF0X2hlYWQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaDoxMjk2OnZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1MzIgZWZmZWN0cyxcXG5kcml2ZXJzL252bWUvaG9zdC9udm1lLmgtMTI5Ny1cXHRcXHQgICAgICAgc3RydWN0IG52bWVfY29tbWFuZCAqY21kLCBpbnQgc3RhdHVzKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYz0yMTQ9c3RhdGljIHZvaWQgbnZtZXRfcGFzc3RocnVfZXhlY3V0ZV9jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3Bhc3N0aHJ1LmMtMjQ1LVxcdGlmIChlZmZlY3RzKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYzoyNDY6XFx0XFx0bnZtZV9wYXNzdGhydV9lbmQoY3RybCwgbnMsIGVmZmVjdHMsIHJlcS1cXHUwMDNlY21kLCBzdGF0dXMpO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvcGFzc3RocnUuYy0yNDctfVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jPTI5Nz1zdGF0aWMgdm9pZCBudm1ldF9wYXNzdGhydV9leGVjdXRlX2NtZChzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3Bhc3N0aHJ1LmMtMzQ0LVxcdCAqIG5vbi10cml2aWFsIGVmZmVjdHMsIG1ha2Ugc3VyZSB0byBleGVjdXRlIHRoZSBjb21tYW5kIHN5bmNocm9ub3VzbHlcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3Bhc3N0aHJ1LmM6MzQ1OlxcdCAqIGluIGEgd29ya3F1ZXVlIHNvIHRoYXQgbnZtZV9wYXNzdGhydV9lbmQgZ2V0cyBjYWxsZWQuXFxuZHJpdmVycy9udm1lL3RhcmdldC9wYXNzdGhydS5jLTM0Ni1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6MDkuMDA0MjU1MjQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTA3NDkzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5WTWUgUGFzc3Rocm91Z2ggQ29tbWFuZCBFeGVjdXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGBudm1lX3Bhc3N0aHJ1X2VuZGAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQncyB0aGUgZW5kcG9pbnQgZm9yIGJvdGggdXNlci1zcGFjZSBpbml0aWF0ZWQgTlZNZSBwYXNzdGhyb3VnaCBjb21tYW5kcyB2aWEgYG52bWVfc3VibWl0X3VzZXJfY21kYCAod2hpY2gsIEkgcmVjYWxsLCB1c2VzIGlvY3RsKSAqYW5kKiBjb21tYW5kcyBmcm9tIHRoZSBOVk1lIHRhcmdldCBzaWRlLCBzcGVjaWZpY2FsbHkgYG52bWV0X3Bhc3N0aHJ1X2V4ZWN1dGVfY21kX3dvcmtgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgbWVhbnMgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIGNvbW1hbmRzIHNlbnQgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2Ug4oCTIGNvbW1hbmRzIGxpa2UgXCJmb3JtYXQgTlZNLlwiXG5cblRoZSBvdGhlciBwYXRoIG9mIGludGVyZXN0IGlzIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCwgY2FsbGVkIGR1cmluZyBuYW1lc3BhY2Ugc2NhbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLCBidXQgaXQncyBub3QgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gZm9jdXMgb24sIGFsdGhvdWdoIGl0ICppcyogcGFydCBvZiBhIGNyaXRpY2FsIHBhdGguIFNvLCBgbnZtZV9zdWJtaXRfdXNlcl9jbWRgIGFuZCBgbnZtZV9wYXNzdGhydV9lbmRgIGFyZSB0aGUgaW1tZWRpYXRlIHRhcmdldHMgZm9yIHNjcnV0aW55IGhlcmUsIGFzIHRoZXkncmUgdGhlIGV4cG9zZWQgZW50cnkgcG9pbnRzLiBBbHNvLCBJJ2xsIG5lZWQgdG8gY2hlY2sgYG52bWVfc2Nhbl93b3JrYCB0byB1bmRlcnN0YW5kIHRoZSBzY2FucywgdGhvdWdoIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgY2FsbGVkLiBNeSBmaXJzdCBmb2N1cywgaG93ZXZlciwgd2lsbCBiZSBvbiBob3cgYG52bWVfc3VibWl0X3VzZXJfY21kYCBoYW5kbGVzIHRoaXMuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU0MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjoxMy45MTUwMDgxNTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mzg1NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfc3VibWl0X3VzZXJfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz0xMjQ9c3RhdGljIGludCBudm1lX21hcF91c2VyX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgdTY0IHVidWZmZXIsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTE2MC1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjE2MTpzdGF0aWMgaW50IG52bWVfc3VibWl0X3VzZXJfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMTYyLVxcdFxcdHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtZCwgdTY0IHVidWZmZXIsIHVuc2lnbmVkIGJ1ZmZsZW4sXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTIwNT1zdGF0aWMgaW50IG52bWVfc3VibWl0X2lvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfdXNlcl9pbyBfX3VzZXIgKnVpbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMjYyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MjYzOlxcdHJldHVybiBudm1lX3N1Ym1pdF91c2VyX2NtZChucy1cXHUwMDNlcXVldWUsIFxcdTAwMjZjLCBpby5hZGRyLCBsZW5ndGgsIG1ldGFkYXRhLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMjY0LVxcdFxcdFxcdG1ldGFfbGVuLCBOVUxMLCAwLCAwKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM9MjgwPXN0YXRpYyBpbnQgbnZtZV91c2VyX2NtZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTMxNS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jOjMxNjpcXHRzdGF0dXMgPSBudm1lX3N1Ym1pdF91c2VyX2NtZChucyA/IG5zLVxcdTAwM2VxdWV1ZSA6IGN0cmwtXFx1MDAzZWFkbWluX3EsIFxcdTAwMjZjLFxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMzE3LVxcdFxcdFxcdGNtZC5hZGRyLCBjbWQuZGF0YV9sZW4sIG52bWVfdG9fdXNlcl9wdHIoY21kLm1ldGFkYXRhKSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM9MzI4PXN0YXRpYyBpbnQgbnZtZV91c2VyX2NtZDY0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtMzYyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6MzYzOlxcdHN0YXR1cyA9IG52bWVfc3VibWl0X3VzZXJfY21kKG5zID8gbnMtXFx1MDAzZXF1ZXVlIDogY3RybC1cXHUwMDNlYWRtaW5fcSwgXFx1MDAyNmMsXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy0zNjQtXFx0XFx0XFx0Y21kLmFkZHIsIGNtZC5kYXRhX2xlbiwgbnZtZV90b191c2VyX3B0cihjbWQubWV0YWRhdGEpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjoxMy45NjQzOTkxMzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMTY2NjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOVk1lIEtlcm5lbCBNb2R1bGUgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgTlZNZSBkcml2ZXIgY29kZSBhZ2Fpbi4gTGV0J3Mgc2VlLi4uIHRoZSBgbnZtZV91c2VyX2NtZGAgYW5kIGBudm1lX3VzZXJfY21kNjRgIGZ1bmN0aW9ucyBqdW1wIG91dCBpbW1lZGlhdGVseSBhcyB0aGUga2V5IGlvY3RsIGhhbmRsZXJzLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBrZWVwIGFuIGV5ZSBvbiBgbnZtZV9wYXNzdGhydV9lbmRgIGFzIGEgY3JpdGljYWwgc3ltYm9sLCBnaXZlbiBpdHMgbmFtZS4gQW5kLCBvZiBjb3Vyc2UsIGBudm1lX3F1ZXVlX3NjYW5g4oCUdGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlcyB0aGUgYWN0dWFsIHNjYW4sIHJpZ2h0PyBUaGF0J3MgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciB0aG91Z2gsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnZvbHZlZC4gTG9va3MgbGlrZSBgQkxLX0RFVl9OVk1FYCBpcyB0aGUgbW9zdCBvYnZpb3VzIG9uZSwgYnV0IGhhbmcgb24gYSBtaW51dGUuLi4gV2FpdCwgaXQncyBgTlZNRV9DT1JFYCB0aGF0IGFjdHVhbGx5IGNvbXBpbGVzIGBjb3JlLmNgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGZvciBhbnkgY29uZmlndXJhdGlvbiB3b3JrLiBOb3cgSSBjYW4gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBtb2R1bGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjoxOC4wOTYwNjg3NzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjMyNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWUtY29yZS15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19OVk1FX0FQUExFKVxcdFxcdCs9IG52bWUtYXBwbGUub1xcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjEzOm52bWUtY29yZS15XFx0XFx0XFx0XFx0Kz0gY29yZS5vIGlvY3RsLm8gc3lzZnMubyBwci5vXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUtMTQtbnZtZS1jb3JlLSQoQ09ORklHX05WTUVfVkVSQk9TRV9FUlJPUlMpXFx0Kz0gY29uc3RhbnRzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6MTguMTQ0MzA1ODMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjE0MTk3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBOVk1lIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYE5WTUVfQ09SRWAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHN5bWJvbCByZWxhdGVkIHRvIHRoZSBjb3JlIE5WTWUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYG52bWUtY29yZS5vYC4gVGltZSB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nIGNydWNpYWwuIEknbSBnb2luZyB0byByZXZpc2l0IGBkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIG9yIHRvIHZlcmlmeSBhIHByZXZpb3VzIGFzc3VtcHRpb24uIFRoaXMgbW9kdWxlIGNvbmZpZ3VyYXRpb24gaXMgZnVuZGFtZW50YWwsIGFuZCBpdCdzIGFsd2F5cyBnb29kIHRvIGhhdmUgdGhhdCBrbm93bGVkZ2UgZnJlc2ggaW4gbXkgbWluZCB3aGVuIEknbSB3b3JraW5nIHdpdGggdGhlIE5WTWUgc3Vic3lzdGVtLiBMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjoyMS44MDU3Mjg3MjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Nzg2MDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6Mjpjb25maWcgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjIyLjA5MzU5NTgxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM0NjE5MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5WTWUgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBOVk1lIGRyaXZlciBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhlIGtleSBkZWNpc2lvbiBwb2ludHMgYXJlLiBUaGUgYE5WTUVfQ09SRWAgc3ltYm9sLi4uIHRoYXQncyB0aGUgdHJpY2t5IG9uZS4gSXQncyBhIHRyaXN0YXRlLCBhbmQgdGhlIGNvZGUgZG9lc24ndCBkaXJlY3RseSBvZmZlciBhIHByb21wdCBmb3IgaXQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyBidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQg4oCTIGlzIGJlaW5nIGRldGVybWluZWQgaW1wbGljaXRseSwgbGlrZWx5IGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mICpvdGhlciogb3B0aW9ucyBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiB0cmFjaW5nIHRoZSBkZXBlbmRlbmNpZXM7IEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB3aGljaCBvdGhlciBjb25maWdzIGFyZSBkcml2aW5nIHRoZSBzdGF0ZSBvZiBgTlZNRV9DT1JFYC5cblxuVGhlbiwgd2UgaGF2ZSBgQkxLX0RFVl9OVk1FYC4gVGhhdCdzIHRoZSBtYWluIGRyaXZlciBzeW1ib2wsIHRoZSBvbmUgdGhhdCBtb3N0IGZvbGtzIHdpbGwgaW50ZXJhY3Qgd2l0aCBkaXJlY3RseS4gVGhhdCdzIHRoZSBvbmUgSSdkIGV4cGVjdCB0byBzZWUgcHJvbWluZW50bHkgaW4gdGhlIG1lbnVjb25maWcsIGFuZCB0aGF0J3Mgd2hlcmUgSSdkIHN0YXJ0LiBJZiB0aGF0IGlzbid0IHNlbGVjdGVkIHRoZW4gdGhlcmUgaXMgbm8gd2F5IHRoYXQgYW55IG90aGVyIE5WTWUgY29uZmlnIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjI1LjgyODIxNjg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ1Njk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTlZNRV9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz01PWNvbmZpZyBCTEtfREVWX05WTUVcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNy1cXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBCTE9DS1xcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6ODpcXHRzZWxlY3QgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9NDc9Y29uZmlnIE5WTUVfRkFCUklDU1xcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NDg6XFx0c2VsZWN0IE5WTUVfQ09SRVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctNDktXFx0c2VsZWN0IE5WTUVfS0VZUklORyBpZiBOVk1FX1RDUF9UTFNcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9MTI1PWNvbmZpZyBOVk1FX0FQUExFXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTEyOS1cXHRkZXBlbmRzIG9uIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoxMzA6XFx0c2VsZWN0IE5WTUVfQ09SRVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTMxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6MjUuODc0NjgxNDk1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDc0MjQwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBxdWljayB0YWtlIG9uIHRoaXMuXG5cbioqTlZNZSBOYW1lc3BhY2UgQ29uc2lkZXJhdGlvbnMqKlxuXG5SaWdodCwgYEJMS19ERVZfTlZNRWAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IOKAkyB0aGF0J3MgZW5vdWdoIHRvIGRlZmluZSB0aGUgYmFzZSBOVk1lIGRldmljZS4gTm93LCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gTGV0J3MgbG9vayBhdCBgbnZtZV9uc19vcGVuZXJzYC4gQWhhLCBpdCdzIHVzaW5nIGBudm1lX25zX2hlYWRfbXVsdGlwYXRoKG5zLVx1MDAzZWhlYWQpYC4gIFRoaXMgaXMga2V5LCBub3cgdGhlIHF1ZXN0aW9uIGlzOiAgZG8gd2UgKm5lZWQqIGBDT05GSUdfTlZNRV9NVUxUSVBBVEhgIGVuYWJsZWQgZm9yIHRoYXQgZnVuY3Rpb24gY2FsbCB0byB3b3JrIGFzIGV4cGVjdGVkPyBUaGF0J3Mgd2hhdCBJIG5lZWQgdG8gdmVyaWZ5LiBUaGlzIGltcGxpZXMgaXQgbWlnaHQgYmUgdGllZCB0byBtdWx0aXBhdGggY29uZmlndXJhdGlvbnMgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZGVwZW5kZW5jeSBpcyBoYXJkLCBvciBzb2Z0LCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk1NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjMwLjYyMjEwODg1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NzMyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnZtZV9uc19oZWFkX211bHRpcGF0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9udm1lLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oPTUzMT1zdHJ1Y3QgbnZtZV9uc19oZWFkIHtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC01ODEtXFxuZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oOjU4MjpzdGF0aWMgaW5saW5lIGJvb2wgbnZtZV9uc19oZWFkX211bHRpcGF0aChzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkKVxcbmRyaXZlcnMvbnZtZS9ob3N0L252bWUuaC01ODMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjozMC42Njk4ODgwNTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTYxMjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGFuIElubGluZSBGdW5jdGlvbiBEZWZpbml0aW9uKipcblxuT2theSwgc28gSSd2ZSBlbmNvdW50ZXJlZCB3aGF0IGxvb2tzIGxpa2UgYW4gaW5saW5lIGZ1bmN0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFwiaW5saW5lXCIga2V5d29yZC9kaXJlY3RpdmUgLSBpcyBpdCBqdXN0IGEgc3VnZ2VzdGlvbiB0byB0aGUgY29tcGlsZXI/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBpdCdzIGxpa2VseSB0byBlbmFibGU/IFdoYXQncyB0aGUgdHJhZGUtb2ZmIGJldHdlZW4gY29kZSBzaXplIGFuZCBwZXJmb3JtYW5jZSBpbiB0aGlzIHNwZWNpZmljIGluc3RhbmNlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY29kZSBhbmQgcmVhbGx5IGV2YWx1YXRlIGl0cyBpbnRlbmRlZCB1c2UgYW5kIGJlaGF2aW9yLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGlzIGNvbnRleHQuIEkgd2lsbCBhbHNvIGFzc2VzcyB3aGV0aGVyIHRoZSBvcHRpbWl6YXRpb25zIGl0IHByb3ZpZGVzIGFyZSB0cnVseSBiZW5lZmljaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjMzLjc0OTUwMzczMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL252bWUvaG9zdC9udm1lLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdH07XFxuIDU4MTpcXHRcXG4gNTgyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBudm1lX25zX2hlYWRfbXVsdGlwYXRoKHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQpXFxuIDU4MzpcXHR7XFxuIDU4NDpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfTlZNRV9NVUxUSVBBVEgpIFxcdTAwMjZcXHUwMDI2IGhlYWQtXFx1MDAzZWRpc2s7XFxuIDU4NTpcXHR9XFxuIDU4NjpcXHRcXG4gNTg3OlxcdGVudW0gbnZtZV9uc19mZWF0dXJlcyB7XFxuIDU4ODpcXHRcXHROVk1FX05TX0VYVF9MQkFTID0gMSBcXHUwMDNjXFx1MDAzYyAwLCAvKiBzdXBwb3J0IGV4dGVuZGVkIExCQSBmb3JtYXQgKi9cXG4gNTg5OlxcdFxcdE5WTUVfTlNfTUVUQURBVEFfU1VQUE9SVEVEID0gMSBcXHUwMDNjXFx1MDAzYyAxLCAvKiBzdXBwb3J0IGdldHRpbmcgZ2VuZXJhdGVkIG1kICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjMzLjc0OTYwNDI3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE2NzkyNzQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTlZNZSBDb2RlIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTlZNZSBkcml2ZXIuIEkgc2VlIHRoYXQgYENPTkZJR19OVk1FX01VTFRJUEFUSGAgaXMgdXNlZCwgYnV0IHRoZSBwYXRjaCBpdHNlbGYgaXNuJ3Qgc3RyaWN0bHkgZGVwZW5kZW50IG9uIGl0IHRvIGZ1bmN0aW9uLiBIb3dldmVyLCBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBtdWx0aXBhdGggYnJhbmNoIHdpdGhpbiBgbnZtZV9uc19vcGVuZXJzYCwgSSdsbCAqZGVmaW5pdGVseSogbmVlZCBgQ09ORklHX05WTUVfTVVMVElQQVRIYCBlbmFibGVkLiBTbywgSSBzaG91bGQgYWRkIGBOVk1FX01VTFRJUEFUSGAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LlxuXG5MZXQncyBzZWUsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUuIEkndmUgZ290IGBCTEtfREVWX05WTUVgLCB3aGljaCBpcyB0aGUgUENJZSBOVk1lIGRyaXZlciBpdHNlbGYuIFRoYXQncyBlbXVsYXRlZCBieSBRRU1VLCBzbyB0aGF0IGxvb2tzIGdvb2QsIGFuZCBvYnZpb3VzbHkgSSd2ZSBnb3QgYE5WTUVfTVVMVElQQVRIYCBhbHJlYWR5LiBUaG9zZSB0d28gdG9nZXRoZXIgc2hvdWxkIHByb3ZpZGUgYSBzb2xpZCBiYXNlLlxuXG5Ob3csIEknbSBmb2N1c2luZyBvbiBrZXkgc3ltYm9scy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlYWNoYWJpbGl0eSBvZiBmdW5jdGlvbnMsIHNvIEknbSBob25pbmcgaW4gb24gYG52bWVfcGFzc3RocnVfZW5kYCBhbmQgYG52bWVfcXVldWVfc2NhbmAuXG5cbkZpcnN0LCBsZXQncyB2ZXJpZnkgYG52bWVfcGFzc3RocnVfZW5kYCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UuIFllcCwgaXQgaXMgdmlhIHRoZSBgbnZtZV91c2VyX2NtZGAgaW9jdGwuIEdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgYG52bWVfcXVldWVfc2NhbmAgaXMgcmVhY2hhYmxlLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBudm1lX3F1ZXVlX3NjYW5gIGlzIHJlYWNoYWJsZSB2aWEgYG52bWVfcGFzc3RocnVfZW5kYCAoaW4gc29tZSBwYXRocykgb3IgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKSBoYW5kbGluZywgd2hpY2ggaXMgYSBnb29kIHBhdGggdG8gaGF2ZS5cblxuTGV0J3MgZGl2ZSBpbnRvIHNvbWUgb2YgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zLCBzdGFydGluZyB3aXRoIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYC4gT2gsIHRoYXQncyBzdGF0aWMuIE5vdCByZWFsbHkgdXNlZnVsIGFzIGEgcHJpbWFyeSBmb2N1cyBzeW1ib2wuIEhtbSwgYG52bWVfdmFsaWRhdGVfbnNgIGlzIHN0YXRpYyB0b28uIE9rYXksIGxldCdzIHNlZS4gV2FpdCwgYG52bWVfc2Nhbl93b3JrYCBpcyBzdGF0aWMuIEFsc28gc3RhdGljLiBIb3cgYWJvdXQgYG52bWVfc2Nhbl9uc19saXN0YD8gU3RhdGljLiBBbmQgYG52bWVfYWxsb2NfbnNgIGlzIHN0YXRpYy4gYG52bWVfc2Nhbl9uc2A/IFN0YXRpYy4gYG52bWVfdXBkYXRlX25zX2luZm9gIGlzIHN0YXRpYy4gQW5kIGBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWNgIGlzIHN0YXRpYy4gQWxyaWdodCwgdGhhdCdzIGEgd2hvbGUgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9ucyFcblxuTm93LCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2A/IE5vcGUsIGl0J3MgY2FsbGVkIGZyb20gYG52bWVfdXBkYXRlX25zX2luZm9gLiBgbnZtZV91cGRhdGVfbnNfaW5mb2AgaXMgY2FsbGVkIGZyb20gYG52bWVfYWxsb2NfbnNgIGFuZCBgbnZtZV92YWxpZGF0ZV9uc2AuIEFuZCBgbnZtZV9hbGxvY19uc2AgaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl9uc2AuIEFsc28gYG52bWVfdmFsaWRhdGVfbnNgIGlzIGNhbGxlZCBmcm9tIGBudm1lX3NjYW5fbnNgLiBUaGVuLCBgbnZtZV9zY2FuX25zYCBpcyBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX25zX2FzeW5jYCBhbmQgYG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsYC4gRnVydGhlciwgYG52bWVfc2Nhbl9uc19zZXF1ZW50aWFsYCBpcyBjYWxsZWQgZnJvbSBgbnZtZV9zY2FuX3dvcmtgLiBBbmQgYG52bWVfc2Nhbl9uc19hc3luY2AgaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl9uc19saXN0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG52bWVfc2Nhbl93b3JrYC4gRmluYWxseSwgYG52bWVfc2Nhbl93b3JrYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgc2NoZWR1bGVkIGJ5IGBudm1lX3F1ZXVlX3NjYW5gLlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoYXQgY2hhaW4sIGl0IHNlZW1zIGNsZWFyIHRoYXQgYG52bWVfcXVldWVfc2NhbmAgaXMgdGhlIGJlc3Qgbm9uLXN0YXRpYyBmdW5jdGlvbiB0byBmb2N1cyBvbiBmb3IgdGhlIG5hbWVzcGFjZSBzY2FuIGZ1bmN0aW9uYWxpdHkuIEFuZCwgYXMgcHJldmlvdXNseSBpZGVudGlmaWVkLCBgbnZtZV9wYXNzdGhydV9lbmRgIHJlbWFpbnMgdGhlIGJlc3QgZm9yIHBhc3N0aHJvdWdoIG9wZXJhdGlvbnMuXG5cbkknbGwgZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxldmFudCBleHBvcnRlZCBmdW5jdGlvbnMsIGp1c3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGJ1dCB0aGVzZSB0d28gbG9vayBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjo0My45MTc1MzUwOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5Mjg5NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbnZtZV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01OD1NT0RVTEVfUEFSTV9ERVNDKGlvX3RpbWVvdXQsIFxcXCJ0aW1lb3V0IGluIHNlY29uZHMgZm9yIEkvT1xcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1OTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2lvX3RpbWVvdXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02MC1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjA9c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm52bWVfd3E7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3dxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTIyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjM9c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm52bWVfcmVzZXRfd3E7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNDpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3Jlc2V0X3dxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI1LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjY9c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm52bWVfZGVsZXRlX3dxO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMjc6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9kZWxldGVfd3EpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjgtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTczPWludCBudm1lX3RyeV9zY2hlZF9yZXNldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE4MC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjE4MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3RyeV9zY2hlZF9yZXNldCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE4Mi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMTU9aW50IG52bWVfcmVzZXRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyMi19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3Jlc2V0X2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjQtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjU5PWludCBudm1lX2RlbGV0ZV9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjY2LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjY3OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZGVsZXRlX2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNjgtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTA4PXZvaWQgbnZtZV9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMi19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUxMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NvbXBsZXRlX3JxKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTE0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MTU9dm9pZCBudm1lX2NvbXBsZXRlX2JhdGNoX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUyMC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUyMTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NvbXBsZXRlX2JhdGNoX3JlcSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUyMi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01Mjk9YmxrX3N0YXR1c190IG52bWVfaG9zdF9wYXRoX2Vycm9yKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM1LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTM2OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfaG9zdF9wYXRoX2Vycm9yKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01Mzg9Ym9vbCBudm1lX2NhbmNlbF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTUxLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTUyOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfY2FuY2VsX3JlcXVlc3QpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NTMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU1ND12b2lkIG52bWVfY2FuY2VsX3RhZ3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU2MS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU2MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NhbmNlbF90YWdzZXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NjMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU2ND12b2lkIG52bWVfY2FuY2VsX2FkbWluX3RhZ3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU3MS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU3MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NhbmNlbF9hZG1pbl90YWdzZXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NzMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU3ND1ib29sIG52bWVfY2hhbmdlX2N0cmxfc3RhdGUoc3RydWN0IG52bWVfY3RybCAqY3RybCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02NjctfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo2Njg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9jaGFuZ2VfY3RybF9zdGF0ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTY2OS1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz02NzQ9Ym9vbCBudm1lX3dhaXRfcmVzZXQoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy02ODAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo2ODE6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV93YWl0X3Jlc2V0KTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNjgyLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTcyMT12b2lkIG52bWVfcHV0X25zKHN0cnVjdCBudm1lX25zICpucylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03MjQtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo3MjU6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wdXRfbnMsIFxcXCJOVk1FX1RBUkdFVF9QQVNTVEhSVVxcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy03MjYtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NzM2PXZvaWQgbnZtZV9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IG52bWVfY29tbWFuZCAqY21kKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTc2MC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjc2MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfcmVxdWVzdCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTc2Mi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz03NzI9YmxrX3N0YXR1c190IG52bWVfZmFpbF9ub25yZWFkeV9jb21tYW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNzg4LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Nzg5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZmFpbF9ub25yZWFkeV9jb21tYW5kKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNzkwLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz03OTE9Ym9vbCBfX252bWVfY2hlY2tfcmVhZHkoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTgyOS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjgzMDpFWFBPUlRfU1lNQk9MX0dQTChfX252bWVfY2hlY2tfcmVhZHkpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy04MzEtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTA4Mz12b2lkIG52bWVfY2xlYW51cF9jbWQoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMDk0LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTA5NTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NsZWFudXBfY21kKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTA5Ni1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTA5Nz1ibGtfc3RhdHVzX3QgbnZtZV9zZXR1cF9jbWQoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTExNDktfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMTUwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc2V0dXBfY21kKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE1MS1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMTU4PWludCBudm1lX2V4ZWN1dGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGF0X2hlYWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE2OC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjExNjk6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9leGVjdXRlX3JxLCBcXFwiTlZNRV9UQVJHRVRfUEFTU1RIUlVcXFwiKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTE3MC1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMTc1PWludCBfX252bWVfc3VibWl0X3N5bmNfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTIxMS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMTI6RVhQT1JUX1NZTUJPTF9HUEwoX19udm1lX3N1Ym1pdF9zeW5jX2NtZCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyMTMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyMTQ9aW50IG52bWVfc3VibWl0X3N5bmNfY21kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTIxOS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyMjA6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zdWJtaXRfc3luY19jbWQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjIxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xMjIyPXUzMiBudm1lX2NvbW1hbmRfZWZmZWN0cyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHU4IG9wY29kZSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xMjQ4LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI0OTpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX2NvbW1hbmRfZWZmZWN0cywgXFxcIk5WTUVfVEFSR0VUX1BBU1NUSFJVXFxcIik7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyNTAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNTE9dTMyIG52bWVfcGFzc3RocnVfc3RhcnQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLCB1OCBvcGNvZGUpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI2OC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjEyNjk6RVhQT1JUX1NZTUJPTF9OU19HUEwobnZtZV9wYXNzdGhydV9zdGFydCwgXFxcIk5WTUVfVEFSR0VUX1BBU1NUSFJVXFxcIik7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyNzAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTEyNzE9dm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEzMjAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxMzIxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfcGFzc3RocnVfZW5kLCBcXFwiTlZNRV9UQVJHRVRfUEFTU1RIUlVcXFwiKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTMyMi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0xNDM2PXZvaWQgbnZtZV9zdG9wX2tlZXBfYWxpdmUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xNDQyLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTQ0MzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3N0b3Bfa2VlcF9hbGl2ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE0NDQtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTcyNT1pbnQgbnZtZV9zZXRfZmVhdHVyZXMoc3RydWN0IG52bWVfY3RybCAqZGV2LCB1bnNpZ25lZCBpbnQgZmlkLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3MzEtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxNzMyOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc2V0X2ZlYXR1cmVzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTczMy1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTczND1pbnQgbnZtZV9nZXRfZmVhdHVyZXMoc3RydWN0IG52bWVfY3RybCAqZGV2LCB1bnNpZ25lZCBpbnQgZmlkLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3NDAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoxNzQxOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfZ2V0X2ZlYXR1cmVzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTc0Mi1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTc0Mz1pbnQgbnZtZV9zZXRfcXVldWVfY291bnQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgaW50ICpjb3VudClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0xNzc0LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTc3NTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3NldF9xdWV1ZV9jb3VudCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE3NzYtXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9Mjc1OD1pbnQgbnZtZV9kaXNhYmxlX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCBzaHV0ZG93bilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNzgxLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Mjc4MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2Rpc2FibGVfY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI3ODMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTI3ODQ9aW50IG52bWVfZW5hYmxlX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yODYwLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6Mjg2MTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2VuYWJsZV9jdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjg2Mi1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNzc2PWludCBudm1lX2luaXRfY3RybF9maW5pc2goc3RydWN0IG52bWVfY3RybCAqY3RybCwgYm9vbCB3YXNfc3VzcGVuZGVkKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM4NDAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzozODQxOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfaW5pdF9jdHJsX2ZpbmlzaCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM4NDItXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDE5Mz1zdHJ1Y3QgbnZtZV9ucyAqbnZtZV9maW5kX2dldF9ucyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB1bnNpZ25lZCBuc2lkKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQyMTItfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0MjEzOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG52bWVfZmluZF9nZXRfbnMsIFxcXCJOVk1FX1RBUkdFVF9QQVNTVEhSVVxcXCIpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00MjE0LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTQ2Nzc9dm9pZCBudm1lX3JlbW92ZV9uYW1lc3BhY2VzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDcxNy19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ3MTg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9yZW1vdmVfbmFtZXNwYWNlcyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTQ3MTktXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDkyND12b2lkIG52bWVfY29tcGxldGVfYXN5bmNfZXZlbnQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgX19sZTE2IHN0YXR1cyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00OTYxLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NDk2MjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2NvbXBsZXRlX2FzeW5jX2V2ZW50KTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDk2My1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NDk2ND1pbnQgbnZtZV9hbGxvY19hZG1pbl90YWdfc2V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMTMtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDE0OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWxsb2NfYWRtaW5fdGFnX3NldCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMTUtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUwMTY9dm9pZCBudm1lX3JlbW92ZV9hZG1pbl90YWdfc2V0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTAyNy19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUwMjg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9yZW1vdmVfYWRtaW5fdGFnX3NldCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwMjktXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUwMzA9aW50IG52bWVfYWxsb2NfaW9fdGFnX3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDc5LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTA4MDpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2FsbG9jX2lvX3RhZ19zZXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDgxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MDgyPXZvaWQgbnZtZV9yZW1vdmVfaW9fdGFnX3NldChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUwODktfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MDkwOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfcmVtb3ZlX2lvX3RhZ19zZXQpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MDkxLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MDkyPXZvaWQgbnZtZV9zdG9wX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTAxLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTEwMjpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3N0b3BfY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxMDMtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUxMDQ9dm9pZCBudm1lX3N0YXJ0X2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTMyLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTEzMzpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3N0YXJ0X2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTM0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MTM1PXZvaWQgbnZtZV91bmluaXRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUxNDMtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5pbml0X2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTQ1LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUyMDA9aW50IG52bWVfaW5pdF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01Mjc3LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTI3ODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX2luaXRfY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUyNzktXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTI4ND1pbnQgbnZtZV9hZGRfY3RybChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzMTAtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MzExOkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfYWRkX2N0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MzEyLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzMTQ9dm9pZCBudm1lX21hcmtfbmFtZXNwYWNlc19kZWFkKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTMyNC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzMjU6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9tYXJrX25hbWVzcGFjZXNfZGVhZCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzMjYtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzMjc9dm9pZCBudm1lX3VuZnJlZXplKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTMzOC19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzMzk6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV91bmZyZWV6ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNDAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzNDE9aW50IG52bWVfd2FpdF9mcmVlemVfdGltZW91dChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNTYtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1MzU3OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfd2FpdF9mcmVlemVfdGltZW91dCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNTgtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzNTk9dm9pZCBudm1lX3dhaXRfZnJlZXplKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM2OS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUzNzA6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV93YWl0X2ZyZWV6ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzNzEtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTUzNzI9dm9pZCBudm1lX3N0YXJ0X2ZyZWV6ZShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTUzODgtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfc3RhcnRfZnJlZXplKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTM5MC1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTM5MT12b2lkIG52bWVfcXVpZXNjZV9pb19xdWV1ZXMoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01Mzk5LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTQwMDpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3F1aWVzY2VfaW9fcXVldWVzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQwMS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9NTQwMj12b2lkIG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MDgtfVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo1NDA5OkVYUE9SVF9TWU1CT0xfR1BMKG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MTAtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0MTE9dm9pZCBudm1lX3F1aWVzY2VfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDE3LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTQxODpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3F1aWVzY2VfYWRtaW5fcXVldWUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDE5LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01NDIwPXZvaWQgbnZtZV91bnF1aWVzY2VfYWRtaW5fcXVldWUoc3RydWN0IG52bWVfY3RybCAqY3RybClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDI0LX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTQyNTpFWFBPUlRfU1lNQk9MX0dQTChudm1lX3VucXVpZXNjZV9hZG1pbl9xdWV1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MjYtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0Mjc9dm9pZCBudm1lX3N5bmNfaW9fcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQzNy19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU0Mzg6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zeW5jX2lvX3F1ZXVlcyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0MzktXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0NDA9dm9pZCBudm1lX3N5bmNfcXVldWVzKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQ0NS19XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjU0NDY6RVhQT1JUX1NZTUJPTF9HUEwobnZtZV9zeW5jX3F1ZXVlcyk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTU0NDctXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTU0NDg9c3RydWN0IG52bWVfY3RybCAqbnZtZV9jdHJsX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01NDUzLX1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6NTQ1NDpFWFBPUlRfU1lNQk9MX05TX0dQTChudm1lX2N0cmxfZnJvbV9maWxlLCBcXFwiTlZNRV9UQVJHRVRfUEFTU1RIUlVcXFwiKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTQ1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6NDMuOTgzNDg1OTQzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTgzNTAwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqbnZtZVxcX3F1ZXVlXFxfc2NhbiBFeHBvcnQgU3RhdHVzIENoZWNrKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBudm1lX3F1ZXVlX3NjYW5gLiBJJ20gcHJldHR5IHN1cmUgaXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayBiZWZvcmUgSSBnbyBkb3duIHRoYXQgcmFiYml0IGhvbGUuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBpdHMgZXhwb3J0IHN0YXR1cy4gR290dGEgYmUgcHJlY2lzZSBoZXJlIOKAkyBhIG1pc3VuZGVyc3RhbmRpbmcgb24gdGhpcyBwb2ludCBjb3VsZCB3YXN0ZSBzaWduaWZpY2FudCB0aW1lLiBMZXQgbWUgdmVyaWZ5IHRoZSBzeW1ib2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM1MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjQ5LjQwMTgzOTAzNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzg2OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfcXVldWVfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTE1NT1zdGF0aWMgaW50IG52bWVfZ2V0X2xvZ19sc2koc3RydWN0IG52bWVfY3RybCAqY3RybCwgdTMyIG5zaWQsIHU4IGxvZ19wYWdlLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE1Ny1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTU4OnZvaWQgbnZtZV9xdWV1ZV9zY2FuKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTE1OS17XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MTI3MT12b2lkIG52bWVfcGFzc3RocnVfZW5kKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHN0cnVjdCBudm1lX25zICpucywgdTMyIGVmZmVjdHMsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMTI5My1cXHRcXHRzZXRfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXFx1MDAyNmN0cmwtXFx1MDAzZWZsYWdzKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MTI5NDpcXHRcXHRudm1lX3F1ZXVlX3NjYW4oY3RybCk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTEyOTUtXFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2Y3RybC1cXHUwMDNlc2Nhbl93b3JrKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00NjE4PXN0YXRpYyB2b2lkIG52bWVfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjYzLVxcdGlmICh0ZXN0X2JpdChOVk1FX0FFUl9OT1RJQ0VfTlNfQ0hBTkdFRCwgXFx1MDAyNmN0cmwtXFx1MDAzZWV2ZW50cykpXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjQ2NjQ6XFx0XFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00NjY1LSNpZmRlZiBDT05GSUdfTlZNRV9NVUxUSVBBVEhcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz00ODgwPXN0YXRpYyBib29sIG52bWVfaGFuZGxlX2Flbl9ub3RpY2Uoc3RydWN0IG52bWVfY3RybCAqY3RybCwgdTMyIHJlc3VsdClcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy00ODg3LVxcdFxcdHNldF9iaXQoTlZNRV9BRVJfTk9USUNFX05TX0NIQU5HRUQsIFxcdTAwMjZjdHJsLVxcdTAwM2VldmVudHMpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzo0ODg4OlxcdFxcdG52bWVfcXVldWVfc2NhbihjdHJsKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNDg4OS1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz01MTA0PXZvaWQgbnZtZV9zdGFydF9jdHJsKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtNTEyNC1cXHRpZiAoY3RybC1cXHUwMDNlcXVldWVfY291bnQgXFx1MDAzZSAxKSB7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjUxMjU6XFx0XFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy01MTI2LVxcdFxcdG52bWVfdW5xdWllc2NlX2lvX3F1ZXVlcyhjdHJsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6NDkuNTMyMjMyMzQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTc4ODQ5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVk1lIERyaXZlciBDb2RlKipcblxuUmlnaHQsIGBudm1lX3F1ZXVlX3NjYW5gLiBJbnRlcmVzdGluZy4gSXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCdzICphbHNvKiBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3MgYSBrZXkgZGV0YWlsLiBJIHNlZSBpdCdzIGRlY2xhcmVkIGluIGBudm1lLmhgIGFuZCBhY3RpdmVseSB1c2VkIGJ5IG90aGVyIGZpbGVzIHJlc2lkaW5nIHdpdGhpbiBgZHJpdmVycy9udm1lL2hvc3QvYC4gVGhhdCBtYWtlcyBpdCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIHdoZW4gSSdtIHRyYWNpbmcgdGhlIGRhdGEgZmxvdy4gQSBuaWNlIHBvaW50IG9mIGNvbm5lY3Rpb24gd2l0aGluIHRoZSBkcml2ZXIuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBvdGhlciBsaWtlbHkgY2FuZGlkYXRlcy4uLiBgbnZtZV9zdWJtaXRfdXNlcl9jbWRgLiBBaCwgdGhlcmUgaXQgaXMsIHN0YXRpYyB3aXRoaW4gYGlvY3RsLmNgLiBPa2F5LCBub3RlZC4gQW5kIHdoYXQgYWJvdXQgYG52bWVfdXNlcl9jbWRgPyBTdGF0aWMsIGFsc28gaW4gYGlvY3RsLmNgLiBHb3QgaXQuIFNvLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgaW9jdGwgaGFuZGxpbmcgcm91dGluZXMuIEl0IHNlZW1zIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB1c2VyIGNvbW1hbmRzIGFyZSBoYW5kbGVkIGJ5IGVpdGhlciBgbnZtZV9kZXZfaW9jdGxgIG9yIGBudm1lX25zX2lvY3RsYC4gR29vZCB0byBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjo1NC4xNTAxMTk5NzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjA1MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfZGV2X2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz04MDY9c3RhdGljIGludCBudm1lX2Rldl91c2VyX2NtZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB2b2lkIF9fdXNlciAqYXJncCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtODQyLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6ODQzOmxvbmcgbnZtZV9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy04NDQtXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM2OjU0LjE5NzMzMzcxNFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU4NjgxNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5WTWUgaW9jdGwgQ2FsbHMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBOVk1lIGRyaXZlcnMsIGFuZCB0aGUgYG52bWVfZGV2X2lvY3RsYCBmdW5jdGlvbiBqdXN0IGRvZXNuJ3Qgc2VlbSB0byBiZSBzdGF0aWMuIFRoYXQgcmFpc2VzIGEgZmxhZy4gV2UncmUgbG9va2luZyBhdCBwb3RlbnRpYWxseSBwcml2aWxlZ2VkIG9wZXJhdGlvbnMgaGVyZSwgYW5kIGlmIHRoaXMgZnVuY3Rpb24gaXNuJ3Qgc3RhdGljLCBpdCBtZWFucyBpdCdzIGFjY2Vzc2libGUgZnJvbSBicm9hZGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIG1ha2luZyBpdCBhIHdpZGVyIGF0dGFjayBzdXJmYWNlLiBBbHdheXMgaGF2ZSB0byBjb25zaWRlciB0aGF0LCBlc3BlY2lhbGx5IHdpdGggc3RvcmFnZS4gTm93LCB3aGF0IGFib3V0IGBudm1lX25zX2lvY3RsYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIFdlIGhhdmUgZGV2aWNlLWxldmVsLCBhbmQgbmFtZXNwYWNlLWxldmVsIG9wZXJhdGlvbnMuIElmIHRoZSBuYW1lc3BhY2Utc3BlY2lmaWMgb25lICppcyogc3RhdGljLCBpdCBtYWtlcyB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucyBpbiB0aGUgZGV2aWNlLWxldmVsIG9uZSBhbGwgdGhlIG1vcmUgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXIuIERlcGVuZGluZyBvbiBob3cgdGhvc2UgdHdvIGFyZSByZWxhdGVkLCB3ZSBtaWdodCBiZSBsb29raW5nIGF0IGEgd2F5IHRvIGJ5cGFzcyBjZXJ0YWluIHNlY3VyaXR5IGNoZWNrcyBvciBleHBsb2l0IGEgYnJvYWRlciBjbGFzcyBvZiB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIEFyZSB0aGVyZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzPyBDb21tb24gY29udHJvbCBwYXRocz8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBzeW1ib2wgdGFibGVzIGFuZCB4cmVmcy4gVGhpcyBtaWdodCBiZSBhIHJhYmJpdCBob2xlIHdvcnRoIGV4cGxvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNjo1Ny43NTYwMTcwMDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzE3NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm52bWVfbnNfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTU2Mz1zdHJ1Y3QgbnZtZV91c2VyX2lvMzIge1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy01NzktXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYzo1ODA6c3RhdGljIGludCBudm1lX25zX2lvY3RsKHN0cnVjdCBudm1lX25zICpucywgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTU4MS1cXHRcXHR2b2lkIF9fdXNlciAqYXJncCwgdW5zaWduZWQgaW50IGZsYWdzLCBib29sIG9wZW5fZm9yX3dyaXRlKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz02MTA9aW50IG52bWVfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy02MjItXFx0XFx0cmV0dXJuIG52bWVfY3RybF9pb2N0bChucy1cXHUwMDNlY3RybCwgY21kLCBhcmdwLCBvcGVuX2Zvcl93cml0ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYzo2MjM6XFx0cmV0dXJuIG52bWVfbnNfaW9jdGwobnMsIGNtZCwgYXJncCwgZmxhZ3MsIG9wZW5fZm9yX3dyaXRlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTYyNC19XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTYyNj1sb25nIG52bWVfbnNfY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtNjM0LVxcdFxcdHJldHVybiBudm1lX2N0cmxfaW9jdGwobnMtXFx1MDAzZWN0cmwsIGNtZCwgYXJncCwgb3Blbl9mb3Jfd3JpdGUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6NjM1OlxcdHJldHVybiBudm1lX25zX2lvY3RsKG5zLCBjbWQsIGFyZ3AsIDAsIG9wZW5fZm9yX3dyaXRlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTYzNi19XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jPTcwOD1pbnQgbnZtZV9uc19oZWFkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMtNzM0LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmM6NzM1OlxcdHJldCA9IG52bWVfbnNfaW9jdGwobnMsIGNtZCwgYXJncCwgZmxhZ3MsIG9wZW5fZm9yX3dyaXRlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jLTczNi1vdXRfdW5sb2NrOlxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYz03NDE9bG9uZyBudm1lX25zX2hlYWRfY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03NjAtXFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYzo3NjE6XFx0cmV0ID0gbnZtZV9uc19pb2N0bChucywgY21kLCBhcmdwLCAwLCBvcGVuX2Zvcl93cml0ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYy03NjItb3V0X3VubG9jazpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6MzY6NTcuODA0MzQwODI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDc5NDg3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlZNZSBEcml2ZXIgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBOVk1lIGRyaXZlciBwYXRjaCwgYW5kIGhlcmUncyB3aGF0IEkndmUgZ2F0aGVyZWQuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIHJlZnVzYWwgb2YgdW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZXMgb24gYW4gaW4tdXNlIG5hbWVzcGFjZSwgd2hpY2ggaXMgYSBzZW5zaWJsZSBzZWN1cml0eSBpbXByb3ZlbWVudC4gSG93ZXZlciwgdGhlIHBhdGNoIHRoZW4gaW50cm9kdWNlcyBhIGZsYWcgdG8gcGVybWl0IGZvcm1hdCBjaGFuZ2VzIGlmIHRoZSBob3N0IGV4cGxpY2l0bHkgcmVxdWVzdHMgaXQgdmlhIE5WTWUgcGFzc3Rocm91Z2ggY29tbWFuZHMuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgb3BlbiB1cCBhIG5ldyBhdHRhY2sgc3VyZmFjZSwgcGFydGljdWxhcmx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaGVuY2UgdGhlIGNvbmNlcm4uXG5cbkZyb20gYSBzeW1ib2wgcGVyc3BlY3RpdmUsIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYG52bWVfaW9jdGxgIGFuZCBgbnZtZV9kZXZfaW9jdGxgIGFzIHBvdGVudGlhbCB0YXJnZXRzLCBzaW5jZSBgbnZtZV9uc19pb2N0bGAgaXMgc3RhdGljIChhbmQgdGhlcmVmb3JlIGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUpLiBIb3dldmVyLCBgbnZtZV9wYXNzdGhydV9lbmRgIGlzIGEgKm11Y2gqIGJldHRlciBjaG9pY2UgYmVjYXVzZSBpdCdzIHJpZ2h0IHdoZXJlIHRoZSBjaGFuZ2UgaGFwcGVucywgYW5kLCBpbXBvcnRhbnRseSwgaXQncyBhbiBleHBvcnRlZCBzeW1ib2wuIFRoaXMgbWFrZXMgaXQgaWRlYWwgZm9yIGFuYWx5c2lzIGFuZCBsaWtlbHkgZnV6emluZy4gSSdtIGFsc28gaW5jbHVkaW5nIGBudm1lX3F1ZXVlX3NjYW5gIGFzIGEgZm9jdXMgc3ltYm9sLCBhbHRob3VnaCBteSBpbml0aWFsIHJlYWRpbmcgc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSBzZWNvbmRhcnkgdG8gYG52bWVfcGFzc3RocnVfZW5kYC5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyB3YXJyYW50cyBmdXp6aW5nLCBhbmQgaXQncyBkZWZpbml0ZWx5IHdvcnRoIHB1cnN1aW5nLiBgV29ydGhGdXp6aW5nOiB0cnVlYCBpcyBhcHByb3ByaWF0ZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogdGhlIHBhdGNoIGltcGFjdHMgY29yZSBOVk1lIGxvZ2ljLCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gdGhhdCBwYXNzdGhyb3VnaCBmdW5jdGlvbmFsaXR5IGFuZCB0aGF0J3MgdGhlIGFyZWEgdGhhdCBJJ2xsIGNvbmNlbnRyYXRlIG9uLlxuXG5UaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYEJMS19ERVZfTlZNRWAgYW5kIGBOVk1FX01VTFRJUEFUSGAuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNvbmZpcm0gYE5WTUVfTVVMVElQQVRIYCBpcyBhY3R1YWxseSBhIHZhbGlkIGFuZCByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiwganVzdCB0byBiZSB0aG9yb3VnaC4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGl0J3MgaW5jbHVkZWQgaW4gdGhlIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2MzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6Mzc6MDMuNDUyMjkyOTM5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ5NTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9NVUxUSVBBVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTU9Y29uZmlnIEJMS19ERVZfTlZNRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjE3OmNvbmZpZyBOVk1FX01VTFRJUEFUSFxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMTgtXFx0Ym9vbCBcXFwiTlZNZSBtdWx0aXBhdGggc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6Mzc6MDMuNTAzNzk0NDgzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzc0NzQ1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgU3ltYm9sIFZhbGlkaXR5IGZvciBLZXJuZWwgTW9kdWxlIEludGVncmF0aW9uKipcblxuUmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBjYXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHN5bWJvbHMgYXJlIGFjY2Vzc2libGUuIExldCdzIHN0YXJ0IHdpdGggYG52bWVfcGFzc3RocnVfZW5kYC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBzeW1ib2wncyBhdmFpbGFiaWxpdHkg4oCTIHllcCwgaXQncyBwcm9wZXJseSBleHBvcnRlZC4gVGhhdCdzIGEgZ29vZCBzdGFydC4gTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYG52bWVfcXVldWVfc2NhbmAgdG8gY29uZmlybSBpdCdzIHZpc2libGUuIE9rYXksIGl0J3Mgbm90IHN0YXRpYyBhbmQgYXBwZWFycyB0byBiZSB1c2VkIGluIG11bHRpcGxlIGZpbGVzLCBzbyB0aGF0IHNob3VsZCBiZSBva2F5IHRvby4gR2l2ZW4gdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSB2YWxpZCwgSSdsbCBnbyBhaGVhZCBhbmQgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LiBUaGlzIHNob3VsZCBzZXQgdXAgdGhlIGZpbmFsIHBhcmFtZXRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzUwLCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE5OjM3OjA3Ljg4MTI3NDE0N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxODkzNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIk5WTUVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnZtZV9wYXNzdGhydV9lbmRcIixcbiAgICBcIm52bWVfcXVldWVfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVk1lIGNvcmUgZHJpdmVyIHRvIHJlZnVzZSB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyBvbiBhbiBpbi11c2UgbmFtZXNwYWNlLCBhbmQgYWRkcyBhIGZsYWcgdG8gYWxsb3cgZm9ybWF0IGNoYW5nZXMgaWYgdGhlIGhvc3QgcmVxdWVzdGVkIGl0IHZpYSBOVk1lIHBhc3N0aHJvdWdoIGNvbW1hbmRzLiBUaGlzIGFmZmVjdHMgY29yZSBOVk1lIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJOVk1FX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm52bWVfcGFzc3RocnVfZW5kXCIsXG4gICAgXCJudm1lX3F1ZXVlX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlZNZSBjb3JlIGRyaXZlciB0byByZWZ1c2UgdW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZXMgb24gYW4gaW4tdXNlIG5hbWVzcGFjZSwgYW5kIGFkZHMgYSBmbGFnIHRvIGFsbG93IGZvcm1hdCBjaGFuZ2VzIGlmIHRoZSBob3N0IHJlcXVlc3RlZCBpdCB2aWEgTlZNZSBwYXNzdGhyb3VnaCBjb21tYW5kcy4gVGhpcyBhZmZlY3RzIGNvcmUgTlZNZSBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNzowNy45NjMyMzU4MDlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ4ODQ2NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6Mzc6MDcuOTY1MjI5MDI5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwODQ2ODQ1MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgYW5kIHVzZXMgaXQgdG8gcHJldmVudCB1bnNvbGljaXRlZCBMQkEgZm9ybWF0IG9yIG1ldGFkYXRhIHNpemUgY2hhbmdlcyBvbiBpbi11c2UgTlZNZSBuYW1lc3BhY2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1ZSB0byBibG9jayBzaXplIGNoYW5nZXMgd2hpbGUgaW4gdXNlKSBhcmUgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI4MDcxMDJhZTBiNTA5MTE5N2YwM2I1YTQ5OWI2ODZmYmMyNmM4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE5OjM1OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCA0NTNjMWYwYjJkZDA5Li5lYmFjNWEzZDFhMDc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC0xMjg1LDggKzEyODUsMTUgQEAgdm9pZCBudm1lX3Bhc3N0aHJ1X2VuZChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsIHUzMiBlZmZlY3RzLFxuIFx0XHR9XG4gXHR9XG4gXHRpZiAoZWZmZWN0cyBcdTAwMjYgKE5WTUVfQ01EX0VGRkVDVFNfTklDIHwgTlZNRV9DTURfRUZGRUNUU19OQ0MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBob3N0IGFza2VkIGZvciB0aGlzIGNoYW5nZSwgc28gbGV0IHRoZSByZXNjYW4gYWRvcHQgdGhlXG4rXHRcdCAqIG5ldyBuYW1lc3BhY2UgZ2VvbWV0cnkgZXZlbiBpZiB0aGUgZGlzayBpcyBvcGVuLiAgT25seSBhblxuK1x0XHQgKiB1bnNvbGljaXRlZCBjaGFuZ2UgaXMgcmVmdXNlZCwgc2VlIG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soKS5cbitcdFx0ICovXG4rXHRcdHNldF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZjdHJsLVx1MDAzZWZsYWdzKTtcbiBcdFx0bnZtZV9xdWV1ZV9zY2FuKGN0cmwpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNmN0cmwtXHUwMDNlc2Nhbl93b3JrKTtcbitcdFx0Y2xlYXJfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2Y3RybC1cdTAwM2VmbGFncyk7XG4gXHR9XG4gXHRpZiAobnMpXG4gXHRcdHJldHVybjtcbkBAIC0yMzg0LDYgKzIzOTEsMTcgQEAgc3RhdGljIGJvb2wgbnZtZV9pbnZhbGlkX2xiYV9zeih1NjQgbnN6ZSwgc2lnbmVkIGludCBzaGlmdCwgc2VjdG9yX3QgKmNhcGFjaXR5KVxuIFx0cmV0dXJuIGNoZWNrX3NobF9vdmVyZmxvdyhuc3plLCBzaGlmdCwgY2FwYWNpdHkpO1xuIH1cbiBcbisvKlxuKyAqIE9wZW5lcnMgb2YgYSBtdWx0aXBhdGggbmFtZXNwYWNlIGdvIHRvIHRoZSBoZWFkIGRpc2s7IHRoZSBwZXItcGF0aCBkaXNrIGlzXG4rICogaGlkZGVuIGFuZCBuZXZlciBoYXMgYW55LlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9uc19vcGVuZXJzKHN0cnVjdCBudm1lX25zICpucylcbit7XG4rXHRpZiAobnZtZV9uc19oZWFkX211bHRpcGF0aChucy1cdTAwM2VoZWFkKSlcbitcdFx0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2spO1xuK1x0cmV0dXJuIGRpc2tfb3BlbmVycyhucy1cdTAwM2VkaXNrKTtcbit9XG4rXG4gc3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbiBcdFx0c3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbiB7XG5AQCAtMjQzNiw2ICsyNDU0LDI4IEBAIHN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIENoYW5naW5nIHRoZSBMQkEgZm9ybWF0IG9yIHRoZSBtZXRhZGF0YSBzaXplIHJlaW50ZXJwcmV0cyBldmVyeXRoaW5nXG4rXHQgKiB0aGUgaG9zdCBoYXMgYWxyZWFkeSBjYWNoZWQsIHF1ZXVlZCBvciBoYW5kZWQgdG8gdGhlIGludGVncml0eSBjb2RlXG4rXHQgKiBmb3IgdGhpcyBuYW1lc3BhY2UsIGFuZCBmcmVlemluZyB0aGUgcXVldWUgZG9lcyBub3QgY292ZXIgYW55IG9mIGl0OlxuK1x0ICogcGFnZSBjYWNoZSBjb250ZW50cywgYmlvcyBiYXRjaGVkIG9uIGEgcGx1ZyBhbmQgdGhlIGRlZmVycmVkXG4rXHQgKiBpbnRlZ3JpdHkgdmVyaWZ5IHdvcmsgYWxsIG91dGxpdmUgdGhlIGZyZWV6ZS4gIElmIHN1Y2ggYSBjaGFuZ2VcbitcdCAqIGFycml2ZXMgdW5zb2xpY2l0ZWQgd2hpbGUgdGhlIG5hbWVzcGFjZSBpcyBpbiB1c2UsIHJlZnVzZSBpdCBhbmQgbGV0XG4rXHQgKiB0aGUgY2FsbGVyIHRha2UgdGhlIG5hbWVzcGFjZSBvZmZsaW5lIHJhdGhlciB0aGFuIGFkb3B0IGEgZ2VvbWV0cnlcbitcdCAqIHRoYXQgZGVzY3JpYmVzIHNvbWV0aGluZyBlbHNlIHRoYW4gd2hhdCB0aGUgaG9zdCBpcyBob2xkaW5nLlxuK1x0ICovXG4rXHRpZiAobnZtZV9uc19vcGVuZXJzKG5zKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhdGVzdF9iaXQoTlZNRV9DVFJMX1NFTEZfUkVTQ0FOLCBcdTAwMjZucy1cdTAwM2VjdHJsLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAobnMtXHUwMDNlaGVhZC1cdTAwM2VsYmFfc2hpZnQgIT0gaWQtXHUwMDNlbGJhZltsYmFmXS5kcyB8fFxuK1x0ICAgICBucy1cdTAwM2VoZWFkLVx1MDAzZW1zICE9IGxlMTZfdG9fY3B1KGlkLVx1MDAzZWxiYWZbbGJhZl0ubXMpKSkge1xuK1x0XHRkZXZfZXJyKG5zLVx1MDAzZWN0cmwtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwidW5zb2xpY2l0ZWQgZm9ybWF0IGNoYW5nZSBvbiBpbi11c2UgbnNpZCAldSAobGJhX3NoaWZ0ICV1IC1cdTAwM2UgJXUsIG1zICV1IC1cdTAwM2UgJXUpXFxuXCIsXG4rXHRcdFx0aW5mby1cdTAwM2Vuc2lkLCBucy1cdTAwM2VoZWFkLVx1MDAzZWxiYV9zaGlmdCwgaWQtXHUwMDNlbGJhZltsYmFmXS5kcyxcbitcdFx0XHRucy1cdTAwM2VoZWFkLVx1MDAzZW1zLCBsZTE2X3RvX2NwdShpZC1cdTAwM2VsYmFmW2xiYWZdLm1zKSk7XG4rXHRcdHJldCA9IE5WTUVfU0NfSU5WQUxJRF9OUyB8IE5WTUVfU1RBVFVTX0ROUjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuIFxuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuaW5kZXggODI0NjUxY2M4OThkYi4uOTNjMTVkNTU4MGUzMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG5AQCAtMzI5LDYgKzMyOSw3IEBAIGVudW0gbnZtZV9jdHJsX2ZsYWdzIHtcbiBcdE5WTUVfQ1RSTF9TS0lQX0lEX0NOU19DU1x0PSA0LFxuIFx0TlZNRV9DVFJMX0RJUlRZX0NBUEFCSUxJVFlcdD0gNSxcbiBcdE5WTUVfQ1RSTF9GUk9aRU5cdFx0PSA2LFxuK1x0TlZNRV9DVFJMX1NFTEZfUkVTQ0FOXHRcdD0gNyxcbiB9O1xuIFxuIHN0cnVjdCBudm1lX2N0cmwge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTk6Mzc6MDcuOTY1MjMxMjA5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODQ2ODIyNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlZNZSBOYW1lc3BhY2UgR2VvbWV0cnkgUHJvdGVjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBkcml2ZXJzL252bWUvaG9zdC9jb3JlLmNgIGFuZCBgZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGV5J3JlIGFkZGluZyBhIGBOVk1FX0NUUkxfU0VMRl9SRVNDQU5gIGZsYWcgdG8gYG52bWVfY3RybF9mbGFnc2AuIFRoZSBrZXkgbG9naWMgc2VlbXMgdG8gYmUgYXJvdW5kIGBudm1lX3Bhc3N0aHJ1X2VuZGAgYW5kIGBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrYC5cblxuSW4gYG52bWVfcGFzc3RocnVfZW5kYCwgdGhleSdyZSBzZXR0aW5nIHRoaXMgbmV3IGBOVk1FX0NUUkxfU0VMRl9SRVNDQU5gIGZsYWcgYmVmb3JlIGNhbGxpbmcgYG52bWVfcXVldWVfc2NhbmAgYW5kIGNsZWFyaW5nIGl0IGFmdGVyd2FyZC4gTWFrZXMgc2Vuc2U6IHRoaXMgaW5kaWNhdGVzIGEgZGVsaWJlcmF0ZSwgY29udHJvbGxlZCByZS1zY2FuLiBUaGVuLCBpbiBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AsIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrLiBUaGV5IHZlcmlmeSBpZiB0aGUgbmFtZXNwYWNlIGlzIGluIHVzZSB2aWEgYG52bWVfbnNfb3BlbmVycyhucylgLiBJZiBpdCAqaXMqIGluIHVzZSAqYW5kKiBpdCdzICpub3QqIGEgc2VsZi1yZXNjYW4gKHRoZSBgIXRlc3RfYml0KE5WTUVfQ1RSTF9TRUxGX1JFU0NBTiwgXHUwMDI2bnMtXHUwMDNlY3RybC1cdTAwM2VmbGFncylgIHBhcnQpLCB0aGV5J3JlIGJsb2NraW5nIGNoYW5nZXMgdG8gdGhlIExCQSBmb3JtYXQgb3IgbWV0YWRhdGEgc2l6ZSwgcmV0dXJuaW5nIGFuIGBOVk1FX1NDX0lOVkFMSURfTlMgfCBOVk1FX1NUQVRVU19ETlJgIGVycm9yLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgcHJvdGVjdGlvbi5cblxuVGhlIHJhdGlvbmFsZSBpcyBjbGVhcjogcHJldmVudCB1bnNvbGljaXRlZCBmb3JtYXQgY2hhbmdlcyB0byBuYW1lc3BhY2VzIHRoYXQgYXJlIGFjdGl2ZWx5IGJlaW5nIHVzZWQuIFRoaXMgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgY29uc2VxdWVuY2VzIOKAkyBkYXRhIGNvcnJ1cHRpb24sIGNyYXNoZXMsIHlvdSBuYW1lIGl0LCBiZWNhdXNlIHRoZSBob3N0IGhhcyBjYWNoZWQgZGF0YSwgcXVldWVkIEkvT3MsIGFuZCB2ZXJpZmljYXRpb24gd29yayB0aGF0IHdvdWxkIGJlY29tZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbmV3IGdlb21ldHJ5IGlmIGNoYW5nZWQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBuby4gSXQgZG9lc24ndCBzZWVtIHRvIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gSXQgc2ltcGx5IGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IGdlb21ldHJ5IGNoYW5nZXMgd2hlbiB0aGUgbmFtZXNwYWNlIGlzIGFjdGl2ZSwgZXhjZXB0IGR1cmluZyBhIHNlbGYtcmVzY2FuLiBJdCdzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHVzZXItc3BhY2Ugc3RydWN0dXJlcywgbm9yIGFsbG9jYXRpbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcHJvYmxlbWF0aWMuIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2sgY2hhbmdlcyB0aGF0IHdvdWxkIHBlcm1pdCB1bmluaXRpYWxpemVkIGRhdGEgdG8gYmUgcmVhZC4gVGhlIG9yaWdpbmFsIGlzc3VlIHRoaXMgaXMgZml4aW5nIGlzIGxpa2VseSBkdWUgdG8gdGhlIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLCBkYXRhIGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdGhhdCBjYW4gcmVzdWx0IHdoZW4gdGhlIGJsb2NrIHNpemUgb3IgbWV0YWRhdGEgaXMgbW9kaWZpZWQgd2hpbGUgdGhlIGRldmljZSBpcyBpbiB1c2UsIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgS0FTQU4gb3IgbW9yZSBzdGFuZGFyZCBjaGVja3MgKGxpa2UgaXNzdWVzIHdpdGhpbiB0aGUgcGFnZSBjYWNoZSBvciBiaW8gaXNzdWVzKS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBgbnZtZV9wYXNzdGhydV9lbmRgIGFuZCBgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9ja2AgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBOb3RoaW5nIHN0aWNrcyBvdXQuIFRoZSB2YXJpYWJsZXMgdXNlZCAoYGlkYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBudm1lX2lkX25zYCB3aGljaCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGVsc2V3aGVyZSwgYW5kIGBsYmFmYCBpcyBhbiBpbmRleCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2gganVzdCBhZGRzIGEgZmxhZyBhbmQgYSBjb25kaXRpb25hbCBjaGVjay5cblxuU28sIHllYWgsIGl0IGxvb2tzIGxpa2UgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZSBmb3IgdGhpcyBvbmUuIFRoaXMgaXMgYSBjbGVhbiwgd2VsbC1mb2N1c2VkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcmVhbCBwb3RlbnRpYWwgcHJvYmxlbSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBuZXcgc2VjdXJpdHkgY29uY2VybnMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5MCwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxOTozNzoxOC44MTIwNTc0MTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgTlZNRV9DVFJMX1NFTEZfUkVTQ0FOYCBhbmQgdXNlcyBpdCB0byBwcmV2ZW50IHVuc29saWNpdGVkIExCQSBmb3JtYXQgb3IgbWV0YWRhdGEgc2l6ZSBjaGFuZ2VzIG9uIGluLXVzZSBOVk1lIG5hbWVzcGFjZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBkYXRhIGNvcnJ1cHRpb24gb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVlIHRvIGJsb2NrIHNpemUgY2hhbmdlcyB3aGlsZSBpbiB1c2UpIGFyZSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYE5WTUVfQ1RSTF9TRUxGX1JFU0NBTmAgYW5kIHVzZXMgaXQgdG8gcHJldmVudCB1bnNvbGljaXRlZCBMQkEgZm9ybWF0IG9yIG1ldGFkYXRhIHNpemUgY2hhbmdlcyBvbiBpbi11c2UgTlZNZSBuYW1lc3BhY2VzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1ZSB0byBibG9jayBzaXplIGNoYW5nZXMgd2hpbGUgaW4gdXNlKSBhcmUgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow796lx[1] Phase: Succeeded StartedAt: 2026-08-11 19:37:30 +0000 UTC FinishedAt: 2026-08-11 19:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 19:37:30 +0000 UTC FinishedAt: 2026-08-11 19:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2] Phase: Succeeded StartedAt: 2026-08-11 19:37:30 +0000 UTC FinishedAt: 2026-08-11 23:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 19:37:30 +0000 UTC FinishedAt: 2026-08-11 23:17:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 19:37:30 +0000 UTC FinishedAt: 2026-08-11 19:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 19:37:30 +0000 UTC FinishedAt: 2026-08-11 19:37:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow796lx/series-workflow796lx-convert-artifact-1727044690/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 19:37:40 +0000 UTC FinishedAt: 2026-08-11 19:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 19:37:40 +0000 UTC FinishedAt: 2026-08-11 19:54:51 +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:*a61ad6ad-7878-466d-89bc-00dc44fcd4fa,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-workflow796lx/series-workflow796lx-convert-artifact-1727044690/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": "98384aba-6be5-496d-b604-09e898140617", "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-workflow796lx/series-workflow796lx-build-action-1645220048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 19:37:40 +0000 UTC FinishedAt: 2026-08-11 19:54:41 +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:*a61ad6ad-7878-466d-89bc-00dc44fcd4fa,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-workflow796lx/series-workflow796lx-convert-artifact-1727044690/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": "98384aba-6be5-496d-b604-09e898140617", "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-workflow796lx/series-workflow796lx-build-action-1645220048/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 19:54:51 +0000 UTC FinishedAt: 2026-08-11 19:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 19:54:51 +0000 UTC FinishedAt: 2026-08-11 19:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 19:54:51 +0000 UTC FinishedAt: 2026-08-11 19:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 19:54:51 +0000 UTC FinishedAt: 2026-08-11 19:54:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow796lx/series-workflow796lx-convert-artifact-148339565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 19:55:01 +0000 UTC FinishedAt: 2026-08-11 19:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 19:55:01 +0000 UTC FinishedAt: 2026-08-11 19:56:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*98384aba-6be5-496d-b604-09e898140617,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-workflow796lx/series-workflow796lx-build-action-1645220048/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-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 19:57:05 +0000 UTC FinishedAt: 2026-08-11 19:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 19:57:05 +0000 UTC FinishedAt: 2026-08-11 19:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 19:57:05 +0000 UTC FinishedAt: 2026-08-11 20:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 19:57:05 +0000 UTC FinishedAt: 2026-08-11 20:13:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a61ad6ad-7878-466d-89bc-00dc44fcd4fa,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-workflow796lx/series-workflow796lx-convert-artifact-148339565/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": "9ad288a3-b4bd-4151-a4f6-c894eeeb7065", "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-workflow796lx/series-workflow796lx-build-action-1564355785/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 19:57:05 +0000 UTC FinishedAt: 2026-08-11 20:13:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a61ad6ad-7878-466d-89bc-00dc44fcd4fa,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-workflow796lx/series-workflow796lx-convert-artifact-148339565/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": "9ad288a3-b4bd-4151-a4f6-c894eeeb7065", "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-workflow796lx/series-workflow796lx-build-action-1564355785/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 20:13:55 +0000 UTC FinishedAt: 2026-08-11 20:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 20:13:55 +0000 UTC FinishedAt: 2026-08-11 20:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 20:13:55 +0000 UTC FinishedAt: 2026-08-11 20:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 20:13:55 +0000 UTC FinishedAt: 2026-08-11 20:15:50 +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:*9ad288a3-b4bd-4151-a4f6-c894eeeb7065,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-workflow796lx/series-workflow796lx-build-action-1564355785/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-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 20:16:00 +0000 UTC FinishedAt: 2026-08-11 23:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 20:16:00 +0000 UTC FinishedAt: 2026-08-11 23:17:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"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:*98384aba-6be5-496d-b604-09e898140617,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ad288a3-b4bd-4151-a4f6-c894eeeb7065,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-workflow796lx/series-workflow796lx-build-action-1645220048/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-workflow796lx/series-workflow796lx-build-action-1564355785/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 20:16:00 +0000 UTC FinishedAt: 2026-08-11 20:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 20:16:00 +0000 UTC FinishedAt: 2026-08-11 20:16:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"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-workflow796lx/series-workflow796lx-convert-artifact-2046014930/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 20:16:00 +0000 UTC FinishedAt: 2026-08-11 20:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 20:16:00 +0000 UTC FinishedAt: 2026-08-11 20:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 20:16:00 +0000 UTC FinishedAt: 2026-08-11 20:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 20:16:10 +0000 UTC FinishedAt: 2026-08-11 23:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow796lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nvme_passthru_end","nvme_queue_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NVME","NVME_MULTIPATH"],"series_id":"99ad8393-c9da-4b87-b7e8-511e71e5223d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 20:16:10 +0000 UTC FinishedAt: 2026-08-11 23:17:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*98384aba-6be5-496d-b604-09e898140617,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ad288a3-b4bd-4151-a4f6-c894eeeb7065,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-workflow796lx/series-workflow796lx-build-action-1645220048/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-workflow796lx/series-workflow796lx-build-action-1564355785/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-workflow796lx/series-workflow796lx-convert-artifact-2046014930/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,}