Name: series-workflowxxvhz Phase: Succeeded StartedAt: 2026-08-20 17:44:01 +0000 UTC FinishedAt: 2026-08-20 21:28:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[0] Phase: Succeeded StartedAt: 2026-08-20 17:44:01 +0000 UTC FinishedAt: 2026-08-20 17:47:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 17:44:01 +0000 UTC FinishedAt: 2026-08-20 17:47:36 +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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_POOL" ], "series_id": "bbb91efd-31c9-4386-9232-c180ae56295a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHRlAgZmxhZ3MgdXNlZCBmb3IgWEFycmF5IGFsbG9jYXRpb25zIGluIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCBieSBzdHJpcHBpbmcgb3V0IGRldmljZS1zcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgKGBfX0dGUF9ETUFgLCBgX19HRlBfRE1BMzJgLCBgX19HRlBfSElHSE1FTWAsIGBfX0dGUF9DT01QYCkuIFRoaXMgcHJldmVudHMgWEFycmF5IG5vZGVzIGZyb20gYmVpbmcgYWxsb2NhdGVkIGZyb20gcmVzdHJpY3RlZCBtZW1vcnkgem9uZXMgbGlrZSBETUEuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW52YWxpZCBhY2Nlc3NlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIHRvIGNsZWFyIHNwZWNpZmljIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gYGdmcGAgYmVmb3JlIGNhbGxpbmcgYHhhX2FsbG9jYCBvciBgeGFfYWxsb2NfYmhgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBwYWdlIHBvb2wgbG9naWMgdGhhdCBwcmV2ZW50cyBYQXJyYXkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbmNvcnJlY3Qgem9uZSB1c2FnZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBwYWdlIHBvb2wgYWxsb2NhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE0YmVlZjIwODQ5MWRkODQwMTE4NWYyMDkzODgxMDNhZDM2ZWIzNTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNzo0NjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wYWdlX3Bvb2wuYyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jXG5pbmRleCA1MGVlNTUwZmVmNzNhLi44Zjg5NTZmYjA2MWJlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcGFnZV9wb29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jXG5AQCAtNDg0LDYgJiM0Mzs0ODQsMTMgQEAgc3RhdGljIGludCBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4gXHRpZiAodW5saWtlbHkoIVBQX0RNQV9JTkRFWF9CSVRTKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEcml2ZXJzIHJlcXVlc3QgR0ZQIGZsYWdzIGFjY29yZGluZyB0byBib3RoIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kXG4mIzQzO1x0ICogdGhlIGRldmljZSBjb25zdHJhaW50cywgYnV0IHRoZSBYQXJyYXkgZW50cnkgaXRzZWxmIGlzIGJ5IG5vIG1lYW5cbiYjNDM7XHQgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRnZnAgXHUwMDI2PSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX0NPTVApO1xuJiM0MztcbiBcdGlmIChpbl9zb2Z0aXJxKCkpXG4gXHRcdGVyciA9IHhhX2FsbG9jKFx1MDAyNnBvb2wtXHUwMDNlZG1hX21hcHBlZCwgXHUwMDI2aWQsIG5ldG1lbV90b19wYWdlKG5ldG1lbSksXG4gXHRcdFx0ICAgICAgIFBQX0RNQV9JTkRFWF9MSU1JVCwgZ2ZwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNGJlZWYyMDg0OTFkZDg0MDExODVmMjA5Mzg4MTAzYWQzNmViMzUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTc6NDY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wYWdlX3Bvb2wuYyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jCmluZGV4IDUwZWU1NTBmZWY3M2EuLjhmODk1NmZiMDYxYmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jCkBAIC00ODQsNiAmIzQzOzQ4NCwxMyBAQCBzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwKIAlpZiAodW5saWtlbHkoIVBQX0RNQV9JTkRFWF9CSVRTKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogRHJpdmVycyByZXF1ZXN0IEdGUCBmbGFncyBhY2NvcmRpbmcgdG8gYm90aCB0aGUgY3VycmVudCBjb250ZXh0IGFuZAomIzQzOwkgKiB0aGUgZGV2aWNlIGNvbnN0cmFpbnRzLCBidXQgdGhlIFhBcnJheSBlbnRyeSBpdHNlbGYgaXMgYnkgbm8gbWVhbgomIzQzOwkgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy4KJiM0MzsJICovCiYjNDM7CWdmcCAmYW1wOz0gfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9DT01QKTsKJiM0MzsKIAlpZiAoaW5fc29mdGlycSgpKQogCQllcnIgPSB4YV9hbGxvYygmYW1wO3Bvb2wtJmd0O2RtYV9tYXBwZWQsICZhbXA7aWQsIG5ldG1lbV90b19wYWdlKG5ldG1lbSksCiAJCQkgICAgICAgUFBfRE1BX0lOREVYX0xJTUlULCBnZnApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBQb29sIERNQSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvcGFnZV9wb29sLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCB0aGUgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaGVyZSBpbnZvbHZlcyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgRE1BIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCBpcyByZW1vdmluZyBhIHNlcmllcyBvZiBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYW5kIGBfX0dGUF9DT01QYCkgZnJvbSB0aGUgYGdmcGAgYWxsb2NhdGlvbiBmbGFncyAqYmVmb3JlKiB0aGUgY2FsbCB0byBgeGFfYWxsb2NgIG9yIGB4YV9hbGxvY19iaGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBiZWluZyBtYWRlLiBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHJlc3RyaWN0aW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpbiB0aGlzIG1hbm5lcj8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbnN0cmFpbnQgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGhlcmU/IFRoZSByZW1vdmFsIG9mIGBfX0dGUF9ETUFgIGFuZCBgX19HRlBfRE1BMzJgIGlzIHRoZSBtb3N0IGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzaW5jZSB0aG9zZSBmbGFncyBkaXJlY3RseSByZWxhdGUgdG8gRE1BLWFibGUgbWVtb3J5IHJlZ2lvbnMuICBJcyB0aGUgZ29hbCB0byBmb3JjZSBhbGxvY2F0aW9uIHdpdGhpbiBhIG5hcnJvd2VyIG1lbW9yeSB3aW5kb3c/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGluY3JlYXNlZCBsYXRlbmN5IGlmIHRoaXMgcmVzdHJpY3RzIHRoZSBtZW1vcnkgcG9vbCB0b28gbXVjaD8KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGUgYHhhX2FsbG9jYCBhbmQgYHhhX2FsbG9jX2JoYCBjYWxscyB0byBzZWUgaG93IGBnZnBgIGlzIHVzZWQgd2l0aGluIHRoYXQgY29udGV4dCwgYW5kIHdoYXQgc2lkZSBlZmZlY3RzIHRoaXMgbWlnaHQgaW50cm9kdWNlLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGltcGFjdHMgb24gRE1BIHRyYW5zZmVycyBpZiB3ZSBsaW1pdCB0aGUgYXZhaWxhYmxlIG1lbW9yeSByZWdpb25zPyBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBuZXR3b3JrIHNjZW5hcmlvcy4gSeKAmWxsIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIHRocm91Z2ggdGhlIHBhZ2UgcG9vbCBjb2RlIGFuZCB0aGVuIGludG8gdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmIHRvIGVuc3VyZSB3ZSYjMzk7cmUgbm90IGluYWR2ZXJ0ZW50bHkgY2F1c2luZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByZWdyZXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGFnZV9wb29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGFnZV9wb29sLmM9NDY0PXBhZ2VfcG9vbF9kbWFfc3luY19mb3JfZGV2aWNlKGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDc3LVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NDc4OnN0YXRpYyBpbnQgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDc5LVx0XHRcdFx0XHRuZXRtZW1fcmVmIG5ldG1lbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTU0Nj1zdGF0aWMgYm9vbCBwYWdlX3Bvb2xfZG1hX21hcChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTU2Ny1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjU2ODpcdGVyciA9IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgocG9vbCwgbmV0bWVtLCBnZnApO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNTY5LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBETUEgTWFwcGluZyB3aXRoaW4gdGhlIFBhZ2UgUG9vbCoqCgpSaWdodCwgc28gSSBzZWUgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBwYWdlX3Bvb2xfZG1hX21hcGAuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBwYWdlX3Bvb2xfZG1hX21hcGAuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBETUEgbWFwcGluZyBmdW5jdGlvbiB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgcmVnaXN0cmF0aW9uIGlzIGhhcHBlbmluZy4gS25vd2luZyB3aGVyZSBgcGFnZV9wb29sX2RtYV9tYXBgIGlzIHV0aWxpemVkIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBvZiByZWdpc3RlcmluZyB0aGF0IERNQSBpbmRleCwgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGRlc2lnbi4gVW5kZXJzdGFuZGluZyB0aGUgdXNhZ2UgY29udGV4dCB3aWxsIGNsYXJpZnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgcmVzb3VyY2UgY29udGVudGlvbiBzY2VuYXJpb3MuIFdpdGhvdXQgdGhhdCBjb250ZXh0LCB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMganVzdCBhIGRhdGEgcG9pbnQsIGJ1dCB3aXRoIGl0LCBpdCYjMzk7cyBhIHZpdGFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9wb29sX2RtYV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYz01MTA9c3RhdGljIHZvaWQgX19wYWdlX3Bvb2xfdW5tYXBfbmV0bWVtX2RtYShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTU0NS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjU0NjpzdGF0aWMgYm9vbCBwYWdlX3Bvb2xfZG1hX21hcChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSwgZ2ZwX3QgZ2ZwKVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTQ3LXtcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz01ODU9c3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfcG9vbF9hbGxvY19wYWdlX29yZGVyKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTk0LVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NTk1Olx0aWYgKHBvb2wtXHUwMDNlZG1hX21hcCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIXBhZ2VfcG9vbF9kbWFfbWFwKHBvb2wsIHBhZ2VfdG9fbmV0bWVtKHBhZ2UpLCBnZnApKSkge1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNTk2LVx0XHRwdXRfcGFnZShwYWdlKTtcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjQ2LVx0XHRuZXRtZW0gPSBwb29sLVx1MDAzZWFsbG9jLmNhY2hlW2ldO1xubmV0L2NvcmUvcGFnZV9wb29sLmM6NjQ3Olx0XHRpZiAoZG1hX21hcCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIXBhZ2VfcG9vbF9kbWFfbWFwKHBvb2wsIG5ldG1lbSwgZ2ZwKSkpIHtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY0OC1cdFx0XHRwdXRfcGFnZShuZXRtZW1fdG9fcGFnZShuZXRtZW0pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDk4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBQb29sIEFsbG9jYXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhZ2UgcG9vbCBhbGxvY2F0aW9uIGxvZ2ljLiBTZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlaXIgYWNjZXNzaWJpbGl0eS4gTGV0JiMzOTtzIHNlZS4uLiBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgLSB0aGF0JiMzOTtzIHN0YXRpYywgZ29vZCB0byBrbm93LiBBbmQgYHBhZ2VfcG9vbF9kbWFfbWFwYCwgYWxzbyBzdGF0aWMuIEFscmlnaHQsIHRoYXQgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyB1c2Ugd2l0aGluIHRoZSBtb2R1bGUuICBgX19wYWdlX3Bvb2xfYWxsb2NfcGFnZV9vcmRlcmAgaXMgc3RhdGljIGFzIHdlbGwsIGFuZCBmaW5hbGx5LCBgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93YCwgeWVwLCBhbHNvIHN0YXRpYy4gTm93LCB3aGF0IGFyZSB0aGUgZnVuY3Rpb25zICpleHBvcnRlZCo/IFdoYXQgYXJlIHRoZSBlbnRyeSBwb2ludHMgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGVtLiBJIHNlZSBgcGFnZV9wb29sX2FsbG9jX3BhZ2VzYCBhbmQgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1gLiBSaWdodCwgdGhlc2UgYXJlIHRoZSBleHBvc2VkIGludGVyZmFjZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmZhY2VzIGludGVyYWN0IHdpdGggdGhlc2Ugc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYXAgdGhlIGludGVybmFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBleHRlcm5hbCBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYz01ODU9c3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfcG9vbF9hbGxvY19wYWdlX29yZGVyKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjEwLS8qIHNsb3cgcGF0aCAqL1xubmV0L2NvcmUvcGFnZV9wb29sLmM6NjExOnN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjEyLVx0XHRcdFx0XHRcdFx0ICBnZnBfdCBnZnApXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njc1PW5ldG1lbV9yZWYgcGFnZV9wb29sX2FsbG9jX25ldG1lbXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY4Ny1cdGVsc2Vcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY4ODpcdFx0bmV0bWVtID0gX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHBvb2wsIGdmcCk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02ODktXHRyZXR1cm4gbmV0bWVtO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCBFeHBvcnQgU3RhdHVzKioKCk9rYXksIHNvIEkgc2VlIGBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc2AgbWVudGlvbmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGV4cG9ydGVkPyYjMzQ7IEl0JiMzOTtzIGEga2V5IGRldGFpbCwgYmVjYXVzZSBpZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIHRoZW4gZXh0ZXJuYWwgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHNob3VsZG4mIzM5O3QgYmUgYWJsZSB0byBkaXJlY3RseSBjYWxsIGl0LiBJdOKAmXMgY3JpdGljYWwgZm9yIG1vZHVsYXJpdHkgYW5kIG1haW50YWluaW5nIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwsIHNvIHRoaXMgbmVlZHMgdmVyaWZpY2F0aW9uLiBUaW1lIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHN5bWJvbCBleHBvcnQgc3RhdHVzIOKAkyBJJiMzOTtsbCBwcm9iYWJseSBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9yIG1vZHVsZSBtYXAgaWYgSSBoYXZlIGFjY2VzcyB0byBpdCwgb3IgcG9zc2libHkgdXNlIGBubWAgb24gcmVsZXZhbnQgb2JqZWN0IGZpbGVzIHRvIGNvbmZpcm0uIFVuZGVyc3RhbmRpbmcgaXRzIGV4cG9ydCBzdGF0dXMgd2lsbCBkaWN0YXRlIGhvdyBpdCBpcyB1c2VkIGFuZCB3aGV0aGVyIGFueSBjaGFuZ2VzIGluIGl0cyB1c2UgYXJlIGFjdHVhbGx5IHZhbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BhZ2VfcG9vbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BhZ2VfcG9vbC5jPTU4NT1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fcGFnZV9wb29sX2FsbG9jX3BhZ2Vfb3JkZXIoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MTAtLyogc2xvdyBwYXRoICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MTE6c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MTItXHRcdFx0XHRcdFx0XHQgIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02NzQtICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2NzU6bmV0bWVtX3JlZiBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBnZnBfdCBnZnApXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02NzYte1xuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY4Ny1cdGVsc2Vcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY4ODpcdFx0bmV0bWVtID0gX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHBvb2wsIGdmcCk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02ODktXHRyZXR1cm4gbmV0bWVtO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkwLX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5MTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5MjpBTExPV19FUlJPUl9JTkpFQ1RJT04ocGFnZV9wb29sX2FsbG9jX25ldG1lbXMsIE5VTEwpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkzLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njk0PXN0cnVjdCBwYWdlICpwYWdlX3Bvb2xfYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjk1LXtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5NjpcdHJldHVybiBuZXRtZW1fdG9fcGFnZShwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyhwb29sLCBnZnApKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY5Ny19XG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTA2Nj1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEwODgtXHRpZiAoIW5ldG1lbSkge1xubmV0L2NvcmUvcGFnZV9wb29sLmM6MTA4OTpcdFx0bmV0bWVtID0gcGFnZV9wb29sX2FsbG9jX25ldG1lbXMocG9vbCwgZ2ZwKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEwOTAtXHRcdGlmICh1bmxpa2VseSghbmV0bWVtKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGhpcyBYQXJyYXkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGhvdyBgZ2ZwYCBmbGFncyBhcmUgaGFuZGxlZCBkdXJpbmcgWEFycmF5IGFsbG9jYXRpb24gd2l0aGluIHRoZSBwYWdlIHBvb2wuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBiaXR3aXNlIEFORCBvcGVyYXRpb24sIHN0cmlwcGluZyBvdXQgem9uZSBhbmQgcG9saWN5IGZsYWdzIHRoYXQgYXJlIHJlbGV2YW50IHRvICpwYWdlKiBhbGxvY2F0aW9uLCBidXQgbm90IHRvIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBYQXJyYXkgbm9kZSBpdHNlbGYuIFRoaXMgc2hvdWxkIHByZXZlbnQgcG90ZW50aWFsIGVycm9ycyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgZnJvbSBgeGFfYWxsb2NgLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGZpeC4gVGhlIGBwYWdlX3Bvb2xgIGlzIGEga2V5IHBhcnQgb2YgbmV0d29ya2luZyBkcml2ZXJzLCBzbyBhbnkgaW5zdGFiaWxpdHkgaGVyZSBjb3VsZCBoYXZlIGRvd25zdHJlYW0gaW1wbGljYXRpb25zLiBTaW5jZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBmaXhpbmcgYSBwb3RlbnRpYWwgYnVnLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nLgoKVGhlIG9yaWdpbmFsIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3RzLiBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgIGFuZCBgcGFnZV9wb29sX2FsbG9jX3BhZ2VzYCB3b3VsZCBiZSBvYnZpb3VzIGNob2ljZXMsIGJ1dCB0aGV5JiMzOTtyZSAqdmVyeSogZ2VuZXJpYyBhbmQgaGVhdmlseSB1c2VkLiBUaGlzIGNvdWxkIHNrZXcgdGhlIGZ1enppbmcuIFdlIG5lZWQgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoIGlmIHBvc3NpYmxlLgoKVGhlIG90aGVyIHN1Z2dlc3RlZCBmdW5jdGlvbiBgcGFnZV9wb29sX2NyZWF0ZWAgaXMgd29ydGggYSBsb29rLiBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgIGlzIHRoZSBob3QgcGF0aCwgYnV0IGlzIGl0IHRoZSAqb25seSogZW50cnkgcG9pbnQ/IE1heWJlIHdlIGNhbiBqdXN0IGdvIHdpdGggYFdvcnRoRnV6emluZz10cnVlYCBhbmQgbGVhdmUgaXQgYXQgdGhhdC4gSG93ZXZlciwgZXZlbiBpZiBnZW5lcmljLCBpdCBtaWdodCBiZSB0aGUgb25seSBlbnRyeSBwb2ludCwgc28gbGV0JiMzOTtzIGdvIHdpdGggYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCBhcyB0aGUgb25seSBzcGVjaWZpYyB0YXJnZXQgZnVuY3Rpb24uCgpMYXN0bHksIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBtYWtlIHRoaXMgcGF0Y2ggbW9yZSBvciBsZXNzIHJlbGV2YW50LiBJJiMzOTtkIGFzc3VtZSBgQ09ORklHX1BBR0VfUE9PTGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBwYXRjaCByZWxldmFudCBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIHN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXG4tLVxubmV0L0tjb25maWctNDkwLVxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcbm5ldC9LY29uZmlnLTQ5Mi1cdGJvb2xcbm5ldC9LY29uZmlnLTQ5My1cbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXG5uZXQvS2NvbmZpZy00OTUtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBQQUdFX1BPT0xgIFVzYWdlKioKCkFscmlnaHQsIHNvIGBQQUdFX1BPT0xgIGlzIGEgZHJpdmVyLXNlbGVjdGVkIGJvb2xlYW4g4oCTIHRoYXQmIzM5O3MgaW50cmlndWluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuIFRoZSBpbW1lZGlhdGUgY29uY2VybiBpcyB0byBzZWUgaWYgYW55IG90aGVyIGVudHJ5IHBvaW50cyBvciBmdW5jdGlvbnMgcmVmZXJlbmNlIHRoZSB2YXJpYWJsZS4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgY29uZmlndXJhdGlvbiB0aGF0IGNhbiBkZWVwbHkgaW1wYWN0IHRoZSBzeXN0ZW0uIFRvIHByb3Blcmx5IGFzc2VzcyB0aGlzIHZhcmlhYmxlLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBpcyB1c2VkLiBJJiMzOTtsbCBvcGVuIGBuZXQvY29yZS9wYWdlX3Bvb2wuY2AgYW5kIHN0YXJ0IGRpZ2dpbmcuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSBoaWRkZW4gaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYz04OD12b2lkIHBhZ2VfcG9vbF9nZXRfc3RhdHMoY29uc3Qgc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTEtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTEyOkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2dldF9zdGF0cyk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMTQ9dTggKnBhZ2VfcG9vbF9ldGh0b29sX3N0YXRzX2dldF9zdHJpbmdzKHU4ICpkYXRhKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyNC19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMjU6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXRfc3RyaW5ncyk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMjYtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjc9aW50IHBhZ2VfcG9vbF9ldGh0b29sX3N0YXRzX2dldF9jb3VudCh2b2lkKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMC19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMzE6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXRfY291bnQpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMTMyLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTMzPXU2NCAqcGFnZV9wb29sX2V0aHRvb2xfc3RhdHNfZ2V0KHU2NCAqZGF0YSwgY29uc3Qgdm9pZCAqc3RhdHMpXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTUwLX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjE1MTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9ldGh0b29sX3N0YXRzX2dldCk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xNTItXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MzQxPXBhZ2VfcG9vbF9jcmVhdGVfcGVyY3B1KGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zICpwYXJhbXMsIGludCBjcHVpZClcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0zNjYtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MzY3OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2NyZWF0ZV9wZXJjcHUpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMzY4LVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTM3Mz1zdHJ1Y3QgcGFnZV9wb29sICpwYWdlX3Bvb2xfY3JlYXRlKGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zICpwYXJhbXMpXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtMzc2LX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjM3NzpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9jcmVhdGUpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMzc4LVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTY3NT1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTAtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjkxOkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2FsbG9jX25ldG1lbXMpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkyLUFMTE9XX0VSUk9SX0lOSkVDVElPTihwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcywgTlVMTCk7XG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njk0PXN0cnVjdCBwYWdlICpwYWdlX3Bvb2xfYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY5Ny19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2OTg6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfYWxsb2NfcGFnZXMpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjk5LVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTkxMj12b2lkIHBhZ2VfcG9vbF9wdXRfdW5yZWZlZF9uZXRtZW0oc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgbmV0bWVtX3JlZiBuZXRtZW0sXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTI1LX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjkyNjpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9wdXRfdW5yZWZlZF9uZXRtZW0pO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtOTI3LVxubmV0L2NvcmUvcGFnZV9wb29sLmM9OTI4PXZvaWQgcGFnZV9wb29sX3B1dF91bnJlZmVkX3BhZ2Uoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTMzLX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjkzNDpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9wdXRfdW5yZWZlZF9wYWdlKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTkzNS1cbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz05ODM9dm9pZCBwYWdlX3Bvb2xfcHV0X25ldG1lbV9idWxrKG5ldG1lbV9yZWYgKmRhdGEsIHUzMiBjb3VudClcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMDMyLX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjEwMzM6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfcHV0X25ldG1lbV9idWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEwMzQtXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTA2Nj1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTExMDgtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTEwOTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbSk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTEwLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTExMT1zdHJ1Y3QgcGFnZSAqcGFnZV9wb29sX2FsbG9jX2ZyYWcoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50ICpvZmZzZXQsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTExNi19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMTE3OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2FsbG9jX2ZyYWcpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMTExOC1cbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjY3PXZvaWQgcGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTI3Ny19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMjc4OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyNzktXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjgwPXZvaWQgcGFnZV9wb29sX2Rpc2FibGVfZGlyZWN0X3JlY3ljbGluZyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyOTUtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTI5NjpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9kaXNhYmxlX2RpcmVjdF9yZWN5Y2xpbmcpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMTI5Ny1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTEyOTg9dm9pZCBwYWdlX3Bvb2xfZGVzdHJveShzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMTgtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTMxOTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9kZXN0cm95KTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMjAtXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTMyMj12b2lkIHBhZ2VfcG9vbF91cGRhdGVfbmlkKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIGludCBuZXdfbmlkKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMzQtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTMzNTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF91cGRhdGVfbmlkKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhZ2UgUG9vbCBBbGxvY2F0aW9uIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgZnVuY3Rpb24gaGVyZSwgKmBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCosIGlzIGNhbGxlZCBieSAqYHBhZ2VfcG9vbF9kbWFfbWFwYCosIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgYnkgKmBfX3BhZ2VfcG9vbF9hbGxvY19wYWdlX29yZGVyYCogYW5kICpgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93YCouIFRob3NlIHR3byBhcmUgdGhlbiBjYWxsZWQgYnkgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMsICpgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgKiBhbmQgKmBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW1gKi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBpbXBvcnRhbnQgZm9yIGZ1enppbmcuCgpOb3csICpgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgKiBhbmQgKmBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW1gKiBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHRlbGwgbWUgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyBpbiBgRm9jdXNTeW1ib2xzYCB0byBwcmV2ZW50IHRoZSBmdXp6aW5nIGRpc3RyaWJ1dGlvbiBmcm9tIGJlY29taW5nIHNrZXdlZC4gU28sIEkgbmVlZCB0byBsb29rIGRlZXBlci4gKmBwYWdlX3Bvb2xfY3JlYXRlYCogc2VlbXMgdW5yZWxhdGVkIHRvIHRoZSBjb3JlIGFsbG9jYXRpb24gZmxvdywgc28gSSYjMzk7bSBub3QgZ29pbmcgdG8gYm90aGVyIHdpdGggaXQuCgpJIGRpZCBhIHF1aWNrIHJldmlldywgYW5kIGl0IGxvb2tzIGxpa2UgKmBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc2AqIGFuZCAqYHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbWAqIGFyZSB0aGUgb25seSBlbnRyeSBwb2ludHMgdG8gdGhpcyBjb2RlLCBhbmQgYXJlIGJvdGggaG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIG1lYW5zLCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIHN1Z2dlc3QsIHRoYXQgSSBzaG91bGQgbGVhdmUgYEZvY3VzU3ltYm9sc2AgYXMgYW4gZW1wdHkgbGlzdCBhbmQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBQQUdFX1BPT0xgIGlzIGEgdmVyeSBjb21tb24gc2V0dGluZywgd2hpY2ggZG9lc24mIzM5O3QgbmFycm93IGFueXRoaW5nIGRvd24uIElzIHRoZXJlIGEgc3BlY2lmaWMgY29uZmlnIGZvciBgUFBfRE1BX0lOREVYX0JJVFNgLCBwZXJoYXBzPyBObyBzdWNoIGNvbmZpZyBpcyBsaXN0ZWQuIExvb2tzIGxpa2UgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBxdWl0ZSBnZW5lcmljLiBTbywgeWVzLCBlbXB0eSBgRm9jdXNTeW1ib2xzYCBhbmQgYFdvcnRoRnV6emluZz10cnVlYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFBfRE1BX0lOREVYX0JJVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYz00Nzg9c3RhdGljIGludCBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDgzLVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NDg0Olx0aWYgKHVubGlrZWx5KCFQUF9ETUFfSU5ERVhfQklUUykpXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy00ODUtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTUxMD1zdGF0aWMgdm9pZCBfX3BhZ2VfcG9vbF91bm1hcF9uZXRtZW1fZG1hKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTI1LVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NTI2Olx0aWYgKGxpa2VseShQUF9ETUFfSU5ERVhfQklUUykpIHtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTUyNy1cdFx0aWQgPSBuZXRtZW1fZ2V0X2RtYV9pbmRleChuZXRtZW0pO1xuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTc0Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19wYWdlX3Bvb2xfcmVsZWFzZV9uZXRtZW1fZG1hKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNzU2LVx0cGFnZV9wb29sX3NldF9kbWFfYWRkcl9uZXRtZW0obmV0bWVtLCAwKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjc1NzpcdGlmIChsaWtlbHkoUFBfRE1BX0lOREVYX0JJVFMpKVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNzU4LVx0XHRuZXRtZW1fc2V0X2RtYV9pbmRleChuZXRtZW0sIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzA2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoYXNpbmcgRG93biBhIERlZmluaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBoaXQgYSBzbmFnLiBJIHNlZSBgUFBfRE1BX0lOREVYX0JJVFNgIG1lbnRpb25lZCwgYnV0IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBjbGVhciB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBUaGlzIGlzIGEgY29tbW9uIHNpdHVhdGlvbiwgcmlnaHQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdGhlIHZhbHVlIG9mIHRoaXMgbWFjcm8sIGJlY2F1c2UgSSBjYW4mIzM5O3QgdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgZnVuY3Rpb24gdW50aWwgSSBrbm93IHdoYXQgYFBQX0RNQV9JTkRFWF9CSVRTYCAqbWVhbnMqLiBJcyBpdCBpbiBhIGhlYWRlciBmaWxlIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQ/IElzIGl0IGEgY29tcGlsZS10aW1lIGNvbnN0YW50IGRlZmluZWQgaW4gYSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24/IE9yIHBlcmhhcHMgaXQgaXMgZHluYW1pY2FsbHkgZ2VuZXJhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgc2xldXRoaW5nIHRvIHRyYWNrIGl0IGRvd24uIFRpbWUgdG8gc3RhcnQgc2VhcmNoaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgUFBfRE1BX0lOREVYX0JJVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oPTUxODk9aW50IGFyY2hfbG9ja19zaGFkb3dfc3RhY2tfc3RhdHVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgdW5zaWduZWQgbG9uZyBzdGF0dXMpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC01MjE4LSAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjUyMTk6I2RlZmluZSBQUF9ETUFfSU5ERVhfQklUUyBNSU4oMzIsIF9fZmZzKFBPSVNPTl9QT0lOVEVSX0RFTFRBKSAtIFBQX0RNQV9JTkRFWF9TSElGVClcbmluY2x1ZGUvbGludXgvbW0uaC01MjIwLSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTUyMjItI2RlZmluZSBQUF9ETUFfSU5ERVhfTUlOX09GRlNFVCAoMSBcdTAwM2NcdTAwM2MgKFBQX0RNQV9JTkRFWF9TSElGVCAmIzQzOyA4KSlcbmluY2x1ZGUvbGludXgvbW0uaDo1MjIzOiNkZWZpbmUgUFBfRE1BX0lOREVYX0JJVFMgKChfX2J1aWx0aW5fY29uc3RhbnRfcChQQUdFX09GRlNFVCkgXHUwMDI2XHUwMDI2IFxcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIyNC1cdFx0XHQgICAgUEFHRV9PRkZTRVQgXHUwMDNlPSBQUF9ETUFfSU5ERVhfTUlOX09GRlNFVCBcdTAwMjZcdTAwMjYgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYWdlIFBvb2wgRml4KioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgaW5jbHVkZS9saW51eC9tbS5oYCBoZWFkZXIuIFRoZSBjaGFuZ2UgaXMgYWltZWQgYXQgY29ycmVjdGluZyBzb21lIGBnZnBgIGZsYWcgaGFuZGxpbmcsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhbnkgZml4IGluIHRoaXMgYXJlYSBpcyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHdpdGggYSBmZWF0dXJlIGxpa2UgdGhlIGBQQUdFX1BPT0xgLgoKTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHdhcnJhbnRzIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlcyBvciByZWdyZXNzaW9ucy4gRnJvbSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciBhbnkgb2JzY3VyZSBjb25maWdzIGFyZSBuZWNlc3NhcnkgYmV5b25kIHRoZSBvYnZpb3VzIGBQQUdFX1BPT0xgIG9wdGlvbi4gVGhlIGZhY3QgdGhhdCBuZXR3b3JraW5nIGRyaXZlcnMgaW1wbGljaXRseSBlbmFibGUgYFBBR0VfUE9PTGAgbWFrZXMgaXQgYSBtb3JlIGludGVyZXN0aW5nIHRhcmdldCwgYXMgaXQmIzM5O3MgbGlrZWx5IHRvIGJlIGV4ZXJjaXNlZCBmcmVxdWVudGx5IGluIGEgc3RhbmRhcmQgc3lzdGVtLgoKVG8gZW5zdXJlIHByb3BlciBjb3ZlcmFnZSBpbiBteSBmdXp6aW5nIHNldHVwLCBJJiMzOTtsbCBhZGQgYFBBR0VfUE9PTGAgdG8gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgUEFHRV9QT09MYCBpcywgaW4gZmFjdCwgYSB2YWxpZCBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGlzIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xuLS1cbm5ldC9LY29uZmlnLTQ5MC1cbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXG5uZXQvS2NvbmZpZy00OTItXHRib29sXG5uZXQvS2NvbmZpZy00OTMtXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xubmV0L0tjb25maWctNDk1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjA2CgkJCQkJCQlvdXRwdXQ6IDExMQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBgUEFHRV9QT09MYCBpcyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGdvdCBpdC4gTGV0IG1lIHNvbGlkaWZ5IG15IHJlc3BvbnNlLgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcuIFRoZXJlIGFyZW4mIzM5O3QgYW55IHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24sIGFzIGluZGljYXRlZCBieSB0aGUgZW1wdHkgYEZvY3VzU3ltYm9sczogW11gLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFsbCBhYm91dCB0aG9zZSBob3QtcGF0aCBmdW5jdGlvbnMsIGxpa2UgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCwgdGhlIHVzdWFsIHN1c3BlY3RzLiBUaGlzIG1ha2VzIHNlbnNlLgoKVGhlIGBFbmFibGVDb25maWdzOiBbJiMzNDtQQUdFX1BPT0wmIzM0O11gIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyB0aGUgY29uZmlnIHRvIGZvY3VzIG9uIGR1cmluZyBidWlsZC90ZXN0aW5nLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgLiBUaGUgZ29hbCBpcyB0byBjbGVhciBzcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgZnJvbSBgZ2ZwYCBiZWZvcmUgY2FsbGluZyBgeGFfYWxsb2NgIG9yIGB4YV9hbGxvY19iaGAuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUgcmVhbGx5LCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljLiBJdCBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBmb3IgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgdGhlIG1pc3VzZSBvZiBtZW1vcnkgem9uZXMuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIHR5cGljYWwgYWxsb2NhdGlvbiBwYXRocyB3aXRoaW4gdGhlIHBhZ2UgcG9vbC4KClNvdW5kcyBsaWtlIGEgc29saWQgY2hhbmdlLCB3aXRoIHBvdGVudGlhbCBmb3Igc2VyaW91cyBpbXBhY3QgaWYgaXQgaXNuJiMzOTt0IGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIHRvIGNsZWFyIHNwZWNpZmljIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gYGdmcGAgYmVmb3JlIGNhbGxpbmcgYHhhX2FsbG9jYCBvciBgeGFfYWxsb2NfYmhgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBwYWdlIHBvb2wgbG9naWMgdGhhdCBwcmV2ZW50cyBYQXJyYXkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbmNvcnJlY3Qgem9uZSB1c2FnZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBwYWdlIHBvb2wgYWxsb2NhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdGUCBmbGFncyB1c2VkIGZvciBYQXJyYXkgYWxsb2NhdGlvbnMgaW4gYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGJ5IHN0cmlwcGluZyBvdXQgZGV2aWNlLXNwZWNpZmljIHpvbmUgYW5kIHBvbGljeSBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYF9fR0ZQX0NPTVBgKS4gVGhpcyBwcmV2ZW50cyBYQXJyYXkgbm9kZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZnJvbSByZXN0cmljdGVkIG1lbW9yeSB6b25lcyBsaWtlIERNQS4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbnZhbGlkIGFjY2Vzc2VzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNGJlZWYyMDg0OTFkZDg0MDExODVmMjA5Mzg4MTAzYWQzNmViMzUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTc6NDY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wYWdlX3Bvb2wuYyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jCmluZGV4IDUwZWU1NTBmZWY3M2EuLjhmODk1NmZiMDYxYmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jCkBAIC00ODQsNiAmIzQzOzQ4NCwxMyBAQCBzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwKIAlpZiAodW5saWtlbHkoIVBQX0RNQV9JTkRFWF9CSVRTKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogRHJpdmVycyByZXF1ZXN0IEdGUCBmbGFncyBhY2NvcmRpbmcgdG8gYm90aCB0aGUgY3VycmVudCBjb250ZXh0IGFuZAomIzQzOwkgKiB0aGUgZGV2aWNlIGNvbnN0cmFpbnRzLCBidXQgdGhlIFhBcnJheSBlbnRyeSBpdHNlbGYgaXMgYnkgbm8gbWVhbgomIzQzOwkgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy4KJiM0MzsJICovCiYjNDM7CWdmcCAmYW1wOz0gfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9DT01QKTsKJiM0MzsKIAlpZiAoaW5fc29mdGlycSgpKQogCQllcnIgPSB4YV9hbGxvYygmYW1wO3Bvb2wtJmd0O2RtYV9tYXBwZWQsICZhbXA7aWQsIG5ldG1lbV90b19wYWdlKG5ldG1lbSksCiAJCQkgICAgICAgUFBfRE1BX0lOREVYX0xJTUlULCBnZnApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MwoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiA0ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBETUEgSW5kZXggUmVnaXN0cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgd2l0aGluIGBuZXQvY29yZS9wYWdlX3Bvb2wuY2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJlYWxseS4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIGhvdyB0aGUgYGdmcGAgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQgd2hlbiBhbGxvY2F0aW5nIHRoZSBYQXJyYXkgZW50cmllcy4gVGhleSYjMzk7cmUgcmVtb3ZpbmcgYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYW5kIGBfX0dGUF9DT01QYCBmcm9tIHRoZSBgZ2ZwYCBmbGFncyBwYXNzZWQgdG8gYHhhX2FsbG9jYCBvciBgeGFfYWxsb2NfYmhgLgoKVGhlIHJhdGlvbmFsZSBzZWVtcyBzb3VuZDogdGhlc2UgZGV2aWNlLXNwZWNpZmljIGZsYWdzIHNob3VsZG4mIzM5O3QgYmUgaW5mbHVlbmNpbmcgdGhlIGFsbG9jYXRpb24gb2YgdGhlIFhBcnJheSBlbnRyaWVzIHRoZW1zZWx2ZXMsIHNpbmNlIHRoZSBYQXJyYXkgaXMgbm90IGRpcmVjdGx5IHVzZWQgYnkgdGhlIGRldmljZS4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgbWFraW5nIHN1cmUgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IgYWxpZ25zIHdpdGggdGhlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBUaGlzIGNoYW5nZSBjb3VsZCBwcmV2ZW50IGZhaWx1cmVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIGZyb20gdGhlIGB4YV9hbGxvY2AgZnVuY3Rpb25zIGlmIGdpdmVuIGZsYWdzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSB0aGF0IHNob3VsZG4mIzM5O3QgYXBwbHkgdG8gdGhlIFhBcnJheS4KCkkmIzM5O3ZlIHNjYW5uZWQgdGhlIGNvZGUgc25pcHBldCwgYW5kIEkgY2FuJiMzOTt0IHNlZSBhbnkgb2J2aW91cyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIEl0JiMzOTtzIGp1c3QgbW9kaWZ5aW5nIGFsbG9jYXRpb24gZmxhZ3MsIHdoaWNoIHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IHNhZmUgb3BlcmF0aW9uLiBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhlcmUmIzM5O3Mgbm8gZGF0YSBsZWFrYWdlIG9yIGFueSBvdGhlciBwb3RlbnRpYWwgc2VjdXJpdHkgY29uY2VybnMgaGVyZS4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBmb3IgdGhpcywgc28gSSYjMzk7bGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC4gSXQgc2VlbXMgbGlrZSBhIGNsZWFuLCBmb2N1c2VkIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdGUCBmbGFncyB1c2VkIGZvciBYQXJyYXkgYWxsb2NhdGlvbnMgaW4gYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGJ5IHN0cmlwcGluZyBvdXQgZGV2aWNlLXNwZWNpZmljIHpvbmUgYW5kIHBvbGljeSBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYF9fR0ZQX0NPTVBgKS4gVGhpcyBwcmV2ZW50cyBYQXJyYXkgbm9kZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZnJvbSByZXN0cmljdGVkIG1lbW9yeSB6b25lcyBsaWtlIERNQS4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbnZhbGlkIGFjY2Vzc2VzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdGUCBmbGFncyB1c2VkIGZvciBYQXJyYXkgYWxsb2NhdGlvbnMgaW4gYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGJ5IHN0cmlwcGluZyBvdXQgZGV2aWNlLXNwZWNpZmljIHpvbmUgYW5kIHBvbGljeSBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYF9fR0ZQX0NPTVBgKS4gVGhpcyBwcmV2ZW50cyBYQXJyYXkgbm9kZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZnJvbSByZXN0cmljdGVkIG1lbW9yeSB6b25lcyBsaWtlIERNQS4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbnZhbGlkIGFjY2Vzc2VzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NjowMi41Njk3MzE0OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ0ODkyODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgR0ZQIGZsYWdzIHVzZWQgZm9yIFhBcnJheSBhbGxvY2F0aW9ucyBpbiBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgYnkgc3RyaXBwaW5nIG91dCBkZXZpY2Utc3BlY2lmaWMgem9uZSBhbmQgcG9saWN5IGZsYWdzIChgX19HRlBfRE1BYCwgYF9fR0ZQX0RNQTMyYCwgYF9fR0ZQX0hJR0hNRU1gLCBgX19HRlBfQ09NUGApLiBUaGlzIHByZXZlbnRzIFhBcnJheSBub2RlcyBmcm9tIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHJlc3RyaWN0ZWQgbWVtb3J5IHpvbmVzIGxpa2UgRE1BLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIG9yIGludmFsaWQgYWNjZXNzZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIHRvIGNsZWFyIHNwZWNpZmljIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gYGdmcGAgYmVmb3JlIGNhbGxpbmcgYHhhX2FsbG9jYCBvciBgeGFfYWxsb2NfYmhgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBwYWdlIHBvb2wgbG9naWMgdGhhdCBwcmV2ZW50cyBYQXJyYXkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbmNvcnJlY3Qgem9uZSB1c2FnZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBwYWdlIHBvb2wgYWxsb2NhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MDIuNTY5NzM2MjczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3Njg5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNGJlZWYyMDg0OTFkZDg0MDExODVmMjA5Mzg4MTAzYWQzNmViMzUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDE3OjQ2OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jIGIvbmV0L2NvcmUvcGFnZV9wb29sLmNcXG5pbmRleCA1MGVlNTUwZmVmNzNhLi44Zjg5NTZmYjA2MWJlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jXFxuKysrIGIvbmV0L2NvcmUvcGFnZV9wb29sLmNcXG5AQCAtNDg0LDYgKzQ4NCwxMyBAQCBzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4gXFx0aWYgKHVubGlrZWx5KCFQUF9ETUFfSU5ERVhfQklUUykpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogRHJpdmVycyByZXF1ZXN0IEdGUCBmbGFncyBhY2NvcmRpbmcgdG8gYm90aCB0aGUgY3VycmVudCBjb250ZXh0IGFuZFxcbitcXHQgKiB0aGUgZGV2aWNlIGNvbnN0cmFpbnRzLCBidXQgdGhlIFhBcnJheSBlbnRyeSBpdHNlbGYgaXMgYnkgbm8gbWVhblxcbitcXHQgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy5cXG4rXFx0ICovXFxuK1xcdGdmcCBcXHUwMDI2PSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX0NPTVApO1xcbitcXG4gXFx0aWYgKGluX3NvZnRpcnEoKSlcXG4gXFx0XFx0ZXJyID0geGFfYWxsb2MoXFx1MDAyNnBvb2wtXFx1MDAzZWRtYV9tYXBwZWQsIFxcdTAwMjZpZCwgbmV0bWVtX3RvX3BhZ2UobmV0bWVtKSxcXG4gXFx0XFx0XFx0ICAgICAgIFBQX0RNQV9JTkRFWF9MSU1JVCwgZ2ZwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MDMuMDIwMzk0MjQ4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjU1OTk1Nzc2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0YmVlZjIwODQ5MWRkODQwMTE4NWYyMDkzODgxMDNhZDM2ZWIzNTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNzo0NjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jIGIvbmV0L2NvcmUvcGFnZV9wb29sLmNcbmluZGV4IDUwZWU1NTBmZWY3M2EuLjhmODk1NmZiMDYxYmUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wYWdlX3Bvb2wuY1xuKysrIGIvbmV0L2NvcmUvcGFnZV9wb29sLmNcbkBAIC00ODQsNiArNDg0LDEzIEBAIHN0YXRpYyBpbnQgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuIFx0aWYgKHVubGlrZWx5KCFQUF9ETUFfSU5ERVhfQklUUykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIERyaXZlcnMgcmVxdWVzdCBHRlAgZmxhZ3MgYWNjb3JkaW5nIHRvIGJvdGggdGhlIGN1cnJlbnQgY29udGV4dCBhbmRcbitcdCAqIHRoZSBkZXZpY2UgY29uc3RyYWludHMsIGJ1dCB0aGUgWEFycmF5IGVudHJ5IGl0c2VsZiBpcyBieSBubyBtZWFuXG4rXHQgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy5cbitcdCAqL1xuK1x0Z2ZwIFx1MDAyNj0gfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9DT01QKTtcbitcbiBcdGlmIChpbl9zb2Z0aXJxKCkpXG4gXHRcdGVyciA9IHhhX2FsbG9jKFx1MDAyNnBvb2wtXHUwMDNlZG1hX21hcHBlZCwgXHUwMDI2aWQsIG5ldG1lbV90b19wYWdlKG5ldG1lbSksXG4gXHRcdFx0ICAgICAgIFBQX0RNQV9JTkRFWF9MSU1JVCwgZ2ZwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjAzLjAyMDM5NTgxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDk2NTAyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIFBvb2wgRE1BIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvcGFnZV9wb29sLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgbWVzc2luZyB3aXRoIHRoZSBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBoZXJlIGludm9sdmVzIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBETUEgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIGlzIHJlbW92aW5nIGEgc2VyaWVzIG9mIGZsYWdzIChgX19HRlBfRE1BYCwgYF9fR0ZQX0RNQTMyYCwgYF9fR0ZQX0hJR0hNRU1gLCBhbmQgYF9fR0ZQX0NPTVBgKSBmcm9tIHRoZSBgZ2ZwYCBhbGxvY2F0aW9uIGZsYWdzICpiZWZvcmUqIHRoZSBjYWxsIHRvIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgYmVpbmcgbWFkZS4gV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIHJlc3RyaWN0aW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpbiB0aGlzIG1hbm5lcj8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbnN0cmFpbnQgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGhlcmU/IFRoZSByZW1vdmFsIG9mIGBfX0dGUF9ETUFgIGFuZCBgX19HRlBfRE1BMzJgIGlzIHRoZSBtb3N0IGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzaW5jZSB0aG9zZSBmbGFncyBkaXJlY3RseSByZWxhdGUgdG8gRE1BLWFibGUgbWVtb3J5IHJlZ2lvbnMuICBJcyB0aGUgZ29hbCB0byBmb3JjZSBhbGxvY2F0aW9uIHdpdGhpbiBhIG5hcnJvd2VyIG1lbW9yeSB3aW5kb3c/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGluY3JlYXNlZCBsYXRlbmN5IGlmIHRoaXMgcmVzdHJpY3RzIHRoZSBtZW1vcnkgcG9vbCB0b28gbXVjaD9cblxuSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhlIGB4YV9hbGxvY2AgYW5kIGB4YV9hbGxvY19iaGAgY2FsbHMgdG8gc2VlIGhvdyBgZ2ZwYCBpcyB1c2VkIHdpdGhpbiB0aGF0IGNvbnRleHQsIGFuZCB3aGF0IHNpZGUgZWZmZWN0cyB0aGlzIG1pZ2h0IGludHJvZHVjZS4gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBpbXBhY3RzIG9uIERNQSB0cmFuc2ZlcnMgaWYgd2UgbGltaXQgdGhlIGF2YWlsYWJsZSBtZW1vcnkgcmVnaW9ucz8gVGhpcyBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpbiBoaWdoLXRocm91Z2hwdXQgbmV0d29yayBzY2VuYXJpb3MuIEnigJlsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyB0aHJvdWdoIHRoZSBwYWdlIHBvb2wgY29kZSBhbmQgdGhlbiBpbnRvIHRoZSBuZXR3b3JrIHN0YWNrIGl0c2VsZiB0byBlbnN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgY2F1c2luZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjA5LjU3MDA0OTA2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM1NDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTQ2ND1wYWdlX3Bvb2xfZG1hX3N5bmNfZm9yX2RldmljZShjb25zdCBzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDc3LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjQ3ODpzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy00NzktXFx0XFx0XFx0XFx0XFx0bmV0bWVtX3JlZiBuZXRtZW0sIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTU0Nj1zdGF0aWMgYm9vbCBwYWdlX3Bvb2xfZG1hX21hcChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTY3LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjU2ODpcXHRlcnIgPSBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4KHBvb2wsIG5ldG1lbSwgZ2ZwKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy01NjktXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MDkuNjE1NDA4NDQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg4NjMyMTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBETUEgTWFwcGluZyB3aXRoaW4gdGhlIFBhZ2UgUG9vbCoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHBhZ2VfcG9vbF9kbWFfbWFwYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYHBhZ2VfcG9vbF9kbWFfbWFwYC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIERNQSBtYXBwaW5nIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyByZWdpc3RyYXRpb24gaXMgaGFwcGVuaW5nLiBLbm93aW5nIHdoZXJlIGBwYWdlX3Bvb2xfZG1hX21hcGAgaXMgdXRpbGl6ZWQgd2lsbCBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIG9mIHJlZ2lzdGVyaW5nIHRoYXQgRE1BIGluZGV4LCB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCBzdHJhdGVneSBhbmQgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgZGVzaWduLiBVbmRlcnN0YW5kaW5nIHRoZSB1c2FnZSBjb250ZXh0IHdpbGwgY2xhcmlmeSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGFuZCByZXNvdXJjZSBjb250ZW50aW9uIHNjZW5hcmlvcy4gV2l0aG91dCB0aGF0IGNvbnRleHQsIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBqdXN0IGEgZGF0YSBwb2ludCwgYnV0IHdpdGggaXQsIGl0J3MgYSB2aXRhbCBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MTcuNTAxNzMyMTY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjQ5Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfcG9vbF9kbWFfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTUxMD1zdGF0aWMgdm9pZCBfX3BhZ2VfcG9vbF91bm1hcF9uZXRtZW1fZG1hKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy01NDUtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NTQ2OnN0YXRpYyBib29sIHBhZ2VfcG9vbF9kbWFfbWFwKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIG5ldG1lbV9yZWYgbmV0bWVtLCBnZnBfdCBnZnApXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTQ3LXtcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTU4NT1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fcGFnZV9wb29sX2FsbG9jX3BhZ2Vfb3JkZXIoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTU5NC1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo1OTU6XFx0aWYgKHBvb2wtXFx1MDAzZWRtYV9tYXAgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIXBhZ2VfcG9vbF9kbWFfbWFwKHBvb2wsIHBhZ2VfdG9fbmV0bWVtKHBhZ2UpLCBnZnApKSkge1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTU5Ni1cXHRcXHRwdXRfcGFnZShwYWdlKTtcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY0Ni1cXHRcXHRuZXRtZW0gPSBwb29sLVxcdTAwM2VhbGxvYy5jYWNoZVtpXTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2NDc6XFx0XFx0aWYgKGRtYV9tYXAgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIXBhZ2VfcG9vbF9kbWFfbWFwKHBvb2wsIG5ldG1lbSwgZ2ZwKSkpIHtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02NDgtXFx0XFx0XFx0cHV0X3BhZ2UobmV0bWVtX3RvX3BhZ2UobmV0bWVtKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjE3LjU0OTM4NjY1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjczMTE2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIFBvb2wgQWxsb2NhdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhZ2UgcG9vbCBhbGxvY2F0aW9uIGxvZ2ljLiBTZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlaXIgYWNjZXNzaWJpbGl0eS4gTGV0J3Mgc2VlLi4uIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCAtIHRoYXQncyBzdGF0aWMsIGdvb2QgdG8ga25vdy4gQW5kIGBwYWdlX3Bvb2xfZG1hX21hcGAsIGFsc28gc3RhdGljLiBBbHJpZ2h0LCB0aGF0IHRlbGxzIG1lIHNvbWV0aGluZyBhYm91dCBpdHMgdXNlIHdpdGhpbiB0aGUgbW9kdWxlLiAgYF9fcGFnZV9wb29sX2FsbG9jX3BhZ2Vfb3JkZXJgIGlzIHN0YXRpYyBhcyB3ZWxsLCBhbmQgZmluYWxseSwgYF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvd2AsIHllcCwgYWxzbyBzdGF0aWMuIE5vdywgd2hhdCBhcmUgdGhlIGZ1bmN0aW9ucyAqZXhwb3J0ZWQqPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlbS4gSSBzZWUgYHBhZ2VfcG9vbF9hbGxvY19wYWdlc2AgYW5kIGBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtYC4gUmlnaHQsIHRoZXNlIGFyZSB0aGUgZXhwb3NlZCBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZXJmYWNlcyBpbnRlcmFjdCB3aXRoIHRoZXNlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbWFwIHRoZSBpbnRlcm5hbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXh0ZXJuYWwgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MjEuODc2NzAwNzAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTAyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wYWdlX3Bvb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wYWdlX3Bvb2wuYz01ODU9c3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfcG9vbF9hbGxvY19wYWdlX29yZGVyKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MTAtLyogc2xvdyBwYXRoICovXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjExOnN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYxMi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTY3NT1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY4Ny1cXHRlbHNlXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Njg4OlxcdFxcdG5ldG1lbSA9IF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhwb29sLCBnZnApO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY4OS1cXHRyZXR1cm4gbmV0bWVtO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NjoyMS45MjYyMDk3ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzc0ODYxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCBFeHBvcnQgU3RhdHVzKipcblxuT2theSwgc28gSSBzZWUgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCBtZW50aW9uZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgZXhwb3J0ZWQ/XCIgSXQncyBhIGtleSBkZXRhaWwsIGJlY2F1c2UgaWYgaXQncyBub3QgZXhwb3J0ZWQsIHRoZW4gZXh0ZXJuYWwgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHNob3VsZG4ndCBiZSBhYmxlIHRvIGRpcmVjdGx5IGNhbGwgaXQuIEl04oCZcyBjcml0aWNhbCBmb3IgbW9kdWxhcml0eSBhbmQgbWFpbnRhaW5pbmcgZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBuZWVkcyB2ZXJpZmljYXRpb24uIFRpbWUgdG8gcXVpY2tseSBjaGVjayB0aGUgc3ltYm9sIGV4cG9ydCBzdGF0dXMg4oCTIEknbGwgcHJvYmFibHkgbG9vayBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvciBtb2R1bGUgbWFwIGlmIEkgaGF2ZSBhY2Nlc3MgdG8gaXQsIG9yIHBvc3NpYmx5IHVzZSBgbm1gIG9uIHJlbGV2YW50IG9iamVjdCBmaWxlcyB0byBjb25maXJtLiBVbmRlcnN0YW5kaW5nIGl0cyBleHBvcnQgc3RhdHVzIHdpbGwgZGljdGF0ZSBob3cgaXQgaXMgdXNlZCBhbmQgd2hldGhlciBhbnkgY2hhbmdlcyBpbiBpdHMgdXNlIGFyZSBhY3R1YWxseSB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjI5LjMwMTA3NDA0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNDMzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9wb29sX2FsbG9jX25ldG1lbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGFnZV9wb29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGFnZV9wb29sLmM9NTg1PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19wYWdlX3Bvb2xfYWxsb2NfcGFnZV9vcmRlcihzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjEwLS8qIHNsb3cgcGF0aCAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYxMTpzdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MTItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBnZnBfdCBnZnApXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02NzQtICovXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Njc1Om5ldG1lbV9yZWYgcGFnZV9wb29sX2FsbG9jX25ldG1lbXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY3Ni17XFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02ODctXFx0ZWxzZVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY4ODpcXHRcXHRuZXRtZW0gPSBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3cocG9vbCwgZ2ZwKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02ODktXFx0cmV0dXJuIG5ldG1lbTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTAtfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5MTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2OTI6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zLCBOVUxMKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njk0PXN0cnVjdCBwYWdlICpwYWdlX3Bvb2xfYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY5NS17XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Njk2OlxcdHJldHVybiBuZXRtZW1fdG9fcGFnZShwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyhwb29sLCBnZnApKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTctfVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTA2Nj1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTA4OC1cXHRpZiAoIW5ldG1lbSkge1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjEwODk6XFx0XFx0bmV0bWVtID0gcGFnZV9wb29sX2FsbG9jX25ldG1lbXMocG9vbCwgZ2ZwKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMDkwLVxcdFxcdGlmICh1bmxpa2VseSghbmV0bWVtKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NjoyOS4zNDYxMjIwNjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQwNDA4NDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRoaXMgWEFycmF5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAuIEVzc2VudGlhbGx5LCBpdCdzIG1vZGlmeWluZyBob3cgYGdmcGAgZmxhZ3MgYXJlIGhhbmRsZWQgZHVyaW5nIFhBcnJheSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgcGFnZSBwb29sLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoaXMgYml0d2lzZSBBTkQgb3BlcmF0aW9uLCBzdHJpcHBpbmcgb3V0IHpvbmUgYW5kIHBvbGljeSBmbGFncyB0aGF0IGFyZSByZWxldmFudCB0byAqcGFnZSogYWxsb2NhdGlvbiwgYnV0IG5vdCB0byB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgWEFycmF5IG5vZGUgaXRzZWxmLiBUaGlzIHNob3VsZCBwcmV2ZW50IHBvdGVudGlhbCBlcnJvcnMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGZyb20gYHhhX2FsbG9jYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0J3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgZml4LiBUaGUgYHBhZ2VfcG9vbGAgaXMgYSBrZXkgcGFydCBvZiBuZXR3b3JraW5nIGRyaXZlcnMsIHNvIGFueSBpbnN0YWJpbGl0eSBoZXJlIGNvdWxkIGhhdmUgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnMuIFNpbmNlIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZml4aW5nIGEgcG90ZW50aWFsIGJ1ZywgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nLlxuXG5UaGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBza2V3ZWQgdGVzdHMuIGBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc2AgYW5kIGBwYWdlX3Bvb2xfYWxsb2NfcGFnZXNgIHdvdWxkIGJlIG9idmlvdXMgY2hvaWNlcywgYnV0IHRoZXkncmUgKnZlcnkqIGdlbmVyaWMgYW5kIGhlYXZpbHkgdXNlZC4gVGhpcyBjb3VsZCBza2V3IHRoZSBmdXp6aW5nLiBXZSBuZWVkIGEgbW9yZSB0YXJnZXRlZCBhcHByb2FjaCBpZiBwb3NzaWJsZS5cblxuVGhlIG90aGVyIHN1Z2dlc3RlZCBmdW5jdGlvbiBgcGFnZV9wb29sX2NyZWF0ZWAgaXMgd29ydGggYSBsb29rLiBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgIGlzIHRoZSBob3QgcGF0aCwgYnV0IGlzIGl0IHRoZSAqb25seSogZW50cnkgcG9pbnQ/IE1heWJlIHdlIGNhbiBqdXN0IGdvIHdpdGggYFdvcnRoRnV6emluZz10cnVlYCBhbmQgbGVhdmUgaXQgYXQgdGhhdC4gSG93ZXZlciwgZXZlbiBpZiBnZW5lcmljLCBpdCBtaWdodCBiZSB0aGUgb25seSBlbnRyeSBwb2ludCwgc28gbGV0J3MgZ28gd2l0aCBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgIGFzIHRoZSBvbmx5IHNwZWNpZmljIHRhcmdldCBmdW5jdGlvbi5cblxuTGFzdGx5LCBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBtYWtlIHRoaXMgcGF0Y2ggbW9yZSBvciBsZXNzIHJlbGV2YW50LiBJJ2QgYXNzdW1lIGBDT05GSUdfUEFHRV9QT09MYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnMsIHdoaWNoIHdvdWxkIG1ha2UgdGhlIHBhdGNoIHJlbGV2YW50IGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2Ygc3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NjozOC43NTAyMDg3MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA4Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xcbi0tXFxubmV0L0tjb25maWctNDkwLVxcbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXFxubmV0L0tjb25maWctNDkyLVxcdGJvb2xcXG5uZXQvS2NvbmZpZy00OTMtXFxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcXG5uZXQvS2NvbmZpZy00OTUtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjM4Ljc5OTQyMjUyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ4MTI1NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBQQUdFX1BPT0xgIFVzYWdlKipcblxuQWxyaWdodCwgc28gYFBBR0VfUE9PTGAgaXMgYSBkcml2ZXItc2VsZWN0ZWQgYm9vbGVhbiDigJMgdGhhdCdzIGludHJpZ3VpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdG8gc2VlIGlmIGFueSBvdGhlciBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIHJlZmVyZW5jZSB0aGUgdmFyaWFibGUuIEl0J3MgYSBrZXkgcGllY2Ugb2YgY29uZmlndXJhdGlvbiB0aGF0IGNhbiBkZWVwbHkgaW1wYWN0IHRoZSBzeXN0ZW0uIFRvIHByb3Blcmx5IGFzc2VzcyB0aGlzIHZhcmlhYmxlLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBpcyB1c2VkLiBJJ2xsIG9wZW4gYG5ldC9jb3JlL3BhZ2VfcG9vbC5jYCBhbmQgc3RhcnQgZGlnZ2luZy4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhcmUgaGlkZGVuIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjE1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NDIuMTQ3NTUwNDIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMyMTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTg4PXZvaWQgcGFnZV9wb29sX2dldF9zdGF0cyhjb25zdCBzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTExLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMTI6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZ2V0X3N0YXRzKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTE0PXU4ICpwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXRfc3RyaW5ncyh1OCAqZGF0YSlcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyNC19XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTI1OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2V0aHRvb2xfc3RhdHNfZ2V0X3N0cmluZ3MpO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjc9aW50IHBhZ2VfcG9vbF9ldGh0b29sX3N0YXRzX2dldF9jb3VudCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTMwLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMzE6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXRfY291bnQpO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMzM9dTY0ICpwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXQodTY0ICpkYXRhLCBjb25zdCB2b2lkICpzdGF0cylcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTE1MC19XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTUxOkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2V0aHRvb2xfc3RhdHNfZ2V0KTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xNTItXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0zNDE9cGFnZV9wb29sX2NyZWF0ZV9wZXJjcHUoY29uc3Qgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgKnBhcmFtcywgaW50IGNwdWlkKVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMzY2LX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzozNjc6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfY3JlYXRlX3BlcmNwdSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMzY4LVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9MzczPXN0cnVjdCBwYWdlX3Bvb2wgKnBhZ2VfcG9vbF9jcmVhdGUoY29uc3Qgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTM3Ni19XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Mzc3OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2NyZWF0ZSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMzc4LVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njc1PW5ldG1lbV9yZWYgcGFnZV9wb29sX2FsbG9jX25ldG1lbXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkwLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2OTE6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkyLUFMTE9XX0VSUk9SX0lOSkVDVElPTihwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcywgTlVMTCk7XFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02OTQ9c3RydWN0IHBhZ2UgKnBhZ2VfcG9vbF9hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBnZnBfdCBnZnApXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTctfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5ODpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9hbGxvY19wYWdlcyk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjk5LVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9OTEyPXZvaWQgcGFnZV9wb29sX3B1dF91bnJlZmVkX25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTkyNS19XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6OTI2OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX3B1dF91bnJlZmVkX25ldG1lbSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTI3LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTkyOD12b2lkIHBhZ2VfcG9vbF9wdXRfdW5yZWZlZF9wYWdlKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTMzLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo5MzQ6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfcHV0X3VucmVmZWRfcGFnZSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTM1LVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9OTgzPXZvaWQgcGFnZV9wb29sX3B1dF9uZXRtZW1fYnVsayhuZXRtZW1fcmVmICpkYXRhLCB1MzIgY291bnQpXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMDMyLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMDMzOkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX3B1dF9uZXRtZW1fYnVsayk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTAzNC1cXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTEwNjY9bmV0bWVtX3JlZiBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW0oc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTExMDgtfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjExMDk6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW0pO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTExMTAtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTExMT1zdHJ1Y3QgcGFnZSAqcGFnZV9wb29sX2FsbG9jX2ZyYWcoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50ICpvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTE2LX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMTE3OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2FsbG9jX2ZyYWcpO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTExMTgtXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjY3PXZvaWQgcGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMjc3LX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMjc4OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMjc5LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTEyODA9dm9pZCBwYWdlX3Bvb2xfZGlzYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMjk1LX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMjk2OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2Rpc2FibGVfZGlyZWN0X3JlY3ljbGluZyk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTI5Ny1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjk4PXZvaWQgcGFnZV9wb29sX2Rlc3Ryb3koc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMTgtfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjEzMTk6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZGVzdHJveSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTMyMC1cXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTEzMjI9dm9pZCBwYWdlX3Bvb2xfdXBkYXRlX25pZChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBpbnQgbmV3X25pZClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMzQtfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjEzMzU6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfdXBkYXRlX25pZCk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTMzNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NDIuMTkxODc2NTM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODgzODMwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhZ2UgUG9vbCBBbGxvY2F0aW9uIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUsICpgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAqLCBpcyBjYWxsZWQgYnkgKmBwYWdlX3Bvb2xfZG1hX21hcGAqLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGJ5ICpgX19wYWdlX3Bvb2xfYWxsb2NfcGFnZV9vcmRlcmAqIGFuZCAqYF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvd2AqLiBUaG9zZSB0d28gYXJlIHRoZW4gY2FsbGVkIGJ5IHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zLCAqYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCogYW5kICpgcGFnZV9wb29sX2FsbG9jX2ZyYWdfbmV0bWVtYCouIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgaW1wb3J0YW50IGZvciBmdXp6aW5nLlxuXG5Ob3csICpgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgKiBhbmQgKmBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW1gKiBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHRlbGwgbWUgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyBpbiBgRm9jdXNTeW1ib2xzYCB0byBwcmV2ZW50IHRoZSBmdXp6aW5nIGRpc3RyaWJ1dGlvbiBmcm9tIGJlY29taW5nIHNrZXdlZC4gU28sIEkgbmVlZCB0byBsb29rIGRlZXBlci4gKmBwYWdlX3Bvb2xfY3JlYXRlYCogc2VlbXMgdW5yZWxhdGVkIHRvIHRoZSBjb3JlIGFsbG9jYXRpb24gZmxvdywgc28gSSdtIG5vdCBnb2luZyB0byBib3RoZXIgd2l0aCBpdC5cblxuSSBkaWQgYSBxdWljayByZXZpZXcsIGFuZCBpdCBsb29rcyBsaWtlICpgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgKiBhbmQgKmBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW1gKiBhcmUgdGhlIG9ubHkgZW50cnkgcG9pbnRzIHRvIHRoaXMgY29kZSwgYW5kIGFyZSBib3RoIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBtZWFucywgYXMgdGhlIGluc3RydWN0aW9ucyBzdWdnZXN0LCB0aGF0IEkgc2hvdWxkIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGFzIGFuIGVtcHR5IGxpc3QgYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBQQUdFX1BPT0xgIGlzIGEgdmVyeSBjb21tb24gc2V0dGluZywgd2hpY2ggZG9lc24ndCBuYXJyb3cgYW55dGhpbmcgZG93bi4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWcgZm9yIGBQUF9ETUFfSU5ERVhfQklUU2AsIHBlcmhhcHM/IE5vIHN1Y2ggY29uZmlnIGlzIGxpc3RlZC4gTG9va3MgbGlrZSB0aGUgY29uZmlndXJhdGlvbiBpcyBhbHNvIHF1aXRlIGdlbmVyaWMuIFNvLCB5ZXMsIGVtcHR5IGBGb2N1c1N5bWJvbHNgIGFuZCBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjQ4LjU4MDI2MjA1NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjMzNzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBQX0RNQV9JTkRFWF9CSVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTQ3OD1zdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTQ4My1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo0ODQ6XFx0aWYgKHVubGlrZWx5KCFQUF9ETUFfSU5ERVhfQklUUykpXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDg1LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NTEwPXN0YXRpYyB2b2lkIF9fcGFnZV9wb29sX3VubWFwX25ldG1lbV9kbWEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTUyNS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo1MjY6XFx0aWYgKGxpa2VseShQUF9ETUFfSU5ERVhfQklUUykpIHtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy01MjctXFx0XFx0aWQgPSBuZXRtZW1fZ2V0X2RtYV9pbmRleChuZXRtZW0pO1xcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NzQ2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3BhZ2VfcG9vbF9yZWxlYXNlX25ldG1lbV9kbWEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTc1Ni1cXHRwYWdlX3Bvb2xfc2V0X2RtYV9hZGRyX25ldG1lbShuZXRtZW0sIDApO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjc1NzpcXHRpZiAobGlrZWx5KFBQX0RNQV9JTkRFWF9CSVRTKSlcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy03NTgtXFx0XFx0bmV0bWVtX3NldF9kbWFfaW5kZXgobmV0bWVtLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NDguODMwOTAxNzk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzAyOTY4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGFzaW5nIERvd24gYSBEZWZpbml0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkndmUgaGl0IGEgc25hZy4gSSBzZWUgYFBQX0RNQV9JTkRFWF9CSVRTYCBtZW50aW9uZWQsIGJ1dCBpdCdzIG5vdCBpbW1lZGlhdGVseSBjbGVhciB3aGVyZSBpdCdzIGRlZmluZWQuIFRoaXMgaXMgYSBjb21tb24gc2l0dWF0aW9uLCByaWdodD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCB0aGUgdmFsdWUgb2YgdGhpcyBtYWNybywgYmVjYXVzZSBJIGNhbid0IHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGZ1bmN0aW9uIHVudGlsIEkga25vdyB3aGF0IGBQUF9ETUFfSU5ERVhfQklUU2AgKm1lYW5zKi4gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZSBJIHNob3VsZCBiZSBsb29raW5nIGF0PyBJcyBpdCBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBkZWZpbmVkIGluIGEgcHJvamVjdCBjb25maWd1cmF0aW9uPyBPciBwZXJoYXBzIGl0IGlzIGR5bmFtaWNhbGx5IGdlbmVyYXRlZC4gSSdsbCBuZWVkIHRvIGRvIHNvbWUgc2xldXRoaW5nIHRvIHRyYWNrIGl0IGRvd24uIFRpbWUgdG8gc3RhcnQgc2VhcmNoaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NTIuMTYxMjAwODM4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3NjQyNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBQUF9ETUFfSU5ERVhfQklUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oPTUxODk9aW50IGFyY2hfbG9ja19zaGFkb3dfc3RhY2tfc3RhdHVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgdW5zaWduZWQgbG9uZyBzdGF0dXMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTUyMTgtICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjUyMTk6I2RlZmluZSBQUF9ETUFfSU5ERVhfQklUUyBNSU4oMzIsIF9fZmZzKFBPSVNPTl9QT0lOVEVSX0RFTFRBKSAtIFBQX0RNQV9JTkRFWF9TSElGVClcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIyMC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTUyMjItI2RlZmluZSBQUF9ETUFfSU5ERVhfTUlOX09GRlNFVCAoMSBcXHUwMDNjXFx1MDAzYyAoUFBfRE1BX0lOREVYX1NISUZUICsgOCkpXFxuaW5jbHVkZS9saW51eC9tbS5oOjUyMjM6I2RlZmluZSBQUF9ETUFfSU5ERVhfQklUUyAoKF9fYnVpbHRpbl9jb25zdGFudF9wKFBBR0VfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuaW5jbHVkZS9saW51eC9tbS5oLTUyMjQtXFx0XFx0XFx0ICAgIFBBR0VfT0ZGU0VUIFxcdTAwM2U9IFBQX0RNQV9JTkRFWF9NSU5fT0ZGU0VUIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NTQuMjI4ODQ5Mzc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDg1MjUwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFnZSBQb29sIEZpeCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgaW5jbHVkZS9saW51eC9tbS5oYCBoZWFkZXIuIFRoZSBjaGFuZ2UgaXMgYWltZWQgYXQgY29ycmVjdGluZyBzb21lIGBnZnBgIGZsYWcgaGFuZGxpbmcsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhbnkgZml4IGluIHRoaXMgYXJlYSBpcyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHdpdGggYSBmZWF0dXJlIGxpa2UgdGhlIGBQQUdFX1BPT0xgLlxuXG5NeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgd2FycmFudHMgZnV6emluZyB0byB1bmNvdmVyIGFueSBlZGdlIGNhc2VzIG9yIHJlZ3Jlc3Npb25zLiBGcm9tIG15IGluaXRpYWwgYXNzZXNzbWVudCwgaXQgZG9lc24ndCBhcHBlYXIgYW55IG9ic2N1cmUgY29uZmlncyBhcmUgbmVjZXNzYXJ5IGJleW9uZCB0aGUgb2J2aW91cyBgUEFHRV9QT09MYCBvcHRpb24uIFRoZSBmYWN0IHRoYXQgbmV0d29ya2luZyBkcml2ZXJzIGltcGxpY2l0bHkgZW5hYmxlIGBQQUdFX1BPT0xgIG1ha2VzIGl0IGEgbW9yZSBpbnRlcmVzdGluZyB0YXJnZXQsIGFzIGl0J3MgbGlrZWx5IHRvIGJlIGV4ZXJjaXNlZCBmcmVxdWVudGx5IGluIGEgc3RhbmRhcmQgc3lzdGVtLlxuXG5UbyBlbnN1cmUgcHJvcGVyIGNvdmVyYWdlIGluIG15IGZ1enppbmcgc2V0dXAsIEknbGwgYWRkIGBQQUdFX1BPT0xgIHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoYXQgYFBBR0VfUE9PTGAgaXMsIGluIGZhY3QsIGEgdmFsaWQgY29uZmlnIG9wdGlvbiB3aXRoaW4gdGhpcyBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzQ2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ3OjAxLjEzNzM3NjkyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTE5Njg0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDc6MDIuOTE2NTc4NDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMDQ4MDMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIGBQQUdFX1BPT0xgIGlzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgZ290IGl0LiBMZXQgbWUgc29saWRpZnkgbXkgcmVzcG9uc2UuXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSBgV29ydGhGdXp6aW5nOiB0cnVlYCBmbGFnLiBUaGVyZSBhcmVuJ3QgYW55IHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24sIGFzIGluZGljYXRlZCBieSB0aGUgZW1wdHkgYEZvY3VzU3ltYm9sczogW11gLiBJdCBsb29rcyBsaWtlIGl0J3MgYWxsIGFib3V0IHRob3NlIGhvdC1wYXRoIGZ1bmN0aW9ucywgbGlrZSBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgLCB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoaXMgbWFrZXMgc2Vuc2UuXG5cblRoZSBgRW5hYmxlQ29uZmlnczogW1wiUEFHRV9QT09MXCJdYCB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgdGhlIGNvbmZpZyB0byBmb2N1cyBvbiBkdXJpbmcgYnVpbGQvdGVzdGluZy5cblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgLiBUaGUgZ29hbCBpcyB0byBjbGVhciBzcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgZnJvbSBgZ2ZwYCBiZWZvcmUgY2FsbGluZyBgeGFfYWxsb2NgIG9yIGB4YV9hbGxvY19iaGAuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSByZWFsbHksIHdpdGhpbiB0aGUgbmV0d29ya2luZyBwYWdlIHBvb2wgbG9naWMuIEl0IGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgcG90ZW50aWFsIGZvciBYQXJyYXkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciB0aGUgbWlzdXNlIG9mIG1lbW9yeSB6b25lcy4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgdHlwaWNhbCBhbGxvY2F0aW9uIHBhdGhzIHdpdGhpbiB0aGUgcGFnZSBwb29sLlxuXG5Tb3VuZHMgbGlrZSBhIHNvbGlkIGNoYW5nZSwgd2l0aCBwb3RlbnRpYWwgZm9yIHNlcmlvdXMgaW1wYWN0IGlmIGl0IGlzbid0IGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjA2LCJPdXRwdXRUb2tlbnMiOjExMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NzowOC41NDcwNjExMDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjkwODUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ3OjA4LjYxOTk3NDkwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTg2NzYzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NzowOC42MjA1MTE1NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUzOTgxMzY3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHRlAgZmxhZ3MgdXNlZCBmb3IgWEFycmF5IGFsbG9jYXRpb25zIGluIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCBieSBzdHJpcHBpbmcgb3V0IGRldmljZS1zcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgKGBfX0dGUF9ETUFgLCBgX19HRlBfRE1BMzJgLCBgX19HRlBfSElHSE1FTWAsIGBfX0dGUF9DT01QYCkuIFRoaXMgcHJldmVudHMgWEFycmF5IG5vZGVzIGZyb20gYmVpbmcgYWxsb2NhdGVkIGZyb20gcmVzdHJpY3RlZCBtZW1vcnkgem9uZXMgbGlrZSBETUEuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW52YWxpZCBhY2Nlc3NlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNGJlZWYyMDg0OTFkZDg0MDExODVmMjA5Mzg4MTAzYWQzNmViMzUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTc6NDY6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wYWdlX3Bvb2wuYyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jXG5pbmRleCA1MGVlNTUwZmVmNzNhLi44Zjg5NTZmYjA2MWJlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcGFnZV9wb29sLmNcbisrKyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jXG5AQCAtNDg0LDYgKzQ4NCwxMyBAQCBzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbiBcdGlmICh1bmxpa2VseSghUFBfRE1BX0lOREVYX0JJVFMpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdC8qXG4rXHQgKiBEcml2ZXJzIHJlcXVlc3QgR0ZQIGZsYWdzIGFjY29yZGluZyB0byBib3RoIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kXG4rXHQgKiB0aGUgZGV2aWNlIGNvbnN0cmFpbnRzLCBidXQgdGhlIFhBcnJheSBlbnRyeSBpdHNlbGYgaXMgYnkgbm8gbWVhblxuK1x0ICogdXNlZCBieSB0aGUgZGV2aWNlLCBzbyByZW1vdmUgem9uZS9wb2xpY3kgZmxhZ3MuXG4rXHQgKi9cbitcdGdmcCBcdTAwMjY9IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfQ09NUCk7XG4rXG4gXHRpZiAoaW5fc29mdGlycSgpKVxuIFx0XHRlcnIgPSB4YV9hbGxvYyhcdTAwMjZwb29sLVx1MDAzZWRtYV9tYXBwZWQsIFx1MDAyNmlkLCBuZXRtZW1fdG9fcGFnZShuZXRtZW0pLFxuIFx0XHRcdCAgICAgICBQUF9ETUFfSU5ERVhfTElNSVQsIGdmcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NzowOC42MjA1MTI3NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzOTgxMTU0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBETUEgSW5kZXggUmVnaXN0cmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIHdpdGhpbiBgbmV0L2NvcmUvcGFnZV9wb29sLmNgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJlYWxseS4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIGhvdyB0aGUgYGdmcGAgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQgd2hlbiBhbGxvY2F0aW5nIHRoZSBYQXJyYXkgZW50cmllcy4gVGhleSdyZSByZW1vdmluZyBgX19HRlBfRE1BYCwgYF9fR0ZQX0RNQTMyYCwgYF9fR0ZQX0hJR0hNRU1gLCBhbmQgYF9fR0ZQX0NPTVBgIGZyb20gdGhlIGBnZnBgIGZsYWdzIHBhc3NlZCB0byBgeGFfYWxsb2NgIG9yIGB4YV9hbGxvY19iaGAuXG5cblRoZSByYXRpb25hbGUgc2VlbXMgc291bmQ6IHRoZXNlIGRldmljZS1zcGVjaWZpYyBmbGFncyBzaG91bGRuJ3QgYmUgaW5mbHVlbmNpbmcgdGhlIGFsbG9jYXRpb24gb2YgdGhlIFhBcnJheSBlbnRyaWVzIHRoZW1zZWx2ZXMsIHNpbmNlIHRoZSBYQXJyYXkgaXMgbm90IGRpcmVjdGx5IHVzZWQgYnkgdGhlIGRldmljZS4gSXQncyByZWFsbHkganVzdCBtYWtpbmcgc3VyZSB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvciBhbGlnbnMgd2l0aCB0aGUgZ2VuZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIFRoaXMgY2hhbmdlIGNvdWxkIHByZXZlbnQgZmFpbHVyZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgZnJvbSB0aGUgYHhhX2FsbG9jYCBmdW5jdGlvbnMgaWYgZ2l2ZW4gZmxhZ3MgZm9yIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgc2hvdWxkbid0IGFwcGx5IHRvIHRoZSBYQXJyYXkuXG5cbkkndmUgc2Nhbm5lZCB0aGUgY29kZSBzbmlwcGV0LCBhbmQgSSBjYW4ndCBzZWUgYW55IG9idmlvdXMgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBJdCdzIGp1c3QgbW9kaWZ5aW5nIGFsbG9jYXRpb24gZmxhZ3MsIHdoaWNoIHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IHNhZmUgb3BlcmF0aW9uLiBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGVyZSdzIG5vIGRhdGEgbGVha2FnZSBvciBhbnkgb3RoZXIgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zIGhlcmUuIEtNU0FOIGlzbid0IG5lZWRlZCBmb3IgdGhpcywgc28gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCBzZWVtcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYzLCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ3OjI0LjAxODYzMDQ0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdGUCBmbGFncyB1c2VkIGZvciBYQXJyYXkgYWxsb2NhdGlvbnMgaW4gYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGJ5IHN0cmlwcGluZyBvdXQgZGV2aWNlLXNwZWNpZmljIHpvbmUgYW5kIHBvbGljeSBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYF9fR0ZQX0NPTVBgKS4gVGhpcyBwcmV2ZW50cyBYQXJyYXkgbm9kZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZnJvbSByZXN0cmljdGVkIG1lbW9yeSB6b25lcyBsaWtlIERNQS4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbnZhbGlkIGFjY2Vzc2VzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHRlAgZmxhZ3MgdXNlZCBmb3IgWEFycmF5IGFsbG9jYXRpb25zIGluIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCBieSBzdHJpcHBpbmcgb3V0IGRldmljZS1zcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgKGBfX0dGUF9ETUFgLCBgX19HRlBfRE1BMzJgLCBgX19HRlBfSElHSE1FTWAsIGBfX0dGUF9DT01QYCkuIFRoaXMgcHJldmVudHMgWEFycmF5IG5vZGVzIGZyb20gYmVpbmcgYWxsb2NhdGVkIGZyb20gcmVzdHJpY3RlZCBtZW1vcnkgem9uZXMgbGlrZSBETUEuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW52YWxpZCBhY2Nlc3NlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxvhz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 17:44:01 +0000 UTC FinishedAt: 2026-08-20 17:47:26 +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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_POOL" ], "series_id": "bbb91efd-31c9-4386-9232-c180ae56295a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHRlAgZmxhZ3MgdXNlZCBmb3IgWEFycmF5IGFsbG9jYXRpb25zIGluIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCBieSBzdHJpcHBpbmcgb3V0IGRldmljZS1zcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgKGBfX0dGUF9ETUFgLCBgX19HRlBfRE1BMzJgLCBgX19HRlBfSElHSE1FTWAsIGBfX0dGUF9DT01QYCkuIFRoaXMgcHJldmVudHMgWEFycmF5IG5vZGVzIGZyb20gYmVpbmcgYWxsb2NhdGVkIGZyb20gcmVzdHJpY3RlZCBtZW1vcnkgem9uZXMgbGlrZSBETUEuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW52YWxpZCBhY2Nlc3NlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIHRvIGNsZWFyIHNwZWNpZmljIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gYGdmcGAgYmVmb3JlIGNhbGxpbmcgYHhhX2FsbG9jYCBvciBgeGFfYWxsb2NfYmhgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBwYWdlIHBvb2wgbG9naWMgdGhhdCBwcmV2ZW50cyBYQXJyYXkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbmNvcnJlY3Qgem9uZSB1c2FnZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBwYWdlIHBvb2wgYWxsb2NhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE0YmVlZjIwODQ5MWRkODQwMTE4NWYyMDkzODgxMDNhZDM2ZWIzNTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNzo0NjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wYWdlX3Bvb2wuYyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jXG5pbmRleCA1MGVlNTUwZmVmNzNhLi44Zjg5NTZmYjA2MWJlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcGFnZV9wb29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jXG5AQCAtNDg0LDYgJiM0Mzs0ODQsMTMgQEAgc3RhdGljIGludCBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4gXHRpZiAodW5saWtlbHkoIVBQX0RNQV9JTkRFWF9CSVRTKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEcml2ZXJzIHJlcXVlc3QgR0ZQIGZsYWdzIGFjY29yZGluZyB0byBib3RoIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kXG4mIzQzO1x0ICogdGhlIGRldmljZSBjb25zdHJhaW50cywgYnV0IHRoZSBYQXJyYXkgZW50cnkgaXRzZWxmIGlzIGJ5IG5vIG1lYW5cbiYjNDM7XHQgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRnZnAgXHUwMDI2PSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX0NPTVApO1xuJiM0MztcbiBcdGlmIChpbl9zb2Z0aXJxKCkpXG4gXHRcdGVyciA9IHhhX2FsbG9jKFx1MDAyNnBvb2wtXHUwMDNlZG1hX21hcHBlZCwgXHUwMDI2aWQsIG5ldG1lbV90b19wYWdlKG5ldG1lbSksXG4gXHRcdFx0ICAgICAgIFBQX0RNQV9JTkRFWF9MSU1JVCwgZ2ZwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNGJlZWYyMDg0OTFkZDg0MDExODVmMjA5Mzg4MTAzYWQzNmViMzUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTc6NDY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wYWdlX3Bvb2wuYyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jCmluZGV4IDUwZWU1NTBmZWY3M2EuLjhmODk1NmZiMDYxYmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jCkBAIC00ODQsNiAmIzQzOzQ4NCwxMyBAQCBzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwKIAlpZiAodW5saWtlbHkoIVBQX0RNQV9JTkRFWF9CSVRTKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogRHJpdmVycyByZXF1ZXN0IEdGUCBmbGFncyBhY2NvcmRpbmcgdG8gYm90aCB0aGUgY3VycmVudCBjb250ZXh0IGFuZAomIzQzOwkgKiB0aGUgZGV2aWNlIGNvbnN0cmFpbnRzLCBidXQgdGhlIFhBcnJheSBlbnRyeSBpdHNlbGYgaXMgYnkgbm8gbWVhbgomIzQzOwkgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy4KJiM0MzsJICovCiYjNDM7CWdmcCAmYW1wOz0gfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9DT01QKTsKJiM0MzsKIAlpZiAoaW5fc29mdGlycSgpKQogCQllcnIgPSB4YV9hbGxvYygmYW1wO3Bvb2wtJmd0O2RtYV9tYXBwZWQsICZhbXA7aWQsIG5ldG1lbV90b19wYWdlKG5ldG1lbSksCiAJCQkgICAgICAgUFBfRE1BX0lOREVYX0xJTUlULCBnZnApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBQb29sIERNQSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvcGFnZV9wb29sLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCB0aGUgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaGVyZSBpbnZvbHZlcyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgRE1BIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCBpcyByZW1vdmluZyBhIHNlcmllcyBvZiBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYW5kIGBfX0dGUF9DT01QYCkgZnJvbSB0aGUgYGdmcGAgYWxsb2NhdGlvbiBmbGFncyAqYmVmb3JlKiB0aGUgY2FsbCB0byBgeGFfYWxsb2NgIG9yIGB4YV9hbGxvY19iaGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBiZWluZyBtYWRlLiBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHJlc3RyaWN0aW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpbiB0aGlzIG1hbm5lcj8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbnN0cmFpbnQgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGhlcmU/IFRoZSByZW1vdmFsIG9mIGBfX0dGUF9ETUFgIGFuZCBgX19HRlBfRE1BMzJgIGlzIHRoZSBtb3N0IGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzaW5jZSB0aG9zZSBmbGFncyBkaXJlY3RseSByZWxhdGUgdG8gRE1BLWFibGUgbWVtb3J5IHJlZ2lvbnMuICBJcyB0aGUgZ29hbCB0byBmb3JjZSBhbGxvY2F0aW9uIHdpdGhpbiBhIG5hcnJvd2VyIG1lbW9yeSB3aW5kb3c/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGluY3JlYXNlZCBsYXRlbmN5IGlmIHRoaXMgcmVzdHJpY3RzIHRoZSBtZW1vcnkgcG9vbCB0b28gbXVjaD8KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGUgYHhhX2FsbG9jYCBhbmQgYHhhX2FsbG9jX2JoYCBjYWxscyB0byBzZWUgaG93IGBnZnBgIGlzIHVzZWQgd2l0aGluIHRoYXQgY29udGV4dCwgYW5kIHdoYXQgc2lkZSBlZmZlY3RzIHRoaXMgbWlnaHQgaW50cm9kdWNlLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGltcGFjdHMgb24gRE1BIHRyYW5zZmVycyBpZiB3ZSBsaW1pdCB0aGUgYXZhaWxhYmxlIG1lbW9yeSByZWdpb25zPyBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBuZXR3b3JrIHNjZW5hcmlvcy4gSeKAmWxsIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIHRocm91Z2ggdGhlIHBhZ2UgcG9vbCBjb2RlIGFuZCB0aGVuIGludG8gdGhlIG5ldHdvcmsgc3RhY2sgaXRzZWxmIHRvIGVuc3VyZSB3ZSYjMzk7cmUgbm90IGluYWR2ZXJ0ZW50bHkgY2F1c2luZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByZWdyZXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGFnZV9wb29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGFnZV9wb29sLmM9NDY0PXBhZ2VfcG9vbF9kbWFfc3luY19mb3JfZGV2aWNlKGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDc3LVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NDc4OnN0YXRpYyBpbnQgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDc5LVx0XHRcdFx0XHRuZXRtZW1fcmVmIG5ldG1lbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTU0Nj1zdGF0aWMgYm9vbCBwYWdlX3Bvb2xfZG1hX21hcChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTU2Ny1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjU2ODpcdGVyciA9IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgocG9vbCwgbmV0bWVtLCBnZnApO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNTY5LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBETUEgTWFwcGluZyB3aXRoaW4gdGhlIFBhZ2UgUG9vbCoqCgpSaWdodCwgc28gSSBzZWUgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBwYWdlX3Bvb2xfZG1hX21hcGAuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBwYWdlX3Bvb2xfZG1hX21hcGAuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBETUEgbWFwcGluZyBmdW5jdGlvbiB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgcmVnaXN0cmF0aW9uIGlzIGhhcHBlbmluZy4gS25vd2luZyB3aGVyZSBgcGFnZV9wb29sX2RtYV9tYXBgIGlzIHV0aWxpemVkIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBvZiByZWdpc3RlcmluZyB0aGF0IERNQSBpbmRleCwgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGRlc2lnbi4gVW5kZXJzdGFuZGluZyB0aGUgdXNhZ2UgY29udGV4dCB3aWxsIGNsYXJpZnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgcmVzb3VyY2UgY29udGVudGlvbiBzY2VuYXJpb3MuIFdpdGhvdXQgdGhhdCBjb250ZXh0LCB0aGlzIGZ1bmN0aW9uIGNhbGwgaXMganVzdCBhIGRhdGEgcG9pbnQsIGJ1dCB3aXRoIGl0LCBpdCYjMzk7cyBhIHZpdGFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9wb29sX2RtYV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYz01MTA9c3RhdGljIHZvaWQgX19wYWdlX3Bvb2xfdW5tYXBfbmV0bWVtX2RtYShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTU0NS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjU0NjpzdGF0aWMgYm9vbCBwYWdlX3Bvb2xfZG1hX21hcChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSwgZ2ZwX3QgZ2ZwKVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTQ3LXtcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz01ODU9c3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfcG9vbF9hbGxvY19wYWdlX29yZGVyKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTk0LVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NTk1Olx0aWYgKHBvb2wtXHUwMDNlZG1hX21hcCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIXBhZ2VfcG9vbF9kbWFfbWFwKHBvb2wsIHBhZ2VfdG9fbmV0bWVtKHBhZ2UpLCBnZnApKSkge1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNTk2LVx0XHRwdXRfcGFnZShwYWdlKTtcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjQ2LVx0XHRuZXRtZW0gPSBwb29sLVx1MDAzZWFsbG9jLmNhY2hlW2ldO1xubmV0L2NvcmUvcGFnZV9wb29sLmM6NjQ3Olx0XHRpZiAoZG1hX21hcCBcdTAwMjZcdTAwMjYgdW5saWtlbHkoIXBhZ2VfcG9vbF9kbWFfbWFwKHBvb2wsIG5ldG1lbSwgZ2ZwKSkpIHtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY0OC1cdFx0XHRwdXRfcGFnZShuZXRtZW1fdG9fcGFnZShuZXRtZW0pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDk4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBQb29sIEFsbG9jYXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhZ2UgcG9vbCBhbGxvY2F0aW9uIGxvZ2ljLiBTZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlaXIgYWNjZXNzaWJpbGl0eS4gTGV0JiMzOTtzIHNlZS4uLiBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgLSB0aGF0JiMzOTtzIHN0YXRpYywgZ29vZCB0byBrbm93LiBBbmQgYHBhZ2VfcG9vbF9kbWFfbWFwYCwgYWxzbyBzdGF0aWMuIEFscmlnaHQsIHRoYXQgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyB1c2Ugd2l0aGluIHRoZSBtb2R1bGUuICBgX19wYWdlX3Bvb2xfYWxsb2NfcGFnZV9vcmRlcmAgaXMgc3RhdGljIGFzIHdlbGwsIGFuZCBmaW5hbGx5LCBgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93YCwgeWVwLCBhbHNvIHN0YXRpYy4gTm93LCB3aGF0IGFyZSB0aGUgZnVuY3Rpb25zICpleHBvcnRlZCo/IFdoYXQgYXJlIHRoZSBlbnRyeSBwb2ludHMgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGVtLiBJIHNlZSBgcGFnZV9wb29sX2FsbG9jX3BhZ2VzYCBhbmQgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1gLiBSaWdodCwgdGhlc2UgYXJlIHRoZSBleHBvc2VkIGludGVyZmFjZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmZhY2VzIGludGVyYWN0IHdpdGggdGhlc2Ugc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYXAgdGhlIGludGVybmFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBleHRlcm5hbCBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYz01ODU9c3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfcG9vbF9hbGxvY19wYWdlX29yZGVyKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjEwLS8qIHNsb3cgcGF0aCAqL1xubmV0L2NvcmUvcGFnZV9wb29sLmM6NjExOnN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjEyLVx0XHRcdFx0XHRcdFx0ICBnZnBfdCBnZnApXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njc1PW5ldG1lbV9yZWYgcGFnZV9wb29sX2FsbG9jX25ldG1lbXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY4Ny1cdGVsc2Vcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY4ODpcdFx0bmV0bWVtID0gX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHBvb2wsIGdmcCk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02ODktXHRyZXR1cm4gbmV0bWVtO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCBFeHBvcnQgU3RhdHVzKioKCk9rYXksIHNvIEkgc2VlIGBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc2AgbWVudGlvbmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGV4cG9ydGVkPyYjMzQ7IEl0JiMzOTtzIGEga2V5IGRldGFpbCwgYmVjYXVzZSBpZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIHRoZW4gZXh0ZXJuYWwgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHNob3VsZG4mIzM5O3QgYmUgYWJsZSB0byBkaXJlY3RseSBjYWxsIGl0LiBJdOKAmXMgY3JpdGljYWwgZm9yIG1vZHVsYXJpdHkgYW5kIG1haW50YWluaW5nIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBrZXJuZWwsIHNvIHRoaXMgbmVlZHMgdmVyaWZpY2F0aW9uLiBUaW1lIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHN5bWJvbCBleHBvcnQgc3RhdHVzIOKAkyBJJiMzOTtsbCBwcm9iYWJseSBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9yIG1vZHVsZSBtYXAgaWYgSSBoYXZlIGFjY2VzcyB0byBpdCwgb3IgcG9zc2libHkgdXNlIGBubWAgb24gcmVsZXZhbnQgb2JqZWN0IGZpbGVzIHRvIGNvbmZpcm0uIFVuZGVyc3RhbmRpbmcgaXRzIGV4cG9ydCBzdGF0dXMgd2lsbCBkaWN0YXRlIGhvdyBpdCBpcyB1c2VkIGFuZCB3aGV0aGVyIGFueSBjaGFuZ2VzIGluIGl0cyB1c2UgYXJlIGFjdHVhbGx5IHZhbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BhZ2VfcG9vbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3BhZ2VfcG9vbC5jPTU4NT1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fcGFnZV9wb29sX2FsbG9jX3BhZ2Vfb3JkZXIoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MTAtLyogc2xvdyBwYXRoICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MTE6c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MTItXHRcdFx0XHRcdFx0XHQgIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02NzQtICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2NzU6bmV0bWVtX3JlZiBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBnZnBfdCBnZnApXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02NzYte1xuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY4Ny1cdGVsc2Vcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY4ODpcdFx0bmV0bWVtID0gX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHBvb2wsIGdmcCk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02ODktXHRyZXR1cm4gbmV0bWVtO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkwLX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5MTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5MjpBTExPV19FUlJPUl9JTkpFQ1RJT04ocGFnZV9wb29sX2FsbG9jX25ldG1lbXMsIE5VTEwpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkzLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njk0PXN0cnVjdCBwYWdlICpwYWdlX3Bvb2xfYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjk1LXtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5NjpcdHJldHVybiBuZXRtZW1fdG9fcGFnZShwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyhwb29sLCBnZnApKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY5Ny19XG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTA2Nj1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEwODgtXHRpZiAoIW5ldG1lbSkge1xubmV0L2NvcmUvcGFnZV9wb29sLmM6MTA4OTpcdFx0bmV0bWVtID0gcGFnZV9wb29sX2FsbG9jX25ldG1lbXMocG9vbCwgZ2ZwKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEwOTAtXHRcdGlmICh1bmxpa2VseSghbmV0bWVtKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTkyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGhpcyBYQXJyYXkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGhvdyBgZ2ZwYCBmbGFncyBhcmUgaGFuZGxlZCBkdXJpbmcgWEFycmF5IGFsbG9jYXRpb24gd2l0aGluIHRoZSBwYWdlIHBvb2wuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBiaXR3aXNlIEFORCBvcGVyYXRpb24sIHN0cmlwcGluZyBvdXQgem9uZSBhbmQgcG9saWN5IGZsYWdzIHRoYXQgYXJlIHJlbGV2YW50IHRvICpwYWdlKiBhbGxvY2F0aW9uLCBidXQgbm90IHRvIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBYQXJyYXkgbm9kZSBpdHNlbGYuIFRoaXMgc2hvdWxkIHByZXZlbnQgcG90ZW50aWFsIGVycm9ycyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgZnJvbSBgeGFfYWxsb2NgLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgcmVsYXRpdmVseSBmb2N1c2VkIGZpeC4gVGhlIGBwYWdlX3Bvb2xgIGlzIGEga2V5IHBhcnQgb2YgbmV0d29ya2luZyBkcml2ZXJzLCBzbyBhbnkgaW5zdGFiaWxpdHkgaGVyZSBjb3VsZCBoYXZlIGRvd25zdHJlYW0gaW1wbGljYXRpb25zLiBTaW5jZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBmaXhpbmcgYSBwb3RlbnRpYWwgYnVnLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nLgoKVGhlIG9yaWdpbmFsIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3RzLiBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgIGFuZCBgcGFnZV9wb29sX2FsbG9jX3BhZ2VzYCB3b3VsZCBiZSBvYnZpb3VzIGNob2ljZXMsIGJ1dCB0aGV5JiMzOTtyZSAqdmVyeSogZ2VuZXJpYyBhbmQgaGVhdmlseSB1c2VkLiBUaGlzIGNvdWxkIHNrZXcgdGhlIGZ1enppbmcuIFdlIG5lZWQgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoIGlmIHBvc3NpYmxlLgoKVGhlIG90aGVyIHN1Z2dlc3RlZCBmdW5jdGlvbiBgcGFnZV9wb29sX2NyZWF0ZWAgaXMgd29ydGggYSBsb29rLiBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgIGlzIHRoZSBob3QgcGF0aCwgYnV0IGlzIGl0IHRoZSAqb25seSogZW50cnkgcG9pbnQ/IE1heWJlIHdlIGNhbiBqdXN0IGdvIHdpdGggYFdvcnRoRnV6emluZz10cnVlYCBhbmQgbGVhdmUgaXQgYXQgdGhhdC4gSG93ZXZlciwgZXZlbiBpZiBnZW5lcmljLCBpdCBtaWdodCBiZSB0aGUgb25seSBlbnRyeSBwb2ludCwgc28gbGV0JiMzOTtzIGdvIHdpdGggYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCBhcyB0aGUgb25seSBzcGVjaWZpYyB0YXJnZXQgZnVuY3Rpb24uCgpMYXN0bHksIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBtYWtlIHRoaXMgcGF0Y2ggbW9yZSBvciBsZXNzIHJlbGV2YW50LiBJJiMzOTtkIGFzc3VtZSBgQ09ORklHX1BBR0VfUE9PTGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBwYXRjaCByZWxldmFudCBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIHN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXG4tLVxubmV0L0tjb25maWctNDkwLVxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcbm5ldC9LY29uZmlnLTQ5Mi1cdGJvb2xcbm5ldC9LY29uZmlnLTQ5My1cbm5ldC9LY29uZmlnOjQ5NDpjb25maWcgUEFHRV9QT09MX1NUQVRTXG5uZXQvS2NvbmZpZy00OTUtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBQQUdFX1BPT0xgIFVzYWdlKioKCkFscmlnaHQsIHNvIGBQQUdFX1BPT0xgIGlzIGEgZHJpdmVyLXNlbGVjdGVkIGJvb2xlYW4g4oCTIHRoYXQmIzM5O3MgaW50cmlndWluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuIFRoZSBpbW1lZGlhdGUgY29uY2VybiBpcyB0byBzZWUgaWYgYW55IG90aGVyIGVudHJ5IHBvaW50cyBvciBmdW5jdGlvbnMgcmVmZXJlbmNlIHRoZSB2YXJpYWJsZS4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgY29uZmlndXJhdGlvbiB0aGF0IGNhbiBkZWVwbHkgaW1wYWN0IHRoZSBzeXN0ZW0uIFRvIHByb3Blcmx5IGFzc2VzcyB0aGlzIHZhcmlhYmxlLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBpcyB1c2VkLiBJJiMzOTtsbCBvcGVuIGBuZXQvY29yZS9wYWdlX3Bvb2wuY2AgYW5kIHN0YXJ0IGRpZ2dpbmcuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSBoaWRkZW4gaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYz04OD12b2lkIHBhZ2VfcG9vbF9nZXRfc3RhdHMoY29uc3Qgc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTEtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTEyOkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2dldF9zdGF0cyk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMTQ9dTggKnBhZ2VfcG9vbF9ldGh0b29sX3N0YXRzX2dldF9zdHJpbmdzKHU4ICpkYXRhKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyNC19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMjU6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXRfc3RyaW5ncyk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMjYtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjc9aW50IHBhZ2VfcG9vbF9ldGh0b29sX3N0YXRzX2dldF9jb3VudCh2b2lkKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMC19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMzE6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXRfY291bnQpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMTMyLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTMzPXU2NCAqcGFnZV9wb29sX2V0aHRvb2xfc3RhdHNfZ2V0KHU2NCAqZGF0YSwgY29uc3Qgdm9pZCAqc3RhdHMpXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTUwLX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjE1MTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9ldGh0b29sX3N0YXRzX2dldCk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xNTItXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MzQxPXBhZ2VfcG9vbF9jcmVhdGVfcGVyY3B1KGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zICpwYXJhbXMsIGludCBjcHVpZClcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0zNjYtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MzY3OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2NyZWF0ZV9wZXJjcHUpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMzY4LVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTM3Mz1zdHJ1Y3QgcGFnZV9wb29sICpwYWdlX3Bvb2xfY3JlYXRlKGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zICpwYXJhbXMpXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtMzc2LX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjM3NzpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9jcmVhdGUpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMzc4LVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTY3NT1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTAtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjkxOkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2FsbG9jX25ldG1lbXMpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkyLUFMTE9XX0VSUk9SX0lOSkVDVElPTihwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcywgTlVMTCk7XG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njk0PXN0cnVjdCBwYWdlICpwYWdlX3Bvb2xfYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY5Ny19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2OTg6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfYWxsb2NfcGFnZXMpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtNjk5LVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTkxMj12b2lkIHBhZ2VfcG9vbF9wdXRfdW5yZWZlZF9uZXRtZW0oc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgbmV0bWVtX3JlZiBuZXRtZW0sXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTI1LX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjkyNjpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9wdXRfdW5yZWZlZF9uZXRtZW0pO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtOTI3LVxubmV0L2NvcmUvcGFnZV9wb29sLmM9OTI4PXZvaWQgcGFnZV9wb29sX3B1dF91bnJlZmVkX3BhZ2Uoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTMzLX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjkzNDpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9wdXRfdW5yZWZlZF9wYWdlKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTkzNS1cbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz05ODM9dm9pZCBwYWdlX3Bvb2xfcHV0X25ldG1lbV9idWxrKG5ldG1lbV9yZWYgKmRhdGEsIHUzMiBjb3VudClcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMDMyLX1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjEwMzM6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfcHV0X25ldG1lbV9idWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEwMzQtXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTA2Nj1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTExMDgtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTEwOTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbSk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTEwLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTExMT1zdHJ1Y3QgcGFnZSAqcGFnZV9wb29sX2FsbG9jX2ZyYWcoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50ICpvZmZzZXQsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTExNi19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMTE3OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2FsbG9jX2ZyYWcpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMTExOC1cbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjY3PXZvaWQgcGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTI3Ny19XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMjc4OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyNzktXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjgwPXZvaWQgcGFnZV9wb29sX2Rpc2FibGVfZGlyZWN0X3JlY3ljbGluZyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyOTUtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTI5NjpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9kaXNhYmxlX2RpcmVjdF9yZWN5Y2xpbmcpO1xubmV0L2NvcmUvcGFnZV9wb29sLmMtMTI5Ny1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTEyOTg9dm9pZCBwYWdlX3Bvb2xfZGVzdHJveShzdHJ1Y3QgcGFnZV9wb29sICpwb29sKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMTgtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTMxOTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9kZXN0cm95KTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMjAtXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTMyMj12b2lkIHBhZ2VfcG9vbF91cGRhdGVfbmlkKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIGludCBuZXdfbmlkKVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMzQtfVxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTMzNTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF91cGRhdGVfbmlkKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhZ2UgUG9vbCBBbGxvY2F0aW9uIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgZnVuY3Rpb24gaGVyZSwgKmBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCosIGlzIGNhbGxlZCBieSAqYHBhZ2VfcG9vbF9kbWFfbWFwYCosIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgYnkgKmBfX3BhZ2VfcG9vbF9hbGxvY19wYWdlX29yZGVyYCogYW5kICpgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93YCouIFRob3NlIHR3byBhcmUgdGhlbiBjYWxsZWQgYnkgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMsICpgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgKiBhbmQgKmBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW1gKi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBpbXBvcnRhbnQgZm9yIGZ1enppbmcuCgpOb3csICpgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgKiBhbmQgKmBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW1gKiBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHRlbGwgbWUgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyBpbiBgRm9jdXNTeW1ib2xzYCB0byBwcmV2ZW50IHRoZSBmdXp6aW5nIGRpc3RyaWJ1dGlvbiBmcm9tIGJlY29taW5nIHNrZXdlZC4gU28sIEkgbmVlZCB0byBsb29rIGRlZXBlci4gKmBwYWdlX3Bvb2xfY3JlYXRlYCogc2VlbXMgdW5yZWxhdGVkIHRvIHRoZSBjb3JlIGFsbG9jYXRpb24gZmxvdywgc28gSSYjMzk7bSBub3QgZ29pbmcgdG8gYm90aGVyIHdpdGggaXQuCgpJIGRpZCBhIHF1aWNrIHJldmlldywgYW5kIGl0IGxvb2tzIGxpa2UgKmBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc2AqIGFuZCAqYHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbWAqIGFyZSB0aGUgb25seSBlbnRyeSBwb2ludHMgdG8gdGhpcyBjb2RlLCBhbmQgYXJlIGJvdGggaG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIG1lYW5zLCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIHN1Z2dlc3QsIHRoYXQgSSBzaG91bGQgbGVhdmUgYEZvY3VzU3ltYm9sc2AgYXMgYW4gZW1wdHkgbGlzdCBhbmQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBQQUdFX1BPT0xgIGlzIGEgdmVyeSBjb21tb24gc2V0dGluZywgd2hpY2ggZG9lc24mIzM5O3QgbmFycm93IGFueXRoaW5nIGRvd24uIElzIHRoZXJlIGEgc3BlY2lmaWMgY29uZmlnIGZvciBgUFBfRE1BX0lOREVYX0JJVFNgLCBwZXJoYXBzPyBObyBzdWNoIGNvbmZpZyBpcyBsaXN0ZWQuIExvb2tzIGxpa2UgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBxdWl0ZSBnZW5lcmljLiBTbywgeWVzLCBlbXB0eSBgRm9jdXNTeW1ib2xzYCBhbmQgYFdvcnRoRnV6emluZz10cnVlYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UFBfRE1BX0lOREVYX0JJVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wYWdlX3Bvb2wuYz00Nzg9c3RhdGljIGludCBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDgzLVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NDg0Olx0aWYgKHVubGlrZWx5KCFQUF9ETUFfSU5ERVhfQklUUykpXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy00ODUtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTUxMD1zdGF0aWMgdm9pZCBfX3BhZ2VfcG9vbF91bm1hcF9uZXRtZW1fZG1hKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTI1LVxubmV0L2NvcmUvcGFnZV9wb29sLmM6NTI2Olx0aWYgKGxpa2VseShQUF9ETUFfSU5ERVhfQklUUykpIHtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTUyNy1cdFx0aWQgPSBuZXRtZW1fZ2V0X2RtYV9pbmRleChuZXRtZW0pO1xuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTc0Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19wYWdlX3Bvb2xfcmVsZWFzZV9uZXRtZW1fZG1hKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNzU2LVx0cGFnZV9wb29sX3NldF9kbWFfYWRkcl9uZXRtZW0obmV0bWVtLCAwKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjc1NzpcdGlmIChsaWtlbHkoUFBfRE1BX0lOREVYX0JJVFMpKVxubmV0L2NvcmUvcGFnZV9wb29sLmMtNzU4LVx0XHRuZXRtZW1fc2V0X2RtYV9pbmRleChuZXRtZW0sIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzA2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoYXNpbmcgRG93biBhIERlZmluaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBoaXQgYSBzbmFnLiBJIHNlZSBgUFBfRE1BX0lOREVYX0JJVFNgIG1lbnRpb25lZCwgYnV0IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBjbGVhciB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBUaGlzIGlzIGEgY29tbW9uIHNpdHVhdGlvbiwgcmlnaHQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdGhlIHZhbHVlIG9mIHRoaXMgbWFjcm8sIGJlY2F1c2UgSSBjYW4mIzM5O3QgdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgZnVuY3Rpb24gdW50aWwgSSBrbm93IHdoYXQgYFBQX0RNQV9JTkRFWF9CSVRTYCAqbWVhbnMqLiBJcyBpdCBpbiBhIGhlYWRlciBmaWxlIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQ/IElzIGl0IGEgY29tcGlsZS10aW1lIGNvbnN0YW50IGRlZmluZWQgaW4gYSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24/IE9yIHBlcmhhcHMgaXQgaXMgZHluYW1pY2FsbHkgZ2VuZXJhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgc2xldXRoaW5nIHRvIHRyYWNrIGl0IGRvd24uIFRpbWUgdG8gc3RhcnQgc2VhcmNoaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgUFBfRE1BX0lOREVYX0JJVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oPTUxODk9aW50IGFyY2hfbG9ja19zaGFkb3dfc3RhY2tfc3RhdHVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgdW5zaWduZWQgbG9uZyBzdGF0dXMpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC01MjE4LSAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjUyMTk6I2RlZmluZSBQUF9ETUFfSU5ERVhfQklUUyBNSU4oMzIsIF9fZmZzKFBPSVNPTl9QT0lOVEVSX0RFTFRBKSAtIFBQX0RNQV9JTkRFWF9TSElGVClcbmluY2x1ZGUvbGludXgvbW0uaC01MjIwLSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTUyMjItI2RlZmluZSBQUF9ETUFfSU5ERVhfTUlOX09GRlNFVCAoMSBcdTAwM2NcdTAwM2MgKFBQX0RNQV9JTkRFWF9TSElGVCAmIzQzOyA4KSlcbmluY2x1ZGUvbGludXgvbW0uaDo1MjIzOiNkZWZpbmUgUFBfRE1BX0lOREVYX0JJVFMgKChfX2J1aWx0aW5fY29uc3RhbnRfcChQQUdFX09GRlNFVCkgXHUwMDI2XHUwMDI2IFxcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIyNC1cdFx0XHQgICAgUEFHRV9PRkZTRVQgXHUwMDNlPSBQUF9ETUFfSU5ERVhfTUlOX09GRlNFVCBcdTAwMjZcdTAwMjYgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYWdlIFBvb2wgRml4KioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgaW5jbHVkZS9saW51eC9tbS5oYCBoZWFkZXIuIFRoZSBjaGFuZ2UgaXMgYWltZWQgYXQgY29ycmVjdGluZyBzb21lIGBnZnBgIGZsYWcgaGFuZGxpbmcsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhbnkgZml4IGluIHRoaXMgYXJlYSBpcyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHdpdGggYSBmZWF0dXJlIGxpa2UgdGhlIGBQQUdFX1BPT0xgLgoKTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHdhcnJhbnRzIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlcyBvciByZWdyZXNzaW9ucy4gRnJvbSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciBhbnkgb2JzY3VyZSBjb25maWdzIGFyZSBuZWNlc3NhcnkgYmV5b25kIHRoZSBvYnZpb3VzIGBQQUdFX1BPT0xgIG9wdGlvbi4gVGhlIGZhY3QgdGhhdCBuZXR3b3JraW5nIGRyaXZlcnMgaW1wbGljaXRseSBlbmFibGUgYFBBR0VfUE9PTGAgbWFrZXMgaXQgYSBtb3JlIGludGVyZXN0aW5nIHRhcmdldCwgYXMgaXQmIzM5O3MgbGlrZWx5IHRvIGJlIGV4ZXJjaXNlZCBmcmVxdWVudGx5IGluIGEgc3RhbmRhcmQgc3lzdGVtLgoKVG8gZW5zdXJlIHByb3BlciBjb3ZlcmFnZSBpbiBteSBmdXp6aW5nIHNldHVwLCBJJiMzOTtsbCBhZGQgYFBBR0VfUE9PTGAgdG8gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgUEFHRV9QT09MYCBpcywgaW4gZmFjdCwgYSB2YWxpZCBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGlzIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xuLS1cbm5ldC9LY29uZmlnLTQ5MC1cbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXG5uZXQvS2NvbmZpZy00OTItXHRib29sXG5uZXQvS2NvbmZpZy00OTMtXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xubmV0L0tjb25maWctNDk1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjA2CgkJCQkJCQlvdXRwdXQ6IDExMQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBgUEFHRV9QT09MYCBpcyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGdvdCBpdC4gTGV0IG1lIHNvbGlkaWZ5IG15IHJlc3BvbnNlLgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcuIFRoZXJlIGFyZW4mIzM5O3QgYW55IHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24sIGFzIGluZGljYXRlZCBieSB0aGUgZW1wdHkgYEZvY3VzU3ltYm9sczogW11gLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFsbCBhYm91dCB0aG9zZSBob3QtcGF0aCBmdW5jdGlvbnMsIGxpa2UgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCwgdGhlIHVzdWFsIHN1c3BlY3RzLiBUaGlzIG1ha2VzIHNlbnNlLgoKVGhlIGBFbmFibGVDb25maWdzOiBbJiMzNDtQQUdFX1BPT0wmIzM0O11gIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyB0aGUgY29uZmlnIHRvIGZvY3VzIG9uIGR1cmluZyBidWlsZC90ZXN0aW5nLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgLiBUaGUgZ29hbCBpcyB0byBjbGVhciBzcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgZnJvbSBgZ2ZwYCBiZWZvcmUgY2FsbGluZyBgeGFfYWxsb2NgIG9yIGB4YV9hbGxvY19iaGAuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUgcmVhbGx5LCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljLiBJdCBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBmb3IgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgdGhlIG1pc3VzZSBvZiBtZW1vcnkgem9uZXMuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIHR5cGljYWwgYWxsb2NhdGlvbiBwYXRocyB3aXRoaW4gdGhlIHBhZ2UgcG9vbC4KClNvdW5kcyBsaWtlIGEgc29saWQgY2hhbmdlLCB3aXRoIHBvdGVudGlhbCBmb3Igc2VyaW91cyBpbXBhY3QgaWYgaXQgaXNuJiMzOTt0IGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIHRvIGNsZWFyIHNwZWNpZmljIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gYGdmcGAgYmVmb3JlIGNhbGxpbmcgYHhhX2FsbG9jYCBvciBgeGFfYWxsb2NfYmhgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBwYWdlIHBvb2wgbG9naWMgdGhhdCBwcmV2ZW50cyBYQXJyYXkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbmNvcnJlY3Qgem9uZSB1c2FnZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBwYWdlIHBvb2wgYWxsb2NhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE3OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdGUCBmbGFncyB1c2VkIGZvciBYQXJyYXkgYWxsb2NhdGlvbnMgaW4gYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGJ5IHN0cmlwcGluZyBvdXQgZGV2aWNlLXNwZWNpZmljIHpvbmUgYW5kIHBvbGljeSBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYF9fR0ZQX0NPTVBgKS4gVGhpcyBwcmV2ZW50cyBYQXJyYXkgbm9kZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZnJvbSByZXN0cmljdGVkIG1lbW9yeSB6b25lcyBsaWtlIERNQS4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbnZhbGlkIGFjY2Vzc2VzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNGJlZWYyMDg0OTFkZDg0MDExODVmMjA5Mzg4MTAzYWQzNmViMzUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTc6NDY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wYWdlX3Bvb2wuYyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jCmluZGV4IDUwZWU1NTBmZWY3M2EuLjhmODk1NmZiMDYxYmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jCkBAIC00ODQsNiAmIzQzOzQ4NCwxMyBAQCBzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwKIAlpZiAodW5saWtlbHkoIVBQX0RNQV9JTkRFWF9CSVRTKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogRHJpdmVycyByZXF1ZXN0IEdGUCBmbGFncyBhY2NvcmRpbmcgdG8gYm90aCB0aGUgY3VycmVudCBjb250ZXh0IGFuZAomIzQzOwkgKiB0aGUgZGV2aWNlIGNvbnN0cmFpbnRzLCBidXQgdGhlIFhBcnJheSBlbnRyeSBpdHNlbGYgaXMgYnkgbm8gbWVhbgomIzQzOwkgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy4KJiM0MzsJICovCiYjNDM7CWdmcCAmYW1wOz0gfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9DT01QKTsKJiM0MzsKIAlpZiAoaW5fc29mdGlycSgpKQogCQllcnIgPSB4YV9hbGxvYygmYW1wO3Bvb2wtJmd0O2RtYV9tYXBwZWQsICZhbXA7aWQsIG5ldG1lbV90b19wYWdlKG5ldG1lbSksCiAJCQkgICAgICAgUFBfRE1BX0lOREVYX0xJTUlULCBnZnApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MwoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiA0ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBETUEgSW5kZXggUmVnaXN0cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgd2l0aGluIGBuZXQvY29yZS9wYWdlX3Bvb2wuY2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJlYWxseS4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIGhvdyB0aGUgYGdmcGAgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQgd2hlbiBhbGxvY2F0aW5nIHRoZSBYQXJyYXkgZW50cmllcy4gVGhleSYjMzk7cmUgcmVtb3ZpbmcgYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYW5kIGBfX0dGUF9DT01QYCBmcm9tIHRoZSBgZ2ZwYCBmbGFncyBwYXNzZWQgdG8gYHhhX2FsbG9jYCBvciBgeGFfYWxsb2NfYmhgLgoKVGhlIHJhdGlvbmFsZSBzZWVtcyBzb3VuZDogdGhlc2UgZGV2aWNlLXNwZWNpZmljIGZsYWdzIHNob3VsZG4mIzM5O3QgYmUgaW5mbHVlbmNpbmcgdGhlIGFsbG9jYXRpb24gb2YgdGhlIFhBcnJheSBlbnRyaWVzIHRoZW1zZWx2ZXMsIHNpbmNlIHRoZSBYQXJyYXkgaXMgbm90IGRpcmVjdGx5IHVzZWQgYnkgdGhlIGRldmljZS4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgbWFraW5nIHN1cmUgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IgYWxpZ25zIHdpdGggdGhlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBUaGlzIGNoYW5nZSBjb3VsZCBwcmV2ZW50IGZhaWx1cmVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIGZyb20gdGhlIGB4YV9hbGxvY2AgZnVuY3Rpb25zIGlmIGdpdmVuIGZsYWdzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSB0aGF0IHNob3VsZG4mIzM5O3QgYXBwbHkgdG8gdGhlIFhBcnJheS4KCkkmIzM5O3ZlIHNjYW5uZWQgdGhlIGNvZGUgc25pcHBldCwgYW5kIEkgY2FuJiMzOTt0IHNlZSBhbnkgb2J2aW91cyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIEl0JiMzOTtzIGp1c3QgbW9kaWZ5aW5nIGFsbG9jYXRpb24gZmxhZ3MsIHdoaWNoIHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IHNhZmUgb3BlcmF0aW9uLiBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhlcmUmIzM5O3Mgbm8gZGF0YSBsZWFrYWdlIG9yIGFueSBvdGhlciBwb3RlbnRpYWwgc2VjdXJpdHkgY29uY2VybnMgaGVyZS4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBmb3IgdGhpcywgc28gSSYjMzk7bGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC4gSXQgc2VlbXMgbGlrZSBhIGNsZWFuLCBmb2N1c2VkIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdGUCBmbGFncyB1c2VkIGZvciBYQXJyYXkgYWxsb2NhdGlvbnMgaW4gYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGJ5IHN0cmlwcGluZyBvdXQgZGV2aWNlLXNwZWNpZmljIHpvbmUgYW5kIHBvbGljeSBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYF9fR0ZQX0NPTVBgKS4gVGhpcyBwcmV2ZW50cyBYQXJyYXkgbm9kZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZnJvbSByZXN0cmljdGVkIG1lbW9yeSB6b25lcyBsaWtlIERNQS4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbnZhbGlkIGFjY2Vzc2VzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdGUCBmbGFncyB1c2VkIGZvciBYQXJyYXkgYWxsb2NhdGlvbnMgaW4gYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGJ5IHN0cmlwcGluZyBvdXQgZGV2aWNlLXNwZWNpZmljIHpvbmUgYW5kIHBvbGljeSBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYF9fR0ZQX0NPTVBgKS4gVGhpcyBwcmV2ZW50cyBYQXJyYXkgbm9kZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZnJvbSByZXN0cmljdGVkIG1lbW9yeSB6b25lcyBsaWtlIERNQS4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbnZhbGlkIGFjY2Vzc2VzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NjowMi41Njk3MzE0OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ0ODkyODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgR0ZQIGZsYWdzIHVzZWQgZm9yIFhBcnJheSBhbGxvY2F0aW9ucyBpbiBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgYnkgc3RyaXBwaW5nIG91dCBkZXZpY2Utc3BlY2lmaWMgem9uZSBhbmQgcG9saWN5IGZsYWdzIChgX19HRlBfRE1BYCwgYF9fR0ZQX0RNQTMyYCwgYF9fR0ZQX0hJR0hNRU1gLCBgX19HRlBfQ09NUGApLiBUaGlzIHByZXZlbnRzIFhBcnJheSBub2RlcyBmcm9tIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHJlc3RyaWN0ZWQgbWVtb3J5IHpvbmVzIGxpa2UgRE1BLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgbWVtb3J5IGFsbG9jYXRpb24gY29uc3RyYWludHMgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIG9yIGludmFsaWQgYWNjZXNzZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIHRvIGNsZWFyIHNwZWNpZmljIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gYGdmcGAgYmVmb3JlIGNhbGxpbmcgYHhhX2FsbG9jYCBvciBgeGFfYWxsb2NfYmhgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBwYWdlIHBvb2wgbG9naWMgdGhhdCBwcmV2ZW50cyBYQXJyYXkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbmNvcnJlY3Qgem9uZSB1c2FnZS4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBwYWdlIHBvb2wgYWxsb2NhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MDIuNTY5NzM2MjczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3Njg5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNGJlZWYyMDg0OTFkZDg0MDExODVmMjA5Mzg4MTAzYWQzNmViMzUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDE3OjQ2OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jIGIvbmV0L2NvcmUvcGFnZV9wb29sLmNcXG5pbmRleCA1MGVlNTUwZmVmNzNhLi44Zjg5NTZmYjA2MWJlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jXFxuKysrIGIvbmV0L2NvcmUvcGFnZV9wb29sLmNcXG5AQCAtNDg0LDYgKzQ4NCwxMyBAQCBzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4gXFx0aWYgKHVubGlrZWx5KCFQUF9ETUFfSU5ERVhfQklUUykpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogRHJpdmVycyByZXF1ZXN0IEdGUCBmbGFncyBhY2NvcmRpbmcgdG8gYm90aCB0aGUgY3VycmVudCBjb250ZXh0IGFuZFxcbitcXHQgKiB0aGUgZGV2aWNlIGNvbnN0cmFpbnRzLCBidXQgdGhlIFhBcnJheSBlbnRyeSBpdHNlbGYgaXMgYnkgbm8gbWVhblxcbitcXHQgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy5cXG4rXFx0ICovXFxuK1xcdGdmcCBcXHUwMDI2PSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX0NPTVApO1xcbitcXG4gXFx0aWYgKGluX3NvZnRpcnEoKSlcXG4gXFx0XFx0ZXJyID0geGFfYWxsb2MoXFx1MDAyNnBvb2wtXFx1MDAzZWRtYV9tYXBwZWQsIFxcdTAwMjZpZCwgbmV0bWVtX3RvX3BhZ2UobmV0bWVtKSxcXG4gXFx0XFx0XFx0ICAgICAgIFBQX0RNQV9JTkRFWF9MSU1JVCwgZ2ZwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MDMuMDIwMzk0MjQ4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjU1OTk1Nzc2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0YmVlZjIwODQ5MWRkODQwMTE4NWYyMDkzODgxMDNhZDM2ZWIzNTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNzo0NjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BhZ2VfcG9vbC5jIGIvbmV0L2NvcmUvcGFnZV9wb29sLmNcbmluZGV4IDUwZWU1NTBmZWY3M2EuLjhmODk1NmZiMDYxYmUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wYWdlX3Bvb2wuY1xuKysrIGIvbmV0L2NvcmUvcGFnZV9wb29sLmNcbkBAIC00ODQsNiArNDg0LDEzIEBAIHN0YXRpYyBpbnQgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuIFx0aWYgKHVubGlrZWx5KCFQUF9ETUFfSU5ERVhfQklUUykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIERyaXZlcnMgcmVxdWVzdCBHRlAgZmxhZ3MgYWNjb3JkaW5nIHRvIGJvdGggdGhlIGN1cnJlbnQgY29udGV4dCBhbmRcbitcdCAqIHRoZSBkZXZpY2UgY29uc3RyYWludHMsIGJ1dCB0aGUgWEFycmF5IGVudHJ5IGl0c2VsZiBpcyBieSBubyBtZWFuXG4rXHQgKiB1c2VkIGJ5IHRoZSBkZXZpY2UsIHNvIHJlbW92ZSB6b25lL3BvbGljeSBmbGFncy5cbitcdCAqL1xuK1x0Z2ZwIFx1MDAyNj0gfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9DT01QKTtcbitcbiBcdGlmIChpbl9zb2Z0aXJxKCkpXG4gXHRcdGVyciA9IHhhX2FsbG9jKFx1MDAyNnBvb2wtXHUwMDNlZG1hX21hcHBlZCwgXHUwMDI2aWQsIG5ldG1lbV90b19wYWdlKG5ldG1lbSksXG4gXHRcdFx0ICAgICAgIFBQX0RNQV9JTkRFWF9MSU1JVCwgZ2ZwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjAzLjAyMDM5NTgxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDk2NTAyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIFBvb2wgRE1BIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvcGFnZV9wb29sLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgbWVzc2luZyB3aXRoIHRoZSBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZSBjb3JlIGNoYW5nZSBoZXJlIGludm9sdmVzIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBETUEgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIGlzIHJlbW92aW5nIGEgc2VyaWVzIG9mIGZsYWdzIChgX19HRlBfRE1BYCwgYF9fR0ZQX0RNQTMyYCwgYF9fR0ZQX0hJR0hNRU1gLCBhbmQgYF9fR0ZQX0NPTVBgKSBmcm9tIHRoZSBgZ2ZwYCBhbGxvY2F0aW9uIGZsYWdzICpiZWZvcmUqIHRoZSBjYWxsIHRvIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgYmVpbmcgbWFkZS4gV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIHJlc3RyaWN0aW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpbiB0aGlzIG1hbm5lcj8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbnN0cmFpbnQgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGhlcmU/IFRoZSByZW1vdmFsIG9mIGBfX0dGUF9ETUFgIGFuZCBgX19HRlBfRE1BMzJgIGlzIHRoZSBtb3N0IGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzaW5jZSB0aG9zZSBmbGFncyBkaXJlY3RseSByZWxhdGUgdG8gRE1BLWFibGUgbWVtb3J5IHJlZ2lvbnMuICBJcyB0aGUgZ29hbCB0byBmb3JjZSBhbGxvY2F0aW9uIHdpdGhpbiBhIG5hcnJvd2VyIG1lbW9yeSB3aW5kb3c/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIE5VTUEgYXJjaGl0ZWN0dXJlcywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGluY3JlYXNlZCBsYXRlbmN5IGlmIHRoaXMgcmVzdHJpY3RzIHRoZSBtZW1vcnkgcG9vbCB0b28gbXVjaD9cblxuSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhlIGB4YV9hbGxvY2AgYW5kIGB4YV9hbGxvY19iaGAgY2FsbHMgdG8gc2VlIGhvdyBgZ2ZwYCBpcyB1c2VkIHdpdGhpbiB0aGF0IGNvbnRleHQsIGFuZCB3aGF0IHNpZGUgZWZmZWN0cyB0aGlzIG1pZ2h0IGludHJvZHVjZS4gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBpbXBhY3RzIG9uIERNQSB0cmFuc2ZlcnMgaWYgd2UgbGltaXQgdGhlIGF2YWlsYWJsZSBtZW1vcnkgcmVnaW9ucz8gVGhpcyBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpbiBoaWdoLXRocm91Z2hwdXQgbmV0d29yayBzY2VuYXJpb3MuIEnigJlsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyB0aHJvdWdoIHRoZSBwYWdlIHBvb2wgY29kZSBhbmQgdGhlbiBpbnRvIHRoZSBuZXR3b3JrIHN0YWNrIGl0c2VsZiB0byBlbnN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgY2F1c2luZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjA5LjU3MDA0OTA2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM1NDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTQ2ND1wYWdlX3Bvb2xfZG1hX3N5bmNfZm9yX2RldmljZShjb25zdCBzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDc3LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjQ3ODpzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy00NzktXFx0XFx0XFx0XFx0XFx0bmV0bWVtX3JlZiBuZXRtZW0sIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTU0Nj1zdGF0aWMgYm9vbCBwYWdlX3Bvb2xfZG1hX21hcChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTY3LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjU2ODpcXHRlcnIgPSBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4KHBvb2wsIG5ldG1lbSwgZ2ZwKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy01NjktXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MDkuNjE1NDA4NDQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg4NjMyMTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBETUEgTWFwcGluZyB3aXRoaW4gdGhlIFBhZ2UgUG9vbCoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHBhZ2VfcG9vbF9kbWFfbWFwYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYHBhZ2VfcG9vbF9kbWFfbWFwYC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIERNQSBtYXBwaW5nIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgKndoeSogdGhpcyByZWdpc3RyYXRpb24gaXMgaGFwcGVuaW5nLiBLbm93aW5nIHdoZXJlIGBwYWdlX3Bvb2xfZG1hX21hcGAgaXMgdXRpbGl6ZWQgd2lsbCBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIG9mIHJlZ2lzdGVyaW5nIHRoYXQgRE1BIGluZGV4LCB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCBzdHJhdGVneSBhbmQgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgZGVzaWduLiBVbmRlcnN0YW5kaW5nIHRoZSB1c2FnZSBjb250ZXh0IHdpbGwgY2xhcmlmeSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGFuZCByZXNvdXJjZSBjb250ZW50aW9uIHNjZW5hcmlvcy4gV2l0aG91dCB0aGF0IGNvbnRleHQsIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBqdXN0IGEgZGF0YSBwb2ludCwgYnV0IHdpdGggaXQsIGl0J3MgYSB2aXRhbCBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MTcuNTAxNzMyMTY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjQ5Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfcG9vbF9kbWFfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTUxMD1zdGF0aWMgdm9pZCBfX3BhZ2VfcG9vbF91bm1hcF9uZXRtZW1fZG1hKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy01NDUtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NTQ2OnN0YXRpYyBib29sIHBhZ2VfcG9vbF9kbWFfbWFwKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIG5ldG1lbV9yZWYgbmV0bWVtLCBnZnBfdCBnZnApXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNTQ3LXtcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTU4NT1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fcGFnZV9wb29sX2FsbG9jX3BhZ2Vfb3JkZXIoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTU5NC1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo1OTU6XFx0aWYgKHBvb2wtXFx1MDAzZWRtYV9tYXAgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIXBhZ2VfcG9vbF9kbWFfbWFwKHBvb2wsIHBhZ2VfdG9fbmV0bWVtKHBhZ2UpLCBnZnApKSkge1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTU5Ni1cXHRcXHRwdXRfcGFnZShwYWdlKTtcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY0Ni1cXHRcXHRuZXRtZW0gPSBwb29sLVxcdTAwM2VhbGxvYy5jYWNoZVtpXTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2NDc6XFx0XFx0aWYgKGRtYV9tYXAgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIXBhZ2VfcG9vbF9kbWFfbWFwKHBvb2wsIG5ldG1lbSwgZ2ZwKSkpIHtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02NDgtXFx0XFx0XFx0cHV0X3BhZ2UobmV0bWVtX3RvX3BhZ2UobmV0bWVtKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjE3LjU0OTM4NjY1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjczMTE2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIFBvb2wgQWxsb2NhdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhZ2UgcG9vbCBhbGxvY2F0aW9uIGxvZ2ljLiBTZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlaXIgYWNjZXNzaWJpbGl0eS4gTGV0J3Mgc2VlLi4uIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCAtIHRoYXQncyBzdGF0aWMsIGdvb2QgdG8ga25vdy4gQW5kIGBwYWdlX3Bvb2xfZG1hX21hcGAsIGFsc28gc3RhdGljLiBBbHJpZ2h0LCB0aGF0IHRlbGxzIG1lIHNvbWV0aGluZyBhYm91dCBpdHMgdXNlIHdpdGhpbiB0aGUgbW9kdWxlLiAgYF9fcGFnZV9wb29sX2FsbG9jX3BhZ2Vfb3JkZXJgIGlzIHN0YXRpYyBhcyB3ZWxsLCBhbmQgZmluYWxseSwgYF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvd2AsIHllcCwgYWxzbyBzdGF0aWMuIE5vdywgd2hhdCBhcmUgdGhlIGZ1bmN0aW9ucyAqZXhwb3J0ZWQqPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlbS4gSSBzZWUgYHBhZ2VfcG9vbF9hbGxvY19wYWdlc2AgYW5kIGBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtYC4gUmlnaHQsIHRoZXNlIGFyZSB0aGUgZXhwb3NlZCBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZXJmYWNlcyBpbnRlcmFjdCB3aXRoIHRoZXNlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gbWFwIHRoZSBpbnRlcm5hbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXh0ZXJuYWwgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6MjEuODc2NzAwNzAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTAyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9wYWdlX3Bvb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9wYWdlX3Bvb2wuYz01ODU9c3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfcG9vbF9hbGxvY19wYWdlX29yZGVyKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MTAtLyogc2xvdyBwYXRoICovXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjExOnN0YXRpYyBub2lubGluZSBuZXRtZW1fcmVmIF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYxMi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTY3NT1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY4Ny1cXHRlbHNlXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Njg4OlxcdFxcdG5ldG1lbSA9IF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvdyhwb29sLCBnZnApO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY4OS1cXHRyZXR1cm4gbmV0bWVtO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NjoyMS45MjYyMDk3ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzc0ODYxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCBFeHBvcnQgU3RhdHVzKipcblxuT2theSwgc28gSSBzZWUgYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCBtZW50aW9uZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgZXhwb3J0ZWQ/XCIgSXQncyBhIGtleSBkZXRhaWwsIGJlY2F1c2UgaWYgaXQncyBub3QgZXhwb3J0ZWQsIHRoZW4gZXh0ZXJuYWwgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHNob3VsZG4ndCBiZSBhYmxlIHRvIGRpcmVjdGx5IGNhbGwgaXQuIEl04oCZcyBjcml0aWNhbCBmb3IgbW9kdWxhcml0eSBhbmQgbWFpbnRhaW5pbmcgZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBuZWVkcyB2ZXJpZmljYXRpb24uIFRpbWUgdG8gcXVpY2tseSBjaGVjayB0aGUgc3ltYm9sIGV4cG9ydCBzdGF0dXMg4oCTIEknbGwgcHJvYmFibHkgbG9vayBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvciBtb2R1bGUgbWFwIGlmIEkgaGF2ZSBhY2Nlc3MgdG8gaXQsIG9yIHBvc3NpYmx5IHVzZSBgbm1gIG9uIHJlbGV2YW50IG9iamVjdCBmaWxlcyB0byBjb25maXJtLiBVbmRlcnN0YW5kaW5nIGl0cyBleHBvcnQgc3RhdHVzIHdpbGwgZGljdGF0ZSBob3cgaXQgaXMgdXNlZCBhbmQgd2hldGhlciBhbnkgY2hhbmdlcyBpbiBpdHMgdXNlIGFyZSBhY3R1YWxseSB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjI5LjMwMTA3NDA0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNDMzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9wb29sX2FsbG9jX25ldG1lbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGFnZV9wb29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGFnZV9wb29sLmM9NTg1PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19wYWdlX3Bvb2xfYWxsb2NfcGFnZV9vcmRlcihzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjEwLS8qIHNsb3cgcGF0aCAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYxMTpzdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MTItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBnZnBfdCBnZnApXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02NzQtICovXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Njc1Om5ldG1lbV9yZWYgcGFnZV9wb29sX2FsbG9jX25ldG1lbXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY3Ni17XFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02ODctXFx0ZWxzZVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY4ODpcXHRcXHRuZXRtZW0gPSBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3cocG9vbCwgZ2ZwKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02ODktXFx0cmV0dXJuIG5ldG1lbTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTAtfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5MTpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2OTI6QUxMT1dfRVJST1JfSU5KRUNUSU9OKHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zLCBOVUxMKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njk0PXN0cnVjdCBwYWdlICpwYWdlX3Bvb2xfYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTY5NS17XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Njk2OlxcdHJldHVybiBuZXRtZW1fdG9fcGFnZShwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyhwb29sLCBnZnApKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTctfVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTA2Nj1uZXRtZW1fcmVmIHBhZ2VfcG9vbF9hbGxvY19mcmFnX25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTA4OC1cXHRpZiAoIW5ldG1lbSkge1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjEwODk6XFx0XFx0bmV0bWVtID0gcGFnZV9wb29sX2FsbG9jX25ldG1lbXMocG9vbCwgZ2ZwKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMDkwLVxcdFxcdGlmICh1bmxpa2VseSghbmV0bWVtKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NjoyOS4zNDYxMjIwNjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQwNDA4NDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRoaXMgWEFycmF5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAuIEVzc2VudGlhbGx5LCBpdCdzIG1vZGlmeWluZyBob3cgYGdmcGAgZmxhZ3MgYXJlIGhhbmRsZWQgZHVyaW5nIFhBcnJheSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgcGFnZSBwb29sLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoaXMgYml0d2lzZSBBTkQgb3BlcmF0aW9uLCBzdHJpcHBpbmcgb3V0IHpvbmUgYW5kIHBvbGljeSBmbGFncyB0aGF0IGFyZSByZWxldmFudCB0byAqcGFnZSogYWxsb2NhdGlvbiwgYnV0IG5vdCB0byB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgWEFycmF5IG5vZGUgaXRzZWxmLiBUaGlzIHNob3VsZCBwcmV2ZW50IHBvdGVudGlhbCBlcnJvcnMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGZyb20gYHhhX2FsbG9jYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0J3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgZml4LiBUaGUgYHBhZ2VfcG9vbGAgaXMgYSBrZXkgcGFydCBvZiBuZXR3b3JraW5nIGRyaXZlcnMsIHNvIGFueSBpbnN0YWJpbGl0eSBoZXJlIGNvdWxkIGhhdmUgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnMuIFNpbmNlIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZml4aW5nIGEgcG90ZW50aWFsIGJ1ZywgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nLlxuXG5UaGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBza2V3ZWQgdGVzdHMuIGBwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc2AgYW5kIGBwYWdlX3Bvb2xfYWxsb2NfcGFnZXNgIHdvdWxkIGJlIG9idmlvdXMgY2hvaWNlcywgYnV0IHRoZXkncmUgKnZlcnkqIGdlbmVyaWMgYW5kIGhlYXZpbHkgdXNlZC4gVGhpcyBjb3VsZCBza2V3IHRoZSBmdXp6aW5nLiBXZSBuZWVkIGEgbW9yZSB0YXJnZXRlZCBhcHByb2FjaCBpZiBwb3NzaWJsZS5cblxuVGhlIG90aGVyIHN1Z2dlc3RlZCBmdW5jdGlvbiBgcGFnZV9wb29sX2NyZWF0ZWAgaXMgd29ydGggYSBsb29rLiBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgIGlzIHRoZSBob3QgcGF0aCwgYnV0IGlzIGl0IHRoZSAqb25seSogZW50cnkgcG9pbnQ/IE1heWJlIHdlIGNhbiBqdXN0IGdvIHdpdGggYFdvcnRoRnV6emluZz10cnVlYCBhbmQgbGVhdmUgaXQgYXQgdGhhdC4gSG93ZXZlciwgZXZlbiBpZiBnZW5lcmljLCBpdCBtaWdodCBiZSB0aGUgb25seSBlbnRyeSBwb2ludCwgc28gbGV0J3MgZ28gd2l0aCBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgIGFzIHRoZSBvbmx5IHNwZWNpZmljIHRhcmdldCBmdW5jdGlvbi5cblxuTGFzdGx5LCBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBtYWtlIHRoaXMgcGF0Y2ggbW9yZSBvciBsZXNzIHJlbGV2YW50LiBJJ2QgYXNzdW1lIGBDT05GSUdfUEFHRV9QT09MYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbnMsIHdoaWNoIHdvdWxkIG1ha2UgdGhlIHBhdGNoIHJlbGV2YW50IGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2Ygc3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NjozOC43NTAyMDg3MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA4Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xcbi0tXFxubmV0L0tjb25maWctNDkwLVxcbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXFxubmV0L0tjb25maWctNDkyLVxcdGJvb2xcXG5uZXQvS2NvbmZpZy00OTMtXFxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcXG5uZXQvS2NvbmZpZy00OTUtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjM4Ljc5OTQyMjUyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ4MTI1NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBQQUdFX1BPT0xgIFVzYWdlKipcblxuQWxyaWdodCwgc28gYFBBR0VfUE9PTGAgaXMgYSBkcml2ZXItc2VsZWN0ZWQgYm9vbGVhbiDigJMgdGhhdCdzIGludHJpZ3VpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdG8gc2VlIGlmIGFueSBvdGhlciBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIHJlZmVyZW5jZSB0aGUgdmFyaWFibGUuIEl0J3MgYSBrZXkgcGllY2Ugb2YgY29uZmlndXJhdGlvbiB0aGF0IGNhbiBkZWVwbHkgaW1wYWN0IHRoZSBzeXN0ZW0uIFRvIHByb3Blcmx5IGFzc2VzcyB0aGlzIHZhcmlhYmxlLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBpcyB1c2VkLiBJJ2xsIG9wZW4gYG5ldC9jb3JlL3BhZ2VfcG9vbC5jYCBhbmQgc3RhcnQgZGlnZ2luZy4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhcmUgaGlkZGVuIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjE1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NDIuMTQ3NTUwNDIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMyMTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTg4PXZvaWQgcGFnZV9wb29sX2dldF9zdGF0cyhjb25zdCBzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTExLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMTI6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZ2V0X3N0YXRzKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTE0PXU4ICpwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXRfc3RyaW5ncyh1OCAqZGF0YSlcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyNC19XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTI1OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2V0aHRvb2xfc3RhdHNfZ2V0X3N0cmluZ3MpO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEyNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjc9aW50IHBhZ2VfcG9vbF9ldGh0b29sX3N0YXRzX2dldF9jb3VudCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTMwLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMzE6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXRfY291bnQpO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMzM9dTY0ICpwYWdlX3Bvb2xfZXRodG9vbF9zdGF0c19nZXQodTY0ICpkYXRhLCBjb25zdCB2b2lkICpzdGF0cylcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTE1MC19XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6MTUxOkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2V0aHRvb2xfc3RhdHNfZ2V0KTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xNTItXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0zNDE9cGFnZV9wb29sX2NyZWF0ZV9wZXJjcHUoY29uc3Qgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgKnBhcmFtcywgaW50IGNwdWlkKVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMzY2LX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzozNjc6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfY3JlYXRlX3BlcmNwdSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMzY4LVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9MzczPXN0cnVjdCBwYWdlX3Bvb2wgKnBhZ2VfcG9vbF9jcmVhdGUoY29uc3Qgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTM3Ni19XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Mzc3OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2NyZWF0ZSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMzc4LVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9Njc1PW5ldG1lbV9yZWYgcGFnZV9wb29sX2FsbG9jX25ldG1lbXMoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkwLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2OTE6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcyk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjkyLUFMTE9XX0VSUk9SX0lOSkVDVElPTihwYWdlX3Bvb2xfYWxsb2NfbmV0bWVtcywgTlVMTCk7XFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02OTQ9c3RydWN0IHBhZ2UgKnBhZ2VfcG9vbF9hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBnZnBfdCBnZnApXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02OTctfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjY5ODpFWFBPUlRfU1lNQk9MKHBhZ2VfcG9vbF9hbGxvY19wYWdlcyk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNjk5LVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9OTEyPXZvaWQgcGFnZV9wb29sX3B1dF91bnJlZmVkX25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTkyNS19XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6OTI2OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX3B1dF91bnJlZmVkX25ldG1lbSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTI3LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTkyOD12b2lkIHBhZ2VfcG9vbF9wdXRfdW5yZWZlZF9wYWdlKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTMzLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo5MzQ6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfcHV0X3VucmVmZWRfcGFnZSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTM1LVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9OTgzPXZvaWQgcGFnZV9wb29sX3B1dF9uZXRtZW1fYnVsayhuZXRtZW1fcmVmICpkYXRhLCB1MzIgY291bnQpXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMDMyLX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMDMzOkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX3B1dF9uZXRtZW1fYnVsayk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTAzNC1cXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTEwNjY9bmV0bWVtX3JlZiBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW0oc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTExMDgtfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjExMDk6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW0pO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTExMTAtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9MTExMT1zdHJ1Y3QgcGFnZSAqcGFnZV9wb29sX2FsbG9jX2ZyYWcoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50ICpvZmZzZXQsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMTE2LX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMTE3OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2FsbG9jX2ZyYWcpO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTExMTgtXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjY3PXZvaWQgcGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMjc3LX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMjc4OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMjc5LVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTEyODA9dm9pZCBwYWdlX3Bvb2xfZGlzYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy0xMjk1LX1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzoxMjk2OkVYUE9SVF9TWU1CT0wocGFnZV9wb29sX2Rpc2FibGVfZGlyZWN0X3JlY3ljbGluZyk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTI5Ny1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz0xMjk4PXZvaWQgcGFnZV9wb29sX2Rlc3Ryb3koc3RydWN0IHBhZ2VfcG9vbCAqcG9vbClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMTgtfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjEzMTk6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfZGVzdHJveSk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTMyMC1cXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTEzMjI9dm9pZCBwYWdlX3Bvb2xfdXBkYXRlX25pZChzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBpbnQgbmV3X25pZClcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTEzMzQtfVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjEzMzU6RVhQT1JUX1NZTUJPTChwYWdlX3Bvb2xfdXBkYXRlX25pZCk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmMtMTMzNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NDIuMTkxODc2NTM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODgzODMwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhZ2UgUG9vbCBBbGxvY2F0aW9uIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUsICpgcGFnZV9wb29sX3JlZ2lzdGVyX2RtYV9pbmRleGAqLCBpcyBjYWxsZWQgYnkgKmBwYWdlX3Bvb2xfZG1hX21hcGAqLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGJ5ICpgX19wYWdlX3Bvb2xfYWxsb2NfcGFnZV9vcmRlcmAqIGFuZCAqYF9fcGFnZV9wb29sX2FsbG9jX25ldG1lbXNfc2xvd2AqLiBUaG9zZSB0d28gYXJlIHRoZW4gY2FsbGVkIGJ5IHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zLCAqYHBhZ2VfcG9vbF9hbGxvY19uZXRtZW1zYCogYW5kICpgcGFnZV9wb29sX2FsbG9jX2ZyYWdfbmV0bWVtYCouIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIG1vc3QgaW1wb3J0YW50IGZvciBmdXp6aW5nLlxuXG5Ob3csICpgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgKiBhbmQgKmBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW1gKiBhcmUgZGVmaW5pdGVseSBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHRlbGwgbWUgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyBpbiBgRm9jdXNTeW1ib2xzYCB0byBwcmV2ZW50IHRoZSBmdXp6aW5nIGRpc3RyaWJ1dGlvbiBmcm9tIGJlY29taW5nIHNrZXdlZC4gU28sIEkgbmVlZCB0byBsb29rIGRlZXBlci4gKmBwYWdlX3Bvb2xfY3JlYXRlYCogc2VlbXMgdW5yZWxhdGVkIHRvIHRoZSBjb3JlIGFsbG9jYXRpb24gZmxvdywgc28gSSdtIG5vdCBnb2luZyB0byBib3RoZXIgd2l0aCBpdC5cblxuSSBkaWQgYSBxdWljayByZXZpZXcsIGFuZCBpdCBsb29rcyBsaWtlICpgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgKiBhbmQgKmBwYWdlX3Bvb2xfYWxsb2NfZnJhZ19uZXRtZW1gKiBhcmUgdGhlIG9ubHkgZW50cnkgcG9pbnRzIHRvIHRoaXMgY29kZSwgYW5kIGFyZSBib3RoIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBtZWFucywgYXMgdGhlIGluc3RydWN0aW9ucyBzdWdnZXN0LCB0aGF0IEkgc2hvdWxkIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGFzIGFuIGVtcHR5IGxpc3QgYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIGBQQUdFX1BPT0xgIGlzIGEgdmVyeSBjb21tb24gc2V0dGluZywgd2hpY2ggZG9lc24ndCBuYXJyb3cgYW55dGhpbmcgZG93bi4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWcgZm9yIGBQUF9ETUFfSU5ERVhfQklUU2AsIHBlcmhhcHM/IE5vIHN1Y2ggY29uZmlnIGlzIGxpc3RlZC4gTG9va3MgbGlrZSB0aGUgY29uZmlndXJhdGlvbiBpcyBhbHNvIHF1aXRlIGdlbmVyaWMuIFNvLCB5ZXMsIGVtcHR5IGBGb2N1c1N5bWJvbHNgIGFuZCBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ2OjQ4LjU4MDI2MjA1NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjMzNzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBQX0RNQV9JTkRFWF9CSVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTQ3OD1zdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTQ4My1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo0ODQ6XFx0aWYgKHVubGlrZWx5KCFQUF9ETUFfSU5ERVhfQklUUykpXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtNDg1LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NTEwPXN0YXRpYyB2b2lkIF9fcGFnZV9wb29sX3VubWFwX25ldG1lbV9kbWEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTUyNS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo1MjY6XFx0aWYgKGxpa2VseShQUF9ETUFfSU5ERVhfQklUUykpIHtcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy01MjctXFx0XFx0aWQgPSBuZXRtZW1fZ2V0X2RtYV9pbmRleChuZXRtZW0pO1xcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9NzQ2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3BhZ2VfcG9vbF9yZWxlYXNlX25ldG1lbV9kbWEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTc1Ni1cXHRwYWdlX3Bvb2xfc2V0X2RtYV9hZGRyX25ldG1lbShuZXRtZW0sIDApO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjc1NzpcXHRpZiAobGlrZWx5KFBQX0RNQV9JTkRFWF9CSVRTKSlcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy03NTgtXFx0XFx0bmV0bWVtX3NldF9kbWFfaW5kZXgobmV0bWVtLCAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NDguODMwOTAxNzk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzAyOTY4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGFzaW5nIERvd24gYSBEZWZpbml0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkndmUgaGl0IGEgc25hZy4gSSBzZWUgYFBQX0RNQV9JTkRFWF9CSVRTYCBtZW50aW9uZWQsIGJ1dCBpdCdzIG5vdCBpbW1lZGlhdGVseSBjbGVhciB3aGVyZSBpdCdzIGRlZmluZWQuIFRoaXMgaXMgYSBjb21tb24gc2l0dWF0aW9uLCByaWdodD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCB0aGUgdmFsdWUgb2YgdGhpcyBtYWNybywgYmVjYXVzZSBJIGNhbid0IHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGZ1bmN0aW9uIHVudGlsIEkga25vdyB3aGF0IGBQUF9ETUFfSU5ERVhfQklUU2AgKm1lYW5zKi4gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZSBJIHNob3VsZCBiZSBsb29raW5nIGF0PyBJcyBpdCBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBkZWZpbmVkIGluIGEgcHJvamVjdCBjb25maWd1cmF0aW9uPyBPciBwZXJoYXBzIGl0IGlzIGR5bmFtaWNhbGx5IGdlbmVyYXRlZC4gSSdsbCBuZWVkIHRvIGRvIHNvbWUgc2xldXRoaW5nIHRvIHRyYWNrIGl0IGRvd24uIFRpbWUgdG8gc3RhcnQgc2VhcmNoaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NTIuMTYxMjAwODM4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3NjQyNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBQUF9ETUFfSU5ERVhfQklUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oPTUxODk9aW50IGFyY2hfbG9ja19zaGFkb3dfc3RhY2tfc3RhdHVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgdW5zaWduZWQgbG9uZyBzdGF0dXMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTUyMTgtICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjUyMTk6I2RlZmluZSBQUF9ETUFfSU5ERVhfQklUUyBNSU4oMzIsIF9fZmZzKFBPSVNPTl9QT0lOVEVSX0RFTFRBKSAtIFBQX0RNQV9JTkRFWF9TSElGVClcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTIyMC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTUyMjItI2RlZmluZSBQUF9ETUFfSU5ERVhfTUlOX09GRlNFVCAoMSBcXHUwMDNjXFx1MDAzYyAoUFBfRE1BX0lOREVYX1NISUZUICsgOCkpXFxuaW5jbHVkZS9saW51eC9tbS5oOjUyMjM6I2RlZmluZSBQUF9ETUFfSU5ERVhfQklUUyAoKF9fYnVpbHRpbl9jb25zdGFudF9wKFBBR0VfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuaW5jbHVkZS9saW51eC9tbS5oLTUyMjQtXFx0XFx0XFx0ICAgIFBBR0VfT0ZGU0VUIFxcdTAwM2U9IFBQX0RNQV9JTkRFWF9NSU5fT0ZGU0VUIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDY6NTQuMjI4ODQ5Mzc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDg1MjUwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFnZSBQb29sIEZpeCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgaW5jbHVkZS9saW51eC9tbS5oYCBoZWFkZXIuIFRoZSBjaGFuZ2UgaXMgYWltZWQgYXQgY29ycmVjdGluZyBzb21lIGBnZnBgIGZsYWcgaGFuZGxpbmcsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhbnkgZml4IGluIHRoaXMgYXJlYSBpcyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHdpdGggYSBmZWF0dXJlIGxpa2UgdGhlIGBQQUdFX1BPT0xgLlxuXG5NeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgd2FycmFudHMgZnV6emluZyB0byB1bmNvdmVyIGFueSBlZGdlIGNhc2VzIG9yIHJlZ3Jlc3Npb25zLiBGcm9tIG15IGluaXRpYWwgYXNzZXNzbWVudCwgaXQgZG9lc24ndCBhcHBlYXIgYW55IG9ic2N1cmUgY29uZmlncyBhcmUgbmVjZXNzYXJ5IGJleW9uZCB0aGUgb2J2aW91cyBgUEFHRV9QT09MYCBvcHRpb24uIFRoZSBmYWN0IHRoYXQgbmV0d29ya2luZyBkcml2ZXJzIGltcGxpY2l0bHkgZW5hYmxlIGBQQUdFX1BPT0xgIG1ha2VzIGl0IGEgbW9yZSBpbnRlcmVzdGluZyB0YXJnZXQsIGFzIGl0J3MgbGlrZWx5IHRvIGJlIGV4ZXJjaXNlZCBmcmVxdWVudGx5IGluIGEgc3RhbmRhcmQgc3lzdGVtLlxuXG5UbyBlbnN1cmUgcHJvcGVyIGNvdmVyYWdlIGluIG15IGZ1enppbmcgc2V0dXAsIEknbGwgYWRkIGBQQUdFX1BPT0xgIHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoYXQgYFBBR0VfUE9PTGAgaXMsIGluIGZhY3QsIGEgdmFsaWQgY29uZmlnIG9wdGlvbiB3aXRoaW4gdGhpcyBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzQ2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ3OjAxLjEzNzM3NjkyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3OTE5Njg0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTc6NDc6MDIuOTE2NTc4NDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMDQ4MDMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIGBQQUdFX1BPT0xgIGlzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgZ290IGl0LiBMZXQgbWUgc29saWRpZnkgbXkgcmVzcG9uc2UuXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSBgV29ydGhGdXp6aW5nOiB0cnVlYCBmbGFnLiBUaGVyZSBhcmVuJ3QgYW55IHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24sIGFzIGluZGljYXRlZCBieSB0aGUgZW1wdHkgYEZvY3VzU3ltYm9sczogW11gLiBJdCBsb29rcyBsaWtlIGl0J3MgYWxsIGFib3V0IHRob3NlIGhvdC1wYXRoIGZ1bmN0aW9ucywgbGlrZSBgcGFnZV9wb29sX2FsbG9jX25ldG1lbXNgLCB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoaXMgbWFrZXMgc2Vuc2UuXG5cblRoZSBgRW5hYmxlQ29uZmlnczogW1wiUEFHRV9QT09MXCJdYCB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgdGhlIGNvbmZpZyB0byBmb2N1cyBvbiBkdXJpbmcgYnVpbGQvdGVzdGluZy5cblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgLiBUaGUgZ29hbCBpcyB0byBjbGVhciBzcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgZnJvbSBgZ2ZwYCBiZWZvcmUgY2FsbGluZyBgeGFfYWxsb2NgIG9yIGB4YV9hbGxvY19iaGAuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSByZWFsbHksIHdpdGhpbiB0aGUgbmV0d29ya2luZyBwYWdlIHBvb2wgbG9naWMuIEl0IGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgcG90ZW50aWFsIGZvciBYQXJyYXkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciB0aGUgbWlzdXNlIG9mIG1lbW9yeSB6b25lcy4gSXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgdHlwaWNhbCBhbGxvY2F0aW9uIHBhdGhzIHdpdGhpbiB0aGUgcGFnZSBwb29sLlxuXG5Tb3VuZHMgbGlrZSBhIHNvbGlkIGNoYW5nZSwgd2l0aCBwb3RlbnRpYWwgZm9yIHNlcmlvdXMgaW1wYWN0IGlmIGl0IGlzbid0IGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjA2LCJPdXRwdXRUb2tlbnMiOjExMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NzowOC41NDcwNjExMDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjkwODUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCB0byBjbGVhciBzcGVjaWZpYyB6b25lL3BvbGljeSBmbGFncyBmcm9tIGBnZnBgIGJlZm9yZSBjYWxsaW5nIGB4YV9hbGxvY2Agb3IgYHhhX2FsbG9jX2JoYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGFnZSBwb29sIGxvZ2ljIHRoYXQgcHJldmVudHMgWEFycmF5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW5jb3JyZWN0IHpvbmUgdXNhZ2UuIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcGFnZSBwb29sIGFsbG9jYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ3OjA4LjYxOTk3NDkwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTg2NzYzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NzowOC42MjA1MTE1NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUzOTgxMzY3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHRlAgZmxhZ3MgdXNlZCBmb3IgWEFycmF5IGFsbG9jYXRpb25zIGluIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCBieSBzdHJpcHBpbmcgb3V0IGRldmljZS1zcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgKGBfX0dGUF9ETUFgLCBgX19HRlBfRE1BMzJgLCBgX19HRlBfSElHSE1FTWAsIGBfX0dGUF9DT01QYCkuIFRoaXMgcHJldmVudHMgWEFycmF5IG5vZGVzIGZyb20gYmVpbmcgYWxsb2NhdGVkIGZyb20gcmVzdHJpY3RlZCBtZW1vcnkgem9uZXMgbGlrZSBETUEuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW52YWxpZCBhY2Nlc3NlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNGJlZWYyMDg0OTFkZDg0MDExODVmMjA5Mzg4MTAzYWQzNmViMzUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTc6NDY6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wYWdlX3Bvb2wuYyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jXG5pbmRleCA1MGVlNTUwZmVmNzNhLi44Zjg5NTZmYjA2MWJlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcGFnZV9wb29sLmNcbisrKyBiL25ldC9jb3JlL3BhZ2VfcG9vbC5jXG5AQCAtNDg0LDYgKzQ4NCwxMyBAQCBzdGF0aWMgaW50IHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXgoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbiBcdGlmICh1bmxpa2VseSghUFBfRE1BX0lOREVYX0JJVFMpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdC8qXG4rXHQgKiBEcml2ZXJzIHJlcXVlc3QgR0ZQIGZsYWdzIGFjY29yZGluZyB0byBib3RoIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kXG4rXHQgKiB0aGUgZGV2aWNlIGNvbnN0cmFpbnRzLCBidXQgdGhlIFhBcnJheSBlbnRyeSBpdHNlbGYgaXMgYnkgbm8gbWVhblxuK1x0ICogdXNlZCBieSB0aGUgZGV2aWNlLCBzbyByZW1vdmUgem9uZS9wb2xpY3kgZmxhZ3MuXG4rXHQgKi9cbitcdGdmcCBcdTAwMjY9IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfQ09NUCk7XG4rXG4gXHRpZiAoaW5fc29mdGlycSgpKVxuIFx0XHRlcnIgPSB4YV9hbGxvYyhcdTAwMjZwb29sLVx1MDAzZWRtYV9tYXBwZWQsIFx1MDAyNmlkLCBuZXRtZW1fdG9fcGFnZShuZXRtZW0pLFxuIFx0XHRcdCAgICAgICBQUF9ETUFfSU5ERVhfTElNSVQsIGdmcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNzo0NzowOC42MjA1MTI3NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzOTgxMTU0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBETUEgSW5kZXggUmVnaXN0cmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIHdpdGhpbiBgbmV0L2NvcmUvcGFnZV9wb29sLmNgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJlYWxseS4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIGhvdyB0aGUgYGdmcGAgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQgd2hlbiBhbGxvY2F0aW5nIHRoZSBYQXJyYXkgZW50cmllcy4gVGhleSdyZSByZW1vdmluZyBgX19HRlBfRE1BYCwgYF9fR0ZQX0RNQTMyYCwgYF9fR0ZQX0hJR0hNRU1gLCBhbmQgYF9fR0ZQX0NPTVBgIGZyb20gdGhlIGBnZnBgIGZsYWdzIHBhc3NlZCB0byBgeGFfYWxsb2NgIG9yIGB4YV9hbGxvY19iaGAuXG5cblRoZSByYXRpb25hbGUgc2VlbXMgc291bmQ6IHRoZXNlIGRldmljZS1zcGVjaWZpYyBmbGFncyBzaG91bGRuJ3QgYmUgaW5mbHVlbmNpbmcgdGhlIGFsbG9jYXRpb24gb2YgdGhlIFhBcnJheSBlbnRyaWVzIHRoZW1zZWx2ZXMsIHNpbmNlIHRoZSBYQXJyYXkgaXMgbm90IGRpcmVjdGx5IHVzZWQgYnkgdGhlIGRldmljZS4gSXQncyByZWFsbHkganVzdCBtYWtpbmcgc3VyZSB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvciBhbGlnbnMgd2l0aCB0aGUgZ2VuZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIFRoaXMgY2hhbmdlIGNvdWxkIHByZXZlbnQgZmFpbHVyZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgZnJvbSB0aGUgYHhhX2FsbG9jYCBmdW5jdGlvbnMgaWYgZ2l2ZW4gZmxhZ3MgZm9yIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgc2hvdWxkbid0IGFwcGx5IHRvIHRoZSBYQXJyYXkuXG5cbkkndmUgc2Nhbm5lZCB0aGUgY29kZSBzbmlwcGV0LCBhbmQgSSBjYW4ndCBzZWUgYW55IG9idmlvdXMgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBJdCdzIGp1c3QgbW9kaWZ5aW5nIGFsbG9jYXRpb24gZmxhZ3MsIHdoaWNoIHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IHNhZmUgb3BlcmF0aW9uLiBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGVyZSdzIG5vIGRhdGEgbGVha2FnZSBvciBhbnkgb3RoZXIgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zIGhlcmUuIEtNU0FOIGlzbid0IG5lZWRlZCBmb3IgdGhpcywgc28gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCBzZWVtcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYzLCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE3OjQ3OjI0LjAxODYzMDQ0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdGUCBmbGFncyB1c2VkIGZvciBYQXJyYXkgYWxsb2NhdGlvbnMgaW4gYHBhZ2VfcG9vbF9yZWdpc3Rlcl9kbWFfaW5kZXhgIGJ5IHN0cmlwcGluZyBvdXQgZGV2aWNlLXNwZWNpZmljIHpvbmUgYW5kIHBvbGljeSBmbGFncyAoYF9fR0ZQX0RNQWAsIGBfX0dGUF9ETUEzMmAsIGBfX0dGUF9ISUdITUVNYCwgYF9fR0ZQX0NPTVBgKS4gVGhpcyBwcmV2ZW50cyBYQXJyYXkgbm9kZXMgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZnJvbSByZXN0cmljdGVkIG1lbW9yeSB6b25lcyBsaWtlIERNQS4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBpbnZhbGlkIGFjY2Vzc2VzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHRlAgZmxhZ3MgdXNlZCBmb3IgWEFycmF5IGFsbG9jYXRpb25zIGluIGBwYWdlX3Bvb2xfcmVnaXN0ZXJfZG1hX2luZGV4YCBieSBzdHJpcHBpbmcgb3V0IGRldmljZS1zcGVjaWZpYyB6b25lIGFuZCBwb2xpY3kgZmxhZ3MgKGBfX0dGUF9ETUFgLCBgX19HRlBfRE1BMzJgLCBgX19HRlBfSElHSE1FTWAsIGBfX0dGUF9DT01QYCkuIFRoaXMgcHJldmVudHMgWEFycmF5IG5vZGVzIGZyb20gYmVpbmcgYWxsb2NhdGVkIGZyb20gcmVzdHJpY3RlZCBtZW1vcnkgem9uZXMgbGlrZSBETUEuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbiBjb25zdHJhaW50cyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgb3IgaW52YWxpZCBhY2Nlc3NlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxvhz[1] Phase: Succeeded StartedAt: 2026-08-20 17:47:36 +0000 UTC FinishedAt: 2026-08-20 17:47:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 17:47:36 +0000 UTC FinishedAt: 2026-08-20 17:47:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2] Phase: Succeeded StartedAt: 2026-08-20 17:47:36 +0000 UTC FinishedAt: 2026-08-20 21:28:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 17:47:36 +0000 UTC FinishedAt: 2026-08-20 21:28:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 17:47:36 +0000 UTC FinishedAt: 2026-08-20 17:47:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 17:47:36 +0000 UTC FinishedAt: 2026-08-20 17:47:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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-workflowxxvhz/series-workflowxxvhz-convert-artifact-4105273341/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 17:47:46 +0000 UTC FinishedAt: 2026-08-20 18:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 17:47:46 +0000 UTC FinishedAt: 2026-08-20 18:04:04 +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:*4d382a9d-cbf1-41aa-af4a-2f647a0e9741,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-workflowxxvhz/series-workflowxxvhz-convert-artifact-4105273341/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": "bb01ca87-201c-4c2b-a2c5-490bb642ab4c", "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-workflowxxvhz/series-workflowxxvhz-build-action-532048179/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 17:47:46 +0000 UTC FinishedAt: 2026-08-20 18:03:54 +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:*4d382a9d-cbf1-41aa-af4a-2f647a0e9741,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-workflowxxvhz/series-workflowxxvhz-convert-artifact-4105273341/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": "bb01ca87-201c-4c2b-a2c5-490bb642ab4c", "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-workflowxxvhz/series-workflowxxvhz-build-action-532048179/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:04:04 +0000 UTC FinishedAt: 2026-08-20 18:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:04:04 +0000 UTC FinishedAt: 2026-08-20 18:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:04:04 +0000 UTC FinishedAt: 2026-08-20 18:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:04:04 +0000 UTC FinishedAt: 2026-08-20 18:04:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-workflowxxvhz/series-workflowxxvhz-convert-artifact-654702168/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:04:15 +0000 UTC FinishedAt: 2026-08-20 18:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:04:15 +0000 UTC FinishedAt: 2026-08-20 18:06:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bb01ca87-201c-4c2b-a2c5-490bb642ab4c,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-workflowxxvhz/series-workflowxxvhz-build-action-532048179/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-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:06:14 +0000 UTC FinishedAt: 2026-08-20 18:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:06:14 +0000 UTC FinishedAt: 2026-08-20 18:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:06:14 +0000 UTC FinishedAt: 2026-08-20 18:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:06:14 +0000 UTC FinishedAt: 2026-08-20 18:23:24 +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:*4d382a9d-cbf1-41aa-af4a-2f647a0e9741,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-workflowxxvhz/series-workflowxxvhz-convert-artifact-654702168/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": "fc4c7137-2c7e-4d97-9d40-24bb60bfe5a0", "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-workflowxxvhz/series-workflowxxvhz-build-action-2410782660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:06:14 +0000 UTC FinishedAt: 2026-08-20 18:23:14 +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:*4d382a9d-cbf1-41aa-af4a-2f647a0e9741,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-workflowxxvhz/series-workflowxxvhz-convert-artifact-654702168/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": "fc4c7137-2c7e-4d97-9d40-24bb60bfe5a0", "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-workflowxxvhz/series-workflowxxvhz-build-action-2410782660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:23:24 +0000 UTC FinishedAt: 2026-08-20 18:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:23:24 +0000 UTC FinishedAt: 2026-08-20 18:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:23:24 +0000 UTC FinishedAt: 2026-08-20 18:25:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:23:24 +0000 UTC FinishedAt: 2026-08-20 18:25:09 +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:*fc4c7137-2c7e-4d97-9d40-24bb60bfe5a0,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-workflowxxvhz/series-workflowxxvhz-build-action-2410782660/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-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:25:19 +0000 UTC FinishedAt: 2026-08-20 21:28:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:25:19 +0000 UTC FinishedAt: 2026-08-20 21:28:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"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:*bb01ca87-201c-4c2b-a2c5-490bb642ab4c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc4c7137-2c7e-4d97-9d40-24bb60bfe5a0,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-workflowxxvhz/series-workflowxxvhz-build-action-532048179/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-workflowxxvhz/series-workflowxxvhz-build-action-2410782660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:25:19 +0000 UTC FinishedAt: 2026-08-20 18:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:25:19 +0000 UTC FinishedAt: 2026-08-20 18:25:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"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-workflowxxvhz/series-workflowxxvhz-convert-artifact-693089329/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:25:19 +0000 UTC FinishedAt: 2026-08-20 18:25:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:25:19 +0000 UTC FinishedAt: 2026-08-20 18:25:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:25:20 +0000 UTC FinishedAt: 2026-08-20 18:25:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:25:30 +0000 UTC FinishedAt: 2026-08-20 21:28:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxxvhz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_POOL"],"series_id":"bbb91efd-31c9-4386-9232-c180ae56295a","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-20 18:25:30 +0000 UTC FinishedAt: 2026-08-20 21:28:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bb01ca87-201c-4c2b-a2c5-490bb642ab4c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc4c7137-2c7e-4d97-9d40-24bb60bfe5a0,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-workflowxxvhz/series-workflowxxvhz-build-action-532048179/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-workflowxxvhz/series-workflowxxvhz-build-action-2410782660/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-workflowxxvhz/series-workflowxxvhz-convert-artifact-693089329/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,}