Name: series-workflowkxk5j Phase: Succeeded StartedAt: 2026-08-14 12:58:14 +0000 UTC FinishedAt: 2026-08-14 17:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[0] Phase: Succeeded StartedAt: 2026-08-14 12:58:14 +0000 UTC FinishedAt: 2026-08-14 13:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 12:58:14 +0000 UTC FinishedAt: 2026-08-14 13:57:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QUOTA", "QFMT_V2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QUOTA", "QFMT_V2" ], "series_id": "ef71218b-224e-4950-b136-23df16ad7fb8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "dquot_set_dqinfo", "dquot_alloc_inode", "__dquot_transfer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtRRk1UX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHF1b3Rfc2V0X2RxaW5mbyYjMzQ7LAogICAgJiMzNDtkcXVvdF9hbGxvY19pbm9kZSYjMzQ7LAogICAgJiMzNDtfX2RxdW90X3RyYW5zZmVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnLCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIHdpdGggdjIgcXVvdGEgZm9ybWF0cy4gSXQgbW9kaWZpZXMgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgdG8gd3JpdGUgdGhpcyBmbGFnIHRvIGRpc2suIFRoZSBgc3RydWN0IHYyX2Rpc2tfZHFpbmZvYCB3cml0dGVuIHRvIGRpc2sgY29uc2lzdHMgb2YgNiBgX19sZTMyYCBmaWVsZHMsIGFsbCBvZiB3aGljaCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBxdW90YV93cml0ZWAgY2FsbC4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciBkaXNrLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5hYmxlcyB0aGUgRFFGX1JPT1RfU1FVQVNIIGZsYWcgZm9yIHYyIHF1b3RhIGZvcm1hdHMsIHJlbW92aW5nIGEgY2hlY2sgdGhhdCByZXN0cmljdGVkIGl0IHRvIHYxIGZvcm1hdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcXVvdGEgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgbGltaXRzIGFyZSBlbmZvcmNlZCBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NDZkNGRjOGU1NWQ1MTU5MjdhZTJmNmFjNTVhYjRjNmYxYmQ3NDE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6NDU6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmNcbmluZGV4IDk4NTBkZTM5NTVkMzEuLmU0MzFlNzJkZmVhODAgMTAwNjQ0XG4tLS0gYS9mcy9xdW90YS9kcXVvdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9xdW90YS9kcXVvdC5jXG5AQCAtMTMwOSw4ICYjNDM7MTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuIFx0c3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBcdTAwMjZzYl9kcW9wdChkcXVvdC1cdTAwM2VkcV9zYiktXHUwMDNlaW5mb1tkcXVvdC1cdTAwM2VkcV9pZC50eXBlXTtcbiBcbiBcdHJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIChpbmZvLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxuLVx0XHQhKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpKTtcbiYjNDM7XHQgICAgICAgIShpbmZvLVx1MDAzZWRxaV9mbGFncyBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcbiB9XG4gXG4gc3RhdGljIGludCBkcXVvdF9hZGRfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLFxuQEAgLTI5MDAsMTEgJiM0MzsyODk5LDYgQEAgaW50IGRxdW90X3NldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBxY19pbmZvICppaSlcbiBcdGlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXHRtaSA9IHNiX2Rxb3B0KHNiKS1cdTAwM2VpbmZvICYjNDM7IHR5cGU7XG4tXHRpZiAoaWktXHUwMDNlaV9maWVsZG1hc2sgXHUwMDI2IFFDX0ZMQUdTKSB7XG4tXHRcdGlmICgoaWktXHUwMDNlaV9mbGFncyBcdTAwMjYgUUNJX1JPT1RfU1FVQVNIIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIG1pLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXHRzcGluX2xvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbiBcdGlmIChpaS1cdTAwM2VpX2ZpZWxkbWFzayBcdTAwMjYgUUNfU1BDX1RJTUVSKVxuIFx0XHRtaS1cdTAwM2VkcWlfYmdyYWNlID0gaWktXHUwMDNlaV9zcGNfdGltZWxpbWl0O1xuZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhX3YyLmMgYi9mcy9xdW90YS9xdW90YV92Mi5jXG5pbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NFxuLS0tIGEvZnMvcXVvdGEvcXVvdGFfdjIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcXVvdGEvcXVvdGFfdjIuY1xuQEAgLTE0Miw4ICYjNDM7MTQyLDcgQEAgc3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbiBcdH1cbiBcdGluZm8tXHUwMDNlZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpO1xuIFx0aW5mby1cdTAwM2VkcWlfaWdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2lncmFjZSk7XG4tXHQvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovXG4tXHRpbmZvLVx1MDAzZWRxaV9mbGFncyA9IDA7XG4mIzQzO1x0aW5mby1cdTAwM2VkcWlfZmxhZ3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfZmxhZ3MpIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0g7XG4gXHRxaW5mby1cdTAwM2VkcWlfc2IgPSBzYjtcbiBcdHFpbmZvLVx1MDAzZWRxaV90eXBlID0gdHlwZTtcbiBcdHFpbmZvLVx1MDAzZWRxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTtcbkBAIC0yMDksOCAmIzQzOzIwOCw3IEBAIHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuIFx0aW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2PSB+RFFGX0lORk9fRElSVFk7XG4gXHRkaW5mby5kcWlfYmdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfYmdyYWNlKTtcbiBcdGRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLVx1MDAzZWRxaV9pZ3JhY2UpO1xuLVx0LyogTm8gZmxhZ3MgY3VycmVudGx5IHN1cHBvcnRlZCAqL1xuLVx0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2IERRRl9ST09UX1NRVUFTSCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZkcV9kYXRhX2xvY2spO1xuIFx0ZGluZm8uZHFpX2Jsb2NrcyA9IGNwdV90b19sZTMyKHFpbmZvLVx1MDAzZWRxaV9ibG9ja3MpO1xuIFx0ZGluZm8uZHFpX2ZyZWVfYmxrID0gY3B1X3RvX2xlMzIocWluZm8tXHUwMDNlZHFpX2ZyZWVfYmxrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXG5pbmRleCA1MjA5MDEwNWI4MjgyLi5hMzRmNDM1MTlhZjgwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXG5AQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBlbnVtIHtcbiBcdERRRl9QUklWQVRFXG4gfTtcbiBcbi0vKiBSb290IHNxdWFzaCBlbmFibGVkIChmb3IgdjEgcXVvdGEgZm9ybWF0KSAqL1xuJiM0MzsvKiBFbmZvcmNlIGxpbWl0cyBhbHNvIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3NlcyAqL1xuICNkZWZpbmUgRFFGX1JPT1RfU1FVQVNIXHQoMSBcdTAwM2NcdTAwM2MgRFFGX1JPT1RfU1FVQVNIX0IpXG4gLyogUXVvdGEgc3RvcmVkIGluIGEgc3lzdGVtIGZpbGUgKi9cbiAjZGVmaW5lIERRRl9TWVNfRklMRVx0KDEgXHUwMDNjXHUwMDNjIERRRl9TWVNfRklMRV9CKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVVPVEEmIzM0OywKICAgICYjMzQ7UUZNVF9WMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RxdW90X3NldF9kcWluZm8mIzM0OywKICAgICYjMzQ7ZHF1b3RfYWxsb2NfaW5vZGUmIzM0OywKICAgICYjMzQ7X19kcXVvdF90cmFuc2ZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRoZSBEUUZfUk9PVF9TUVVBU0ggZmxhZyBmb3IgdjIgcXVvdGEgZm9ybWF0cywgcmVtb3ZpbmcgYSBjaGVjayB0aGF0IHJlc3RyaWN0ZWQgaXQgdG8gdjEgZm9ybWF0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBxdW90YSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBsaW1pdHMgYXJlIGVuZm9yY2VkIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU0NmQ0ZGM4ZTU1ZDUxNTkyN2FlMmY2YWM1NWFiNGM2ZjFiZDc0MTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzo0NToxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jCmluZGV4IDk4NTBkZTM5NTVkMzEuLmU0MzFlNzJkZmVhODAgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL2RxdW90LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcXVvdGEvZHF1b3QuYwpAQCAtMTMwOSw4ICYjNDM7MTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQogCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gJmFtcDtzYl9kcW9wdChkcXVvdC0mZ3Q7ZHFfc2IpLSZndDtpbmZvW2RxdW90LSZndDtkcV9pZC50eXBlXTsKIAogCXJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpICZhbXA7JmFtcDsKLQkgICAgICAgKGluZm8tJmd0O2RxaV9mb3JtYXQtJmd0O3FmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQgfHwKLQkJIShpbmZvLSZndDtkcWlfZmxhZ3MgJmFtcDsgRFFGX1JPT1RfU1FVQVNIKSk7CiYjNDM7CSAgICAgICAhKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpOwogfQogCiBzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsCkBAIC0yOTAwLDExICYjNDM7Mjg5OSw2IEBAIGludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpCiAJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkKIAkJcmV0dXJuIC1FU1JDSDsKIAltaSA9IHNiX2Rxb3B0KHNiKS0mZ3Q7aW5mbyAmIzQzOyB0eXBlOwotCWlmIChpaS0mZ3Q7aV9maWVsZG1hc2sgJmFtcDsgUUNfRkxBR1MpIHsKLQkJaWYgKChpaS0mZ3Q7aV9mbGFncyAmYW1wOyBRQ0lfUk9PVF9TUVVBU0ggJmFtcDsmYW1wOwotCQkgICAgIG1pLSZndDtkcWlfZm9ybWF0LSZndDtxZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KIAlzcGluX2xvY2soJmFtcDtkcV9kYXRhX2xvY2spOwogCWlmIChpaS0mZ3Q7aV9maWVsZG1hc2sgJmFtcDsgUUNfU1BDX1RJTUVSKQogCQltaS0mZ3Q7ZHFpX2JncmFjZSA9IGlpLSZndDtpX3NwY190aW1lbGltaXQ7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92Mi5jIGIvZnMvcXVvdGEvcXVvdGFfdjIuYwppbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YV92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKQEAgLTE0Miw4ICYjNDM7MTQyLDcgQEAgc3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKIAl9CiAJaW5mby0mZ3Q7ZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpOwogCWluZm8tJmd0O2RxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTsKLQkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0JaW5mby0mZ3Q7ZHFpX2ZsYWdzID0gMDsKJiM0MzsJaW5mby0mZ3Q7ZHFpX2ZsYWdzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZsYWdzKSAmYW1wOyBEUUZfUk9PVF9TUVVBU0g7CiAJcWluZm8tJmd0O2RxaV9zYiA9IHNiOwogCXFpbmZvLSZndDtkcWlfdHlwZSA9IHR5cGU7CiAJcWluZm8tJmd0O2RxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTsKQEAgLTIwOSw4ICYjNDM7MjA4LDcgQEAgc3RhdGljIGludCB2Ml93cml0ZV9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCiAJaW5mby0mZ3Q7ZHFpX2ZsYWdzICZhbXA7PSB+RFFGX0lORk9fRElSVFk7CiAJZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tJmd0O2RxaV9iZ3JhY2UpOwogCWRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLSZndDtkcWlfaWdyYWNlKTsKLQkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0JZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoMCk7CiYjNDM7CWRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpOwogCXNwaW5fdW5sb2NrKCZhbXA7ZHFfZGF0YV9sb2NrKTsKIAlkaW5mby5kcWlfYmxvY2tzID0gY3B1X3RvX2xlMzIocWluZm8tJmd0O2RxaV9ibG9ja3MpOwogCWRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLSZndDtkcWlfZnJlZV9ibGspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAppbmRleCA1MjA5MDEwNWI4MjgyLi5hMzRmNDM1MTlhZjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaApAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBlbnVtIHsKIAlEUUZfUFJJVkFURQogfTsKIAotLyogUm9vdCBzcXVhc2ggZW5hYmxlZCAoZm9yIHYxIHF1b3RhIGZvcm1hdCkgKi8KJiM0MzsvKiBFbmZvcmNlIGxpbWl0cyBhbHNvIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3NlcyAqLwogI2RlZmluZSBEUUZfUk9PVF9TUVVBU0gJKDEgJmx0OyZsdDsgRFFGX1JPT1RfU1FVQVNIX0IpCiAvKiBRdW90YSBzdG9yZWQgaW4gYSBzeXN0ZW0gZmlsZSAqLwogI2RlZmluZSBEUUZfU1lTX0ZJTEUJKDEgJmx0OyZsdDsgRFFGX1NZU19GSUxFX0IpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUXVvdGEgU3lzdGVtIEVuaGFuY2VtZW50OiBFbmFibGluZyBSb290IFNxdWFzaCBmb3IgdjIgRm9ybWF0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzaWduaWZpY2FudCwgYWxiZWl0IHN1YnRsZSwgY2hhbmdlIHRvIGhvdyBxdW90YXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBgZnMvcXVvdGEvZHF1b3QuY2AgYW5kIGBmcy9xdW90YS9xdW90YV92Mi5jYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgcmVzdHJpY3RlZCB0aGUgYERRRl9ST09UX1NRVUFTSGAgZmxhZyB0byB0aGUgb2xkZXIgdjEgcXVvdGEgZm9ybWF0IChgUUZNVF9WRlNfT0xEYCkuIE5vdywgdGhlIHBhdGNoIGlzIG9wZW5pbmcgaXQgdXAsIGFsbG93aW5nIGBEUUZfUk9PVF9TUVVBU0hgIHRvIGJlIHN1cHBvcnRlZCBmb3IgdGhlIHYyIHF1b3RhIGZvcm1hdCBhcyB3ZWxsLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlLCBtYWtlcyB0aGluZ3MgbW9yZSBjb25zaXN0ZW50LiBUaGUgYHYyX3JlYWRfZmlsZV9pbmZvYCBhbmQgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgZnVuY3Rpb25zIGluIGBxdW90YV92Mi5jYCBhcmUgd2hlcmUgdGhhdCBzdXBwb3J0IGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKVGhlIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaGAgaXMgYSBuaWNlIHRvdWNoLCB0b28uIEluc3RlYWQgb2YgdGhlIHYxIHNwZWNpZmljIHdvcmRpbmcgYWJvdXQgJiMzNDtSb290IHNxdWFzaCBlbmFibGVkJiMzNDssIGl0IG5vdyBzYXlzICYjMzQ7RW5mb3JjZSBsaW1pdHMgYWxzbyBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMsJiMzNDsgd2hpY2ggaXMgYSBmYXIgbW9yZSBnZW5lcmFsIGFuZCBhY2N1cmF0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIFRoZSBwYXRjaCBtb2RpZmllcyBrZXkgZnVuY3Rpb25zIGxpa2UgYGlnbm9yZV9oYXJkbGltaXRgLCBgZHF1b3Rfc2V0X2RxaW5mb2AsIGB2Ml9yZWFkX2ZpbGVfaW5mb2AsIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYC4gU28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBkaWcgZGVlcGVyLgoKVGltZSB0byBsb29rIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIHRoaXMgc3R1ZmYuIEkgYmV0IGBmcy9xdW90YS9LY29uZmlnYCB3aWxsIGhhdmUgdGhlIGtleXMuIFByb2JhYmx5IGBDT05GSUdfUVVPVEFgIGFuZCBgQ09ORklHX1FVT1RBX1YyYC4gSSYjMzk7bGwgdmVyaWZ5IHRoZXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRVU9UQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvS2NvbmZpZy01LVxuZnMvcXVvdGEvS2NvbmZpZzo2OmNvbmZpZyBRVU9UQVxuZnMvcXVvdGEvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRdW90YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvcXVvdGEvS2NvbmZpZy0xOS1cbmZzL3F1b3RhL0tjb25maWc6MjA6Y29uZmlnIFFVT1RBX05FVExJTktfSU5URVJGQUNFXG5mcy9xdW90YS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtSZXBvcnQgcXVvdGEgbWVzc2FnZXMgdGhyb3VnaCBuZXRsaW5rIGludGVyZmFjZVwmIzM0O1xuLS1cbmZzL3F1b3RhL0tjb25maWc9Mjg9Y29uZmlnIFBSSU5UX1FVT1RBX1dBUk5JTkdcbi0tXG5mcy9xdW90YS9LY29uZmlnLTM3LVxuZnMvcXVvdGEvS2NvbmZpZzozODpjb25maWcgUVVPVEFfREVCVUdcbmZzL3F1b3RhL0tjb25maWctMzktXHRib29sIFwmIzM0O0FkZGl0aW9uYWwgcXVvdGEgc2FuaXR5IGNoZWNrc1wmIzM0O1xuLS1cbmZzL3F1b3RhL0tjb25maWctNDYtIyBHZW5lcmljIHN1cHBvcnQgZm9yIHRyZWUgc3RydWN0dXJlZCBxdW90YSBmaWxlcy4gU2VsZWN0ZWQgd2hlbiBuZWVkZWQuXG5mcy9xdW90YS9LY29uZmlnOjQ3OmNvbmZpZyBRVU9UQV9UUkVFXG5mcy9xdW90YS9LY29uZmlnLTQ4LVx0IHRyaXN0YXRlXG4tLVxuZnMvcXVvdGEvS2NvbmZpZz01OD1jb25maWcgUUZNVF9WMlxuLS1cbmZzL3F1b3RhL0tjb25maWctNjctXG5mcy9xdW90YS9LY29uZmlnOjY4OmNvbmZpZyBRVU9UQUNUTFxuZnMvcXVvdGEvS2NvbmZpZy02OS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTQ4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBc3Nlc3NpbmcgUUZNVF9WMioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGxpa2VseSB0byBldmFsdWF0ZSBzb21lIG5ldyBjb2RlLCBtYXliZSBhbiBpbXBsZW1lbnRhdGlvbiwgb3Igc29tZSBwaWVjZSBvZiB0ZWNobm9sb2d5IHRoYXQgaXMgYmFzZWQgb24gdGhlIHByb3RvY29sIGBRRk1UX1YyYC4gSSB3YW50IHRvIHN0YXJ0IGJ5IG1ha2luZyBzdXJlIEkmIzM5O20gdXNpbmcgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uLCBzbyBJIHdpbGwgc3RhcnQgYnkgZG91YmxlIGNoZWNraW5nIGl0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgUUZNVF9WMmAuIEhvcGVmdWxseSwgaXQmIzM5O3MgYSBrbm93biBxdWFudGl0eS4gSXQgbWF5IGJlIGhlbHBmdWwgdG8gcmVjYWxsIGl0cyBmZWF0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBiZW5lZml0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUUZNVF9WMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvS2NvbmZpZz01MD1jb25maWcgUUZNVF9WMVxuLS1cbmZzL3F1b3RhL0tjb25maWctNTctXG5mcy9xdW90YS9LY29uZmlnOjU4OmNvbmZpZyBRRk1UX1YyXG5mcy9xdW90YS9LY29uZmlnLTU5LVx0dHJpc3RhdGUgXCYjMzQ7UXVvdGEgZm9ybWF0IHZmc3YwIGFuZCB2ZnN2MSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipRdW90YSBJbXBsZW1lbnRhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdGhpcyBxdW90YSBpbXBsZW1lbnRhdGlvbiBzb3J0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB3b3JrIHdpdGggYFFVT1RBYCBhbmQgYFFGTVRfVjJgLCBvYnZpb3VzbHkuIEFuZCBzaW5jZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBzZXR0aW5nIHF1b3RhIGluZm9ybWF0aW9uLCBgUVVPVEFDVExgIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gYmUgZXNzZW50aWFsLgoKVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL3F1b3RhL2RxdW90LmNgIGFuZCBgZnMvcXVvdGEvcXVvdGFfdjIuY2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gZmluZCB0aGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW5kIHBvdGVudGlhbGx5IG1vZGlmeS4KCkxldCYjMzk7cyBzZWXigKYgbG9va3MgbGlrZSBgaWdub3JlX2hhcmRsaW1pdGAgaXMgc3RhdGljLCBzbyBwcm9iYWJseSBub3QgZGlyZWN0bHkgcmVsZXZhbnQgdG8gbXkgdGFzay4gQWgsIGhlcmUmIzM5O3Mgc29tZXRoaW5nIHByb21pc2luZzogYGRxdW90X3NldF9kcWluZm9gIGlzIGV4cG9ydGVkIG9yIHVzZWQgYnkgcXVvdGFjdGwsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIG9uZSBtb3JlLCBhcyBpdCBzZWVtcyByZWxldmFudCB0byBzZXR0aW5nIHF1b3RhIGluZm9ybWF0aW9uLiBBbHNvLCBJIHNlZSBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCBhcmUgc3RhdGljIGJ1dCBjYWxsZWQgdGhyb3VnaCBvcHMsIHNvIHRoZXkgYXJlIHByb2JhYmx5IHJlbGF0ZWQuIEkgd2lsbCBrZWVwIHRob3NlIGluIG1pbmQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcXVvdF9zZXRfZHFpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9kcXVvdC5jPTI4ODk9RVhQT1JUX1NZTUJPTChkcXVvdF9nZXRfc3RhdGUpO1xuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjg5MS0vKiBHZW5lcmljIHJvdXRpbmUgZm9yIHNldHRpbmcgY29tbW9uIHBhcnQgb2YgcXVvdGEgZmlsZSBpbmZvcm1hdGlvbiAqL1xuZnMvcXVvdGEvZHF1b3QuYzoyODkyOmludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpXG5mcy9xdW90YS9kcXVvdC5jLTI4OTMte1xuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjkxNy19XG5mcy9xdW90YS9kcXVvdC5jOjI5MTg6RVhQT1JUX1NZTUJPTChkcXVvdF9zZXRfZHFpbmZvKTtcbmZzL3F1b3RhL2RxdW90LmMtMjkxOS1cbmZzL3F1b3RhL2RxdW90LmM9MjkyMD1jb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGRxdW90X3F1b3RhY3RsX3N5c2ZpbGVfb3BzID0ge1xuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjkyNC1cdC5nZXRfc3RhdGVcdD0gZHF1b3RfZ2V0X3N0YXRlLFxuZnMvcXVvdGEvZHF1b3QuYzoyOTI1Olx0LnNldF9pbmZvXHQ9IGRxdW90X3NldF9kcWluZm8sXG5mcy9xdW90YS9kcXVvdC5jLTI5MjYtXHQuZ2V0X2RxYmxrXHQ9IGRxdW90X2dldF9kcWJsayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyBQb3RlbnRpYWwgRm9jdXMgUG9pbnRzIGZvciBDb2RlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IG15IGF0dGVudGlvbi4gYGRxdW90X3NldF9kcWluZm9gIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludDsgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgcXVvdGEgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIHdlJiMzOTtkIGZpbmQgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBvciB2dWxuZXJhYmlsaXRpZXMuIEJ1dCB0aGVuIG15IG1pbmQgZHJpZnRzIHRvIGB2Ml9yZWFkX2ZpbGVfaW5mb2AuIFRoYXQmIzM5O3MgYW5vdGhlciBhcmVhIHdvcnRoIGludmVzdGlnYXRpbmcsIGVzcGVjaWFsbHkgd2l0aCBmaWxlIHN5c3RlbSBtZXRhZGF0YSBvcGVyYXRpb25zLiBJIG5lZWQgdG8gd2VpZ2ggdGhlIHRyYWRlLW9mZnM6IGBkcXVvdF9zZXRfZHFpbmZvYCBtaWdodCBiZSBtb3JlIGZvY3VzZWQgb24gcXVvdGEgZW5mb3JjZW1lbnQsIHdoaWxlIGB2Ml9yZWFkX2ZpbGVfaW5mb2AgY291bGQgZXhwb3NlIGlzc3VlcyByZWxhdGVkIHRvIGZpbGUgYWNjZXNzIGFuZCBoYW5kbGluZywgcG9zc2libHkgaW5jbHVkaW5nIGRhdGEgY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggbWFsZm9ybWVkIGlub2Rlcy4gQm90aCBoYXZlIGhpZ2gtdmFsdWUgcG90ZW50aWFsLiBJ4oCZbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggaXMgbW9yZSBsaWtlbHkgdG8geWllbGQgYSB2YWx1YWJsZSBmaW5kaW5nLCBvciBpZiB0aGVyZSBpcyBvdmVybGFwIG9mIHNvbWUga2luZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7djJfcmVhZF9maWxlX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9xdW90YV92Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL3F1b3RhX3YyLmM9NzU9c3RhdGljIGludCB2Ml9jaGVja19xdW90YV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuLS1cbmZzL3F1b3RhL3F1b3RhX3YyLmMtODktLyogUmVhZCBpbmZvcm1hdGlvbiBoZWFkZXIgZnJvbSBxdW90YSBmaWxlICovXG5mcy9xdW90YS9xdW90YV92Mi5jOjkwOnN0YXRpYyBpbnQgdjJfcmVhZF9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXG5mcy9xdW90YS9xdW90YV92Mi5jLTkxLXtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgdjJfZm9ybWF0X29wcyA9IHtcbmZzL3F1b3RhL3F1b3RhX3YyLmMtNDE3LVx0LmNoZWNrX3F1b3RhX2ZpbGVcdD0gdjJfY2hlY2tfcXVvdGFfZmlsZSxcbmZzL3F1b3RhL3F1b3RhX3YyLmM6NDE4Olx0LnJlYWRfZmlsZV9pbmZvXHRcdD0gdjJfcmVhZF9maWxlX2luZm8sXG5mcy9xdW90YS9xdW90YV92Mi5jLTQxOS1cdC53cml0ZV9maWxlX2luZm9cdD0gdjJfd3JpdGVfZmlsZV9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDg0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZvY3VzaW5nIG9uIFF1b3RhIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCBtaWdodCBiZSBwcm9ibGVtYXRpYyBiZWNhdXNlIHRoZXkmIzM5O3JlIHN0YXRpYyBhbmQgY291bGQgYmUgaW5saW5lZCwgbWFraW5nIGRpcmVjdCBmdXp6aW5nIGJ5IG5hbWUgdHJpY2t5LiBIb3dldmVyLCB0aGV5JiMzOTtyZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHYyX2Zvcm1hdF9vcHNgLCBzbyBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIG5vdCBpbmxpbmVkIGFmdGVyIGFsbC4gU3RpbGwsIHRoZSBzdGF0aWMgbmF0dXJlIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIG90aGVyIGZ1bmN0aW9ucy4gVGhhdCBtYWtlcyBtZSBsb29rIGZvciBhbHRlcm5hdGl2ZXMuIGBkcXVvdF9zZXRfZHFpbmZvYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlLgoKTm93LCB0aGF0IGJyaW5ncyB1cCB0aGUgcHJvYmxlbSBvZiBmaW5kaW5nIG91dCB3aGljaCBvZiB0aGVzZSBhcmUgdGhlIGJlc3QgdGFyZ2V0cy4gSSYjMzk7bSBjaGVja2luZyB3aGVyZSBgZHF1b3Rfc2V0X2RxaW5mb2AgZ2V0cyBjYWxsZWQuIFJpZ2h0LCBpdCYjMzk7cyB1c2VkIGluIGJvdGggYGRxdW90X3F1b3RhY3RsX3N5c2ZpbGVfb3BzYCBhbmQgYGRxdW90X3F1b3RhY3RsX29wc2AuIEtub3dpbmcgdGhpcywgSSByZWFsaXplIHRoaXMgbWVhbnMgdGhlIGBxdW90YWN0bGAgb3IgYHF1b3RhY3RsX2ZkYCBzeXNjYWxscyBhcmUgdGhlIGxpa2VseSBlbnRyeSBwb2ludHMuIFNvLCBgZHF1b3Rfc2V0X2RxaW5mb2AgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciBpbml0aWFsIGZ1enppbmcuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluIHRoZSBtaXguIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IGBxdW90YV9zZXRpbmZvYCBpbiBgZnMvcXVvdGEvcXVvdGEuY2AuIFdvcnRoIGtlZXBpbmcgaW4gbWluZCBhcyBhIHNlY29uZGFyeSB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1b3RhX3NldGluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9xdW90YS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL3F1b3RhLmM9MTE5PXN0YXRpYyBpbnQgcXVvdGFfZ2V0aW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgdm9pZCBfX3VzZXIgKmFkZHIpXG4tLVxuZnMvcXVvdGEvcXVvdGEuYy0xNDYtXG5mcy9xdW90YS9xdW90YS5jOjE0NzpzdGF0aWMgaW50IHF1b3RhX3NldGluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHZvaWQgX191c2VyICphZGRyKVxuZnMvcXVvdGEvcXVvdGEuYy0xNDgte1xuLS1cbmZzL3F1b3RhL3F1b3RhLmM9NzY3PXN0YXRpYyBpbnQgZG9fcXVvdGFjdGwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkLFxuLS1cbmZzL3F1b3RhL3F1b3RhLmMtNzk1LVx0Y2FzZSBRX1NFVElORk86XG5mcy9xdW90YS9xdW90YS5jOjc5NjpcdFx0cmV0dXJuIHF1b3RhX3NldGluZm8oc2IsIHR5cGUsIGFkZHIpO1xuZnMvcXVvdGEvcXVvdGEuYy03OTctXHRjYXNlIFFfR0VUUVVPVEE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipRdW90YSBTeXN0ZW0gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcXVvdGFzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBgcXVvdGFfc2V0aW5mb2AgYW5kIGBkb19xdW90YWN0bGAgYXJlIGxpa2VseSBzZXR1cCBvciBoZWxwZXIgZnVuY3Rpb25zOyB0aGV5JiMzOTtyZSBwcm9iYWJseSBzdGF0aWMsIGludm9sdmVkIGluIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBidXQgbm90IGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSB0aGUgYWN0dWFsIHN5c2NhbGxzIOKAkyBgc3lzX3F1b3RhY3RsYCBvciBpdHMgZmlsZSBkZXNjcmlwdG9yIHZhcmlhbnQsIGBzeXNfcXVvdGFjdGxfZmRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB1c2VyLXNwYWNlIHByb2dyYW1zIHdvdWxkIGJlIGNhbGxpbmcuIE5vdyBJIGtub3cgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBmcy9xdW90YS9xdW90YS5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnF1b3RhY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvcXVvdGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9xdW90YS5jPTg2Nj1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpxdW90YWN0bF9ibG9jayhjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbCwgaW50IGNtZClcbi0tXG5mcy9xdW90YS9xdW90YS5jLTkxNi0gKi9cbmZzL3F1b3RhL3F1b3RhLmM6OTE3OlNZU0NBTExfREVGSU5FNChxdW90YWN0bCwgdW5zaWduZWQgaW50LCBjbWQsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWwsXG5mcy9xdW90YS9xdW90YS5jLTkxOC1cdFx0cWlkX3QsIGlkLCB2b2lkIF9fdXNlciAqLCBhZGRyKVxuLS1cbmZzL3F1b3RhL3F1b3RhLmMtOTcyLVxuZnMvcXVvdGEvcXVvdGEuYzo5NzM6U1lTQ0FMTF9ERUZJTkU0KHF1b3RhY3RsX2ZkLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIGNtZCxcbmZzL3F1b3RhL3F1b3RhLmMtOTc0LVx0XHRxaWRfdCwgaWQsIHZvaWQgX191c2VyICosIGFkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRW5hYmxpbmcgVjIgUXVvdGEgU3F1YXNoaW5nKioKCkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgZW5hYmxpbmcgYERRRl9ST09UX1NRVUFTSGAgZm9yIHRoZSB2MiBxdW90YSBmb3JtYXQuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSBhY3R1YWxseSwgSSYjMzk7ZCBzYXkuIEdvb2QgdGhhdCBpdCYjMzk7cyB0YWdnZWQgYXMgYFdvcnRoRnV6emluZ2AsIHdlJiMzOTtsbCBuZWVkIHRvIHN0cmVzcyB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGBkcXVvdF9zZXRfZHFpbmZvYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLiBBbmQsIG9mIGNvdXJzZSwgd2UgbmVlZCB0byBoYXZlIGBRVU9UQWAgYW5kIGBRRk1UX1YyYCBlbmFibGVkIHRvIGFjdHVhbGx5IHVzZSB0aGlzIG5ldyBmZWF0dXJlLgoKV2FpdCBhIHNlY29uZOKApiBgUVVPVEFDVExgLi4uIEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCBgUVVPVEFDVExgIGlzIGFsc28gcmVxdWlyZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGluIGBmcy9xdW90YS9LY29uZmlnYCB0byBiZSBzdXJlLiBJdCB3b3VsZCBiZSBhIHNpbGx5IG92ZXJzaWdodCB0byBtaXNzIHRoYXQgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFFVT1RBQ1RMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9LY29uZmlnPTU4PWNvbmZpZyBRRk1UX1YyXG4tLVxuZnMvcXVvdGEvS2NvbmZpZy02Ny1cbmZzL3F1b3RhL0tjb25maWc6Njg6Y29uZmlnIFFVT1RBQ1RMXG5mcy9xdW90YS9LY29uZmlnLTY5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDk5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBCb29sZWFuIEVuaWdtYTogYFFVT1RBQ1RMYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyB2YXJpYWJsZSwgYFFVT1RBQ1RMYC4gSXQmIzM5O3MgYSBCb29sZWFuLCBtZWFuaW5nIGl0JiMzOTtzIGVpdGhlciB0cnVlIG9yIGZhbHNlLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGF0IHRoZXJlJiMzOTtzIG5vIGFzc29jaWF0ZWQgcHJvbXB0LCBtZWFuaW5nIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBkcml2ZW4gYnkgdXNlciBpbnB1dCBvciBzb21lIGRpcmVjdCBleHRlcm5hbCByZXF1ZXN0LiBTb21ldGhpbmcgKmVsc2UqIGhhcyB0byBiZSBzZXR0aW5nIGl0cyB2YWx1ZS4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmU/IFdoYXQgYXJlIHRoZSBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGl0PyBJcyB0aGlzIHBhcnQgb2YgYW4gaW50ZXJuYWwgY29udHJvbCBsb29wPyBPciBpcyBpdCBhIG1vcmUgcGFzc2l2ZSBzdGF0ZSBpbmRpY2F0b3IsIHVwZGF0ZWQgYnkgb3RoZXIsIG1vcmUgYWN0aXZlIHByb2Nlc3Nlcz8gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyB2YXJpYWJsZSBsaXZlcyB0byB1bmRlcnN0YW5kIGl0cyBzaWduaWZpY2FuY2UuIElzIGl0IGdsb2JhbD8gTG9jYWwgdG8gYSBjZXJ0YWluIHNjb3BlPwoKVGhpcyBsYWNrIG9mIGEgcHJvbXB0IGlzIGEgY2x1ZSwgYSBzdGFydGluZyBwb2ludCBmb3IgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgdmFyaWFibGUgdG8gZmlndXJlIG91dCAqd2hhdCogbWVjaGFuaXNtIGlzIGNob29zaW5nIGl0cyB0cnVlIG9yIGZhbHNlIHN0YXRlLCBhbmQgKndoeSouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBRVU9UQUNUTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL0tjb25maWc9Mj1jb25maWcgR0ZTMl9GU1xuLS1cbmZzL2dmczIvS2NvbmZpZy02LVx0c2VsZWN0IENSQzMyXG5mcy9nZnMyL0tjb25maWc6NzpcdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnLTgtXHRzZWxlY3QgRlNfSU9NQVBcbi0tXG5mcy9xdW90YS9LY29uZmlnPTY9Y29uZmlnIFFVT1RBXG5mcy9xdW90YS9LY29uZmlnLTctXHRib29sIFwmIzM0O1F1b3RhIHN1cHBvcnRcJiMzNDtcbmZzL3F1b3RhL0tjb25maWc6ODpcdHNlbGVjdCBRVU9UQUNUTFxuZnMvcXVvdGEvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL3hmcy9LY29uZmlnPTc3PWNvbmZpZyBYRlNfUVVPVEFcbi0tXG5mcy94ZnMvS2NvbmZpZy03OS1cdGRlcGVuZHMgb24gWEZTX0ZTXG5mcy94ZnMvS2NvbmZpZzo4MDpcdHNlbGVjdCBRVU9UQUNUTFxuZnMveGZzL0tjb25maWctODEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqUXVvdGEgQ29uZmlndXJhdGlvbiBJbnNpZ2h0cyoqCgpSaWdodCwgc28gYFFVT1RBYCBkaXJlY3RseSBzZWxlY3RzIGBRVU9UQUNUTGAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkOyBlbmFibGluZyBgUVVPVEFgIGVmZmVjdGl2ZWx5IGhhbmRsZXMgdGhlIG5lY2Vzc2FyeSBjb250cm9sLiBObyBuZWVkIHRvIGRpZyBmdXJ0aGVyIHRoZXJlLgoKTm93LCB0aGUgdXNlIG9mIGBRRk1UX1YyYCBpcyBleHBsaWNpdGx5IHN0YXRlZCBhcyBiZWluZyBuZWNlc3NhcnkgZm9yIHRoZSB2MiBxdW90YSBmb3JtYXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBjb25maXJtaW5nIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBzY2FuIHRoZSBjb25maWd1cmF0aW9uIGZvciByZWxhdGVkIGVudHJpZXMuIEhvbGQgb24sIGl0IGxvb2tzIGxpa2UgYFFVT1RBX1RSRUVgIGlzICphbHNvKiBzZWxlY3RlZCBieSBgUUZNVF9WMmAuIE9rYXksIGNvbmZpcm1pbmcgdGhlIGV4cGVjdGVkIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB2MiBmb3JtYXQgc3VwcG9ydCBhbmQgdGhlIHF1b3RhIHRyZWUgZnVuY3Rpb25hbGl0eS4gVGhhdCYjMzk7cyBhIGxvZ2ljYWwgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFFVT1RBX1RSRUUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL0tjb25maWc9NTg9Y29uZmlnIFFGTVRfVjJcbi0tXG5mcy9xdW90YS9LY29uZmlnLTYwLVx0ZGVwZW5kcyBvbiBRVU9UQVxuZnMvcXVvdGEvS2NvbmZpZzo2MTpcdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9xdW90YS9LY29uZmlnLTYyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlF1b3RhIENvbmZpZ3VyYXRpb24gRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggcXVvdGEgY29uZmlndXJhdGlvbnMgaGVyZSDigJMgc3BlY2lmaWNhbGx5IGBRVU9UQWAgYW5kIGBRRk1UX1YyYCwgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgdGFzay4gYGRxdW90X3NldF9kcWluZm9gIGxvb2tzIHByb21pc2luZy4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QsIGFuZCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgcXVvdGEgaW5mb3JtYXRpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIG5lZWQuCgpJIHdhcyBpbml0aWFsbHkgY29uc2lkZXJpbmcgYHYyX3JlYWRfZmlsZV9pbmZvYCBhbmQgYHYyX3dyaXRlX2ZpbGVfaW5mb2AsIGFuZCB3aGlsZSB0aGV5JiMzOTtyZSBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggcHJldmVudHMgaW5saW5pbmcsIHRoZXkmIzM5O3JlIHN0YXRpYy4gT2ggd2FpdCwgYHYyX3JlYWRfZmlsZV9pbmZvYCBpcyBkZWZpbmVkIGluIGBmcy9xdW90YS9xdW90YV92Mi5jYC4gVGhhdCBmaWxlIG1ha2VzIGl0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgYmVjYXVzZSBpdCYjMzk7cyBub3QgaW5saW5lZC4KClNvLCBJJiMzOTtsbCBnbyB3aXRoIGFkZGluZyBgZHF1b3Rfc2V0X2RxaW5mb2AuIFRoYXQgbG9va3MgbGlrZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBjaG9pY2UuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm90aGluZyBlbHNlIG9mIGltbWVkaWF0ZSByZWxldmFuY2UuIEFoLCBgaWdub3JlX2hhcmRsaW1pdGAgc2VlbXMgc3RhdGljIGFuZCBsaWtlbHkgaW5saW5lZCwgc28gSSB3b24mIzM5O3QgbmVlZCB0byBjb25zaWRlciBpdCBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdub3JlX2hhcmRsaW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL2RxdW90LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYz0xMjkyPXN0YXRpYyB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdF93YXJuICp3YXJuKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMTMwNi1cbmZzL3F1b3RhL2RxdW90LmM6MTMwNzpzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcbmZzL3F1b3RhL2RxdW90LmMtMTMwOC17XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0xMzE1PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2Rlcyxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMjgtXHQgICAgbmV3aW5vZGVzIFx1MDAzZSBkcXVvdC1cdTAwM2VkcV9kcWIuZHFiX2loYXJkbGltaXQgXHUwMDI2XHUwMDI2XG5mcy9xdW90YS9kcXVvdC5jOjEzMjk6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XG5mcy9xdW90YS9kcXVvdC5jLTEzMzAtXHRcdHByZXBhcmVfd2FybmluZyh3YXJuLCBkcXVvdCwgUVVPVEFfTkxfSUhBUkRXQVJOKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMzgtXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFx1MDAzZT0gZHF1b3QtXHUwMDNlZHFfZHFiLmRxYl9pdGltZSBcdTAwMjZcdTAwMjZcbmZzL3F1b3RhL2RxdW90LmM6MTMzOTogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcbmZzL3F1b3RhL2RxdW90LmMtMTM0MC1cdFx0cHJlcGFyZV93YXJuaW5nKHdhcm4sIGRxdW90LCBRVU9UQV9OTF9JU09GVExPTkdXQVJOKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jPTEzNjA9c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzNzctXHQgICAgdHNwYWNlIFx1MDAzZSBkcXVvdC1cdTAwM2VkcV9kcWIuZHFiX2JoYXJkbGltaXQgXHUwMDI2XHUwMDI2XG5mcy9xdW90YS9kcXVvdC5jOjEzNzg6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XG5mcy9xdW90YS9kcXVvdC5jLTEzNzktXHRcdGlmIChmbGFncyBcdTAwMjYgRFFVT1RfU1BBQ0VfV0FSTilcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzODgtXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFx1MDAzZT0gZHF1b3QtXHUwMDNlZHFfZHFiLmRxYl9idGltZSBcdTAwMjZcdTAwMjZcbmZzL3F1b3RhL2RxdW90LmM6MTM4OTogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcbmZzL3F1b3RhL2RxdW90LmMtMTM5MC1cdFx0aWYgKGZsYWdzIFx1MDAyNiBEUVVPVF9TUEFDRV9XQVJOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTgxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb2RlIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB3b25kZXJpbmcgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJIHNlZSBgaWdub3JlX2hhcmRsaW1pdGAgYW5kIGltbWVkaWF0ZWx5IG5vdGUgdGhhdCBpdCYjMzk7cyBzdGF0aWMgYW5kIGNhbGxlZCBpbiBhIGJ1bmNoIG9mIGRpZmZlcmVudCBwbGFjZXMuIE15IGd1dCB0ZWxscyBtZSB0aGF0IHRoZSBjb21waWxlciAqbWlnaHQqIGhhdmUgaW5saW5lZCBpdCwgd2hpY2ggd291bGQgYmUgZ29vZCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQgd2l0aCBhIHF1aWNrIGNoZWNrLiBUaGVuIHRoZXJlJiMzOTtzIGBkcXVvdF9hZGRfaW5vZGVzYCBhbmQgYGRxdW90X2FkZF9zcGFjZWAuIFRoZXkmIzM5O3JlICphbHNvKiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQgc2luY2UgdGhleSBhcmUgcHJvYmFibHkgY2FsbGVkIG1vcmUgb2Z0ZW4sIG1heWJlIG5vdCBpbmxpbmVkLiBHaXZlbiB0aGF0IHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lLCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcXVvdF9hZGRfaW5vZGVzYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RxdW90X2FkZF9pbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9kcXVvdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL2RxdW90LmM9MTMwNz1zdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMTQtXG5mcy9xdW90YS9kcXVvdC5jOjEzMTU6c3RhdGljIGludCBkcXVvdF9hZGRfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE2LVx0XHRcdCAgICBzdHJ1Y3QgZHF1b3Rfd2FybiAqd2Fybilcbi0tXG5mcy9xdW90YS9kcXVvdC5jPTE3NzY9aW50IGRxdW90X2FsbG9jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYy0xNzk0LVx0XHRcdGNvbnRpbnVlO1xuZnMvcXVvdGEvZHF1b3QuYzoxNzk1Olx0XHRyZXQgPSBkcXVvdF9hZGRfaW5vZGVzKGRxdW90LCAxLCBcdTAwMjZ3YXJuW2NudF0pO1xuZnMvcXVvdGEvZHF1b3QuYy0xNzk2LVx0XHRpZiAocmV0KSB7XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0yMDA4PWludCBfX2RxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkcXVvdCAqKnRyYW5zZmVyX3RvKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjA2Mi1cdFx0XHRcdFx1MDAyNmRxdW90X3NyY3UsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkcV9kYXRhX2xvY2spKTtcbmZzL3F1b3RhL2RxdW90LmM6MjA2MzpcdFx0cmV0ID0gZHF1b3RfYWRkX2lub2Rlcyh0cmFuc2Zlcl90b1tjbnRdLCBpbm9kZV91c2FnZSxcbmZzL3F1b3RhL2RxdW90LmMtMjA2NC1cdFx0XHRcdCAgICAgICBcdTAwMjZ3YXJuX3RvW2NudF0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRxdW90IEFsbG9jYXRpb24gYW5kIFRyYW5zZmVyOiBLZXkgRXhwb3J0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBkcXVvdF9hbGxvY19pbm9kZWAgYW5kIGBfX2RxdW90X3RyYW5zZmVyYCBhcmUgZXhwb3NlZC4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGluZGljYXRlcyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IgdXNlICpvdXRzaWRlKiB0aGUgY29yZSBxdW90YSBpbXBsZW1lbnRhdGlvbi4gYGRxdW90X2FsbG9jX2lub2RlYCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBkZWFscyB3aXRoIGFsbG9jYXRpbmcgZGlzayBxdW90YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGxpbmsgYmV0d2VlbiB0aGUgZmlsZXN5c3RlbSBvYmplY3QgYW5kIGl0cyBxdW90YSB0cmFja2luZy4gU2VlaW5nIGl0IGV4cG9ydGVkIG1lYW5zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgdGhvc2UgaW52b2x2ZWQgaW4gZmlsZXN5c3RlbSBvcGVyYXRpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBxdW90YSwgb3IgcGVyaGFwcyBldmVuIGluIGN1c3RvbSBxdW90YSBzZXR1cHMuCgpUaGVuIHRoZXJlJiMzOTtzIGBfX2RxdW90X3RyYW5zZmVyYC4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHN1Z2dlc3RzIGl0JiMzOTtzIGEgJiMzNDtsb3ctbGV2ZWwmIzM0OyBmdW5jdGlvbiwgcHJvYmFibHkgbm90IHRoZSBwcmltYXJ5IGludGVyZmFjZS4gSXQmIzM5O3MgbGlrZWx5IHRoZSB3b3JraG9yc2UgZm9yIGFjdHVhbGx5ICptb3ZpbmcqIHF1b3RhIGluZm9ybWF0aW9uIOKAkyBkZWJpdGluZyBvbmUgZHF1b3QsIGNyZWRpdGluZyBhbm90aGVyLCBwcm9iYWJseSBhY3Jvc3MgZGlmZmVyZW50IHVzZXJzIG9yIGdyb3Vwcy4gRXhwb3J0aW5nIHRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IHRlbGxzIG1lIHRoYXQgb3RoZXIgbW9kdWxlcyBtaWdodCBuZWVkIHRvIGltcGxlbWVudCB0aGVpciBvd24gc3RyYXRlZ2llcyBmb3IgcXVvdGEgbWFuYWdlbWVudCBvciBkYXRhIG1vdmVtZW50LCBwZXJoYXBzIGZvciB0aGluZ3MgbGlrZSBvbmxpbmUgcmVzaXppbmcsIGZpbGVzeXN0ZW0gY29weSBvcGVyYXRpb25zLCBvciBldmVuIHRoaW5ncyBsaWtlIGNvbnRhaW5lcml6ZWQgc3RvcmFnZSBtYW5hZ2VtZW50IHdoZXJlIHlvdSBtaWdodCBiZSBtYW5pcHVsYXRpbmcgcXVvdGEgYm91bmRhcmllcyBiZXR3ZWVuIGNvbnRhaW5lcnMuIFRoZSBgX19gIHByZWZpeCB3b3VsZCBpbmRpY2F0ZSB0aGF0IGNhcmUgaXMgbmVlZGVkIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgYXMgdGhlcmUgYXJlIHByb2JhYmx5IGNvbnN0cmFpbnRzIG9uIGhvdyB0aGUgc3lzdGVtIG5lZWRzIHRvIGJlIHVzZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgY29uZmxpY3RzLgoKQmFzaWNhbGx5LCBzZWVpbmcgdGhlc2UgZnVuY3Rpb25zIGV4cG9ydGVkIHRlbGxzIG1lIHRoYXQgdGhlIHF1b3RhIHN1YnN5c3RlbSBpcyBkZXNpZ25lZCB0byBiZSBtb3JlIGZsZXhpYmxlIGFuZCBleHRlbnNpYmxlIHRoYW4gYSBsb3Qgb2YgcGVvcGxlIG1pZ2h0IHRoaW5rLiBUaGV5JiMzOTt2ZSBwcm92aWRlZCB0b29scyB0byBob29rIGludG8gdGhlc2UgY3JpdGljYWwgcG9pbnRzLiBUaGV5IGFyZSBnaXZpbmcgdXMgc29tZSBwb3dlcmZ1bCBjYXBhYmlsaXRpZXMgaWYgd2UgbmVlZCB0byBkbyBzb21lIG1vcmUgY29tcGxleCBxdW90YSBvcGVyYXRpb25zLiBJdCYjMzk7cyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IGhvdyB3ZSBjYW4gaW50ZWdyYXRlIHF1b3RhIG1hbmFnZW1lbnQgaW50byBhZHZhbmNlZCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucywgY2xvdWQtYmFzZWQgc3RvcmFnZSwgb3IgbW9yZSBzcGVjaWFsaXplZCB1c2UgY2FzZXMuIFdlJiMzOTt2ZSBnb3QgdGhlIGFiaWxpdHkgdG8gbW9kaWZ5IHF1b3RhIGRhdGEgYW5kIHF1b3RhcyBvbiBhbiBpbm9kZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyB0aGVzZSBvdXRzaWRlIHRoZSBzdGFuZGFyZCBxdW90YSByb3V0aW5lcyB3b3VsZCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRxdW90X2FsbG9jX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9kcXVvdC5jPTE3NzY9aW50IGRxdW90X2FsbG9jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYy0xODE3LX1cbmZzL3F1b3RhL2RxdW90LmM6MTgxODpFWFBPUlRfU1lNQk9MKGRxdW90X2FsbG9jX2lub2RlKTtcbmZzL3F1b3RhL2RxdW90LmMtMTgxOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxOTEKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUXVvdGEgU3Vic3lzdGVtIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGRxdW90X3NldF9kcWluZm9gLCBgZHF1b3RfYWxsb2NfaW5vZGVgLCBhbmQgYF9fZHF1b3RfdHJhbnNmZXJgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgYXJlYXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgZm9yIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIG9mIGNvdXJzZS4KCkxldCBtZSBicmVhayBkb3duIG15IHVuZGVyc3RhbmRpbmcuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBxdW90YSBzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgZW5hYmxpbmcgdGhlIGBEUUZfUk9PVF9TUVVBU0hgIGZsYWcgZm9yIHYyIHF1b3RhIGZvcm1hdHMuIFByZXZpb3VzbHksIHRoYXQgZmxhZyB3YXMgcmVzdHJpY3RlZCB0byB2MSBmb3JtYXRzLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1vZGlmaWVzIGhvdyByZXNvdXJjZSBsaW1pdHMgYXJlIGVuZm9yY2VkLCBlc3BlY2lhbGx5IGZvciBwcm9jZXNzZXMgd2l0aCBgQ0FQX1NZU19SRVNPVVJDRWAuCgpTbywgdGhlIGZvY3VzIGlzIG9uIGhvdyBsaW1pdHMgYXJlIGhhbmRsZWQgYW5kIHRyYW5zbGF0ZWQgd2l0aGluIHRoZSBEcXVvdCBzeXN0ZW0sIHdpdGggdGhpcyBmbGFnLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZGlmZmVyZW50IHF1b3RhIGZvcm1hdHMsIGFuZCBob3cgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdnVsbmVyYWJpbGl0aWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIHJlc291cmNlIGV4aGF1c3Rpb24gd2l0aGluIHRoZSBxdW90YSBzeXN0ZW0uIFRoZSBgUVVPVEFgIGFuZCBgUUZNVF9WMmAgY29uZmlndXJhdGlvbnMgYXJlIGltcG9ydGFudCBoZXJlIHRvIHRlc3QgZGlmZmVyZW50IGNvZGUgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtRRk1UX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHF1b3Rfc2V0X2RxaW5mbyYjMzQ7LAogICAgJiMzNDtkcXVvdF9hbGxvY19pbm9kZSYjMzQ7LAogICAgJiMzNDtfX2RxdW90X3RyYW5zZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdGhlIERRRl9ST09UX1NRVUFTSCBmbGFnIGZvciB2MiBxdW90YSBmb3JtYXRzLCByZW1vdmluZyBhIGNoZWNrIHRoYXQgcmVzdHJpY3RlZCBpdCB0byB2MSBmb3JtYXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHF1b3RhIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGxpbWl0cyBhcmUgZW5mb3JjZWQgZm9yIENBUF9TWVNfUkVTT1VSQ0UgcHJvY2Vzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtRRk1UX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHF1b3Rfc2V0X2RxaW5mbyYjMzQ7LAogICAgJiMzNDtkcXVvdF9hbGxvY19pbm9kZSYjMzQ7LAogICAgJiMzNDtfX2RxdW90X3RyYW5zZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdGhlIERRRl9ST09UX1NRVUFTSCBmbGFnIGZvciB2MiBxdW90YSBmb3JtYXRzLCByZW1vdmluZyBhIGNoZWNrIHRoYXQgcmVzdHJpY3RlZCBpdCB0byB2MSBmb3JtYXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHF1b3RhIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGxpbWl0cyBhcmUgZW5mb3JjZWQgZm9yIENBUF9TWVNfUkVTT1VSQ0UgcHJvY2Vzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSByZXN0cmljdGlvbiBvbiB0aGUgYERRRl9ST09UX1NRVUFTSGAgZmxhZywgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCB3aXRoIHYyIHF1b3RhIGZvcm1hdHMuIEl0IG1vZGlmaWVzIGB2Ml93cml0ZV9maWxlX2luZm9gIHRvIHdyaXRlIHRoaXMgZmxhZyB0byBkaXNrLiBUaGUgYHN0cnVjdCB2Ml9kaXNrX2RxaW5mb2Agd3JpdHRlbiB0byBkaXNrIGNvbnNpc3RzIG9mIDYgYF9fbGUzMmAgZmllbGRzLCBhbGwgb2Ygd2hpY2ggYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBgcXVvdGFfd3JpdGVgIGNhbGwuIFRoZXJlIGlzIG5vIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgZGlzay4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIHF1b3RhIGxpbWl0IGVuZm9yY2VtZW50LCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU0NmQ0ZGM4ZTU1ZDUxNTkyN2FlMmY2YWM1NWFiNGM2ZjFiZDc0MTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzo0NToxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jCmluZGV4IDk4NTBkZTM5NTVkMzEuLmU0MzFlNzJkZmVhODAgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL2RxdW90LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcXVvdGEvZHF1b3QuYwpAQCAtMTMwOSw4ICYjNDM7MTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQogCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gJmFtcDtzYl9kcW9wdChkcXVvdC0mZ3Q7ZHFfc2IpLSZndDtpbmZvW2RxdW90LSZndDtkcV9pZC50eXBlXTsKIAogCXJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpICZhbXA7JmFtcDsKLQkgICAgICAgKGluZm8tJmd0O2RxaV9mb3JtYXQtJmd0O3FmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQgfHwKLQkJIShpbmZvLSZndDtkcWlfZmxhZ3MgJmFtcDsgRFFGX1JPT1RfU1FVQVNIKSk7CiYjNDM7CSAgICAgICAhKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpOwogfQogCiBzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsCkBAIC0yOTAwLDExICYjNDM7Mjg5OSw2IEBAIGludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpCiAJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkKIAkJcmV0dXJuIC1FU1JDSDsKIAltaSA9IHNiX2Rxb3B0KHNiKS0mZ3Q7aW5mbyAmIzQzOyB0eXBlOwotCWlmIChpaS0mZ3Q7aV9maWVsZG1hc2sgJmFtcDsgUUNfRkxBR1MpIHsKLQkJaWYgKChpaS0mZ3Q7aV9mbGFncyAmYW1wOyBRQ0lfUk9PVF9TUVVBU0ggJmFtcDsmYW1wOwotCQkgICAgIG1pLSZndDtkcWlfZm9ybWF0LSZndDtxZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KIAlzcGluX2xvY2soJmFtcDtkcV9kYXRhX2xvY2spOwogCWlmIChpaS0mZ3Q7aV9maWVsZG1hc2sgJmFtcDsgUUNfU1BDX1RJTUVSKQogCQltaS0mZ3Q7ZHFpX2JncmFjZSA9IGlpLSZndDtpX3NwY190aW1lbGltaXQ7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92Mi5jIGIvZnMvcXVvdGEvcXVvdGFfdjIuYwppbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YV92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKQEAgLTE0Miw4ICYjNDM7MTQyLDcgQEAgc3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKIAl9CiAJaW5mby0mZ3Q7ZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpOwogCWluZm8tJmd0O2RxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTsKLQkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0JaW5mby0mZ3Q7ZHFpX2ZsYWdzID0gMDsKJiM0MzsJaW5mby0mZ3Q7ZHFpX2ZsYWdzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZsYWdzKSAmYW1wOyBEUUZfUk9PVF9TUVVBU0g7CiAJcWluZm8tJmd0O2RxaV9zYiA9IHNiOwogCXFpbmZvLSZndDtkcWlfdHlwZSA9IHR5cGU7CiAJcWluZm8tJmd0O2RxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTsKQEAgLTIwOSw4ICYjNDM7MjA4LDcgQEAgc3RhdGljIGludCB2Ml93cml0ZV9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCiAJaW5mby0mZ3Q7ZHFpX2ZsYWdzICZhbXA7PSB+RFFGX0lORk9fRElSVFk7CiAJZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tJmd0O2RxaV9iZ3JhY2UpOwogCWRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLSZndDtkcWlfaWdyYWNlKTsKLQkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0JZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoMCk7CiYjNDM7CWRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpOwogCXNwaW5fdW5sb2NrKCZhbXA7ZHFfZGF0YV9sb2NrKTsKIAlkaW5mby5kcWlfYmxvY2tzID0gY3B1X3RvX2xlMzIocWluZm8tJmd0O2RxaV9ibG9ja3MpOwogCWRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLSZndDtkcWlfZnJlZV9ibGspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAppbmRleCA1MjA5MDEwNWI4MjgyLi5hMzRmNDM1MTlhZjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaApAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBlbnVtIHsKIAlEUUZfUFJJVkFURQogfTsKIAotLyogUm9vdCBzcXVhc2ggZW5hYmxlZCAoZm9yIHYxIHF1b3RhIGZvcm1hdCkgKi8KJiM0MzsvKiBFbmZvcmNlIGxpbWl0cyBhbHNvIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3NlcyAqLwogI2RlZmluZSBEUUZfUk9PVF9TUVVBU0gJKDEgJmx0OyZsdDsgRFFGX1JPT1RfU1FVQVNIX0IpCiAvKiBRdW90YSBzdG9yZWQgaW4gYSBzeXN0ZW0gZmlsZSAqLwogI2RlZmluZSBEUUZfU1lTX0ZJTEUJKDEgJmx0OyZsdDsgRFFGX1NZU19GSUxFX0IpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUXVvdGEgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIHF1b3RhIGhhbmRsaW5nIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBNeSBmaXJzdCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0IHNlZW1zIGZvY3VzZWQgb24gdGhlIHYyIHF1b3RhIGZvcm1hdCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHRvIGBmcy9xdW90YS9xdW90YV92Mi5jYC4gUmVtb3ZpbmcgdGhhdCBgUUZNVF9WRlNfT0xEYCBjaGVjayBpbiBgaWdub3JlX2hhcmRsaW1pdGAgYW5kIGBkcXVvdF9zZXRfZHFpbmZvYCBpcyBpbnRlcmVzdGluZywgYW5kIHRoZW4gdGhlcmUgYXJlIHRoZSBkaXJlY3QgbW9kaWZpY2F0aW9ucyBvZiBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCwgd2hlcmUgaXQmIzM5O3Mgbm93IGRlYWxpbmcgd2l0aCBgRFFGX1JPT1RfU1FVQVNIYCBpbnN0ZWFkIG9mIGJydXNoaW5nIG9mZiBmbGFncy4gRXNzZW50aWFsbHksIGl0IGFwcGVhcnMgd2UmIzM5O3JlIG5vdyBlbmFibGluZyBhbmQgdXRpbGl6aW5nIGBEUUZfUk9PVF9TUVVBU0hgIGZvciB0aGUgdjIgZm9ybWF0LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIHRob3VnaCwgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdpdGggdGhpcyBkaXJlY3QgcmVhZGluZyBhbmQgd3JpdGluZyBvZiBgZGluZm8uZHFpX2ZsYWdzYCBpbiB0aGUgYHYyX3JlYWRfZmlsZV9pbmZvYCBhbmQgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgZnVuY3Rpb25zLCByZXNwZWN0aXZlbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgZGluZm9gLCB3aGljaCBpcyBhIGBzdHJ1Y3QgdjJfZGlza19kcWluZm9gLCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uLiBUaGUgaW50ZWdyaXR5IG9mIHRoZSBpbmZvcm1hdGlvbiBkZXBlbmRzIG9uIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgcHJvcGVybHkgcG9wdWxhdGVkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB2Ml9kaXNrX2RxaW5mb2AgYW5kIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgZGluZm9gIHdpdGhpbiB0aGUgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgZnVuY3Rpb24gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBsdXJraW5nIHZ1bG5lcmFiaWxpdGllcyBvciBkYXRhIGNvcnJ1cHRpb24gcmlza3MgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuIFRoaXMgbmVlZHMgYSB2ZXJ5IGNhcmVmdWwgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHYyX2Rpc2tfZHFpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL3F1b3RhX3YyLmM9OTA9c3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbmZzL3F1b3RhL3F1b3RhX3YyLmMtOTEte1xuZnMvcXVvdGEvcXVvdGFfdjIuYzo5MjpcdHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyBkaW5mbztcbmZzL3F1b3RhL3F1b3RhX3YyLmMtOTMtXHRzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciBkcWhlYWQ7XG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYy0xMTQtXHRzaXplID0gc2ItXHUwMDNlc19vcC1cdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVx1MDAyNmRpbmZvLFxuZnMvcXVvdGEvcXVvdGFfdjIuYzoxMTU6XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7XG5mcy9xdW90YS9xdW90YV92Mi5jOjExNjpcdGlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pKSB7XG5mcy9xdW90YS9xdW90YV92Mi5jLTExNy1cdFx0cXVvdGFfZXJyb3Ioc2IsIFwmIzM0O0NhbiYjMzk7dCByZWFkIGluZm8gc3RydWN0dXJlXCYjMzQ7KTtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTE5Nj1zdGF0aWMgaW50IHYyX3dyaXRlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMTk3LXtcbmZzL3F1b3RhL3F1b3RhX3YyLmM6MTk4Olx0c3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0xOTktXHRzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7XG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTYtXHRzaXplID0gc2ItXHUwMDNlc19vcC1cdTAwM2VxdW90YV93cml0ZShzYiwgdHlwZSwgKGNoYXIgKilcdTAwMjZkaW5mbyxcbmZzL3F1b3RhL3F1b3RhX3YyLmM6MjE3Olx0ICAgICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pLCBWMl9EUUlORk9PRkYpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTgtXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobWVtYWxsb2MpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTktXHR1cF93cml0ZShcdTAwMjZkcW9wdC1cdTAwM2VkcWlvX3NlbSk7XG5mcy9xdW90YS9xdW90YV92Mi5jOjIyMDpcdGlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pKSB7XG5mcy9xdW90YS9xdW90YV92Mi5jLTIyMS1cdFx0cXVvdGFfZXJyb3Ioc2IsIFwmIzM0O0NhbiYjMzk7dCB3cml0ZSBpbmZvIHN0cnVjdHVyZVwmIzM0Oyk7XG4tLVxuZnMvcXVvdGEvcXVvdGFpb192Mi5oPTUwPXN0cnVjdCB2MnIxX2Rpc2tfZHFibGsge1xuLS1cbmZzL3F1b3RhL3F1b3RhaW9fdjIuaC02My0vKiBIZWFkZXIgd2l0aCB0eXBlIGFuZCB2ZXJzaW9uIHNwZWNpZmljIGluZm9ybWF0aW9uICovXG5mcy9xdW90YS9xdW90YWlvX3YyLmg6NjQ6c3RydWN0IHYyX2Rpc2tfZHFpbmZvIHtcbmZzL3F1b3RhL3F1b3RhaW9fdjIuaC02NS1cdF9fbGUzMiBkcWlfYmdyYWNlO1x0LyogVGltZSBiZWZvcmUgYmxvY2sgc29mdCBsaW1pdCBiZWNvbWVzIGhhcmQgbGltaXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBRdW90YSB2MiBGaWxlIEluZm8qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBmaWxlIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBxdW90YSB2MiBzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIHdyaXRpbmcuIFNvLCBteSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gYHYyX3dyaXRlX2ZpbGVfaW5mb2AgaW4gYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcXVvdGEgZGF0YSByZWxhdGVkIHRvIGZpbGVzIHRvIHJlc2lkZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoaXMgcHJvY2VzcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UsIGFuZCB3aGF0IHByb3RlY3Rpb25zIGFyZSBpbiBwbGFjZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGxpa2VseSBiZSB0aGUgY3JpdGljYWwganVuY3R1cmUgd2hlcmUgY2hhbmdlcyB0byBmaWxlIHNpemVzIGFuZCBpbm9kZSBjb3VudHMgZ2V0IHJlZmxlY3RlZCBpbiB0aGUgcXVvdGEgYWNjb3VudGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBJIGFudGljaXBhdGUgZmluZGluZyBkZXRhaWxzIGFib3V0IGRhdGEgc3RydWN0dXJlIHVwZGF0ZXMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBxdW90YSBlbmZvcmNlbWVudC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBjb2RlIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3F1b3RhL3F1b3RhX3YyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NjpcdHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuIDE5NzpcdHtcbiAxOTg6XHRcdHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyBkaW5mbztcbiAxOTk6XHRcdHN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTtcbiAyMDA6XHRcdHN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gXHUwMDI2ZHFvcHQtXHUwMDNlaW5mb1t0eXBlXTtcbiAyMDE6XHRcdHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICpxaW5mbyA9IGluZm8tXHUwMDNlZHFpX3ByaXY7XG4gMjAyOlx0XHRzc2l6ZV90IHNpemU7XG4gMjAzOlx0XHR1bnNpZ25lZCBpbnQgbWVtYWxsb2M7XG4gMjA0Olx0XG4gMjA1Olx0XHRkb3duX3dyaXRlKFx1MDAyNmRxb3B0LVx1MDAzZWRxaW9fc2VtKTtcbiAyMDY6XHRcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4gMjA3Olx0XHRzcGluX2xvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbiAyMDg6XHRcdGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNj0gfkRRRl9JTkZPX0RJUlRZO1xuIDIwOTpcdFx0ZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tXHUwMDNlZHFpX2JncmFjZSk7XG4gMjEwOlx0XHRkaW5mby5kcWlfaWdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfaWdyYWNlKTtcbiAyMTE6XHRcdGRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpO1xuIDIxMjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbiAyMTM6XHRcdGRpbmZvLmRxaV9ibG9ja3MgPSBjcHVfdG9fbGUzMihxaW5mby1cdTAwM2VkcWlfYmxvY2tzKTtcbiAyMTQ6XHRcdGRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLVx1MDAzZWRxaV9mcmVlX2Jsayk7XG4gMjE1Olx0XHRkaW5mby5kcWlfZnJlZV9lbnRyeSA9IGNwdV90b19sZTMyKHFpbmZvLVx1MDAzZWRxaV9mcmVlX2VudHJ5KTtcbiAyMTY6XHRcdHNpemUgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXF1b3RhX3dyaXRlKHNiLCB0eXBlLCAoY2hhciAqKVx1MDAyNmRpbmZvLFxuIDIxNzpcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pLCBWMl9EUUlORk9PRkYpO1xuIDIxODpcdFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKG1lbWFsbG9jKTtcbiAyMTk6XHRcdHVwX3dyaXRlKFx1MDAyNmRxb3B0LVx1MDAzZWRxaW9fc2VtKTtcbiAyMjA6XHRcdGlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pKSB7XG4gMjIxOlx0XHRcdHF1b3RhX2Vycm9yKHNiLCBcJiMzNDtDYW4mIzM5O3Qgd3JpdGUgaW5mbyBzdHJ1Y3R1cmVcJiMzNDspO1xuIDIyMjpcdFx0XHRyZXR1cm4gc2l6ZSBcdTAwM2MgMCA/IHNpemUgOiAtRUlPO1xuIDIyMzpcdFx0fVxuIDIyNDpcdFx0cmV0dXJuIDA7XG4gMjI1Olx0fVxuIDIyNjpcdFxuIDIyNzpcdHN0YXRpYyB2b2lkIHYycjBfZGlzazJtZW1kcWIoc3RydWN0IGRxdW90ICpkcXVvdCwgdm9pZCAqZHApXG4gMjI4Olx0e1xuIDIyOTpcdFx0c3RydWN0IHYycjBfZGlza19kcWJsayAqZCA9IGRwLCBlbXB0eTtcbiAyMzA6XHRcdHN0cnVjdCBtZW1fZHFibGsgKm0gPSBcdTAwMjZkcXVvdC1cdTAwM2VkcV9kcWI7XG4gMjMxOlx0XG4gMjMyOlx0XHRtLVx1MDAzZWRxYl9paGFyZGxpbWl0ID0gbGUzMl90b19jcHUoZC1cdTAwM2VkcWJfaWhhcmRsaW1pdCk7XG4gMjMzOlx0XHRtLVx1MDAzZWRxYl9pc29mdGxpbWl0ID0gbGUzMl90b19jcHUoZC1cdTAwM2VkcWJfaXNvZnRsaW1pdCk7XG4gMjM0Olx0XHRtLVx1MDAzZWRxYl9jdXJpbm9kZXMgPSBsZTMyX3RvX2NwdShkLVx1MDAzZWRxYl9jdXJpbm9kZXMpO1xuIDIzNTpcdFx0bS1cdTAwM2VkcWJfaXRpbWUgPSBsZTY0X3RvX2NwdShkLVx1MDAzZWRxYl9pdGltZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSB2MiBEaXNrIFF1b3RhIEluZm8gU3RydWN0dXJlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB2Ml9kaXNrX2RxaW5mb2Agc3RydWN0dXJlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBmcy9xdW90YS9xdW90YWlvX3YyLmhgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24uIEdvdHRhIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsYXlvdXQgYW5kIGZpZWxkcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXNrIHF1b3RhIGluZm9ybWF0aW9uIGlzIGJlaW5nIHN0b3JlZCBhdCB0aGlzIHZlcnNpb24uIFdoYXQgZGF0YSBtZW1iZXJzIGFyZSBpbmNsdWRlZD8gV2hhdCYjMzk7cyB0aGUgc2l6ZSBhbmQgYWxpZ25tZW50PyBBbnkgcGFja2VkIHN0cnVjdHVyZXMgdG8gYmUgYXdhcmUgb2Y/IEkgd2FudCB0byBzZWUgaWYgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHNlZW1zIGVmZmljaWVudC4gTWF5YmUgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCBieXRlIG9yZGVyIG9yIHBsYXRmb3JtLXNwZWNpZmljIGludGVycHJldGF0aW9ucyB0aGF0IG1pZ2h0IHRyaXAgbWUgdXA/IEdvdCB0byBtYWtlIHN1cmUgdG8gY29uc2lkZXIgYW55IHBvc3NpYmxlIGFsaWdubWVudCBvciBwYWRkaW5nIGlzc3VlcyB0aGF0IG1pZ2h0IGFmZmVjdCBwZXJmb3JtYW5jZSBvciBjb21wYXRpYmlsaXR5IGFjcm9zcyBhcmNoaXRlY3R1cmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9xdW90YS9xdW90YWlvX3YyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY0Olx0c3RydWN0IHYyX2Rpc2tfZHFpbmZvIHtcbiAgNjU6XHRcdF9fbGUzMiBkcWlfYmdyYWNlO1x0LyogVGltZSBiZWZvcmUgYmxvY2sgc29mdCBsaW1pdCBiZWNvbWVzIGhhcmQgbGltaXQgKi9cbiAgNjY6XHRcdF9fbGUzMiBkcWlfaWdyYWNlO1x0LyogVGltZSBiZWZvcmUgaW5vZGUgc29mdCBsaW1pdCBiZWNvbWVzIGhhcmQgbGltaXQgKi9cbiAgNjc6XHRcdF9fbGUzMiBkcWlfZmxhZ3M7XHQvKiBGbGFncyBmb3IgcXVvdGFmaWxlIChEUUZfKikgKi9cbiAgNjg6XHRcdF9fbGUzMiBkcWlfYmxvY2tzO1x0LyogTnVtYmVyIG9mIGJsb2NrcyBpbiBmaWxlICovXG4gIDY5Olx0XHRfX2xlMzIgZHFpX2ZyZWVfYmxrO1x0LyogTnVtYmVyIG9mIGZpcnN0IGZyZWUgYmxvY2sgaW4gdGhlIGxpc3QgKi9cbiAgNzA6XHRcdF9fbGUzMiBkcWlfZnJlZV9lbnRyeTtcdC8qIE51bWJlciBvZiBibG9jayB3aXRoIGF0IGxlYXN0IG9uZSBmcmVlIGVudHJ5ICovXG4gIDcxOlx0fTtcbiAgNzI6XHRcbiAgNzM6XHQjZGVmaW5lIFYyX0RRSU5GT09GRlx0c2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKVx0LyogT2Zmc2V0IG9mIGluZm8gaGVhZGVyIGluIGZpbGUgKi9cbiAgNzQ6XHQjZGVmaW5lIFYyX0RRQkxLU0laRV9CSVRTIDEwXHRcdFx0XHQvKiBTaXplIG9mIGxlYWYgYmxvY2sgaW4gdHJlZSAqL1xuICA3NTpcdFxuICA3NjpcdCNlbmRpZiAvKiBfTElOVVhfUVVPVEFJT19WMl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDIKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogNzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUXVvdGEgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB0byB0aGUgcXVvdGEgY29kZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgdjIgcXVvdGEgZm9ybWF0LiBNeSBmaXJzdCBmb2N1cyBpcyBvbiB0aGUgYHYyX2Rpc2tfZHFpbmZvYCBzdHJ1Y3QsIHdoaWNoIGNvbnRhaW5zIGNydWNpYWwgcXVvdGEgaW5mb3JtYXRpb24uICBJIHF1aWNrbHkgc2VlIHRoYXQgaXQmIzM5O3MgY29tcG9zZWQgb2Ygc2l4IGBfX2xlMzJgIGZpZWxkczogYGRxaV9iZ3JhY2VgLCBgZHFpX2lncmFjZWAsIGBkcWlfZmxhZ3NgLCBgZHFpX2Jsb2Nrc2AsIGBkcWlfZnJlZV9ibGtgLCBhbmQgYGRxaV9mcmVlX2VudHJ5YC4gIFRoZSB0b3RhbCBzaXplIGlzIDI0IGJ5dGVzLCBhbmQgYSBxdWljayBtZW50YWwgY2hlY2sgY29uZmlybXMgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZyBiZXR3ZWVuIHRob3NlIDQtYnl0ZSBmaWVsZHMuIFRoZSBpbml0aWFsaXphdGlvbiBpcyBleHBsaWNpdCBpbiBgdjJfd3JpdGVfZmlsZV9pbmZvYC4gQWxsIGZpZWxkcyBhcmUgYmVpbmcgY29ycmVjdGx5IHBvcHVsYXRlZCBiZWZvcmUgd3JpdGluZyB0byBkaXNrLCBhbmQgdGhhdCYjMzk7cyBnb29kLgoKVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBkcXVvdF9zZXRfZHFpbmZvYC4gVGhlIHJlbW92ZWQgY2hlY2sgaXMgYWxsb3dpbmcgdGhlIGBRQ0lfUk9PVF9TUVVBU0hgIGZsYWcgdG8gYmUgc2V0LCBldmVuIGZvciB2MiBmb3JtYXRzLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgdGhlIGV4aXN0aW5nIGNvZGUgcGF0aHMgaW4gYHF1b3RhY3RsYCBzeXNjYWxscyBzZWVtIHRvIGNvcnJlY3RseSBpbml0aWFsaXplIHRoaXMgc3RydWN0dXJlLiBJdCYjMzk7cyBqdXN0IHJlbW92aW5nIGEgY29uc3RyYWludC4gR2l2ZW4gdGhhdCBhbGwgZmllbGRzIGFyZSBpbml0aWFsaXplZCwgdGhpcyByZW1vdmFsIHNlZW1zIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4KCk5leHQsIEkgcmV2aWV3IHRoZSBgaWdub3JlX2hhcmRsaW1pdGAgZnVuY3Rpb24uIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGNvbmRpdGlvbi4gSXQgbm93IG5vIGxvbmdlciBjaGVja3MgYHFmX2ZtdF9pZGAuIFRoaXMgYXBwZWFycyB0byBzaW1wbHkgYnJvYWRlbiB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGxvZ2ljLCByZW1vdmluZyBhIHJlc3RyaWN0aW9uLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHNlZW1zIHVuYWx0ZXJlZCwgYW5kIGFnYWluLCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgY29kZSBpcyBzYWZlIGFuZCB0aGF0IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4gVGhlIHBhdGNoIHNpbXBseSBlbmFibGVzIGEgcHJldmlvdXNseSByZXN0cmljdGVkIGZsYWcgZm9yIHRoZSB2MiBxdW90YSBmb3JtYXQuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHVzYWdlcyBvZiBgRFFGX1JPT1RfU1FVQVNIYCBidXQgdGhlIGNoYW5nZSBzZWVtcyBpc29sYXRlZCB0byB0aGUgZmlsZXMgYW5kIGZ1bmN0aW9ucyBJJiMzOTt2ZSBleGFtaW5lZC4gSSYjMzk7bSBzYXRpc2ZpZWQuCgpOZWVkc0tNU0FOPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGEgcmVzdHJpY3Rpb24gb24gdGhlIGBEUUZfUk9PVF9TUVVBU0hgIGZsYWcsIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgd2l0aCB2MiBxdW90YSBmb3JtYXRzLiBJdCBtb2RpZmllcyBgdjJfd3JpdGVfZmlsZV9pbmZvYCB0byB3cml0ZSB0aGlzIGZsYWcgdG8gZGlzay4gVGhlIGBzdHJ1Y3QgdjJfZGlza19kcWluZm9gIHdyaXR0ZW4gdG8gZGlzayBjb25zaXN0cyBvZiA2IGBfX2xlMzJgIGZpZWxkcywgYWxsIG9mIHdoaWNoIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgYHF1b3RhX3dyaXRlYCBjYWxsLiBUaGVyZSBpcyBubyBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIGRpc2suIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBxdW90YSBsaW1pdCBlbmZvcmNlbWVudCwgd2hpY2ggZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnLCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIHdpdGggdjIgcXVvdGEgZm9ybWF0cy4gSXQgbW9kaWZpZXMgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgdG8gd3JpdGUgdGhpcyBmbGFnIHRvIGRpc2suIFRoZSBgc3RydWN0IHYyX2Rpc2tfZHFpbmZvYCB3cml0dGVuIHRvIGRpc2sgY29uc2lzdHMgb2YgNiBgX19sZTMyYCBmaWVsZHMsIGFsbCBvZiB3aGljaCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBxdW90YV93cml0ZWAgY2FsbC4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciBkaXNrLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6MTkuMTY1MDMyNzc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwNDE3NjQ0NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFVT1RBXCIsXG4gICAgXCJRRk1UX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHF1b3Rfc2V0X2RxaW5mb1wiLFxuICAgIFwiZHF1b3RfYWxsb2NfaW5vZGVcIixcbiAgICBcIl9fZHF1b3RfdHJhbnNmZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYSByZXN0cmljdGlvbiBvbiB0aGUgYERRRl9ST09UX1NRVUFTSGAgZmxhZywgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCB3aXRoIHYyIHF1b3RhIGZvcm1hdHMuIEl0IG1vZGlmaWVzIGB2Ml93cml0ZV9maWxlX2luZm9gIHRvIHdyaXRlIHRoaXMgZmxhZyB0byBkaXNrLiBUaGUgYHN0cnVjdCB2Ml9kaXNrX2RxaW5mb2Agd3JpdHRlbiB0byBkaXNrIGNvbnNpc3RzIG9mIDYgYF9fbGUzMmAgZmllbGRzLCBhbGwgb2Ygd2hpY2ggYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBgcXVvdGFfd3JpdGVgIGNhbGwuIFRoZXJlIGlzIG5vIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgZGlzay4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIHF1b3RhIGxpbWl0IGVuZm9yY2VtZW50LCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0aGUgRFFGX1JPT1RfU1FVQVNIIGZsYWcgZm9yIHYyIHF1b3RhIGZvcm1hdHMsIHJlbW92aW5nIGEgY2hlY2sgdGhhdCByZXN0cmljdGVkIGl0IHRvIHYxIGZvcm1hdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcXVvdGEgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgbGltaXRzIGFyZSBlbmZvcmNlZCBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQ1OjE5LjE2NTA1MTAyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzIzMjU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU0NmQ0ZGM4ZTU1ZDUxNTkyN2FlMmY2YWM1NWFiNGM2ZjFiZDc0MTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6NDU6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmNcXG5pbmRleCA5ODUwZGUzOTU1ZDMxLi5lNDMxZTcyZGZlYTgwIDEwMDY0NFxcbi0tLSBhL2ZzL3F1b3RhL2RxdW90LmNcXG4rKysgYi9mcy9xdW90YS9kcXVvdC5jXFxuQEAgLTEzMDksOCArMTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbiBcXHRzdHJ1Y3QgbWVtX2RxaW5mbyAqaW5mbyA9IFxcdTAwMjZzYl9kcW9wdChkcXVvdC1cXHUwMDNlZHFfc2IpLVxcdTAwM2VpbmZvW2RxdW90LVxcdTAwM2VkcV9pZC50eXBlXTtcXG4gXFxuIFxcdHJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICAoaW5mby1cXHUwMDNlZHFpX2Zvcm1hdC1cXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxcbi1cXHRcXHQhKGluZm8tXFx1MDAzZWRxaV9mbGFncyBcXHUwMDI2IERRRl9ST09UX1NRVUFTSCkpO1xcbitcXHQgICAgICAgIShpbmZvLVxcdTAwM2VkcWlfZmxhZ3MgXFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsXFxuQEAgLTI5MDAsMTEgKzI4OTksNiBAQCBpbnQgZHF1b3Rfc2V0X2RxaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgc3RydWN0IHFjX2luZm8gKmlpKVxcbiBcXHRpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKVxcbiBcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbiBcXHRtaSA9IHNiX2Rxb3B0KHNiKS1cXHUwMDNlaW5mbyArIHR5cGU7XFxuLVxcdGlmIChpaS1cXHUwMDNlaV9maWVsZG1hc2sgXFx1MDAyNiBRQ19GTEFHUykge1xcbi1cXHRcXHRpZiAoKGlpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgUUNJX1JPT1RfU1FVQVNIIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgbWktXFx1MDAzZWRxaV9mb3JtYXQtXFx1MDAzZXFmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbiBcXHRzcGluX2xvY2soXFx1MDAyNmRxX2RhdGFfbG9jayk7XFxuIFxcdGlmIChpaS1cXHUwMDNlaV9maWVsZG1hc2sgXFx1MDAyNiBRQ19TUENfVElNRVIpXFxuIFxcdFxcdG1pLVxcdTAwM2VkcWlfYmdyYWNlID0gaWktXFx1MDAzZWlfc3BjX3RpbWVsaW1pdDtcXG5kaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdjIuYyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmNcXG5pbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NFxcbi0tLSBhL2ZzL3F1b3RhL3F1b3RhX3YyLmNcXG4rKysgYi9mcy9xdW90YS9xdW90YV92Mi5jXFxuQEAgLTE0Miw4ICsxNDIsNyBAQCBzdGF0aWMgaW50IHYyX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbiBcXHR9XFxuIFxcdGluZm8tXFx1MDAzZWRxaV9iZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmdyYWNlKTtcXG4gXFx0aW5mby1cXHUwMDNlZHFpX2lncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9pZ3JhY2UpO1xcbi1cXHQvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovXFxuLVxcdGluZm8tXFx1MDAzZWRxaV9mbGFncyA9IDA7XFxuK1xcdGluZm8tXFx1MDAzZWRxaV9mbGFncyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9mbGFncykgXFx1MDAyNiBEUUZfUk9PVF9TUVVBU0g7XFxuIFxcdHFpbmZvLVxcdTAwM2VkcWlfc2IgPSBzYjtcXG4gXFx0cWluZm8tXFx1MDAzZWRxaV90eXBlID0gdHlwZTtcXG4gXFx0cWluZm8tXFx1MDAzZWRxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTtcXG5AQCAtMjA5LDggKzIwOCw3IEBAIHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbiBcXHRpbmZvLVxcdTAwM2VkcWlfZmxhZ3MgXFx1MDAyNj0gfkRRRl9JTkZPX0RJUlRZO1xcbiBcXHRkaW5mby5kcWlfYmdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cXHUwMDNlZHFpX2JncmFjZSk7XFxuIFxcdGRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLVxcdTAwM2VkcWlfaWdyYWNlKTtcXG4tXFx0LyogTm8gZmxhZ3MgY3VycmVudGx5IHN1cHBvcnRlZCAqL1xcbi1cXHRkaW5mby5kcWlfZmxhZ3MgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoaW5mby1cXHUwMDNlZHFpX2ZsYWdzIFxcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRxX2RhdGFfbG9jayk7XFxuIFxcdGRpbmZvLmRxaV9ibG9ja3MgPSBjcHVfdG9fbGUzMihxaW5mby1cXHUwMDNlZHFpX2Jsb2Nrcyk7XFxuIFxcdGRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLVxcdTAwM2VkcWlfZnJlZV9ibGspO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXFxuaW5kZXggNTIwOTAxMDViODI4Mi4uYTM0ZjQzNTE5YWY4MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXFxuQEAgLTE0OSw3ICsxNDksNyBAQCBlbnVtIHtcXG4gXFx0RFFGX1BSSVZBVEVcXG4gfTtcXG4gXFxuLS8qIFJvb3Qgc3F1YXNoIGVuYWJsZWQgKGZvciB2MSBxdW90YSBmb3JtYXQpICovXFxuKy8qIEVuZm9yY2UgbGltaXRzIGFsc28gZm9yIENBUF9TWVNfUkVTT1VSQ0UgcHJvY2Vzc2VzICovXFxuICNkZWZpbmUgRFFGX1JPT1RfU1FVQVNIXFx0KDEgXFx1MDAzY1xcdTAwM2MgRFFGX1JPT1RfU1FVQVNIX0IpXFxuIC8qIFF1b3RhIHN0b3JlZCBpbiBhIHN5c3RlbSBmaWxlICovXFxuICNkZWZpbmUgRFFGX1NZU19GSUxFXFx0KDEgXFx1MDAzY1xcdTAwM2MgRFFGX1NZU19GSUxFX0IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQ1OjIwLjYyMzEyNjYxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYzNDMyNzA2NzkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRVU9UQVwiLFxuICAgIFwiUUZNVF9WMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRxdW90X3NldF9kcWluZm9cIixcbiAgICBcImRxdW90X2FsbG9jX2lub2RlXCIsXG4gICAgXCJfX2RxdW90X3RyYW5zZmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0aGUgRFFGX1JPT1RfU1FVQVNIIGZsYWcgZm9yIHYyIHF1b3RhIGZvcm1hdHMsIHJlbW92aW5nIGEgY2hlY2sgdGhhdCByZXN0cmljdGVkIGl0IHRvIHYxIGZvcm1hdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcXVvdGEgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgbGltaXRzIGFyZSBlbmZvcmNlZCBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU0NmQ0ZGM4ZTU1ZDUxNTkyN2FlMmY2YWM1NWFiNGM2ZjFiZDc0MTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzo0NToxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jXG5pbmRleCA5ODUwZGUzOTU1ZDMxLi5lNDMxZTcyZGZlYTgwIDEwMDY0NFxuLS0tIGEvZnMvcXVvdGEvZHF1b3QuY1xuKysrIGIvZnMvcXVvdGEvZHF1b3QuY1xuQEAgLTEzMDksOCArMTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuIFx0c3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBcdTAwMjZzYl9kcW9wdChkcXVvdC1cdTAwM2VkcV9zYiktXHUwMDNlaW5mb1tkcXVvdC1cdTAwM2VkcV9pZC50eXBlXTtcbiBcbiBcdHJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIChpbmZvLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxuLVx0XHQhKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpKTtcbitcdCAgICAgICAhKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsXG5AQCAtMjkwMCwxMSArMjg5OSw2IEBAIGludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpXG4gXHRpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKVxuIFx0XHRyZXR1cm4gLUVTUkNIO1xuIFx0bWkgPSBzYl9kcW9wdChzYiktXHUwMDNlaW5mbyArIHR5cGU7XG4tXHRpZiAoaWktXHUwMDNlaV9maWVsZG1hc2sgXHUwMDI2IFFDX0ZMQUdTKSB7XG4tXHRcdGlmICgoaWktXHUwMDNlaV9mbGFncyBcdTAwMjYgUUNJX1JPT1RfU1FVQVNIIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIG1pLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXHRzcGluX2xvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbiBcdGlmIChpaS1cdTAwM2VpX2ZpZWxkbWFzayBcdTAwMjYgUUNfU1BDX1RJTUVSKVxuIFx0XHRtaS1cdTAwM2VkcWlfYmdyYWNlID0gaWktXHUwMDNlaV9zcGNfdGltZWxpbWl0O1xuZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhX3YyLmMgYi9mcy9xdW90YS9xdW90YV92Mi5jXG5pbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NFxuLS0tIGEvZnMvcXVvdGEvcXVvdGFfdjIuY1xuKysrIGIvZnMvcXVvdGEvcXVvdGFfdjIuY1xuQEAgLTE0Miw4ICsxNDIsNyBAQCBzdGF0aWMgaW50IHYyX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuIFx0fVxuIFx0aW5mby1cdTAwM2VkcWlfYmdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2JncmFjZSk7XG4gXHRpbmZvLVx1MDAzZWRxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTtcbi1cdC8qIE5vIGZsYWdzIGN1cnJlbnRseSBzdXBwb3J0ZWQgKi9cbi1cdGluZm8tXHUwMDNlZHFpX2ZsYWdzID0gMDtcbitcdGluZm8tXHUwMDNlZHFpX2ZsYWdzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZsYWdzKSBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIO1xuIFx0cWluZm8tXHUwMDNlZHFpX3NiID0gc2I7XG4gXHRxaW5mby1cdTAwM2VkcWlfdHlwZSA9IHR5cGU7XG4gXHRxaW5mby1cdTAwM2VkcWlfYmxvY2tzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2Jsb2Nrcyk7XG5AQCAtMjA5LDggKzIwOCw3IEBAIHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuIFx0aW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2PSB+RFFGX0lORk9fRElSVFk7XG4gXHRkaW5mby5kcWlfYmdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfYmdyYWNlKTtcbiBcdGRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLVx1MDAzZWRxaV9pZ3JhY2UpO1xuLVx0LyogTm8gZmxhZ3MgY3VycmVudGx5IHN1cHBvcnRlZCAqL1xuLVx0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRkaW5mby5kcWlfZmxhZ3MgPSBjcHVfdG9fbGUzMihpbmZvLVx1MDAzZWRxaV9mbGFncyBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRxX2RhdGFfbG9jayk7XG4gXHRkaW5mby5kcWlfYmxvY2tzID0gY3B1X3RvX2xlMzIocWluZm8tXHUwMDNlZHFpX2Jsb2Nrcyk7XG4gXHRkaW5mby5kcWlfZnJlZV9ibGsgPSBjcHVfdG9fbGUzMihxaW5mby1cdTAwM2VkcWlfZnJlZV9ibGspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmhcbmluZGV4IDUyMDkwMTA1YjgyODIuLmEzNGY0MzUxOWFmODAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmhcbkBAIC0xNDksNyArMTQ5LDcgQEAgZW51bSB7XG4gXHREUUZfUFJJVkFURVxuIH07XG4gXG4tLyogUm9vdCBzcXVhc2ggZW5hYmxlZCAoZm9yIHYxIHF1b3RhIGZvcm1hdCkgKi9cbisvKiBFbmZvcmNlIGxpbWl0cyBhbHNvIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3NlcyAqL1xuICNkZWZpbmUgRFFGX1JPT1RfU1FVQVNIXHQoMSBcdTAwM2NcdTAwM2MgRFFGX1JPT1RfU1FVQVNIX0IpXG4gLyogUXVvdGEgc3RvcmVkIGluIGEgc3lzdGVtIGZpbGUgKi9cbiAjZGVmaW5lIERRRl9TWVNfRklMRVx0KDEgXHUwMDNjXHUwMDNjIERRRl9TWVNfRklMRV9CKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6MjAuNjIzMTI3ODMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA3NTc5NDM0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUXVvdGEgU3lzdGVtIEVuaGFuY2VtZW50OiBFbmFibGluZyBSb290IFNxdWFzaCBmb3IgdjIgRm9ybWF0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgYSBzaWduaWZpY2FudCwgYWxiZWl0IHN1YnRsZSwgY2hhbmdlIHRvIGhvdyBxdW90YXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBQcmV2aW91c2x5LCB0aGUgY29kZSByZXN0cmljdGVkIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnIHRvIHRoZSBvbGRlciB2MSBxdW90YSBmb3JtYXQgKGBRRk1UX1ZGU19PTERgKS4gTm93LCB0aGUgcGF0Y2ggaXMgb3BlbmluZyBpdCB1cCwgYWxsb3dpbmcgYERRRl9ST09UX1NRVUFTSGAgdG8gYmUgc3VwcG9ydGVkIGZvciB0aGUgdjIgcXVvdGEgZm9ybWF0IGFzIHdlbGwuIFRoYXQncyBhIGdvb2QgbW92ZSwgbWFrZXMgdGhpbmdzIG1vcmUgY29uc2lzdGVudC4gVGhlIGB2Ml9yZWFkX2ZpbGVfaW5mb2AgYW5kIGB2Ml93cml0ZV9maWxlX2luZm9gIGZ1bmN0aW9ucyBpbiBgcXVvdGFfdjIuY2AgYXJlIHdoZXJlIHRoYXQgc3VwcG9ydCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC5cblxuVGhlIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaGAgaXMgYSBuaWNlIHRvdWNoLCB0b28uIEluc3RlYWQgb2YgdGhlIHYxIHNwZWNpZmljIHdvcmRpbmcgYWJvdXQgXCJSb290IHNxdWFzaCBlbmFibGVkXCIsIGl0IG5vdyBzYXlzIFwiRW5mb3JjZSBsaW1pdHMgYWxzbyBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMsXCIgd2hpY2ggaXMgYSBmYXIgbW9yZSBnZW5lcmFsIGFuZCBhY2N1cmF0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGtleSBmdW5jdGlvbnMgbGlrZSBgaWdub3JlX2hhcmRsaW1pdGAsIGBkcXVvdF9zZXRfZHFpbmZvYCwgYHYyX3JlYWRfZmlsZV9pbmZvYCwgYW5kIGB2Ml93cml0ZV9maWxlX2luZm9gLiBTbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIGRpZyBkZWVwZXIuXG5cblRpbWUgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIHRoaXMgc3R1ZmYuIEkgYmV0IGBmcy9xdW90YS9LY29uZmlnYCB3aWxsIGhhdmUgdGhlIGtleXMuIFByb2JhYmx5IGBDT05GSUdfUVVPVEFgIGFuZCBgQ09ORklHX1FVT1RBX1YyYC4gSSdsbCB2ZXJpZnkgdGhlc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0NTo0MS4zODEwNzU4NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA4ODgwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFVT1RBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvS2NvbmZpZy01LVxcbmZzL3F1b3RhL0tjb25maWc6Njpjb25maWcgUVVPVEFcXG5mcy9xdW90YS9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUXVvdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctMTktXFxuZnMvcXVvdGEvS2NvbmZpZzoyMDpjb25maWcgUVVPVEFfTkVUTElOS19JTlRFUkZBQ0VcXG5mcy9xdW90YS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlJlcG9ydCBxdW90YSBtZXNzYWdlcyB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlXFxcIlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZz0yOD1jb25maWcgUFJJTlRfUVVPVEFfV0FSTklOR1xcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy0zNy1cXG5mcy9xdW90YS9LY29uZmlnOjM4OmNvbmZpZyBRVU9UQV9ERUJVR1xcbmZzL3F1b3RhL0tjb25maWctMzktXFx0Ym9vbCBcXFwiQWRkaXRpb25hbCBxdW90YSBzYW5pdHkgY2hlY2tzXFxcIlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy00Ni0jIEdlbmVyaWMgc3VwcG9ydCBmb3IgdHJlZSBzdHJ1Y3R1cmVkIHF1b3RhIGZpbGVzLiBTZWxlY3RlZCB3aGVuIG5lZWRlZC5cXG5mcy9xdW90YS9LY29uZmlnOjQ3OmNvbmZpZyBRVU9UQV9UUkVFXFxuZnMvcXVvdGEvS2NvbmZpZy00OC1cXHQgdHJpc3RhdGVcXG4tLVxcbmZzL3F1b3RhL0tjb25maWc9NTg9Y29uZmlnIFFGTVRfVjJcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctNjctXFxuZnMvcXVvdGEvS2NvbmZpZzo2ODpjb25maWcgUVVPVEFDVExcXG5mcy9xdW90YS9LY29uZmlnLTY5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6NDEuNDcxOTY5NjAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNjEyODc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyBRRk1UX1YyKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIG9iamVjdGl2ZSBpcyBsaWtlbHkgdG8gZXZhbHVhdGUgc29tZSBuZXcgY29kZSwgbWF5YmUgYW4gaW1wbGVtZW50YXRpb24sIG9yIHNvbWUgcGllY2Ugb2YgdGVjaG5vbG9neSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBwcm90b2NvbCBgUUZNVF9WMmAuIEkgd2FudCB0byBzdGFydCBieSBtYWtpbmcgc3VyZSBJJ20gdXNpbmcgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uLCBzbyBJIHdpbGwgc3RhcnQgYnkgZG91YmxlIGNoZWNraW5nIGl0LiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBRRk1UX1YyYC4gSG9wZWZ1bGx5LCBpdCdzIGEga25vd24gcXVhbnRpdHkuIEl0IG1heSBiZSBoZWxwZnVsIHRvIHJlY2FsbCBpdHMgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBrbm93IHRoZSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBiZW5lZml0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQ1OjQ0LjQ5ODEwMTcwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg3MjI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUUZNVF9WMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3F1b3RhL0tjb25maWc9NTA9Y29uZmlnIFFGTVRfVjFcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctNTctXFxuZnMvcXVvdGEvS2NvbmZpZzo1ODpjb25maWcgUUZNVF9WMlxcbmZzL3F1b3RhL0tjb25maWctNTktXFx0dHJpc3RhdGUgXFxcIlF1b3RhIGZvcm1hdCB2ZnN2MCBhbmQgdmZzdjEgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6NDQuNTc1OTg1OTQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzMDMyMTAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipRdW90YSBJbXBsZW1lbnRhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIHF1b3RhIGltcGxlbWVudGF0aW9uIHNvcnRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSdtIGdvaW5nIHRvIG5lZWQgdG8gd29yayB3aXRoIGBRVU9UQWAgYW5kIGBRRk1UX1YyYCwgb2J2aW91c2x5LiBBbmQgc2luY2UgSSdtIGRlYWxpbmcgd2l0aCBzZXR0aW5nIHF1b3RhIGluZm9ybWF0aW9uLCBgUVVPVEFDVExgIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gYmUgZXNzZW50aWFsLlxuXG5UaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSdsbCBzdGFydCB3aXRoIGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIGZpbmQgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFuZCBwb3RlbnRpYWxseSBtb2RpZnkuXG5cbkxldCdzIHNlZeKApiBsb29rcyBsaWtlIGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBzdGF0aWMsIHNvIHByb2JhYmx5IG5vdCBkaXJlY3RseSByZWxldmFudCB0byBteSB0YXNrLiBBaCwgaGVyZSdzIHNvbWV0aGluZyBwcm9taXNpbmc6IGBkcXVvdF9zZXRfZHFpbmZvYCBpcyBleHBvcnRlZCBvciB1c2VkIGJ5IHF1b3RhY3RsLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBvbmUgbW9yZSwgYXMgaXQgc2VlbXMgcmVsZXZhbnQgdG8gc2V0dGluZyBxdW90YSBpbmZvcm1hdGlvbi4gQWxzbywgSSBzZWUgYHYyX3JlYWRfZmlsZV9pbmZvYCBhbmQgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgYXJlIHN0YXRpYyBidXQgY2FsbGVkIHRocm91Z2ggb3BzLCBzbyB0aGV5IGFyZSBwcm9iYWJseSByZWxhdGVkLiBJIHdpbGwga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6NTAuMDA2MzA5NTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDk3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRxdW90X3NldF9kcWluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcXVvdGEvZHF1b3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9xdW90YS9kcXVvdC5jPTI4ODk9RVhQT1JUX1NZTUJPTChkcXVvdF9nZXRfc3RhdGUpO1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0yODkxLS8qIEdlbmVyaWMgcm91dGluZSBmb3Igc2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBmaWxlIGluZm9ybWF0aW9uICovXFxuZnMvcXVvdGEvZHF1b3QuYzoyODkyOmludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpXFxuZnMvcXVvdGEvZHF1b3QuYy0yODkzLXtcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMjkxNy19XFxuZnMvcXVvdGEvZHF1b3QuYzoyOTE4OkVYUE9SVF9TWU1CT0woZHF1b3Rfc2V0X2RxaW5mbyk7XFxuZnMvcXVvdGEvZHF1b3QuYy0yOTE5LVxcbmZzL3F1b3RhL2RxdW90LmM9MjkyMD1jb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGRxdW90X3F1b3RhY3RsX3N5c2ZpbGVfb3BzID0ge1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0yOTI0LVxcdC5nZXRfc3RhdGVcXHQ9IGRxdW90X2dldF9zdGF0ZSxcXG5mcy9xdW90YS9kcXVvdC5jOjI5MjU6XFx0LnNldF9pbmZvXFx0PSBkcXVvdF9zZXRfZHFpbmZvLFxcbmZzL3F1b3RhL2RxdW90LmMtMjkyNi1cXHQuZ2V0X2RxYmxrXFx0PSBkcXVvdF9nZXRfZHFibGssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQ1OjUwLjEwMjQxMzA0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjI3ODAxODc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBQb3RlbnRpYWwgRm9jdXMgUG9pbnRzIGZvciBDb2RlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGRpcmVjdCBteSBhdHRlbnRpb24uIGBkcXVvdF9zZXRfZHFpbmZvYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQ7IGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgcXVvdGEgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIHdlJ2QgZmluZCBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIHZ1bG5lcmFiaWxpdGllcy4gQnV0IHRoZW4gbXkgbWluZCBkcmlmdHMgdG8gYHYyX3JlYWRfZmlsZV9pbmZvYC4gVGhhdCdzIGFub3RoZXIgYXJlYSB3b3J0aCBpbnZlc3RpZ2F0aW5nLCBlc3BlY2lhbGx5IHdpdGggZmlsZSBzeXN0ZW0gbWV0YWRhdGEgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHdlaWdoIHRoZSB0cmFkZS1vZmZzOiBgZHF1b3Rfc2V0X2RxaW5mb2AgbWlnaHQgYmUgbW9yZSBmb2N1c2VkIG9uIHF1b3RhIGVuZm9yY2VtZW50LCB3aGlsZSBgdjJfcmVhZF9maWxlX2luZm9gIGNvdWxkIGV4cG9zZSBpc3N1ZXMgcmVsYXRlZCB0byBmaWxlIGFjY2VzcyBhbmQgaGFuZGxpbmcsIHBvc3NpYmx5IGluY2x1ZGluZyBkYXRhIGNvcnJ1cHRpb24gb3IgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoIG1hbGZvcm1lZCBpbm9kZXMuIEJvdGggaGF2ZSBoaWdoLXZhbHVlIHBvdGVudGlhbC4gSeKAmWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIG1vcmUgbGlrZWx5IHRvIHlpZWxkIGEgdmFsdWFibGUgZmluZGluZywgb3IgaWYgdGhlcmUgaXMgb3ZlcmxhcCBvZiBzb21lIGtpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1MTo0Mi4zODA0MzU3OTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzUyOTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Ml9yZWFkX2ZpbGVfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9xdW90YV92Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3F1b3RhL3F1b3RhX3YyLmM9NzU9c3RhdGljIGludCB2Ml9jaGVja19xdW90YV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy04OS0vKiBSZWFkIGluZm9ybWF0aW9uIGhlYWRlciBmcm9tIHF1b3RhIGZpbGUgKi9cXG5mcy9xdW90YS9xdW90YV92Mi5jOjkwOnN0YXRpYyBpbnQgdjJfcmVhZF9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy05MS17XFxuLS1cXG5mcy9xdW90YS9xdW90YV92Mi5jPTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgdjJfZm9ybWF0X29wcyA9IHtcXG5mcy9xdW90YS9xdW90YV92Mi5jLTQxNy1cXHQuY2hlY2tfcXVvdGFfZmlsZVxcdD0gdjJfY2hlY2tfcXVvdGFfZmlsZSxcXG5mcy9xdW90YS9xdW90YV92Mi5jOjQxODpcXHQucmVhZF9maWxlX2luZm9cXHRcXHQ9IHYyX3JlYWRfZmlsZV9pbmZvLFxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtNDE5LVxcdC53cml0ZV9maWxlX2luZm9cXHQ9IHYyX3dyaXRlX2ZpbGVfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTE6NDIuNTA3OTc0Nzk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODEwODY2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gUXVvdGEgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCBtaWdodCBiZSBwcm9ibGVtYXRpYyBiZWNhdXNlIHRoZXkncmUgc3RhdGljIGFuZCBjb3VsZCBiZSBpbmxpbmVkLCBtYWtpbmcgZGlyZWN0IGZ1enppbmcgYnkgbmFtZSB0cmlja3kuIEhvd2V2ZXIsIHRoZXkncmUgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGB2Ml9mb3JtYXRfb3BzYCwgc28gaXQgbG9va3MgbGlrZSB0aGV5IGFyZSBub3QgaW5saW5lZCBhZnRlciBhbGwuIFN0aWxsLCB0aGUgc3RhdGljIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBvdGhlciBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgbWUgbG9vayBmb3IgYWx0ZXJuYXRpdmVzLiBgZHF1b3Rfc2V0X2RxaW5mb2Agc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZS5cblxuTm93LCB0aGF0IGJyaW5ncyB1cCB0aGUgcHJvYmxlbSBvZiBmaW5kaW5nIG91dCB3aGljaCBvZiB0aGVzZSBhcmUgdGhlIGJlc3QgdGFyZ2V0cy4gSSdtIGNoZWNraW5nIHdoZXJlIGBkcXVvdF9zZXRfZHFpbmZvYCBnZXRzIGNhbGxlZC4gUmlnaHQsIGl0J3MgdXNlZCBpbiBib3RoIGBkcXVvdF9xdW90YWN0bF9zeXNmaWxlX29wc2AgYW5kIGBkcXVvdF9xdW90YWN0bF9vcHNgLiBLbm93aW5nIHRoaXMsIEkgcmVhbGl6ZSB0aGlzIG1lYW5zIHRoZSBgcXVvdGFjdGxgIG9yIGBxdW90YWN0bF9mZGAgc3lzY2FsbHMgYXJlIHRoZSBsaWtlbHkgZW50cnkgcG9pbnRzLiBTbywgYGRxdW90X3NldF9kcWluZm9gIGlzIGRlZmluaXRlbHkgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgaW5pdGlhbCBmdXp6aW5nLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlIG1peC4gSSdtIHdvbmRlcmluZyBhYm91dCBgcXVvdGFfc2V0aW5mb2AgaW4gYGZzL3F1b3RhL3F1b3RhLmNgLiBXb3J0aCBrZWVwaW5nIGluIG1pbmQgYXMgYSBzZWNvbmRhcnkgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDg0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjUxOjQ4LjM4OTA2NDgzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTU2NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1b3RhX3NldGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcXVvdGEvcXVvdGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9xdW90YS9xdW90YS5jPTExOT1zdGF0aWMgaW50IHF1b3RhX2dldGluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHZvaWQgX191c2VyICphZGRyKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGEuYy0xNDYtXFxuZnMvcXVvdGEvcXVvdGEuYzoxNDc6c3RhdGljIGludCBxdW90YV9zZXRpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCB2b2lkIF9fdXNlciAqYWRkcilcXG5mcy9xdW90YS9xdW90YS5jLTE0OC17XFxuLS1cXG5mcy9xdW90YS9xdW90YS5jPTc2Nz1zdGF0aWMgaW50IGRvX3F1b3RhY3RsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLCBxaWRfdCBpZCxcXG4tLVxcbmZzL3F1b3RhL3F1b3RhLmMtNzk1LVxcdGNhc2UgUV9TRVRJTkZPOlxcbmZzL3F1b3RhL3F1b3RhLmM6Nzk2OlxcdFxcdHJldHVybiBxdW90YV9zZXRpbmZvKHNiLCB0eXBlLCBhZGRyKTtcXG5mcy9xdW90YS9xdW90YS5jLTc5Ny1cXHRjYXNlIFFfR0VUUVVPVEE6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjUxOjQ4LjUwODAzMDcxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcwNTA2OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlF1b3RhIFN5c3RlbSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgcXVvdGFzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBgcXVvdGFfc2V0aW5mb2AgYW5kIGBkb19xdW90YWN0bGAgYXJlIGxpa2VseSBzZXR1cCBvciBoZWxwZXIgZnVuY3Rpb25zOyB0aGV5J3JlIHByb2JhYmx5IHN0YXRpYywgaW52b2x2ZWQgaW4gdGhlIGludGVybmFsIHdvcmtpbmdzIGJ1dCBub3QgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUga2V5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIHRoZSBhY3R1YWwgc3lzY2FsbHMg4oCTIGBzeXNfcXVvdGFjdGxgIG9yIGl0cyBmaWxlIGRlc2NyaXB0b3IgdmFyaWFudCwgYHN5c19xdW90YWN0bF9mZGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHVzZXItc3BhY2UgcHJvZ3JhbXMgd291bGQgYmUgY2FsbGluZy4gTm93IEkga25vdyB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGZzL3F1b3RhL3F1b3RhLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTE6NTMuMzc4NTQxOTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTYwMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLipxdW90YWN0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9xdW90YS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3F1b3RhL3F1b3RhLmM9ODY2PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnF1b3RhY3RsX2Jsb2NrKGNvbnN0IGNoYXIgX191c2VyICpzcGVjaWFsLCBpbnQgY21kKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGEuYy05MTYtICovXFxuZnMvcXVvdGEvcXVvdGEuYzo5MTc6U1lTQ0FMTF9ERUZJTkU0KHF1b3RhY3RsLCB1bnNpZ25lZCBpbnQsIGNtZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbCxcXG5mcy9xdW90YS9xdW90YS5jLTkxOC1cXHRcXHRxaWRfdCwgaWQsIHZvaWQgX191c2VyICosIGFkZHIpXFxuLS1cXG5mcy9xdW90YS9xdW90YS5jLTk3Mi1cXG5mcy9xdW90YS9xdW90YS5jOjk3MzpTWVNDQUxMX0RFRklORTQocXVvdGFjdGxfZmQsIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGludCwgY21kLFxcbmZzL3F1b3RhL3F1b3RhLmMtOTc0LVxcdFxcdHFpZF90LCBpZCwgdm9pZCBfX3VzZXIgKiwgYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTE6NTMuNDQ2NzA3ODI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDMyNjg3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipFbmFibGluZyBWMiBRdW90YSBTcXVhc2hpbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGVuYWJsaW5nIGBEUUZfUk9PVF9TUVVBU0hgIGZvciB0aGUgdjIgcXVvdGEgZm9ybWF0LiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSBhY3R1YWxseSwgSSdkIHNheS4gR29vZCB0aGF0IGl0J3MgdGFnZ2VkIGFzIGBXb3J0aEZ1enppbmdgLCB3ZSdsbCBuZWVkIHRvIHN0cmVzcyB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGBkcXVvdF9zZXRfZHFpbmZvYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLiBBbmQsIG9mIGNvdXJzZSwgd2UgbmVlZCB0byBoYXZlIGBRVU9UQWAgYW5kIGBRRk1UX1YyYCBlbmFibGVkIHRvIGFjdHVhbGx5IHVzZSB0aGlzIG5ldyBmZWF0dXJlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBRVU9UQUNUTGAuLi4gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IGBRVU9UQUNUTGAgaXMgYWxzbyByZXF1aXJlZC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgaW4gYGZzL3F1b3RhL0tjb25maWdgIHRvIGJlIHN1cmUuIEl0IHdvdWxkIGJlIGEgc2lsbHkgb3ZlcnNpZ2h0IHRvIG1pc3MgdGhhdCBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njk2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTE6NTcuNzg5OTc5MzEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2NDE5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFVT1RBQ1RMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvS2NvbmZpZz01OD1jb25maWcgUUZNVF9WMlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy02Ny1cXG5mcy9xdW90YS9LY29uZmlnOjY4OmNvbmZpZyBRVU9UQUNUTFxcbmZzL3F1b3RhL0tjb25maWctNjktXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1MTo1Ny45MDE2MjYxNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMzg0MTQ0NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEJvb2xlYW4gRW5pZ21hOiBgUVVPVEFDVExgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyB2YXJpYWJsZSwgYFFVT1RBQ1RMYC4gSXQncyBhIEJvb2xlYW4sIG1lYW5pbmcgaXQncyBlaXRoZXIgdHJ1ZSBvciBmYWxzZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCB0aGVyZSdzIG5vIGFzc29jaWF0ZWQgcHJvbXB0LCBtZWFuaW5nIGl0J3Mgbm90IGRpcmVjdGx5IGRyaXZlbiBieSB1c2VyIGlucHV0IG9yIHNvbWUgZGlyZWN0IGV4dGVybmFsIHJlcXVlc3QuIFNvbWV0aGluZyAqZWxzZSogaGFzIHRvIGJlIHNldHRpbmcgaXRzIHZhbHVlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvc3NpYmlsaXRpZXMuIFdoYXQgaXMgdGhlIGFyY2hpdGVjdHVyZT8gV2hhdCBhcmUgdGhlIG90aGVyIG1vZHVsZXMgb3IgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNpbmcgaXQ/IElzIHRoaXMgcGFydCBvZiBhbiBpbnRlcm5hbCBjb250cm9sIGxvb3A/IE9yIGlzIGl0IGEgbW9yZSBwYXNzaXZlIHN0YXRlIGluZGljYXRvciwgdXBkYXRlZCBieSBvdGhlciwgbW9yZSBhY3RpdmUgcHJvY2Vzc2VzPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGxpdmVzIHRvIHVuZGVyc3RhbmQgaXRzIHNpZ25pZmljYW5jZS4gSXMgaXQgZ2xvYmFsPyBMb2NhbCB0byBhIGNlcnRhaW4gc2NvcGU/XG5cblRoaXMgbGFjayBvZiBhIHByb21wdCBpcyBhIGNsdWUsIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGZpZ3VyaW5nIG91dCB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgdmFyaWFibGUgdG8gZmlndXJlIG91dCAqd2hhdCogbWVjaGFuaXNtIGlzIGNob29zaW5nIGl0cyB0cnVlIG9yIGZhbHNlIHN0YXRlLCBhbmQgKndoeSouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1Mzo0OC4yODU3NzU3NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDE0MzM3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFFVT1RBQ1RMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9nZnMyL0tjb25maWc9Mj1jb25maWcgR0ZTMl9GU1xcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuZnMvZ2ZzMi9LY29uZmlnOjc6XFx0c2VsZWN0IFFVT1RBQ1RMXFxuZnMvZ2ZzMi9LY29uZmlnLTgtXFx0c2VsZWN0IEZTX0lPTUFQXFxuLS1cXG5mcy9xdW90YS9LY29uZmlnPTY9Y29uZmlnIFFVT1RBXFxuZnMvcXVvdGEvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlF1b3RhIHN1cHBvcnRcXFwiXFxuZnMvcXVvdGEvS2NvbmZpZzo4OlxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL3F1b3RhL0tjb25maWctOS1cXHRoZWxwXFxuLS1cXG5mcy94ZnMvS2NvbmZpZz03Nz1jb25maWcgWEZTX1FVT1RBXFxuLS1cXG5mcy94ZnMvS2NvbmZpZy03OS1cXHRkZXBlbmRzIG9uIFhGU19GU1xcbmZzL3hmcy9LY29uZmlnOjgwOlxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL3hmcy9LY29uZmlnLTgxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTM6NTAuNzI3MjE5ODMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTI2NjYyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipRdW90YSBDb25maWd1cmF0aW9uIEluc2lnaHRzKipcblxuUmlnaHQsIHNvIGBRVU9UQWAgZGlyZWN0bHkgc2VsZWN0cyBgUVVPVEFDVExgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkOyBlbmFibGluZyBgUVVPVEFgIGVmZmVjdGl2ZWx5IGhhbmRsZXMgdGhlIG5lY2Vzc2FyeSBjb250cm9sLiBObyBuZWVkIHRvIGRpZyBmdXJ0aGVyIHRoZXJlLlxuXG5Ob3csIHRoZSB1c2Ugb2YgYFFGTVRfVjJgIGlzIGV4cGxpY2l0bHkgc3RhdGVkIGFzIGJlaW5nIG5lY2Vzc2FyeSBmb3IgdGhlIHYyIHF1b3RhIGZvcm1hdC4gVGhhdCdzIGdvb2QgdG8ga25vdywgY29uZmlybWluZyBteSBleGlzdGluZyB1bmRlcnN0YW5kaW5nLlxuXG5MZXQncyBxdWlja2x5IHNjYW4gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHJlbGF0ZWQgZW50cmllcy4gSG9sZCBvbiwgaXQgbG9va3MgbGlrZSBgUVVPVEFfVFJFRWAgaXMgKmFsc28qIHNlbGVjdGVkIGJ5IGBRRk1UX1YyYC4gT2theSwgY29uZmlybWluZyB0aGUgZXhwZWN0ZWQgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHYyIGZvcm1hdCBzdXBwb3J0IGFuZCB0aGUgcXVvdGEgdHJlZSBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgYSBsb2dpY2FsIGNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1Mzo1NS41MTk4ODgzMDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDg2OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBRVU9UQV9UUkVFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvS2NvbmZpZz01OD1jb25maWcgUUZNVF9WMlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy02MC1cXHRkZXBlbmRzIG9uIFFVT1RBXFxuZnMvcXVvdGEvS2NvbmZpZzo2MTpcXHRzZWxlY3QgUVVPVEFfVFJFRVxcbmZzL3F1b3RhL0tjb25maWctNjItXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1Mzo1NS42MTkzODEwNzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMTEwMDA3NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlF1b3RhIENvbmZpZ3VyYXRpb24gRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIHF1b3RhIGNvbmZpZ3VyYXRpb25zIGhlcmUg4oCTIHNwZWNpZmljYWxseSBgUVVPVEFgIGFuZCBgUUZNVF9WMmAsIHRob3NlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciB0aGlzIHRhc2suIGBkcXVvdF9zZXRfZHFpbmZvYCBsb29rcyBwcm9taXNpbmcuIEl0J3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QsIGFuZCBpdCdzIHNwZWNpZmljYWxseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBxdW90YSBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgbmVlZC5cblxuSSB3YXMgaW5pdGlhbGx5IGNvbnNpZGVyaW5nIGB2Ml9yZWFkX2ZpbGVfaW5mb2AgYW5kIGB2Ml93cml0ZV9maWxlX2luZm9gLCBhbmQgd2hpbGUgdGhleSdyZSBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggcHJldmVudHMgaW5saW5pbmcsIHRoZXkncmUgc3RhdGljLiBPaCB3YWl0LCBgdjJfcmVhZF9maWxlX2luZm9gIGlzIGRlZmluZWQgaW4gYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBUaGF0IGZpbGUgbWFrZXMgaXQgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCBiZWNhdXNlIGl0J3Mgbm90IGlubGluZWQuXG5cblNvLCBJJ2xsIGdvIHdpdGggYWRkaW5nIGBkcXVvdF9zZXRfZHFpbmZvYC4gVGhhdCBsb29rcyBsaWtlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGNob2ljZS5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHNjYW4gYWdhaW4gdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBlbHNlIG9mIGltbWVkaWF0ZSByZWxldmFuY2UuIEFoLCBgaWdub3JlX2hhcmRsaW1pdGAgc2VlbXMgc3RhdGljIGFuZCBsaWtlbHkgaW5saW5lZCwgc28gSSB3b24ndCBuZWVkIHRvIGNvbnNpZGVyIGl0IGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjU1OjM4LjcyOTM5MTc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI2ODM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZ25vcmVfaGFyZGxpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL2RxdW90LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvZHF1b3QuYz0xMjkyPXN0YXRpYyB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdF93YXJuICp3YXJuKVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzA2LVxcbmZzL3F1b3RhL2RxdW90LmM6MTMwNzpzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcXG5mcy9xdW90YS9kcXVvdC5jLTEzMDgte1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYz0xMzE1PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2RlcyxcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTMyOC1cXHQgICAgbmV3aW5vZGVzIFxcdTAwM2UgZHF1b3QtXFx1MDAzZWRxX2RxYi5kcWJfaWhhcmRsaW1pdCBcXHUwMDI2XFx1MDAyNlxcbmZzL3F1b3RhL2RxdW90LmM6MTMyOTogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcXG5mcy9xdW90YS9kcXVvdC5jLTEzMzAtXFx0XFx0cHJlcGFyZV93YXJuaW5nKHdhcm4sIGRxdW90LCBRVU9UQV9OTF9JSEFSRFdBUk4pO1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzM4LVxcdCAgICBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCkgXFx1MDAzZT0gZHF1b3QtXFx1MDAzZWRxX2RxYi5kcWJfaXRpbWUgXFx1MDAyNlxcdTAwMjZcXG5mcy9xdW90YS9kcXVvdC5jOjEzMzk6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XFxuZnMvcXVvdGEvZHF1b3QuYy0xMzQwLVxcdFxcdHByZXBhcmVfd2FybmluZyh3YXJuLCBkcXVvdCwgUVVPVEFfTkxfSVNPRlRMT05HV0FSTik7XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTEzNjA9c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTM3Ny1cXHQgICAgdHNwYWNlIFxcdTAwM2UgZHF1b3QtXFx1MDAzZWRxX2RxYi5kcWJfYmhhcmRsaW1pdCBcXHUwMDI2XFx1MDAyNlxcbmZzL3F1b3RhL2RxdW90LmM6MTM3ODogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcXG5mcy9xdW90YS9kcXVvdC5jLTEzNzktXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRFFVT1RfU1BBQ0VfV0FSTilcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTM4OC1cXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFxcdTAwM2U9IGRxdW90LVxcdTAwM2VkcV9kcWIuZHFiX2J0aW1lIFxcdTAwMjZcXHUwMDI2XFxuZnMvcXVvdGEvZHF1b3QuYzoxMzg5OiAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkge1xcbmZzL3F1b3RhL2RxdW90LmMtMTM5MC1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBEUVVPVF9TUEFDRV9XQVJOKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NTozOC43ODU2Njg0MTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MzIwODMyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIENvZGUgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB3b25kZXJpbmcgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJIHNlZSBgaWdub3JlX2hhcmRsaW1pdGAgYW5kIGltbWVkaWF0ZWx5IG5vdGUgdGhhdCBpdCdzIHN0YXRpYyBhbmQgY2FsbGVkIGluIGEgYnVuY2ggb2YgZGlmZmVyZW50IHBsYWNlcy4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgdGhlIGNvbXBpbGVyICptaWdodCogaGF2ZSBpbmxpbmVkIGl0LCB3aGljaCB3b3VsZCBiZSBnb29kIGZvciBwZXJmb3JtYW5jZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCB3aXRoIGEgcXVpY2sgY2hlY2suIFRoZW4gdGhlcmUncyBgZHF1b3RfYWRkX2lub2Rlc2AgYW5kIGBkcXVvdF9hZGRfc3BhY2VgLiBUaGV5J3JlICphbHNvKiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQgc2luY2UgdGhleSBhcmUgcHJvYmFibHkgY2FsbGVkIG1vcmUgb2Z0ZW4sIG1heWJlIG5vdCBpbmxpbmVkLiBHaXZlbiB0aGF0IHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRxdW90X2FkZF9pbm9kZXNgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTU6NDIuMzY4ODc5MDI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI5OTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcXVvdF9hZGRfaW5vZGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL2RxdW90LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvZHF1b3QuYz0xMzA3PXN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE0LVxcbmZzL3F1b3RhL2RxdW90LmM6MTMxNTpzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE2LVxcdFxcdFxcdCAgICBzdHJ1Y3QgZHF1b3Rfd2FybiAqd2FybilcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MTc3Nj1pbnQgZHF1b3RfYWxsb2NfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTc5NC1cXHRcXHRcXHRjb250aW51ZTtcXG5mcy9xdW90YS9kcXVvdC5jOjE3OTU6XFx0XFx0cmV0ID0gZHF1b3RfYWRkX2lub2RlcyhkcXVvdCwgMSwgXFx1MDAyNndhcm5bY250XSk7XFxuZnMvcXVvdGEvZHF1b3QuYy0xNzk2LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MjAwOD1pbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90bylcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMjA2Mi1cXHRcXHRcXHRcXHRcXHUwMDI2ZHF1b3Rfc3JjdSwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkcV9kYXRhX2xvY2spKTtcXG5mcy9xdW90YS9kcXVvdC5jOjIwNjM6XFx0XFx0cmV0ID0gZHF1b3RfYWRkX2lub2Rlcyh0cmFuc2Zlcl90b1tjbnRdLCBpbm9kZV91c2FnZSxcXG5mcy9xdW90YS9kcXVvdC5jLTIwNjQtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ3YXJuX3RvW2NudF0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NTo0Mi40MTcxODMyMjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4MzU2NzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRHF1b3QgQWxsb2NhdGlvbiBhbmQgVHJhbnNmZXI6IEtleSBFeHBvcnRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgZHF1b3RfYWxsb2NfaW5vZGVgIGFuZCBgX19kcXVvdF90cmFuc2ZlcmAgYXJlIGV4cG9zZWQuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGluZGljYXRlcyB0aGV5J3JlIGludGVuZGVkIGZvciB1c2UgKm91dHNpZGUqIHRoZSBjb3JlIHF1b3RhIGltcGxlbWVudGF0aW9uLiBgZHF1b3RfYWxsb2NfaW5vZGVgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGRlYWxzIHdpdGggYWxsb2NhdGluZyBkaXNrIHF1b3RhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBmdW5kYW1lbnRhbCBsaW5rIGJldHdlZW4gdGhlIGZpbGVzeXN0ZW0gb2JqZWN0IGFuZCBpdHMgcXVvdGEgdHJhY2tpbmcuIFNlZWluZyBpdCBleHBvcnRlZCBtZWFucyBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgdGhvc2UgaW52b2x2ZWQgaW4gZmlsZXN5c3RlbSBvcGVyYXRpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBxdW90YSwgb3IgcGVyaGFwcyBldmVuIGluIGN1c3RvbSBxdW90YSBzZXR1cHMuXG5cblRoZW4gdGhlcmUncyBgX19kcXVvdF90cmFuc2ZlcmAuIFRoZSBkb3VibGUgdW5kZXJzY29yZSBzdWdnZXN0cyBpdCdzIGEgXCJsb3ctbGV2ZWxcIiBmdW5jdGlvbiwgcHJvYmFibHkgbm90IHRoZSBwcmltYXJ5IGludGVyZmFjZS4gSXQncyBsaWtlbHkgdGhlIHdvcmtob3JzZSBmb3IgYWN0dWFsbHkgKm1vdmluZyogcXVvdGEgaW5mb3JtYXRpb24g4oCTIGRlYml0aW5nIG9uZSBkcXVvdCwgY3JlZGl0aW5nIGFub3RoZXIsIHByb2JhYmx5IGFjcm9zcyBkaWZmZXJlbnQgdXNlcnMgb3IgZ3JvdXBzLiBFeHBvcnRpbmcgdGhpcyBpcyBzaWduaWZpY2FudC4gSXQgdGVsbHMgbWUgdGhhdCBvdGhlciBtb2R1bGVzIG1pZ2h0IG5lZWQgdG8gaW1wbGVtZW50IHRoZWlyIG93biBzdHJhdGVnaWVzIGZvciBxdW90YSBtYW5hZ2VtZW50IG9yIGRhdGEgbW92ZW1lbnQsIHBlcmhhcHMgZm9yIHRoaW5ncyBsaWtlIG9ubGluZSByZXNpemluZywgZmlsZXN5c3RlbSBjb3B5IG9wZXJhdGlvbnMsIG9yIGV2ZW4gdGhpbmdzIGxpa2UgY29udGFpbmVyaXplZCBzdG9yYWdlIG1hbmFnZW1lbnQgd2hlcmUgeW91IG1pZ2h0IGJlIG1hbmlwdWxhdGluZyBxdW90YSBib3VuZGFyaWVzIGJldHdlZW4gY29udGFpbmVycy4gVGhlIGBfX2AgcHJlZml4IHdvdWxkIGluZGljYXRlIHRoYXQgY2FyZSBpcyBuZWVkZWQgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBhcyB0aGVyZSBhcmUgcHJvYmFibHkgY29uc3RyYWludHMgb24gaG93IHRoZSBzeXN0ZW0gbmVlZHMgdG8gYmUgdXNlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBjb25mbGljdHMuXG5cbkJhc2ljYWxseSwgc2VlaW5nIHRoZXNlIGZ1bmN0aW9ucyBleHBvcnRlZCB0ZWxscyBtZSB0aGF0IHRoZSBxdW90YSBzdWJzeXN0ZW0gaXMgZGVzaWduZWQgdG8gYmUgbW9yZSBmbGV4aWJsZSBhbmQgZXh0ZW5zaWJsZSB0aGFuIGEgbG90IG9mIHBlb3BsZSBtaWdodCB0aGluay4gVGhleSd2ZSBwcm92aWRlZCB0b29scyB0byBob29rIGludG8gdGhlc2UgY3JpdGljYWwgcG9pbnRzLiBUaGV5IGFyZSBnaXZpbmcgdXMgc29tZSBwb3dlcmZ1bCBjYXBhYmlsaXRpZXMgaWYgd2UgbmVlZCB0byBkbyBzb21lIG1vcmUgY29tcGxleCBxdW90YSBvcGVyYXRpb25zLiBJdCdzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIHdoZW4gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBpbnRlZ3JhdGUgcXVvdGEgbWFuYWdlbWVudCBpbnRvIGFkdmFuY2VkIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLCBjbG91ZC1iYXNlZCBzdG9yYWdlLCBvciBtb3JlIHNwZWNpYWxpemVkIHVzZSBjYXNlcy4gV2UndmUgZ290IHRoZSBhYmlsaXR5IHRvIG1vZGlmeSBxdW90YSBkYXRhIGFuZCBxdW90YXMgb24gYW4gaW5vZGUsIGJ1dCB0aGUgaW1wbGljYXRpb25zIG9mIGNhbGxpbmcgdGhlc2Ugb3V0c2lkZSB0aGUgc3RhbmRhcmQgcXVvdGEgcm91dGluZXMgd291bGQgbmVlZCB0byBiZSBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTU6NDcuNzAwNzU0NzU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAwOTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkcXVvdF9hbGxvY19pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9kcXVvdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3F1b3RhL2RxdW90LmM9MTc3Nj1pbnQgZHF1b3RfYWxsb2NfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTgxNy19XFxuZnMvcXVvdGEvZHF1b3QuYzoxODE4OkVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2NfaW5vZGUpO1xcbmZzL3F1b3RhL2RxdW90LmMtMTgxOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTU6NDcuNzQ5NzY5Njg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMTUwODk0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBRdW90YSBTdWJzeXN0ZW0gQ2hhbmdlKipcblxuT2theSwgc28gSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGRxdW90X3NldF9kcWluZm9gLCBgZHF1b3RfYWxsb2NfaW5vZGVgLCBhbmQgYF9fZHF1b3RfdHJhbnNmZXJgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgYXJlYXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgZm9yIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIG9mIGNvdXJzZS5cblxuTGV0IG1lIGJyZWFrIGRvd24gbXkgdW5kZXJzdGFuZGluZy4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHF1b3RhIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGVuYWJsaW5nIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnIGZvciB2MiBxdW90YSBmb3JtYXRzLiBQcmV2aW91c2x5LCB0aGF0IGZsYWcgd2FzIHJlc3RyaWN0ZWQgdG8gdjEgZm9ybWF0cy4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtb2RpZmllcyBob3cgcmVzb3VyY2UgbGltaXRzIGFyZSBlbmZvcmNlZCwgZXNwZWNpYWxseSBmb3IgcHJvY2Vzc2VzIHdpdGggYENBUF9TWVNfUkVTT1VSQ0VgLlxuXG5TbywgdGhlIGZvY3VzIGlzIG9uIGhvdyBsaW1pdHMgYXJlIGhhbmRsZWQgYW5kIHRyYW5zbGF0ZWQgd2l0aGluIHRoZSBEcXVvdCBzeXN0ZW0sIHdpdGggdGhpcyBmbGFnLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZGlmZmVyZW50IHF1b3RhIGZvcm1hdHMsIGFuZCBob3cgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdnVsbmVyYWJpbGl0aWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIHJlc291cmNlIGV4aGF1c3Rpb24gd2l0aGluIHRoZSBxdW90YSBzeXN0ZW0uIFRoZSBgUVVPVEFgIGFuZCBgUUZNVF9WMmAgY29uZmlndXJhdGlvbnMgYXJlIGltcG9ydGFudCBoZXJlIHRvIHRlc3QgZGlmZmVyZW50IGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTkxLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NTo1NC44NjQ4NjE0MTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTMzMDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUVVPVEFcIixcbiAgICBcIlFGTVRfVjJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcXVvdF9zZXRfZHFpbmZvXCIsXG4gICAgXCJkcXVvdF9hbGxvY19pbm9kZVwiLFxuICAgIFwiX19kcXVvdF90cmFuc2ZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuYWJsZXMgdGhlIERRRl9ST09UX1NRVUFTSCBmbGFnIGZvciB2MiBxdW90YSBmb3JtYXRzLCByZW1vdmluZyBhIGNoZWNrIHRoYXQgcmVzdHJpY3RlZCBpdCB0byB2MSBmb3JtYXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHF1b3RhIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGxpbWl0cyBhcmUgZW5mb3JjZWQgZm9yIENBUF9TWVNfUkVTT1VSQ0UgcHJvY2Vzc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFVT1RBXCIsXG4gICAgXCJRRk1UX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHF1b3Rfc2V0X2RxaW5mb1wiLFxuICAgIFwiZHF1b3RfYWxsb2NfaW5vZGVcIixcbiAgICBcIl9fZHF1b3RfdHJhbnNmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIHRoZSBEUUZfUk9PVF9TUVVBU0ggZmxhZyBmb3IgdjIgcXVvdGEgZm9ybWF0cywgcmVtb3ZpbmcgYSBjaGVjayB0aGF0IHJlc3RyaWN0ZWQgaXQgdG8gdjEgZm9ybWF0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBxdW90YSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBsaW1pdHMgYXJlIGVuZm9yY2VkIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTU6NTQuOTUwMTk4NTM1WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDYzMjQ2NjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjU1OjU0Ljk1MDk2NTMwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NDYzMTY5MzczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnLCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIHdpdGggdjIgcXVvdGEgZm9ybWF0cy4gSXQgbW9kaWZpZXMgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgdG8gd3JpdGUgdGhpcyBmbGFnIHRvIGRpc2suIFRoZSBgc3RydWN0IHYyX2Rpc2tfZHFpbmZvYCB3cml0dGVuIHRvIGRpc2sgY29uc2lzdHMgb2YgNiBgX19sZTMyYCBmaWVsZHMsIGFsbCBvZiB3aGljaCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBxdW90YV93cml0ZWAgY2FsbC4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciBkaXNrLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NDZkNGRjOGU1NWQ1MTU5MjdhZTJmNmFjNTVhYjRjNmYxYmQ3NDE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6NDU6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuY1xuaW5kZXggOTg1MGRlMzk1NWQzMS4uZTQzMWU3MmRmZWE4MCAxMDA2NDRcbi0tLSBhL2ZzL3F1b3RhL2RxdW90LmNcbisrKyBiL2ZzL3F1b3RhL2RxdW90LmNcbkBAIC0xMzA5LDggKzEzMDksNyBAQCBzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcbiBcdHN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gXHUwMDI2c2JfZHFvcHQoZHF1b3QtXHUwMDNlZHFfc2IpLVx1MDAzZWluZm9bZHF1b3QtXHUwMDNlZHFfaWQudHlwZV07XG4gXG4gXHRyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICAoaW5mby1cdTAwM2VkcWlfZm9ybWF0LVx1MDAzZXFmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQgfHxcbi1cdFx0IShpbmZvLVx1MDAzZWRxaV9mbGFncyBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKSk7XG4rXHQgICAgICAgIShpbmZvLVx1MDAzZWRxaV9mbGFncyBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcbiB9XG4gXG4gc3RhdGljIGludCBkcXVvdF9hZGRfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLFxuQEAgLTI5MDAsMTEgKzI4OTksNiBAQCBpbnQgZHF1b3Rfc2V0X2RxaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgc3RydWN0IHFjX2luZm8gKmlpKVxuIFx0aWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSlcbiBcdFx0cmV0dXJuIC1FU1JDSDtcbiBcdG1pID0gc2JfZHFvcHQoc2IpLVx1MDAzZWluZm8gKyB0eXBlO1xuLVx0aWYgKGlpLVx1MDAzZWlfZmllbGRtYXNrIFx1MDAyNiBRQ19GTEFHUykge1xuLVx0XHRpZiAoKGlpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFFDSV9ST09UX1NRVUFTSCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBtaS1cdTAwM2VkcWlfZm9ybWF0LVx1MDAzZXFmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQpKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFx0c3Bpbl9sb2NrKFx1MDAyNmRxX2RhdGFfbG9jayk7XG4gXHRpZiAoaWktXHUwMDNlaV9maWVsZG1hc2sgXHUwMDI2IFFDX1NQQ19USU1FUilcbiBcdFx0bWktXHUwMDNlZHFpX2JncmFjZSA9IGlpLVx1MDAzZWlfc3BjX3RpbWVsaW1pdDtcbmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92Mi5jIGIvZnMvcXVvdGEvcXVvdGFfdjIuY1xuaW5kZXggYTI0ZmFiNWY5ZjgwNC4uODE0ZGI2MTY4MWJjZCAxMDA2NDRcbi0tLSBhL2ZzL3F1b3RhL3F1b3RhX3YyLmNcbisrKyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmNcbkBAIC0xNDIsOCArMTQyLDcgQEAgc3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbiBcdH1cbiBcdGluZm8tXHUwMDNlZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpO1xuIFx0aW5mby1cdTAwM2VkcWlfaWdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2lncmFjZSk7XG4tXHQvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovXG4tXHRpbmZvLVx1MDAzZWRxaV9mbGFncyA9IDA7XG4rXHRpbmZvLVx1MDAzZWRxaV9mbGFncyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9mbGFncykgXHUwMDI2IERRRl9ST09UX1NRVUFTSDtcbiBcdHFpbmZvLVx1MDAzZWRxaV9zYiA9IHNiO1xuIFx0cWluZm8tXHUwMDNlZHFpX3R5cGUgPSB0eXBlO1xuIFx0cWluZm8tXHUwMDNlZHFpX2Jsb2NrcyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9ibG9ja3MpO1xuQEAgLTIwOSw4ICsyMDgsNyBAQCBzdGF0aWMgaW50IHYyX3dyaXRlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbiBcdGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNj0gfkRRRl9JTkZPX0RJUlRZO1xuIFx0ZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tXHUwMDNlZHFpX2JncmFjZSk7XG4gXHRkaW5mby5kcWlfaWdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfaWdyYWNlKTtcbi1cdC8qIE5vIGZsYWdzIGN1cnJlbnRseSBzdXBwb3J0ZWQgKi9cbi1cdGRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKDApO1xuK1x0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2IERRRl9ST09UX1NRVUFTSCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZkcV9kYXRhX2xvY2spO1xuIFx0ZGluZm8uZHFpX2Jsb2NrcyA9IGNwdV90b19sZTMyKHFpbmZvLVx1MDAzZWRxaV9ibG9ja3MpO1xuIFx0ZGluZm8uZHFpX2ZyZWVfYmxrID0gY3B1X3RvX2xlMzIocWluZm8tXHUwMDNlZHFpX2ZyZWVfYmxrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXG5pbmRleCA1MjA5MDEwNWI4MjgyLi5hMzRmNDM1MTlhZjgwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXG5AQCAtMTQ5LDcgKzE0OSw3IEBAIGVudW0ge1xuIFx0RFFGX1BSSVZBVEVcbiB9O1xuIFxuLS8qIFJvb3Qgc3F1YXNoIGVuYWJsZWQgKGZvciB2MSBxdW90YSBmb3JtYXQpICovXG4rLyogRW5mb3JjZSBsaW1pdHMgYWxzbyBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMgKi9cbiAjZGVmaW5lIERRRl9ST09UX1NRVUFTSFx0KDEgXHUwMDNjXHUwMDNjIERRRl9ST09UX1NRVUFTSF9CKVxuIC8qIFF1b3RhIHN0b3JlZCBpbiBhIHN5c3RlbSBmaWxlICovXG4gI2RlZmluZSBEUUZfU1lTX0ZJTEVcdCgxIFx1MDAzY1x1MDAzYyBEUUZfU1lTX0ZJTEVfQilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjU1OjU0Ljk1MDk2NjQ1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDU5NjU4ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUXVvdGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgcXVvdGEgaGFuZGxpbmcgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGZpcnN0IG9ic2VydmF0aW9uIGlzIHRoYXQgaXQgc2VlbXMgZm9jdXNlZCBvbiB0aGUgdjIgcXVvdGEgZm9ybWF0LCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgdG8gYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBSZW1vdmluZyB0aGF0IGBRRk1UX1ZGU19PTERgIGNoZWNrIGluIGBpZ25vcmVfaGFyZGxpbWl0YCBhbmQgYGRxdW90X3NldF9kcWluZm9gIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlbiB0aGVyZSBhcmUgdGhlIGRpcmVjdCBtb2RpZmljYXRpb25zIG9mIGB2Ml9yZWFkX2ZpbGVfaW5mb2AgYW5kIGB2Ml93cml0ZV9maWxlX2luZm9gLCB3aGVyZSBpdCdzIG5vdyBkZWFsaW5nIHdpdGggYERRRl9ST09UX1NRVUFTSGAgaW5zdGVhZCBvZiBicnVzaGluZyBvZmYgZmxhZ3MuIEVzc2VudGlhbGx5LCBpdCBhcHBlYXJzIHdlJ3JlIG5vdyBlbmFibGluZyBhbmQgdXRpbGl6aW5nIGBEUUZfUk9PVF9TUVVBU0hgIGZvciB0aGUgdjIgZm9ybWF0LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgdGhvdWdoLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2l0aCB0aGlzIGRpcmVjdCByZWFkaW5nIGFuZCB3cml0aW5nIG9mIGBkaW5mby5kcWlfZmxhZ3NgIGluIHRoZSBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCBmdW5jdGlvbnMsIHJlc3BlY3RpdmVseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBkaW5mb2AsIHdoaWNoIGlzIGEgYHN0cnVjdCB2Ml9kaXNrX2RxaW5mb2AsIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24uIFRoZSBpbnRlZ3JpdHkgb2YgdGhlIGluZm9ybWF0aW9uIGRlcGVuZHMgb24gdGhlIHN0cnVjdHVyZSBiZWluZyBwcm9wZXJseSBwb3B1bGF0ZWQuIExldCdzIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgdjJfZGlza19kcWluZm9gIGFuZCB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGRpbmZvYCB3aXRoaW4gdGhlIGB2Ml93cml0ZV9maWxlX2luZm9gIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbHVya2luZyB2dWxuZXJhYmlsaXRpZXMgb3IgZGF0YSBjb3JydXB0aW9uIHJpc2tzIGR1ZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLiBUaGlzIG5lZWRzIGEgdmVyeSBjYXJlZnVsIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NjowMS4wMTA2MzU5MThaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTU5NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB2Ml9kaXNrX2RxaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvcXVvdGFfdjIuYz05MD1zdGF0aWMgaW50IHYyX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtOTEte1xcbmZzL3F1b3RhL3F1b3RhX3YyLmM6OTI6XFx0c3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtOTMtXFx0c3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgZHFoZWFkO1xcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0xMTQtXFx0c2l6ZSA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVxcdTAwMjZkaW5mbyxcXG5mcy9xdW90YS9xdW90YV92Mi5jOjExNTpcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYzoxMTY6XFx0aWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbykpIHtcXG5mcy9xdW90YS9xdW90YV92Mi5jLTExNy1cXHRcXHRxdW90YV9lcnJvcihzYiwgXFxcIkNhbid0IHJlYWQgaW5mbyBzdHJ1Y3R1cmVcXFwiKTtcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9MTk2PXN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMTk3LXtcXG5mcy9xdW90YS9xdW90YV92Mi5jOjE5ODpcXHRzdHJ1Y3QgdjJfZGlza19kcWluZm8gZGluZm87XFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0xOTktXFx0c3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpO1xcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTYtXFx0c2l6ZSA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV93cml0ZShzYiwgdHlwZSwgKGNoYXIgKilcXHUwMDI2ZGluZm8sXFxuZnMvcXVvdGEvcXVvdGFfdjIuYzoyMTc6XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pLCBWMl9EUUlORk9PRkYpO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMjE4LVxcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShtZW1hbGxvYyk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTktXFx0dXBfd3JpdGUoXFx1MDAyNmRxb3B0LVxcdTAwM2VkcWlvX3NlbSk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYzoyMjA6XFx0aWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbykpIHtcXG5mcy9xdW90YS9xdW90YV92Mi5jLTIyMS1cXHRcXHRxdW90YV9lcnJvcihzYiwgXFxcIkNhbid0IHdyaXRlIGluZm8gc3RydWN0dXJlXFxcIik7XFxuLS1cXG5mcy9xdW90YS9xdW90YWlvX3YyLmg9NTA9c3RydWN0IHYycjFfZGlza19kcWJsayB7XFxuLS1cXG5mcy9xdW90YS9xdW90YWlvX3YyLmgtNjMtLyogSGVhZGVyIHdpdGggdHlwZSBhbmQgdmVyc2lvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqL1xcbmZzL3F1b3RhL3F1b3RhaW9fdjIuaDo2NDpzdHJ1Y3QgdjJfZGlza19kcWluZm8ge1xcbmZzL3F1b3RhL3F1b3RhaW9fdjIuaC02NS1cXHRfX2xlMzIgZHFpX2JncmFjZTtcXHQvKiBUaW1lIGJlZm9yZSBibG9jayBzb2Z0IGxpbWl0IGJlY29tZXMgaGFyZCBsaW1pdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NjowMS4wNTYyMDM5MDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2MDE3NTAxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFF1b3RhIHYyIEZpbGUgSW5mbyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmlsZSBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgcXVvdGEgdjIgc3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiB3cml0aW5nLiBTbywgbXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIGB2Ml93cml0ZV9maWxlX2luZm9gIGluIGBmcy9xdW90YS9xdW90YV92Mi5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcXVvdGEgZGF0YSByZWxhdGVkIHRvIGZpbGVzIHRvIHJlc2lkZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoaXMgcHJvY2VzcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UsIGFuZCB3aGF0IHByb3RlY3Rpb25zIGFyZSBpbiBwbGFjZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGxpa2VseSBiZSB0aGUgY3JpdGljYWwganVuY3R1cmUgd2hlcmUgY2hhbmdlcyB0byBmaWxlIHNpemVzIGFuZCBpbm9kZSBjb3VudHMgZ2V0IHJlZmxlY3RlZCBpbiB0aGUgcXVvdGEgYWNjb3VudGluZy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgYXQgdGhhdCBsZXZlbC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgZGV0YWlscyBhYm91dCBkYXRhIHN0cnVjdHVyZSB1cGRhdGVzLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gcXVvdGEgZW5mb3JjZW1lbnQuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBjb2RlIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTY6NTQuNjU3OTU2NTA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3F1b3RhL3F1b3RhX3YyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk2OlxcdHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbiAxOTc6XFx0e1xcbiAxOTg6XFx0XFx0c3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvO1xcbiAxOTk6XFx0XFx0c3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpO1xcbiAyMDA6XFx0XFx0c3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBcXHUwMDI2ZHFvcHQtXFx1MDAzZWluZm9bdHlwZV07XFxuIDIwMTpcXHRcXHRzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqcWluZm8gPSBpbmZvLVxcdTAwM2VkcWlfcHJpdjtcXG4gMjAyOlxcdFxcdHNzaXplX3Qgc2l6ZTtcXG4gMjAzOlxcdFxcdHVuc2lnbmVkIGludCBtZW1hbGxvYztcXG4gMjA0OlxcdFxcbiAyMDU6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG4gMjA2OlxcdFxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuIDIwNzpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmRxX2RhdGFfbG9jayk7XFxuIDIwODpcXHRcXHRpbmZvLVxcdTAwM2VkcWlfZmxhZ3MgXFx1MDAyNj0gfkRRRl9JTkZPX0RJUlRZO1xcbiAyMDk6XFx0XFx0ZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tXFx1MDAzZWRxaV9iZ3JhY2UpO1xcbiAyMTA6XFx0XFx0ZGluZm8uZHFpX2lncmFjZSA9IGNwdV90b19sZTMyKGluZm8tXFx1MDAzZWRxaV9pZ3JhY2UpO1xcbiAyMTE6XFx0XFx0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoaW5mby1cXHUwMDNlZHFpX2ZsYWdzIFxcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcXG4gMjEyOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkcV9kYXRhX2xvY2spO1xcbiAyMTM6XFx0XFx0ZGluZm8uZHFpX2Jsb2NrcyA9IGNwdV90b19sZTMyKHFpbmZvLVxcdTAwM2VkcWlfYmxvY2tzKTtcXG4gMjE0OlxcdFxcdGRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLVxcdTAwM2VkcWlfZnJlZV9ibGspO1xcbiAyMTU6XFx0XFx0ZGluZm8uZHFpX2ZyZWVfZW50cnkgPSBjcHVfdG9fbGUzMihxaW5mby1cXHUwMDNlZHFpX2ZyZWVfZW50cnkpO1xcbiAyMTY6XFx0XFx0c2l6ZSA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV93cml0ZShzYiwgdHlwZSwgKGNoYXIgKilcXHUwMDI2ZGluZm8sXFxuIDIxNzpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7XFxuIDIxODpcXHRcXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobWVtYWxsb2MpO1xcbiAyMTk6XFx0XFx0dXBfd3JpdGUoXFx1MDAyNmRxb3B0LVxcdTAwM2VkcWlvX3NlbSk7XFxuIDIyMDpcXHRcXHRpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFpbmZvKSkge1xcbiAyMjE6XFx0XFx0XFx0cXVvdGFfZXJyb3Ioc2IsIFxcXCJDYW4ndCB3cml0ZSBpbmZvIHN0cnVjdHVyZVxcXCIpO1xcbiAyMjI6XFx0XFx0XFx0cmV0dXJuIHNpemUgXFx1MDAzYyAwID8gc2l6ZSA6IC1FSU87XFxuIDIyMzpcXHRcXHR9XFxuIDIyNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjI1OlxcdH1cXG4gMjI2OlxcdFxcbiAyMjc6XFx0c3RhdGljIHZvaWQgdjJyMF9kaXNrMm1lbWRxYihzdHJ1Y3QgZHF1b3QgKmRxdW90LCB2b2lkICpkcClcXG4gMjI4OlxcdHtcXG4gMjI5OlxcdFxcdHN0cnVjdCB2MnIwX2Rpc2tfZHFibGsgKmQgPSBkcCwgZW1wdHk7XFxuIDIzMDpcXHRcXHRzdHJ1Y3QgbWVtX2RxYmxrICptID0gXFx1MDAyNmRxdW90LVxcdTAwM2VkcV9kcWI7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdG0tXFx1MDAzZWRxYl9paGFyZGxpbWl0ID0gbGUzMl90b19jcHUoZC1cXHUwMDNlZHFiX2loYXJkbGltaXQpO1xcbiAyMzM6XFx0XFx0bS1cXHUwMDNlZHFiX2lzb2Z0bGltaXQgPSBsZTMyX3RvX2NwdShkLVxcdTAwM2VkcWJfaXNvZnRsaW1pdCk7XFxuIDIzNDpcXHRcXHRtLVxcdTAwM2VkcWJfY3VyaW5vZGVzID0gbGUzMl90b19jcHUoZC1cXHUwMDNlZHFiX2N1cmlub2Rlcyk7XFxuIDIzNTpcXHRcXHRtLVxcdTAwM2VkcWJfaXRpbWUgPSBsZTY0X3RvX2NwdShkLVxcdTAwM2VkcWJfaXRpbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1Njo1NC42NTgwMzg4NDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNzI2MTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgdjIgRGlzayBRdW90YSBJbmZvIFN0cnVjdHVyZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB2Ml9kaXNrX2RxaW5mb2Agc3RydWN0dXJlLiBMZXQncyBoZWFkIG92ZXIgdG8gYGZzL3F1b3RhL3F1b3RhaW9fdjIuaGAg4oCTIHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLiBHb3R0YSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbGF5b3V0IGFuZCBmaWVsZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGlzayBxdW90YSBpbmZvcm1hdGlvbiBpcyBiZWluZyBzdG9yZWQgYXQgdGhpcyB2ZXJzaW9uLiBXaGF0IGRhdGEgbWVtYmVycyBhcmUgaW5jbHVkZWQ/IFdoYXQncyB0aGUgc2l6ZSBhbmQgYWxpZ25tZW50PyBBbnkgcGFja2VkIHN0cnVjdHVyZXMgdG8gYmUgYXdhcmUgb2Y/IEkgd2FudCB0byBzZWUgaWYgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHNlZW1zIGVmZmljaWVudC4gTWF5YmUgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGJ5dGUgb3JkZXIgb3IgcGxhdGZvcm0tc3BlY2lmaWMgaW50ZXJwcmV0YXRpb25zIHRoYXQgbWlnaHQgdHJpcCBtZSB1cD8gR290IHRvIG1ha2Ugc3VyZSB0byBjb25zaWRlciBhbnkgcG9zc2libGUgYWxpZ25tZW50IG9yIHBhZGRpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIG9yIGNvbXBhdGliaWxpdHkgYWNyb3NzIGFyY2hpdGVjdHVyZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTY6NTguMzY1MzAzNDMyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3F1b3RhL3F1b3RhaW9fdjIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NDpcXHRzdHJ1Y3QgdjJfZGlza19kcWluZm8ge1xcbiAgNjU6XFx0XFx0X19sZTMyIGRxaV9iZ3JhY2U7XFx0LyogVGltZSBiZWZvcmUgYmxvY2sgc29mdCBsaW1pdCBiZWNvbWVzIGhhcmQgbGltaXQgKi9cXG4gIDY2OlxcdFxcdF9fbGUzMiBkcWlfaWdyYWNlO1xcdC8qIFRpbWUgYmVmb3JlIGlub2RlIHNvZnQgbGltaXQgYmVjb21lcyBoYXJkIGxpbWl0ICovXFxuICA2NzpcXHRcXHRfX2xlMzIgZHFpX2ZsYWdzO1xcdC8qIEZsYWdzIGZvciBxdW90YWZpbGUgKERRRl8qKSAqL1xcbiAgNjg6XFx0XFx0X19sZTMyIGRxaV9ibG9ja3M7XFx0LyogTnVtYmVyIG9mIGJsb2NrcyBpbiBmaWxlICovXFxuICA2OTpcXHRcXHRfX2xlMzIgZHFpX2ZyZWVfYmxrO1xcdC8qIE51bWJlciBvZiBmaXJzdCBmcmVlIGJsb2NrIGluIHRoZSBsaXN0ICovXFxuICA3MDpcXHRcXHRfX2xlMzIgZHFpX2ZyZWVfZW50cnk7XFx0LyogTnVtYmVyIG9mIGJsb2NrIHdpdGggYXQgbGVhc3Qgb25lIGZyZWUgZW50cnkgKi9cXG4gIDcxOlxcdH07XFxuICA3MjpcXHRcXG4gIDczOlxcdCNkZWZpbmUgVjJfRFFJTkZPT0ZGXFx0c2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKVxcdC8qIE9mZnNldCBvZiBpbmZvIGhlYWRlciBpbiBmaWxlICovXFxuICA3NDpcXHQjZGVmaW5lIFYyX0RRQkxLU0laRV9CSVRTIDEwXFx0XFx0XFx0XFx0LyogU2l6ZSBvZiBsZWFmIGJsb2NrIGluIHRyZWUgKi9cXG4gIDc1OlxcdFxcbiAgNzY6XFx0I2VuZGlmIC8qIF9MSU5VWF9RVU9UQUlPX1YyX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTY6NTguMzY1MzY4NDYzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjE3MjY1OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUXVvdGEgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB0byB0aGUgcXVvdGEgY29kZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgdjIgcXVvdGEgZm9ybWF0LiBNeSBmaXJzdCBmb2N1cyBpcyBvbiB0aGUgYHYyX2Rpc2tfZHFpbmZvYCBzdHJ1Y3QsIHdoaWNoIGNvbnRhaW5zIGNydWNpYWwgcXVvdGEgaW5mb3JtYXRpb24uICBJIHF1aWNrbHkgc2VlIHRoYXQgaXQncyBjb21wb3NlZCBvZiBzaXggYF9fbGUzMmAgZmllbGRzOiBgZHFpX2JncmFjZWAsIGBkcWlfaWdyYWNlYCwgYGRxaV9mbGFnc2AsIGBkcWlfYmxvY2tzYCwgYGRxaV9mcmVlX2Jsa2AsIGFuZCBgZHFpX2ZyZWVfZW50cnlgLiAgVGhlIHRvdGFsIHNpemUgaXMgMjQgYnl0ZXMsIGFuZCBhIHF1aWNrIG1lbnRhbCBjaGVjayBjb25maXJtcyB0aGVyZSdzIG5vIHBhZGRpbmcgYmV0d2VlbiB0aG9zZSA0LWJ5dGUgZmllbGRzLiBUaGUgaW5pdGlhbGl6YXRpb24gaXMgZXhwbGljaXQgaW4gYHYyX3dyaXRlX2ZpbGVfaW5mb2AuIEFsbCBmaWVsZHMgYXJlIGJlaW5nIGNvcnJlY3RseSBwb3B1bGF0ZWQgYmVmb3JlIHdyaXRpbmcgdG8gZGlzaywgYW5kIHRoYXQncyBnb29kLlxuXG5UaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYGRxdW90X3NldF9kcWluZm9gLiBUaGUgcmVtb3ZlZCBjaGVjayBpcyBhbGxvd2luZyB0aGUgYFFDSV9ST09UX1NRVUFTSGAgZmxhZyB0byBiZSBzZXQsIGV2ZW4gZm9yIHYyIGZvcm1hdHMuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBIb3dldmVyLCB0aGUgZXhpc3RpbmcgY29kZSBwYXRocyBpbiBgcXVvdGFjdGxgIHN5c2NhbGxzIHNlZW0gdG8gY29ycmVjdGx5IGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUuIEl0J3MganVzdCByZW1vdmluZyBhIGNvbnN0cmFpbnQuIEdpdmVuIHRoYXQgYWxsIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIHRoaXMgcmVtb3ZhbCBzZWVtcyBzYWZlIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXG5cbk5leHQsIEkgcmV2aWV3IHRoZSBgaWdub3JlX2hhcmRsaW1pdGAgZnVuY3Rpb24uIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGNvbmRpdGlvbi4gSXQgbm93IG5vIGxvbmdlciBjaGVja3MgYHFmX2ZtdF9pZGAuIFRoaXMgYXBwZWFycyB0byBzaW1wbHkgYnJvYWRlbiB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGxvZ2ljLCByZW1vdmluZyBhIHJlc3RyaWN0aW9uLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHNlZW1zIHVuYWx0ZXJlZCwgYW5kIGFnYWluLCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5JJ20gY29uZmlkZW50IHRoYXQgdGhlIGNvZGUgaXMgc2FmZSBhbmQgdGhhdCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIFRoZSBwYXRjaCBzaW1wbHkgZW5hYmxlcyBhIHByZXZpb3VzbHkgcmVzdHJpY3RlZCBmbGFnIGZvciB0aGUgdjIgcXVvdGEgZm9ybWF0LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHVzYWdlcyBvZiBgRFFGX1JPT1RfU1FVQVNIYCBidXQgdGhlIGNoYW5nZSBzZWVtcyBpc29sYXRlZCB0byB0aGUgZmlsZXMgYW5kIGZ1bmN0aW9ucyBJJ3ZlIGV4YW1pbmVkLiBJJ20gc2F0aXNmaWVkLlxuXG5OZWVkc0tNU0FOPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQyLCJPdXRwdXRUb2tlbnMiOjE3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjU3OjA5LjU4MjYzNzgwNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnLCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIHdpdGggdjIgcXVvdGEgZm9ybWF0cy4gSXQgbW9kaWZpZXMgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgdG8gd3JpdGUgdGhpcyBmbGFnIHRvIGRpc2suIFRoZSBgc3RydWN0IHYyX2Rpc2tfZHFpbmZvYCB3cml0dGVuIHRvIGRpc2sgY29uc2lzdHMgb2YgNiBgX19sZTMyYCBmaWVsZHMsIGFsbCBvZiB3aGljaCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBxdW90YV93cml0ZWAgY2FsbC4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciBkaXNrLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgcmVzdHJpY3Rpb24gb24gdGhlIGBEUUZfUk9PVF9TUVVBU0hgIGZsYWcsIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgd2l0aCB2MiBxdW90YSBmb3JtYXRzLiBJdCBtb2RpZmllcyBgdjJfd3JpdGVfZmlsZV9pbmZvYCB0byB3cml0ZSB0aGlzIGZsYWcgdG8gZGlzay4gVGhlIGBzdHJ1Y3QgdjJfZGlza19kcWluZm9gIHdyaXR0ZW4gdG8gZGlzayBjb25zaXN0cyBvZiA2IGBfX2xlMzJgIGZpZWxkcywgYWxsIG9mIHdoaWNoIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgYHF1b3RhX3dyaXRlYCBjYWxsLiBUaGVyZSBpcyBubyBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIGRpc2suIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBxdW90YSBsaW1pdCBlbmZvcmNlbWVudCwgd2hpY2ggZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxk5j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 12:58:14 +0000 UTC FinishedAt: 2026-08-14 13:57:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QUOTA", "QFMT_V2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "QUOTA", "QFMT_V2" ], "series_id": "ef71218b-224e-4950-b136-23df16ad7fb8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "dquot_set_dqinfo", "dquot_alloc_inode", "__dquot_transfer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtRRk1UX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHF1b3Rfc2V0X2RxaW5mbyYjMzQ7LAogICAgJiMzNDtkcXVvdF9hbGxvY19pbm9kZSYjMzQ7LAogICAgJiMzNDtfX2RxdW90X3RyYW5zZmVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnLCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIHdpdGggdjIgcXVvdGEgZm9ybWF0cy4gSXQgbW9kaWZpZXMgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgdG8gd3JpdGUgdGhpcyBmbGFnIHRvIGRpc2suIFRoZSBgc3RydWN0IHYyX2Rpc2tfZHFpbmZvYCB3cml0dGVuIHRvIGRpc2sgY29uc2lzdHMgb2YgNiBgX19sZTMyYCBmaWVsZHMsIGFsbCBvZiB3aGljaCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBxdW90YV93cml0ZWAgY2FsbC4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciBkaXNrLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5hYmxlcyB0aGUgRFFGX1JPT1RfU1FVQVNIIGZsYWcgZm9yIHYyIHF1b3RhIGZvcm1hdHMsIHJlbW92aW5nIGEgY2hlY2sgdGhhdCByZXN0cmljdGVkIGl0IHRvIHYxIGZvcm1hdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcXVvdGEgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgbGltaXRzIGFyZSBlbmZvcmNlZCBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NDZkNGRjOGU1NWQ1MTU5MjdhZTJmNmFjNTVhYjRjNmYxYmQ3NDE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6NDU6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmNcbmluZGV4IDk4NTBkZTM5NTVkMzEuLmU0MzFlNzJkZmVhODAgMTAwNjQ0XG4tLS0gYS9mcy9xdW90YS9kcXVvdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9xdW90YS9kcXVvdC5jXG5AQCAtMTMwOSw4ICYjNDM7MTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuIFx0c3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBcdTAwMjZzYl9kcW9wdChkcXVvdC1cdTAwM2VkcV9zYiktXHUwMDNlaW5mb1tkcXVvdC1cdTAwM2VkcV9pZC50eXBlXTtcbiBcbiBcdHJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIChpbmZvLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxuLVx0XHQhKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpKTtcbiYjNDM7XHQgICAgICAgIShpbmZvLVx1MDAzZWRxaV9mbGFncyBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcbiB9XG4gXG4gc3RhdGljIGludCBkcXVvdF9hZGRfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLFxuQEAgLTI5MDAsMTEgJiM0MzsyODk5LDYgQEAgaW50IGRxdW90X3NldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBxY19pbmZvICppaSlcbiBcdGlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXHRtaSA9IHNiX2Rxb3B0KHNiKS1cdTAwM2VpbmZvICYjNDM7IHR5cGU7XG4tXHRpZiAoaWktXHUwMDNlaV9maWVsZG1hc2sgXHUwMDI2IFFDX0ZMQUdTKSB7XG4tXHRcdGlmICgoaWktXHUwMDNlaV9mbGFncyBcdTAwMjYgUUNJX1JPT1RfU1FVQVNIIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIG1pLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXHRzcGluX2xvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbiBcdGlmIChpaS1cdTAwM2VpX2ZpZWxkbWFzayBcdTAwMjYgUUNfU1BDX1RJTUVSKVxuIFx0XHRtaS1cdTAwM2VkcWlfYmdyYWNlID0gaWktXHUwMDNlaV9zcGNfdGltZWxpbWl0O1xuZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhX3YyLmMgYi9mcy9xdW90YS9xdW90YV92Mi5jXG5pbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NFxuLS0tIGEvZnMvcXVvdGEvcXVvdGFfdjIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcXVvdGEvcXVvdGFfdjIuY1xuQEAgLTE0Miw4ICYjNDM7MTQyLDcgQEAgc3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbiBcdH1cbiBcdGluZm8tXHUwMDNlZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpO1xuIFx0aW5mby1cdTAwM2VkcWlfaWdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2lncmFjZSk7XG4tXHQvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovXG4tXHRpbmZvLVx1MDAzZWRxaV9mbGFncyA9IDA7XG4mIzQzO1x0aW5mby1cdTAwM2VkcWlfZmxhZ3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfZmxhZ3MpIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0g7XG4gXHRxaW5mby1cdTAwM2VkcWlfc2IgPSBzYjtcbiBcdHFpbmZvLVx1MDAzZWRxaV90eXBlID0gdHlwZTtcbiBcdHFpbmZvLVx1MDAzZWRxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTtcbkBAIC0yMDksOCAmIzQzOzIwOCw3IEBAIHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuIFx0aW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2PSB+RFFGX0lORk9fRElSVFk7XG4gXHRkaW5mby5kcWlfYmdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfYmdyYWNlKTtcbiBcdGRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLVx1MDAzZWRxaV9pZ3JhY2UpO1xuLVx0LyogTm8gZmxhZ3MgY3VycmVudGx5IHN1cHBvcnRlZCAqL1xuLVx0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2IERRRl9ST09UX1NRVUFTSCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZkcV9kYXRhX2xvY2spO1xuIFx0ZGluZm8uZHFpX2Jsb2NrcyA9IGNwdV90b19sZTMyKHFpbmZvLVx1MDAzZWRxaV9ibG9ja3MpO1xuIFx0ZGluZm8uZHFpX2ZyZWVfYmxrID0gY3B1X3RvX2xlMzIocWluZm8tXHUwMDNlZHFpX2ZyZWVfYmxrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXG5pbmRleCA1MjA5MDEwNWI4MjgyLi5hMzRmNDM1MTlhZjgwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXG5AQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBlbnVtIHtcbiBcdERRRl9QUklWQVRFXG4gfTtcbiBcbi0vKiBSb290IHNxdWFzaCBlbmFibGVkIChmb3IgdjEgcXVvdGEgZm9ybWF0KSAqL1xuJiM0MzsvKiBFbmZvcmNlIGxpbWl0cyBhbHNvIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3NlcyAqL1xuICNkZWZpbmUgRFFGX1JPT1RfU1FVQVNIXHQoMSBcdTAwM2NcdTAwM2MgRFFGX1JPT1RfU1FVQVNIX0IpXG4gLyogUXVvdGEgc3RvcmVkIGluIGEgc3lzdGVtIGZpbGUgKi9cbiAjZGVmaW5lIERRRl9TWVNfRklMRVx0KDEgXHUwMDNjXHUwMDNjIERRRl9TWVNfRklMRV9CKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UVVPVEEmIzM0OywKICAgICYjMzQ7UUZNVF9WMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RxdW90X3NldF9kcWluZm8mIzM0OywKICAgICYjMzQ7ZHF1b3RfYWxsb2NfaW5vZGUmIzM0OywKICAgICYjMzQ7X19kcXVvdF90cmFuc2ZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRoZSBEUUZfUk9PVF9TUVVBU0ggZmxhZyBmb3IgdjIgcXVvdGEgZm9ybWF0cywgcmVtb3ZpbmcgYSBjaGVjayB0aGF0IHJlc3RyaWN0ZWQgaXQgdG8gdjEgZm9ybWF0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBxdW90YSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBsaW1pdHMgYXJlIGVuZm9yY2VkIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3Nlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU0NmQ0ZGM4ZTU1ZDUxNTkyN2FlMmY2YWM1NWFiNGM2ZjFiZDc0MTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzo0NToxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jCmluZGV4IDk4NTBkZTM5NTVkMzEuLmU0MzFlNzJkZmVhODAgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL2RxdW90LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcXVvdGEvZHF1b3QuYwpAQCAtMTMwOSw4ICYjNDM7MTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQogCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gJmFtcDtzYl9kcW9wdChkcXVvdC0mZ3Q7ZHFfc2IpLSZndDtpbmZvW2RxdW90LSZndDtkcV9pZC50eXBlXTsKIAogCXJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpICZhbXA7JmFtcDsKLQkgICAgICAgKGluZm8tJmd0O2RxaV9mb3JtYXQtJmd0O3FmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQgfHwKLQkJIShpbmZvLSZndDtkcWlfZmxhZ3MgJmFtcDsgRFFGX1JPT1RfU1FVQVNIKSk7CiYjNDM7CSAgICAgICAhKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpOwogfQogCiBzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsCkBAIC0yOTAwLDExICYjNDM7Mjg5OSw2IEBAIGludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpCiAJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkKIAkJcmV0dXJuIC1FU1JDSDsKIAltaSA9IHNiX2Rxb3B0KHNiKS0mZ3Q7aW5mbyAmIzQzOyB0eXBlOwotCWlmIChpaS0mZ3Q7aV9maWVsZG1hc2sgJmFtcDsgUUNfRkxBR1MpIHsKLQkJaWYgKChpaS0mZ3Q7aV9mbGFncyAmYW1wOyBRQ0lfUk9PVF9TUVVBU0ggJmFtcDsmYW1wOwotCQkgICAgIG1pLSZndDtkcWlfZm9ybWF0LSZndDtxZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KIAlzcGluX2xvY2soJmFtcDtkcV9kYXRhX2xvY2spOwogCWlmIChpaS0mZ3Q7aV9maWVsZG1hc2sgJmFtcDsgUUNfU1BDX1RJTUVSKQogCQltaS0mZ3Q7ZHFpX2JncmFjZSA9IGlpLSZndDtpX3NwY190aW1lbGltaXQ7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92Mi5jIGIvZnMvcXVvdGEvcXVvdGFfdjIuYwppbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YV92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKQEAgLTE0Miw4ICYjNDM7MTQyLDcgQEAgc3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKIAl9CiAJaW5mby0mZ3Q7ZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpOwogCWluZm8tJmd0O2RxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTsKLQkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0JaW5mby0mZ3Q7ZHFpX2ZsYWdzID0gMDsKJiM0MzsJaW5mby0mZ3Q7ZHFpX2ZsYWdzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZsYWdzKSAmYW1wOyBEUUZfUk9PVF9TUVVBU0g7CiAJcWluZm8tJmd0O2RxaV9zYiA9IHNiOwogCXFpbmZvLSZndDtkcWlfdHlwZSA9IHR5cGU7CiAJcWluZm8tJmd0O2RxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTsKQEAgLTIwOSw4ICYjNDM7MjA4LDcgQEAgc3RhdGljIGludCB2Ml93cml0ZV9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCiAJaW5mby0mZ3Q7ZHFpX2ZsYWdzICZhbXA7PSB+RFFGX0lORk9fRElSVFk7CiAJZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tJmd0O2RxaV9iZ3JhY2UpOwogCWRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLSZndDtkcWlfaWdyYWNlKTsKLQkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0JZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoMCk7CiYjNDM7CWRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpOwogCXNwaW5fdW5sb2NrKCZhbXA7ZHFfZGF0YV9sb2NrKTsKIAlkaW5mby5kcWlfYmxvY2tzID0gY3B1X3RvX2xlMzIocWluZm8tJmd0O2RxaV9ibG9ja3MpOwogCWRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLSZndDtkcWlfZnJlZV9ibGspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAppbmRleCA1MjA5MDEwNWI4MjgyLi5hMzRmNDM1MTlhZjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaApAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBlbnVtIHsKIAlEUUZfUFJJVkFURQogfTsKIAotLyogUm9vdCBzcXVhc2ggZW5hYmxlZCAoZm9yIHYxIHF1b3RhIGZvcm1hdCkgKi8KJiM0MzsvKiBFbmZvcmNlIGxpbWl0cyBhbHNvIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3NlcyAqLwogI2RlZmluZSBEUUZfUk9PVF9TUVVBU0gJKDEgJmx0OyZsdDsgRFFGX1JPT1RfU1FVQVNIX0IpCiAvKiBRdW90YSBzdG9yZWQgaW4gYSBzeXN0ZW0gZmlsZSAqLwogI2RlZmluZSBEUUZfU1lTX0ZJTEUJKDEgJmx0OyZsdDsgRFFGX1NZU19GSUxFX0IpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUXVvdGEgU3lzdGVtIEVuaGFuY2VtZW50OiBFbmFibGluZyBSb290IFNxdWFzaCBmb3IgdjIgRm9ybWF0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzaWduaWZpY2FudCwgYWxiZWl0IHN1YnRsZSwgY2hhbmdlIHRvIGhvdyBxdW90YXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBgZnMvcXVvdGEvZHF1b3QuY2AgYW5kIGBmcy9xdW90YS9xdW90YV92Mi5jYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgcmVzdHJpY3RlZCB0aGUgYERRRl9ST09UX1NRVUFTSGAgZmxhZyB0byB0aGUgb2xkZXIgdjEgcXVvdGEgZm9ybWF0IChgUUZNVF9WRlNfT0xEYCkuIE5vdywgdGhlIHBhdGNoIGlzIG9wZW5pbmcgaXQgdXAsIGFsbG93aW5nIGBEUUZfUk9PVF9TUVVBU0hgIHRvIGJlIHN1cHBvcnRlZCBmb3IgdGhlIHYyIHF1b3RhIGZvcm1hdCBhcyB3ZWxsLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlLCBtYWtlcyB0aGluZ3MgbW9yZSBjb25zaXN0ZW50LiBUaGUgYHYyX3JlYWRfZmlsZV9pbmZvYCBhbmQgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgZnVuY3Rpb25zIGluIGBxdW90YV92Mi5jYCBhcmUgd2hlcmUgdGhhdCBzdXBwb3J0IGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKVGhlIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaGAgaXMgYSBuaWNlIHRvdWNoLCB0b28uIEluc3RlYWQgb2YgdGhlIHYxIHNwZWNpZmljIHdvcmRpbmcgYWJvdXQgJiMzNDtSb290IHNxdWFzaCBlbmFibGVkJiMzNDssIGl0IG5vdyBzYXlzICYjMzQ7RW5mb3JjZSBsaW1pdHMgYWxzbyBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMsJiMzNDsgd2hpY2ggaXMgYSBmYXIgbW9yZSBnZW5lcmFsIGFuZCBhY2N1cmF0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIFRoZSBwYXRjaCBtb2RpZmllcyBrZXkgZnVuY3Rpb25zIGxpa2UgYGlnbm9yZV9oYXJkbGltaXRgLCBgZHF1b3Rfc2V0X2RxaW5mb2AsIGB2Ml9yZWFkX2ZpbGVfaW5mb2AsIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYC4gU28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBkaWcgZGVlcGVyLgoKVGltZSB0byBsb29rIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIHRoaXMgc3R1ZmYuIEkgYmV0IGBmcy9xdW90YS9LY29uZmlnYCB3aWxsIGhhdmUgdGhlIGtleXMuIFByb2JhYmx5IGBDT05GSUdfUVVPVEFgIGFuZCBgQ09ORklHX1FVT1RBX1YyYC4gSSYjMzk7bGwgdmVyaWZ5IHRoZXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRVU9UQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvS2NvbmZpZy01LVxuZnMvcXVvdGEvS2NvbmZpZzo2OmNvbmZpZyBRVU9UQVxuZnMvcXVvdGEvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtRdW90YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvcXVvdGEvS2NvbmZpZy0xOS1cbmZzL3F1b3RhL0tjb25maWc6MjA6Y29uZmlnIFFVT1RBX05FVExJTktfSU5URVJGQUNFXG5mcy9xdW90YS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtSZXBvcnQgcXVvdGEgbWVzc2FnZXMgdGhyb3VnaCBuZXRsaW5rIGludGVyZmFjZVwmIzM0O1xuLS1cbmZzL3F1b3RhL0tjb25maWc9Mjg9Y29uZmlnIFBSSU5UX1FVT1RBX1dBUk5JTkdcbi0tXG5mcy9xdW90YS9LY29uZmlnLTM3LVxuZnMvcXVvdGEvS2NvbmZpZzozODpjb25maWcgUVVPVEFfREVCVUdcbmZzL3F1b3RhL0tjb25maWctMzktXHRib29sIFwmIzM0O0FkZGl0aW9uYWwgcXVvdGEgc2FuaXR5IGNoZWNrc1wmIzM0O1xuLS1cbmZzL3F1b3RhL0tjb25maWctNDYtIyBHZW5lcmljIHN1cHBvcnQgZm9yIHRyZWUgc3RydWN0dXJlZCBxdW90YSBmaWxlcy4gU2VsZWN0ZWQgd2hlbiBuZWVkZWQuXG5mcy9xdW90YS9LY29uZmlnOjQ3OmNvbmZpZyBRVU9UQV9UUkVFXG5mcy9xdW90YS9LY29uZmlnLTQ4LVx0IHRyaXN0YXRlXG4tLVxuZnMvcXVvdGEvS2NvbmZpZz01OD1jb25maWcgUUZNVF9WMlxuLS1cbmZzL3F1b3RhL0tjb25maWctNjctXG5mcy9xdW90YS9LY29uZmlnOjY4OmNvbmZpZyBRVU9UQUNUTFxuZnMvcXVvdGEvS2NvbmZpZy02OS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTQ4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBc3Nlc3NpbmcgUUZNVF9WMioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGxpa2VseSB0byBldmFsdWF0ZSBzb21lIG5ldyBjb2RlLCBtYXliZSBhbiBpbXBsZW1lbnRhdGlvbiwgb3Igc29tZSBwaWVjZSBvZiB0ZWNobm9sb2d5IHRoYXQgaXMgYmFzZWQgb24gdGhlIHByb3RvY29sIGBRRk1UX1YyYC4gSSB3YW50IHRvIHN0YXJ0IGJ5IG1ha2luZyBzdXJlIEkmIzM5O20gdXNpbmcgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uLCBzbyBJIHdpbGwgc3RhcnQgYnkgZG91YmxlIGNoZWNraW5nIGl0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgUUZNVF9WMmAuIEhvcGVmdWxseSwgaXQmIzM5O3MgYSBrbm93biBxdWFudGl0eS4gSXQgbWF5IGJlIGhlbHBmdWwgdG8gcmVjYWxsIGl0cyBmZWF0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBiZW5lZml0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUUZNVF9WMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvS2NvbmZpZz01MD1jb25maWcgUUZNVF9WMVxuLS1cbmZzL3F1b3RhL0tjb25maWctNTctXG5mcy9xdW90YS9LY29uZmlnOjU4OmNvbmZpZyBRRk1UX1YyXG5mcy9xdW90YS9LY29uZmlnLTU5LVx0dHJpc3RhdGUgXCYjMzQ7UXVvdGEgZm9ybWF0IHZmc3YwIGFuZCB2ZnN2MSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipRdW90YSBJbXBsZW1lbnRhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdGhpcyBxdW90YSBpbXBsZW1lbnRhdGlvbiBzb3J0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB3b3JrIHdpdGggYFFVT1RBYCBhbmQgYFFGTVRfVjJgLCBvYnZpb3VzbHkuIEFuZCBzaW5jZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBzZXR0aW5nIHF1b3RhIGluZm9ybWF0aW9uLCBgUVVPVEFDVExgIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gYmUgZXNzZW50aWFsLgoKVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL3F1b3RhL2RxdW90LmNgIGFuZCBgZnMvcXVvdGEvcXVvdGFfdjIuY2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gZmluZCB0aGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW5kIHBvdGVudGlhbGx5IG1vZGlmeS4KCkxldCYjMzk7cyBzZWXigKYgbG9va3MgbGlrZSBgaWdub3JlX2hhcmRsaW1pdGAgaXMgc3RhdGljLCBzbyBwcm9iYWJseSBub3QgZGlyZWN0bHkgcmVsZXZhbnQgdG8gbXkgdGFzay4gQWgsIGhlcmUmIzM5O3Mgc29tZXRoaW5nIHByb21pc2luZzogYGRxdW90X3NldF9kcWluZm9gIGlzIGV4cG9ydGVkIG9yIHVzZWQgYnkgcXVvdGFjdGwsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIG9uZSBtb3JlLCBhcyBpdCBzZWVtcyByZWxldmFudCB0byBzZXR0aW5nIHF1b3RhIGluZm9ybWF0aW9uLiBBbHNvLCBJIHNlZSBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCBhcmUgc3RhdGljIGJ1dCBjYWxsZWQgdGhyb3VnaCBvcHMsIHNvIHRoZXkgYXJlIHByb2JhYmx5IHJlbGF0ZWQuIEkgd2lsbCBrZWVwIHRob3NlIGluIG1pbmQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcXVvdF9zZXRfZHFpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9kcXVvdC5jPTI4ODk9RVhQT1JUX1NZTUJPTChkcXVvdF9nZXRfc3RhdGUpO1xuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjg5MS0vKiBHZW5lcmljIHJvdXRpbmUgZm9yIHNldHRpbmcgY29tbW9uIHBhcnQgb2YgcXVvdGEgZmlsZSBpbmZvcm1hdGlvbiAqL1xuZnMvcXVvdGEvZHF1b3QuYzoyODkyOmludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpXG5mcy9xdW90YS9kcXVvdC5jLTI4OTMte1xuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjkxNy19XG5mcy9xdW90YS9kcXVvdC5jOjI5MTg6RVhQT1JUX1NZTUJPTChkcXVvdF9zZXRfZHFpbmZvKTtcbmZzL3F1b3RhL2RxdW90LmMtMjkxOS1cbmZzL3F1b3RhL2RxdW90LmM9MjkyMD1jb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGRxdW90X3F1b3RhY3RsX3N5c2ZpbGVfb3BzID0ge1xuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjkyNC1cdC5nZXRfc3RhdGVcdD0gZHF1b3RfZ2V0X3N0YXRlLFxuZnMvcXVvdGEvZHF1b3QuYzoyOTI1Olx0LnNldF9pbmZvXHQ9IGRxdW90X3NldF9kcWluZm8sXG5mcy9xdW90YS9kcXVvdC5jLTI5MjYtXHQuZ2V0X2RxYmxrXHQ9IGRxdW90X2dldF9kcWJsayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyBQb3RlbnRpYWwgRm9jdXMgUG9pbnRzIGZvciBDb2RlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IG15IGF0dGVudGlvbi4gYGRxdW90X3NldF9kcWluZm9gIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludDsgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgcXVvdGEgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIHdlJiMzOTtkIGZpbmQgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcyBvciB2dWxuZXJhYmlsaXRpZXMuIEJ1dCB0aGVuIG15IG1pbmQgZHJpZnRzIHRvIGB2Ml9yZWFkX2ZpbGVfaW5mb2AuIFRoYXQmIzM5O3MgYW5vdGhlciBhcmVhIHdvcnRoIGludmVzdGlnYXRpbmcsIGVzcGVjaWFsbHkgd2l0aCBmaWxlIHN5c3RlbSBtZXRhZGF0YSBvcGVyYXRpb25zLiBJIG5lZWQgdG8gd2VpZ2ggdGhlIHRyYWRlLW9mZnM6IGBkcXVvdF9zZXRfZHFpbmZvYCBtaWdodCBiZSBtb3JlIGZvY3VzZWQgb24gcXVvdGEgZW5mb3JjZW1lbnQsIHdoaWxlIGB2Ml9yZWFkX2ZpbGVfaW5mb2AgY291bGQgZXhwb3NlIGlzc3VlcyByZWxhdGVkIHRvIGZpbGUgYWNjZXNzIGFuZCBoYW5kbGluZywgcG9zc2libHkgaW5jbHVkaW5nIGRhdGEgY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggbWFsZm9ybWVkIGlub2Rlcy4gQm90aCBoYXZlIGhpZ2gtdmFsdWUgcG90ZW50aWFsLiBJ4oCZbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggaXMgbW9yZSBsaWtlbHkgdG8geWllbGQgYSB2YWx1YWJsZSBmaW5kaW5nLCBvciBpZiB0aGVyZSBpcyBvdmVybGFwIG9mIHNvbWUga2luZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7djJfcmVhZF9maWxlX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9xdW90YV92Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL3F1b3RhX3YyLmM9NzU9c3RhdGljIGludCB2Ml9jaGVja19xdW90YV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuLS1cbmZzL3F1b3RhL3F1b3RhX3YyLmMtODktLyogUmVhZCBpbmZvcm1hdGlvbiBoZWFkZXIgZnJvbSBxdW90YSBmaWxlICovXG5mcy9xdW90YS9xdW90YV92Mi5jOjkwOnN0YXRpYyBpbnQgdjJfcmVhZF9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXG5mcy9xdW90YS9xdW90YV92Mi5jLTkxLXtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgdjJfZm9ybWF0X29wcyA9IHtcbmZzL3F1b3RhL3F1b3RhX3YyLmMtNDE3LVx0LmNoZWNrX3F1b3RhX2ZpbGVcdD0gdjJfY2hlY2tfcXVvdGFfZmlsZSxcbmZzL3F1b3RhL3F1b3RhX3YyLmM6NDE4Olx0LnJlYWRfZmlsZV9pbmZvXHRcdD0gdjJfcmVhZF9maWxlX2luZm8sXG5mcy9xdW90YS9xdW90YV92Mi5jLTQxOS1cdC53cml0ZV9maWxlX2luZm9cdD0gdjJfd3JpdGVfZmlsZV9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDg0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZvY3VzaW5nIG9uIFF1b3RhIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCBtaWdodCBiZSBwcm9ibGVtYXRpYyBiZWNhdXNlIHRoZXkmIzM5O3JlIHN0YXRpYyBhbmQgY291bGQgYmUgaW5saW5lZCwgbWFraW5nIGRpcmVjdCBmdXp6aW5nIGJ5IG5hbWUgdHJpY2t5LiBIb3dldmVyLCB0aGV5JiMzOTtyZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHYyX2Zvcm1hdF9vcHNgLCBzbyBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIG5vdCBpbmxpbmVkIGFmdGVyIGFsbC4gU3RpbGwsIHRoZSBzdGF0aWMgbmF0dXJlIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIG90aGVyIGZ1bmN0aW9ucy4gVGhhdCBtYWtlcyBtZSBsb29rIGZvciBhbHRlcm5hdGl2ZXMuIGBkcXVvdF9zZXRfZHFpbmZvYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlLgoKTm93LCB0aGF0IGJyaW5ncyB1cCB0aGUgcHJvYmxlbSBvZiBmaW5kaW5nIG91dCB3aGljaCBvZiB0aGVzZSBhcmUgdGhlIGJlc3QgdGFyZ2V0cy4gSSYjMzk7bSBjaGVja2luZyB3aGVyZSBgZHF1b3Rfc2V0X2RxaW5mb2AgZ2V0cyBjYWxsZWQuIFJpZ2h0LCBpdCYjMzk7cyB1c2VkIGluIGJvdGggYGRxdW90X3F1b3RhY3RsX3N5c2ZpbGVfb3BzYCBhbmQgYGRxdW90X3F1b3RhY3RsX29wc2AuIEtub3dpbmcgdGhpcywgSSByZWFsaXplIHRoaXMgbWVhbnMgdGhlIGBxdW90YWN0bGAgb3IgYHF1b3RhY3RsX2ZkYCBzeXNjYWxscyBhcmUgdGhlIGxpa2VseSBlbnRyeSBwb2ludHMuIFNvLCBgZHF1b3Rfc2V0X2RxaW5mb2AgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciBpbml0aWFsIGZ1enppbmcuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluIHRoZSBtaXguIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IGBxdW90YV9zZXRpbmZvYCBpbiBgZnMvcXVvdGEvcXVvdGEuY2AuIFdvcnRoIGtlZXBpbmcgaW4gbWluZCBhcyBhIHNlY29uZGFyeSB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1b3RhX3NldGluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9xdW90YS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL3F1b3RhLmM9MTE5PXN0YXRpYyBpbnQgcXVvdGFfZ2V0aW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgdm9pZCBfX3VzZXIgKmFkZHIpXG4tLVxuZnMvcXVvdGEvcXVvdGEuYy0xNDYtXG5mcy9xdW90YS9xdW90YS5jOjE0NzpzdGF0aWMgaW50IHF1b3RhX3NldGluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHZvaWQgX191c2VyICphZGRyKVxuZnMvcXVvdGEvcXVvdGEuYy0xNDgte1xuLS1cbmZzL3F1b3RhL3F1b3RhLmM9NzY3PXN0YXRpYyBpbnQgZG9fcXVvdGFjdGwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkLFxuLS1cbmZzL3F1b3RhL3F1b3RhLmMtNzk1LVx0Y2FzZSBRX1NFVElORk86XG5mcy9xdW90YS9xdW90YS5jOjc5NjpcdFx0cmV0dXJuIHF1b3RhX3NldGluZm8oc2IsIHR5cGUsIGFkZHIpO1xuZnMvcXVvdGEvcXVvdGEuYy03OTctXHRjYXNlIFFfR0VUUVVPVEE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipRdW90YSBTeXN0ZW0gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcXVvdGFzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBgcXVvdGFfc2V0aW5mb2AgYW5kIGBkb19xdW90YWN0bGAgYXJlIGxpa2VseSBzZXR1cCBvciBoZWxwZXIgZnVuY3Rpb25zOyB0aGV5JiMzOTtyZSBwcm9iYWJseSBzdGF0aWMsIGludm9sdmVkIGluIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBidXQgbm90IGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSB0aGUgYWN0dWFsIHN5c2NhbGxzIOKAkyBgc3lzX3F1b3RhY3RsYCBvciBpdHMgZmlsZSBkZXNjcmlwdG9yIHZhcmlhbnQsIGBzeXNfcXVvdGFjdGxfZmRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB1c2VyLXNwYWNlIHByb2dyYW1zIHdvdWxkIGJlIGNhbGxpbmcuIE5vdyBJIGtub3cgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBmcy9xdW90YS9xdW90YS5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnF1b3RhY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvcXVvdGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9xdW90YS5jPTg2Nj1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpxdW90YWN0bF9ibG9jayhjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbCwgaW50IGNtZClcbi0tXG5mcy9xdW90YS9xdW90YS5jLTkxNi0gKi9cbmZzL3F1b3RhL3F1b3RhLmM6OTE3OlNZU0NBTExfREVGSU5FNChxdW90YWN0bCwgdW5zaWduZWQgaW50LCBjbWQsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWwsXG5mcy9xdW90YS9xdW90YS5jLTkxOC1cdFx0cWlkX3QsIGlkLCB2b2lkIF9fdXNlciAqLCBhZGRyKVxuLS1cbmZzL3F1b3RhL3F1b3RhLmMtOTcyLVxuZnMvcXVvdGEvcXVvdGEuYzo5NzM6U1lTQ0FMTF9ERUZJTkU0KHF1b3RhY3RsX2ZkLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIGNtZCxcbmZzL3F1b3RhL3F1b3RhLmMtOTc0LVx0XHRxaWRfdCwgaWQsIHZvaWQgX191c2VyICosIGFkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRW5hYmxpbmcgVjIgUXVvdGEgU3F1YXNoaW5nKioKCkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgZW5hYmxpbmcgYERRRl9ST09UX1NRVUFTSGAgZm9yIHRoZSB2MiBxdW90YSBmb3JtYXQuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSBhY3R1YWxseSwgSSYjMzk7ZCBzYXkuIEdvb2QgdGhhdCBpdCYjMzk7cyB0YWdnZWQgYXMgYFdvcnRoRnV6emluZ2AsIHdlJiMzOTtsbCBuZWVkIHRvIHN0cmVzcyB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGBkcXVvdF9zZXRfZHFpbmZvYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLiBBbmQsIG9mIGNvdXJzZSwgd2UgbmVlZCB0byBoYXZlIGBRVU9UQWAgYW5kIGBRRk1UX1YyYCBlbmFibGVkIHRvIGFjdHVhbGx5IHVzZSB0aGlzIG5ldyBmZWF0dXJlLgoKV2FpdCBhIHNlY29uZOKApiBgUVVPVEFDVExgLi4uIEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCBgUVVPVEFDVExgIGlzIGFsc28gcmVxdWlyZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGluIGBmcy9xdW90YS9LY29uZmlnYCB0byBiZSBzdXJlLiBJdCB3b3VsZCBiZSBhIHNpbGx5IG92ZXJzaWdodCB0byBtaXNzIHRoYXQgZGVwZW5kZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFFVT1RBQ1RMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9LY29uZmlnPTU4PWNvbmZpZyBRRk1UX1YyXG4tLVxuZnMvcXVvdGEvS2NvbmZpZy02Ny1cbmZzL3F1b3RhL0tjb25maWc6Njg6Y29uZmlnIFFVT1RBQ1RMXG5mcy9xdW90YS9LY29uZmlnLTY5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDk5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBCb29sZWFuIEVuaWdtYTogYFFVT1RBQ1RMYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyB2YXJpYWJsZSwgYFFVT1RBQ1RMYC4gSXQmIzM5O3MgYSBCb29sZWFuLCBtZWFuaW5nIGl0JiMzOTtzIGVpdGhlciB0cnVlIG9yIGZhbHNlLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGF0IHRoZXJlJiMzOTtzIG5vIGFzc29jaWF0ZWQgcHJvbXB0LCBtZWFuaW5nIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBkcml2ZW4gYnkgdXNlciBpbnB1dCBvciBzb21lIGRpcmVjdCBleHRlcm5hbCByZXF1ZXN0LiBTb21ldGhpbmcgKmVsc2UqIGhhcyB0byBiZSBzZXR0aW5nIGl0cyB2YWx1ZS4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmU/IFdoYXQgYXJlIHRoZSBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGl0PyBJcyB0aGlzIHBhcnQgb2YgYW4gaW50ZXJuYWwgY29udHJvbCBsb29wPyBPciBpcyBpdCBhIG1vcmUgcGFzc2l2ZSBzdGF0ZSBpbmRpY2F0b3IsIHVwZGF0ZWQgYnkgb3RoZXIsIG1vcmUgYWN0aXZlIHByb2Nlc3Nlcz8gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyB2YXJpYWJsZSBsaXZlcyB0byB1bmRlcnN0YW5kIGl0cyBzaWduaWZpY2FuY2UuIElzIGl0IGdsb2JhbD8gTG9jYWwgdG8gYSBjZXJ0YWluIHNjb3BlPwoKVGhpcyBsYWNrIG9mIGEgcHJvbXB0IGlzIGEgY2x1ZSwgYSBzdGFydGluZyBwb2ludCBmb3IgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgdmFyaWFibGUgdG8gZmlndXJlIG91dCAqd2hhdCogbWVjaGFuaXNtIGlzIGNob29zaW5nIGl0cyB0cnVlIG9yIGZhbHNlIHN0YXRlLCBhbmQgKndoeSouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBRVU9UQUNUTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL0tjb25maWc9Mj1jb25maWcgR0ZTMl9GU1xuLS1cbmZzL2dmczIvS2NvbmZpZy02LVx0c2VsZWN0IENSQzMyXG5mcy9nZnMyL0tjb25maWc6NzpcdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnLTgtXHRzZWxlY3QgRlNfSU9NQVBcbi0tXG5mcy9xdW90YS9LY29uZmlnPTY9Y29uZmlnIFFVT1RBXG5mcy9xdW90YS9LY29uZmlnLTctXHRib29sIFwmIzM0O1F1b3RhIHN1cHBvcnRcJiMzNDtcbmZzL3F1b3RhL0tjb25maWc6ODpcdHNlbGVjdCBRVU9UQUNUTFxuZnMvcXVvdGEvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL3hmcy9LY29uZmlnPTc3PWNvbmZpZyBYRlNfUVVPVEFcbi0tXG5mcy94ZnMvS2NvbmZpZy03OS1cdGRlcGVuZHMgb24gWEZTX0ZTXG5mcy94ZnMvS2NvbmZpZzo4MDpcdHNlbGVjdCBRVU9UQUNUTFxuZnMveGZzL0tjb25maWctODEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqUXVvdGEgQ29uZmlndXJhdGlvbiBJbnNpZ2h0cyoqCgpSaWdodCwgc28gYFFVT1RBYCBkaXJlY3RseSBzZWxlY3RzIGBRVU9UQUNUTGAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkOyBlbmFibGluZyBgUVVPVEFgIGVmZmVjdGl2ZWx5IGhhbmRsZXMgdGhlIG5lY2Vzc2FyeSBjb250cm9sLiBObyBuZWVkIHRvIGRpZyBmdXJ0aGVyIHRoZXJlLgoKTm93LCB0aGUgdXNlIG9mIGBRRk1UX1YyYCBpcyBleHBsaWNpdGx5IHN0YXRlZCBhcyBiZWluZyBuZWNlc3NhcnkgZm9yIHRoZSB2MiBxdW90YSBmb3JtYXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBjb25maXJtaW5nIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBzY2FuIHRoZSBjb25maWd1cmF0aW9uIGZvciByZWxhdGVkIGVudHJpZXMuIEhvbGQgb24sIGl0IGxvb2tzIGxpa2UgYFFVT1RBX1RSRUVgIGlzICphbHNvKiBzZWxlY3RlZCBieSBgUUZNVF9WMmAuIE9rYXksIGNvbmZpcm1pbmcgdGhlIGV4cGVjdGVkIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB2MiBmb3JtYXQgc3VwcG9ydCBhbmQgdGhlIHF1b3RhIHRyZWUgZnVuY3Rpb25hbGl0eS4gVGhhdCYjMzk7cyBhIGxvZ2ljYWwgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFFVT1RBX1RSRUUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL0tjb25maWc9NTg9Y29uZmlnIFFGTVRfVjJcbi0tXG5mcy9xdW90YS9LY29uZmlnLTYwLVx0ZGVwZW5kcyBvbiBRVU9UQVxuZnMvcXVvdGEvS2NvbmZpZzo2MTpcdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9xdW90YS9LY29uZmlnLTYyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlF1b3RhIENvbmZpZ3VyYXRpb24gRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggcXVvdGEgY29uZmlndXJhdGlvbnMgaGVyZSDigJMgc3BlY2lmaWNhbGx5IGBRVU9UQWAgYW5kIGBRRk1UX1YyYCwgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgdGFzay4gYGRxdW90X3NldF9kcWluZm9gIGxvb2tzIHByb21pc2luZy4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QsIGFuZCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgcXVvdGEgaW5mb3JtYXRpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIG5lZWQuCgpJIHdhcyBpbml0aWFsbHkgY29uc2lkZXJpbmcgYHYyX3JlYWRfZmlsZV9pbmZvYCBhbmQgYHYyX3dyaXRlX2ZpbGVfaW5mb2AsIGFuZCB3aGlsZSB0aGV5JiMzOTtyZSBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggcHJldmVudHMgaW5saW5pbmcsIHRoZXkmIzM5O3JlIHN0YXRpYy4gT2ggd2FpdCwgYHYyX3JlYWRfZmlsZV9pbmZvYCBpcyBkZWZpbmVkIGluIGBmcy9xdW90YS9xdW90YV92Mi5jYC4gVGhhdCBmaWxlIG1ha2VzIGl0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgYmVjYXVzZSBpdCYjMzk7cyBub3QgaW5saW5lZC4KClNvLCBJJiMzOTtsbCBnbyB3aXRoIGFkZGluZyBgZHF1b3Rfc2V0X2RxaW5mb2AuIFRoYXQgbG9va3MgbGlrZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBjaG9pY2UuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm90aGluZyBlbHNlIG9mIGltbWVkaWF0ZSByZWxldmFuY2UuIEFoLCBgaWdub3JlX2hhcmRsaW1pdGAgc2VlbXMgc3RhdGljIGFuZCBsaWtlbHkgaW5saW5lZCwgc28gSSB3b24mIzM5O3QgbmVlZCB0byBjb25zaWRlciBpdCBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdub3JlX2hhcmRsaW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL2RxdW90LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYz0xMjkyPXN0YXRpYyB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdF93YXJuICp3YXJuKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMTMwNi1cbmZzL3F1b3RhL2RxdW90LmM6MTMwNzpzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcbmZzL3F1b3RhL2RxdW90LmMtMTMwOC17XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0xMzE1PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2Rlcyxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMjgtXHQgICAgbmV3aW5vZGVzIFx1MDAzZSBkcXVvdC1cdTAwM2VkcV9kcWIuZHFiX2loYXJkbGltaXQgXHUwMDI2XHUwMDI2XG5mcy9xdW90YS9kcXVvdC5jOjEzMjk6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XG5mcy9xdW90YS9kcXVvdC5jLTEzMzAtXHRcdHByZXBhcmVfd2FybmluZyh3YXJuLCBkcXVvdCwgUVVPVEFfTkxfSUhBUkRXQVJOKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMzgtXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFx1MDAzZT0gZHF1b3QtXHUwMDNlZHFfZHFiLmRxYl9pdGltZSBcdTAwMjZcdTAwMjZcbmZzL3F1b3RhL2RxdW90LmM6MTMzOTogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcbmZzL3F1b3RhL2RxdW90LmMtMTM0MC1cdFx0cHJlcGFyZV93YXJuaW5nKHdhcm4sIGRxdW90LCBRVU9UQV9OTF9JU09GVExPTkdXQVJOKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jPTEzNjA9c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzNzctXHQgICAgdHNwYWNlIFx1MDAzZSBkcXVvdC1cdTAwM2VkcV9kcWIuZHFiX2JoYXJkbGltaXQgXHUwMDI2XHUwMDI2XG5mcy9xdW90YS9kcXVvdC5jOjEzNzg6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XG5mcy9xdW90YS9kcXVvdC5jLTEzNzktXHRcdGlmIChmbGFncyBcdTAwMjYgRFFVT1RfU1BBQ0VfV0FSTilcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzODgtXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFx1MDAzZT0gZHF1b3QtXHUwMDNlZHFfZHFiLmRxYl9idGltZSBcdTAwMjZcdTAwMjZcbmZzL3F1b3RhL2RxdW90LmM6MTM4OTogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcbmZzL3F1b3RhL2RxdW90LmMtMTM5MC1cdFx0aWYgKGZsYWdzIFx1MDAyNiBEUVVPVF9TUEFDRV9XQVJOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTgxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb2RlIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB3b25kZXJpbmcgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJIHNlZSBgaWdub3JlX2hhcmRsaW1pdGAgYW5kIGltbWVkaWF0ZWx5IG5vdGUgdGhhdCBpdCYjMzk7cyBzdGF0aWMgYW5kIGNhbGxlZCBpbiBhIGJ1bmNoIG9mIGRpZmZlcmVudCBwbGFjZXMuIE15IGd1dCB0ZWxscyBtZSB0aGF0IHRoZSBjb21waWxlciAqbWlnaHQqIGhhdmUgaW5saW5lZCBpdCwgd2hpY2ggd291bGQgYmUgZ29vZCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQgd2l0aCBhIHF1aWNrIGNoZWNrLiBUaGVuIHRoZXJlJiMzOTtzIGBkcXVvdF9hZGRfaW5vZGVzYCBhbmQgYGRxdW90X2FkZF9zcGFjZWAuIFRoZXkmIzM5O3JlICphbHNvKiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQgc2luY2UgdGhleSBhcmUgcHJvYmFibHkgY2FsbGVkIG1vcmUgb2Z0ZW4sIG1heWJlIG5vdCBpbmxpbmVkLiBHaXZlbiB0aGF0IHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lLCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcXVvdF9hZGRfaW5vZGVzYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RxdW90X2FkZF9pbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9xdW90YS9kcXVvdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL2RxdW90LmM9MTMwNz1zdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEzMTQtXG5mcy9xdW90YS9kcXVvdC5jOjEzMTU6c3RhdGljIGludCBkcXVvdF9hZGRfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE2LVx0XHRcdCAgICBzdHJ1Y3QgZHF1b3Rfd2FybiAqd2Fybilcbi0tXG5mcy9xdW90YS9kcXVvdC5jPTE3NzY9aW50IGRxdW90X2FsbG9jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYy0xNzk0LVx0XHRcdGNvbnRpbnVlO1xuZnMvcXVvdGEvZHF1b3QuYzoxNzk1Olx0XHRyZXQgPSBkcXVvdF9hZGRfaW5vZGVzKGRxdW90LCAxLCBcdTAwMjZ3YXJuW2NudF0pO1xuZnMvcXVvdGEvZHF1b3QuYy0xNzk2LVx0XHRpZiAocmV0KSB7XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0yMDA4PWludCBfX2RxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkcXVvdCAqKnRyYW5zZmVyX3RvKVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtMjA2Mi1cdFx0XHRcdFx1MDAyNmRxdW90X3NyY3UsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkcV9kYXRhX2xvY2spKTtcbmZzL3F1b3RhL2RxdW90LmM6MjA2MzpcdFx0cmV0ID0gZHF1b3RfYWRkX2lub2Rlcyh0cmFuc2Zlcl90b1tjbnRdLCBpbm9kZV91c2FnZSxcbmZzL3F1b3RhL2RxdW90LmMtMjA2NC1cdFx0XHRcdCAgICAgICBcdTAwMjZ3YXJuX3RvW2NudF0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRxdW90IEFsbG9jYXRpb24gYW5kIFRyYW5zZmVyOiBLZXkgRXhwb3J0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBkcXVvdF9hbGxvY19pbm9kZWAgYW5kIGBfX2RxdW90X3RyYW5zZmVyYCBhcmUgZXhwb3NlZC4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGluZGljYXRlcyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IgdXNlICpvdXRzaWRlKiB0aGUgY29yZSBxdW90YSBpbXBsZW1lbnRhdGlvbi4gYGRxdW90X2FsbG9jX2lub2RlYCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBkZWFscyB3aXRoIGFsbG9jYXRpbmcgZGlzayBxdW90YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGxpbmsgYmV0d2VlbiB0aGUgZmlsZXN5c3RlbSBvYmplY3QgYW5kIGl0cyBxdW90YSB0cmFja2luZy4gU2VlaW5nIGl0IGV4cG9ydGVkIG1lYW5zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgdGhvc2UgaW52b2x2ZWQgaW4gZmlsZXN5c3RlbSBvcGVyYXRpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBxdW90YSwgb3IgcGVyaGFwcyBldmVuIGluIGN1c3RvbSBxdW90YSBzZXR1cHMuCgpUaGVuIHRoZXJlJiMzOTtzIGBfX2RxdW90X3RyYW5zZmVyYC4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHN1Z2dlc3RzIGl0JiMzOTtzIGEgJiMzNDtsb3ctbGV2ZWwmIzM0OyBmdW5jdGlvbiwgcHJvYmFibHkgbm90IHRoZSBwcmltYXJ5IGludGVyZmFjZS4gSXQmIzM5O3MgbGlrZWx5IHRoZSB3b3JraG9yc2UgZm9yIGFjdHVhbGx5ICptb3ZpbmcqIHF1b3RhIGluZm9ybWF0aW9uIOKAkyBkZWJpdGluZyBvbmUgZHF1b3QsIGNyZWRpdGluZyBhbm90aGVyLCBwcm9iYWJseSBhY3Jvc3MgZGlmZmVyZW50IHVzZXJzIG9yIGdyb3Vwcy4gRXhwb3J0aW5nIHRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IHRlbGxzIG1lIHRoYXQgb3RoZXIgbW9kdWxlcyBtaWdodCBuZWVkIHRvIGltcGxlbWVudCB0aGVpciBvd24gc3RyYXRlZ2llcyBmb3IgcXVvdGEgbWFuYWdlbWVudCBvciBkYXRhIG1vdmVtZW50LCBwZXJoYXBzIGZvciB0aGluZ3MgbGlrZSBvbmxpbmUgcmVzaXppbmcsIGZpbGVzeXN0ZW0gY29weSBvcGVyYXRpb25zLCBvciBldmVuIHRoaW5ncyBsaWtlIGNvbnRhaW5lcml6ZWQgc3RvcmFnZSBtYW5hZ2VtZW50IHdoZXJlIHlvdSBtaWdodCBiZSBtYW5pcHVsYXRpbmcgcXVvdGEgYm91bmRhcmllcyBiZXR3ZWVuIGNvbnRhaW5lcnMuIFRoZSBgX19gIHByZWZpeCB3b3VsZCBpbmRpY2F0ZSB0aGF0IGNhcmUgaXMgbmVlZGVkIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgYXMgdGhlcmUgYXJlIHByb2JhYmx5IGNvbnN0cmFpbnRzIG9uIGhvdyB0aGUgc3lzdGVtIG5lZWRzIHRvIGJlIHVzZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgY29uZmxpY3RzLgoKQmFzaWNhbGx5LCBzZWVpbmcgdGhlc2UgZnVuY3Rpb25zIGV4cG9ydGVkIHRlbGxzIG1lIHRoYXQgdGhlIHF1b3RhIHN1YnN5c3RlbSBpcyBkZXNpZ25lZCB0byBiZSBtb3JlIGZsZXhpYmxlIGFuZCBleHRlbnNpYmxlIHRoYW4gYSBsb3Qgb2YgcGVvcGxlIG1pZ2h0IHRoaW5rLiBUaGV5JiMzOTt2ZSBwcm92aWRlZCB0b29scyB0byBob29rIGludG8gdGhlc2UgY3JpdGljYWwgcG9pbnRzLiBUaGV5IGFyZSBnaXZpbmcgdXMgc29tZSBwb3dlcmZ1bCBjYXBhYmlsaXRpZXMgaWYgd2UgbmVlZCB0byBkbyBzb21lIG1vcmUgY29tcGxleCBxdW90YSBvcGVyYXRpb25zLiBJdCYjMzk7cyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IGhvdyB3ZSBjYW4gaW50ZWdyYXRlIHF1b3RhIG1hbmFnZW1lbnQgaW50byBhZHZhbmNlZCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucywgY2xvdWQtYmFzZWQgc3RvcmFnZSwgb3IgbW9yZSBzcGVjaWFsaXplZCB1c2UgY2FzZXMuIFdlJiMzOTt2ZSBnb3QgdGhlIGFiaWxpdHkgdG8gbW9kaWZ5IHF1b3RhIGRhdGEgYW5kIHF1b3RhcyBvbiBhbiBpbm9kZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyB0aGVzZSBvdXRzaWRlIHRoZSBzdGFuZGFyZCBxdW90YSByb3V0aW5lcyB3b3VsZCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRxdW90X2FsbG9jX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvZHF1b3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9xdW90YS9kcXVvdC5jPTE3NzY9aW50IGRxdW90X2FsbG9jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYy0xODE3LX1cbmZzL3F1b3RhL2RxdW90LmM6MTgxODpFWFBPUlRfU1lNQk9MKGRxdW90X2FsbG9jX2lub2RlKTtcbmZzL3F1b3RhL2RxdW90LmMtMTgxOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxOTEKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUXVvdGEgU3Vic3lzdGVtIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGRxdW90X3NldF9kcWluZm9gLCBgZHF1b3RfYWxsb2NfaW5vZGVgLCBhbmQgYF9fZHF1b3RfdHJhbnNmZXJgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgYXJlYXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgZm9yIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIG9mIGNvdXJzZS4KCkxldCBtZSBicmVhayBkb3duIG15IHVuZGVyc3RhbmRpbmcuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBxdW90YSBzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgZW5hYmxpbmcgdGhlIGBEUUZfUk9PVF9TUVVBU0hgIGZsYWcgZm9yIHYyIHF1b3RhIGZvcm1hdHMuIFByZXZpb3VzbHksIHRoYXQgZmxhZyB3YXMgcmVzdHJpY3RlZCB0byB2MSBmb3JtYXRzLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1vZGlmaWVzIGhvdyByZXNvdXJjZSBsaW1pdHMgYXJlIGVuZm9yY2VkLCBlc3BlY2lhbGx5IGZvciBwcm9jZXNzZXMgd2l0aCBgQ0FQX1NZU19SRVNPVVJDRWAuCgpTbywgdGhlIGZvY3VzIGlzIG9uIGhvdyBsaW1pdHMgYXJlIGhhbmRsZWQgYW5kIHRyYW5zbGF0ZWQgd2l0aGluIHRoZSBEcXVvdCBzeXN0ZW0sIHdpdGggdGhpcyBmbGFnLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZGlmZmVyZW50IHF1b3RhIGZvcm1hdHMsIGFuZCBob3cgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdnVsbmVyYWJpbGl0aWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIHJlc291cmNlIGV4aGF1c3Rpb24gd2l0aGluIHRoZSBxdW90YSBzeXN0ZW0uIFRoZSBgUVVPVEFgIGFuZCBgUUZNVF9WMmAgY29uZmlndXJhdGlvbnMgYXJlIGltcG9ydGFudCBoZXJlIHRvIHRlc3QgZGlmZmVyZW50IGNvZGUgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtRRk1UX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHF1b3Rfc2V0X2RxaW5mbyYjMzQ7LAogICAgJiMzNDtkcXVvdF9hbGxvY19pbm9kZSYjMzQ7LAogICAgJiMzNDtfX2RxdW90X3RyYW5zZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdGhlIERRRl9ST09UX1NRVUFTSCBmbGFnIGZvciB2MiBxdW90YSBmb3JtYXRzLCByZW1vdmluZyBhIGNoZWNrIHRoYXQgcmVzdHJpY3RlZCBpdCB0byB2MSBmb3JtYXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHF1b3RhIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGxpbWl0cyBhcmUgZW5mb3JjZWQgZm9yIENBUF9TWVNfUkVTT1VSQ0UgcHJvY2Vzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtRVU9UQSYjMzQ7LAogICAgJiMzNDtRRk1UX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHF1b3Rfc2V0X2RxaW5mbyYjMzQ7LAogICAgJiMzNDtkcXVvdF9hbGxvY19pbm9kZSYjMzQ7LAogICAgJiMzNDtfX2RxdW90X3RyYW5zZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdGhlIERRRl9ST09UX1NRVUFTSCBmbGFnIGZvciB2MiBxdW90YSBmb3JtYXRzLCByZW1vdmluZyBhIGNoZWNrIHRoYXQgcmVzdHJpY3RlZCBpdCB0byB2MSBmb3JtYXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHF1b3RhIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGxpbWl0cyBhcmUgZW5mb3JjZWQgZm9yIENBUF9TWVNfUkVTT1VSQ0UgcHJvY2Vzc2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYSByZXN0cmljdGlvbiBvbiB0aGUgYERRRl9ST09UX1NRVUFTSGAgZmxhZywgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCB3aXRoIHYyIHF1b3RhIGZvcm1hdHMuIEl0IG1vZGlmaWVzIGB2Ml93cml0ZV9maWxlX2luZm9gIHRvIHdyaXRlIHRoaXMgZmxhZyB0byBkaXNrLiBUaGUgYHN0cnVjdCB2Ml9kaXNrX2RxaW5mb2Agd3JpdHRlbiB0byBkaXNrIGNvbnNpc3RzIG9mIDYgYF9fbGUzMmAgZmllbGRzLCBhbGwgb2Ygd2hpY2ggYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBgcXVvdGFfd3JpdGVgIGNhbGwuIFRoZXJlIGlzIG5vIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgZGlzay4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIHF1b3RhIGxpbWl0IGVuZm9yY2VtZW50LCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU0NmQ0ZGM4ZTU1ZDUxNTkyN2FlMmY2YWM1NWFiNGM2ZjFiZDc0MTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzo0NToxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jCmluZGV4IDk4NTBkZTM5NTVkMzEuLmU0MzFlNzJkZmVhODAgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL2RxdW90LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcXVvdGEvZHF1b3QuYwpAQCAtMTMwOSw4ICYjNDM7MTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQogCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gJmFtcDtzYl9kcW9wdChkcXVvdC0mZ3Q7ZHFfc2IpLSZndDtpbmZvW2RxdW90LSZndDtkcV9pZC50eXBlXTsKIAogCXJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpICZhbXA7JmFtcDsKLQkgICAgICAgKGluZm8tJmd0O2RxaV9mb3JtYXQtJmd0O3FmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQgfHwKLQkJIShpbmZvLSZndDtkcWlfZmxhZ3MgJmFtcDsgRFFGX1JPT1RfU1FVQVNIKSk7CiYjNDM7CSAgICAgICAhKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpOwogfQogCiBzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsCkBAIC0yOTAwLDExICYjNDM7Mjg5OSw2IEBAIGludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpCiAJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkKIAkJcmV0dXJuIC1FU1JDSDsKIAltaSA9IHNiX2Rxb3B0KHNiKS0mZ3Q7aW5mbyAmIzQzOyB0eXBlOwotCWlmIChpaS0mZ3Q7aV9maWVsZG1hc2sgJmFtcDsgUUNfRkxBR1MpIHsKLQkJaWYgKChpaS0mZ3Q7aV9mbGFncyAmYW1wOyBRQ0lfUk9PVF9TUVVBU0ggJmFtcDsmYW1wOwotCQkgICAgIG1pLSZndDtkcWlfZm9ybWF0LSZndDtxZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KIAlzcGluX2xvY2soJmFtcDtkcV9kYXRhX2xvY2spOwogCWlmIChpaS0mZ3Q7aV9maWVsZG1hc2sgJmFtcDsgUUNfU1BDX1RJTUVSKQogCQltaS0mZ3Q7ZHFpX2JncmFjZSA9IGlpLSZndDtpX3NwY190aW1lbGltaXQ7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92Mi5jIGIvZnMvcXVvdGEvcXVvdGFfdjIuYwppbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YV92Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKQEAgLTE0Miw4ICYjNDM7MTQyLDcgQEAgc3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKIAl9CiAJaW5mby0mZ3Q7ZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpOwogCWluZm8tJmd0O2RxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTsKLQkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0JaW5mby0mZ3Q7ZHFpX2ZsYWdzID0gMDsKJiM0MzsJaW5mby0mZ3Q7ZHFpX2ZsYWdzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZsYWdzKSAmYW1wOyBEUUZfUk9PVF9TUVVBU0g7CiAJcWluZm8tJmd0O2RxaV9zYiA9IHNiOwogCXFpbmZvLSZndDtkcWlfdHlwZSA9IHR5cGU7CiAJcWluZm8tJmd0O2RxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTsKQEAgLTIwOSw4ICYjNDM7MjA4LDcgQEAgc3RhdGljIGludCB2Ml93cml0ZV9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCiAJaW5mby0mZ3Q7ZHFpX2ZsYWdzICZhbXA7PSB+RFFGX0lORk9fRElSVFk7CiAJZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tJmd0O2RxaV9iZ3JhY2UpOwogCWRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLSZndDtkcWlfaWdyYWNlKTsKLQkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCi0JZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoMCk7CiYjNDM7CWRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKGluZm8tJmd0O2RxaV9mbGFncyAmYW1wOyBEUUZfUk9PVF9TUVVBU0gpOwogCXNwaW5fdW5sb2NrKCZhbXA7ZHFfZGF0YV9sb2NrKTsKIAlkaW5mby5kcWlfYmxvY2tzID0gY3B1X3RvX2xlMzIocWluZm8tJmd0O2RxaV9ibG9ja3MpOwogCWRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLSZndDtkcWlfZnJlZV9ibGspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAppbmRleCA1MjA5MDEwNWI4MjgyLi5hMzRmNDM1MTlhZjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaApAQCAtMTQ5LDcgJiM0MzsxNDksNyBAQCBlbnVtIHsKIAlEUUZfUFJJVkFURQogfTsKIAotLyogUm9vdCBzcXVhc2ggZW5hYmxlZCAoZm9yIHYxIHF1b3RhIGZvcm1hdCkgKi8KJiM0MzsvKiBFbmZvcmNlIGxpbWl0cyBhbHNvIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3NlcyAqLwogI2RlZmluZSBEUUZfUk9PVF9TUVVBU0gJKDEgJmx0OyZsdDsgRFFGX1JPT1RfU1FVQVNIX0IpCiAvKiBRdW90YSBzdG9yZWQgaW4gYSBzeXN0ZW0gZmlsZSAqLwogI2RlZmluZSBEUUZfU1lTX0ZJTEUJKDEgJmx0OyZsdDsgRFFGX1NZU19GSUxFX0IpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUXVvdGEgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIHF1b3RhIGhhbmRsaW5nIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBNeSBmaXJzdCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0IHNlZW1zIGZvY3VzZWQgb24gdGhlIHYyIHF1b3RhIGZvcm1hdCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHRvIGBmcy9xdW90YS9xdW90YV92Mi5jYC4gUmVtb3ZpbmcgdGhhdCBgUUZNVF9WRlNfT0xEYCBjaGVjayBpbiBgaWdub3JlX2hhcmRsaW1pdGAgYW5kIGBkcXVvdF9zZXRfZHFpbmZvYCBpcyBpbnRlcmVzdGluZywgYW5kIHRoZW4gdGhlcmUgYXJlIHRoZSBkaXJlY3QgbW9kaWZpY2F0aW9ucyBvZiBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCwgd2hlcmUgaXQmIzM5O3Mgbm93IGRlYWxpbmcgd2l0aCBgRFFGX1JPT1RfU1FVQVNIYCBpbnN0ZWFkIG9mIGJydXNoaW5nIG9mZiBmbGFncy4gRXNzZW50aWFsbHksIGl0IGFwcGVhcnMgd2UmIzM5O3JlIG5vdyBlbmFibGluZyBhbmQgdXRpbGl6aW5nIGBEUUZfUk9PVF9TUVVBU0hgIGZvciB0aGUgdjIgZm9ybWF0LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIHRob3VnaCwgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdpdGggdGhpcyBkaXJlY3QgcmVhZGluZyBhbmQgd3JpdGluZyBvZiBgZGluZm8uZHFpX2ZsYWdzYCBpbiB0aGUgYHYyX3JlYWRfZmlsZV9pbmZvYCBhbmQgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgZnVuY3Rpb25zLCByZXNwZWN0aXZlbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgZGluZm9gLCB3aGljaCBpcyBhIGBzdHJ1Y3QgdjJfZGlza19kcWluZm9gLCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uLiBUaGUgaW50ZWdyaXR5IG9mIHRoZSBpbmZvcm1hdGlvbiBkZXBlbmRzIG9uIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgcHJvcGVybHkgcG9wdWxhdGVkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB2Ml9kaXNrX2RxaW5mb2AgYW5kIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgZGluZm9gIHdpdGhpbiB0aGUgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgZnVuY3Rpb24gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBsdXJraW5nIHZ1bG5lcmFiaWxpdGllcyBvciBkYXRhIGNvcnJ1cHRpb24gcmlza3MgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuIFRoaXMgbmVlZHMgYSB2ZXJ5IGNhcmVmdWwgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHYyX2Rpc2tfZHFpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcXVvdGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3F1b3RhL3F1b3RhX3YyLmM9OTA9c3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbmZzL3F1b3RhL3F1b3RhX3YyLmMtOTEte1xuZnMvcXVvdGEvcXVvdGFfdjIuYzo5MjpcdHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyBkaW5mbztcbmZzL3F1b3RhL3F1b3RhX3YyLmMtOTMtXHRzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciBkcWhlYWQ7XG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYy0xMTQtXHRzaXplID0gc2ItXHUwMDNlc19vcC1cdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVx1MDAyNmRpbmZvLFxuZnMvcXVvdGEvcXVvdGFfdjIuYzoxMTU6XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7XG5mcy9xdW90YS9xdW90YV92Mi5jOjExNjpcdGlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pKSB7XG5mcy9xdW90YS9xdW90YV92Mi5jLTExNy1cdFx0cXVvdGFfZXJyb3Ioc2IsIFwmIzM0O0NhbiYjMzk7dCByZWFkIGluZm8gc3RydWN0dXJlXCYjMzQ7KTtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTE5Nj1zdGF0aWMgaW50IHYyX3dyaXRlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMTk3LXtcbmZzL3F1b3RhL3F1b3RhX3YyLmM6MTk4Olx0c3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0xOTktXHRzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7XG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTYtXHRzaXplID0gc2ItXHUwMDNlc19vcC1cdTAwM2VxdW90YV93cml0ZShzYiwgdHlwZSwgKGNoYXIgKilcdTAwMjZkaW5mbyxcbmZzL3F1b3RhL3F1b3RhX3YyLmM6MjE3Olx0ICAgICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pLCBWMl9EUUlORk9PRkYpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTgtXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobWVtYWxsb2MpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTktXHR1cF93cml0ZShcdTAwMjZkcW9wdC1cdTAwM2VkcWlvX3NlbSk7XG5mcy9xdW90YS9xdW90YV92Mi5jOjIyMDpcdGlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pKSB7XG5mcy9xdW90YS9xdW90YV92Mi5jLTIyMS1cdFx0cXVvdGFfZXJyb3Ioc2IsIFwmIzM0O0NhbiYjMzk7dCB3cml0ZSBpbmZvIHN0cnVjdHVyZVwmIzM0Oyk7XG4tLVxuZnMvcXVvdGEvcXVvdGFpb192Mi5oPTUwPXN0cnVjdCB2MnIxX2Rpc2tfZHFibGsge1xuLS1cbmZzL3F1b3RhL3F1b3RhaW9fdjIuaC02My0vKiBIZWFkZXIgd2l0aCB0eXBlIGFuZCB2ZXJzaW9uIHNwZWNpZmljIGluZm9ybWF0aW9uICovXG5mcy9xdW90YS9xdW90YWlvX3YyLmg6NjQ6c3RydWN0IHYyX2Rpc2tfZHFpbmZvIHtcbmZzL3F1b3RhL3F1b3RhaW9fdjIuaC02NS1cdF9fbGUzMiBkcWlfYmdyYWNlO1x0LyogVGltZSBiZWZvcmUgYmxvY2sgc29mdCBsaW1pdCBiZWNvbWVzIGhhcmQgbGltaXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBRdW90YSB2MiBGaWxlIEluZm8qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBmaWxlIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBxdW90YSB2MiBzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIHdyaXRpbmcuIFNvLCBteSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gYHYyX3dyaXRlX2ZpbGVfaW5mb2AgaW4gYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcXVvdGEgZGF0YSByZWxhdGVkIHRvIGZpbGVzIHRvIHJlc2lkZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoaXMgcHJvY2VzcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UsIGFuZCB3aGF0IHByb3RlY3Rpb25zIGFyZSBpbiBwbGFjZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGxpa2VseSBiZSB0aGUgY3JpdGljYWwganVuY3R1cmUgd2hlcmUgY2hhbmdlcyB0byBmaWxlIHNpemVzIGFuZCBpbm9kZSBjb3VudHMgZ2V0IHJlZmxlY3RlZCBpbiB0aGUgcXVvdGEgYWNjb3VudGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBJIGFudGljaXBhdGUgZmluZGluZyBkZXRhaWxzIGFib3V0IGRhdGEgc3RydWN0dXJlIHVwZGF0ZXMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHBlcmhhcHMgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBxdW90YSBlbmZvcmNlbWVudC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBjb2RlIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3F1b3RhL3F1b3RhX3YyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NjpcdHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuIDE5NzpcdHtcbiAxOTg6XHRcdHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyBkaW5mbztcbiAxOTk6XHRcdHN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTtcbiAyMDA6XHRcdHN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gXHUwMDI2ZHFvcHQtXHUwMDNlaW5mb1t0eXBlXTtcbiAyMDE6XHRcdHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICpxaW5mbyA9IGluZm8tXHUwMDNlZHFpX3ByaXY7XG4gMjAyOlx0XHRzc2l6ZV90IHNpemU7XG4gMjAzOlx0XHR1bnNpZ25lZCBpbnQgbWVtYWxsb2M7XG4gMjA0Olx0XG4gMjA1Olx0XHRkb3duX3dyaXRlKFx1MDAyNmRxb3B0LVx1MDAzZWRxaW9fc2VtKTtcbiAyMDY6XHRcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4gMjA3Olx0XHRzcGluX2xvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbiAyMDg6XHRcdGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNj0gfkRRRl9JTkZPX0RJUlRZO1xuIDIwOTpcdFx0ZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tXHUwMDNlZHFpX2JncmFjZSk7XG4gMjEwOlx0XHRkaW5mby5kcWlfaWdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfaWdyYWNlKTtcbiAyMTE6XHRcdGRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpO1xuIDIxMjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbiAyMTM6XHRcdGRpbmZvLmRxaV9ibG9ja3MgPSBjcHVfdG9fbGUzMihxaW5mby1cdTAwM2VkcWlfYmxvY2tzKTtcbiAyMTQ6XHRcdGRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLVx1MDAzZWRxaV9mcmVlX2Jsayk7XG4gMjE1Olx0XHRkaW5mby5kcWlfZnJlZV9lbnRyeSA9IGNwdV90b19sZTMyKHFpbmZvLVx1MDAzZWRxaV9mcmVlX2VudHJ5KTtcbiAyMTY6XHRcdHNpemUgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXF1b3RhX3dyaXRlKHNiLCB0eXBlLCAoY2hhciAqKVx1MDAyNmRpbmZvLFxuIDIxNzpcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pLCBWMl9EUUlORk9PRkYpO1xuIDIxODpcdFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKG1lbWFsbG9jKTtcbiAyMTk6XHRcdHVwX3dyaXRlKFx1MDAyNmRxb3B0LVx1MDAzZWRxaW9fc2VtKTtcbiAyMjA6XHRcdGlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pKSB7XG4gMjIxOlx0XHRcdHF1b3RhX2Vycm9yKHNiLCBcJiMzNDtDYW4mIzM5O3Qgd3JpdGUgaW5mbyBzdHJ1Y3R1cmVcJiMzNDspO1xuIDIyMjpcdFx0XHRyZXR1cm4gc2l6ZSBcdTAwM2MgMCA/IHNpemUgOiAtRUlPO1xuIDIyMzpcdFx0fVxuIDIyNDpcdFx0cmV0dXJuIDA7XG4gMjI1Olx0fVxuIDIyNjpcdFxuIDIyNzpcdHN0YXRpYyB2b2lkIHYycjBfZGlzazJtZW1kcWIoc3RydWN0IGRxdW90ICpkcXVvdCwgdm9pZCAqZHApXG4gMjI4Olx0e1xuIDIyOTpcdFx0c3RydWN0IHYycjBfZGlza19kcWJsayAqZCA9IGRwLCBlbXB0eTtcbiAyMzA6XHRcdHN0cnVjdCBtZW1fZHFibGsgKm0gPSBcdTAwMjZkcXVvdC1cdTAwM2VkcV9kcWI7XG4gMjMxOlx0XG4gMjMyOlx0XHRtLVx1MDAzZWRxYl9paGFyZGxpbWl0ID0gbGUzMl90b19jcHUoZC1cdTAwM2VkcWJfaWhhcmRsaW1pdCk7XG4gMjMzOlx0XHRtLVx1MDAzZWRxYl9pc29mdGxpbWl0ID0gbGUzMl90b19jcHUoZC1cdTAwM2VkcWJfaXNvZnRsaW1pdCk7XG4gMjM0Olx0XHRtLVx1MDAzZWRxYl9jdXJpbm9kZXMgPSBsZTMyX3RvX2NwdShkLVx1MDAzZWRxYl9jdXJpbm9kZXMpO1xuIDIzNTpcdFx0bS1cdTAwM2VkcWJfaXRpbWUgPSBsZTY0X3RvX2NwdShkLVx1MDAzZWRxYl9pdGltZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSB2MiBEaXNrIFF1b3RhIEluZm8gU3RydWN0dXJlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB2Ml9kaXNrX2RxaW5mb2Agc3RydWN0dXJlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBmcy9xdW90YS9xdW90YWlvX3YyLmhgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24uIEdvdHRhIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsYXlvdXQgYW5kIGZpZWxkcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXNrIHF1b3RhIGluZm9ybWF0aW9uIGlzIGJlaW5nIHN0b3JlZCBhdCB0aGlzIHZlcnNpb24uIFdoYXQgZGF0YSBtZW1iZXJzIGFyZSBpbmNsdWRlZD8gV2hhdCYjMzk7cyB0aGUgc2l6ZSBhbmQgYWxpZ25tZW50PyBBbnkgcGFja2VkIHN0cnVjdHVyZXMgdG8gYmUgYXdhcmUgb2Y/IEkgd2FudCB0byBzZWUgaWYgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHNlZW1zIGVmZmljaWVudC4gTWF5YmUgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCBieXRlIG9yZGVyIG9yIHBsYXRmb3JtLXNwZWNpZmljIGludGVycHJldGF0aW9ucyB0aGF0IG1pZ2h0IHRyaXAgbWUgdXA/IEdvdCB0byBtYWtlIHN1cmUgdG8gY29uc2lkZXIgYW55IHBvc3NpYmxlIGFsaWdubWVudCBvciBwYWRkaW5nIGlzc3VlcyB0aGF0IG1pZ2h0IGFmZmVjdCBwZXJmb3JtYW5jZSBvciBjb21wYXRpYmlsaXR5IGFjcm9zcyBhcmNoaXRlY3R1cmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9xdW90YS9xdW90YWlvX3YyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY0Olx0c3RydWN0IHYyX2Rpc2tfZHFpbmZvIHtcbiAgNjU6XHRcdF9fbGUzMiBkcWlfYmdyYWNlO1x0LyogVGltZSBiZWZvcmUgYmxvY2sgc29mdCBsaW1pdCBiZWNvbWVzIGhhcmQgbGltaXQgKi9cbiAgNjY6XHRcdF9fbGUzMiBkcWlfaWdyYWNlO1x0LyogVGltZSBiZWZvcmUgaW5vZGUgc29mdCBsaW1pdCBiZWNvbWVzIGhhcmQgbGltaXQgKi9cbiAgNjc6XHRcdF9fbGUzMiBkcWlfZmxhZ3M7XHQvKiBGbGFncyBmb3IgcXVvdGFmaWxlIChEUUZfKikgKi9cbiAgNjg6XHRcdF9fbGUzMiBkcWlfYmxvY2tzO1x0LyogTnVtYmVyIG9mIGJsb2NrcyBpbiBmaWxlICovXG4gIDY5Olx0XHRfX2xlMzIgZHFpX2ZyZWVfYmxrO1x0LyogTnVtYmVyIG9mIGZpcnN0IGZyZWUgYmxvY2sgaW4gdGhlIGxpc3QgKi9cbiAgNzA6XHRcdF9fbGUzMiBkcWlfZnJlZV9lbnRyeTtcdC8qIE51bWJlciBvZiBibG9jayB3aXRoIGF0IGxlYXN0IG9uZSBmcmVlIGVudHJ5ICovXG4gIDcxOlx0fTtcbiAgNzI6XHRcbiAgNzM6XHQjZGVmaW5lIFYyX0RRSU5GT09GRlx0c2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKVx0LyogT2Zmc2V0IG9mIGluZm8gaGVhZGVyIGluIGZpbGUgKi9cbiAgNzQ6XHQjZGVmaW5lIFYyX0RRQkxLU0laRV9CSVRTIDEwXHRcdFx0XHQvKiBTaXplIG9mIGxlYWYgYmxvY2sgaW4gdHJlZSAqL1xuICA3NTpcdFxuICA3NjpcdCNlbmRpZiAvKiBfTElOVVhfUVVPVEFJT19WMl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDIKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogNzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUXVvdGEgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB0byB0aGUgcXVvdGEgY29kZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgdjIgcXVvdGEgZm9ybWF0LiBNeSBmaXJzdCBmb2N1cyBpcyBvbiB0aGUgYHYyX2Rpc2tfZHFpbmZvYCBzdHJ1Y3QsIHdoaWNoIGNvbnRhaW5zIGNydWNpYWwgcXVvdGEgaW5mb3JtYXRpb24uICBJIHF1aWNrbHkgc2VlIHRoYXQgaXQmIzM5O3MgY29tcG9zZWQgb2Ygc2l4IGBfX2xlMzJgIGZpZWxkczogYGRxaV9iZ3JhY2VgLCBgZHFpX2lncmFjZWAsIGBkcWlfZmxhZ3NgLCBgZHFpX2Jsb2Nrc2AsIGBkcWlfZnJlZV9ibGtgLCBhbmQgYGRxaV9mcmVlX2VudHJ5YC4gIFRoZSB0b3RhbCBzaXplIGlzIDI0IGJ5dGVzLCBhbmQgYSBxdWljayBtZW50YWwgY2hlY2sgY29uZmlybXMgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZyBiZXR3ZWVuIHRob3NlIDQtYnl0ZSBmaWVsZHMuIFRoZSBpbml0aWFsaXphdGlvbiBpcyBleHBsaWNpdCBpbiBgdjJfd3JpdGVfZmlsZV9pbmZvYC4gQWxsIGZpZWxkcyBhcmUgYmVpbmcgY29ycmVjdGx5IHBvcHVsYXRlZCBiZWZvcmUgd3JpdGluZyB0byBkaXNrLCBhbmQgdGhhdCYjMzk7cyBnb29kLgoKVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBkcXVvdF9zZXRfZHFpbmZvYC4gVGhlIHJlbW92ZWQgY2hlY2sgaXMgYWxsb3dpbmcgdGhlIGBRQ0lfUk9PVF9TUVVBU0hgIGZsYWcgdG8gYmUgc2V0LCBldmVuIGZvciB2MiBmb3JtYXRzLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgdGhlIGV4aXN0aW5nIGNvZGUgcGF0aHMgaW4gYHF1b3RhY3RsYCBzeXNjYWxscyBzZWVtIHRvIGNvcnJlY3RseSBpbml0aWFsaXplIHRoaXMgc3RydWN0dXJlLiBJdCYjMzk7cyBqdXN0IHJlbW92aW5nIGEgY29uc3RyYWludC4gR2l2ZW4gdGhhdCBhbGwgZmllbGRzIGFyZSBpbml0aWFsaXplZCwgdGhpcyByZW1vdmFsIHNlZW1zIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4KCk5leHQsIEkgcmV2aWV3IHRoZSBgaWdub3JlX2hhcmRsaW1pdGAgZnVuY3Rpb24uIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGNvbmRpdGlvbi4gSXQgbm93IG5vIGxvbmdlciBjaGVja3MgYHFmX2ZtdF9pZGAuIFRoaXMgYXBwZWFycyB0byBzaW1wbHkgYnJvYWRlbiB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGxvZ2ljLCByZW1vdmluZyBhIHJlc3RyaWN0aW9uLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHNlZW1zIHVuYWx0ZXJlZCwgYW5kIGFnYWluLCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGUgY29kZSBpcyBzYWZlIGFuZCB0aGF0IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4gVGhlIHBhdGNoIHNpbXBseSBlbmFibGVzIGEgcHJldmlvdXNseSByZXN0cmljdGVkIGZsYWcgZm9yIHRoZSB2MiBxdW90YSBmb3JtYXQuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHVzYWdlcyBvZiBgRFFGX1JPT1RfU1FVQVNIYCBidXQgdGhlIGNoYW5nZSBzZWVtcyBpc29sYXRlZCB0byB0aGUgZmlsZXMgYW5kIGZ1bmN0aW9ucyBJJiMzOTt2ZSBleGFtaW5lZC4gSSYjMzk7bSBzYXRpc2ZpZWQuCgpOZWVkc0tNU0FOPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGEgcmVzdHJpY3Rpb24gb24gdGhlIGBEUUZfUk9PVF9TUVVBU0hgIGZsYWcsIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgd2l0aCB2MiBxdW90YSBmb3JtYXRzLiBJdCBtb2RpZmllcyBgdjJfd3JpdGVfZmlsZV9pbmZvYCB0byB3cml0ZSB0aGlzIGZsYWcgdG8gZGlzay4gVGhlIGBzdHJ1Y3QgdjJfZGlza19kcWluZm9gIHdyaXR0ZW4gdG8gZGlzayBjb25zaXN0cyBvZiA2IGBfX2xlMzJgIGZpZWxkcywgYWxsIG9mIHdoaWNoIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgYHF1b3RhX3dyaXRlYCBjYWxsLiBUaGVyZSBpcyBubyBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIGRpc2suIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBxdW90YSBsaW1pdCBlbmZvcmNlbWVudCwgd2hpY2ggZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnLCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIHdpdGggdjIgcXVvdGEgZm9ybWF0cy4gSXQgbW9kaWZpZXMgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgdG8gd3JpdGUgdGhpcyBmbGFnIHRvIGRpc2suIFRoZSBgc3RydWN0IHYyX2Rpc2tfZHFpbmZvYCB3cml0dGVuIHRvIGRpc2sgY29uc2lzdHMgb2YgNiBgX19sZTMyYCBmaWVsZHMsIGFsbCBvZiB3aGljaCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBxdW90YV93cml0ZWAgY2FsbC4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciBkaXNrLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6MTkuMTY1MDMyNzc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwNDE3NjQ0NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFVT1RBXCIsXG4gICAgXCJRRk1UX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHF1b3Rfc2V0X2RxaW5mb1wiLFxuICAgIFwiZHF1b3RfYWxsb2NfaW5vZGVcIixcbiAgICBcIl9fZHF1b3RfdHJhbnNmZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYSByZXN0cmljdGlvbiBvbiB0aGUgYERRRl9ST09UX1NRVUFTSGAgZmxhZywgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCB3aXRoIHYyIHF1b3RhIGZvcm1hdHMuIEl0IG1vZGlmaWVzIGB2Ml93cml0ZV9maWxlX2luZm9gIHRvIHdyaXRlIHRoaXMgZmxhZyB0byBkaXNrLiBUaGUgYHN0cnVjdCB2Ml9kaXNrX2RxaW5mb2Agd3JpdHRlbiB0byBkaXNrIGNvbnNpc3RzIG9mIDYgYF9fbGUzMmAgZmllbGRzLCBhbGwgb2Ygd2hpY2ggYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBgcXVvdGFfd3JpdGVgIGNhbGwuIFRoZXJlIGlzIG5vIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugb3IgZGlzay4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBjb250cm9sIGZsb3cgYW5kIHF1b3RhIGxpbWl0IGVuZm9yY2VtZW50LCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0aGUgRFFGX1JPT1RfU1FVQVNIIGZsYWcgZm9yIHYyIHF1b3RhIGZvcm1hdHMsIHJlbW92aW5nIGEgY2hlY2sgdGhhdCByZXN0cmljdGVkIGl0IHRvIHYxIGZvcm1hdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcXVvdGEgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgbGltaXRzIGFyZSBlbmZvcmNlZCBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQ1OjE5LjE2NTA1MTAyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzIzMjU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU0NmQ0ZGM4ZTU1ZDUxNTkyN2FlMmY2YWM1NWFiNGM2ZjFiZDc0MTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6NDU6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmNcXG5pbmRleCA5ODUwZGUzOTU1ZDMxLi5lNDMxZTcyZGZlYTgwIDEwMDY0NFxcbi0tLSBhL2ZzL3F1b3RhL2RxdW90LmNcXG4rKysgYi9mcy9xdW90YS9kcXVvdC5jXFxuQEAgLTEzMDksOCArMTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbiBcXHRzdHJ1Y3QgbWVtX2RxaW5mbyAqaW5mbyA9IFxcdTAwMjZzYl9kcW9wdChkcXVvdC1cXHUwMDNlZHFfc2IpLVxcdTAwM2VpbmZvW2RxdW90LVxcdTAwM2VkcV9pZC50eXBlXTtcXG4gXFxuIFxcdHJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICAoaW5mby1cXHUwMDNlZHFpX2Zvcm1hdC1cXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxcbi1cXHRcXHQhKGluZm8tXFx1MDAzZWRxaV9mbGFncyBcXHUwMDI2IERRRl9ST09UX1NRVUFTSCkpO1xcbitcXHQgICAgICAgIShpbmZvLVxcdTAwM2VkcWlfZmxhZ3MgXFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsXFxuQEAgLTI5MDAsMTEgKzI4OTksNiBAQCBpbnQgZHF1b3Rfc2V0X2RxaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgc3RydWN0IHFjX2luZm8gKmlpKVxcbiBcXHRpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKVxcbiBcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbiBcXHRtaSA9IHNiX2Rxb3B0KHNiKS1cXHUwMDNlaW5mbyArIHR5cGU7XFxuLVxcdGlmIChpaS1cXHUwMDNlaV9maWVsZG1hc2sgXFx1MDAyNiBRQ19GTEFHUykge1xcbi1cXHRcXHRpZiAoKGlpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgUUNJX1JPT1RfU1FVQVNIIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgbWktXFx1MDAzZWRxaV9mb3JtYXQtXFx1MDAzZXFmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbiBcXHRzcGluX2xvY2soXFx1MDAyNmRxX2RhdGFfbG9jayk7XFxuIFxcdGlmIChpaS1cXHUwMDNlaV9maWVsZG1hc2sgXFx1MDAyNiBRQ19TUENfVElNRVIpXFxuIFxcdFxcdG1pLVxcdTAwM2VkcWlfYmdyYWNlID0gaWktXFx1MDAzZWlfc3BjX3RpbWVsaW1pdDtcXG5kaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdjIuYyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmNcXG5pbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NFxcbi0tLSBhL2ZzL3F1b3RhL3F1b3RhX3YyLmNcXG4rKysgYi9mcy9xdW90YS9xdW90YV92Mi5jXFxuQEAgLTE0Miw4ICsxNDIsNyBAQCBzdGF0aWMgaW50IHYyX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbiBcXHR9XFxuIFxcdGluZm8tXFx1MDAzZWRxaV9iZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmdyYWNlKTtcXG4gXFx0aW5mby1cXHUwMDNlZHFpX2lncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9pZ3JhY2UpO1xcbi1cXHQvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovXFxuLVxcdGluZm8tXFx1MDAzZWRxaV9mbGFncyA9IDA7XFxuK1xcdGluZm8tXFx1MDAzZWRxaV9mbGFncyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9mbGFncykgXFx1MDAyNiBEUUZfUk9PVF9TUVVBU0g7XFxuIFxcdHFpbmZvLVxcdTAwM2VkcWlfc2IgPSBzYjtcXG4gXFx0cWluZm8tXFx1MDAzZWRxaV90eXBlID0gdHlwZTtcXG4gXFx0cWluZm8tXFx1MDAzZWRxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTtcXG5AQCAtMjA5LDggKzIwOCw3IEBAIHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbiBcXHRpbmZvLVxcdTAwM2VkcWlfZmxhZ3MgXFx1MDAyNj0gfkRRRl9JTkZPX0RJUlRZO1xcbiBcXHRkaW5mby5kcWlfYmdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cXHUwMDNlZHFpX2JncmFjZSk7XFxuIFxcdGRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLVxcdTAwM2VkcWlfaWdyYWNlKTtcXG4tXFx0LyogTm8gZmxhZ3MgY3VycmVudGx5IHN1cHBvcnRlZCAqL1xcbi1cXHRkaW5mby5kcWlfZmxhZ3MgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoaW5mby1cXHUwMDNlZHFpX2ZsYWdzIFxcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRxX2RhdGFfbG9jayk7XFxuIFxcdGRpbmZvLmRxaV9ibG9ja3MgPSBjcHVfdG9fbGUzMihxaW5mby1cXHUwMDNlZHFpX2Jsb2Nrcyk7XFxuIFxcdGRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLVxcdTAwM2VkcWlfZnJlZV9ibGspO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXFxuaW5kZXggNTIwOTAxMDViODI4Mi4uYTM0ZjQzNTE5YWY4MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXFxuQEAgLTE0OSw3ICsxNDksNyBAQCBlbnVtIHtcXG4gXFx0RFFGX1BSSVZBVEVcXG4gfTtcXG4gXFxuLS8qIFJvb3Qgc3F1YXNoIGVuYWJsZWQgKGZvciB2MSBxdW90YSBmb3JtYXQpICovXFxuKy8qIEVuZm9yY2UgbGltaXRzIGFsc28gZm9yIENBUF9TWVNfUkVTT1VSQ0UgcHJvY2Vzc2VzICovXFxuICNkZWZpbmUgRFFGX1JPT1RfU1FVQVNIXFx0KDEgXFx1MDAzY1xcdTAwM2MgRFFGX1JPT1RfU1FVQVNIX0IpXFxuIC8qIFF1b3RhIHN0b3JlZCBpbiBhIHN5c3RlbSBmaWxlICovXFxuICNkZWZpbmUgRFFGX1NZU19GSUxFXFx0KDEgXFx1MDAzY1xcdTAwM2MgRFFGX1NZU19GSUxFX0IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQ1OjIwLjYyMzEyNjYxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYzNDMyNzA2NzkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJRVU9UQVwiLFxuICAgIFwiUUZNVF9WMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRxdW90X3NldF9kcWluZm9cIixcbiAgICBcImRxdW90X2FsbG9jX2lub2RlXCIsXG4gICAgXCJfX2RxdW90X3RyYW5zZmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0aGUgRFFGX1JPT1RfU1FVQVNIIGZsYWcgZm9yIHYyIHF1b3RhIGZvcm1hdHMsIHJlbW92aW5nIGEgY2hlY2sgdGhhdCByZXN0cmljdGVkIGl0IHRvIHYxIGZvcm1hdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcXVvdGEgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgbGltaXRzIGFyZSBlbmZvcmNlZCBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU0NmQ0ZGM4ZTU1ZDUxNTkyN2FlMmY2YWM1NWFiNGM2ZjFiZDc0MTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzo0NToxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jXG5pbmRleCA5ODUwZGUzOTU1ZDMxLi5lNDMxZTcyZGZlYTgwIDEwMDY0NFxuLS0tIGEvZnMvcXVvdGEvZHF1b3QuY1xuKysrIGIvZnMvcXVvdGEvZHF1b3QuY1xuQEAgLTEzMDksOCArMTMwOSw3IEBAIHN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuIFx0c3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBcdTAwMjZzYl9kcW9wdChkcXVvdC1cdTAwM2VkcV9zYiktXHUwMDNlaW5mb1tkcXVvdC1cdTAwM2VkcV9pZC50eXBlXTtcbiBcbiBcdHJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIChpbmZvLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fFxuLVx0XHQhKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpKTtcbitcdCAgICAgICAhKGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNiBEUUZfUk9PVF9TUVVBU0gpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsXG5AQCAtMjkwMCwxMSArMjg5OSw2IEBAIGludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpXG4gXHRpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKVxuIFx0XHRyZXR1cm4gLUVTUkNIO1xuIFx0bWkgPSBzYl9kcW9wdChzYiktXHUwMDNlaW5mbyArIHR5cGU7XG4tXHRpZiAoaWktXHUwMDNlaV9maWVsZG1hc2sgXHUwMDI2IFFDX0ZMQUdTKSB7XG4tXHRcdGlmICgoaWktXHUwMDNlaV9mbGFncyBcdTAwMjYgUUNJX1JPT1RfU1FVQVNIIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIG1pLVx1MDAzZWRxaV9mb3JtYXQtXHUwMDNlcWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCkpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXHRzcGluX2xvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbiBcdGlmIChpaS1cdTAwM2VpX2ZpZWxkbWFzayBcdTAwMjYgUUNfU1BDX1RJTUVSKVxuIFx0XHRtaS1cdTAwM2VkcWlfYmdyYWNlID0gaWktXHUwMDNlaV9zcGNfdGltZWxpbWl0O1xuZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhX3YyLmMgYi9mcy9xdW90YS9xdW90YV92Mi5jXG5pbmRleCBhMjRmYWI1ZjlmODA0Li44MTRkYjYxNjgxYmNkIDEwMDY0NFxuLS0tIGEvZnMvcXVvdGEvcXVvdGFfdjIuY1xuKysrIGIvZnMvcXVvdGEvcXVvdGFfdjIuY1xuQEAgLTE0Miw4ICsxNDIsNyBAQCBzdGF0aWMgaW50IHYyX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuIFx0fVxuIFx0aW5mby1cdTAwM2VkcWlfYmdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2JncmFjZSk7XG4gXHRpbmZvLVx1MDAzZWRxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTtcbi1cdC8qIE5vIGZsYWdzIGN1cnJlbnRseSBzdXBwb3J0ZWQgKi9cbi1cdGluZm8tXHUwMDNlZHFpX2ZsYWdzID0gMDtcbitcdGluZm8tXHUwMDNlZHFpX2ZsYWdzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZsYWdzKSBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIO1xuIFx0cWluZm8tXHUwMDNlZHFpX3NiID0gc2I7XG4gXHRxaW5mby1cdTAwM2VkcWlfdHlwZSA9IHR5cGU7XG4gXHRxaW5mby1cdTAwM2VkcWlfYmxvY2tzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2Jsb2Nrcyk7XG5AQCAtMjA5LDggKzIwOCw3IEBAIHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuIFx0aW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2PSB+RFFGX0lORk9fRElSVFk7XG4gXHRkaW5mby5kcWlfYmdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfYmdyYWNlKTtcbiBcdGRpbmZvLmRxaV9pZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLVx1MDAzZWRxaV9pZ3JhY2UpO1xuLVx0LyogTm8gZmxhZ3MgY3VycmVudGx5IHN1cHBvcnRlZCAqL1xuLVx0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRkaW5mby5kcWlfZmxhZ3MgPSBjcHVfdG9fbGUzMihpbmZvLVx1MDAzZWRxaV9mbGFncyBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRxX2RhdGFfbG9jayk7XG4gXHRkaW5mby5kcWlfYmxvY2tzID0gY3B1X3RvX2xlMzIocWluZm8tXHUwMDNlZHFpX2Jsb2Nrcyk7XG4gXHRkaW5mby5kcWlfZnJlZV9ibGsgPSBjcHVfdG9fbGUzMihxaW5mby1cdTAwM2VkcWlfZnJlZV9ibGspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmhcbmluZGV4IDUyMDkwMTA1YjgyODIuLmEzNGY0MzUxOWFmODAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmhcbkBAIC0xNDksNyArMTQ5LDcgQEAgZW51bSB7XG4gXHREUUZfUFJJVkFURVxuIH07XG4gXG4tLyogUm9vdCBzcXVhc2ggZW5hYmxlZCAoZm9yIHYxIHF1b3RhIGZvcm1hdCkgKi9cbisvKiBFbmZvcmNlIGxpbWl0cyBhbHNvIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3NlcyAqL1xuICNkZWZpbmUgRFFGX1JPT1RfU1FVQVNIXHQoMSBcdTAwM2NcdTAwM2MgRFFGX1JPT1RfU1FVQVNIX0IpXG4gLyogUXVvdGEgc3RvcmVkIGluIGEgc3lzdGVtIGZpbGUgKi9cbiAjZGVmaW5lIERRRl9TWVNfRklMRVx0KDEgXHUwMDNjXHUwMDNjIERRRl9TWVNfRklMRV9CKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6MjAuNjIzMTI3ODMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA3NTc5NDM0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUXVvdGEgU3lzdGVtIEVuaGFuY2VtZW50OiBFbmFibGluZyBSb290IFNxdWFzaCBmb3IgdjIgRm9ybWF0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgYSBzaWduaWZpY2FudCwgYWxiZWl0IHN1YnRsZSwgY2hhbmdlIHRvIGhvdyBxdW90YXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBQcmV2aW91c2x5LCB0aGUgY29kZSByZXN0cmljdGVkIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnIHRvIHRoZSBvbGRlciB2MSBxdW90YSBmb3JtYXQgKGBRRk1UX1ZGU19PTERgKS4gTm93LCB0aGUgcGF0Y2ggaXMgb3BlbmluZyBpdCB1cCwgYWxsb3dpbmcgYERRRl9ST09UX1NRVUFTSGAgdG8gYmUgc3VwcG9ydGVkIGZvciB0aGUgdjIgcXVvdGEgZm9ybWF0IGFzIHdlbGwuIFRoYXQncyBhIGdvb2QgbW92ZSwgbWFrZXMgdGhpbmdzIG1vcmUgY29uc2lzdGVudC4gVGhlIGB2Ml9yZWFkX2ZpbGVfaW5mb2AgYW5kIGB2Ml93cml0ZV9maWxlX2luZm9gIGZ1bmN0aW9ucyBpbiBgcXVvdGFfdjIuY2AgYXJlIHdoZXJlIHRoYXQgc3VwcG9ydCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC5cblxuVGhlIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaGAgaXMgYSBuaWNlIHRvdWNoLCB0b28uIEluc3RlYWQgb2YgdGhlIHYxIHNwZWNpZmljIHdvcmRpbmcgYWJvdXQgXCJSb290IHNxdWFzaCBlbmFibGVkXCIsIGl0IG5vdyBzYXlzIFwiRW5mb3JjZSBsaW1pdHMgYWxzbyBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMsXCIgd2hpY2ggaXMgYSBmYXIgbW9yZSBnZW5lcmFsIGFuZCBhY2N1cmF0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGtleSBmdW5jdGlvbnMgbGlrZSBgaWdub3JlX2hhcmRsaW1pdGAsIGBkcXVvdF9zZXRfZHFpbmZvYCwgYHYyX3JlYWRfZmlsZV9pbmZvYCwgYW5kIGB2Ml93cml0ZV9maWxlX2luZm9gLiBTbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIGRpZyBkZWVwZXIuXG5cblRpbWUgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIHRoaXMgc3R1ZmYuIEkgYmV0IGBmcy9xdW90YS9LY29uZmlnYCB3aWxsIGhhdmUgdGhlIGtleXMuIFByb2JhYmx5IGBDT05GSUdfUVVPVEFgIGFuZCBgQ09ORklHX1FVT1RBX1YyYC4gSSdsbCB2ZXJpZnkgdGhlc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0NTo0MS4zODEwNzU4NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA4ODgwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFVT1RBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvS2NvbmZpZy01LVxcbmZzL3F1b3RhL0tjb25maWc6Njpjb25maWcgUVVPVEFcXG5mcy9xdW90YS9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUXVvdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctMTktXFxuZnMvcXVvdGEvS2NvbmZpZzoyMDpjb25maWcgUVVPVEFfTkVUTElOS19JTlRFUkZBQ0VcXG5mcy9xdW90YS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlJlcG9ydCBxdW90YSBtZXNzYWdlcyB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlXFxcIlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZz0yOD1jb25maWcgUFJJTlRfUVVPVEFfV0FSTklOR1xcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy0zNy1cXG5mcy9xdW90YS9LY29uZmlnOjM4OmNvbmZpZyBRVU9UQV9ERUJVR1xcbmZzL3F1b3RhL0tjb25maWctMzktXFx0Ym9vbCBcXFwiQWRkaXRpb25hbCBxdW90YSBzYW5pdHkgY2hlY2tzXFxcIlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy00Ni0jIEdlbmVyaWMgc3VwcG9ydCBmb3IgdHJlZSBzdHJ1Y3R1cmVkIHF1b3RhIGZpbGVzLiBTZWxlY3RlZCB3aGVuIG5lZWRlZC5cXG5mcy9xdW90YS9LY29uZmlnOjQ3OmNvbmZpZyBRVU9UQV9UUkVFXFxuZnMvcXVvdGEvS2NvbmZpZy00OC1cXHQgdHJpc3RhdGVcXG4tLVxcbmZzL3F1b3RhL0tjb25maWc9NTg9Y29uZmlnIFFGTVRfVjJcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctNjctXFxuZnMvcXVvdGEvS2NvbmZpZzo2ODpjb25maWcgUVVPVEFDVExcXG5mcy9xdW90YS9LY29uZmlnLTY5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6NDEuNDcxOTY5NjAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNjEyODc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyBRRk1UX1YyKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIG9iamVjdGl2ZSBpcyBsaWtlbHkgdG8gZXZhbHVhdGUgc29tZSBuZXcgY29kZSwgbWF5YmUgYW4gaW1wbGVtZW50YXRpb24sIG9yIHNvbWUgcGllY2Ugb2YgdGVjaG5vbG9neSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBwcm90b2NvbCBgUUZNVF9WMmAuIEkgd2FudCB0byBzdGFydCBieSBtYWtpbmcgc3VyZSBJJ20gdXNpbmcgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uLCBzbyBJIHdpbGwgc3RhcnQgYnkgZG91YmxlIGNoZWNraW5nIGl0LiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBRRk1UX1YyYC4gSG9wZWZ1bGx5LCBpdCdzIGEga25vd24gcXVhbnRpdHkuIEl0IG1heSBiZSBoZWxwZnVsIHRvIHJlY2FsbCBpdHMgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBrbm93IHRoZSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBiZW5lZml0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQ1OjQ0LjQ5ODEwMTcwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg3MjI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUUZNVF9WMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3F1b3RhL0tjb25maWc9NTA9Y29uZmlnIFFGTVRfVjFcXG4tLVxcbmZzL3F1b3RhL0tjb25maWctNTctXFxuZnMvcXVvdGEvS2NvbmZpZzo1ODpjb25maWcgUUZNVF9WMlxcbmZzL3F1b3RhL0tjb25maWctNTktXFx0dHJpc3RhdGUgXFxcIlF1b3RhIGZvcm1hdCB2ZnN2MCBhbmQgdmZzdjEgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6NDQuNTc1OTg1OTQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzMDMyMTAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipRdW90YSBJbXBsZW1lbnRhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIHF1b3RhIGltcGxlbWVudGF0aW9uIHNvcnRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSdtIGdvaW5nIHRvIG5lZWQgdG8gd29yayB3aXRoIGBRVU9UQWAgYW5kIGBRRk1UX1YyYCwgb2J2aW91c2x5LiBBbmQgc2luY2UgSSdtIGRlYWxpbmcgd2l0aCBzZXR0aW5nIHF1b3RhIGluZm9ybWF0aW9uLCBgUVVPVEFDVExgIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gYmUgZXNzZW50aWFsLlxuXG5UaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSSdsbCBzdGFydCB3aXRoIGBmcy9xdW90YS9kcXVvdC5jYCBhbmQgYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIGZpbmQgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFuZCBwb3RlbnRpYWxseSBtb2RpZnkuXG5cbkxldCdzIHNlZeKApiBsb29rcyBsaWtlIGBpZ25vcmVfaGFyZGxpbWl0YCBpcyBzdGF0aWMsIHNvIHByb2JhYmx5IG5vdCBkaXJlY3RseSByZWxldmFudCB0byBteSB0YXNrLiBBaCwgaGVyZSdzIHNvbWV0aGluZyBwcm9taXNpbmc6IGBkcXVvdF9zZXRfZHFpbmZvYCBpcyBleHBvcnRlZCBvciB1c2VkIGJ5IHF1b3RhY3RsLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBvbmUgbW9yZSwgYXMgaXQgc2VlbXMgcmVsZXZhbnQgdG8gc2V0dGluZyBxdW90YSBpbmZvcm1hdGlvbi4gQWxzbywgSSBzZWUgYHYyX3JlYWRfZmlsZV9pbmZvYCBhbmQgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgYXJlIHN0YXRpYyBidXQgY2FsbGVkIHRocm91Z2ggb3BzLCBzbyB0aGV5IGFyZSBwcm9iYWJseSByZWxhdGVkLiBJIHdpbGwga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDU6NTAuMDA2MzA5NTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDk3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRxdW90X3NldF9kcWluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcXVvdGEvZHF1b3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9xdW90YS9kcXVvdC5jPTI4ODk9RVhQT1JUX1NZTUJPTChkcXVvdF9nZXRfc3RhdGUpO1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0yODkxLS8qIEdlbmVyaWMgcm91dGluZSBmb3Igc2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBmaWxlIGluZm9ybWF0aW9uICovXFxuZnMvcXVvdGEvZHF1b3QuYzoyODkyOmludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgcWNfaW5mbyAqaWkpXFxuZnMvcXVvdGEvZHF1b3QuYy0yODkzLXtcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMjkxNy19XFxuZnMvcXVvdGEvZHF1b3QuYzoyOTE4OkVYUE9SVF9TWU1CT0woZHF1b3Rfc2V0X2RxaW5mbyk7XFxuZnMvcXVvdGEvZHF1b3QuYy0yOTE5LVxcbmZzL3F1b3RhL2RxdW90LmM9MjkyMD1jb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGRxdW90X3F1b3RhY3RsX3N5c2ZpbGVfb3BzID0ge1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0yOTI0LVxcdC5nZXRfc3RhdGVcXHQ9IGRxdW90X2dldF9zdGF0ZSxcXG5mcy9xdW90YS9kcXVvdC5jOjI5MjU6XFx0LnNldF9pbmZvXFx0PSBkcXVvdF9zZXRfZHFpbmZvLFxcbmZzL3F1b3RhL2RxdW90LmMtMjkyNi1cXHQuZ2V0X2RxYmxrXFx0PSBkcXVvdF9nZXRfZHFibGssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQ1OjUwLjEwMjQxMzA0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjI3ODAxODc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBQb3RlbnRpYWwgRm9jdXMgUG9pbnRzIGZvciBDb2RlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGRpcmVjdCBteSBhdHRlbnRpb24uIGBkcXVvdF9zZXRfZHFpbmZvYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQ7IGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgcXVvdGEgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIHdlJ2QgZmluZCBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIHZ1bG5lcmFiaWxpdGllcy4gQnV0IHRoZW4gbXkgbWluZCBkcmlmdHMgdG8gYHYyX3JlYWRfZmlsZV9pbmZvYC4gVGhhdCdzIGFub3RoZXIgYXJlYSB3b3J0aCBpbnZlc3RpZ2F0aW5nLCBlc3BlY2lhbGx5IHdpdGggZmlsZSBzeXN0ZW0gbWV0YWRhdGEgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHdlaWdoIHRoZSB0cmFkZS1vZmZzOiBgZHF1b3Rfc2V0X2RxaW5mb2AgbWlnaHQgYmUgbW9yZSBmb2N1c2VkIG9uIHF1b3RhIGVuZm9yY2VtZW50LCB3aGlsZSBgdjJfcmVhZF9maWxlX2luZm9gIGNvdWxkIGV4cG9zZSBpc3N1ZXMgcmVsYXRlZCB0byBmaWxlIGFjY2VzcyBhbmQgaGFuZGxpbmcsIHBvc3NpYmx5IGluY2x1ZGluZyBkYXRhIGNvcnJ1cHRpb24gb3IgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoIG1hbGZvcm1lZCBpbm9kZXMuIEJvdGggaGF2ZSBoaWdoLXZhbHVlIHBvdGVudGlhbC4gSeKAmWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIG1vcmUgbGlrZWx5IHRvIHlpZWxkIGEgdmFsdWFibGUgZmluZGluZywgb3IgaWYgdGhlcmUgaXMgb3ZlcmxhcCBvZiBzb21lIGtpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1MTo0Mi4zODA0MzU3OTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzUyOTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Ml9yZWFkX2ZpbGVfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9xdW90YV92Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3F1b3RhL3F1b3RhX3YyLmM9NzU9c3RhdGljIGludCB2Ml9jaGVja19xdW90YV9maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy04OS0vKiBSZWFkIGluZm9ybWF0aW9uIGhlYWRlciBmcm9tIHF1b3RhIGZpbGUgKi9cXG5mcy9xdW90YS9xdW90YV92Mi5jOjkwOnN0YXRpYyBpbnQgdjJfcmVhZF9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy05MS17XFxuLS1cXG5mcy9xdW90YS9xdW90YV92Mi5jPTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgdjJfZm9ybWF0X29wcyA9IHtcXG5mcy9xdW90YS9xdW90YV92Mi5jLTQxNy1cXHQuY2hlY2tfcXVvdGFfZmlsZVxcdD0gdjJfY2hlY2tfcXVvdGFfZmlsZSxcXG5mcy9xdW90YS9xdW90YV92Mi5jOjQxODpcXHQucmVhZF9maWxlX2luZm9cXHRcXHQ9IHYyX3JlYWRfZmlsZV9pbmZvLFxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtNDE5LVxcdC53cml0ZV9maWxlX2luZm9cXHQ9IHYyX3dyaXRlX2ZpbGVfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTE6NDIuNTA3OTc0Nzk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODEwODY2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gUXVvdGEgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCBtaWdodCBiZSBwcm9ibGVtYXRpYyBiZWNhdXNlIHRoZXkncmUgc3RhdGljIGFuZCBjb3VsZCBiZSBpbmxpbmVkLCBtYWtpbmcgZGlyZWN0IGZ1enppbmcgYnkgbmFtZSB0cmlja3kuIEhvd2V2ZXIsIHRoZXkncmUgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGB2Ml9mb3JtYXRfb3BzYCwgc28gaXQgbG9va3MgbGlrZSB0aGV5IGFyZSBub3QgaW5saW5lZCBhZnRlciBhbGwuIFN0aWxsLCB0aGUgc3RhdGljIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBvdGhlciBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgbWUgbG9vayBmb3IgYWx0ZXJuYXRpdmVzLiBgZHF1b3Rfc2V0X2RxaW5mb2Agc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZS5cblxuTm93LCB0aGF0IGJyaW5ncyB1cCB0aGUgcHJvYmxlbSBvZiBmaW5kaW5nIG91dCB3aGljaCBvZiB0aGVzZSBhcmUgdGhlIGJlc3QgdGFyZ2V0cy4gSSdtIGNoZWNraW5nIHdoZXJlIGBkcXVvdF9zZXRfZHFpbmZvYCBnZXRzIGNhbGxlZC4gUmlnaHQsIGl0J3MgdXNlZCBpbiBib3RoIGBkcXVvdF9xdW90YWN0bF9zeXNmaWxlX29wc2AgYW5kIGBkcXVvdF9xdW90YWN0bF9vcHNgLiBLbm93aW5nIHRoaXMsIEkgcmVhbGl6ZSB0aGlzIG1lYW5zIHRoZSBgcXVvdGFjdGxgIG9yIGBxdW90YWN0bF9mZGAgc3lzY2FsbHMgYXJlIHRoZSBsaWtlbHkgZW50cnkgcG9pbnRzLiBTbywgYGRxdW90X3NldF9kcWluZm9gIGlzIGRlZmluaXRlbHkgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgaW5pdGlhbCBmdXp6aW5nLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlIG1peC4gSSdtIHdvbmRlcmluZyBhYm91dCBgcXVvdGFfc2V0aW5mb2AgaW4gYGZzL3F1b3RhL3F1b3RhLmNgLiBXb3J0aCBrZWVwaW5nIGluIG1pbmQgYXMgYSBzZWNvbmRhcnkgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDg0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjUxOjQ4LjM4OTA2NDgzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTU2NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1b3RhX3NldGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcXVvdGEvcXVvdGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9xdW90YS9xdW90YS5jPTExOT1zdGF0aWMgaW50IHF1b3RhX2dldGluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHZvaWQgX191c2VyICphZGRyKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGEuYy0xNDYtXFxuZnMvcXVvdGEvcXVvdGEuYzoxNDc6c3RhdGljIGludCBxdW90YV9zZXRpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCB2b2lkIF9fdXNlciAqYWRkcilcXG5mcy9xdW90YS9xdW90YS5jLTE0OC17XFxuLS1cXG5mcy9xdW90YS9xdW90YS5jPTc2Nz1zdGF0aWMgaW50IGRvX3F1b3RhY3RsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLCBxaWRfdCBpZCxcXG4tLVxcbmZzL3F1b3RhL3F1b3RhLmMtNzk1LVxcdGNhc2UgUV9TRVRJTkZPOlxcbmZzL3F1b3RhL3F1b3RhLmM6Nzk2OlxcdFxcdHJldHVybiBxdW90YV9zZXRpbmZvKHNiLCB0eXBlLCBhZGRyKTtcXG5mcy9xdW90YS9xdW90YS5jLTc5Ny1cXHRjYXNlIFFfR0VUUVVPVEE6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjUxOjQ4LjUwODAzMDcxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcwNTA2OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlF1b3RhIFN5c3RlbSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgcXVvdGFzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBgcXVvdGFfc2V0aW5mb2AgYW5kIGBkb19xdW90YWN0bGAgYXJlIGxpa2VseSBzZXR1cCBvciBoZWxwZXIgZnVuY3Rpb25zOyB0aGV5J3JlIHByb2JhYmx5IHN0YXRpYywgaW52b2x2ZWQgaW4gdGhlIGludGVybmFsIHdvcmtpbmdzIGJ1dCBub3QgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUga2V5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIHRoZSBhY3R1YWwgc3lzY2FsbHMg4oCTIGBzeXNfcXVvdGFjdGxgIG9yIGl0cyBmaWxlIGRlc2NyaXB0b3IgdmFyaWFudCwgYHN5c19xdW90YWN0bF9mZGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHVzZXItc3BhY2UgcHJvZ3JhbXMgd291bGQgYmUgY2FsbGluZy4gTm93IEkga25vdyB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGZzL3F1b3RhL3F1b3RhLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTE6NTMuMzc4NTQxOTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTYwMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLipxdW90YWN0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9xdW90YS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3F1b3RhL3F1b3RhLmM9ODY2PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnF1b3RhY3RsX2Jsb2NrKGNvbnN0IGNoYXIgX191c2VyICpzcGVjaWFsLCBpbnQgY21kKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGEuYy05MTYtICovXFxuZnMvcXVvdGEvcXVvdGEuYzo5MTc6U1lTQ0FMTF9ERUZJTkU0KHF1b3RhY3RsLCB1bnNpZ25lZCBpbnQsIGNtZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbCxcXG5mcy9xdW90YS9xdW90YS5jLTkxOC1cXHRcXHRxaWRfdCwgaWQsIHZvaWQgX191c2VyICosIGFkZHIpXFxuLS1cXG5mcy9xdW90YS9xdW90YS5jLTk3Mi1cXG5mcy9xdW90YS9xdW90YS5jOjk3MzpTWVNDQUxMX0RFRklORTQocXVvdGFjdGxfZmQsIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGludCwgY21kLFxcbmZzL3F1b3RhL3F1b3RhLmMtOTc0LVxcdFxcdHFpZF90LCBpZCwgdm9pZCBfX3VzZXIgKiwgYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTE6NTMuNDQ2NzA3ODI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDMyNjg3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipFbmFibGluZyBWMiBRdW90YSBTcXVhc2hpbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGVuYWJsaW5nIGBEUUZfUk9PVF9TUVVBU0hgIGZvciB0aGUgdjIgcXVvdGEgZm9ybWF0LiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSBhY3R1YWxseSwgSSdkIHNheS4gR29vZCB0aGF0IGl0J3MgdGFnZ2VkIGFzIGBXb3J0aEZ1enppbmdgLCB3ZSdsbCBuZWVkIHRvIHN0cmVzcyB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGBkcXVvdF9zZXRfZHFpbmZvYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLiBBbmQsIG9mIGNvdXJzZSwgd2UgbmVlZCB0byBoYXZlIGBRVU9UQWAgYW5kIGBRRk1UX1YyYCBlbmFibGVkIHRvIGFjdHVhbGx5IHVzZSB0aGlzIG5ldyBmZWF0dXJlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBRVU9UQUNUTGAuLi4gSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB0aGF0IGBRVU9UQUNUTGAgaXMgYWxzbyByZXF1aXJlZC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgaW4gYGZzL3F1b3RhL0tjb25maWdgIHRvIGJlIHN1cmUuIEl0IHdvdWxkIGJlIGEgc2lsbHkgb3ZlcnNpZ2h0IHRvIG1pc3MgdGhhdCBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njk2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTE6NTcuNzg5OTc5MzEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2NDE5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFVT1RBQ1RMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvS2NvbmZpZz01OD1jb25maWcgUUZNVF9WMlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy02Ny1cXG5mcy9xdW90YS9LY29uZmlnOjY4OmNvbmZpZyBRVU9UQUNUTFxcbmZzL3F1b3RhL0tjb25maWctNjktXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1MTo1Ny45MDE2MjYxNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMzg0MTQ0NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEJvb2xlYW4gRW5pZ21hOiBgUVVPVEFDVExgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyB2YXJpYWJsZSwgYFFVT1RBQ1RMYC4gSXQncyBhIEJvb2xlYW4sIG1lYW5pbmcgaXQncyBlaXRoZXIgdHJ1ZSBvciBmYWxzZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCB0aGVyZSdzIG5vIGFzc29jaWF0ZWQgcHJvbXB0LCBtZWFuaW5nIGl0J3Mgbm90IGRpcmVjdGx5IGRyaXZlbiBieSB1c2VyIGlucHV0IG9yIHNvbWUgZGlyZWN0IGV4dGVybmFsIHJlcXVlc3QuIFNvbWV0aGluZyAqZWxzZSogaGFzIHRvIGJlIHNldHRpbmcgaXRzIHZhbHVlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvc3NpYmlsaXRpZXMuIFdoYXQgaXMgdGhlIGFyY2hpdGVjdHVyZT8gV2hhdCBhcmUgdGhlIG90aGVyIG1vZHVsZXMgb3IgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNpbmcgaXQ/IElzIHRoaXMgcGFydCBvZiBhbiBpbnRlcm5hbCBjb250cm9sIGxvb3A/IE9yIGlzIGl0IGEgbW9yZSBwYXNzaXZlIHN0YXRlIGluZGljYXRvciwgdXBkYXRlZCBieSBvdGhlciwgbW9yZSBhY3RpdmUgcHJvY2Vzc2VzPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGxpdmVzIHRvIHVuZGVyc3RhbmQgaXRzIHNpZ25pZmljYW5jZS4gSXMgaXQgZ2xvYmFsPyBMb2NhbCB0byBhIGNlcnRhaW4gc2NvcGU/XG5cblRoaXMgbGFjayBvZiBhIHByb21wdCBpcyBhIGNsdWUsIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGZpZ3VyaW5nIG91dCB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgdmFyaWFibGUgdG8gZmlndXJlIG91dCAqd2hhdCogbWVjaGFuaXNtIGlzIGNob29zaW5nIGl0cyB0cnVlIG9yIGZhbHNlIHN0YXRlLCBhbmQgKndoeSouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1Mzo0OC4yODU3NzU3NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDE0MzM3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFFVT1RBQ1RMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9nZnMyL0tjb25maWc9Mj1jb25maWcgR0ZTMl9GU1xcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuZnMvZ2ZzMi9LY29uZmlnOjc6XFx0c2VsZWN0IFFVT1RBQ1RMXFxuZnMvZ2ZzMi9LY29uZmlnLTgtXFx0c2VsZWN0IEZTX0lPTUFQXFxuLS1cXG5mcy9xdW90YS9LY29uZmlnPTY9Y29uZmlnIFFVT1RBXFxuZnMvcXVvdGEvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlF1b3RhIHN1cHBvcnRcXFwiXFxuZnMvcXVvdGEvS2NvbmZpZzo4OlxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL3F1b3RhL0tjb25maWctOS1cXHRoZWxwXFxuLS1cXG5mcy94ZnMvS2NvbmZpZz03Nz1jb25maWcgWEZTX1FVT1RBXFxuLS1cXG5mcy94ZnMvS2NvbmZpZy03OS1cXHRkZXBlbmRzIG9uIFhGU19GU1xcbmZzL3hmcy9LY29uZmlnOjgwOlxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL3hmcy9LY29uZmlnLTgxLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTM6NTAuNzI3MjE5ODMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTI2NjYyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipRdW90YSBDb25maWd1cmF0aW9uIEluc2lnaHRzKipcblxuUmlnaHQsIHNvIGBRVU9UQWAgZGlyZWN0bHkgc2VsZWN0cyBgUVVPVEFDVExgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkOyBlbmFibGluZyBgUVVPVEFgIGVmZmVjdGl2ZWx5IGhhbmRsZXMgdGhlIG5lY2Vzc2FyeSBjb250cm9sLiBObyBuZWVkIHRvIGRpZyBmdXJ0aGVyIHRoZXJlLlxuXG5Ob3csIHRoZSB1c2Ugb2YgYFFGTVRfVjJgIGlzIGV4cGxpY2l0bHkgc3RhdGVkIGFzIGJlaW5nIG5lY2Vzc2FyeSBmb3IgdGhlIHYyIHF1b3RhIGZvcm1hdC4gVGhhdCdzIGdvb2QgdG8ga25vdywgY29uZmlybWluZyBteSBleGlzdGluZyB1bmRlcnN0YW5kaW5nLlxuXG5MZXQncyBxdWlja2x5IHNjYW4gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHJlbGF0ZWQgZW50cmllcy4gSG9sZCBvbiwgaXQgbG9va3MgbGlrZSBgUVVPVEFfVFJFRWAgaXMgKmFsc28qIHNlbGVjdGVkIGJ5IGBRRk1UX1YyYC4gT2theSwgY29uZmlybWluZyB0aGUgZXhwZWN0ZWQgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHYyIGZvcm1hdCBzdXBwb3J0IGFuZCB0aGUgcXVvdGEgdHJlZSBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgYSBsb2dpY2FsIGNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1Mzo1NS41MTk4ODgzMDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDg2OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBRVU9UQV9UUkVFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvS2NvbmZpZz01OD1jb25maWcgUUZNVF9WMlxcbi0tXFxuZnMvcXVvdGEvS2NvbmZpZy02MC1cXHRkZXBlbmRzIG9uIFFVT1RBXFxuZnMvcXVvdGEvS2NvbmZpZzo2MTpcXHRzZWxlY3QgUVVPVEFfVFJFRVxcbmZzL3F1b3RhL0tjb25maWctNjItXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1Mzo1NS42MTkzODEwNzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMTEwMDA3NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlF1b3RhIENvbmZpZ3VyYXRpb24gRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIHF1b3RhIGNvbmZpZ3VyYXRpb25zIGhlcmUg4oCTIHNwZWNpZmljYWxseSBgUVVPVEFgIGFuZCBgUUZNVF9WMmAsIHRob3NlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciB0aGlzIHRhc2suIGBkcXVvdF9zZXRfZHFpbmZvYCBsb29rcyBwcm9taXNpbmcuIEl0J3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QsIGFuZCBpdCdzIHNwZWNpZmljYWxseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBxdW90YSBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgbmVlZC5cblxuSSB3YXMgaW5pdGlhbGx5IGNvbnNpZGVyaW5nIGB2Ml9yZWFkX2ZpbGVfaW5mb2AgYW5kIGB2Ml93cml0ZV9maWxlX2luZm9gLCBhbmQgd2hpbGUgdGhleSdyZSBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggcHJldmVudHMgaW5saW5pbmcsIHRoZXkncmUgc3RhdGljLiBPaCB3YWl0LCBgdjJfcmVhZF9maWxlX2luZm9gIGlzIGRlZmluZWQgaW4gYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBUaGF0IGZpbGUgbWFrZXMgaXQgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCBiZWNhdXNlIGl0J3Mgbm90IGlubGluZWQuXG5cblNvLCBJJ2xsIGdvIHdpdGggYWRkaW5nIGBkcXVvdF9zZXRfZHFpbmZvYC4gVGhhdCBsb29rcyBsaWtlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGNob2ljZS5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHNjYW4gYWdhaW4gdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBlbHNlIG9mIGltbWVkaWF0ZSByZWxldmFuY2UuIEFoLCBgaWdub3JlX2hhcmRsaW1pdGAgc2VlbXMgc3RhdGljIGFuZCBsaWtlbHkgaW5saW5lZCwgc28gSSB3b24ndCBuZWVkIHRvIGNvbnNpZGVyIGl0IGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjU1OjM4LjcyOTM5MTc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI2ODM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZ25vcmVfaGFyZGxpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL2RxdW90LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvZHF1b3QuYz0xMjkyPXN0YXRpYyB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdF93YXJuICp3YXJuKVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzA2LVxcbmZzL3F1b3RhL2RxdW90LmM6MTMwNzpzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcXG5mcy9xdW90YS9kcXVvdC5jLTEzMDgte1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYz0xMzE1PXN0YXRpYyBpbnQgZHF1b3RfYWRkX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2RlcyxcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTMyOC1cXHQgICAgbmV3aW5vZGVzIFxcdTAwM2UgZHF1b3QtXFx1MDAzZWRxX2RxYi5kcWJfaWhhcmRsaW1pdCBcXHUwMDI2XFx1MDAyNlxcbmZzL3F1b3RhL2RxdW90LmM6MTMyOTogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcXG5mcy9xdW90YS9kcXVvdC5jLTEzMzAtXFx0XFx0cHJlcGFyZV93YXJuaW5nKHdhcm4sIGRxdW90LCBRVU9UQV9OTF9JSEFSRFdBUk4pO1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzM4LVxcdCAgICBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCkgXFx1MDAzZT0gZHF1b3QtXFx1MDAzZWRxX2RxYi5kcWJfaXRpbWUgXFx1MDAyNlxcdTAwMjZcXG5mcy9xdW90YS9kcXVvdC5jOjEzMzk6ICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7XFxuZnMvcXVvdGEvZHF1b3QuYy0xMzQwLVxcdFxcdHByZXBhcmVfd2FybmluZyh3YXJuLCBkcXVvdCwgUVVPVEFfTkxfSVNPRlRMT05HV0FSTik7XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTEzNjA9c3RhdGljIGludCBkcXVvdF9hZGRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSxcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTM3Ny1cXHQgICAgdHNwYWNlIFxcdTAwM2UgZHF1b3QtXFx1MDAzZWRxX2RxYi5kcWJfYmhhcmRsaW1pdCBcXHUwMDI2XFx1MDAyNlxcbmZzL3F1b3RhL2RxdW90LmM6MTM3ODogICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHtcXG5mcy9xdW90YS9kcXVvdC5jLTEzNzktXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRFFVT1RfU1BBQ0VfV0FSTilcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTM4OC1cXHQgICAga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpIFxcdTAwM2U9IGRxdW90LVxcdTAwM2VkcV9kcWIuZHFiX2J0aW1lIFxcdTAwMjZcXHUwMDI2XFxuZnMvcXVvdGEvZHF1b3QuYzoxMzg5OiAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkge1xcbmZzL3F1b3RhL2RxdW90LmMtMTM5MC1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBEUVVPVF9TUEFDRV9XQVJOKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NTozOC43ODU2Njg0MTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MzIwODMyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIENvZGUgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB3b25kZXJpbmcgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJIHNlZSBgaWdub3JlX2hhcmRsaW1pdGAgYW5kIGltbWVkaWF0ZWx5IG5vdGUgdGhhdCBpdCdzIHN0YXRpYyBhbmQgY2FsbGVkIGluIGEgYnVuY2ggb2YgZGlmZmVyZW50IHBsYWNlcy4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgdGhlIGNvbXBpbGVyICptaWdodCogaGF2ZSBpbmxpbmVkIGl0LCB3aGljaCB3b3VsZCBiZSBnb29kIGZvciBwZXJmb3JtYW5jZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGNvbmZpcm0gdGhhdCB3aXRoIGEgcXVpY2sgY2hlY2suIFRoZW4gdGhlcmUncyBgZHF1b3RfYWRkX2lub2Rlc2AgYW5kIGBkcXVvdF9hZGRfc3BhY2VgLiBUaGV5J3JlICphbHNvKiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQgc2luY2UgdGhleSBhcmUgcHJvYmFibHkgY2FsbGVkIG1vcmUgb2Z0ZW4sIG1heWJlIG5vdCBpbmxpbmVkLiBHaXZlbiB0aGF0IHRoZXJlIGlzIG1vcmUgd29yayB0byBiZSBkb25lLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRxdW90X2FkZF9pbm9kZXNgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTU6NDIuMzY4ODc5MDI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI5OTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcXVvdF9hZGRfaW5vZGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3F1b3RhL2RxdW90LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvZHF1b3QuYz0xMzA3PXN0YXRpYyBpbnQgaWdub3JlX2hhcmRsaW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE0LVxcbmZzL3F1b3RhL2RxdW90LmM6MTMxNTpzdGF0aWMgaW50IGRxdW90X2FkZF9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsXFxuZnMvcXVvdGEvZHF1b3QuYy0xMzE2LVxcdFxcdFxcdCAgICBzdHJ1Y3QgZHF1b3Rfd2FybiAqd2FybilcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MTc3Nj1pbnQgZHF1b3RfYWxsb2NfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTc5NC1cXHRcXHRcXHRjb250aW51ZTtcXG5mcy9xdW90YS9kcXVvdC5jOjE3OTU6XFx0XFx0cmV0ID0gZHF1b3RfYWRkX2lub2RlcyhkcXVvdCwgMSwgXFx1MDAyNndhcm5bY250XSk7XFxuZnMvcXVvdGEvZHF1b3QuYy0xNzk2LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmM9MjAwOD1pbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90bylcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMjA2Mi1cXHRcXHRcXHRcXHRcXHUwMDI2ZHF1b3Rfc3JjdSwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkcV9kYXRhX2xvY2spKTtcXG5mcy9xdW90YS9kcXVvdC5jOjIwNjM6XFx0XFx0cmV0ID0gZHF1b3RfYWRkX2lub2Rlcyh0cmFuc2Zlcl90b1tjbnRdLCBpbm9kZV91c2FnZSxcXG5mcy9xdW90YS9kcXVvdC5jLTIwNjQtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ3YXJuX3RvW2NudF0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NTo0Mi40MTcxODMyMjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4MzU2NzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRHF1b3QgQWxsb2NhdGlvbiBhbmQgVHJhbnNmZXI6IEtleSBFeHBvcnRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgZHF1b3RfYWxsb2NfaW5vZGVgIGFuZCBgX19kcXVvdF90cmFuc2ZlcmAgYXJlIGV4cG9zZWQuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGluZGljYXRlcyB0aGV5J3JlIGludGVuZGVkIGZvciB1c2UgKm91dHNpZGUqIHRoZSBjb3JlIHF1b3RhIGltcGxlbWVudGF0aW9uLiBgZHF1b3RfYWxsb2NfaW5vZGVgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGRlYWxzIHdpdGggYWxsb2NhdGluZyBkaXNrIHF1b3RhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGlub2RlLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBmdW5kYW1lbnRhbCBsaW5rIGJldHdlZW4gdGhlIGZpbGVzeXN0ZW0gb2JqZWN0IGFuZCBpdHMgcXVvdGEgdHJhY2tpbmcuIFNlZWluZyBpdCBleHBvcnRlZCBtZWFucyBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgdGhvc2UgaW52b2x2ZWQgaW4gZmlsZXN5c3RlbSBvcGVyYXRpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBxdW90YSwgb3IgcGVyaGFwcyBldmVuIGluIGN1c3RvbSBxdW90YSBzZXR1cHMuXG5cblRoZW4gdGhlcmUncyBgX19kcXVvdF90cmFuc2ZlcmAuIFRoZSBkb3VibGUgdW5kZXJzY29yZSBzdWdnZXN0cyBpdCdzIGEgXCJsb3ctbGV2ZWxcIiBmdW5jdGlvbiwgcHJvYmFibHkgbm90IHRoZSBwcmltYXJ5IGludGVyZmFjZS4gSXQncyBsaWtlbHkgdGhlIHdvcmtob3JzZSBmb3IgYWN0dWFsbHkgKm1vdmluZyogcXVvdGEgaW5mb3JtYXRpb24g4oCTIGRlYml0aW5nIG9uZSBkcXVvdCwgY3JlZGl0aW5nIGFub3RoZXIsIHByb2JhYmx5IGFjcm9zcyBkaWZmZXJlbnQgdXNlcnMgb3IgZ3JvdXBzLiBFeHBvcnRpbmcgdGhpcyBpcyBzaWduaWZpY2FudC4gSXQgdGVsbHMgbWUgdGhhdCBvdGhlciBtb2R1bGVzIG1pZ2h0IG5lZWQgdG8gaW1wbGVtZW50IHRoZWlyIG93biBzdHJhdGVnaWVzIGZvciBxdW90YSBtYW5hZ2VtZW50IG9yIGRhdGEgbW92ZW1lbnQsIHBlcmhhcHMgZm9yIHRoaW5ncyBsaWtlIG9ubGluZSByZXNpemluZywgZmlsZXN5c3RlbSBjb3B5IG9wZXJhdGlvbnMsIG9yIGV2ZW4gdGhpbmdzIGxpa2UgY29udGFpbmVyaXplZCBzdG9yYWdlIG1hbmFnZW1lbnQgd2hlcmUgeW91IG1pZ2h0IGJlIG1hbmlwdWxhdGluZyBxdW90YSBib3VuZGFyaWVzIGJldHdlZW4gY29udGFpbmVycy4gVGhlIGBfX2AgcHJlZml4IHdvdWxkIGluZGljYXRlIHRoYXQgY2FyZSBpcyBuZWVkZWQgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBhcyB0aGVyZSBhcmUgcHJvYmFibHkgY29uc3RyYWludHMgb24gaG93IHRoZSBzeXN0ZW0gbmVlZHMgdG8gYmUgdXNlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBjb25mbGljdHMuXG5cbkJhc2ljYWxseSwgc2VlaW5nIHRoZXNlIGZ1bmN0aW9ucyBleHBvcnRlZCB0ZWxscyBtZSB0aGF0IHRoZSBxdW90YSBzdWJzeXN0ZW0gaXMgZGVzaWduZWQgdG8gYmUgbW9yZSBmbGV4aWJsZSBhbmQgZXh0ZW5zaWJsZSB0aGFuIGEgbG90IG9mIHBlb3BsZSBtaWdodCB0aGluay4gVGhleSd2ZSBwcm92aWRlZCB0b29scyB0byBob29rIGludG8gdGhlc2UgY3JpdGljYWwgcG9pbnRzLiBUaGV5IGFyZSBnaXZpbmcgdXMgc29tZSBwb3dlcmZ1bCBjYXBhYmlsaXRpZXMgaWYgd2UgbmVlZCB0byBkbyBzb21lIG1vcmUgY29tcGxleCBxdW90YSBvcGVyYXRpb25zLiBJdCdzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIHdoZW4gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBpbnRlZ3JhdGUgcXVvdGEgbWFuYWdlbWVudCBpbnRvIGFkdmFuY2VkIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLCBjbG91ZC1iYXNlZCBzdG9yYWdlLCBvciBtb3JlIHNwZWNpYWxpemVkIHVzZSBjYXNlcy4gV2UndmUgZ290IHRoZSBhYmlsaXR5IHRvIG1vZGlmeSBxdW90YSBkYXRhIGFuZCBxdW90YXMgb24gYW4gaW5vZGUsIGJ1dCB0aGUgaW1wbGljYXRpb25zIG9mIGNhbGxpbmcgdGhlc2Ugb3V0c2lkZSB0aGUgc3RhbmRhcmQgcXVvdGEgcm91dGluZXMgd291bGQgbmVlZCB0byBiZSBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTU6NDcuNzAwNzU0NzU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAwOTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkcXVvdF9hbGxvY19pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9kcXVvdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3F1b3RhL2RxdW90LmM9MTc3Nj1pbnQgZHF1b3RfYWxsb2NfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTgxNy19XFxuZnMvcXVvdGEvZHF1b3QuYzoxODE4OkVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2NfaW5vZGUpO1xcbmZzL3F1b3RhL2RxdW90LmMtMTgxOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTU6NDcuNzQ5NzY5Njg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMTUwODk0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBRdW90YSBTdWJzeXN0ZW0gQ2hhbmdlKipcblxuT2theSwgc28gSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGRxdW90X3NldF9kcWluZm9gLCBgZHF1b3RfYWxsb2NfaW5vZGVgLCBhbmQgYF9fZHF1b3RfdHJhbnNmZXJgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgYXJlYXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgZm9yIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIG9mIGNvdXJzZS5cblxuTGV0IG1lIGJyZWFrIGRvd24gbXkgdW5kZXJzdGFuZGluZy4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHF1b3RhIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIGVuYWJsaW5nIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnIGZvciB2MiBxdW90YSBmb3JtYXRzLiBQcmV2aW91c2x5LCB0aGF0IGZsYWcgd2FzIHJlc3RyaWN0ZWQgdG8gdjEgZm9ybWF0cy4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtb2RpZmllcyBob3cgcmVzb3VyY2UgbGltaXRzIGFyZSBlbmZvcmNlZCwgZXNwZWNpYWxseSBmb3IgcHJvY2Vzc2VzIHdpdGggYENBUF9TWVNfUkVTT1VSQ0VgLlxuXG5TbywgdGhlIGZvY3VzIGlzIG9uIGhvdyBsaW1pdHMgYXJlIGhhbmRsZWQgYW5kIHRyYW5zbGF0ZWQgd2l0aGluIHRoZSBEcXVvdCBzeXN0ZW0sIHdpdGggdGhpcyBmbGFnLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZGlmZmVyZW50IHF1b3RhIGZvcm1hdHMsIGFuZCBob3cgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdnVsbmVyYWJpbGl0aWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHByaXZpbGVnZSBlc2NhbGF0aW9uIG9yIHJlc291cmNlIGV4aGF1c3Rpb24gd2l0aGluIHRoZSBxdW90YSBzeXN0ZW0uIFRoZSBgUVVPVEFgIGFuZCBgUUZNVF9WMmAgY29uZmlndXJhdGlvbnMgYXJlIGltcG9ydGFudCBoZXJlIHRvIHRlc3QgZGlmZmVyZW50IGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTkxLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NTo1NC44NjQ4NjE0MTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTMzMDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUVVPVEFcIixcbiAgICBcIlFGTVRfVjJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcXVvdF9zZXRfZHFpbmZvXCIsXG4gICAgXCJkcXVvdF9hbGxvY19pbm9kZVwiLFxuICAgIFwiX19kcXVvdF90cmFuc2ZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuYWJsZXMgdGhlIERRRl9ST09UX1NRVUFTSCBmbGFnIGZvciB2MiBxdW90YSBmb3JtYXRzLCByZW1vdmluZyBhIGNoZWNrIHRoYXQgcmVzdHJpY3RlZCBpdCB0byB2MSBmb3JtYXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHF1b3RhIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGxpbWl0cyBhcmUgZW5mb3JjZWQgZm9yIENBUF9TWVNfUkVTT1VSQ0UgcHJvY2Vzc2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlFVT1RBXCIsXG4gICAgXCJRRk1UX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHF1b3Rfc2V0X2RxaW5mb1wiLFxuICAgIFwiZHF1b3RfYWxsb2NfaW5vZGVcIixcbiAgICBcIl9fZHF1b3RfdHJhbnNmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIHRoZSBEUUZfUk9PVF9TUVVBU0ggZmxhZyBmb3IgdjIgcXVvdGEgZm9ybWF0cywgcmVtb3ZpbmcgYSBjaGVjayB0aGF0IHJlc3RyaWN0ZWQgaXQgdG8gdjEgZm9ybWF0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBxdW90YSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBsaW1pdHMgYXJlIGVuZm9yY2VkIGZvciBDQVBfU1lTX1JFU09VUkNFIHByb2Nlc3Nlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTU6NTQuOTUwMTk4NTM1WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDYzMjQ2NjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjU1OjU0Ljk1MDk2NTMwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NDYzMTY5MzczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnLCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIHdpdGggdjIgcXVvdGEgZm9ybWF0cy4gSXQgbW9kaWZpZXMgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgdG8gd3JpdGUgdGhpcyBmbGFnIHRvIGRpc2suIFRoZSBgc3RydWN0IHYyX2Rpc2tfZHFpbmZvYCB3cml0dGVuIHRvIGRpc2sgY29uc2lzdHMgb2YgNiBgX19sZTMyYCBmaWVsZHMsIGFsbCBvZiB3aGljaCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBxdW90YV93cml0ZWAgY2FsbC4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciBkaXNrLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NDZkNGRjOGU1NWQ1MTU5MjdhZTJmNmFjNTVhYjRjNmYxYmQ3NDE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6NDU6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuY1xuaW5kZXggOTg1MGRlMzk1NWQzMS4uZTQzMWU3MmRmZWE4MCAxMDA2NDRcbi0tLSBhL2ZzL3F1b3RhL2RxdW90LmNcbisrKyBiL2ZzL3F1b3RhL2RxdW90LmNcbkBAIC0xMzA5LDggKzEzMDksNyBAQCBzdGF0aWMgaW50IGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdClcbiBcdHN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gXHUwMDI2c2JfZHFvcHQoZHF1b3QtXHUwMDNlZHFfc2IpLVx1MDAzZWluZm9bZHF1b3QtXHUwMDNlZHFfaWQudHlwZV07XG4gXG4gXHRyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICAoaW5mby1cdTAwM2VkcWlfZm9ybWF0LVx1MDAzZXFmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQgfHxcbi1cdFx0IShpbmZvLVx1MDAzZWRxaV9mbGFncyBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKSk7XG4rXHQgICAgICAgIShpbmZvLVx1MDAzZWRxaV9mbGFncyBcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcbiB9XG4gXG4gc3RhdGljIGludCBkcXVvdF9hZGRfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzLFxuQEAgLTI5MDAsMTEgKzI4OTksNiBAQCBpbnQgZHF1b3Rfc2V0X2RxaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgc3RydWN0IHFjX2luZm8gKmlpKVxuIFx0aWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSlcbiBcdFx0cmV0dXJuIC1FU1JDSDtcbiBcdG1pID0gc2JfZHFvcHQoc2IpLVx1MDAzZWluZm8gKyB0eXBlO1xuLVx0aWYgKGlpLVx1MDAzZWlfZmllbGRtYXNrIFx1MDAyNiBRQ19GTEFHUykge1xuLVx0XHRpZiAoKGlpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFFDSV9ST09UX1NRVUFTSCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBtaS1cdTAwM2VkcWlfZm9ybWF0LVx1MDAzZXFmX2ZtdF9pZCAhPSBRRk1UX1ZGU19PTEQpKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFx0c3Bpbl9sb2NrKFx1MDAyNmRxX2RhdGFfbG9jayk7XG4gXHRpZiAoaWktXHUwMDNlaV9maWVsZG1hc2sgXHUwMDI2IFFDX1NQQ19USU1FUilcbiBcdFx0bWktXHUwMDNlZHFpX2JncmFjZSA9IGlpLVx1MDAzZWlfc3BjX3RpbWVsaW1pdDtcbmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92Mi5jIGIvZnMvcXVvdGEvcXVvdGFfdjIuY1xuaW5kZXggYTI0ZmFiNWY5ZjgwNC4uODE0ZGI2MTY4MWJjZCAxMDA2NDRcbi0tLSBhL2ZzL3F1b3RhL3F1b3RhX3YyLmNcbisrKyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmNcbkBAIC0xNDIsOCArMTQyLDcgQEAgc3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbiBcdH1cbiBcdGluZm8tXHUwMDNlZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpO1xuIFx0aW5mby1cdTAwM2VkcWlfaWdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2lncmFjZSk7XG4tXHQvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovXG4tXHRpbmZvLVx1MDAzZWRxaV9mbGFncyA9IDA7XG4rXHRpbmZvLVx1MDAzZWRxaV9mbGFncyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9mbGFncykgXHUwMDI2IERRRl9ST09UX1NRVUFTSDtcbiBcdHFpbmZvLVx1MDAzZWRxaV9zYiA9IHNiO1xuIFx0cWluZm8tXHUwMDNlZHFpX3R5cGUgPSB0eXBlO1xuIFx0cWluZm8tXHUwMDNlZHFpX2Jsb2NrcyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9ibG9ja3MpO1xuQEAgLTIwOSw4ICsyMDgsNyBAQCBzdGF0aWMgaW50IHYyX3dyaXRlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbiBcdGluZm8tXHUwMDNlZHFpX2ZsYWdzIFx1MDAyNj0gfkRRRl9JTkZPX0RJUlRZO1xuIFx0ZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tXHUwMDNlZHFpX2JncmFjZSk7XG4gXHRkaW5mby5kcWlfaWdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfaWdyYWNlKTtcbi1cdC8qIE5vIGZsYWdzIGN1cnJlbnRseSBzdXBwb3J0ZWQgKi9cbi1cdGRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKDApO1xuK1x0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoaW5mby1cdTAwM2VkcWlfZmxhZ3MgXHUwMDI2IERRRl9ST09UX1NRVUFTSCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZkcV9kYXRhX2xvY2spO1xuIFx0ZGluZm8uZHFpX2Jsb2NrcyA9IGNwdV90b19sZTMyKHFpbmZvLVx1MDAzZWRxaV9ibG9ja3MpO1xuIFx0ZGluZm8uZHFpX2ZyZWVfYmxrID0gY3B1X3RvX2xlMzIocWluZm8tXHUwMDNlZHFpX2ZyZWVfYmxrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXG5pbmRleCA1MjA5MDEwNWI4MjgyLi5hMzRmNDM1MTlhZjgwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9xdW90YS5oXG5AQCAtMTQ5LDcgKzE0OSw3IEBAIGVudW0ge1xuIFx0RFFGX1BSSVZBVEVcbiB9O1xuIFxuLS8qIFJvb3Qgc3F1YXNoIGVuYWJsZWQgKGZvciB2MSBxdW90YSBmb3JtYXQpICovXG4rLyogRW5mb3JjZSBsaW1pdHMgYWxzbyBmb3IgQ0FQX1NZU19SRVNPVVJDRSBwcm9jZXNzZXMgKi9cbiAjZGVmaW5lIERRRl9ST09UX1NRVUFTSFx0KDEgXHUwMDNjXHUwMDNjIERRRl9ST09UX1NRVUFTSF9CKVxuIC8qIFF1b3RhIHN0b3JlZCBpbiBhIHN5c3RlbSBmaWxlICovXG4gI2RlZmluZSBEUUZfU1lTX0ZJTEVcdCgxIFx1MDAzY1x1MDAzYyBEUUZfU1lTX0ZJTEVfQilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjU1OjU0Ljk1MDk2NjQ1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDU5NjU4ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUXVvdGEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgcXVvdGEgaGFuZGxpbmcgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGZpcnN0IG9ic2VydmF0aW9uIGlzIHRoYXQgaXQgc2VlbXMgZm9jdXNlZCBvbiB0aGUgdjIgcXVvdGEgZm9ybWF0LCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgdG8gYGZzL3F1b3RhL3F1b3RhX3YyLmNgLiBSZW1vdmluZyB0aGF0IGBRRk1UX1ZGU19PTERgIGNoZWNrIGluIGBpZ25vcmVfaGFyZGxpbWl0YCBhbmQgYGRxdW90X3NldF9kcWluZm9gIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlbiB0aGVyZSBhcmUgdGhlIGRpcmVjdCBtb2RpZmljYXRpb25zIG9mIGB2Ml9yZWFkX2ZpbGVfaW5mb2AgYW5kIGB2Ml93cml0ZV9maWxlX2luZm9gLCB3aGVyZSBpdCdzIG5vdyBkZWFsaW5nIHdpdGggYERRRl9ST09UX1NRVUFTSGAgaW5zdGVhZCBvZiBicnVzaGluZyBvZmYgZmxhZ3MuIEVzc2VudGlhbGx5LCBpdCBhcHBlYXJzIHdlJ3JlIG5vdyBlbmFibGluZyBhbmQgdXRpbGl6aW5nIGBEUUZfUk9PVF9TUVVBU0hgIGZvciB0aGUgdjIgZm9ybWF0LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgdGhvdWdoLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2l0aCB0aGlzIGRpcmVjdCByZWFkaW5nIGFuZCB3cml0aW5nIG9mIGBkaW5mby5kcWlfZmxhZ3NgIGluIHRoZSBgdjJfcmVhZF9maWxlX2luZm9gIGFuZCBgdjJfd3JpdGVfZmlsZV9pbmZvYCBmdW5jdGlvbnMsIHJlc3BlY3RpdmVseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBkaW5mb2AsIHdoaWNoIGlzIGEgYHN0cnVjdCB2Ml9kaXNrX2RxaW5mb2AsIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24uIFRoZSBpbnRlZ3JpdHkgb2YgdGhlIGluZm9ybWF0aW9uIGRlcGVuZHMgb24gdGhlIHN0cnVjdHVyZSBiZWluZyBwcm9wZXJseSBwb3B1bGF0ZWQuIExldCdzIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgdjJfZGlza19kcWluZm9gIGFuZCB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGRpbmZvYCB3aXRoaW4gdGhlIGB2Ml93cml0ZV9maWxlX2luZm9gIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbHVya2luZyB2dWxuZXJhYmlsaXRpZXMgb3IgZGF0YSBjb3JydXB0aW9uIHJpc2tzIGR1ZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLiBUaGlzIG5lZWRzIGEgdmVyeSBjYXJlZnVsIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NjowMS4wMTA2MzU5MThaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTU5NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB2Ml9kaXNrX2RxaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9xdW90YS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcXVvdGEvcXVvdGFfdjIuYz05MD1zdGF0aWMgaW50IHYyX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtOTEte1xcbmZzL3F1b3RhL3F1b3RhX3YyLmM6OTI6XFx0c3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtOTMtXFx0c3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgZHFoZWFkO1xcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0xMTQtXFx0c2l6ZSA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVxcdTAwMjZkaW5mbyxcXG5mcy9xdW90YS9xdW90YV92Mi5jOjExNTpcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYzoxMTY6XFx0aWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbykpIHtcXG5mcy9xdW90YS9xdW90YV92Mi5jLTExNy1cXHRcXHRxdW90YV9lcnJvcihzYiwgXFxcIkNhbid0IHJlYWQgaW5mbyBzdHJ1Y3R1cmVcXFwiKTtcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9MTk2PXN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMTk3LXtcXG5mcy9xdW90YS9xdW90YV92Mi5jOjE5ODpcXHRzdHJ1Y3QgdjJfZGlza19kcWluZm8gZGluZm87XFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0xOTktXFx0c3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpO1xcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTYtXFx0c2l6ZSA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV93cml0ZShzYiwgdHlwZSwgKGNoYXIgKilcXHUwMDI2ZGluZm8sXFxuZnMvcXVvdGEvcXVvdGFfdjIuYzoyMTc6XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWluZm8pLCBWMl9EUUlORk9PRkYpO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMjE4LVxcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShtZW1hbGxvYyk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMTktXFx0dXBfd3JpdGUoXFx1MDAyNmRxb3B0LVxcdTAwM2VkcWlvX3NlbSk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYzoyMjA6XFx0aWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbykpIHtcXG5mcy9xdW90YS9xdW90YV92Mi5jLTIyMS1cXHRcXHRxdW90YV9lcnJvcihzYiwgXFxcIkNhbid0IHdyaXRlIGluZm8gc3RydWN0dXJlXFxcIik7XFxuLS1cXG5mcy9xdW90YS9xdW90YWlvX3YyLmg9NTA9c3RydWN0IHYycjFfZGlza19kcWJsayB7XFxuLS1cXG5mcy9xdW90YS9xdW90YWlvX3YyLmgtNjMtLyogSGVhZGVyIHdpdGggdHlwZSBhbmQgdmVyc2lvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqL1xcbmZzL3F1b3RhL3F1b3RhaW9fdjIuaDo2NDpzdHJ1Y3QgdjJfZGlza19kcWluZm8ge1xcbmZzL3F1b3RhL3F1b3RhaW9fdjIuaC02NS1cXHRfX2xlMzIgZHFpX2JncmFjZTtcXHQvKiBUaW1lIGJlZm9yZSBibG9jayBzb2Z0IGxpbWl0IGJlY29tZXMgaGFyZCBsaW1pdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1NjowMS4wNTYyMDM5MDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2MDE3NTAxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFF1b3RhIHYyIEZpbGUgSW5mbyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZmlsZSBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgcXVvdGEgdjIgc3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiB3cml0aW5nLiBTbywgbXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIGB2Ml93cml0ZV9maWxlX2luZm9gIGluIGBmcy9xdW90YS9xdW90YV92Mi5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcXVvdGEgZGF0YSByZWxhdGVkIHRvIGZpbGVzIHRvIHJlc2lkZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoaXMgcHJvY2VzcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UsIGFuZCB3aGF0IHByb3RlY3Rpb25zIGFyZSBpbiBwbGFjZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGxpa2VseSBiZSB0aGUgY3JpdGljYWwganVuY3R1cmUgd2hlcmUgY2hhbmdlcyB0byBmaWxlIHNpemVzIGFuZCBpbm9kZSBjb3VudHMgZ2V0IHJlZmxlY3RlZCBpbiB0aGUgcXVvdGEgYWNjb3VudGluZy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgYXQgdGhhdCBsZXZlbC4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgZGV0YWlscyBhYm91dCBkYXRhIHN0cnVjdHVyZSB1cGRhdGVzLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCBwZXJoYXBzIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gcXVvdGEgZW5mb3JjZW1lbnQuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBjb2RlIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTY6NTQuNjU3OTU2NTA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3F1b3RhL3F1b3RhX3YyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk2LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk2OlxcdHN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbiAxOTc6XFx0e1xcbiAxOTg6XFx0XFx0c3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvO1xcbiAxOTk6XFx0XFx0c3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpO1xcbiAyMDA6XFx0XFx0c3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBcXHUwMDI2ZHFvcHQtXFx1MDAzZWluZm9bdHlwZV07XFxuIDIwMTpcXHRcXHRzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqcWluZm8gPSBpbmZvLVxcdTAwM2VkcWlfcHJpdjtcXG4gMjAyOlxcdFxcdHNzaXplX3Qgc2l6ZTtcXG4gMjAzOlxcdFxcdHVuc2lnbmVkIGludCBtZW1hbGxvYztcXG4gMjA0OlxcdFxcbiAyMDU6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG4gMjA2OlxcdFxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuIDIwNzpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmRxX2RhdGFfbG9jayk7XFxuIDIwODpcXHRcXHRpbmZvLVxcdTAwM2VkcWlfZmxhZ3MgXFx1MDAyNj0gfkRRRl9JTkZPX0RJUlRZO1xcbiAyMDk6XFx0XFx0ZGluZm8uZHFpX2JncmFjZSA9IGNwdV90b19sZTMyKGluZm8tXFx1MDAzZWRxaV9iZ3JhY2UpO1xcbiAyMTA6XFx0XFx0ZGluZm8uZHFpX2lncmFjZSA9IGNwdV90b19sZTMyKGluZm8tXFx1MDAzZWRxaV9pZ3JhY2UpO1xcbiAyMTE6XFx0XFx0ZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoaW5mby1cXHUwMDNlZHFpX2ZsYWdzIFxcdTAwMjYgRFFGX1JPT1RfU1FVQVNIKTtcXG4gMjEyOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkcV9kYXRhX2xvY2spO1xcbiAyMTM6XFx0XFx0ZGluZm8uZHFpX2Jsb2NrcyA9IGNwdV90b19sZTMyKHFpbmZvLVxcdTAwM2VkcWlfYmxvY2tzKTtcXG4gMjE0OlxcdFxcdGRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLVxcdTAwM2VkcWlfZnJlZV9ibGspO1xcbiAyMTU6XFx0XFx0ZGluZm8uZHFpX2ZyZWVfZW50cnkgPSBjcHVfdG9fbGUzMihxaW5mby1cXHUwMDNlZHFpX2ZyZWVfZW50cnkpO1xcbiAyMTY6XFx0XFx0c2l6ZSA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV93cml0ZShzYiwgdHlwZSwgKGNoYXIgKilcXHUwMDI2ZGluZm8sXFxuIDIxNzpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7XFxuIDIxODpcXHRcXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobWVtYWxsb2MpO1xcbiAyMTk6XFx0XFx0dXBfd3JpdGUoXFx1MDAyNmRxb3B0LVxcdTAwM2VkcWlvX3NlbSk7XFxuIDIyMDpcXHRcXHRpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFpbmZvKSkge1xcbiAyMjE6XFx0XFx0XFx0cXVvdGFfZXJyb3Ioc2IsIFxcXCJDYW4ndCB3cml0ZSBpbmZvIHN0cnVjdHVyZVxcXCIpO1xcbiAyMjI6XFx0XFx0XFx0cmV0dXJuIHNpemUgXFx1MDAzYyAwID8gc2l6ZSA6IC1FSU87XFxuIDIyMzpcXHRcXHR9XFxuIDIyNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjI1OlxcdH1cXG4gMjI2OlxcdFxcbiAyMjc6XFx0c3RhdGljIHZvaWQgdjJyMF9kaXNrMm1lbWRxYihzdHJ1Y3QgZHF1b3QgKmRxdW90LCB2b2lkICpkcClcXG4gMjI4OlxcdHtcXG4gMjI5OlxcdFxcdHN0cnVjdCB2MnIwX2Rpc2tfZHFibGsgKmQgPSBkcCwgZW1wdHk7XFxuIDIzMDpcXHRcXHRzdHJ1Y3QgbWVtX2RxYmxrICptID0gXFx1MDAyNmRxdW90LVxcdTAwM2VkcV9kcWI7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdG0tXFx1MDAzZWRxYl9paGFyZGxpbWl0ID0gbGUzMl90b19jcHUoZC1cXHUwMDNlZHFiX2loYXJkbGltaXQpO1xcbiAyMzM6XFx0XFx0bS1cXHUwMDNlZHFiX2lzb2Z0bGltaXQgPSBsZTMyX3RvX2NwdShkLVxcdTAwM2VkcWJfaXNvZnRsaW1pdCk7XFxuIDIzNDpcXHRcXHRtLVxcdTAwM2VkcWJfY3VyaW5vZGVzID0gbGUzMl90b19jcHUoZC1cXHUwMDNlZHFiX2N1cmlub2Rlcyk7XFxuIDIzNTpcXHRcXHRtLVxcdTAwM2VkcWJfaXRpbWUgPSBsZTY0X3RvX2NwdShkLVxcdTAwM2VkcWJfaXRpbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo1Njo1NC42NTgwMzg4NDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNzI2MTYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgdjIgRGlzayBRdW90YSBJbmZvIFN0cnVjdHVyZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB2Ml9kaXNrX2RxaW5mb2Agc3RydWN0dXJlLiBMZXQncyBoZWFkIG92ZXIgdG8gYGZzL3F1b3RhL3F1b3RhaW9fdjIuaGAg4oCTIHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLiBHb3R0YSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbGF5b3V0IGFuZCBmaWVsZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGlzayBxdW90YSBpbmZvcm1hdGlvbiBpcyBiZWluZyBzdG9yZWQgYXQgdGhpcyB2ZXJzaW9uLiBXaGF0IGRhdGEgbWVtYmVycyBhcmUgaW5jbHVkZWQ/IFdoYXQncyB0aGUgc2l6ZSBhbmQgYWxpZ25tZW50PyBBbnkgcGFja2VkIHN0cnVjdHVyZXMgdG8gYmUgYXdhcmUgb2Y/IEkgd2FudCB0byBzZWUgaWYgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHNlZW1zIGVmZmljaWVudC4gTWF5YmUgSSBuZWVkIHRvIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGJ5dGUgb3JkZXIgb3IgcGxhdGZvcm0tc3BlY2lmaWMgaW50ZXJwcmV0YXRpb25zIHRoYXQgbWlnaHQgdHJpcCBtZSB1cD8gR290IHRvIG1ha2Ugc3VyZSB0byBjb25zaWRlciBhbnkgcG9zc2libGUgYWxpZ25tZW50IG9yIHBhZGRpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIG9yIGNvbXBhdGliaWxpdHkgYWNyb3NzIGFyY2hpdGVjdHVyZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTY6NTguMzY1MzAzNDMyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3F1b3RhL3F1b3RhaW9fdjIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NDpcXHRzdHJ1Y3QgdjJfZGlza19kcWluZm8ge1xcbiAgNjU6XFx0XFx0X19sZTMyIGRxaV9iZ3JhY2U7XFx0LyogVGltZSBiZWZvcmUgYmxvY2sgc29mdCBsaW1pdCBiZWNvbWVzIGhhcmQgbGltaXQgKi9cXG4gIDY2OlxcdFxcdF9fbGUzMiBkcWlfaWdyYWNlO1xcdC8qIFRpbWUgYmVmb3JlIGlub2RlIHNvZnQgbGltaXQgYmVjb21lcyBoYXJkIGxpbWl0ICovXFxuICA2NzpcXHRcXHRfX2xlMzIgZHFpX2ZsYWdzO1xcdC8qIEZsYWdzIGZvciBxdW90YWZpbGUgKERRRl8qKSAqL1xcbiAgNjg6XFx0XFx0X19sZTMyIGRxaV9ibG9ja3M7XFx0LyogTnVtYmVyIG9mIGJsb2NrcyBpbiBmaWxlICovXFxuICA2OTpcXHRcXHRfX2xlMzIgZHFpX2ZyZWVfYmxrO1xcdC8qIE51bWJlciBvZiBmaXJzdCBmcmVlIGJsb2NrIGluIHRoZSBsaXN0ICovXFxuICA3MDpcXHRcXHRfX2xlMzIgZHFpX2ZyZWVfZW50cnk7XFx0LyogTnVtYmVyIG9mIGJsb2NrIHdpdGggYXQgbGVhc3Qgb25lIGZyZWUgZW50cnkgKi9cXG4gIDcxOlxcdH07XFxuICA3MjpcXHRcXG4gIDczOlxcdCNkZWZpbmUgVjJfRFFJTkZPT0ZGXFx0c2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKVxcdC8qIE9mZnNldCBvZiBpbmZvIGhlYWRlciBpbiBmaWxlICovXFxuICA3NDpcXHQjZGVmaW5lIFYyX0RRQkxLU0laRV9CSVRTIDEwXFx0XFx0XFx0XFx0LyogU2l6ZSBvZiBsZWFmIGJsb2NrIGluIHRyZWUgKi9cXG4gIDc1OlxcdFxcbiAgNzY6XFx0I2VuZGlmIC8qIF9MSU5VWF9RVU9UQUlPX1YyX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NTY6NTguMzY1MzY4NDYzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjE3MjY1OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUXVvdGEgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB0byB0aGUgcXVvdGEgY29kZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgdjIgcXVvdGEgZm9ybWF0LiBNeSBmaXJzdCBmb2N1cyBpcyBvbiB0aGUgYHYyX2Rpc2tfZHFpbmZvYCBzdHJ1Y3QsIHdoaWNoIGNvbnRhaW5zIGNydWNpYWwgcXVvdGEgaW5mb3JtYXRpb24uICBJIHF1aWNrbHkgc2VlIHRoYXQgaXQncyBjb21wb3NlZCBvZiBzaXggYF9fbGUzMmAgZmllbGRzOiBgZHFpX2JncmFjZWAsIGBkcWlfaWdyYWNlYCwgYGRxaV9mbGFnc2AsIGBkcWlfYmxvY2tzYCwgYGRxaV9mcmVlX2Jsa2AsIGFuZCBgZHFpX2ZyZWVfZW50cnlgLiAgVGhlIHRvdGFsIHNpemUgaXMgMjQgYnl0ZXMsIGFuZCBhIHF1aWNrIG1lbnRhbCBjaGVjayBjb25maXJtcyB0aGVyZSdzIG5vIHBhZGRpbmcgYmV0d2VlbiB0aG9zZSA0LWJ5dGUgZmllbGRzLiBUaGUgaW5pdGlhbGl6YXRpb24gaXMgZXhwbGljaXQgaW4gYHYyX3dyaXRlX2ZpbGVfaW5mb2AuIEFsbCBmaWVsZHMgYXJlIGJlaW5nIGNvcnJlY3RseSBwb3B1bGF0ZWQgYmVmb3JlIHdyaXRpbmcgdG8gZGlzaywgYW5kIHRoYXQncyBnb29kLlxuXG5UaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYGRxdW90X3NldF9kcWluZm9gLiBUaGUgcmVtb3ZlZCBjaGVjayBpcyBhbGxvd2luZyB0aGUgYFFDSV9ST09UX1NRVUFTSGAgZmxhZyB0byBiZSBzZXQsIGV2ZW4gZm9yIHYyIGZvcm1hdHMuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBIb3dldmVyLCB0aGUgZXhpc3RpbmcgY29kZSBwYXRocyBpbiBgcXVvdGFjdGxgIHN5c2NhbGxzIHNlZW0gdG8gY29ycmVjdGx5IGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUuIEl0J3MganVzdCByZW1vdmluZyBhIGNvbnN0cmFpbnQuIEdpdmVuIHRoYXQgYWxsIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIHRoaXMgcmVtb3ZhbCBzZWVtcyBzYWZlIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXG5cbk5leHQsIEkgcmV2aWV3IHRoZSBgaWdub3JlX2hhcmRsaW1pdGAgZnVuY3Rpb24uIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGNvbmRpdGlvbi4gSXQgbm93IG5vIGxvbmdlciBjaGVja3MgYHFmX2ZtdF9pZGAuIFRoaXMgYXBwZWFycyB0byBzaW1wbHkgYnJvYWRlbiB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGxvZ2ljLCByZW1vdmluZyBhIHJlc3RyaWN0aW9uLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHNlZW1zIHVuYWx0ZXJlZCwgYW5kIGFnYWluLCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5JJ20gY29uZmlkZW50IHRoYXQgdGhlIGNvZGUgaXMgc2FmZSBhbmQgdGhhdCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIFRoZSBwYXRjaCBzaW1wbHkgZW5hYmxlcyBhIHByZXZpb3VzbHkgcmVzdHJpY3RlZCBmbGFnIGZvciB0aGUgdjIgcXVvdGEgZm9ybWF0LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHVzYWdlcyBvZiBgRFFGX1JPT1RfU1FVQVNIYCBidXQgdGhlIGNoYW5nZSBzZWVtcyBpc29sYXRlZCB0byB0aGUgZmlsZXMgYW5kIGZ1bmN0aW9ucyBJJ3ZlIGV4YW1pbmVkLiBJJ20gc2F0aXNmaWVkLlxuXG5OZWVkc0tNU0FOPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQyLCJPdXRwdXRUb2tlbnMiOjE3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjU3OjA5LjU4MjYzNzgwNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBgRFFGX1JPT1RfU1FVQVNIYCBmbGFnLCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIHdpdGggdjIgcXVvdGEgZm9ybWF0cy4gSXQgbW9kaWZpZXMgYHYyX3dyaXRlX2ZpbGVfaW5mb2AgdG8gd3JpdGUgdGhpcyBmbGFnIHRvIGRpc2suIFRoZSBgc3RydWN0IHYyX2Rpc2tfZHFpbmZvYCB3cml0dGVuIHRvIGRpc2sgY29uc2lzdHMgb2YgNiBgX19sZTMyYCBmaWVsZHMsIGFsbCBvZiB3aGljaCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBxdW90YV93cml0ZWAgY2FsbC4gVGhlcmUgaXMgbm8gc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSBvciBkaXNrLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGNvbnRyb2wgZmxvdyBhbmQgcXVvdGEgbGltaXQgZW5mb3JjZW1lbnQsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGVycm9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGEgcmVzdHJpY3Rpb24gb24gdGhlIGBEUUZfUk9PVF9TUVVBU0hgIGZsYWcsIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgd2l0aCB2MiBxdW90YSBmb3JtYXRzLiBJdCBtb2RpZmllcyBgdjJfd3JpdGVfZmlsZV9pbmZvYCB0byB3cml0ZSB0aGlzIGZsYWcgdG8gZGlzay4gVGhlIGBzdHJ1Y3QgdjJfZGlza19kcWluZm9gIHdyaXR0ZW4gdG8gZGlzayBjb25zaXN0cyBvZiA2IGBfX2xlMzJgIGZpZWxkcywgYWxsIG9mIHdoaWNoIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgYHF1b3RhX3dyaXRlYCBjYWxsLiBUaGVyZSBpcyBubyBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIG9yIGRpc2suIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgY29udHJvbCBmbG93IGFuZCBxdW90YSBsaW1pdCBlbmZvcmNlbWVudCwgd2hpY2ggZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxk5j[1] Phase: Succeeded StartedAt: 2026-08-14 13:57:20 +0000 UTC FinishedAt: 2026-08-14 13:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 13:57:20 +0000 UTC FinishedAt: 2026-08-14 13:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2] Phase: Succeeded StartedAt: 2026-08-14 13:57:20 +0000 UTC FinishedAt: 2026-08-14 17:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 13:57:20 +0000 UTC FinishedAt: 2026-08-14 17:42:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 13:57:20 +0000 UTC FinishedAt: 2026-08-14 13:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 13:57:20 +0000 UTC FinishedAt: 2026-08-14 13:57:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkxk5j/series-workflowkxk5j-convert-artifact-1802141968/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 13:57:44 +0000 UTC FinishedAt: 2026-08-14 14:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 13:57:44 +0000 UTC FinishedAt: 2026-08-14 14:16:40 +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:*5c7bcdcb-d8f6-448a-a886-1851339af775,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-workflowkxk5j/series-workflowkxk5j-convert-artifact-1802141968/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": "a400fdf4-f966-4435-85fc-477fee0b7c5e", "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-workflowkxk5j/series-workflowkxk5j-build-action-1645452694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 13:57:44 +0000 UTC FinishedAt: 2026-08-14 14:16:30 +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:*5c7bcdcb-d8f6-448a-a886-1851339af775,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-workflowkxk5j/series-workflowkxk5j-convert-artifact-1802141968/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": "a400fdf4-f966-4435-85fc-477fee0b7c5e", "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-workflowkxk5j/series-workflowkxk5j-build-action-1645452694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 14:16:40 +0000 UTC FinishedAt: 2026-08-14 14:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 14:16:40 +0000 UTC FinishedAt: 2026-08-14 14:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 14:16:40 +0000 UTC FinishedAt: 2026-08-14 14:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 14:16:40 +0000 UTC FinishedAt: 2026-08-14 14:16:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkxk5j/series-workflowkxk5j-convert-artifact-956397431/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 14:16:50 +0000 UTC FinishedAt: 2026-08-14 14:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 14:16:50 +0000 UTC FinishedAt: 2026-08-14 14:18:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a400fdf4-f966-4435-85fc-477fee0b7c5e,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-workflowkxk5j/series-workflowkxk5j-build-action-1645452694/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-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 14:18:44 +0000 UTC FinishedAt: 2026-08-14 14:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 14:18:44 +0000 UTC FinishedAt: 2026-08-14 14:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 14:18:44 +0000 UTC FinishedAt: 2026-08-14 14:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 14:18:44 +0000 UTC FinishedAt: 2026-08-14 14:35:46 +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:*5c7bcdcb-d8f6-448a-a886-1851339af775,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-workflowkxk5j/series-workflowkxk5j-convert-artifact-956397431/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": "3cd6dc0d-ae77-48a4-bb41-279db939f067", "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-workflowkxk5j/series-workflowkxk5j-build-action-143280699/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 14:18:44 +0000 UTC FinishedAt: 2026-08-14 14:35:36 +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:*5c7bcdcb-d8f6-448a-a886-1851339af775,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-workflowkxk5j/series-workflowkxk5j-convert-artifact-956397431/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": "3cd6dc0d-ae77-48a4-bb41-279db939f067", "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-workflowkxk5j/series-workflowkxk5j-build-action-143280699/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 14:35:46 +0000 UTC FinishedAt: 2026-08-14 14:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 14:35:46 +0000 UTC FinishedAt: 2026-08-14 14:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 14:35:46 +0000 UTC FinishedAt: 2026-08-14 14:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 14:35:46 +0000 UTC FinishedAt: 2026-08-14 14:37:52 +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:*3cd6dc0d-ae77-48a4-bb41-279db939f067,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-workflowkxk5j/series-workflowkxk5j-build-action-143280699/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-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 14:37:58 +0000 UTC FinishedAt: 2026-08-14 17:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 14:37:58 +0000 UTC FinishedAt: 2026-08-14 17:42:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"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:*a400fdf4-f966-4435-85fc-477fee0b7c5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3cd6dc0d-ae77-48a4-bb41-279db939f067,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-workflowkxk5j/series-workflowkxk5j-build-action-1645452694/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-workflowkxk5j/series-workflowkxk5j-build-action-143280699/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 14:37:58 +0000 UTC FinishedAt: 2026-08-14 14:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 14:37:58 +0000 UTC FinishedAt: 2026-08-14 14:38:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"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-workflowkxk5j/series-workflowkxk5j-convert-artifact-2047742128/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 14:37:58 +0000 UTC FinishedAt: 2026-08-14 14:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 14:37:58 +0000 UTC FinishedAt: 2026-08-14 14:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 14:37:58 +0000 UTC FinishedAt: 2026-08-14 14:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 14:38:08 +0000 UTC FinishedAt: 2026-08-14 17:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxk5j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dquot_set_dqinfo","dquot_alloc_inode","__dquot_transfer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["QUOTA","QFMT_V2"],"series_id":"ef71218b-224e-4950-b136-23df16ad7fb8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 14:38:08 +0000 UTC FinishedAt: 2026-08-14 17:42:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a400fdf4-f966-4435-85fc-477fee0b7c5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3cd6dc0d-ae77-48a4-bb41-279db939f067,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-workflowkxk5j/series-workflowkxk5j-build-action-1645452694/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-workflowkxk5j/series-workflowkxk5j-build-action-143280699/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-workflowkxk5j/series-workflowkxk5j-convert-artifact-2047742128/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,}