Name: series-workflow7kf5w Phase: Succeeded StartedAt: 2026-08-31 09:34:28 +0000 UTC FinishedAt: 2026-08-31 13:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[0] Phase: Succeeded StartedAt: 2026-08-31 09:34:28 +0000 UTC FinishedAt: 2026-08-31 10:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 09:34:28 +0000 UTC FinishedAt: 2026-08-31 10:05:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f05dc611ac09e7ec034171c7521329f7d9cbb940", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "HUGETLB_PMD_PAGE_TABLE_SHARING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f05dc611ac09e7ec034171c7521329f7d9cbb940", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "HUGETLB_PMD_PAGE_TABLE_SHARING" ], "series_id": "451111f2-c440-47cc-8c88-30e073ef9065" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__hugetlb_zap_begin", "unmap_hugepage_range", "adjust_range_if_pmd_sharing_possible" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDssCiAgICAmIzM0O3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2FkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIFBNRCBwYWdlIHRhYmxlIHNoYXJpbmcgcmFuZ2UgYWRqdXN0bWVudHMgKGluIGBtbS9odWdldGxiLmNgKSB0byBvbmx5IGV4cGFuZCB0aGUgdW5tYXBwaW5nL3phcCBhZGRyZXNzIHJhbmdlIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHJhbmdlX3N0YXJ0YCBhbmQgYHJhbmdlX2VuZGApIGFyZSBwcm9wZXJseSBhc3NpZ25lZCBiZWZvcmUgdXNlIHdoZW4gYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYCByZXR1cm5zIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGFjY2Vzc2VkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSB0YWJsZSB3YWxrcywgbG9ja2luZywgb3IgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydGlvbiBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBodWdldGxiIFBNRCBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYnkgY2hlY2tpbmcgd2hldGhlciBQTUQgdGFibGVzIGFyZSBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHRoZSByYW5nZSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgZXhwYW5kaW5nIGFsbCBwb3RlbnRpYWxseSBzaGFyZWFibGUgcmFuZ2VzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBodWdldGxiIG1lbW9yeSB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYmVoYXZpb3IgcmVhY2hhYmxlIHZpYSBodWdldGxiZnMgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNhOTBhMTg4NTQ3ZmEyOWYwOTU2YWZmZTdjMGU2ODU5YjJiMjdhM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowMToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLmU4MGUxMTE4Mzg1ZjAgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTUzNTMsMTYgJiM0Mzs1MzUzLDEwNSBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3BtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqcmFuZ2Vfc3RhcnQsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKnJhbmdlX2VuZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS1cdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdl9lbmQgPSBBTElHTl9ET1dOKHZtYS1cdTAwM2V2bV9lbmQsIFBVRF9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZVxuJiM0MztcdCAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFx1MDAzZSB2X3N0YXJ0KSB8fFxuJiM0MztcdCAgICAoZW5kIFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFx1MDAzZT0gdl9lbmQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQqcmFuZ2Vfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydCwgUFVEX1NJWkUpLCB2X3N0YXJ0KTtcbiYjNDM7XHQqcmFuZ2VfZW5kID0gbWluKEFMSUdOKGVuZCwgUFVEX1NJWkUpLCB2X2VuZCk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO2FkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbiYjNDM7e1xuJiM0MztcdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xuJiM0MztcdGlmICgqc3RhcnQgXHUwMDNlIHJhbmdlX3N0YXJ0KVxuJiM0MztcdFx0KnN0YXJ0ID0gcmFuZ2Vfc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGlmICgqZW5kIFx1MDAzYyByYW5nZV9lbmQpXG4mIzQzO1x0XHQqZW5kID0gcmFuZ2VfZW5kO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCxcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuJiM0MztcbiYjNDM7XHRodWdldGxiX3ZtYV9hc3NlcnRfbG9ja2VkKHZtYSk7XG4mIzQzO1x0aV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXHUwMDNjIHJhbmdlX2VuZDsgYWRkcmVzcyAmIzQzOz0gUFVEX1NJWkUpIHtcbiYjNDM7XHRcdHB0ZV90ICpwdGVwO1xuJiM0MztcdFx0Ym9vbCBzaGFyZWQ7XG4mIzQzO1xuJiM0MztcdFx0cHRlcCA9IGh1Z2V0bGJfd2Fsayh2bWEsIGFkZHJlc3MsIFBNRF9TSVpFKTtcbiYjNDM7XHRcdGlmICghcHRlcClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcbiYjNDM7XHRcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2hhcmVkKVxuJiM0MztcdFx0XHRhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHN0YXJ0LCBlbmQsIGFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYWRkcmVzcyAmIzQzOyBQVURfU0laRSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7XG4mIzQzO1xuJiM0MztcdGlmIChodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpICE9IFBNRF9TSVpFKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2cmFuZ2Vfc3RhcnQsIFx1MDAyNnJhbmdlX2VuZCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNfaW5fcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuIHtcbiBcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpXHQvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovXG4gXHRcdHJldHVybjtcbiBcbi1cdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIHN0YXJ0LCBlbmQpO1xuIFx0aHVnZXRsYl92bWFfbG9ja193cml0ZSh2bWEpO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuJiM0MztcdGlmICh2bWEtXHUwMDNldm1fZmlsZSkge1xuIFx0XHRpX21tYXBfbG9ja193cml0ZSh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuJiM0MztcdFx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyh2bWEsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkBAIC01NDAxLDcgJiM0Mzs1NDkwLDEyIEBAIHZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0c3RhcnQsIGVuZCk7XG4tXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzXG4mIzQzO1x0ICogaG9sZCBpX21tYXBfcndzZW0gYW5kIHRoZSBodWdldGxiIFZNQSBsb2NrIGZvciBzaGFyZWQgbWFwcGluZ3MsIHNvIFBNRFxuJiM0MztcdCAqIHNoYXJpbmcgc3RhdGUgY2Fubm90IGNoYW5nZSBiZWZvcmUgX191bm1hcF9odWdlcGFnZV9yYW5nZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbiBcbkBAIC02OTQzLDIzICYjNDM7NzAzNywxMyBAQCBib29sIHdhbnRfcG1kX3NoYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS1cdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpLFxuLVx0XHR2X2VuZCA9IEFMSUdOX0RPV04odm1hLVx1MDAzZXZtX2VuZCwgUFVEX1NJWkUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcbiBcbi1cdC8qXG4tXHQgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZVxuLVx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGluLlxuLVx0ICovXG4tXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFx1MDAzZSB2X3N0YXJ0KSB8fFxuLVx0XHQoKmVuZCBcdTAwM2M9IHZfc3RhcnQpIHx8ICgqc3RhcnQgXHUwMDNlPSB2X2VuZCkpXG4mIzQzO1x0aWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNnJhbmdlX3N0YXJ0LCBcdTAwMjZyYW5nZV9lbmQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBFeHRlbmQgdGhlIHJhbmdlIHRvIGJlIFBVRCBhbGlnbmVkIGZvciBhIHdvcnN0IGNhc2Ugc2NlbmFyaW8gKi9cbi1cdGlmICgqc3RhcnQgXHUwMDNlIHZfc3RhcnQpXG4tXHRcdCpzdGFydCA9IEFMSUdOX0RPV04oKnN0YXJ0LCBQVURfU0laRSk7XG4tXG4tXHRpZiAoKmVuZCBcdTAwM2Mgdl9lbmQpXG4tXHRcdCplbmQgPSBBTElHTigqZW5kLCBQVURfU0laRSk7XG4mIzQzO1x0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcbiB9XG4gXG4gLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odWdldGxiX3phcF9iZWdpbiYjMzQ7LAogICAgJiMzNDt1bm1hcF9odWdlcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIGh1Z2V0bGIgUE1EIHNoYXJpbmcgcmFuZ2UgYWRqdXN0bWVudHMgZHVyaW5nIHVubWFwcGluZyBhbmQgemFwcGluZyBieSBjaGVja2luZyB3aGV0aGVyIFBNRCB0YWJsZXMgYXJlIGFjdHVhbGx5IHNoYXJlZCBhY3Jvc3MgdGhlIHJhbmdlIHJhdGhlciB0aGFuIHVuY29uZGl0aW9uYWxseSBleHBhbmRpbmcgYWxsIHBvdGVudGlhbGx5IHNoYXJlYWJsZSByYW5nZXMuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIGh1Z2V0bGIgbWVtb3J5IHVubWFwcGluZyBhbmQgemFwcGluZyBiZWhhdmlvciByZWFjaGFibGUgdmlhIGh1Z2V0bGJmcyBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2E5MGExODg1NDdmYTI5ZjA5NTZhZmZlN2MwZTY4NTliMmIyN2EzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEwOjAxOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDc4NTc3Mjg0NTc5NTIuLmU4MGUxMTE4Mzg1ZjAgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTUzNTMsMTYgJiM0Mzs1MzUzLDEwNSBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaHVnZV9wbWRfdW5zaGFyZV9mbHVzaCh0bGIsIHZtYSk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORwomIzQzO3N0YXRpYyBib29sCiYjNDM7cG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiYjNDM7CQkJICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgKnJhbmdlX3N0YXJ0LAomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgKnJhbmdlX2VuZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS0mZ3Q7dm1fc3RhcnQsIFBVRF9TSVpFKTsKJiM0MzsJdW5zaWduZWQgbG9uZyB2X2VuZCA9IEFMSUdOX0RPV04odm1hLSZndDt2bV9lbmQsIFBVRF9TSVpFKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2UKJiM0MzsJICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NQVlTSEFSRSkgfHwgISh2X2VuZCAmZ3Q7IHZfc3RhcnQpIHx8CiYjNDM7CSAgICAoZW5kICZsdDs9IHZfc3RhcnQpIHx8IChzdGFydCAmZ3Q7PSB2X2VuZCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CSpyYW5nZV9zdGFydCA9IG1heChBTElHTl9ET1dOKHN0YXJ0LCBQVURfU0laRSksIHZfc3RhcnQpOwomIzQzOwkqcmFuZ2VfZW5kID0gbWluKEFMSUdOKGVuZCwgUFVEX1NJWkUpLCB2X2VuZCk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kKQomIzQzO3sKJiM0MzsJLyogRXh0ZW5kIHRoZSByYW5nZSB0byBiZSBQVUQgYWxpZ25lZCBmb3IgYSB3b3JzdCBjYXNlIHNjZW5hcmlvICovCiYjNDM7CWlmICgqc3RhcnQgJmd0OyByYW5nZV9zdGFydCkKJiM0MzsJCSpzdGFydCA9IHJhbmdlX3N0YXJ0OwomIzQzOwomIzQzOwlpZiAoKmVuZCAmbHQ7IHJhbmdlX2VuZCkKJiM0MzsJCSplbmQgPSByYW5nZV9lbmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9lbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKJiM0MzsKJiM0MzsJaHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZCh2bWEpOwomIzQzOwlpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtJmd0O3ZtX2ZpbGUtJmd0O2ZfbWFwcGluZyk7CiYjNDM7CiYjNDM7CWZvciAoYWRkcmVzcyA9IHJhbmdlX3N0YXJ0OyBhZGRyZXNzICZsdDsgcmFuZ2VfZW5kOyBhZGRyZXNzICYjNDM7PSBQVURfU0laRSkgewomIzQzOwkJcHRlX3QgKnB0ZXA7CiYjNDM7CQlib29sIHNoYXJlZDsKJiM0MzsKJiM0MzsJCXB0ZXAgPSBodWdldGxiX3dhbGsodm1hLCBhZGRyZXNzLCBQTURfU0laRSk7CiYjNDM7CQlpZiAoIXB0ZXApCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzcGluX2xvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpOwomIzQzOwkJc2hhcmVkID0gcHRkZXNjX3BtZF9pc19zaGFyZWQodmlydF90b19wdGRlc2MocHRlcCkpOwomIzQzOwkJc3Bpbl91bmxvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpOwomIzQzOwomIzQzOwkJaWYgKHNoYXJlZCkKJiM0MzsJCQlhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHN0YXJ0LCBlbmQsIGFkZHJlc3MsCiYjNDM7CQkJCQkJICAgICBhZGRyZXNzICYjNDM7IFBVRF9TSVpFKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LAomIzQzOwkJCSAgICAgdW5zaWduZWQgbG9uZyAqZW5kKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kOwomIzQzOwomIzQzOwlpZiAoaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSAhPSBQTURfU0laRSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCwKJiM0MzsJCQkJCSZhbXA7cmFuZ2Vfc3RhcnQsICZhbXA7cmFuZ2VfZW5kKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyB2b2lkCiYjNDM7YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsCiYjNDM7CQkJICAgICB1bnNpZ25lZCBsb25nICplbmQpCiYjNDM7ewomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCSB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKQogewogCWlmICghdm1hLSZndDt2bV9maWxlKQkvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovCiAJCXJldHVybjsKIAotCWFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIHN0YXJ0LCBlbmQpOwogCWh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTsKLQlpZiAodm1hLSZndDt2bV9maWxlKQomIzQzOwlpZiAodm1hLSZndDt2bV9maWxlKSB7CiAJCWlfbW1hcF9sb2NrX3dyaXRlKHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nKTsKJiM0MzsJCWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBzdGFydCwgZW5kKTsKJiM0MzsJfQogfQogCiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtNTQwMSw3ICYjNDM7NTQ5MCwxMiBAQCB2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCiAJbW11X25vdGlmaWVyX3JhbmdlX2luaXQoJmFtcDtyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLSZndDt2bV9tbSwKIAkJCQlzdGFydCwgZW5kKTsKLQlhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZCk7CiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzCiYjNDM7CSAqIGhvbGQgaV9tbWFwX3J3c2VtIGFuZCB0aGUgaHVnZXRsYiBWTUEgbG9jayBmb3Igc2hhcmVkIG1hcHBpbmdzLCBzbyBQTUQKJiM0MzsJICogc2hhcmluZyBzdGF0ZSBjYW5ub3QgY2hhbmdlIGJlZm9yZSBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkuCiYjNDM7CSAqLwomIzQzOwlhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQpOwogCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCZhbXA7cmFuZ2UpOwogCXRsYl9nYXRoZXJfbW11KCZhbXA7dGxiLCB2bWEtJmd0O3ZtX21tKTsKIApAQCAtNjk0MywyMyAmIzQzOzcwMzcsMTMgQEAgYm9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCkKIHsKLQl1bnNpZ25lZCBsb25nIHZfc3RhcnQgPSBBTElHTih2bWEtJmd0O3ZtX3N0YXJ0LCBQVURfU0laRSksCi0JCXZfZW5kID0gQUxJR05fRE9XTih2bWEtJmd0O3ZtX2VuZCwgUFVEX1NJWkUpOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7CiAKLQkvKgotCSAqIHZtYSBuZWVkcyB0byBzcGFuIGF0IGxlYXN0IG9uZSBhbGlnbmVkIFBVRCBzaXplLCBhbmQgdGhlIHJhbmdlCi0JICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGluLgotCSAqLwotCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUFZU0hBUkUpIHx8ICEodl9lbmQgJmd0OyB2X3N0YXJ0KSB8fAotCQkoKmVuZCAmbHQ7PSB2X3N0YXJ0KSB8fCAoKnN0YXJ0ICZndDs9IHZfZW5kKSkKJiM0MzsJaWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCwKJiM0MzsJCQkJCSZhbXA7cmFuZ2Vfc3RhcnQsICZhbXA7cmFuZ2VfZW5kKSkKIAkJcmV0dXJuOwogCi0JLyogRXh0ZW5kIHRoZSByYW5nZSB0byBiZSBQVUQgYWxpZ25lZCBmb3IgYSB3b3JzdCBjYXNlIHNjZW5hcmlvICovCi0JaWYgKCpzdGFydCAmZ3Q7IHZfc3RhcnQpCi0JCSpzdGFydCA9IEFMSUdOX0RPV04oKnN0YXJ0LCBQVURfU0laRSk7Ci0KLQlpZiAoKmVuZCAmbHQ7IHZfZW5kKQotCQkqZW5kID0gQUxJR04oKmVuZCwgUFVEX1NJWkUpOwomIzQzOwlhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpOwogfQogCiAvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBnaXZlbiBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbW0vaHVnZXRsYi5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBraWNrcyBpbjogdGltZSB0byBkaXNzZWN0IHRoaXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gZG8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQuCgpGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgaW5zcGVjdCB0aGUgcGF0Y2ggaXRzZWxmLCBvZiBjb3Vyc2UuIEJ1dCBiZWZvcmUgSSBldmVuIGdldCBpbnRvIGxpbmUtYnktbGluZSBkaWZmcywgSSYjMzk7bGwgd2FudCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgYW5kIGNvbnRleHQuCgpUaGVuLCBJJiMzOTtsbCByZWFjaCBmb3IgbXkgdG9vbHMg4oCTIHByb2JhYmx5IGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHdoYXQgcGFydHMgb2YgYG1tL2h1Z2V0bGIuY2AgYXJlIGFmZmVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgc3ltYm9scyB0aGF0IG1pZ2h0IGNvbWUgaW50byBwbGF5IGhlcmUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgaW1wYWN0IGFuZCBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzIG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBXaGF0IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFyZSBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBuZXcgZmVhdHVyZXMgYmVpbmcgaW50cm9kdWNlZCBvciBleGlzdGluZyBiZWhhdmlvcnMgYmVpbmcgbW9kaWZpZWQ/IEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIGFyZWFzIG9mIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiB0aGlzIHBhdGNoIGludGVyc2VjdHMgd2l0aC4KCkkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLgpJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWxhdGVkIHN5bWJvbHMgdG8gc2VlIGlmIHRoZSBwYXRjaCBtYWtlcyBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGVtLCBhbmQgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHN5bWJvbHMuCgpUaGUgY29yZSBvZiBteSBhbmFseXNpcyB3aWxsIHJldm9sdmUgYXJvdW5kIGhvdyB0aGlzIHBhdGNoIGltcGFjdHMgdGhlIG92ZXJhbGwgaHVnZSBwYWdlIHN1YnN5c3RlbS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBhbnN3ZXIgYWJvdXQgcGVyZm9ybWFuY2UsIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGFsaWducyB3aXRoIHRoZSBlc3RhYmxpc2hlZCBkZXNpZ24gcHJpbmNpcGxlcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBob2xlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz00ODg0PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9odWdldGxiLmMtNDkzMC1cbm1tL2h1Z2V0bGIuYzo0OTMxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG5tbS9odWdldGxiLmMtNDkzMi1cdFx0LyogSWYgdGhlIHBhZ2V0YWJsZXMgYXJlIHNoYXJlZCwgdGhlcmUgaXMgbm90aGluZyB0byBkbyAqL1xuLS1cbm1tL2h1Z2V0bGIuYz01MTk2PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM1NS1cbm1tL2h1Z2V0bGIuYzo1MzU2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG5tbS9odWdldGxiLmMtNTM1Ny1zdGF0aWMgYm9vbFxuLS1cbm1tL2h1Z2V0bGIuYz02OTQxPWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jLTY5ODEtXG5tbS9odWdldGxiLmM6Njk4MjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xubW0vaHVnZXRsYi5jLTY5ODMtc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV90YWJsZV9zaGFyZWFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYz03MTYwPXZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtNzE3MS1cbm1tL2h1Z2V0bGIuYzo3MTcyOiNlbHNlIC8qICFDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HICovXG5tbS9odWdldGxiLmMtNzE3My1cbi0tXG5tbS9odWdldGxiLmM9NzIwMj1ib29sIHdhbnRfcG1kX3NoYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vaHVnZXRsYi5jLTcyMDUtfVxubW0vaHVnZXRsYi5jOjcyMDY6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcgKi9cbm1tL2h1Z2V0bGIuYy03MjA3LVxuLS1cbm1tL2h1Z2V0bGIuYz03MzAyPV9fd2VhayB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaClcbm1tL2h1Z2V0bGIuYy03MzAzLXtcbm1tL2h1Z2V0bGIuYzo3MzA0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG5tbS9odWdldGxiLmMtNzMwNS1cdGlmIChodWdlX3BhZ2Vfc2l6ZShoKSA9PSBQTURfU0laRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgSHVudCBmb3IgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBmaW5kaW5nIHRoZSByZWxldmFudCBLY29uZmlnIGVudHJpZXMgcmVsYXRlZCB0byBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwcmV0dHkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSwgc28gdGhlIHNlYXJjaCBzaG91bGRuJiMzOTt0IGJlIHRvbyBicm9hZC4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhpcyBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGhpZXJhcmNoeS4KCkkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgKmV4YWN0KiBlbnRyeSBvciBlbnRyaWVzIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyB0aGlzIGJlaGF2aW9yLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIHBvc3NpYmxlIHZhbHVlcywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LiBUaGlzIHdpbGwgaW52b2x2ZSB1c2luZyBzdGFuZGFyZCB0b29scyBvciBtZXRob2RzIGZvciBuYXZpZ2F0aW5nIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0gLSBob3BlZnVsbHksIGl0JiMzOTtzIG5vdCBidXJpZWQgdG9vIGRlZXAgd2l0aGluIHNvbWUgb2JzY3VyZSBmaWxlLgoKT25jZSBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoZSByZWxldmFudCBLY29uZmlnIGVudHJ5LCBJJiMzOTtsbCBhc3Nlc3MgdGhlIGNvbnRleHQuIFdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgcmVsYXRlZD8gV2hhdCBmZWF0dXJlcyBkZXBlbmQgb24gdGhpcz8gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgZXhpc3RlbmNlPyBCYXNpY2FsbHksIEkmIzM5O20gYWltaW5nIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhpcyBvcHRpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGxhbmRzY2FwZS4gSSYjMzk7bGwgbmVlZCB0byBleHRyYWN0IGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgSSBjYW4gZnJvbSB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZiwgYW5kIG1heWJlIGxvb2sgaW50byByZWxhdGVkIHNvdXJjZSBmaWxlcyBpZiBuZWNlc3NhcnkuIFRoaXMgd2lsbCBoZWxwIG1lIHRydWx5IHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIHdvcmtzIGFuZCB3aGVyZSBpdCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9NDg4ND1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4tLVxubW0vaHVnZXRsYi5jLTQ5MzAtXG5tbS9odWdldGxiLmM6NDkzMTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xubW0vaHVnZXRsYi5jLTQ5MzItXHRcdC8qIElmIHRoZSBwYWdldGFibGVzIGFyZSBzaGFyZWQsIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gKi9cbi0tXG5tbS9odWdldGxiLmM9NTE5Nj12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUzNTUtXG5tbS9odWdldGxiLmM6NTM1NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xubW0vaHVnZXRsYi5jLTUzNTctc3RhdGljIGJvb2xcbi0tXG5tbS9odWdldGxiLmM9Njk0MT1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYy02OTgxLVxubW0vaHVnZXRsYi5jOjY5ODI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbm1tL2h1Z2V0bGIuYy02OTgzLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VfdGFibGVfc2hhcmVhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3ZtYSxcbi0tXG5tbS9odWdldGxiLmM9NzE2MD12b2lkIGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZXRsYi5jLTcxNzEtXG5tbS9odWdldGxiLmM6NzE3MjojZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyAqL1xubW0vaHVnZXRsYi5jLTcxNzMtXG4tLVxubW0vaHVnZXRsYi5jPTcyMDI9Ym9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2h1Z2V0bGIuYy03MjA1LX1cbm1tL2h1Z2V0bGIuYzo3MjA2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HICovXG5tbS9odWdldGxiLmMtNzIwNy1cbi0tXG5tbS9odWdldGxiLmM9NzMwMj1fX3dlYWsgdW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtNzMwMy17XG5tbS9odWdldGxiLmM6NzMwNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xubW0vaHVnZXRsYi5jLTczMDUtXHRpZiAoaHVnZV9wYWdlX3NpemUoaCkgPT0gUE1EX1NJWkUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZm9ybSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipIdW50aW5nIERvd24gSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbiBpcyBrZXkgdG8gWyAqaW5zZXJ0IHJlbGV2YW50IHRlY2huaWNhbCBjb250ZXh0IGhlcmUsIHNwZWNpZmljIHRvIHRoZSB1c2VyJiMzOTtzIGV4cGVydGlzZSwgZS5nLiwgb3B0aW1pemluZyBtZW1vcnkgYWxsb2NhdGlvbiwgZGVidWdnaW5nIHBhZ2UgdGFibGUgaXNzdWVzLCBvciB1bmRlcnN0YW5kaW5nIE5VTUEgYmVoYXZpb3VyKl0uCgpJJiMzOTttIHRoaW5raW5nIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIGlzIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcyBvZiB0aGUga2VybmVsIHNvdXJjZS4gVGhvc2UgYXJlIHRoZSBjb25maWd1cmF0aW9uIG1lbnVzIHRoYXQgdGhlIGtlcm5lbCB1c2VzIHRvIGRldGVybWluZSB3aGF0IGZlYXR1cmVzIGFyZSBidWlsdCBpbnRvIGEga2VybmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSB3aG9sZSByZXBvc2l0b3J5IHRvIGVuc3VyZSBJIGZpbmQgYWxsIGluc3RhbmNlcywgdG8gYWNjb3VudCBmb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRlZmluaXRpb25zIG9yIGNvbmRpdGlvbmFsIGJ1aWxkcy4gVGhlcmUgbWlnaHQgYmUgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbG9naWMgaW52b2x2ZWQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIGRvIGEgZ2xvYmFsIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9Mjc3PWNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuLS1cbmZzL0tjb25maWctMjgyLVxuZnMvS2NvbmZpZzoyODM6Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xuZnMvS2NvbmZpZy0yODQtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgZnMvS2NvbmZpZ2AuIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgc3BlY2lmaWMgZmlsZSBzeXN0ZW0gb3B0aW9ucywgbGlrZWx5IGluIHRoZSBhcmVhIG9mIGEgcGFydGljdWxhciBmaWxlc3lzdGVtLCBsZXQmIzM5O3Mgc2F5IGFyb3VuZCBsaW5lIDI4My4gVGltZSB0byBmaXJlIHVwIG15IGVkaXRvciBhbmQgdGFrZSBhIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCB0aGVyZSwgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgY29uZmlnIG9wdGlvbnMuIFRoZXJlIG1heSBiZSBhIHN1YnRsZSBkZXBlbmRlbmN5IHRoYXQgSSBhbSBvdmVybG9va2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXG4gMjcxOlx0ZW5kaWYgIyBIVUdFVExCRlNcbiAyNzI6XHRcbiAyNzM6XHRjb25maWcgSFVHRVRMQl9QQUdFXG4gMjc0Olx0XHRkZWZfYm9vbCBIVUdFVExCRlNcbiAyNzU6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiAyNzY6XHRcbiAyNzc6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiAyNzg6XHRcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuIDI3OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG4gMjgwOlx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4gMjgxOlx0XHRzZWxlY3QgU1BBUlNFTUVNX1ZNRU1NQVBfUFJFSU5JVCBpZiBBUkNIX1dBTlRfSFVHRVRMQl9WTUVNTUFQX1BSRUlOSVRcbiAyODI6XHRcbiAyODM6XHRjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4gMjg0Olx0XHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbiAyODU6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFx1MDAyNlx1MDAyNiBTUExJVF9QTURfUFRMT0NLU1xuIDI4NjpcdFxuIDI4NzpcdGNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG4gMjg4Olx0XHRib29sXG4gMjg5Olx0XG4gMjkwOlx0c291cmNlIFwmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWdcJiMzNDtcbiAyOTE6XHRzb3VyY2UgXCYjMzQ7ZnMvZWZpdmFyZnMvS2NvbmZpZ1wmIzM0O1xuIDI5MjpcdFxuIDI5MzpcdGVuZG1lbnVcbiAyOTQ6XHRcbiAyOTU6XHRtZW51Y29uZmlnIE1JU0NfRklMRVNZU1RFTVNcbiAyOTY6XHRcdGJvb2wgXCYjMzQ7TWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtc1wmIzM0O1xuIDI5NzpcdFx0ZGVmYXVsdCB5XG4gMjk4Olx0XHRoZWxwXG4gMjk5Olx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB2YXJpb3VzIG1pc2NlbGxhbmVvdXNcbiAzMDA6XHRcdCAgZmlsZXN5c3RlbXMsIHN1Y2ggYXMgZmlsZXN5c3RlbXMgdGhhdCBjYW1lIGZyb20gb3RoZXJcbiAzMDE6XHRcdCAgb3BlcmF0aW5nIHN5c3RlbXMuXG4gMzAyOlx0XG4gMzAzOlx0XHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gMzA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIEhVR0VUTEJGUyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgSFVHRVRMQkZTYCBhY3R1YWxseSByZWxpZXMgb24gZnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludC4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIGBmcy9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgcGxhY2VzIHdoZXJlIHRoaXMga2luZCBvZiBkZXBlbmRlbmN5IHdvdWxkIGJlIGRlZmluZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0LCB3aGVuIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGRpcmVjdGx5IGltcGFjdCB3aGV0aGVyIG9yIG5vdCBgSFVHRVRMQkZTYCBjYW4gZXZlbiBiZSBjb21waWxlZCwgb3IgZnVuY3Rpb25zIGNvcnJlY3RseS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcywgcG9zc2libHkgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGZpbGUgc3lzdGVtIGNvcmUgY29tcG9uZW50cy4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGRlYnVnZ2luZyBleGVyY2lzZSDigJMganVzdCBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBwcmVyZXF1aXNpdGUgc2V0dGluZ3MgbmVlZGVkIGZvciBgSFVHRVRMQkZTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24gYmV0dGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb3V0IHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lcyAyNDUtMjc1IGluIGBmcy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBvcHRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZCBvciBpbmNsdWRlZCBmb3IgYW55IGtleSBwYXJhbWV0ZXJzIGJlaW5nIGV4cG9zZWQgdG8gdGhlIHVzZXIuIEdpdmVuIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCwgaXQmIzM5O3MgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgYHNvdXJjZWAgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IHB1bGwgaW4gb3RoZXIgc2VjdGlvbnMgb2YgdGhlIGNvbmZpZ3VyYXRpb24sIGFzIHRoaXMgY2FuIG9mdGVuIGhpZGUgc29tZSBvZiB0aGUgaW1wb3J0YW50IGRldGFpbHMuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSBzb2xpZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuIDI2NTpcdFx0ZGVmYXVsdCBuXG4gMjY2Olx0XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjY3Olx0XHRoZWxwXG4gMjY4Olx0XHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xuIDI2OTpcdFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXG4gMjcwOlx0XHQgIChib290IGNvbW1hbmQgbGluZSkgb3IgaHVnZXRsYl9vcHRpbWl6ZV92bWVtbWFwIChzeXNjdGwpLlxuIDI3MTpcdGVuZGlmICMgSFVHRVRMQkZTXG4gMjcyOlx0XG4gMjczOlx0Y29uZmlnIEhVR0VUTEJfUEFHRVxuIDI3NDpcdFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4gMjc1Olx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4gMjc2Olx0XG4gMjc3Olx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjc4Olx0XHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbiAyNzk6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFYCBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFYC4gSSBrbm93IHdoYXQgaXQgKm1lYW5zKiDigJMgdGhlIGRlc2lyZSBmb3IgdGhlIGFyY2hpdGVjdHVyZSB0byBzdXBwb3J0IHNoYXJlZCBodWdlIFBNRHMg4oCTIGJ1dCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSAqKnByYWN0aWNhbCBpbXBsaWNhdGlvbnMqKiBvZiBpdHMgc3VwcG9ydC4gSSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBhcmNoaXRlY3R1cmVzIGFjdHVhbGx5IGRlZmluZSBhbmQgZW5hYmxlIHRoaXMgZmVhdHVyZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGxpa2VseSBgS2NvbmZpZ2AgZmlsZXMgd2l0aGluIHRoZSBgYXJjaC9gIGRpcmVjdG9yaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGFyY2hpdGVjdHVyZXMgY29uZGl0aW9uYWxseSBzZWxlY3Qgb3IgZGVwZW5kIG9uIHRoaXMgb3B0aW9uLiBJ4oCZbGwgbGlrZWx5IGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBzZWN0aW9ucy4gQmV5b25kIGEgc2ltcGxlIGRlZmluaXRpb24sIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gYW55IGFzc29jaWF0ZWQgZmVhdHVyZXMgb3IgY29uc3RyYWludHMgdGhhdCBhcmUgYWxzbyBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGl0cyBwcmVzZW5jZS4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIHNwZWNpZmljIG1lbW9yeSBtb2RlbCBhc3N1bXB0aW9ucyB0byBwZXJmb3JtYW5jZS1yZWxhdGVkIGNvbnNpZGVyYXRpb25zLiBNeSBnb2FsIGlzIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmVhdHVyZSYjMzk7cyByb2xlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmVzIGl0IHRvdWNoZXMuIEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBmb3IgYSB5ZXMvbm8gYW5zd2VyOyBJIHdhbnQgdG8gc2VlIHRoZSAqd2h5KiBhbmQgdGhlICpob3cqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTExMTc9Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbi0tXG5hcmNoL0tjb25maWctMTEyMC1cbmFyY2gvS2NvbmZpZzoxMTIxOmNvbmZpZyBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcbmFyY2gvS2NvbmZpZy0xMTIyLVx0Ym9vbFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy05NC1cdHNlbGVjdCBBUkNIX1dBTlRfRlJBTUVfUE9JTlRFUlNcbmFyY2gvYXJtNjQvS2NvbmZpZzo5NTpcdHNlbGVjdCBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUgaWYgQVJNNjRfNEtfUEFHRVMgfHwgKEFSTTY0XzE2S19QQUdFUyBcdTAwMjZcdTAwMjYgIUFSTTY0X1ZBX0JJVFNfMzYpXG5hcmNoL2FybTY0L0tjb25maWctOTYtXHRzZWxlY3QgQVJDSF9XQU5UX0xEX09SUEhBTl9XQVJOXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy04OC1cdHNlbGVjdCBBUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCIGlmICFSSVNDVl9JU0FfU1ZOQVBPVFxuYXJjaC9yaXNjdi9LY29uZmlnOjg5Olx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFX1BNRF9TSEFSRSBpZiA2NEJJVFxuYXJjaC9yaXNjdi9LY29uZmlnLTkwLVx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTQ4LVx0c2VsZWN0IEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcbmFyY2gveDg2L0tjb25maWc6MTQ5Olx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFX1BNRF9TSEFSRVx0XHRpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWctMTUwLVx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxuLS1cbmZzL0tjb25maWc9MjgzPWNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbmZzL0tjb25maWctMjg0LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnOjI4NTpcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFx1MDAyNlx1MDAyNiBTUExJVF9QTURfUFRMT0NLU1xuZnMvS2NvbmZpZy0yODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gSHVnZSBQYWdlczogRW5hYmxpbmcgU2hhcmVkIFBNRCBQYWdlIFRhYmxlcyoqCgpBbHJpZ2h0LCBzbyAqSFVHRVRMQkZTKiBpcyB0aGUga2V5IGhlcmUg4oCTIGl0JiMzOTtzIHRoZSBlbmFibGVyLiBXZSBrbm93IHRoYXQgYEhVR0VUTEJGU2AgdW5sb2NrcyBgSFVHRVRMQl9QQUdFYCwgYW5kIGZyb20gdGhlcmUgd2UgZ2V0IGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgYXJjaGl0ZWN0dXJlIGFuZCB3aGF0IHRoYXQgZW5hYmxlcyBvbiB4ODZfNjQsIGFybTY0LCBhbmQgdGhlIG90aGVyIGFyY2hpdGVjdHVyZXMuIFdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgc2VyaW91cyBvcHRpbWl6YXRpb25zIGFyb3VuZCBodWdlIHBhZ2UgbWFuYWdlbWVudCBhdCB0aGUgUE1EIGxldmVsLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIGRpc3NlY3QgdGhpcyBwYXRjaCwgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBhbmQgaG93IGl04oCZcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9kaWZpY2F0aW9ucyBhbmQgbmV3IGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgaG93IGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLCBhbmQgd2hvIHRoZSBjYWxsZXJzIGFyZS4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgYWJsZSB0byBqdWRnZSB0aGUgaW1wbGljYXRpb25zLgoKVGltZSB0byBjcmFjayBvcGVuIGBtbS9odWdldGxiLmNgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbWFnaWMgc3Vycm91bmRpbmcgaHVnZSBwYWdlcyBoYXBwZW5zLiBJJiMzOTtsbCByZWFkIHRocm91Z2ggdGhlIGNvZGUgaW4gdGhlIG5laWdoYm9yaG9vZCBvZiB0aGUgY2hhbmdlcyB0byBnYWluIGEgcmVhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGltcGFjdHMgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MzUwOlx0XHR9XG41MzUxOlx0XHR0bGJfZW5kX3ZtYSh0bGIsIHZtYSk7XG41MzUyOlx0XG41MzUzOlx0XHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcbjUzNTQ6XHR9XG41MzU1Olx0XG41MzU2Olx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbjUzNTc6XHRzdGF0aWMgYm9vbFxuNTM1ODpcdHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuNTM1OTpcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpyYW5nZV9zdGFydCxcbjUzNjA6XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpyYW5nZV9lbmQpXG41MzYxOlx0e1xuNTM2MjpcdFx0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVx1MDAzZXZtX3N0YXJ0LCBQVURfU0laRSk7XG41MzYzOlx0XHR1bnNpZ25lZCBsb25nIHZfZW5kID0gQUxJR05fRE9XTih2bWEtXHUwMDNldm1fZW5kLCBQVURfU0laRSk7XG41MzY0Olx0XG41MzY1Olx0XHQvKlxuNTM2NjpcdFx0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2VcbjUzNjc6XHRcdCAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpdC5cbjUzNjg6XHRcdCAqL1xuNTM2OTpcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkgfHwgISh2X2VuZCBcdTAwM2Ugdl9zdGFydCkgfHxcbjUzNzA6XHRcdCAgICAoZW5kIFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFx1MDAzZT0gdl9lbmQpKVxuNTM3MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG41MzcyOlx0XG41MzczOlx0XHQqcmFuZ2Vfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydCwgUFVEX1NJWkUpLCB2X3N0YXJ0KTtcbjUzNzQ6XHRcdCpyYW5nZV9lbmQgPSBtaW4oQUxJR04oZW5kLCBQVURfU0laRSksIHZfZW5kKTtcbjUzNzU6XHRcdHJldHVybiB0cnVlO1xuNTM3NjpcdH1cbjUzNzc6XHRcbjUzNzg6XHRzdGF0aWMgdm9pZFxuNTM3OTpcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbjUzODA6XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kKVxuNTM4MTpcdHtcbjUzODI6XHRcdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xuNTM4MzpcdFx0aWYgKCpzdGFydCBcdTAwM2UgcmFuZ2Vfc3RhcnQpXG41Mzg0Olx0XHRcdCpzdGFydCA9IHJhbmdlX3N0YXJ0O1xuNTM4NTpcdFxuNTM4NjpcdFx0aWYgKCplbmQgXHUwMDNjIHJhbmdlX2VuZClcbjUzODc6XHRcdFx0KmVuZCA9IHJhbmdlX2VuZDtcbjUzODg6XHR9XG41Mzg5Olx0XG41MzkwOlx0c3RhdGljIHZvaWRcbjUzOTE6XHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNTM5MjpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbjUzOTM6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsXG41Mzk0Olx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbjUzOTU6XHR7XG41Mzk2Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuNTM5NzpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG41Mzk4Olx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG41Mzk5Olx0XG41NDAwOlx0XHRodWdldGxiX3ZtYV9hc3NlcnRfbG9ja2VkKHZtYSk7XG41NDAxOlx0XHRpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuNTQwMjpcdFxuNTQwMzpcdFx0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXHUwMDNjIHJhbmdlX2VuZDsgYWRkcmVzcyAmIzQzOz0gUFVEX1NJWkUpIHtcbjU0MDQ6XHRcdFx0cHRlX3QgKnB0ZXA7XG41NDA1Olx0XHRcdGJvb2wgc2hhcmVkO1xuNTQwNjpcdFxuNTQwNzpcdFx0XHRwdGVwID0gaHVnZXRsYl93YWxrKHZtYSwgYWRkcmVzcywgUE1EX1NJWkUpO1xuNTQwODpcdFx0XHRpZiAoIXB0ZXApXG41NDA5Olx0XHRcdFx0Y29udGludWU7XG41NDEwOlx0XG41NDExOlx0XHRcdHNwaW5fbG9jayhodWdlX3B0ZV9sb2NrcHRyKGgsIG1tLCBwdGVwKSk7XG41NDEyOlx0XHRcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcbjU0MTM6XHRcdFx0c3Bpbl91bmxvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpO1xuNTQxNDpcdFxuNTQxNTpcdFx0XHRpZiAoc2hhcmVkKVxuNTQxNjpcdFx0XHRcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgYWRkcmVzcyxcbjU0MTc6XHRcdFx0XHRcdFx0XHQgICAgIGFkZHJlc3MgJiM0MzsgUFVEX1NJWkUpO1xuNTQxODpcdFx0fVxuNTQxOTpcdH1cbjU0MjA6XHRcbjU0MjE6XHRzdGF0aWMgdm9pZFxuNTQyMjpcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuNTQyMzpcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxuNTQyNDpcdHtcbjU0MjU6XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcbjU0MjY6XHRcbjU0Mjc6XHRcdGlmIChodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpICE9IFBNRF9TSVpFKVxuNTQyODpcdFx0XHRyZXR1cm47XG41NDI5Olx0XG41NDMwOlx0XHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxuNTQzMTpcdFx0XHRcdFx0XHRcdTAwMjZyYW5nZV9zdGFydCwgXHUwMDI2cmFuZ2VfZW5kKSlcbjU0MzI6XHRcdFx0cmV0dXJuO1xuNTQzMzpcdFxuNTQzNDpcdFx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpO1xuNTQzNTpcdH1cbjU0MzY6XHQjZWxzZVxuNTQzNzpcdHN0YXRpYyB2b2lkXG41NDM4Olx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXG41NDM5Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXG41NDQwOlx0e1xuNTQ0MTpcdH1cbjU0NDI6XHQjZW5kaWZcbjU0NDM6XHRcbjU0NDQ6XHR2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG41NDQ1Olx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG41NDQ2Olx0e1xuNTQ0NzpcdFx0aWYgKCF2bWEtXHUwMDNldm1fZmlsZSlcdC8qIGh1Z2V0bGJmc19maWxlX21tYXAgZXJyb3IgKi9cbjU0NDg6XHRcdFx0cmV0dXJuO1xuNTQ0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vaHVnZXRsYi5jYCBmb3IgQ29udGV4dCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYG1tL2h1Z2V0bGIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGxpbmVzIDU0NTAtNTUyMCBhbmQgdGhlbiBjaXJjbGluZyBiYWNrIHRvIGxpbmVzIDcwMzAtNzA2MC4gVGhlc2UgcmFuZ2VzIGFyZSB1c3VhbGx5IHdoZXJlIHNvbWUgY3JpdGljYWwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaHVnZSBwYWdlIHN1YnN5c3RlbSBhbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2Ugd2lsbCBiZSBkZWZpbmVkLCBvciB3aGVyZSB0aGUgcmVsZXZhbnQgcGFnZSB0YWJsZSBsb2dpYyBpcyBob3VzZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUsIGhvcGVmdWxseSBJIGNhbiBkZWR1Y2Ugd2hhdCYjMzk7cyBoYXBwZW5pbmcgYmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgY29udGV4dCBpcy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbnRlcmFjdGlvbnMgaW4gdGhlc2UgcmFuZ2VzIHdpdGggTlVNQSwgbWVtb3J5IGFsbG9jYXRpb24gb3IgcmVsZWFzZSwgb3IgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgZm9jdXMgb2YgbXkgY3VycmVudCBxdWVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0NTA6XHRcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcbjU0NTE6XHRcdGlmICh2bWEtXHUwMDNldm1fZmlsZSkge1xuNTQ1MjpcdFx0XHRpX21tYXBfbG9ja193cml0ZSh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuNTQ1MzpcdFx0XHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgc3RhcnQsIGVuZCk7XG41NDU0Olx0XHR9XG41NDU1Olx0fVxuNTQ1NjpcdFxuNTQ1NzpcdHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG41NDU4Olx0XHRcdCAgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG41NDU5Olx0e1xuNTQ2MDpcdFx0emFwX2ZsYWdzX3QgemFwX2ZsYWdzID0gZGV0YWlscyA/IGRldGFpbHMtXHUwMDNlemFwX2ZsYWdzIDogMDtcbjU0NjE6XHRcbjU0NjI6XHRcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpXHQvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovXG41NDYzOlx0XHRcdHJldHVybjtcbjU0NjQ6XHRcbjU0NjU6XHRcdGlmICh6YXBfZmxhZ3MgXHUwMDI2IFpBUF9GTEFHX1VOTUFQKSB7XHQvKiBmaW5hbCB1bm1hcCAqL1xuNTQ2NjpcdFx0XHQvKlxuNTQ2NzpcdFx0XHQgKiBVbmxvY2sgYW5kIGZyZWUgdGhlIHZtYSBsb2NrIGJlZm9yZSByZWxlYXNpbmcgaV9tbWFwX3J3c2VtLlxuNTQ2ODpcdFx0XHQgKiBXaGVuIHRoZSB2bWFfbG9jayBpcyBmcmVlZCwgdGhpcyBtYWtlcyB0aGUgdm1hIGluZWxpZ2libGVcbjU0Njk6XHRcdFx0ICogZm9yIHBtZCBzaGFyaW5nLiAgQW5kLCBpX21tYXBfcndzZW0gaXMgcmVxdWlyZWQgdG8gc2V0IHVwXG41NDcwOlx0XHRcdCAqIHBtZCBzaGFyaW5nLiAgVGhpcyBpcyBpbXBvcnRhbnQgYXMgcGFnZSB0YWJsZXMgZm9yIHRoaXNcbjU0NzE6XHRcdFx0ICogdW5tYXBwZWQgcmFuZ2Ugd2lsbCBiZSBhc3luY2hyb3VzbHkgZGVsZXRlZC4gIElmIHRoZSBwYWdlXG41NDcyOlx0XHRcdCAqIHRhYmxlcyBhcmUgc2hhcmVkLCB0aGVyZSB3aWxsIGJlIGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5XG41NDczOlx0XHRcdCAqIHNvbWVvbmUgZWxzZS5cbjU0NzQ6XHRcdFx0ICovXG41NDc1Olx0XHRcdF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUodm1hKTtcbjU0NzY6XHRcdH0gZWxzZSB7XG41NDc3Olx0XHRcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xuNTQ3ODpcdFx0fVxuNTQ3OTpcdFxuNTQ4MDpcdFx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuNTQ4MTpcdFx0XHRpX21tYXBfdW5sb2NrX3dyaXRlKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG41NDgyOlx0fVxuNTQ4MzpcdFxuNTQ4NDpcdHZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG41NDg1Olx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbjU0ODY6XHRcdFx0XHQgIHphcF9mbGFnc190IHphcF9mbGFncylcbjU0ODc6XHR7XG41NDg4Olx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuNTQ4OTpcdFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xuNTQ5MDpcdFxuNTQ5MTpcdFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbjU0OTI6XHRcdFx0XHRcdHN0YXJ0LCBlbmQpO1xuNTQ5MzpcdFx0LypcbjU0OTQ6XHRcdCAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzXG41NDk1Olx0XHQgKiBob2xkIGlfbW1hcF9yd3NlbSBhbmQgdGhlIGh1Z2V0bGIgVk1BIGxvY2sgZm9yIHNoYXJlZCBtYXBwaW5ncywgc28gUE1EXG41NDk2Olx0XHQgKiBzaGFyaW5nIHN0YXRlIGNhbm5vdCBjaGFuZ2UgYmVmb3JlIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKS5cbjU0OTc6XHRcdCAqL1xuNTQ5ODpcdFx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuNTQ5OTpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuNTUwMDpcdFx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCB2bWEtXHUwMDNldm1fbW0pO1xuNTUwMTpcdFxuNTUwMjpcdFx0X191bm1hcF9odWdlcGFnZV9yYW5nZShcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIGVuZCxcbjU1MDM6XHRcdFx0XHQgICAgICAgZm9saW8sIHphcF9mbGFncyk7XG41NTA0Olx0XG41NTA1Olx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuNTUwNjpcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbjU1MDc6XHR9XG41NTA4Olx0XG41NTA5Olx0LypcbjU1MTA6XHQgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBvcmlnaW5hbCBtYXBwZXIgaXMgZmFpbGluZyB0byBDT1cgYSBNQVBfUFJJVkFURVxuNTUxMTpcdCAqIG1hcHBpbmcgaXQgb3ducyB0aGUgcmVzZXJ2ZSBwYWdlIGZvci4gVGhlIGludGVudGlvbiBpcyB0byB1bm1hcCB0aGUgcGFnZVxuNTUxMjpcdCAqIGZyb20gb3RoZXIgVk1BcyBhbmQgbGV0IHRoZSBjaGlsZHJlbiBiZSBTSUdLSUxMZWQgaWYgdGhleSBhcmUgZmF1bHRpbmcgdGhlXG41NTEzOlx0ICogc2FtZSByZWdpb24uXG41NTE0Olx0ICovXG41NTE1Olx0c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNTUxNjpcdFx0XHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbjU1MTc6XHR7XG41NTE4Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuNTUxOTpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICppdGVyX3ZtYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlIGBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzAzMC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsIG92ZXJsYXBzIG9yIGNvbmZsaWN0cyB3aGVuIHdlJiMzOTtyZSBjb25zaWRlcmluZyBQZXJpcGhlcmFsIE1vZHVsZSBEcml2ZXIgKFBNRCkgc2hhcmluZy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgZm9yIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgd2hlbiBtdWx0aXBsZSBtb2R1bGVzIG1pZ2h0IGJlIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNhbWUgaGFyZHdhcmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjcml0ZXJpYSB1c2VkIHRvIGRldGVybWluZSBpZiBzaGFyaW5nICppcyogcG9zc2libGUsIGFuZCBtb3JlIGNyaXRpY2FsbHksIGhvdyB0aGUgcmFuZ2UgYWRqdXN0bWVudHMgYXJlIHBlcmZvcm1lZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFyaXNlIHdpdGggY29uY3VycmVudCBhY2Nlc3MuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LCBhbmQgSSYjMzk7bSBlYWdlciB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzAzMDpcdH1cbjcwMzE6XHRcbjcwMzI6XHQvKlxuNzAzMzpcdCAqIERldGVybWluZSBpZiBzdGFydCxlbmQgcmFuZ2Ugd2l0aGluIHZtYSBjb3VsZCBiZSBtYXBwZWQgYnkgc2hhcmVkIHBtZC5cbjcwMzQ6XHQgKiBJZiB5ZXMsIGFkanVzdCBzdGFydCBhbmQgZW5kIHRvIGNvdmVyIHJhbmdlIGFzc29jaWF0ZWQgd2l0aCBwb3NzaWJsZVxuNzAzNTpcdCAqIHNoYXJlZCBwbWQgbWFwcGluZ3MuXG43MDM2Olx0ICovXG43MDM3Olx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG43MDM4Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuNzAzOTpcdHtcbjcwNDA6XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcbjcwNDE6XHRcbjcwNDI6XHRcdGlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsXG43MDQzOlx0XHRcdFx0XHRcdFx1MDAyNnJhbmdlX3N0YXJ0LCBcdTAwMjZyYW5nZV9lbmQpKVxuNzA0NDpcdFx0XHRyZXR1cm47XG43MDQ1Olx0XG43MDQ2Olx0XHRhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpO1xuNzA0NzpcdH1cbjcwNDg6XHRcbjcwNDk6XHQvKlxuNzA1MDpcdCAqIFNlYXJjaCBmb3IgYSBzaGFyZWFibGUgcG1kIHBhZ2UgZm9yIGh1Z2V0bGIuIEluIGFueSBjYXNlIGNhbGxzIHBtZF9hbGxvYygpXG43MDUxOlx0ICogYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcHRlLiBXaGlsZSB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoZVxuNzA1MjpcdCAqICFzaGFyZWQgcG1kIGNhc2UgYmVjYXVzZSB3ZSBjYW4gYWxsb2NhdGUgdGhlIHBtZCBsYXRlciBhcyB3ZWxsLCBpdCBtYWtlcyB0aGVcbjcwNTM6XHQgKiBjb2RlIG11Y2ggY2xlYW5lci4gcG1kIGFsbG9jYXRpb24gaXMgZXNzZW50aWFsIGZvciB0aGUgc2hhcmVkIGNhc2UgYmVjYXVzZVxuNzA1NDpcdCAqIHB1ZCBoYXMgdG8gYmUgcG9wdWxhdGVkIGluc2lkZSB0aGUgc2FtZSBpX21tYXBfcndzZW0gc2VjdGlvbiAtIG90aGVyd2lzZVxuNzA1NTpcdCAqIHJhY2luZyB0YXNrcyBjb3VsZCBlaXRoZXIgbWlzcyB0aGUgc2hhcmluZyAoc2VlIGh1Z2VfcHRlX29mZnNldCkgb3Igc2VsZWN0IGFcbjcwNTY6XHQgKiBiYWQgcG1kIGZvciBzaGFyaW5nLlxuNzA1NzpcdCAqL1xuNzA1ODpcdHB0ZV90ICpodWdlX3BtZF9zaGFyZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG43MDU5Olx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZClcbjcwNjA6XHR7XG43MDYxOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZztcbjcwNjI6XHRcdGNvbnN0IHBnb2ZmX3QgaWR4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcbjcwNjM6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3ZtYTtcbjcwNjQ6XHRcdHVuc2lnbmVkIGxvbmcgc2FkZHI7XG43MDY1Olx0XHRwdGVfdCAqc3B0ZSA9IE5VTEw7XG43MDY2Olx0XHRwdGVfdCAqcHRlO1xuNzA2NzpcdFxuNzA2ODpcdFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcbjcwNjk6XHRcdG1hcHBpbmdfcm1hcF90cmVlX2ZvcmVhY2goc3ZtYSwgbWFwcGluZywgaWR4LCBpZHgpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYCBDYWxsc2l0ZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBkaXZlLiBXaGVyZSBhcmUgdGhlIGNhbGxlcnM/IEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgbG9naWMgZHJpdmluZyBpdHMgcGFydGljdWxhciBhY3Rpb25zIGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgd2UgbG9va2luZyBhdCBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIE5VTUEgY29uc2lkZXJhdGlvbnMsIHNvbWV0aGluZyByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIG9yIHBlcmhhcHMgYSBtb3JlIG9ic2N1cmUgb3B0aW1pemF0aW9uIHBhdGg/IEdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjYWxsIHNpdGVzIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCB0byB1bnJhdmVsaW5nIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBiaXQgb2YgY29kZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCYjMzk7cyB0aWVkIHRvIGFueSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgbWVtb3J5IG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ0PXZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDU6dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0zMTA9c3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0zMTQtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDozMTU6c3RhdGljIGlubGluZSB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxNi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYz01MTMxPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxNDctXHRcdFx0XHRvbGRfZW5kKTtcbm1tL2h1Z2V0bGIuYzo1MTQ4Olx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCk7XG5tbS9odWdldGxiLmMtNTE0OS1cdC8qXG4tLVxubW0vaHVnZXRsYi5jPTY1Nzc9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy02NjAxLVx0XHRcdFx0MCwgbW0sIHN0YXJ0LCBlbmQpO1xubW0vaHVnZXRsYi5jOjY2MDI6XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbm1tL2h1Z2V0bGIuYy02NjAzLVxuLS1cbm1tL2h1Z2V0bGIuYz03MDExPWJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9odWdldGxiLmMtNzAzNi0gKi9cbm1tL2h1Z2V0bGIuYzo3MDM3OnZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTcwMzgtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuLS1cbm1tL2h1Z2V0bGIuYz03MTkzPXZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtNzE5Ni1cbm1tL2h1Z2V0bGIuYzo3MTk3OnZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTcxOTgtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuLS1cbm1tL2h1Z2V0bGIuYz03NDQ0PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5zaGFyZV9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy03NDY3LVx0Lypcbm1tL2h1Z2V0bGIuYzo3NDY4Olx0ICogTm8gbmVlZCB0byBjYWxsIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpLCBiZWNhdXNlXG5tbS9odWdldGxiLmMtNzQ2OS1cdCAqIHdlIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBQVURfU0laRSBhbGlnbm1lbnQuXG4tLVxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTIwMDQtXHRcdFx0XHRhZGRyZXNzLCByYW5nZS5lbmQpO1xubW0vcm1hcC5jOjIwMDU6XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbm1tL3JtYXAuYy0yMDA2LVx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuLS1cbm1tL3JtYXAuYz0yNDY1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjUwMi1cdFx0ICovXG5tbS9ybWFwLmM6MjUwMzpcdFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsXG5tbS9ybWFwLmMtMjUwNC1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjU0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2V0bGJmcyBQTUQgU2hhcmluZyBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgaHVnZXRsYmZzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBQTUQgc2hhcmluZywgdW5tYXBwaW5nLCBhbmQgemFwcGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgbG9naWMgc2hpZnQgYW5kIGRldGVybWluZSBpdHMgc2lnbmlmaWNhbmNlIGZvciBzdGFiaWxpdHkgYW5kIHBvdGVudGlhbCBidWdzLgoKUHJldmlvdXNseSwgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpYCBpbiBgX19odWdldGxiX3phcF9iZWdpbigpYCBhbmQgYHVubWFwX2h1Z2VwYWdlX3JhbmdlKClgIHdvdWxkICphbHdheXMqIGFsaWduIHRoZSBtZW1vcnkgcmFuZ2UgdG8gUFVEIGJvdW5kYXJpZXMgaWYgdGhlcmUgd2FzIGEgcG9zc2liaWxpdHkgb2YgUE1EIHNoYXJpbmcgKG1lYW5pbmcgYFZNX01BWVNIQVJFYCB3YXMgc2V0IGFuZCB0aGUgcmFuZ2Ugc3Bhbm5lZCBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQpLiBOb3csIHRoaXMgaXMgZGlmZmVyZW50LiBJdCBsb29rcyBsaWtlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKClgIHdpbGwgb25seSBleHBhbmQgdGhlIHJhbmdlIHdoZW4gdGhlcmUgYXJlICphY3R1YWxseSogc2hhcmVkIFBNRCBwYWdlIHRhYmxlcyB3aXRoaW4gaXQuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYW4gZXhwbGljaXQgY2hlY2ssIHVzaW5nIGBodWdldGxiX3dhbGtgIGFuZCBgcHRkZXNjX3BtZF9pc19zaGFyZWQoKWAgdG8gdmVyaWZ5IFBNRCBzaGFyaW5nLiBGdXJ0aGVybW9yZSwgdGhlIHBvaW50IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaGFwcGVucyBoYXMgY2hhbmdlZC4gSW4gYF9faHVnZXRsYl96YXBfYmVnaW4oKWAsIGl0JiMzOTtzIGNhbGxlZCAqYWZ0ZXIqIGFjcXVpcmluZyB0aGUgYGlfbW1hcF9sb2NrX3dyaXRlYC4KClRoaXMgc2VlbXMgbGlrZSBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiBob3cgaHVnZXRsYmZzIGhhbmRsZXMgcmFuZ2UgYWRqdXN0bWVudHMgZHVyaW5nIHVubWFwcGluZyBvciB6YXBwaW5nLiBUaGUgbmV3IGFwcHJvYWNoIGZvY3VzZXMgb24gYWN0dWFsIHNoYXJpbmcgc3RhdGUgdW5kZXIgYSBzcGlubG9jayBpbnN0ZWFkIG9mIHBvdGVudGlhbCBzaGFyaW5nLiBUaGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb3JyZWN0bmVzcyBhcmUgc3Vic3RhbnRpYWwuCgpDb25zaWRlcmluZyB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd2l0aGluIGh1Z2V0bGJmcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6ei4gSHVnZXRsYmZzIHN5c2NhbGxzIGFyZSBlYXNpbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB1c2Vyc3BhY2UgdG9vbHMgc3VjaCBhcyBgbW1hcGAsIGBtdW5tYXBgLCBgbWFkdmlzZSBNQURWX0RPTlRORUVEYCwgYW5kIGBmYWxsb2NhdGUgUFVOQ0hfSE9MRWAuIFRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBQTUQgc2hhcmluZyBjYWxjdWxhdGlvbnMsIG1tdSBub3RpZmllciByYW5nZXMgYW5kIGhvdyB0aGUgc3lzdGVtIHVubWFwcyBodWdlIHBhZ2VzLgoKVG8gZW5zdXJlIHByb3BlciB0ZXN0aW5nLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQuIEZyb20gYGZzL0tjb25maWdgLCBJIHNlZSB0aGF0IGBIVUdFVExCRlNgIGVuYWJsZXMgYEhVR0VUTEJfUEFHRWAsIGFuZCBzdWJzZXF1ZW50bHksIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgIChpZiBgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFYCBpcyBzZWxlY3RlZCwgd2hpY2ggaXMgY29tbW9uIG9uIHg4Nl82NCkuIEkgc2hvdWxkIHNlYXJjaCB0aGUgYEtjb25maWdgIGZvciBgSFVHRVRMQkZTYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgaW1wYWN0IHRoZSBmdXp6aW5nIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipIVUdFVExCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc9MTEwPWNvbmZpZyA4eHhfQ1BVMTVcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtDUFUxNSBTaWxpY29uIEVycmF0YVwmIzM0O1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZzoxMTI6XHRkZXBlbmRzIG9uICFIVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTEzLVx0ZGVmYXVsdCB5XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNTktXHRwcm9tcHQgXCYjMzQ7SHVnZVRMQiBwYWdlIHNpemVcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjA6XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2MS1cdGRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlmIFBBR0VfU0laRV82NEtCXG4tLVxuZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL0tjb25maWc6MjUyOlx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTMtXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXG4tLVxuZnMvS2NvbmZpZz0yNjM9Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbi0tXG5mcy9LY29uZmlnLTI2NS1cdGRlZmF1bHQgblxuZnMvS2NvbmZpZzoyNjY6XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI2Ny1cdGhlbHBcbi0tXG5mcy9LY29uZmlnPTI3Nz1jb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnOjI3OTpcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxuZnMvS2NvbmZpZy0yODAtXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4tLVxuaW5pdC9LY29uZmlnPTEyOTM9Y29uZmlnIENHUk9VUF9IVUdFVExCXG5pbml0L0tjb25maWctMTI5NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBjb250cm9sbGVyXCYjMzQ7XG5pbml0L0tjb25maWc6MTI5NTpcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFXG5pbml0L0tjb25maWctMTI5Ni1cdHNlbGVjdCBQQUdFX0NPVU5URVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyODAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2VUTEIgUE1EIFBhZ2UgVGFibGUgU2hhcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AgY29uZmlndXJhdGlvbiBvcHRpb24uIEZpcnN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gVGhlIEtjb25maWcgZmlsZXMgdGVsbCBtZSB0aGF0IGl0JiMzOTtzIGEgYGRlZl9ib29sYCB0aWVkIHRvIGBIVUdFVExCX1BBR0VgLiBBbmQgbG9va2luZyBmdXJ0aGVyLCBgSFVHRVRMQl9QQUdFYCBpdHNlbGYgaXMgYSBgZGVmX2Jvb2xgIHRoYXQgZGVwZW5kcyBvbiBgSFVHRVRMQkZTYC4gU28sIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbiBib2lscyBkb3duIHRvIGBIVUdFVExCRlNgLCB3aGlsZSBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYCBpcyBlZmZlY3RpdmVseSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGRlcml2ZWQgZnJvbSB0aGUgc2VsZWN0aW9uIG9mIGBIVUdFVExCRlNgLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBIVUdFVExCRlNgIGlzIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgd2lsbCBlbmFibGUsIGFuZCB0aGUgaW50ZXJuYWwgYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AgaXMgYSBjb25zZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZm9jdXMgdG8gdGhlIGNvZGUgaXRzZWxmLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgaW1wYWN0ZWQgYnkgdGhpcyBwYXRjaC4gSW4gYG1tL2h1Z2V0bGIuY2AsIEkgc2VlIGEgZmV3IGtleSBwbGF5ZXJzOiBgX19odWdldGxiX3phcF9iZWdpbmAsIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAsIGFuZCBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4gVGhlc2UgbmFtZXMgYXJlIGFsbCBub24tc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBhcyB0aGV5JiMzOTtyZSBsaWtlbHkgZXhwb3J0ZWQuIE5vdywgdGltZSB0byBkb3VibGUtY2hlY2sgdGhlaXIgZGVjbGFyYXRpb24gaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCB0byBtYWtlIHN1cmUgdGhleSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMsIGV4cG9zZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGhlYWRlcnMgc2F5IGFib3V0IHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faHVnZXRsYl96YXBfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ1PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0ODpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjUzPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTYtXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTc6XHRcdF9faHVnZXRsYl96YXBfYmVnaW4odm1hLCBzdGFydCwgZW5kKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1OC19XG4tLVxubW0vaHVnZXRsYi5jPTU0Mzg9YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXG4tLVxubW0vaHVnZXRsYi5jLTU0NDMtXG5tbS9odWdldGxiLmM6NTQ0NDp2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTQ0NS1cdFx0XHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gaG93IGl0JiMzOTtzIGFjdHVhbGx5IGhhbmRsaW5nIHRoZSB1bm1hcHBpbmcgb2YgaHVnZSBwYWdlcy4gV2Uga25vdyB0aGUgaGlnaC1sZXZlbCBnb2FsLCBidXQgdGhlIGRldmlsJiMzOTtzIGFsd2F5cyBpbiB0aGUgZGV0YWlscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBpc24mIzM5O3QgaXQ/IEkgd2FudCB0byBleGFtaW5lIHRoZSBsb2dpYyBmbG93LCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMgKGlmIGFueSksIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgdGFibGVzLiBJcyBpdCBjb3JyZWN0bHkgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbnRlbnRpb24gdGhhdCB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBzdWJ0bGUgaW5lZmZpY2llbmNpZXMgaW4gaG93IGl0IHdhbGtzIHRoZSBwYWdlIHRhYmxlcyBhbmQgcGVyZm9ybXMgdGhlIHVubWFwcGluZz8gSSBhbHNvIHdhbnQgdG8gdmVyaWZ5IGl0IGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucyBncmFjZWZ1bGx5IGFuZCBlbnN1cmUgdGhhdCBpdCBrZWVwcyB0aGUgc3lzdGVtIGluIGEgY29uc2lzdGVudCBzdGF0ZS4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCAqZXZlcnkqIG51YW5jZSBvZiB3aGF0IHRoaXMgY29kZSBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bm1hcF9odWdlcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz0zODA9c3RhdGljIHZvaWQgaHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDE2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDE3Olx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDE4LVx0XHRcdFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDUxLVx0XHRpZiAoaHVnZXRsYl92bWFfbWFwc19wZm4odm1hLCB2X3N0YXJ0LCBwZm4pKVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDUyOlx0XHRcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKHZtYSwgdl9zdGFydCwgdl9lbmQsIE5VTEwsXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTMtXHRcdFx0XHRcdCAgICAgWkFQX0ZMQUdfRFJPUF9NQVJLRVIpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTQ2Mz1odWdldGxiX3ZtZGVsZXRlX2xpc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3Qgc3RhcnQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDgzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg0Olx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg1LVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4OC1cdFx0ICogdm1hcy4gIFRoZXJlZm9yZSwgbG9jayBpcyBub3QgaGVsZCB3aGVuIGNhbGxpbmdcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4OTpcdFx0ICogdW5tYXBfaHVnZXBhZ2VfcmFuZ2UgZm9yIHByaXZhdGUgdm1hcy5cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ5MC1cdFx0ICovXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI4PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyOS1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzItXHRcdFx0ICBzdHJ1Y3QgZm9saW8gKiwgemFwX2ZsYWdzX3QpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMzOnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTM0LVx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDM0PXN0YXRpYyBpbmxpbmUgbG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ0MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQ0MjpzdGF0aWMgaW5saW5lIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDQzLVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2h1Z2V0bGIuYz01MTMxPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxOTUtXG5tbS9odWdldGxiLmM6NTE5Njp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTE5Ny1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jPTU0NTc9dm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTQ4My1cbm1tL2h1Z2V0bGIuYzo1NDg0OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9odWdldGxiLmMtNTQ4NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy01NDk1LVx0ICogaG9sZCBpX21tYXBfcndzZW0gYW5kIHRoZSBodWdldGxiIFZNQSBsb2NrIGZvciBzaGFyZWQgbWFwcGluZ3MsIHNvIFBNRFxubW0vaHVnZXRsYi5jOjU0OTY6XHQgKiBzaGFyaW5nIHN0YXRlIGNhbm5vdCBjaGFuZ2UgYmVmb3JlIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKS5cbm1tL2h1Z2V0bGIuYy01NDk3LVx0ICovXG4tLVxubW0vaHVnZXRsYi5jLTU1MDEtXG5tbS9odWdldGxiLmM6NTUwMjpcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIHN0YXJ0LCBlbmQsXG5tbS9odWdldGxiLmMtNTUwMy1cdFx0XHQgICAgICAgZm9saW8sIHphcF9mbGFncyk7XG4tLVxubW0vaHVnZXRsYi5jPTU1MTU9c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01NTMzLVx0ICogdGhpcyBtYXBwaW5nIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlIFZNQXMsXG5tbS9odWdldGxiLmM6NTUzNDpcdCAqIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKSBpcyBjYWxsZWQgYXMgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkXG5tbS9odWdldGxiLmMtNTUzNS1cdCAqL1xuLS1cbm1tL2h1Z2V0bGIuYy01NTU3LVx0XHRpZiAoIWlzX3ZtYV9yZXN2X3NldChpdGVyX3ZtYSwgSFBBR0VfUkVTVl9PV05FUikpXG5tbS9odWdldGxiLmM6NTU1ODpcdFx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZShpdGVyX3ZtYSwgYWRkcmVzcyxcbm1tL2h1Z2V0bGIuYy01NTU5LVx0XHRcdFx0XHQgICAgIGFkZHJlc3MgJiM0MzsgaHVnZV9wYWdlX3NpemUoaCksXG4tLVxubW0vbWVtb3J5LmM9MjIwNj1zdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtMjIyOC1cdFx0XHRyZXR1cm47XG5tbS9tZW1vcnkuYzoyMjI5Olx0XHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHRsYiwgdm1hLCBzdGFydCwgZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xubW0vbWVtb3J5LmMtMjIzMC1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTE4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElzc3VlcyB3aXRoIEh1Z2VUTEIgUGFnZSBaYXBwaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBjYWxscy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2UgemFwcGluZyBtaWdodCBiZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgb2JzZXJ2ZWQgcHJvYmxlbS4gSXQgY291bGQgYmUgaW4gYG1tL21lbW9yeS5jYCwgd2hpY2ggaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBIb3dldmVyLCBJIHNob3VsZG4mIzM5O3QgbGltaXQgbXlzZWxmIHRvIHRoYXQgZGlyZWN0b3J5LiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIGNoZWNrIGV2ZXJ5d2hlcmUgcmVsZXZhbnQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHR5cGljYWwgZGVidWdnaW5nIHN0cmF0ZWd5OyB1c2luZyBgZ2l0IGdyZXBgIGFuZCBtYXliZSBzb21lIGNyb3NzLXJlZmVyZW5jaW5nIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBodWdldGxiX3phcF9iZWdpbmAgaXMgdXNlZCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl96YXBfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ1PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0ODpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNTA9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjUyLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUzOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTYtXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTc6XHRcdF9faHVnZXRsYl96YXBfYmVnaW4odm1hLCBzdGFydCwgZW5kKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1OC19XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzIwLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MzIxOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYz01NDM4PWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuLS1cbm1tL2h1Z2V0bGIuYy01NDQzLVxubW0vaHVnZXRsYi5jOjU0NDQ6dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTU0NDUtXHRcdFx0IHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4tLVxubW0vbWVtb3J5LmM9MjI5Mj12b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxuLS1cbm1tL21lbW9yeS5jLTIzMDctXG5tbS9tZW1vcnkuYzoyMzA4Olx0XHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpO1xubW0vbWVtb3J5LmMtMjMwOS1cdFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBzdGFydCwgZW5kLCBcdTAwMjZkZXRhaWxzKTtcbi0tXG5tbS9tZW1vcnkuYz0yMzMwPXZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMjM0My1cdFx0XHRcdGFkZHJlc3MsIGVuZCk7XG5tbS9tZW1vcnkuYzoyMzQ0Olx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbm1tL21lbW9yeS5jLTIzNDUtXHR1cGRhdGVfaGl3YXRlcl9yc3Modm1hLVx1MDAzZXZtX21tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMjIKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlVExCIFBNRCBQYWdlIFRhYmxlIFNoYXJpbmcgTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgaGF2ZW4mIzM5O3QgdG91Y2hlZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGZpbGVzIG9yIHN5bWJvbHMgYmV5b25kIHRoZSBpbml0aWFsIHNjb3BlLiBUaGUgZGlmZiBzdW1tYXJ5IGZvY3VzZXMgb24gYG1tL2h1Z2V0bGIuY2AsIGFuZCB0aGF0JiMzOTtzIGV4cGVjdGVkLiBTcGVjaWZpY2FsbHksIGl0IGxpc3RzIHNldmVyYWwgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBQTUQgc2hhcmluZyBhbmQgcmFuZ2UgYWRqdXN0bWVudHMuCgpOZXh0LCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzLiBCYXNlZCBvbiB0aGUgY29kZSwgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBhcmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbjogYF9faHVnZXRsYl96YXBfYmVnaW5gLCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBhbmQgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB3ZSYjMzk7bGwgbmVlZCB0byB3YXRjaC4KCk5vdywgbGV0JiMzOTtzIGdldCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIGNvcmUgY29uZmlndXJhdGlvbiBpcyBgSFVHRVRMQkZTYCwgYW5kIHRoYXQgcHVsbHMgaW4gYEhVR0VUTEJfUEFHRWAuIFRoZSBjcnVjaWFsIGFzcGVjdCBoZXJlIGlzIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgLCB3aGljaCBkZXBlbmRzIG9uIGBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVgIGFuZCBgU1BMSVRfUE1EX1BUTE9DS1NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIG9yIGNvbnNpZGVyZWQuIEkgdGhpbmsgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgIGFyZSBzdWZmaWNpZW50LiBUaGUgZmluYWwgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgWyYjMzQ7SFVHRVRMQkZTJiMzNDssICYjMzQ7SFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HJiMzNDtdLgoKQWxyaWdodCwgdGltZSB0byBzeW50aGVzaXplIHRoaXMgaW5mb3JtYXRpb24uIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGxvZ2ljIGZvciBIdWdlVExCIFBNRCBwYWdlIHRhYmxlIHNoYXJpbmcuIEluc3RlYWQgb2YgYnJvYWRseSBleHBhbmRpbmcgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIHJhbmdlcyB1bmRlciBQTUQgc2hhcmluZywgd2UmIzM5O3JlIG1ha2luZyBpdCBtb3JlIHByZWNpc2UsIGV4cGFuZGluZyBvbmx5IHdoZW4gKmFjdHVhbCogUE1EIHRhYmxlIHNoYXJpbmcgZXhpc3RzIHdpdGhpbiB0aGUgcmFuZ2UuIFRoaXMgaW1wYWN0cyB0aGUgcmFuZ2UgYWRqdXN0bWVudCBjb2RlIHdpdGhpbiBgX19odWdldGxiX3phcF9iZWdpbmAsIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAsIGFuZCBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB0cmlnZ2VyZWQgYnkgdmFyaW91cyBIdWdlVExCIG9wZXJhdGlvbnMgbGlrZSBtbWFwLCBtdW5tYXAsIG1hZHZpc2UsIGFuZCBob2xlIHB1bmNoLCBzbyB0aGF0JiMzOTtzIHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgd291bGQgbGllLgoKT2theSwgdGhhdCYjMzk7cyBldmVyeXRoaW5nLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHVnZXRsYl96YXBfYmVnaW4mIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBodWdldGxiIFBNRCBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYnkgY2hlY2tpbmcgd2hldGhlciBQTUQgdGFibGVzIGFyZSBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHRoZSByYW5nZSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgZXhwYW5kaW5nIGFsbCBwb3RlbnRpYWxseSBzaGFyZWFibGUgcmFuZ2VzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBodWdldGxiIG1lbW9yeSB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYmVoYXZpb3IgcmVhY2hhYmxlIHZpYSBodWdldGxiZnMgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHVnZXRsYl96YXBfYmVnaW4mIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBodWdldGxiIFBNRCBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYnkgY2hlY2tpbmcgd2hldGhlciBQTUQgdGFibGVzIGFyZSBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHRoZSByYW5nZSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgZXhwYW5kaW5nIGFsbCBwb3RlbnRpYWxseSBzaGFyZWFibGUgcmFuZ2VzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBodWdldGxiIG1lbW9yeSB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYmVoYXZpb3IgcmVhY2hhYmxlIHZpYSBodWdldGxiZnMgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIFBNRCBwYWdlIHRhYmxlIHNoYXJpbmcgcmFuZ2UgYWRqdXN0bWVudHMgKGluIGBtbS9odWdldGxiLmNgKSB0byBvbmx5IGV4cGFuZCB0aGUgdW5tYXBwaW5nL3phcCBhZGRyZXNzIHJhbmdlIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHJhbmdlX3N0YXJ0YCBhbmQgYHJhbmdlX2VuZGApIGFyZSBwcm9wZXJseSBhc3NpZ25lZCBiZWZvcmUgdXNlIHdoZW4gYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYCByZXR1cm5zIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGFjY2Vzc2VkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSB0YWJsZSB3YWxrcywgbG9ja2luZywgb3IgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydGlvbiBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhOTBhMTg4NTQ3ZmEyOWYwOTU2YWZmZTdjMGU2ODU5YjJiMjdhM2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowMToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi5lODBlMTExODM4NWYwIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC01MzUzLDE2ICYjNDM7NTM1MywxMDUgQEAgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2godGxiLCB2bWEpOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcKJiM0MztzdGF0aWMgYm9vbAomIzQzO3BtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpyYW5nZV9zdGFydCwKJiM0MzsJCQkgICB1bnNpZ25lZCBsb25nICpyYW5nZV9lbmQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZfc3RhcnQgPSBBTElHTih2bWEtJmd0O3ZtX3N0YXJ0LCBQVURfU0laRSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdl9lbmQgPSBBTElHTl9ET1dOKHZtYS0mZ3Q7dm1fZW5kLCBQVURfU0laRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHZtYSBuZWVkcyB0byBzcGFuIGF0IGxlYXN0IG9uZSBhbGlnbmVkIFBVRCBzaXplLCBhbmQgdGhlIHJhbmdlCiYjNDM7CSAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpdC4KJiM0MzsJICovCiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUFZU0hBUkUpIHx8ICEodl9lbmQgJmd0OyB2X3N0YXJ0KSB8fAomIzQzOwkgICAgKGVuZCAmbHQ7PSB2X3N0YXJ0KSB8fCAoc3RhcnQgJmd0Oz0gdl9lbmQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqcmFuZ2Vfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydCwgUFVEX1NJWkUpLCB2X3N0YXJ0KTsKJiM0MzsJKnJhbmdlX2VuZCA9IG1pbihBTElHTihlbmQsIFBVRF9TSVpFKSwgdl9lbmQpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsCiYjNDM7CQkJICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZCkKJiM0Mzt7CiYjNDM7CS8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqLwomIzQzOwlpZiAoKnN0YXJ0ICZndDsgcmFuZ2Vfc3RhcnQpCiYjNDM7CQkqc3RhcnQgPSByYW5nZV9zdGFydDsKJiM0MzsKJiM0MzsJaWYgKCplbmQgJmx0OyByYW5nZV9lbmQpCiYjNDM7CQkqZW5kID0gcmFuZ2VfZW5kOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNfaW5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtJmd0O3ZtX21tOwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiYjNDM7CiYjNDM7CWh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQodm1hKTsKJiM0MzsJaV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcpOwomIzQzOwomIzQzOwlmb3IgKGFkZHJlc3MgPSByYW5nZV9zdGFydDsgYWRkcmVzcyAmbHQ7IHJhbmdlX2VuZDsgYWRkcmVzcyAmIzQzOz0gUFVEX1NJWkUpIHsKJiM0MzsJCXB0ZV90ICpwdGVwOwomIzQzOwkJYm9vbCBzaGFyZWQ7CiYjNDM7CiYjNDM7CQlwdGVwID0gaHVnZXRsYl93YWxrKHZtYSwgYWRkcmVzcywgUE1EX1NJWkUpOwomIzQzOwkJaWYgKCFwdGVwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTsKJiM0MzsJCXNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTsKJiM0MzsJCXNwaW5fdW5sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTsKJiM0MzsKJiM0MzsJCWlmIChzaGFyZWQpCiYjNDM7CQkJYWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCBhZGRyZXNzLAomIzQzOwkJCQkJCSAgICAgYWRkcmVzcyAmIzQzOyBQVURfU0laRSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmVuZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDsKJiM0MzsKJiM0MzsJaWYgKGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkgIT0gUE1EX1NJWkUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsCiYjNDM7CQkJCQkmYW1wO3JhbmdlX3N0YXJ0LCAmYW1wO3JhbmdlX2VuZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNfaW5fcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LAomIzQzOwkJCSAgICAgdW5zaWduZWQgbG9uZyAqZW5kKQomIzQzO3sKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCkKIHsKIAlpZiAoIXZtYS0mZ3Q7dm1fZmlsZSkJLyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqLwogCQlyZXR1cm47CiAKLQlhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBzdGFydCwgZW5kKTsKIAlodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHZtYSk7Ci0JaWYgKHZtYS0mZ3Q7dm1fZmlsZSkKJiM0MzsJaWYgKHZtYS0mZ3Q7dm1fZmlsZSkgewogCQlpX21tYXBfbG9ja193cml0ZSh2bWEtJmd0O3ZtX2ZpbGUtJmd0O2ZfbWFwcGluZyk7CiYjNDM7CQlhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgc3RhcnQsIGVuZCk7CiYjNDM7CX0KIH0KIAogdm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKQEAgLTU0MDEsNyAmIzQzOzU0OTAsMTIgQEAgdm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAogCW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZhbXA7cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS0mZ3Q7dm1fbW0sCiAJCQkJc3RhcnQsIGVuZCk7Ci0JYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQpOwomIzQzOwkvKgomIzQzOwkgKiBPbmx5IGV4cGFuZCBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBUaGUgY2FsbGVycwomIzQzOwkgKiBob2xkIGlfbW1hcF9yd3NlbSBhbmQgdGhlIGh1Z2V0bGIgVk1BIGxvY2sgZm9yIHNoYXJlZCBtYXBwaW5ncywgc28gUE1ECiYjNDM7CSAqIHNoYXJpbmcgc3RhdGUgY2Fubm90IGNoYW5nZSBiZWZvcmUgX191bm1hcF9odWdlcGFnZV9yYW5nZSgpLgomIzQzOwkgKi8KJiM0MzsJYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyh2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsICZhbXA7cmFuZ2UuZW5kKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIAl0bGJfZ2F0aGVyX21tdSgmYW1wO3RsYiwgdm1hLSZndDt2bV9tbSk7CiAKQEAgLTY5NDMsMjMgJiM0Mzs3MDM3LDEzIEBAIGJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpCiB7Ci0JdW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLSZndDt2bV9zdGFydCwgUFVEX1NJWkUpLAotCQl2X2VuZCA9IEFMSUdOX0RPV04odm1hLSZndDt2bV9lbmQsIFBVRF9TSVpFKTsKJiM0MzsJdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kOwogCi0JLyoKLQkgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZQotCSAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpbi4KLQkgKi8KLQlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kICZndDsgdl9zdGFydCkgfHwKLQkJKCplbmQgJmx0Oz0gdl9zdGFydCkgfHwgKCpzdGFydCAmZ3Q7PSB2X2VuZCkpCiYjNDM7CWlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsCiYjNDM7CQkJCQkmYW1wO3JhbmdlX3N0YXJ0LCAmYW1wO3JhbmdlX2VuZCkpCiAJCXJldHVybjsKIAotCS8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqLwotCWlmICgqc3RhcnQgJmd0OyB2X3N0YXJ0KQotCQkqc3RhcnQgPSBBTElHTl9ET1dOKCpzdGFydCwgUFVEX1NJWkUpOwotCi0JaWYgKCplbmQgJmx0OyB2X2VuZCkKLQkJKmVuZCA9IEFMSUdOKCplbmQsIFBVRF9TSVpFKTsKJiM0MzsJYWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTsKIH0KIAogLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjEKCQkJCQkJCW91dHB1dDogMTgyCgkJCQkJCQl0aG91Z2h0czogODUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYWdlIFRhYmxlIFNoYXJpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGBtbS9odWdldGxiLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgYXJvdW5kIHNoYXJpbmcgYW5kIHVubWFwcGluZyBodWdldGxiIHBhZ2UgdGFibGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCAqd2hhdCogZXhhY3RseSBpdCYjMzk7cyBjaGFuZ2luZyBhbmQgdGhlbiBhc3Nlc3MgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB3aGljaCBpbmNsdWRlcyBjaGVja2luZyBmb3IgS01TQU4gY29uY2VybnMuCgpGaXJzdCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgaW50cm9kdWNpbmcgZnVuY3Rpb25zIGxpa2UgYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYCwgYGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmdgLCBhbmQgc29tZSB2YXJpYXRpb25zIG9mIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBob3cgYF9faHVnZXRsYl96YXBfYmVnaW5gIGFuZCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGhhbmRsZSBzaGFyZWQgUE1Ecy4gSXQmIzM5O3MgYWxzbyByZWZhY3RvcmluZyBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSB0aGVyZSBhbnkgcmVkIGZsYWdzPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGZvciBhbnl0aGluZyB0aGF0IHNtYWNrcyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgIG9yIHRoZSBsaWtlKSwgYW55IGRhbmdlcm91cyBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgb3BlbiB0aGUgZG9vciB0byBLTVNBTiBpc3N1ZXMuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNgLiBJdCBwYXNzZXMgYHJhbmdlX3N0YXJ0YCBhbmQgYHJhbmdlX2VuZGAgYXMgcG9pbnRlcnMgdG8gYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYC4gV2l0aGluIHRoYXQgZnVuY3Rpb24sIHRoZXJlJiMzOTtzIGEgY2hlY2s6IHRoZSBmdW5jdGlvbiBpbml0aWFsaXplcyB0aG9zZSB2YXJpYWJsZXMgKmNvbmRpdGlvbmFsbHkqLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgVk1BIGlzIHNoYXJlYWJsZSBhbmQgdGhlIHN0YXJ0L2VuZCByYW5nZXMgYXJlIHZhbGlkLiBIb3dldmVyLCBpZiB0aGF0IGNoZWNrIGZhaWxzLCBgYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc2AgaW1tZWRpYXRlbHkgcmV0dXJucy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgc2FmZSBiZWNhdXNlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzYCBjaGVja3MgaXRzIHJldHVybiB2YWx1ZS4gSW5zaWRlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlYCwgbG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYGFkZHJlc3NgLCBgcHRlcGAsIGFuZCBgc2hhcmVkYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBkaXJlY3QgY29waWVzIHRvIHVzZXJzcGFjZSBhbmQgbm8gb2J2aW91cyBtZW1vcnkgbGVha3MuIFNvIGZhciwgaXQgc2VlbXMgY2xlYW47IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKRGVlcGVyIGNvbnNpZGVyYXRpb25zOiBJIGhhdmUgdG8gY29uc2lkZXIgbWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggcGFnZSB0YWJsZXMgYW5kIFRMQiBpbnZhbGlkYXRpb24uIFdlJiMzOTtyZSBhbHNvIHRhbGtpbmcgYWJvdXQgcmFuZ2UgYm91bmRhcmllcywgYW5kIHRob3NlIGNhbiBiZSB0cmlja3kuIEJ1dCwgaG9uZXN0bHksIGFueSBibGF0YW50IFVBRiBvciBsb2NraW5nIGJ1Z3Mgd291bGQgbGlrZWx5IGJlIGNhdWdodCBieSBLQVNBTiBvciBMT0NLREVQLCBvciB0aGUgTU0gZGVidWcgc3R1ZmYuIE15IGFzc2Vzc21lbnQgaXMgdGhhdCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgaGVyZS4KCk5vdywgYSBmaW5hbCBjaGVjay4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgS01TQU4gdGVzdGluZyBpcyBuZWVkZWQuIFRoZSBydWxlIGlzLCB3ZSAqZG9uJiMzOTt0KiBydW4gS01TQU4gaWYgS0FTQU4gKG9yIHNvbWV0aGluZyBlbHNlKSBjYW4gY2F0Y2ggdGhlIGlzc3VlLiBXZSBvbmx5IG5lZWQgS01TQU4gaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aDogMSkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U7IDIpIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOyAzKSBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyOyBvciA0KSBkYW5nZXJvdXMgYm91bmRzIGNoZWNrcy4gTm9uZSBvZiB0aGVzZSBzY2VuYXJpb3MgYXBwbHkuCgpTbywgYmFzZWQgb24gbXkgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IHJlcXVpcmVkIGhlcmUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBQTUQgcGFnZSB0YWJsZSBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIChpbiBgbW0vaHVnZXRsYi5jYCkgdG8gb25seSBleHBhbmQgdGhlIHVubWFwcGluZy96YXAgYWRkcmVzcyByYW5nZSBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGByYW5nZV9zdGFydGAgYW5kIGByYW5nZV9lbmRgKSBhcmUgcHJvcGVybHkgYXNzaWduZWQgYmVmb3JlIHVzZSB3aGVuIGBwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZWAgcmV0dXJucyB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY3JlYXRlZCBvciBhY2Nlc3NlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhZ2UgdGFibGUgd2Fsa3MsIGxvY2tpbmcsIG9yIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRpb24gY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgUE1EIHBhZ2UgdGFibGUgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyAoaW4gYG1tL2h1Z2V0bGIuY2ApIHRvIG9ubHkgZXhwYW5kIHRoZSB1bm1hcHBpbmcvemFwIGFkZHJlc3MgcmFuZ2UgZm9yIFBVRHMgd2hvc2UgUE1EIHRhYmxlIGlzIGFjdHVhbGx5IHNoYXJlZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgcmFuZ2Vfc3RhcnRgIGFuZCBgcmFuZ2VfZW5kYCkgYXJlIHByb3Blcmx5IGFzc2lnbmVkIGJlZm9yZSB1c2Ugd2hlbiBgcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2VgIHJldHVybnMgdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgYWNjZXNzZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIHRhYmxlIHdhbGtzLCBsb2NraW5nLCBvciBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0aW9uIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MjEuMjg2NTYzMDE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMzczMTY0MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odWdldGxiX3phcF9iZWdpblwiLFxuICAgIFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcImFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgUE1EIHBhZ2UgdGFibGUgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyAoaW4gYG1tL2h1Z2V0bGIuY2ApIHRvIG9ubHkgZXhwYW5kIHRoZSB1bm1hcHBpbmcvemFwIGFkZHJlc3MgcmFuZ2UgZm9yIFBVRHMgd2hvc2UgUE1EIHRhYmxlIGlzIGFjdHVhbGx5IHNoYXJlZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgcmFuZ2Vfc3RhcnRgIGFuZCBgcmFuZ2VfZW5kYCkgYXJlIHByb3Blcmx5IGFzc2lnbmVkIGJlZm9yZSB1c2Ugd2hlbiBgcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2VgIHJldHVybnMgdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgYWNjZXNzZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIHRhYmxlIHdhbGtzLCBsb2NraW5nLCBvciBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0aW9uIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgaHVnZXRsYiBQTUQgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyBkdXJpbmcgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJ5IGNoZWNraW5nIHdoZXRoZXIgUE1EIHRhYmxlcyBhcmUgYWN0dWFsbHkgc2hhcmVkIGFjcm9zcyB0aGUgcmFuZ2UgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IGV4cGFuZGluZyBhbGwgcG90ZW50aWFsbHkgc2hhcmVhYmxlIHJhbmdlcy4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgaHVnZXRsYiBtZW1vcnkgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJlaGF2aW9yIHJlYWNoYWJsZSB2aWEgaHVnZXRsYmZzIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAxOjIxLjI4NjU2ODU0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMjM1NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2E5MGExODg1NDdmYTI5ZjA5NTZhZmZlN2MwZTY4NTliMmIyN2EzZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowMToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA3ODU3NzI4NDU3OTUyLi5lODBlMTExODM4NWYwIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC01MzUzLDE2ICs1MzUzLDEwNSBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2godGxiLCB2bWEpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbitzdGF0aWMgYm9vbFxcbitwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgKnJhbmdlX3N0YXJ0LFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpyYW5nZV9lbmQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVxcdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpO1xcbitcXHR1bnNpZ25lZCBsb25nIHZfZW5kID0gQUxJR05fRE9XTih2bWEtXFx1MDAzZXZtX2VuZCwgUFVEX1NJWkUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2VcXG4rXFx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFxcdTAwM2Ugdl9zdGFydCkgfHxcXG4rXFx0ICAgIChlbmQgXFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFxcdTAwM2U9IHZfZW5kKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0KnJhbmdlX3N0YXJ0ID0gbWF4KEFMSUdOX0RPV04oc3RhcnQsIFBVRF9TSVpFKSwgdl9zdGFydCk7XFxuK1xcdCpyYW5nZV9lbmQgPSBtaW4oQUxJR04oZW5kLCBQVURfU0laRSksIHZfZW5kKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK2FkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcXG4re1xcbitcXHQvKiBFeHRlbmQgdGhlIHJhbmdlIHRvIGJlIFBVRCBhbGlnbmVkIGZvciBhIHdvcnN0IGNhc2Ugc2NlbmFyaW8gKi9cXG4rXFx0aWYgKCpzdGFydCBcXHUwMDNlIHJhbmdlX3N0YXJ0KVxcbitcXHRcXHQqc3RhcnQgPSByYW5nZV9zdGFydDtcXG4rXFxuK1xcdGlmICgqZW5kIFxcdTAwM2MgcmFuZ2VfZW5kKVxcbitcXHRcXHQqZW5kID0gcmFuZ2VfZW5kO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZFxcbithZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cXHUwMDNldm1fbW07XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcXG4rXFxuK1xcdGh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcXG4rXFx0aV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcpO1xcbitcXG4rXFx0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXFx1MDAzYyByYW5nZV9lbmQ7IGFkZHJlc3MgKz0gUFVEX1NJWkUpIHtcXG4rXFx0XFx0cHRlX3QgKnB0ZXA7XFxuK1xcdFxcdGJvb2wgc2hhcmVkO1xcbitcXG4rXFx0XFx0cHRlcCA9IGh1Z2V0bGJfd2Fsayh2bWEsIGFkZHJlc3MsIFBNRF9TSVpFKTtcXG4rXFx0XFx0aWYgKCFwdGVwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNwaW5fbG9jayhodWdlX3B0ZV9sb2NrcHRyKGgsIG1tLCBwdGVwKSk7XFxuK1xcdFxcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpO1xcbitcXG4rXFx0XFx0aWYgKHNoYXJlZClcXG4rXFx0XFx0XFx0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCBhZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFkZHJlc3MgKyBQVURfU0laRSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuK1xcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcXG4rXFxuK1xcdGlmIChodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpICE9IFBNRF9TSVpFKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmFuZ2Vfc3RhcnQsIFxcdTAwMjZyYW5nZV9lbmQpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIHZvaWRcXG4rYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuK1xcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxcbit7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiB2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbiB7XFxuIFxcdGlmICghdm1hLVxcdTAwM2V2bV9maWxlKVxcdC8qIGh1Z2V0bGJmc19maWxlX21tYXAgZXJyb3IgKi9cXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgc3RhcnQsIGVuZCk7XFxuIFxcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSlcXG4rXFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSkge1xcbiBcXHRcXHRpX21tYXBfbG9ja193cml0ZSh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuK1xcdFxcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBzdGFydCwgZW5kKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkBAIC01NDAxLDcgKzU0OTAsMTIgQEAgdm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFxuIFxcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFxcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVxcdTAwM2V2bV9tbSxcXG4gXFx0XFx0XFx0XFx0c3RhcnQsIGVuZCk7XFxuLVxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxuK1xcdC8qXFxuK1xcdCAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzXFxuK1xcdCAqIGhvbGQgaV9tbWFwX3J3c2VtIGFuZCB0aGUgaHVnZXRsYiBWTUEgbG9jayBmb3Igc2hhcmVkIG1hcHBpbmdzLCBzbyBQTURcXG4rXFx0ICogc2hhcmluZyBzdGF0ZSBjYW5ub3QgY2hhbmdlIGJlZm9yZSBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkuXFxuK1xcdCAqL1xcbitcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kKTtcXG4gXFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXFx1MDAyNnJhbmdlKTtcXG4gXFx0dGxiX2dhdGhlcl9tbXUoXFx1MDAyNnRsYiwgdm1hLVxcdTAwM2V2bV9tbSk7XFxuIFxcbkBAIC02OTQzLDIzICs3MDM3LDEzIEBAIGJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVxcdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpLFxcbi1cXHRcXHR2X2VuZCA9IEFMSUdOX0RPV04odm1hLVxcdTAwM2V2bV9lbmQsIFBVRF9TSVpFKTtcXG4rXFx0dW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2VcXG4tXFx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGluLlxcbi1cXHQgKi9cXG4tXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFxcdTAwM2Ugdl9zdGFydCkgfHxcXG4tXFx0XFx0KCplbmQgXFx1MDAzYz0gdl9zdGFydCkgfHwgKCpzdGFydCBcXHUwMDNlPSB2X2VuZCkpXFxuK1xcdGlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZyYW5nZV9zdGFydCwgXFx1MDAyNnJhbmdlX2VuZCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xcbi1cXHRpZiAoKnN0YXJ0IFxcdTAwM2Ugdl9zdGFydClcXG4tXFx0XFx0KnN0YXJ0ID0gQUxJR05fRE9XTigqc3RhcnQsIFBVRF9TSVpFKTtcXG4tXFxuLVxcdGlmICgqZW5kIFxcdTAwM2Mgdl9lbmQpXFxuLVxcdFxcdCplbmQgPSBBTElHTigqZW5kLCBQVURfU0laRSk7XFxuK1xcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7XFxuIH1cXG4gXFxuIC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAxOjIxLjY1NzY3NTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxMzExNTAwMjA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHVnZXRsYl96YXBfYmVnaW5cIixcbiAgICBcInVubWFwX2h1Z2VwYWdlX3JhbmdlXCIsXG4gICAgXCJhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgaHVnZXRsYiBQTUQgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyBkdXJpbmcgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJ5IGNoZWNraW5nIHdoZXRoZXIgUE1EIHRhYmxlcyBhcmUgYWN0dWFsbHkgc2hhcmVkIGFjcm9zcyB0aGUgcmFuZ2UgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IGV4cGFuZGluZyBhbGwgcG90ZW50aWFsbHkgc2hhcmVhYmxlIHJhbmdlcy4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgaHVnZXRsYiBtZW1vcnkgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJlaGF2aW9yIHJlYWNoYWJsZSB2aWEgaHVnZXRsYmZzIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhOTBhMTg4NTQ3ZmEyOWYwOTU2YWZmZTdjMGU2ODU5YjJiMjdhM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowMToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNzg1NzcyODQ1Nzk1Mi4uZTgwZTExMTgzODVmMCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtNTM1MywxNiArNTM1MywxMDUgQEAgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaCh0bGIsIHZtYSk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4rc3RhdGljIGJvb2xcbitwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqcmFuZ2Vfc3RhcnQsXG4rXHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqcmFuZ2VfZW5kKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS1cdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpO1xuK1x0dW5zaWduZWQgbG9uZyB2X2VuZCA9IEFMSUdOX0RPV04odm1hLVx1MDAzZXZtX2VuZCwgUFVEX1NJWkUpO1xuK1xuK1x0LypcbitcdCAqIHZtYSBuZWVkcyB0byBzcGFuIGF0IGxlYXN0IG9uZSBhbGlnbmVkIFBVRCBzaXplLCBhbmQgdGhlIHJhbmdlXG4rXHQgKiBtdXN0IGJlIGF0IGxlYXN0IHBhcnRpYWxseSB3aXRoaW4gaXQuXG4rXHQgKi9cbitcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpIHx8ICEodl9lbmQgXHUwMDNlIHZfc3RhcnQpIHx8XG4rXHQgICAgKGVuZCBcdTAwM2M9IHZfc3RhcnQpIHx8IChzdGFydCBcdTAwM2U9IHZfZW5kKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0KnJhbmdlX3N0YXJ0ID0gbWF4KEFMSUdOX0RPV04oc3RhcnQsIFBVRF9TSVpFKSwgdl9zdGFydCk7XG4rXHQqcmFuZ2VfZW5kID0gbWluKEFMSUdOKGVuZCwgUFVEX1NJWkUpLCB2X2VuZCk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWRcbithZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbit7XG4rXHQvKiBFeHRlbmQgdGhlIHJhbmdlIHRvIGJlIFBVRCBhbGlnbmVkIGZvciBhIHdvcnN0IGNhc2Ugc2NlbmFyaW8gKi9cbitcdGlmICgqc3RhcnQgXHUwMDNlIHJhbmdlX3N0YXJ0KVxuK1x0XHQqc3RhcnQgPSByYW5nZV9zdGFydDtcbitcbitcdGlmICgqZW5kIFx1MDAzYyByYW5nZV9lbmQpXG4rXHRcdCplbmQgPSByYW5nZV9lbmQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9lbmQpXG4re1xuK1x0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuK1xuK1x0aHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZCh2bWEpO1xuK1x0aV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbitcbitcdGZvciAoYWRkcmVzcyA9IHJhbmdlX3N0YXJ0OyBhZGRyZXNzIFx1MDAzYyByYW5nZV9lbmQ7IGFkZHJlc3MgKz0gUFVEX1NJWkUpIHtcbitcdFx0cHRlX3QgKnB0ZXA7XG4rXHRcdGJvb2wgc2hhcmVkO1xuK1xuK1x0XHRwdGVwID0gaHVnZXRsYl93YWxrKHZtYSwgYWRkcmVzcywgUE1EX1NJWkUpO1xuK1x0XHRpZiAoIXB0ZXApXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNwaW5fbG9jayhodWdlX3B0ZV9sb2NrcHRyKGgsIG1tLCBwdGVwKSk7XG4rXHRcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcbitcdFx0c3Bpbl91bmxvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpO1xuK1xuK1x0XHRpZiAoc2hhcmVkKVxuK1x0XHRcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgYWRkcmVzcyxcbitcdFx0XHRcdFx0XHQgICAgIGFkZHJlc3MgKyBQVURfU0laRSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kO1xuK1xuK1x0aWYgKGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkgIT0gUE1EX1NJWkUpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsXG4rXHRcdFx0XHRcdFx1MDAyNnJhbmdlX3N0YXJ0LCBcdTAwMjZyYW5nZV9lbmQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIHZvaWRcbithZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbitcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmVuZClcbit7XG4rfVxuKyNlbmRpZlxuK1xuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiB7XG4gXHRpZiAoIXZtYS1cdTAwM2V2bV9maWxlKVx0LyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqL1xuIFx0XHRyZXR1cm47XG4gXG4tXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBzdGFydCwgZW5kKTtcbiBcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcbi1cdGlmICh2bWEtXHUwMDNldm1fZmlsZSlcbitcdGlmICh2bWEtXHUwMDNldm1fZmlsZSkge1xuIFx0XHRpX21tYXBfbG9ja193cml0ZSh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuK1x0XHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgc3RhcnQsIGVuZCk7XG4rXHR9XG4gfVxuIFxuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5AQCAtNTQwMSw3ICs1NDkwLDEyIEBAIHZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0c3RhcnQsIGVuZCk7XG4tXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbitcdC8qXG4rXHQgKiBPbmx5IGV4cGFuZCBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBUaGUgY2FsbGVyc1xuK1x0ICogaG9sZCBpX21tYXBfcndzZW0gYW5kIHRoZSBodWdldGxiIFZNQSBsb2NrIGZvciBzaGFyZWQgbWFwcGluZ3MsIHNvIFBNRFxuK1x0ICogc2hhcmluZyBzdGF0ZSBjYW5ub3QgY2hhbmdlIGJlZm9yZSBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkuXG4rXHQgKi9cbitcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbiBcbkBAIC02OTQzLDIzICs3MDM3LDEzIEBAIGJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVx1MDAzZXZtX3N0YXJ0LCBQVURfU0laRSksXG4tXHRcdHZfZW5kID0gQUxJR05fRE9XTih2bWEtXHUwMDNldm1fZW5kLCBQVURfU0laRSk7XG4rXHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7XG4gXG4tXHQvKlxuLVx0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2Vcbi1cdCAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpbi5cbi1cdCAqL1xuLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkgfHwgISh2X2VuZCBcdTAwM2Ugdl9zdGFydCkgfHxcbi1cdFx0KCplbmQgXHUwMDNjPSB2X3N0YXJ0KSB8fCAoKnN0YXJ0IFx1MDAzZT0gdl9lbmQpKVxuK1x0aWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCxcbitcdFx0XHRcdFx0XHUwMDI2cmFuZ2Vfc3RhcnQsIFx1MDAyNnJhbmdlX2VuZCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xuLVx0aWYgKCpzdGFydCBcdTAwM2Ugdl9zdGFydClcbi1cdFx0KnN0YXJ0ID0gQUxJR05fRE9XTigqc3RhcnQsIFBVRF9TSVpFKTtcbi1cbi1cdGlmICgqZW5kIFx1MDAzYyB2X2VuZClcbi1cdFx0KmVuZCA9IEFMSUdOKCplbmQsIFBVRF9TSVpFKTtcbitcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7XG4gfVxuIFxuIC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowMToyMS42NTc2NzcxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNTQyOTAzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG1tL2h1Z2V0bGIuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3Mga2lja3MgaW46IHRpbWUgdG8gZGlzc2VjdCB0aGlzLiBMZXQncyBzZWUgd2hhdCB0aGV5J3JlIHRyeWluZyB0byBkby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNoYW5nZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBodWdlIHBhZ2UgbWFuYWdlbWVudC5cblxuRmlyc3QsIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgaW5zcGVjdCB0aGUgcGF0Y2ggaXRzZWxmLCBvZiBjb3Vyc2UuIEJ1dCBiZWZvcmUgSSBldmVuIGdldCBpbnRvIGxpbmUtYnktbGluZSBkaWZmcywgSSdsbCB3YW50IHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBhbmQgY29udGV4dC5cblxuVGhlbiwgSSdsbCByZWFjaCBmb3IgbXkgdG9vbHMg4oCTIHByb2JhYmx5IGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHdoYXQgcGFydHMgb2YgYG1tL2h1Z2V0bGIuY2AgYXJlIGFmZmVjdGVkLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBzeW1ib2xzIHRoYXQgbWlnaHQgY29tZSBpbnRvIHBsYXkgaGVyZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBpbXBhY3QgYW5kIHBvdGVudGlhbCBzaWRlLWVmZmVjdHMgb2YgdGhpcyBtb2RpZmljYXRpb24uIFdoYXQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXJlIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IG5ldyBmZWF0dXJlcyBiZWluZyBpbnRyb2R1Y2VkIG9yIGV4aXN0aW5nIGJlaGF2aW9ycyBiZWluZyBtb2RpZmllZD8gSSdtIGdvaW5nIHRvIGRldGVybWluZSB3aGljaCBhcmVhcyBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiB0aGlzIHBhdGNoIGludGVyc2VjdHMgd2l0aC5cblxuSSdtIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBtaWdodCBiZS5cbkknbSBsb29raW5nIGZvciB0aGUgcmVsYXRlZCBzeW1ib2xzIHRvIHNlZSBpZiB0aGUgcGF0Y2ggbWFrZXMgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlbSwgYW5kIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzeW1ib2xzLlxuXG5UaGUgY29yZSBvZiBteSBhbmFseXNpcyB3aWxsIHJldm9sdmUgYXJvdW5kIGhvdyB0aGlzIHBhdGNoIGltcGFjdHMgdGhlIG92ZXJhbGwgaHVnZSBwYWdlIHN1YnN5c3RlbS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBJJ2xsIG5lZWQgdG8gYW5zd2VyIGFib3V0IHBlcmZvcm1hbmNlLCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBhbGlnbnMgd2l0aCB0aGUgZXN0YWJsaXNoZWQgZGVzaWduIHByaW5jaXBsZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBob2xlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MjkuNzExOTcxMTU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTkwMzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz00ODg0PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00OTMwLVxcbm1tL2h1Z2V0bGIuYzo0OTMxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxubW0vaHVnZXRsYi5jLTQ5MzItXFx0XFx0LyogSWYgdGhlIHBhZ2V0YWJsZXMgYXJlIHNoYXJlZCwgdGhlcmUgaXMgbm90aGluZyB0byBkbyAqL1xcbi0tXFxubW0vaHVnZXRsYi5jPTUxOTY9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzNTUtXFxubW0vaHVnZXRsYi5jOjUzNTY6I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG5tbS9odWdldGxiLmMtNTM1Ny1zdGF0aWMgYm9vbFxcbi0tXFxubW0vaHVnZXRsYi5jPTY5NDE9bG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02OTgxLVxcbm1tL2h1Z2V0bGIuYzo2OTgyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxubW0vaHVnZXRsYi5jLTY5ODMtc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV90YWJsZV9zaGFyZWFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jPTcxNjA9dm9pZCBodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcxNzEtXFxubW0vaHVnZXRsYi5jOjcxNzI6I2Vsc2UgLyogIUNPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcgKi9cXG5tbS9odWdldGxiLmMtNzE3My1cXG4tLVxcbm1tL2h1Z2V0bGIuYz03MjAyPWJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MjA1LX1cXG5tbS9odWdldGxiLmM6NzIwNjojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyAqL1xcbm1tL2h1Z2V0bGIuYy03MjA3LVxcbi0tXFxubW0vaHVnZXRsYi5jPTczMDI9X193ZWFrIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9tYXNrX2xhc3RfcGFnZShzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy03MzAzLXtcXG5tbS9odWdldGxiLmM6NzMwNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbm1tL2h1Z2V0bGIuYy03MzA1LVxcdGlmIChodWdlX3BhZ2Vfc2l6ZShoKSA9PSBQTURfU0laRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MjkuNzYzOTY4MjY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4MzEzOTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgSHVudCBmb3IgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgZm9jdXMgaXMgZmluZGluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBlbnRyaWVzIHJlbGF0ZWQgdG8gYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBwcmV0dHkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSwgc28gdGhlIHNlYXJjaCBzaG91bGRuJ3QgYmUgdG9vIGJyb2FkLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIGhpZXJhcmNoeS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSAqZXhhY3QqIGVudHJ5IG9yIGVudHJpZXMgcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoaXMgYmVoYXZpb3IuIFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgcG9zc2libGUgdmFsdWVzLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIFRoaXMgd2lsbCBpbnZvbHZlIHVzaW5nIHN0YW5kYXJkIHRvb2xzIG9yIG1ldGhvZHMgZm9yIG5hdmlnYXRpbmcgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtIC0gaG9wZWZ1bGx5LCBpdCdzIG5vdCBidXJpZWQgdG9vIGRlZXAgd2l0aGluIHNvbWUgb2JzY3VyZSBmaWxlLlxuXG5PbmNlIEkndmUgcGlucG9pbnRlZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBlbnRyeSwgSSdsbCBhc3Nlc3MgdGhlIGNvbnRleHQuIFdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgcmVsYXRlZD8gV2hhdCBmZWF0dXJlcyBkZXBlbmQgb24gdGhpcz8gV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBleGlzdGVuY2U/IEJhc2ljYWxseSwgSSdtIGFpbWluZyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoaXMgb3B0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIGtlcm5lbCBsYW5kc2NhcGUuIEknbGwgbmVlZCB0byBleHRyYWN0IGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgSSBjYW4gZnJvbSB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZiwgYW5kIG1heWJlIGxvb2sgaW50byByZWxhdGVkIHNvdXJjZSBmaWxlcyBpZiBuZWNlc3NhcnkuIFRoaXMgd2lsbCBoZWxwIG1lIHRydWx5IHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIHdvcmtzIGFuZCB3aGVyZSBpdCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQ1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MzIuNDQ3MTA5ODY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODE3MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTQ4ODQ9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ5MzAtXFxubW0vaHVnZXRsYi5jOjQ5MzE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG5tbS9odWdldGxiLmMtNDkzMi1cXHRcXHQvKiBJZiB0aGUgcGFnZXRhYmxlcyBhcmUgc2hhcmVkLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvICovXFxuLS1cXG5tbS9odWdldGxiLmM9NTE5Nj12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTM1NS1cXG5tbS9odWdldGxiLmM6NTM1NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbm1tL2h1Z2V0bGIuYy01MzU3LXN0YXRpYyBib29sXFxuLS1cXG5tbS9odWdldGxiLmM9Njk0MT1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY5ODEtXFxubW0vaHVnZXRsYi5jOjY5ODI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG5tbS9odWdldGxiLmMtNjk4My1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3RhYmxlX3NoYXJlYWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnN2bWEsXFxuLS1cXG5tbS9odWdldGxiLmM9NzE2MD12b2lkIGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdldGxiLmMtNzE3MS1cXG5tbS9odWdldGxiLmM6NzE3MjojZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyAqL1xcbm1tL2h1Z2V0bGIuYy03MTczLVxcbi0tXFxubW0vaHVnZXRsYi5jPTcyMDI9Ym9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcyMDUtfVxcbm1tL2h1Z2V0bGIuYzo3MjA2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HICovXFxubW0vaHVnZXRsYi5jLTcyMDctXFxuLS1cXG5tbS9odWdldGxiLmM9NzMwMj1fX3dlYWsgdW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYi5jLTczMDMte1xcbm1tL2h1Z2V0bGIuYzo3MzA0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxubW0vaHVnZXRsYi5jLTczMDUtXFx0aWYgKGh1Z2VfcGFnZV9zaXplKGgpID09IFBNRF9TSVpFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowMTozMi40OTY5MzY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkyNjYyMTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZm9ybSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkh1bnRpbmcgRG93biBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYC4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgaHVnZSBwYWdlcyBhcmUgaGFuZGxlZCwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gaXMga2V5IHRvIFsgKmluc2VydCByZWxldmFudCB0ZWNobmljYWwgY29udGV4dCBoZXJlLCBzcGVjaWZpYyB0byB0aGUgdXNlcidzIGV4cGVydGlzZSwgZS5nLiwgb3B0aW1pemluZyBtZW1vcnkgYWxsb2NhdGlvbiwgZGVidWdnaW5nIHBhZ2UgdGFibGUgaXNzdWVzLCBvciB1bmRlcnN0YW5kaW5nIE5VTUEgYmVoYXZpb3VyKl0uXG5cbkknbSB0aGlua2luZyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBpcyB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMgb2YgdGhlIGtlcm5lbCBzb3VyY2UuIFRob3NlIGFyZSB0aGUgY29uZmlndXJhdGlvbiBtZW51cyB0aGF0IHRoZSBrZXJuZWwgdXNlcyB0byBkZXRlcm1pbmUgd2hhdCBmZWF0dXJlcyBhcmUgYnVpbHQgaW50byBhIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSB3aG9sZSByZXBvc2l0b3J5IHRvIGVuc3VyZSBJIGZpbmQgYWxsIGluc3RhbmNlcywgdG8gYWNjb3VudCBmb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRlZmluaXRpb25zIG9yIGNvbmRpdGlvbmFsIGJ1aWxkcy4gVGhlcmUgbWlnaHQgYmUgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbG9naWMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gZG8gYSBnbG9iYWwgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTY5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MzguNDIzNTYxNzY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDExMTc2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI3Nz1jb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4tLVxcbmZzL0tjb25maWctMjgyLVxcbmZzL0tjb25maWc6MjgzOmNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG5mcy9LY29uZmlnLTI4NC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6NDAuMDY0Njg3ODg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNzczMzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgZnMvS2NvbmZpZ2AuIEkndmUgZ290IGEgZmVlbGluZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBzcGVjaWZpYyBmaWxlIHN5c3RlbSBvcHRpb25zLCBsaWtlbHkgaW4gdGhlIGFyZWEgb2YgYSBwYXJ0aWN1bGFyIGZpbGVzeXN0ZW0sIGxldCdzIHNheSBhcm91bmQgbGluZSAyODMuIFRpbWUgdG8gZmlyZSB1cCBteSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLiBJJ2xsIG5lZWQgdG8gc2VlIHdoYXQncyBkZWZpbmVkIHRoZXJlLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBjb25maWcgb3B0aW9ucy4gVGhlcmUgbWF5IGJlIGEgc3VidGxlIGRlcGVuZGVuY3kgdGhhdCBJIGFtIG92ZXJsb29raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6NDIuMDAyNDI1ODg1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHQgIChib290IGNvbW1hbmQgbGluZSkgb3IgaHVnZXRsYl9vcHRpbWl6ZV92bWVtbWFwIChzeXNjdGwpLlxcbiAyNzE6XFx0ZW5kaWYgIyBIVUdFVExCRlNcXG4gMjcyOlxcdFxcbiAyNzM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRVxcbiAyNzQ6XFx0XFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuIDI3NTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDI3NjpcXHRcXG4gMjc3OlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNzg6XFx0XFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuIDI3OTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcXG4gMjgwOlxcdFxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4gMjgxOlxcdFxcdHNlbGVjdCBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUIGlmIEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVFxcbiAyODI6XFx0XFxuIDI4MzpcXHRjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuIDI4NDpcXHRcXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4gMjg1OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFxcdTAwMjZcXHUwMDI2IFNQTElUX1BNRF9QVExPQ0tTXFxuIDI4NjpcXHRcXG4gMjg3OlxcdGNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuIDI4ODpcXHRcXHRib29sXFxuIDI4OTpcXHRcXG4gMjkwOlxcdHNvdXJjZSBcXFwiZnMvY29uZmlnZnMvS2NvbmZpZ1xcXCJcXG4gMjkxOlxcdHNvdXJjZSBcXFwiZnMvZWZpdmFyZnMvS2NvbmZpZ1xcXCJcXG4gMjkyOlxcdFxcbiAyOTM6XFx0ZW5kbWVudVxcbiAyOTQ6XFx0XFxuIDI5NTpcXHRtZW51Y29uZmlnIE1JU0NfRklMRVNZU1RFTVNcXG4gMjk2OlxcdFxcdGJvb2wgXFxcIk1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXNcXFwiXFxuIDI5NzpcXHRcXHRkZWZhdWx0IHlcXG4gMjk4OlxcdFxcdGhlbHBcXG4gMjk5OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHZhcmlvdXMgbWlzY2VsbGFuZW91c1xcbiAzMDA6XFx0XFx0ICBmaWxlc3lzdGVtcywgc3VjaCBhcyBmaWxlc3lzdGVtcyB0aGF0IGNhbWUgZnJvbSBvdGhlclxcbiAzMDE6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtcy5cXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxcbiAzMDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAxOjQyLjAwMjUzMjk0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUxNjM0NTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBIVUdFVExCRlMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgSFVHRVRMQkZTYCBhY3R1YWxseSByZWxpZXMgb24gZnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludC4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIHRhcmdldGluZyBgZnMvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQgb2YgZGVwZW5kZW5jeSB3b3VsZCBiZSBkZWZpbmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0LCB3aGVuIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGRpcmVjdGx5IGltcGFjdCB3aGV0aGVyIG9yIG5vdCBgSFVHRVRMQkZTYCBjYW4gZXZlbiBiZSBjb21waWxlZCwgb3IgZnVuY3Rpb25zIGNvcnJlY3RseS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcywgcG9zc2libHkgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGZpbGUgc3lzdGVtIGNvcmUgY29tcG9uZW50cy4gSXQncyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgZGVidWdnaW5nIGV4ZXJjaXNlIOKAkyBqdXN0IG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSdtIGFudGljaXBhdGluZyB0aGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHJlcmVxdWlzaXRlIHNldHRpbmdzIG5lZWRlZCBmb3IgYEhVR0VUTEJGU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjAyLjUxODg4MTg3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NzcyNjE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQkZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjA0LjYwNjYxODMzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDM4ODUzNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBiZXR0ZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBvdXQgdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDI0NS0yNzUgaW4gYGZzL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvcmUgb3B0aW9ucyBhcmUgbGlrZWx5IGRlZmluZWQgb3IgaW5jbHVkZWQgZm9yIGFueSBrZXkgcGFyYW1ldGVycyBiZWluZyBleHBvc2VkIHRvIHRoZSB1c2VyLiBHaXZlbiB3aGF0IEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCwgaXQncyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBgc291cmNlYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgcHVsbCBpbiBvdGhlciBzZWN0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiwgYXMgdGhpcyBjYW4gb2Z0ZW4gaGlkZSBzb21lIG9mIHRoZSBpbXBvcnRhbnQgZGV0YWlscy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHNvbGlkIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowMjoxMC4wNDU0NzU0MjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNDY6XFx0XFxuIDI0NzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjQ4OlxcdFxcdGRlZl9ib29sIG5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNjc6XFx0XFx0aGVscFxcbiAyNjg6XFx0XFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cXG4gMjY5OlxcdFxcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxcbiAyNzA6XFx0XFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cXG4gMjcxOlxcdGVuZGlmICMgSFVHRVRMQkZTXFxuIDI3MjpcXHRcXG4gMjczOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gMjc0OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbiAyNzU6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiAyNzY6XFx0XFxuIDI3NzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gMjc4OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbiAyNzk6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjEwLjA0NTU1Nzg5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTEyMjc0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVgIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFYC4gSSBrbm93IHdoYXQgaXQgKm1lYW5zKiDigJMgdGhlIGRlc2lyZSBmb3IgdGhlIGFyY2hpdGVjdHVyZSB0byBzdXBwb3J0IHNoYXJlZCBodWdlIFBNRHMg4oCTIGJ1dCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlICoqcHJhY3RpY2FsIGltcGxpY2F0aW9ucyoqIG9mIGl0cyBzdXBwb3J0LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGFyY2hpdGVjdHVyZXMgYWN0dWFsbHkgZGVmaW5lIGFuZCBlbmFibGUgdGhpcyBmZWF0dXJlLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGxpa2VseSBgS2NvbmZpZ2AgZmlsZXMgd2l0aGluIHRoZSBgYXJjaC9gIGRpcmVjdG9yaWVzLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggYXJjaGl0ZWN0dXJlcyBjb25kaXRpb25hbGx5IHNlbGVjdCBvciBkZXBlbmQgb24gdGhpcyBvcHRpb24uIEnigJlsbCBsaWtlbHkgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb25zLiBCZXlvbmQgYSBzaW1wbGUgZGVmaW5pdGlvbiwgSSdsbCBiZSBpbnRlcmVzdGVkIGluIGFueSBhc3NvY2lhdGVkIGZlYXR1cmVzIG9yIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGFsc28gZW5hYmxlZCBvciBkaXNhYmxlZCBieSBpdHMgcHJlc2VuY2UuIFRoaXMgY291bGQgcmFuZ2UgZnJvbSBzcGVjaWZpYyBtZW1vcnkgbW9kZWwgYXNzdW1wdGlvbnMgdG8gcGVyZm9ybWFuY2UtcmVsYXRlZCBjb25zaWRlcmF0aW9ucy4gTXkgZ29hbCBpcyB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZlYXR1cmUncyByb2xlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmVzIGl0IHRvdWNoZXMuIEknbSBub3QganVzdCBsb29raW5nIGZvciBhIHllcy9ubyBhbnN3ZXI7IEkgd2FudCB0byBzZWUgdGhlICp3aHkqIGFuZCB0aGUgKmhvdyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjE2LjE1NzgzNjA4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MTcwNzgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTExMTc9Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG4tLVxcbmFyY2gvS2NvbmZpZy0xMTIwLVxcbmFyY2gvS2NvbmZpZzoxMTIxOmNvbmZpZyBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcXG5hcmNoL0tjb25maWctMTEyMi1cXHRib29sXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy05NC1cXHRzZWxlY3QgQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTXFxuYXJjaC9hcm02NC9LY29uZmlnOjk1OlxcdHNlbGVjdCBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUgaWYgQVJNNjRfNEtfUEFHRVMgfHwgKEFSTTY0XzE2S19QQUdFUyBcXHUwMDI2XFx1MDAyNiAhQVJNNjRfVkFfQklUU18zNilcXG5hcmNoL2FybTY0L0tjb25maWctOTYtXFx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTg4LVxcdHNlbGVjdCBBUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCIGlmICFSSVNDVl9JU0FfU1ZOQVBPVFxcbmFyY2gvcmlzY3YvS2NvbmZpZzo4OTpcXHRzZWxlY3QgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIGlmIDY0QklUXFxuYXJjaC9yaXNjdi9LY29uZmlnLTkwLVxcdHNlbGVjdCBBUkNIX1dBTlRfTERfT1JQSEFOX1dBUk5cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNDgtXFx0c2VsZWN0IEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcXG5hcmNoL3g4Ni9LY29uZmlnOjE0OTpcXHRzZWxlY3QgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFXFx0XFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0xNTAtXFx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxcbi0tXFxuZnMvS2NvbmZpZz0yODM9Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbmZzL0tjb25maWctMjg0LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWc6Mjg1OlxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFxcdTAwMjZcXHUwMDI2IFNQTElUX1BNRF9QVExPQ0tTXFxuZnMvS2NvbmZpZy0yODYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjE3Ljc0OTU0OTgyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ1NzA3NDAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEh1Z2UgUGFnZXM6IEVuYWJsaW5nIFNoYXJlZCBQTUQgUGFnZSBUYWJsZXMqKlxuXG5BbHJpZ2h0LCBzbyAqSFVHRVRMQkZTKiBpcyB0aGUga2V5IGhlcmUg4oCTIGl0J3MgdGhlIGVuYWJsZXIuIFdlIGtub3cgdGhhdCBgSFVHRVRMQkZTYCB1bmxvY2tzIGBIVUdFVExCX1BBR0VgLCBhbmQgZnJvbSB0aGVyZSB3ZSBnZXQgYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCB0aGF0IGVuYWJsZXMgb24geDg2XzY0LCBhcm02NCwgYW5kIHRoZSBvdGhlciBhcmNoaXRlY3R1cmVzLiBXZSdyZSBsb29raW5nIGF0IHNvbWUgc2VyaW91cyBvcHRpbWl6YXRpb25zIGFyb3VuZCBodWdlIHBhZ2UgbWFuYWdlbWVudCBhdCB0aGUgUE1EIGxldmVsLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byBkaXNzZWN0IHRoaXMgcGF0Y2gsIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdOKAmXMgaW1wbGVtZW50ZWQuIEknbSBnb2luZyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9kaWZpY2F0aW9ucyBhbmQgbmV3IGZ1bmN0aW9ucy4gTGV0J3MgdHJhY2UgYmFjayBob3cgZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQsIGFuZCB3aG8gdGhlIGNhbGxlcnMgYXJlLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byBiZSBhYmxlIHRvIGp1ZGdlIHRoZSBpbXBsaWNhdGlvbnMuXG5cblRpbWUgdG8gY3JhY2sgb3BlbiBgbW0vaHVnZXRsYi5jYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWFnaWMgc3Vycm91bmRpbmcgaHVnZSBwYWdlcyBoYXBwZW5zLiBJJ2xsIHJlYWQgdGhyb3VnaCB0aGUgY29kZSBpbiB0aGUgbmVpZ2hib3Job29kIG9mIHRoZSBjaGFuZ2VzIHRvIGdhaW4gYSByZWFsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaW1wYWN0cyB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDI6MzkuMjA2NjI3MzMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUzNTA6XFx0XFx0fVxcbjUzNTE6XFx0XFx0dGxiX2VuZF92bWEodGxiLCB2bWEpO1xcbjUzNTI6XFx0XFxuNTM1MzpcXHRcXHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcXG41MzU0OlxcdH1cXG41MzU1OlxcdFxcbjUzNTY6XFx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG41MzU3OlxcdHN0YXRpYyBib29sXFxuNTM1ODpcXHRwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG41MzU5OlxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpyYW5nZV9zdGFydCxcXG41MzYwOlxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKnJhbmdlX2VuZClcXG41MzYxOlxcdHtcXG41MzYyOlxcdFxcdHVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS1cXHUwMDNldm1fc3RhcnQsIFBVRF9TSVpFKTtcXG41MzYzOlxcdFxcdHVuc2lnbmVkIGxvbmcgdl9lbmQgPSBBTElHTl9ET1dOKHZtYS1cXHUwMDNldm1fZW5kLCBQVURfU0laRSk7XFxuNTM2NDpcXHRcXG41MzY1OlxcdFxcdC8qXFxuNTM2NjpcXHRcXHQgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZVxcbjUzNjc6XFx0XFx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGl0LlxcbjUzNjg6XFx0XFx0ICovXFxuNTM2OTpcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUFZU0hBUkUpIHx8ICEodl9lbmQgXFx1MDAzZSB2X3N0YXJ0KSB8fFxcbjUzNzA6XFx0XFx0ICAgIChlbmQgXFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFxcdTAwM2U9IHZfZW5kKSlcXG41MzcxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41MzcyOlxcdFxcbjUzNzM6XFx0XFx0KnJhbmdlX3N0YXJ0ID0gbWF4KEFMSUdOX0RPV04oc3RhcnQsIFBVRF9TSVpFKSwgdl9zdGFydCk7XFxuNTM3NDpcXHRcXHQqcmFuZ2VfZW5kID0gbWluKEFMSUdOKGVuZCwgUFVEX1NJWkUpLCB2X2VuZCk7XFxuNTM3NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41Mzc2OlxcdH1cXG41Mzc3OlxcdFxcbjUzNzg6XFx0c3RhdGljIHZvaWRcXG41Mzc5OlxcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG41MzgwOlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgdW5zaWduZWQgbG9uZyByYW5nZV9lbmQpXFxuNTM4MTpcXHR7XFxuNTM4MjpcXHRcXHQvKiBFeHRlbmQgdGhlIHJhbmdlIHRvIGJlIFBVRCBhbGlnbmVkIGZvciBhIHdvcnN0IGNhc2Ugc2NlbmFyaW8gKi9cXG41MzgzOlxcdFxcdGlmICgqc3RhcnQgXFx1MDAzZSByYW5nZV9zdGFydClcXG41Mzg0OlxcdFxcdFxcdCpzdGFydCA9IHJhbmdlX3N0YXJ0O1xcbjUzODU6XFx0XFxuNTM4NjpcXHRcXHRpZiAoKmVuZCBcXHUwMDNjIHJhbmdlX2VuZClcXG41Mzg3OlxcdFxcdFxcdCplbmQgPSByYW5nZV9lbmQ7XFxuNTM4ODpcXHR9XFxuNTM4OTpcXHRcXG41MzkwOlxcdHN0YXRpYyB2b2lkXFxuNTM5MTpcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjUzOTI6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG41MzkzOlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsXFxuNTM5NDpcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcXG41Mzk1OlxcdHtcXG41Mzk2OlxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XFxuNTM5NzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cXHUwMDNldm1fbW07XFxuNTM5ODpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XFxuNTM5OTpcXHRcXG41NDAwOlxcdFxcdGh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcXG41NDAxOlxcdFxcdGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG41NDAyOlxcdFxcbjU0MDM6XFx0XFx0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXFx1MDAzYyByYW5nZV9lbmQ7IGFkZHJlc3MgKz0gUFVEX1NJWkUpIHtcXG41NDA0OlxcdFxcdFxcdHB0ZV90ICpwdGVwO1xcbjU0MDU6XFx0XFx0XFx0Ym9vbCBzaGFyZWQ7XFxuNTQwNjpcXHRcXG41NDA3OlxcdFxcdFxcdHB0ZXAgPSBodWdldGxiX3dhbGsodm1hLCBhZGRyZXNzLCBQTURfU0laRSk7XFxuNTQwODpcXHRcXHRcXHRpZiAoIXB0ZXApXFxuNTQwOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41NDEwOlxcdFxcbjU0MTE6XFx0XFx0XFx0c3Bpbl9sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcXG41NDEyOlxcdFxcdFxcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcXG41NDEzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcXG41NDE0OlxcdFxcbjU0MTU6XFx0XFx0XFx0aWYgKHNoYXJlZClcXG41NDE2OlxcdFxcdFxcdFxcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgYWRkcmVzcyxcXG41NDE3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYWRkcmVzcyArIFBVRF9TSVpFKTtcXG41NDE4OlxcdFxcdH1cXG41NDE5OlxcdH1cXG41NDIwOlxcdFxcbjU0MjE6XFx0c3RhdGljIHZvaWRcXG41NDIyOlxcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxcbjU0MjM6XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXFxuNTQyNDpcXHR7XFxuNTQyNTpcXHRcXHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7XFxuNTQyNjpcXHRcXG41NDI3OlxcdFxcdGlmIChodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpICE9IFBNRF9TSVpFKVxcbjU0Mjg6XFx0XFx0XFx0cmV0dXJuO1xcbjU0Mjk6XFx0XFxuNTQzMDpcXHRcXHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxcbjU0MzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJhbmdlX3N0YXJ0LCBcXHUwMDI2cmFuZ2VfZW5kKSlcXG41NDMyOlxcdFxcdFxcdHJldHVybjtcXG41NDMzOlxcdFxcbjU0MzQ6XFx0XFx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpO1xcbjU0MzU6XFx0fVxcbjU0MzY6XFx0I2Vsc2VcXG41NDM3OlxcdHN0YXRpYyB2b2lkXFxuNTQzODpcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcXG41NDM5OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxcbjU0NDA6XFx0e1xcbjU0NDE6XFx0fVxcbjU0NDI6XFx0I2VuZGlmXFxuNTQ0MzpcXHRcXG41NDQ0OlxcdHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG41NDQ1OlxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbjU0NDY6XFx0e1xcbjU0NDc6XFx0XFx0aWYgKCF2bWEtXFx1MDAzZXZtX2ZpbGUpXFx0LyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqL1xcbjU0NDg6XFx0XFx0XFx0cmV0dXJuO1xcbjU0NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjM5LjIwNzEwMTQ2M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTk4OTE5MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG1tL2h1Z2V0bGIuY2AgZm9yIENvbnRleHQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgbW0vaHVnZXRsYi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgNTQ1MC01NTIwIGFuZCB0aGVuIGNpcmNsaW5nIGJhY2sgdG8gbGluZXMgNzAzMC03MDYwLiBUaGVzZSByYW5nZXMgYXJlIHVzdWFsbHkgd2hlcmUgc29tZSBjcml0aWNhbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBodWdlIHBhZ2Ugc3Vic3lzdGVtIGFuZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB3aWxsIGJlIGRlZmluZWQsIG9yIHdoZXJlIHRoZSByZWxldmFudCBwYWdlIHRhYmxlIGxvZ2ljIGlzIGhvdXNlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZSwgaG9wZWZ1bGx5IEkgY2FuIGRlZHVjZSB3aGF0J3MgaGFwcGVuaW5nIGJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgSSdsbCBzZWUgd2hhdCB0aGUgY29udGV4dCBpcy4gSSdtIGV4cGVjdGluZyBzb21lIGludGVyYWN0aW9ucyBpbiB0aGVzZSByYW5nZXMgd2l0aCBOVU1BLCBtZW1vcnkgYWxsb2NhdGlvbiBvciByZWxlYXNlLCBvciBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBmb2N1cyBvZiBteSBjdXJyZW50IHF1ZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDI6NDIuMjA2MDIzOTU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQ1MDpcXHRcXHRodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHZtYSk7XFxuNTQ1MTpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9maWxlKSB7XFxuNTQ1MjpcXHRcXHRcXHRpX21tYXBfbG9ja193cml0ZSh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuNTQ1MzpcXHRcXHRcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgc3RhcnQsIGVuZCk7XFxuNTQ1NDpcXHRcXHR9XFxuNTQ1NTpcXHR9XFxuNTQ1NjpcXHRcXG41NDU3OlxcdHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuNTQ1ODpcXHRcXHRcXHQgICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbjU0NTk6XFx0e1xcbjU0NjA6XFx0XFx0emFwX2ZsYWdzX3QgemFwX2ZsYWdzID0gZGV0YWlscyA/IGRldGFpbHMtXFx1MDAzZXphcF9mbGFncyA6IDA7XFxuNTQ2MTpcXHRcXG41NDYyOlxcdFxcdGlmICghdm1hLVxcdTAwM2V2bV9maWxlKVxcdC8qIGh1Z2V0bGJmc19maWxlX21tYXAgZXJyb3IgKi9cXG41NDYzOlxcdFxcdFxcdHJldHVybjtcXG41NDY0OlxcdFxcbjU0NjU6XFx0XFx0aWYgKHphcF9mbGFncyBcXHUwMDI2IFpBUF9GTEFHX1VOTUFQKSB7XFx0LyogZmluYWwgdW5tYXAgKi9cXG41NDY2OlxcdFxcdFxcdC8qXFxuNTQ2NzpcXHRcXHRcXHQgKiBVbmxvY2sgYW5kIGZyZWUgdGhlIHZtYSBsb2NrIGJlZm9yZSByZWxlYXNpbmcgaV9tbWFwX3J3c2VtLlxcbjU0Njg6XFx0XFx0XFx0ICogV2hlbiB0aGUgdm1hX2xvY2sgaXMgZnJlZWQsIHRoaXMgbWFrZXMgdGhlIHZtYSBpbmVsaWdpYmxlXFxuNTQ2OTpcXHRcXHRcXHQgKiBmb3IgcG1kIHNoYXJpbmcuICBBbmQsIGlfbW1hcF9yd3NlbSBpcyByZXF1aXJlZCB0byBzZXQgdXBcXG41NDcwOlxcdFxcdFxcdCAqIHBtZCBzaGFyaW5nLiAgVGhpcyBpcyBpbXBvcnRhbnQgYXMgcGFnZSB0YWJsZXMgZm9yIHRoaXNcXG41NDcxOlxcdFxcdFxcdCAqIHVubWFwcGVkIHJhbmdlIHdpbGwgYmUgYXN5bmNocm91c2x5IGRlbGV0ZWQuICBJZiB0aGUgcGFnZVxcbjU0NzI6XFx0XFx0XFx0ICogdGFibGVzIGFyZSBzaGFyZWQsIHRoZXJlIHdpbGwgYmUgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnlcXG41NDczOlxcdFxcdFxcdCAqIHNvbWVvbmUgZWxzZS5cXG41NDc0OlxcdFxcdFxcdCAqL1xcbjU0NzU6XFx0XFx0XFx0X19odWdldGxiX3ZtYV91bmxvY2tfd3JpdGVfZnJlZSh2bWEpO1xcbjU0NzY6XFx0XFx0fSBlbHNlIHtcXG41NDc3OlxcdFxcdFxcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xcbjU0Nzg6XFx0XFx0fVxcbjU0Nzk6XFx0XFxuNTQ4MDpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9maWxlKVxcbjU0ODE6XFx0XFx0XFx0aV9tbWFwX3VubG9ja193cml0ZSh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuNTQ4MjpcXHR9XFxuNTQ4MzpcXHRcXG41NDg0OlxcdHZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuNTQ4NTpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjU0ODY6XFx0XFx0XFx0XFx0ICB6YXBfZmxhZ3NfdCB6YXBfZmxhZ3MpXFxuNTQ4NzpcXHR7XFxuNTQ4ODpcXHRcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbjU0ODk6XFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbjU0OTA6XFx0XFxuNTQ5MTpcXHRcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cXHUwMDNldm1fbW0sXFxuNTQ5MjpcXHRcXHRcXHRcXHRcXHRzdGFydCwgZW5kKTtcXG41NDkzOlxcdFxcdC8qXFxuNTQ5NDpcXHRcXHQgKiBPbmx5IGV4cGFuZCBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBUaGUgY2FsbGVyc1xcbjU0OTU6XFx0XFx0ICogaG9sZCBpX21tYXBfcndzZW0gYW5kIHRoZSBodWdldGxiIFZNQSBsb2NrIGZvciBzaGFyZWQgbWFwcGluZ3MsIHNvIFBNRFxcbjU0OTY6XFx0XFx0ICogc2hhcmluZyBzdGF0ZSBjYW5ub3QgY2hhbmdlIGJlZm9yZSBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkuXFxuNTQ5NzpcXHRcXHQgKi9cXG41NDk4OlxcdFxcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQpO1xcbjU0OTk6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXFx1MDAyNnJhbmdlKTtcXG41NTAwOlxcdFxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIHZtYS1cXHUwMDNldm1fbW0pO1xcbjU1MDE6XFx0XFxuNTUwMjpcXHRcXHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKFxcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIGVuZCxcXG41NTAzOlxcdFxcdFxcdFxcdCAgICAgICBmb2xpbywgemFwX2ZsYWdzKTtcXG41NTA0OlxcdFxcbjU1MDU6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuNTUwNjpcXHRcXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG41NTA3OlxcdH1cXG41NTA4OlxcdFxcbjU1MDk6XFx0LypcXG41NTEwOlxcdCAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIG9yaWdpbmFsIG1hcHBlciBpcyBmYWlsaW5nIHRvIENPVyBhIE1BUF9QUklWQVRFXFxuNTUxMTpcXHQgKiBtYXBwaW5nIGl0IG93bnMgdGhlIHJlc2VydmUgcGFnZSBmb3IuIFRoZSBpbnRlbnRpb24gaXMgdG8gdW5tYXAgdGhlIHBhZ2VcXG41NTEyOlxcdCAqIGZyb20gb3RoZXIgVk1BcyBhbmQgbGV0IHRoZSBjaGlsZHJlbiBiZSBTSUdLSUxMZWQgaWYgdGhleSBhcmUgZmF1bHRpbmcgdGhlXFxuNTUxMzpcXHQgKiBzYW1lIHJlZ2lvbi5cXG41NTE0OlxcdCAqL1xcbjU1MTU6XFx0c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjU1MTY6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbjU1MTc6XFx0e1xcbjU1MTg6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcXG41NTE5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqaXRlcl92bWE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjQyLjIwNjI5OTQ0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI0NTA0OTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDcwMzAuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsIG92ZXJsYXBzIG9yIGNvbmZsaWN0cyB3aGVuIHdlJ3JlIGNvbnNpZGVyaW5nIFBlcmlwaGVyYWwgTW9kdWxlIERyaXZlciAoUE1EKSBzaGFyaW5nLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCB3aGVuIG11bHRpcGxlIG1vZHVsZXMgbWlnaHQgYmUgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2FtZSBoYXJkd2FyZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRlcmlhIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHNoYXJpbmcgKmlzKiBwb3NzaWJsZSwgYW5kIG1vcmUgY3JpdGljYWxseSwgaG93IHRoZSByYW5nZSBhZGp1c3RtZW50cyBhcmUgcGVyZm9ybWVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBhcmlzZSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgYW5kIEknbSBlYWdlciB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDM6MTIuNDUxMzUzNDU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzAzMDpcXHR9XFxuNzAzMTpcXHRcXG43MDMyOlxcdC8qXFxuNzAzMzpcXHQgKiBEZXRlcm1pbmUgaWYgc3RhcnQsZW5kIHJhbmdlIHdpdGhpbiB2bWEgY291bGQgYmUgbWFwcGVkIGJ5IHNoYXJlZCBwbWQuXFxuNzAzNDpcXHQgKiBJZiB5ZXMsIGFkanVzdCBzdGFydCBhbmQgZW5kIHRvIGNvdmVyIHJhbmdlIGFzc29jaWF0ZWQgd2l0aCBwb3NzaWJsZVxcbjcwMzU6XFx0ICogc2hhcmVkIHBtZCBtYXBwaW5ncy5cXG43MDM2OlxcdCAqL1xcbjcwMzc6XFx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuNzAzODpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbjcwMzk6XFx0e1xcbjcwNDA6XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kO1xcbjcwNDE6XFx0XFxuNzA0MjpcXHRcXHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxcbjcwNDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJhbmdlX3N0YXJ0LCBcXHUwMDI2cmFuZ2VfZW5kKSlcXG43MDQ0OlxcdFxcdFxcdHJldHVybjtcXG43MDQ1OlxcdFxcbjcwNDY6XFx0XFx0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcXG43MDQ3OlxcdH1cXG43MDQ4OlxcdFxcbjcwNDk6XFx0LypcXG43MDUwOlxcdCAqIFNlYXJjaCBmb3IgYSBzaGFyZWFibGUgcG1kIHBhZ2UgZm9yIGh1Z2V0bGIuIEluIGFueSBjYXNlIGNhbGxzIHBtZF9hbGxvYygpXFxuNzA1MTpcXHQgKiBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwdGUuIFdoaWxlIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgdGhlXFxuNzA1MjpcXHQgKiAhc2hhcmVkIHBtZCBjYXNlIGJlY2F1c2Ugd2UgY2FuIGFsbG9jYXRlIHRoZSBwbWQgbGF0ZXIgYXMgd2VsbCwgaXQgbWFrZXMgdGhlXFxuNzA1MzpcXHQgKiBjb2RlIG11Y2ggY2xlYW5lci4gcG1kIGFsbG9jYXRpb24gaXMgZXNzZW50aWFsIGZvciB0aGUgc2hhcmVkIGNhc2UgYmVjYXVzZVxcbjcwNTQ6XFx0ICogcHVkIGhhcyB0byBiZSBwb3B1bGF0ZWQgaW5zaWRlIHRoZSBzYW1lIGlfbW1hcF9yd3NlbSBzZWN0aW9uIC0gb3RoZXJ3aXNlXFxuNzA1NTpcXHQgKiByYWNpbmcgdGFza3MgY291bGQgZWl0aGVyIG1pc3MgdGhlIHNoYXJpbmcgKHNlZSBodWdlX3B0ZV9vZmZzZXQpIG9yIHNlbGVjdCBhXFxuNzA1NjpcXHQgKiBiYWQgcG1kIGZvciBzaGFyaW5nLlxcbjcwNTc6XFx0ICovXFxuNzA1ODpcXHRwdGVfdCAqaHVnZV9wbWRfc2hhcmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjcwNTk6XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkKVxcbjcwNjA6XFx0e1xcbjcwNjE6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSB2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG43MDYyOlxcdFxcdGNvbnN0IHBnb2ZmX3QgaWR4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcXG43MDYzOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3ZtYTtcXG43MDY0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2FkZHI7XFxuNzA2NTpcXHRcXHRwdGVfdCAqc3B0ZSA9IE5VTEw7XFxuNzA2NjpcXHRcXHRwdGVfdCAqcHRlO1xcbjcwNjc6XFx0XFxuNzA2ODpcXHRcXHRpX21tYXBfbG9ja19yZWFkKG1hcHBpbmcpO1xcbjcwNjk6XFx0XFx0bWFwcGluZ19ybWFwX3RyZWVfZm9yZWFjaChzdm1hLCBtYXBwaW5nLCBpZHgsIGlkeCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowMzoxMi40NTE3MTMwOTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA0MjkxOTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAgQ2FsbHNpdGVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBjb2RlIGRpdmUuIFdoZXJlIGFyZSB0aGUgY2FsbGVycz8gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZW1wbG95ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBpbGx1bWluYXRlIHRoZSBsb2dpYyBkcml2aW5nIGl0cyBwYXJ0aWN1bGFyIGFjdGlvbnMgYW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEFyZSB3ZSBsb29raW5nIGF0IHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgTlVNQSBjb25zaWRlcmF0aW9ucywgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgb3IgcGVyaGFwcyBhIG1vcmUgb2JzY3VyZSBvcHRpbWl6YXRpb24gcGF0aD8gR2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgc2l0ZXMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIHVucmF2ZWxpbmcgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBjb2RlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQncyB0aWVkIHRvIGFueSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgbWVtb3J5IG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDM6MTkuNDk0NjM2MjU3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2MjQ5OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDQ9dm9pZCBodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDU6dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ2LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MzEwPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0zMTQtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MzE1OnN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzE2LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jPTUxMzE9aW50IG1vdmVfaHVnZXRsYl9wYWdlX3RhYmxlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01MTQ3LVxcdFxcdFxcdFxcdG9sZF9lbmQpO1xcbm1tL2h1Z2V0bGIuYzo1MTQ4OlxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxubW0vaHVnZXRsYi5jLTUxNDktXFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02NTc3PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NjAxLVxcdFxcdFxcdFxcdDAsIG1tLCBzdGFydCwgZW5kKTtcXG5tbS9odWdldGxiLmM6NjYwMjpcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQpO1xcbm1tL2h1Z2V0bGIuYy02NjAzLVxcbi0tXFxubW0vaHVnZXRsYi5jPTcwMTE9Ym9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcwMzYtICovXFxubW0vaHVnZXRsYi5jOjcwMzc6dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTcwMzgtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4tLVxcbm1tL2h1Z2V0bGIuYz03MTkzPXZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MTk2LVxcbm1tL2h1Z2V0bGIuYzo3MTk3OnZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy03MTk4LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuLS1cXG5tbS9odWdldGxiLmM9NzQ0ND1zdGF0aWMgdm9pZCBodWdldGxiX3Vuc2hhcmVfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy03NDY3LVxcdC8qXFxubW0vaHVnZXRsYi5jOjc0Njg6XFx0ICogTm8gbmVlZCB0byBjYWxsIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpLCBiZWNhdXNlXFxubW0vaHVnZXRsYi5jLTc0NjktXFx0ICogd2UgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIFBVRF9TSVpFIGFsaWdubWVudC5cXG4tLVxcbm1tL3JtYXAuYz0xOTg0PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTIwMDQtXFx0XFx0XFx0XFx0YWRkcmVzcywgcmFuZ2UuZW5kKTtcXG5tbS9ybWFwLmM6MjAwNTpcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQpO1xcbm1tL3JtYXAuYy0yMDA2LVxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuLS1cXG5tbS9ybWFwLmM9MjQ2NT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjUwMi1cXHRcXHQgKi9cXG5tbS9ybWFwLmM6MjUwMzpcXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsXFxubW0vcm1hcC5jLTI1MDQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cmFuZ2UuZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDM6MjEuNDUwODkzNTYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NDU0ODI5NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2V0bGJmcyBQTUQgU2hhcmluZyBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgdG8gdGhlIGh1Z2V0bGJmcyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgUE1EIHNoYXJpbmcsIHVubWFwcGluZywgYW5kIHphcHBpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGxvZ2ljIHNoaWZ0IGFuZCBkZXRlcm1pbmUgaXRzIHNpZ25pZmljYW5jZSBmb3Igc3RhYmlsaXR5IGFuZCBwb3RlbnRpYWwgYnVncy5cblxuUHJldmlvdXNseSwgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpYCBpbiBgX19odWdldGxiX3phcF9iZWdpbigpYCBhbmQgYHVubWFwX2h1Z2VwYWdlX3JhbmdlKClgIHdvdWxkICphbHdheXMqIGFsaWduIHRoZSBtZW1vcnkgcmFuZ2UgdG8gUFVEIGJvdW5kYXJpZXMgaWYgdGhlcmUgd2FzIGEgcG9zc2liaWxpdHkgb2YgUE1EIHNoYXJpbmcgKG1lYW5pbmcgYFZNX01BWVNIQVJFYCB3YXMgc2V0IGFuZCB0aGUgcmFuZ2Ugc3Bhbm5lZCBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQpLiBOb3csIHRoaXMgaXMgZGlmZmVyZW50LiBJdCBsb29rcyBsaWtlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKClgIHdpbGwgb25seSBleHBhbmQgdGhlIHJhbmdlIHdoZW4gdGhlcmUgYXJlICphY3R1YWxseSogc2hhcmVkIFBNRCBwYWdlIHRhYmxlcyB3aXRoaW4gaXQuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYW4gZXhwbGljaXQgY2hlY2ssIHVzaW5nIGBodWdldGxiX3dhbGtgIGFuZCBgcHRkZXNjX3BtZF9pc19zaGFyZWQoKWAgdG8gdmVyaWZ5IFBNRCBzaGFyaW5nLiBGdXJ0aGVybW9yZSwgdGhlIHBvaW50IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaGFwcGVucyBoYXMgY2hhbmdlZC4gSW4gYF9faHVnZXRsYl96YXBfYmVnaW4oKWAsIGl0J3MgY2FsbGVkICphZnRlciogYWNxdWlyaW5nIHRoZSBgaV9tbWFwX2xvY2tfd3JpdGVgLlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IGh1Z2V0bGJmcyBoYW5kbGVzIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgb3IgemFwcGluZy4gVGhlIG5ldyBhcHByb2FjaCBmb2N1c2VzIG9uIGFjdHVhbCBzaGFyaW5nIHN0YXRlIHVuZGVyIGEgc3BpbmxvY2sgaW5zdGVhZCBvZiBwb3RlbnRpYWwgc2hhcmluZy4gVGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgY29ycmVjdG5lc3MgYXJlIHN1YnN0YW50aWFsLlxuXG5Db25zaWRlcmluZyB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd2l0aGluIGh1Z2V0bGJmcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6ei4gSHVnZXRsYmZzIHN5c2NhbGxzIGFyZSBlYXNpbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB1c2Vyc3BhY2UgdG9vbHMgc3VjaCBhcyBgbW1hcGAsIGBtdW5tYXBgLCBgbWFkdmlzZSBNQURWX0RPTlRORUVEYCwgYW5kIGBmYWxsb2NhdGUgUFVOQ0hfSE9MRWAuIFRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBQTUQgc2hhcmluZyBjYWxjdWxhdGlvbnMsIG1tdSBub3RpZmllciByYW5nZXMgYW5kIGhvdyB0aGUgc3lzdGVtIHVubWFwcyBodWdlIHBhZ2VzLlxuXG5UbyBlbnN1cmUgcHJvcGVyIHRlc3RpbmcsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkLiBGcm9tIGBmcy9LY29uZmlnYCwgSSBzZWUgdGhhdCBgSFVHRVRMQkZTYCBlbmFibGVzIGBIVUdFVExCX1BBR0VgLCBhbmQgc3Vic2VxdWVudGx5LCBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYCAoaWYgYEFSQ0hfV0FOVF9IVUdFX1BNRF9TSEFSRWAgaXMgc2VsZWN0ZWQsIHdoaWNoIGlzIGNvbW1vbiBvbiB4ODZfNjQpLiBJIHNob3VsZCBzZWFyY2ggdGhlIGBLY29uZmlnYCBmb3IgYEhVR0VUTEJGU2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6MDYuOTA1NzI1MzYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI4NzAzMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKkhVR0VUTEJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZz0xMTA9Y29uZmlnIDh4eF9DUFUxNVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTExLVxcdGJvb2wgXFxcIkNQVTE1IFNpbGljb24gRXJyYXRhXFxcIlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc6MTEyOlxcdGRlcGVuZHMgb24gIUhVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTEzLVxcdGRlZmF1bHQgeVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG5hcmNoL3NoL21tL0tjb25maWctMTU5LVxcdHByb21wdCBcXFwiSHVnZVRMQiBwYWdlIHNpemVcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2MDpcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjEtXFx0ZGVmYXVsdCBIVUdFVExCX1BBR0VfU0laRV8xTUIgaWYgUEFHRV9TSVpFXzY0S0JcXG4tLVxcbmZzL0tjb25maWc9MjUwPW1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL0tjb25maWc6MjUyOlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1My1cXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuLS1cXG5mcy9LY29uZmlnPTI2Mz1jb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbi0tXFxuZnMvS2NvbmZpZy0yNjUtXFx0ZGVmYXVsdCBuXFxuZnMvS2NvbmZpZzoyNjY6XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjY3LVxcdGhlbHBcXG4tLVxcbmZzL0tjb25maWc9Mjc3PWNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWc6Mjc5OlxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxcbmZzL0tjb25maWctMjgwLVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4tLVxcbmluaXQvS2NvbmZpZz0xMjkzPWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxcbmluaXQvS2NvbmZpZy0xMjk0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTI5NTpcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxcbmluaXQvS2NvbmZpZy0xMjk2LVxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6MDkuMzM0NDM1NzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4NTAyMDY4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgUE1EIFBhZ2UgVGFibGUgU2hhcmluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIFRoZSBLY29uZmlnIGZpbGVzIHRlbGwgbWUgdGhhdCBpdCdzIGEgYGRlZl9ib29sYCB0aWVkIHRvIGBIVUdFVExCX1BBR0VgLiBBbmQgbG9va2luZyBmdXJ0aGVyLCBgSFVHRVRMQl9QQUdFYCBpdHNlbGYgaXMgYSBgZGVmX2Jvb2xgIHRoYXQgZGVwZW5kcyBvbiBgSFVHRVRMQkZTYC4gU28sIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbiBib2lscyBkb3duIHRvIGBIVUdFVExCRlNgLCB3aGlsZSBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYCBpcyBlZmZlY3RpdmVseSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGRlcml2ZWQgZnJvbSB0aGUgc2VsZWN0aW9uIG9mIGBIVUdFVExCRlNgLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBIVUdFVExCRlNgIGlzIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgd2lsbCBlbmFibGUsIGFuZCB0aGUgaW50ZXJuYWwgYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AgaXMgYSBjb25zZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGZvY3VzIHRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2guIEluIGBtbS9odWdldGxiLmNgLCBJIHNlZSBhIGZldyBrZXkgcGxheWVyczogYF9faHVnZXRsYl96YXBfYmVnaW5gLCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBhbmQgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAuIFRoZXNlIG5hbWVzIGFyZSBhbGwgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHNpZ24gYXMgdGhleSdyZSBsaWtlbHkgZXhwb3J0ZWQuIE5vdywgdGltZSB0byBkb3VibGUtY2hlY2sgdGhlaXIgZGVjbGFyYXRpb24gaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCB0byBtYWtlIHN1cmUgdGhleSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMsIGV4cG9zZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgaGVhZGVycyBzYXkgYWJvdXQgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6MjcuMTg0NjQ1Njc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI3NTA5ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHVnZXRsYl96YXBfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ1PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ3LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0ODpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI1Mz1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTYtXFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI1NzpcXHRcXHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU4LX1cXG4tLVxcbm1tL2h1Z2V0bGIuYz01NDM4PWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxcbi0tXFxubW0vaHVnZXRsYi5jLTU0NDMtXFxubW0vaHVnZXRsYi5jOjU0NDQ6dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy01NDQ1LVxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowNDoyOS4xMTIxNjIzMDdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1MDI0NjI3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgc3BlY2lmaWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgaXQncyBhY3R1YWxseSBoYW5kbGluZyB0aGUgdW5tYXBwaW5nIG9mIGh1Z2UgcGFnZXMuIFdlIGtub3cgdGhlIGhpZ2gtbGV2ZWwgZ29hbCwgYnV0IHRoZSBkZXZpbCdzIGFsd2F5cyBpbiB0aGUgZGV0YWlscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBpc24ndCBpdD8gSSB3YW50IHRvIGV4YW1pbmUgdGhlIGxvZ2ljIGZsb3csIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgaXQgZW1wbG95cyAoaWYgYW55KSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZXMuIElzIGl0IGNvcnJlY3RseSBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgY29udGVudGlvbiB0aGF0IHdlIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIHN1YnRsZSBpbmVmZmljaWVuY2llcyBpbiBob3cgaXQgd2Fsa3MgdGhlIHBhZ2UgdGFibGVzIGFuZCBwZXJmb3JtcyB0aGUgdW5tYXBwaW5nPyBJIGFsc28gd2FudCB0byB2ZXJpZnkgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zIGdyYWNlZnVsbHkgYW5kIGVuc3VyZSB0aGF0IGl0IGtlZXBzIHRoZSBzeXN0ZW0gaW4gYSBjb25zaXN0ZW50IHN0YXRlLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kICpldmVyeSogbnVhbmNlIG9mIHdoYXQgdGhpcyBjb2RlIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzczLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6NDAuNjE0NjI3OTY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3NjE3NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVubWFwX2h1Z2VwYWdlX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTM4MD1zdGF0aWMgdm9pZCBodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxNi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0MTc6XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00MTgtXFx0XFx0XFx0XFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTEtXFx0XFx0aWYgKGh1Z2V0bGJfdm1hX21hcHNfcGZuKHZtYSwgdl9zdGFydCwgcGZuKSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTI6XFx0XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTMtXFx0XFx0XFx0XFx0XFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00NjM9aHVnZXRsYl92bWRlbGV0ZV9saXN0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDgzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4NDpcXHRcXHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4NS1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4OC1cXHRcXHQgKiB2bWFzLiAgVGhlcmVmb3JlLCBsb2NrIGlzIG5vdCBoZWxkIHdoZW4gY2FsbGluZ1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4OTpcXHRcXHQgKiB1bm1hcF9odWdlcGFnZV9yYW5nZSBmb3IgcHJpdmF0ZSB2bWFzLlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ5MC1cXHRcXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyOD1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICosXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTI5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMi1cXHRcXHRcXHQgIHN0cnVjdCBmb2xpbyAqLCB6YXBfZmxhZ3NfdCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMzOnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzNC1cXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDM0PXN0YXRpYyBpbmxpbmUgbG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDQxLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQ0MjpzdGF0aWMgaW5saW5lIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ0My1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MTMxPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTE5NS1cXG5tbS9odWdldGxiLmM6NTE5Njp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTUxOTctXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jPTU0NTc9dm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDgzLVxcbm1tL2h1Z2V0bGIuYzo1NDg0OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vaHVnZXRsYi5jLTU0ODUtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDk1LVxcdCAqIGhvbGQgaV9tbWFwX3J3c2VtIGFuZCB0aGUgaHVnZXRsYiBWTUEgbG9jayBmb3Igc2hhcmVkIG1hcHBpbmdzLCBzbyBQTURcXG5tbS9odWdldGxiLmM6NTQ5NjpcXHQgKiBzaGFyaW5nIHN0YXRlIGNhbm5vdCBjaGFuZ2UgYmVmb3JlIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKS5cXG5tbS9odWdldGxiLmMtNTQ5Ny1cXHQgKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTAxLVxcbm1tL2h1Z2V0bGIuYzo1NTAyOlxcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoXFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgZW5kLFxcbm1tL2h1Z2V0bGIuYy01NTAzLVxcdFxcdFxcdCAgICAgICBmb2xpbywgemFwX2ZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz01NTE1PXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTMzLVxcdCAqIHRoaXMgbWFwcGluZyBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBWTUFzLFxcbm1tL2h1Z2V0bGIuYzo1NTM0OlxcdCAqIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKSBpcyBjYWxsZWQgYXMgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkXFxubW0vaHVnZXRsYi5jLTU1MzUtXFx0ICovXFxuLS1cXG5tbS9odWdldGxiLmMtNTU1Ny1cXHRcXHRpZiAoIWlzX3ZtYV9yZXN2X3NldChpdGVyX3ZtYSwgSFBBR0VfUkVTVl9PV05FUikpXFxubW0vaHVnZXRsYi5jOjU1NTg6XFx0XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2UoaXRlcl92bWEsIGFkZHJlc3MsXFxubW0vaHVnZXRsYi5jLTU1NTktXFx0XFx0XFx0XFx0XFx0ICAgICBhZGRyZXNzICsgaHVnZV9wYWdlX3NpemUoaCksXFxuLS1cXG5tbS9tZW1vcnkuYz0yMjA2PXN0YXRpYyB2b2lkIF9femFwX3ZtYV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTIyMjgtXFx0XFx0XFx0cmV0dXJuO1xcbm1tL21lbW9yeS5jOjIyMjk6XFx0XFx0X191bm1hcF9odWdlcGFnZV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgTlVMTCwgemFwX2ZsYWdzKTtcXG5tbS9tZW1vcnkuYy0yMjMwLVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA0OjQyLjIxMjI1MzYzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDExNDY2ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJc3N1ZXMgd2l0aCBIdWdlVExCIFBhZ2UgWmFwcGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBjYWxscy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2UgemFwcGluZyBtaWdodCBiZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgb2JzZXJ2ZWQgcHJvYmxlbS4gSXQgY291bGQgYmUgaW4gYG1tL21lbW9yeS5jYCwgd2hpY2ggaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBIb3dldmVyLCBJIHNob3VsZG4ndCBsaW1pdCBteXNlbGYgdG8gdGhhdCBkaXJlY3RvcnkuIEkgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgY2hlY2sgZXZlcnl3aGVyZSByZWxldmFudC4gSSdsbCBuZWVkIHRvIHVzZSBteSB0eXBpY2FsIGRlYnVnZ2luZyBzdHJhdGVneTsgdXNpbmcgYGdpdCBncmVwYCBhbmQgbWF5YmUgc29tZSBjcm9zcy1yZWZlcmVuY2luZyB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBodWdldGxiX3phcF9iZWdpbmAgaXMgdXNlZCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMTgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowNDo0Ni4yMjM3MjMwODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIxNjg1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl96YXBfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ1PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ3LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0ODpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNTA9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTItXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUzOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU2LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTc6XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1OC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0zMTU9c3RhdGljIGlubGluZSB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDozMjE6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01NDM4PWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxcbi0tXFxubW0vaHVnZXRsYi5jLTU0NDMtXFxubW0vaHVnZXRsYi5jOjU0NDQ6dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy01NDQ1LVxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxubW0vbWVtb3J5LmM9MjI5Mj12b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxcbi0tXFxubW0vbWVtb3J5LmMtMjMwNy1cXG5tbS9tZW1vcnkuYzoyMzA4OlxcdFxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKTtcXG5tbS9tZW1vcnkuYy0yMzA5LVxcdFxcdF9femFwX3ZtYV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgXFx1MDAyNmRldGFpbHMpO1xcbi0tXFxubW0vbWVtb3J5LmM9MjMzMD12b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMjM0My1cXHRcXHRcXHRcXHRhZGRyZXNzLCBlbmQpO1xcbm1tL21lbW9yeS5jOjIzNDQ6XFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQpO1xcbm1tL21lbW9yeS5jLTIzNDUtXFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cXHUwMDNldm1fbW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowNDo0Ny44MTU4OTc2MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODc1MTY5NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlVExCIFBNRCBQYWdlIFRhYmxlIFNoYXJpbmcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGhhdmVuJ3QgdG91Y2hlZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGZpbGVzIG9yIHN5bWJvbHMgYmV5b25kIHRoZSBpbml0aWFsIHNjb3BlLiBUaGUgZGlmZiBzdW1tYXJ5IGZvY3VzZXMgb24gYG1tL2h1Z2V0bGIuY2AsIGFuZCB0aGF0J3MgZXhwZWN0ZWQuIFNwZWNpZmljYWxseSwgaXQgbGlzdHMgc2V2ZXJhbCBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIFBNRCBzaGFyaW5nIGFuZCByYW5nZSBhZGp1c3RtZW50cy5cblxuTmV4dCwgSSdsbCBpZGVudGlmeSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzLiBCYXNlZCBvbiB0aGUgY29kZSwgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBhcmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbjogYF9faHVnZXRsYl96YXBfYmVnaW5gLCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBhbmQgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB3ZSdsbCBuZWVkIHRvIHdhdGNoLlxuXG5Ob3csIGxldCdzIGdldCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIGNvcmUgY29uZmlndXJhdGlvbiBpcyBgSFVHRVRMQkZTYCwgYW5kIHRoYXQgcHVsbHMgaW4gYEhVR0VUTEJfUEFHRWAuIFRoZSBjcnVjaWFsIGFzcGVjdCBoZXJlIGlzIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgLCB3aGljaCBkZXBlbmRzIG9uIGBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVgIGFuZCBgU1BMSVRfUE1EX1BUTE9DS1NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIG9yIGNvbnNpZGVyZWQuIEkgdGhpbmsgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgIGFyZSBzdWZmaWNpZW50LiBUaGUgZmluYWwgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgW1wiSFVHRVRMQkZTXCIsIFwiSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXCJdLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHN5bnRoZXNpemUgdGhpcyBpbmZvcm1hdGlvbi4gVGhlIHBhdGNoIGFsdGVycyB0aGUgbG9naWMgZm9yIEh1Z2VUTEIgUE1EIHBhZ2UgdGFibGUgc2hhcmluZy4gSW5zdGVhZCBvZiBicm9hZGx5IGV4cGFuZGluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgcmFuZ2VzIHVuZGVyIFBNRCBzaGFyaW5nLCB3ZSdyZSBtYWtpbmcgaXQgbW9yZSBwcmVjaXNlLCBleHBhbmRpbmcgb25seSB3aGVuICphY3R1YWwqIFBNRCB0YWJsZSBzaGFyaW5nIGV4aXN0cyB3aXRoaW4gdGhlIHJhbmdlLiBUaGlzIGltcGFjdHMgdGhlIHJhbmdlIGFkanVzdG1lbnQgY29kZSB3aXRoaW4gYF9faHVnZXRsYl96YXBfYmVnaW5gLCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBhbmQgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdHJpZ2dlcmVkIGJ5IHZhcmlvdXMgSHVnZVRMQiBvcGVyYXRpb25zIGxpa2UgbW1hcCwgbXVubWFwLCBtYWR2aXNlLCBhbmQgaG9sZSBwdW5jaCwgc28gdGhhdCdzIHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgd291bGQgbGllLlxuXG5Pa2F5LCB0aGF0J3MgZXZlcnl0aGluZy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyMiwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6NTQuNjkxMDcwMzQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1OTg4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odWdldGxiX3phcF9iZWdpblwiLFxuICAgIFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcImFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBodWdldGxiIFBNRCBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYnkgY2hlY2tpbmcgd2hldGhlciBQTUQgdGFibGVzIGFyZSBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHRoZSByYW5nZSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgZXhwYW5kaW5nIGFsbCBwb3RlbnRpYWxseSBzaGFyZWFibGUgcmFuZ2VzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBodWdldGxiIG1lbW9yeSB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYmVoYXZpb3IgcmVhY2hhYmxlIHZpYSBodWdldGxiZnMgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHVnZXRsYl96YXBfYmVnaW5cIixcbiAgICBcInVubWFwX2h1Z2VwYWdlX3JhbmdlXCIsXG4gICAgXCJhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgaHVnZXRsYiBQTUQgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyBkdXJpbmcgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJ5IGNoZWNraW5nIHdoZXRoZXIgUE1EIHRhYmxlcyBhcmUgYWN0dWFsbHkgc2hhcmVkIGFjcm9zcyB0aGUgcmFuZ2UgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IGV4cGFuZGluZyBhbGwgcG90ZW50aWFsbHkgc2hhcmVhYmxlIHJhbmdlcy4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgaHVnZXRsYiBtZW1vcnkgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJlaGF2aW9yIHJlYWNoYWJsZSB2aWEgaHVnZXRsYmZzIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA0OjU0Ljc3MjY4MjM2NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NzAzNDIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA0OjU0Ljc3MzM2MjQ2NloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk4ODYzNDkyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIFBNRCBwYWdlIHRhYmxlIHNoYXJpbmcgcmFuZ2UgYWRqdXN0bWVudHMgKGluIGBtbS9odWdldGxiLmNgKSB0byBvbmx5IGV4cGFuZCB0aGUgdW5tYXBwaW5nL3phcCBhZGRyZXNzIHJhbmdlIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHJhbmdlX3N0YXJ0YCBhbmQgYHJhbmdlX2VuZGApIGFyZSBwcm9wZXJseSBhc3NpZ25lZCBiZWZvcmUgdXNlIHdoZW4gYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYCByZXR1cm5zIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGFjY2Vzc2VkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSB0YWJsZSB3YWxrcywgbG9ja2luZywgb3IgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydGlvbiBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2E5MGExODg1NDdmYTI5ZjA5NTZhZmZlN2MwZTY4NTliMmIyN2EzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjAxOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi5lODBlMTExODM4NWYwIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC01MzUzLDE2ICs1MzUzLDEwNSBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbitzdGF0aWMgYm9vbFxuK3BtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuK1x0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpyYW5nZV9zdGFydCxcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nICpyYW5nZV9lbmQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVx1MDAzZXZtX3N0YXJ0LCBQVURfU0laRSk7XG4rXHR1bnNpZ25lZCBsb25nIHZfZW5kID0gQUxJR05fRE9XTih2bWEtXHUwMDNldm1fZW5kLCBQVURfU0laRSk7XG4rXG4rXHQvKlxuK1x0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2VcbitcdCAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpdC5cbitcdCAqL1xuK1x0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkgfHwgISh2X2VuZCBcdTAwM2Ugdl9zdGFydCkgfHxcbitcdCAgICAoZW5kIFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFx1MDAzZT0gdl9lbmQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQqcmFuZ2Vfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydCwgUFVEX1NJWkUpLCB2X3N0YXJ0KTtcbitcdCpyYW5nZV9lbmQgPSBtaW4oQUxJR04oZW5kLCBQVURfU0laRSksIHZfZW5kKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK2FkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbitcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kKVxuK3tcbitcdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xuK1x0aWYgKCpzdGFydCBcdTAwM2UgcmFuZ2Vfc3RhcnQpXG4rXHRcdCpzdGFydCA9IHJhbmdlX3N0YXJ0O1xuK1xuK1x0aWYgKCplbmQgXHUwMDNjIHJhbmdlX2VuZClcbitcdFx0KmVuZCA9IHJhbmdlX2VuZDtcbit9XG4rXG4rc3RhdGljIHZvaWRcbithZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4rXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG4rXG4rXHRodWdldGxiX3ZtYV9hc3NlcnRfbG9ja2VkKHZtYSk7XG4rXHRpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuK1xuK1x0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXHUwMDNjIHJhbmdlX2VuZDsgYWRkcmVzcyArPSBQVURfU0laRSkge1xuK1x0XHRwdGVfdCAqcHRlcDtcbitcdFx0Ym9vbCBzaGFyZWQ7XG4rXG4rXHRcdHB0ZXAgPSBodWdldGxiX3dhbGsodm1hLCBhZGRyZXNzLCBQTURfU0laRSk7XG4rXHRcdGlmICghcHRlcClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3Bpbl9sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcbitcdFx0c2hhcmVkID0gcHRkZXNjX3BtZF9pc19zaGFyZWQodmlydF90b19wdGRlc2MocHRlcCkpO1xuK1x0XHRzcGluX3VubG9jayhodWdlX3B0ZV9sb2NrcHRyKGgsIG1tLCBwdGVwKSk7XG4rXG4rXHRcdGlmIChzaGFyZWQpXG4rXHRcdFx0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCBhZGRyZXNzLFxuK1x0XHRcdFx0XHRcdCAgICAgYWRkcmVzcyArIFBVRF9TSVpFKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWRcbithZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbitcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmVuZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7XG4rXG4rXHRpZiAoaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSAhPSBQTURfU0laRSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCxcbitcdFx0XHRcdFx0XHUwMDI2cmFuZ2Vfc3RhcnQsIFx1MDAyNnJhbmdlX2VuZCkpXG4rXHRcdHJldHVybjtcbitcbitcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNfaW5fcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgdm9pZFxuK2FkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuK1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxuK3tcbit9XG4rI2VuZGlmXG4rXG4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuIHtcbiBcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpXHQvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovXG4gXHRcdHJldHVybjtcbiBcbi1cdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIHN0YXJ0LCBlbmQpO1xuIFx0aHVnZXRsYl92bWFfbG9ja193cml0ZSh2bWEpO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuK1x0aWYgKHZtYS1cdTAwM2V2bV9maWxlKSB7XG4gXHRcdGlfbW1hcF9sb2NrX3dyaXRlKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4rXHRcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBzdGFydCwgZW5kKTtcbitcdH1cbiB9XG4gXG4gdm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkBAIC01NDAxLDcgKzU0OTAsMTIgQEAgdm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcbiBcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4gXHRcdFx0XHRzdGFydCwgZW5kKTtcbi1cdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuK1x0LypcbitcdCAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzXG4rXHQgKiBob2xkIGlfbW1hcF9yd3NlbSBhbmQgdGhlIGh1Z2V0bGIgVk1BIGxvY2sgZm9yIHNoYXJlZCBtYXBwaW5ncywgc28gUE1EXG4rXHQgKiBzaGFyaW5nIHN0YXRlIGNhbm5vdCBjaGFuZ2UgYmVmb3JlIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKS5cbitcdCAqL1xuK1x0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCB2bWEtXHUwMDNldm1fbW0pO1xuIFxuQEAgLTY5NDMsMjMgKzcwMzcsMTMgQEAgYm9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHZfc3RhcnQgPSBBTElHTih2bWEtXHUwMDNldm1fc3RhcnQsIFBVRF9TSVpFKSxcbi1cdFx0dl9lbmQgPSBBTElHTl9ET1dOKHZtYS1cdTAwM2V2bV9lbmQsIFBVRF9TSVpFKTtcbitcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcbiBcbi1cdC8qXG4tXHQgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZVxuLVx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGluLlxuLVx0ICovXG4tXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFx1MDAzZSB2X3N0YXJ0KSB8fFxuLVx0XHQoKmVuZCBcdTAwM2M9IHZfc3RhcnQpIHx8ICgqc3RhcnQgXHUwMDNlPSB2X2VuZCkpXG4rXHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxuK1x0XHRcdFx0XHRcdTAwMjZyYW5nZV9zdGFydCwgXHUwMDI2cmFuZ2VfZW5kKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogRXh0ZW5kIHRoZSByYW5nZSB0byBiZSBQVUQgYWxpZ25lZCBmb3IgYSB3b3JzdCBjYXNlIHNjZW5hcmlvICovXG4tXHRpZiAoKnN0YXJ0IFx1MDAzZSB2X3N0YXJ0KVxuLVx0XHQqc3RhcnQgPSBBTElHTl9ET1dOKCpzdGFydCwgUFVEX1NJWkUpO1xuLVxuLVx0aWYgKCplbmQgXHUwMDNjIHZfZW5kKVxuLVx0XHQqZW5kID0gQUxJR04oKmVuZCwgUFVEX1NJWkUpO1xuK1x0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcbiB9XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA0OjU0Ljc3MzM2Mzc2NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODg2MzI1NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYWdlIFRhYmxlIFNoYXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgYG1tL2h1Z2V0bGIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBhcm91bmQgc2hhcmluZyBhbmQgdW5tYXBwaW5nIGh1Z2V0bGIgcGFnZSB0YWJsZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0ICp3aGF0KiBleGFjdGx5IGl0J3MgY2hhbmdpbmcgYW5kIHRoZW4gYXNzZXNzIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgd2hpY2ggaW5jbHVkZXMgY2hlY2tpbmcgZm9yIEtNU0FOIGNvbmNlcm5zLlxuXG5GaXJzdCwgbGV0J3MgYnJlYWsgZG93biB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGludHJvZHVjaW5nIGZ1bmN0aW9ucyBsaWtlIGBwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZWAsIGBhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nYCwgYW5kIHNvbWUgdmFyaWF0aW9ucyBvZiBgYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc2AuIEl0IGxvb2tzIGxpa2UgaXQncyBtYWtpbmcgY2hhbmdlcyB0byBob3cgYF9faHVnZXRsYl96YXBfYmVnaW5gIGFuZCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGhhbmRsZSBzaGFyZWQgUE1Ecy4gSXQncyBhbHNvIHJlZmFjdG9yaW5nIGBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGVgLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHJlZCBmbGFncz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgYW55dGhpbmcgdGhhdCBzbWFja3Mgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UgKHZpYSBgY29weV90b191c2VyYCBvciB0aGUgbGlrZSksIGFueSBkYW5nZXJvdXMgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIG9wZW4gdGhlIGRvb3IgdG8gS01TQU4gaXNzdWVzLlxuXG5JJ20gemVyb2luZyBpbiBvbiBgYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc2AuIEl0IHBhc3NlcyBgcmFuZ2Vfc3RhcnRgIGFuZCBgcmFuZ2VfZW5kYCBhcyBwb2ludGVycyB0byBgcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2VgLiBXaXRoaW4gdGhhdCBmdW5jdGlvbiwgdGhlcmUncyBhIGNoZWNrOiB0aGUgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhvc2UgdmFyaWFibGVzICpjb25kaXRpb25hbGx5KiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIFZNQSBpcyBzaGFyZWFibGUgYW5kIHRoZSBzdGFydC9lbmQgcmFuZ2VzIGFyZSB2YWxpZC4gSG93ZXZlciwgaWYgdGhhdCBjaGVjayBmYWlscywgYGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNgIGltbWVkaWF0ZWx5IHJldHVybnMuIFRoaXMgbWVhbnMgd2UncmUgc2FmZSBiZWNhdXNlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzYCBjaGVja3MgaXRzIHJldHVybiB2YWx1ZS4gSW5zaWRlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlYCwgbG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYGFkZHJlc3NgLCBgcHRlcGAsIGFuZCBgc2hhcmVkYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBkaXJlY3QgY29waWVzIHRvIHVzZXJzcGFjZSBhbmQgbm8gb2J2aW91cyBtZW1vcnkgbGVha3MuIFNvIGZhciwgaXQgc2VlbXMgY2xlYW47IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5EZWVwZXIgY29uc2lkZXJhdGlvbnM6IEkgaGF2ZSB0byBjb25zaWRlciBtZW1vcnkgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBwYWdlIHRhYmxlcyBhbmQgVExCIGludmFsaWRhdGlvbi4gV2UncmUgYWxzbyB0YWxraW5nIGFib3V0IHJhbmdlIGJvdW5kYXJpZXMsIGFuZCB0aG9zZSBjYW4gYmUgdHJpY2t5LiBCdXQsIGhvbmVzdGx5LCBhbnkgYmxhdGFudCBVQUYgb3IgbG9ja2luZyBidWdzIHdvdWxkIGxpa2VseSBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUCwgb3IgdGhlIE1NIGRlYnVnIHN0dWZmLiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIGhlcmUuXG5cbk5vdywgYSBmaW5hbCBjaGVjay4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgS01TQU4gdGVzdGluZyBpcyBuZWVkZWQuIFRoZSBydWxlIGlzLCB3ZSAqZG9uJ3QqIHJ1biBLTVNBTiBpZiBLQVNBTiAob3Igc29tZXRoaW5nIGVsc2UpIGNhbiBjYXRjaCB0aGUgaXNzdWUuIFdlIG9ubHkgbmVlZCBLTVNBTiBpZiB3ZSdyZSBkZWFsaW5nIHdpdGg6IDEpIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOyAyKSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczsgMykgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcjsgb3IgNCkgZGFuZ2Vyb3VzIGJvdW5kcyBjaGVja3MuIE5vbmUgb2YgdGhlc2Ugc2NlbmFyaW9zIGFwcGx5LlxuXG5TbywgYmFzZWQgb24gbXkgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCByZXF1aXJlZCBoZXJlLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIxLCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA1OjA0LjY1OTY5Mjk1NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgUE1EIHBhZ2UgdGFibGUgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyAoaW4gYG1tL2h1Z2V0bGIuY2ApIHRvIG9ubHkgZXhwYW5kIHRoZSB1bm1hcHBpbmcvemFwIGFkZHJlc3MgcmFuZ2UgZm9yIFBVRHMgd2hvc2UgUE1EIHRhYmxlIGlzIGFjdHVhbGx5IHNoYXJlZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgcmFuZ2Vfc3RhcnRgIGFuZCBgcmFuZ2VfZW5kYCkgYXJlIHByb3Blcmx5IGFzc2lnbmVkIGJlZm9yZSB1c2Ugd2hlbiBgcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2VgIHJldHVybnMgdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgYWNjZXNzZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIHRhYmxlIHdhbGtzLCBsb2NraW5nLCBvciBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0aW9uIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBQTUQgcGFnZSB0YWJsZSBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIChpbiBgbW0vaHVnZXRsYi5jYCkgdG8gb25seSBleHBhbmQgdGhlIHVubWFwcGluZy96YXAgYWRkcmVzcyByYW5nZSBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGByYW5nZV9zdGFydGAgYW5kIGByYW5nZV9lbmRgKSBhcmUgcHJvcGVybHkgYXNzaWduZWQgYmVmb3JlIHVzZSB3aGVuIGBwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZWAgcmV0dXJucyB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY3JlYXRlZCBvciBhY2Nlc3NlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhZ2UgdGFibGUgd2Fsa3MsIGxvY2tpbmcsIG9yIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRpb24gY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7kf5w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 09:34:28 +0000 UTC FinishedAt: 2026-08-31 10:05:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f05dc611ac09e7ec034171c7521329f7d9cbb940", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "HUGETLB_PMD_PAGE_TABLE_SHARING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f05dc611ac09e7ec034171c7521329f7d9cbb940", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "HUGETLB_PMD_PAGE_TABLE_SHARING" ], "series_id": "451111f2-c440-47cc-8c88-30e073ef9065" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__hugetlb_zap_begin", "unmap_hugepage_range", "adjust_range_if_pmd_sharing_possible" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2h1Z2V0bGJfemFwX2JlZ2luJiMzNDssCiAgICAmIzM0O3VubWFwX2h1Z2VwYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2FkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIFBNRCBwYWdlIHRhYmxlIHNoYXJpbmcgcmFuZ2UgYWRqdXN0bWVudHMgKGluIGBtbS9odWdldGxiLmNgKSB0byBvbmx5IGV4cGFuZCB0aGUgdW5tYXBwaW5nL3phcCBhZGRyZXNzIHJhbmdlIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHJhbmdlX3N0YXJ0YCBhbmQgYHJhbmdlX2VuZGApIGFyZSBwcm9wZXJseSBhc3NpZ25lZCBiZWZvcmUgdXNlIHdoZW4gYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYCByZXR1cm5zIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGFjY2Vzc2VkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSB0YWJsZSB3YWxrcywgbG9ja2luZywgb3IgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydGlvbiBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBodWdldGxiIFBNRCBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYnkgY2hlY2tpbmcgd2hldGhlciBQTUQgdGFibGVzIGFyZSBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHRoZSByYW5nZSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgZXhwYW5kaW5nIGFsbCBwb3RlbnRpYWxseSBzaGFyZWFibGUgcmFuZ2VzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBodWdldGxiIG1lbW9yeSB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYmVoYXZpb3IgcmVhY2hhYmxlIHZpYSBodWdldGxiZnMgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNhOTBhMTg4NTQ3ZmEyOWYwOTU2YWZmZTdjMGU2ODU5YjJiMjdhM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowMToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLmU4MGUxMTE4Mzg1ZjAgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTUzNTMsMTYgJiM0Mzs1MzUzLDEwNSBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3BtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqcmFuZ2Vfc3RhcnQsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKnJhbmdlX2VuZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS1cdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdl9lbmQgPSBBTElHTl9ET1dOKHZtYS1cdTAwM2V2bV9lbmQsIFBVRF9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZVxuJiM0MztcdCAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFx1MDAzZSB2X3N0YXJ0KSB8fFxuJiM0MztcdCAgICAoZW5kIFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFx1MDAzZT0gdl9lbmQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQqcmFuZ2Vfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydCwgUFVEX1NJWkUpLCB2X3N0YXJ0KTtcbiYjNDM7XHQqcmFuZ2VfZW5kID0gbWluKEFMSUdOKGVuZCwgUFVEX1NJWkUpLCB2X2VuZCk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO2FkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbiYjNDM7e1xuJiM0MztcdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xuJiM0MztcdGlmICgqc3RhcnQgXHUwMDNlIHJhbmdlX3N0YXJ0KVxuJiM0MztcdFx0KnN0YXJ0ID0gcmFuZ2Vfc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGlmICgqZW5kIFx1MDAzYyByYW5nZV9lbmQpXG4mIzQzO1x0XHQqZW5kID0gcmFuZ2VfZW5kO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCxcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuJiM0MztcbiYjNDM7XHRodWdldGxiX3ZtYV9hc3NlcnRfbG9ja2VkKHZtYSk7XG4mIzQzO1x0aV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXHUwMDNjIHJhbmdlX2VuZDsgYWRkcmVzcyAmIzQzOz0gUFVEX1NJWkUpIHtcbiYjNDM7XHRcdHB0ZV90ICpwdGVwO1xuJiM0MztcdFx0Ym9vbCBzaGFyZWQ7XG4mIzQzO1xuJiM0MztcdFx0cHRlcCA9IGh1Z2V0bGJfd2Fsayh2bWEsIGFkZHJlc3MsIFBNRF9TSVpFKTtcbiYjNDM7XHRcdGlmICghcHRlcClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcbiYjNDM7XHRcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2hhcmVkKVxuJiM0MztcdFx0XHRhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHN0YXJ0LCBlbmQsIGFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYWRkcmVzcyAmIzQzOyBQVURfU0laRSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7XG4mIzQzO1xuJiM0MztcdGlmIChodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpICE9IFBNRF9TSVpFKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2cmFuZ2Vfc3RhcnQsIFx1MDAyNnJhbmdlX2VuZCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNfaW5fcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuIHtcbiBcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpXHQvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovXG4gXHRcdHJldHVybjtcbiBcbi1cdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIHN0YXJ0LCBlbmQpO1xuIFx0aHVnZXRsYl92bWFfbG9ja193cml0ZSh2bWEpO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuJiM0MztcdGlmICh2bWEtXHUwMDNldm1fZmlsZSkge1xuIFx0XHRpX21tYXBfbG9ja193cml0ZSh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuJiM0MztcdFx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyh2bWEsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkBAIC01NDAxLDcgJiM0Mzs1NDkwLDEyIEBAIHZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0c3RhcnQsIGVuZCk7XG4tXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzXG4mIzQzO1x0ICogaG9sZCBpX21tYXBfcndzZW0gYW5kIHRoZSBodWdldGxiIFZNQSBsb2NrIGZvciBzaGFyZWQgbWFwcGluZ3MsIHNvIFBNRFxuJiM0MztcdCAqIHNoYXJpbmcgc3RhdGUgY2Fubm90IGNoYW5nZSBiZWZvcmUgX191bm1hcF9odWdlcGFnZV9yYW5nZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbiBcbkBAIC02OTQzLDIzICYjNDM7NzAzNywxMyBAQCBib29sIHdhbnRfcG1kX3NoYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS1cdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpLFxuLVx0XHR2X2VuZCA9IEFMSUdOX0RPV04odm1hLVx1MDAzZXZtX2VuZCwgUFVEX1NJWkUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcbiBcbi1cdC8qXG4tXHQgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZVxuLVx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGluLlxuLVx0ICovXG4tXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFx1MDAzZSB2X3N0YXJ0KSB8fFxuLVx0XHQoKmVuZCBcdTAwM2M9IHZfc3RhcnQpIHx8ICgqc3RhcnQgXHUwMDNlPSB2X2VuZCkpXG4mIzQzO1x0aWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNnJhbmdlX3N0YXJ0LCBcdTAwMjZyYW5nZV9lbmQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBFeHRlbmQgdGhlIHJhbmdlIHRvIGJlIFBVRCBhbGlnbmVkIGZvciBhIHdvcnN0IGNhc2Ugc2NlbmFyaW8gKi9cbi1cdGlmICgqc3RhcnQgXHUwMDNlIHZfc3RhcnQpXG4tXHRcdCpzdGFydCA9IEFMSUdOX0RPV04oKnN0YXJ0LCBQVURfU0laRSk7XG4tXG4tXHRpZiAoKmVuZCBcdTAwM2Mgdl9lbmQpXG4tXHRcdCplbmQgPSBBTElHTigqZW5kLCBQVURfU0laRSk7XG4mIzQzO1x0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcbiB9XG4gXG4gLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odWdldGxiX3phcF9iZWdpbiYjMzQ7LAogICAgJiMzNDt1bm1hcF9odWdlcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIGh1Z2V0bGIgUE1EIHNoYXJpbmcgcmFuZ2UgYWRqdXN0bWVudHMgZHVyaW5nIHVubWFwcGluZyBhbmQgemFwcGluZyBieSBjaGVja2luZyB3aGV0aGVyIFBNRCB0YWJsZXMgYXJlIGFjdHVhbGx5IHNoYXJlZCBhY3Jvc3MgdGhlIHJhbmdlIHJhdGhlciB0aGFuIHVuY29uZGl0aW9uYWxseSBleHBhbmRpbmcgYWxsIHBvdGVudGlhbGx5IHNoYXJlYWJsZSByYW5nZXMuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIGh1Z2V0bGIgbWVtb3J5IHVubWFwcGluZyBhbmQgemFwcGluZyBiZWhhdmlvciByZWFjaGFibGUgdmlhIGh1Z2V0bGJmcyBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2E5MGExODg1NDdmYTI5ZjA5NTZhZmZlN2MwZTY4NTliMmIyN2EzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEwOjAxOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDc4NTc3Mjg0NTc5NTIuLmU4MGUxMTE4Mzg1ZjAgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTUzNTMsMTYgJiM0Mzs1MzUzLDEwNSBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaHVnZV9wbWRfdW5zaGFyZV9mbHVzaCh0bGIsIHZtYSk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORwomIzQzO3N0YXRpYyBib29sCiYjNDM7cG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiYjNDM7CQkJICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgKnJhbmdlX3N0YXJ0LAomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgKnJhbmdlX2VuZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS0mZ3Q7dm1fc3RhcnQsIFBVRF9TSVpFKTsKJiM0MzsJdW5zaWduZWQgbG9uZyB2X2VuZCA9IEFMSUdOX0RPV04odm1hLSZndDt2bV9lbmQsIFBVRF9TSVpFKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2UKJiM0MzsJICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NQVlTSEFSRSkgfHwgISh2X2VuZCAmZ3Q7IHZfc3RhcnQpIHx8CiYjNDM7CSAgICAoZW5kICZsdDs9IHZfc3RhcnQpIHx8IChzdGFydCAmZ3Q7PSB2X2VuZCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CSpyYW5nZV9zdGFydCA9IG1heChBTElHTl9ET1dOKHN0YXJ0LCBQVURfU0laRSksIHZfc3RhcnQpOwomIzQzOwkqcmFuZ2VfZW5kID0gbWluKEFMSUdOKGVuZCwgUFVEX1NJWkUpLCB2X2VuZCk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kKQomIzQzO3sKJiM0MzsJLyogRXh0ZW5kIHRoZSByYW5nZSB0byBiZSBQVUQgYWxpZ25lZCBmb3IgYSB3b3JzdCBjYXNlIHNjZW5hcmlvICovCiYjNDM7CWlmICgqc3RhcnQgJmd0OyByYW5nZV9zdGFydCkKJiM0MzsJCSpzdGFydCA9IHJhbmdlX3N0YXJ0OwomIzQzOwomIzQzOwlpZiAoKmVuZCAmbHQ7IHJhbmdlX2VuZCkKJiM0MzsJCSplbmQgPSByYW5nZV9lbmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9lbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0mZ3Q7dm1fbW07CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKJiM0MzsKJiM0MzsJaHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZCh2bWEpOwomIzQzOwlpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtJmd0O3ZtX2ZpbGUtJmd0O2ZfbWFwcGluZyk7CiYjNDM7CiYjNDM7CWZvciAoYWRkcmVzcyA9IHJhbmdlX3N0YXJ0OyBhZGRyZXNzICZsdDsgcmFuZ2VfZW5kOyBhZGRyZXNzICYjNDM7PSBQVURfU0laRSkgewomIzQzOwkJcHRlX3QgKnB0ZXA7CiYjNDM7CQlib29sIHNoYXJlZDsKJiM0MzsKJiM0MzsJCXB0ZXAgPSBodWdldGxiX3dhbGsodm1hLCBhZGRyZXNzLCBQTURfU0laRSk7CiYjNDM7CQlpZiAoIXB0ZXApCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzcGluX2xvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpOwomIzQzOwkJc2hhcmVkID0gcHRkZXNjX3BtZF9pc19zaGFyZWQodmlydF90b19wdGRlc2MocHRlcCkpOwomIzQzOwkJc3Bpbl91bmxvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpOwomIzQzOwomIzQzOwkJaWYgKHNoYXJlZCkKJiM0MzsJCQlhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHN0YXJ0LCBlbmQsIGFkZHJlc3MsCiYjNDM7CQkJCQkJICAgICBhZGRyZXNzICYjNDM7IFBVRF9TSVpFKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LAomIzQzOwkJCSAgICAgdW5zaWduZWQgbG9uZyAqZW5kKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kOwomIzQzOwomIzQzOwlpZiAoaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSAhPSBQTURfU0laRSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCwKJiM0MzsJCQkJCSZhbXA7cmFuZ2Vfc3RhcnQsICZhbXA7cmFuZ2VfZW5kKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyB2b2lkCiYjNDM7YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsCiYjNDM7CQkJICAgICB1bnNpZ25lZCBsb25nICplbmQpCiYjNDM7ewomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCSB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKQogewogCWlmICghdm1hLSZndDt2bV9maWxlKQkvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovCiAJCXJldHVybjsKIAotCWFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIHN0YXJ0LCBlbmQpOwogCWh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTsKLQlpZiAodm1hLSZndDt2bV9maWxlKQomIzQzOwlpZiAodm1hLSZndDt2bV9maWxlKSB7CiAJCWlfbW1hcF9sb2NrX3dyaXRlKHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nKTsKJiM0MzsJCWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBzdGFydCwgZW5kKTsKJiM0MzsJfQogfQogCiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtNTQwMSw3ICYjNDM7NTQ5MCwxMiBAQCB2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCiAJbW11X25vdGlmaWVyX3JhbmdlX2luaXQoJmFtcDtyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLSZndDt2bV9tbSwKIAkJCQlzdGFydCwgZW5kKTsKLQlhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCAmYW1wO3JhbmdlLnN0YXJ0LCAmYW1wO3JhbmdlLmVuZCk7CiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzCiYjNDM7CSAqIGhvbGQgaV9tbWFwX3J3c2VtIGFuZCB0aGUgaHVnZXRsYiBWTUEgbG9jayBmb3Igc2hhcmVkIG1hcHBpbmdzLCBzbyBQTUQKJiM0MzsJICogc2hhcmluZyBzdGF0ZSBjYW5ub3QgY2hhbmdlIGJlZm9yZSBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkuCiYjNDM7CSAqLwomIzQzOwlhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQpOwogCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCZhbXA7cmFuZ2UpOwogCXRsYl9nYXRoZXJfbW11KCZhbXA7dGxiLCB2bWEtJmd0O3ZtX21tKTsKIApAQCAtNjk0MywyMyAmIzQzOzcwMzcsMTMgQEAgYm9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCkKIHsKLQl1bnNpZ25lZCBsb25nIHZfc3RhcnQgPSBBTElHTih2bWEtJmd0O3ZtX3N0YXJ0LCBQVURfU0laRSksCi0JCXZfZW5kID0gQUxJR05fRE9XTih2bWEtJmd0O3ZtX2VuZCwgUFVEX1NJWkUpOwomIzQzOwl1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7CiAKLQkvKgotCSAqIHZtYSBuZWVkcyB0byBzcGFuIGF0IGxlYXN0IG9uZSBhbGlnbmVkIFBVRCBzaXplLCBhbmQgdGhlIHJhbmdlCi0JICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGluLgotCSAqLwotCWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUFZU0hBUkUpIHx8ICEodl9lbmQgJmd0OyB2X3N0YXJ0KSB8fAotCQkoKmVuZCAmbHQ7PSB2X3N0YXJ0KSB8fCAoKnN0YXJ0ICZndDs9IHZfZW5kKSkKJiM0MzsJaWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCwKJiM0MzsJCQkJCSZhbXA7cmFuZ2Vfc3RhcnQsICZhbXA7cmFuZ2VfZW5kKSkKIAkJcmV0dXJuOwogCi0JLyogRXh0ZW5kIHRoZSByYW5nZSB0byBiZSBQVUQgYWxpZ25lZCBmb3IgYSB3b3JzdCBjYXNlIHNjZW5hcmlvICovCi0JaWYgKCpzdGFydCAmZ3Q7IHZfc3RhcnQpCi0JCSpzdGFydCA9IEFMSUdOX0RPV04oKnN0YXJ0LCBQVURfU0laRSk7Ci0KLQlpZiAoKmVuZCAmbHQ7IHZfZW5kKQotCQkqZW5kID0gQUxJR04oKmVuZCwgUFVEX1NJWkUpOwomIzQzOwlhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpOwogfQogCiAvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBnaXZlbiBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbW0vaHVnZXRsYi5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcyBraWNrcyBpbjogdGltZSB0byBkaXNzZWN0IHRoaXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gZG8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaHVnZSBwYWdlIG1hbmFnZW1lbnQuCgpGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgaW5zcGVjdCB0aGUgcGF0Y2ggaXRzZWxmLCBvZiBjb3Vyc2UuIEJ1dCBiZWZvcmUgSSBldmVuIGdldCBpbnRvIGxpbmUtYnktbGluZSBkaWZmcywgSSYjMzk7bGwgd2FudCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgYW5kIGNvbnRleHQuCgpUaGVuLCBJJiMzOTtsbCByZWFjaCBmb3IgbXkgdG9vbHMg4oCTIHByb2JhYmx5IGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHdoYXQgcGFydHMgb2YgYG1tL2h1Z2V0bGIuY2AgYXJlIGFmZmVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgc3ltYm9scyB0aGF0IG1pZ2h0IGNvbWUgaW50byBwbGF5IGhlcmUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgaW1wYWN0IGFuZCBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzIG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBXaGF0IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFyZSBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBuZXcgZmVhdHVyZXMgYmVpbmcgaW50cm9kdWNlZCBvciBleGlzdGluZyBiZWhhdmlvcnMgYmVpbmcgbW9kaWZpZWQ/IEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIGFyZWFzIG9mIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiB0aGlzIHBhdGNoIGludGVyc2VjdHMgd2l0aC4KCkkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLgpJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWxhdGVkIHN5bWJvbHMgdG8gc2VlIGlmIHRoZSBwYXRjaCBtYWtlcyBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGVtLCBhbmQgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHN5bWJvbHMuCgpUaGUgY29yZSBvZiBteSBhbmFseXNpcyB3aWxsIHJldm9sdmUgYXJvdW5kIGhvdyB0aGlzIHBhdGNoIGltcGFjdHMgdGhlIG92ZXJhbGwgaHVnZSBwYWdlIHN1YnN5c3RlbS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBxdWVzdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBhbnN3ZXIgYWJvdXQgcGVyZm9ybWFuY2UsIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGFsaWducyB3aXRoIHRoZSBlc3RhYmxpc2hlZCBkZXNpZ24gcHJpbmNpcGxlcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBob2xlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz00ODg0PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9odWdldGxiLmMtNDkzMC1cbm1tL2h1Z2V0bGIuYzo0OTMxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG5tbS9odWdldGxiLmMtNDkzMi1cdFx0LyogSWYgdGhlIHBhZ2V0YWJsZXMgYXJlIHNoYXJlZCwgdGhlcmUgaXMgbm90aGluZyB0byBkbyAqL1xuLS1cbm1tL2h1Z2V0bGIuYz01MTk2PXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTM1NS1cbm1tL2h1Z2V0bGIuYzo1MzU2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG5tbS9odWdldGxiLmMtNTM1Ny1zdGF0aWMgYm9vbFxuLS1cbm1tL2h1Z2V0bGIuYz02OTQxPWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jLTY5ODEtXG5tbS9odWdldGxiLmM6Njk4MjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xubW0vaHVnZXRsYi5jLTY5ODMtc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV90YWJsZV9zaGFyZWFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYz03MTYwPXZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtNzE3MS1cbm1tL2h1Z2V0bGIuYzo3MTcyOiNlbHNlIC8qICFDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HICovXG5tbS9odWdldGxiLmMtNzE3My1cbi0tXG5tbS9odWdldGxiLmM9NzIwMj1ib29sIHdhbnRfcG1kX3NoYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vaHVnZXRsYi5jLTcyMDUtfVxubW0vaHVnZXRsYi5jOjcyMDY6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcgKi9cbm1tL2h1Z2V0bGIuYy03MjA3LVxuLS1cbm1tL2h1Z2V0bGIuYz03MzAyPV9fd2VhayB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaClcbm1tL2h1Z2V0bGIuYy03MzAzLXtcbm1tL2h1Z2V0bGIuYzo3MzA0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG5tbS9odWdldGxiLmMtNzMwNS1cdGlmIChodWdlX3BhZ2Vfc2l6ZShoKSA9PSBQTURfU0laRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgSHVudCBmb3IgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBmaW5kaW5nIHRoZSByZWxldmFudCBLY29uZmlnIGVudHJpZXMgcmVsYXRlZCB0byBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwcmV0dHkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSwgc28gdGhlIHNlYXJjaCBzaG91bGRuJiMzOTt0IGJlIHRvbyBicm9hZC4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhpcyBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGhpZXJhcmNoeS4KCkkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgKmV4YWN0KiBlbnRyeSBvciBlbnRyaWVzIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyB0aGlzIGJlaGF2aW9yLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIHBvc3NpYmxlIHZhbHVlcywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LiBUaGlzIHdpbGwgaW52b2x2ZSB1c2luZyBzdGFuZGFyZCB0b29scyBvciBtZXRob2RzIGZvciBuYXZpZ2F0aW5nIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0gLSBob3BlZnVsbHksIGl0JiMzOTtzIG5vdCBidXJpZWQgdG9vIGRlZXAgd2l0aGluIHNvbWUgb2JzY3VyZSBmaWxlLgoKT25jZSBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoZSByZWxldmFudCBLY29uZmlnIGVudHJ5LCBJJiMzOTtsbCBhc3Nlc3MgdGhlIGNvbnRleHQuIFdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgcmVsYXRlZD8gV2hhdCBmZWF0dXJlcyBkZXBlbmQgb24gdGhpcz8gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgZXhpc3RlbmNlPyBCYXNpY2FsbHksIEkmIzM5O20gYWltaW5nIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhpcyBvcHRpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGxhbmRzY2FwZS4gSSYjMzk7bGwgbmVlZCB0byBleHRyYWN0IGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgSSBjYW4gZnJvbSB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZiwgYW5kIG1heWJlIGxvb2sgaW50byByZWxhdGVkIHNvdXJjZSBmaWxlcyBpZiBuZWNlc3NhcnkuIFRoaXMgd2lsbCBoZWxwIG1lIHRydWx5IHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIHdvcmtzIGFuZCB3aGVyZSBpdCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9NDg4ND1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4tLVxubW0vaHVnZXRsYi5jLTQ5MzAtXG5tbS9odWdldGxiLmM6NDkzMTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xubW0vaHVnZXRsYi5jLTQ5MzItXHRcdC8qIElmIHRoZSBwYWdldGFibGVzIGFyZSBzaGFyZWQsIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gKi9cbi0tXG5tbS9odWdldGxiLmM9NTE5Nj12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUzNTUtXG5tbS9odWdldGxiLmM6NTM1NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xubW0vaHVnZXRsYi5jLTUzNTctc3RhdGljIGJvb2xcbi0tXG5tbS9odWdldGxiLmM9Njk0MT1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYy02OTgxLVxubW0vaHVnZXRsYi5jOjY5ODI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbm1tL2h1Z2V0bGIuYy02OTgzLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VfdGFibGVfc2hhcmVhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3ZtYSxcbi0tXG5tbS9odWdldGxiLmM9NzE2MD12b2lkIGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZXRsYi5jLTcxNzEtXG5tbS9odWdldGxiLmM6NzE3MjojZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyAqL1xubW0vaHVnZXRsYi5jLTcxNzMtXG4tLVxubW0vaHVnZXRsYi5jPTcyMDI9Ym9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2h1Z2V0bGIuYy03MjA1LX1cbm1tL2h1Z2V0bGIuYzo3MjA2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HICovXG5tbS9odWdldGxiLmMtNzIwNy1cbi0tXG5tbS9odWdldGxiLmM9NzMwMj1fX3dlYWsgdW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtNzMwMy17XG5tbS9odWdldGxiLmM6NzMwNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xubW0vaHVnZXRsYi5jLTczMDUtXHRpZiAoaHVnZV9wYWdlX3NpemUoaCkgPT0gUE1EX1NJWkUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZm9ybSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipIdW50aW5nIERvd24gSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbiBpcyBrZXkgdG8gWyAqaW5zZXJ0IHJlbGV2YW50IHRlY2huaWNhbCBjb250ZXh0IGhlcmUsIHNwZWNpZmljIHRvIHRoZSB1c2VyJiMzOTtzIGV4cGVydGlzZSwgZS5nLiwgb3B0aW1pemluZyBtZW1vcnkgYWxsb2NhdGlvbiwgZGVidWdnaW5nIHBhZ2UgdGFibGUgaXNzdWVzLCBvciB1bmRlcnN0YW5kaW5nIE5VTUEgYmVoYXZpb3VyKl0uCgpJJiMzOTttIHRoaW5raW5nIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIGlzIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcyBvZiB0aGUga2VybmVsIHNvdXJjZS4gVGhvc2UgYXJlIHRoZSBjb25maWd1cmF0aW9uIG1lbnVzIHRoYXQgdGhlIGtlcm5lbCB1c2VzIHRvIGRldGVybWluZSB3aGF0IGZlYXR1cmVzIGFyZSBidWlsdCBpbnRvIGEga2VybmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSB3aG9sZSByZXBvc2l0b3J5IHRvIGVuc3VyZSBJIGZpbmQgYWxsIGluc3RhbmNlcywgdG8gYWNjb3VudCBmb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRlZmluaXRpb25zIG9yIGNvbmRpdGlvbmFsIGJ1aWxkcy4gVGhlcmUgbWlnaHQgYmUgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbG9naWMgaW52b2x2ZWQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIGRvIGEgZ2xvYmFsIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9Mjc3PWNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuLS1cbmZzL0tjb25maWctMjgyLVxuZnMvS2NvbmZpZzoyODM6Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xuZnMvS2NvbmZpZy0yODQtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgZnMvS2NvbmZpZ2AuIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgc3BlY2lmaWMgZmlsZSBzeXN0ZW0gb3B0aW9ucywgbGlrZWx5IGluIHRoZSBhcmVhIG9mIGEgcGFydGljdWxhciBmaWxlc3lzdGVtLCBsZXQmIzM5O3Mgc2F5IGFyb3VuZCBsaW5lIDI4My4gVGltZSB0byBmaXJlIHVwIG15IGVkaXRvciBhbmQgdGFrZSBhIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCB0aGVyZSwgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgY29uZmlnIG9wdGlvbnMuIFRoZXJlIG1heSBiZSBhIHN1YnRsZSBkZXBlbmRlbmN5IHRoYXQgSSBhbSBvdmVybG9va2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXG4gMjcxOlx0ZW5kaWYgIyBIVUdFVExCRlNcbiAyNzI6XHRcbiAyNzM6XHRjb25maWcgSFVHRVRMQl9QQUdFXG4gMjc0Olx0XHRkZWZfYm9vbCBIVUdFVExCRlNcbiAyNzU6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiAyNzY6XHRcbiAyNzc6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiAyNzg6XHRcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuIDI3OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG4gMjgwOlx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4gMjgxOlx0XHRzZWxlY3QgU1BBUlNFTUVNX1ZNRU1NQVBfUFJFSU5JVCBpZiBBUkNIX1dBTlRfSFVHRVRMQl9WTUVNTUFQX1BSRUlOSVRcbiAyODI6XHRcbiAyODM6XHRjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4gMjg0Olx0XHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbiAyODU6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFx1MDAyNlx1MDAyNiBTUExJVF9QTURfUFRMT0NLU1xuIDI4NjpcdFxuIDI4NzpcdGNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG4gMjg4Olx0XHRib29sXG4gMjg5Olx0XG4gMjkwOlx0c291cmNlIFwmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWdcJiMzNDtcbiAyOTE6XHRzb3VyY2UgXCYjMzQ7ZnMvZWZpdmFyZnMvS2NvbmZpZ1wmIzM0O1xuIDI5MjpcdFxuIDI5MzpcdGVuZG1lbnVcbiAyOTQ6XHRcbiAyOTU6XHRtZW51Y29uZmlnIE1JU0NfRklMRVNZU1RFTVNcbiAyOTY6XHRcdGJvb2wgXCYjMzQ7TWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtc1wmIzM0O1xuIDI5NzpcdFx0ZGVmYXVsdCB5XG4gMjk4Olx0XHRoZWxwXG4gMjk5Olx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB2YXJpb3VzIG1pc2NlbGxhbmVvdXNcbiAzMDA6XHRcdCAgZmlsZXN5c3RlbXMsIHN1Y2ggYXMgZmlsZXN5c3RlbXMgdGhhdCBjYW1lIGZyb20gb3RoZXJcbiAzMDE6XHRcdCAgb3BlcmF0aW5nIHN5c3RlbXMuXG4gMzAyOlx0XG4gMzAzOlx0XHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gMzA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIEhVR0VUTEJGUyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgSFVHRVRMQkZTYCBhY3R1YWxseSByZWxpZXMgb24gZnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludC4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIGBmcy9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgcGxhY2VzIHdoZXJlIHRoaXMga2luZCBvZiBkZXBlbmRlbmN5IHdvdWxkIGJlIGRlZmluZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0LCB3aGVuIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGRpcmVjdGx5IGltcGFjdCB3aGV0aGVyIG9yIG5vdCBgSFVHRVRMQkZTYCBjYW4gZXZlbiBiZSBjb21waWxlZCwgb3IgZnVuY3Rpb25zIGNvcnJlY3RseS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcywgcG9zc2libHkgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGZpbGUgc3lzdGVtIGNvcmUgY29tcG9uZW50cy4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGRlYnVnZ2luZyBleGVyY2lzZSDigJMganVzdCBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBwcmVyZXF1aXNpdGUgc2V0dGluZ3MgbmVlZGVkIGZvciBgSFVHRVRMQkZTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24gYmV0dGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb3V0IHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lcyAyNDUtMjc1IGluIGBmcy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBvcHRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZCBvciBpbmNsdWRlZCBmb3IgYW55IGtleSBwYXJhbWV0ZXJzIGJlaW5nIGV4cG9zZWQgdG8gdGhlIHVzZXIuIEdpdmVuIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCwgaXQmIzM5O3MgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgYHNvdXJjZWAgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IHB1bGwgaW4gb3RoZXIgc2VjdGlvbnMgb2YgdGhlIGNvbmZpZ3VyYXRpb24sIGFzIHRoaXMgY2FuIG9mdGVuIGhpZGUgc29tZSBvZiB0aGUgaW1wb3J0YW50IGRldGFpbHMuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSBzb2xpZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuIDI2NTpcdFx0ZGVmYXVsdCBuXG4gMjY2Olx0XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjY3Olx0XHRoZWxwXG4gMjY4Olx0XHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xuIDI2OTpcdFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXG4gMjcwOlx0XHQgIChib290IGNvbW1hbmQgbGluZSkgb3IgaHVnZXRsYl9vcHRpbWl6ZV92bWVtbWFwIChzeXNjdGwpLlxuIDI3MTpcdGVuZGlmICMgSFVHRVRMQkZTXG4gMjcyOlx0XG4gMjczOlx0Y29uZmlnIEhVR0VUTEJfUEFHRVxuIDI3NDpcdFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4gMjc1Olx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4gMjc2Olx0XG4gMjc3Olx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjc4Olx0XHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbiAyNzk6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFYCBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFYC4gSSBrbm93IHdoYXQgaXQgKm1lYW5zKiDigJMgdGhlIGRlc2lyZSBmb3IgdGhlIGFyY2hpdGVjdHVyZSB0byBzdXBwb3J0IHNoYXJlZCBodWdlIFBNRHMg4oCTIGJ1dCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSAqKnByYWN0aWNhbCBpbXBsaWNhdGlvbnMqKiBvZiBpdHMgc3VwcG9ydC4gSSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBhcmNoaXRlY3R1cmVzIGFjdHVhbGx5IGRlZmluZSBhbmQgZW5hYmxlIHRoaXMgZmVhdHVyZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGxpa2VseSBgS2NvbmZpZ2AgZmlsZXMgd2l0aGluIHRoZSBgYXJjaC9gIGRpcmVjdG9yaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGFyY2hpdGVjdHVyZXMgY29uZGl0aW9uYWxseSBzZWxlY3Qgb3IgZGVwZW5kIG9uIHRoaXMgb3B0aW9uLiBJ4oCZbGwgbGlrZWx5IGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBzZWN0aW9ucy4gQmV5b25kIGEgc2ltcGxlIGRlZmluaXRpb24sIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gYW55IGFzc29jaWF0ZWQgZmVhdHVyZXMgb3IgY29uc3RyYWludHMgdGhhdCBhcmUgYWxzbyBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGl0cyBwcmVzZW5jZS4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIHNwZWNpZmljIG1lbW9yeSBtb2RlbCBhc3N1bXB0aW9ucyB0byBwZXJmb3JtYW5jZS1yZWxhdGVkIGNvbnNpZGVyYXRpb25zLiBNeSBnb2FsIGlzIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmVhdHVyZSYjMzk7cyByb2xlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmVzIGl0IHRvdWNoZXMuIEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBmb3IgYSB5ZXMvbm8gYW5zd2VyOyBJIHdhbnQgdG8gc2VlIHRoZSAqd2h5KiBhbmQgdGhlICpob3cqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTExMTc9Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbi0tXG5hcmNoL0tjb25maWctMTEyMC1cbmFyY2gvS2NvbmZpZzoxMTIxOmNvbmZpZyBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcbmFyY2gvS2NvbmZpZy0xMTIyLVx0Ym9vbFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy05NC1cdHNlbGVjdCBBUkNIX1dBTlRfRlJBTUVfUE9JTlRFUlNcbmFyY2gvYXJtNjQvS2NvbmZpZzo5NTpcdHNlbGVjdCBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUgaWYgQVJNNjRfNEtfUEFHRVMgfHwgKEFSTTY0XzE2S19QQUdFUyBcdTAwMjZcdTAwMjYgIUFSTTY0X1ZBX0JJVFNfMzYpXG5hcmNoL2FybTY0L0tjb25maWctOTYtXHRzZWxlY3QgQVJDSF9XQU5UX0xEX09SUEhBTl9XQVJOXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy04OC1cdHNlbGVjdCBBUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCIGlmICFSSVNDVl9JU0FfU1ZOQVBPVFxuYXJjaC9yaXNjdi9LY29uZmlnOjg5Olx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFX1BNRF9TSEFSRSBpZiA2NEJJVFxuYXJjaC9yaXNjdi9LY29uZmlnLTkwLVx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTQ4LVx0c2VsZWN0IEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcbmFyY2gveDg2L0tjb25maWc6MTQ5Olx0c2VsZWN0IEFSQ0hfV0FOVF9IVUdFX1BNRF9TSEFSRVx0XHRpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWctMTUwLVx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxuLS1cbmZzL0tjb25maWc9MjgzPWNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbmZzL0tjb25maWctMjg0LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnOjI4NTpcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFx1MDAyNlx1MDAyNiBTUExJVF9QTURfUFRMT0NLU1xuZnMvS2NvbmZpZy0yODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gSHVnZSBQYWdlczogRW5hYmxpbmcgU2hhcmVkIFBNRCBQYWdlIFRhYmxlcyoqCgpBbHJpZ2h0LCBzbyAqSFVHRVRMQkZTKiBpcyB0aGUga2V5IGhlcmUg4oCTIGl0JiMzOTtzIHRoZSBlbmFibGVyLiBXZSBrbm93IHRoYXQgYEhVR0VUTEJGU2AgdW5sb2NrcyBgSFVHRVRMQl9QQUdFYCwgYW5kIGZyb20gdGhlcmUgd2UgZ2V0IGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgYXJjaGl0ZWN0dXJlIGFuZCB3aGF0IHRoYXQgZW5hYmxlcyBvbiB4ODZfNjQsIGFybTY0LCBhbmQgdGhlIG90aGVyIGFyY2hpdGVjdHVyZXMuIFdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgc2VyaW91cyBvcHRpbWl6YXRpb25zIGFyb3VuZCBodWdlIHBhZ2UgbWFuYWdlbWVudCBhdCB0aGUgUE1EIGxldmVsLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIGRpc3NlY3QgdGhpcyBwYXRjaCwgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBhbmQgaG93IGl04oCZcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9kaWZpY2F0aW9ucyBhbmQgbmV3IGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgaG93IGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLCBhbmQgd2hvIHRoZSBjYWxsZXJzIGFyZS4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgYWJsZSB0byBqdWRnZSB0aGUgaW1wbGljYXRpb25zLgoKVGltZSB0byBjcmFjayBvcGVuIGBtbS9odWdldGxiLmNgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbWFnaWMgc3Vycm91bmRpbmcgaHVnZSBwYWdlcyBoYXBwZW5zLiBJJiMzOTtsbCByZWFkIHRocm91Z2ggdGhlIGNvZGUgaW4gdGhlIG5laWdoYm9yaG9vZCBvZiB0aGUgY2hhbmdlcyB0byBnYWluIGEgcmVhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGltcGFjdHMgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MzUwOlx0XHR9XG41MzUxOlx0XHR0bGJfZW5kX3ZtYSh0bGIsIHZtYSk7XG41MzUyOlx0XG41MzUzOlx0XHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcbjUzNTQ6XHR9XG41MzU1Olx0XG41MzU2Olx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbjUzNTc6XHRzdGF0aWMgYm9vbFxuNTM1ODpcdHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuNTM1OTpcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpyYW5nZV9zdGFydCxcbjUzNjA6XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpyYW5nZV9lbmQpXG41MzYxOlx0e1xuNTM2MjpcdFx0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVx1MDAzZXZtX3N0YXJ0LCBQVURfU0laRSk7XG41MzYzOlx0XHR1bnNpZ25lZCBsb25nIHZfZW5kID0gQUxJR05fRE9XTih2bWEtXHUwMDNldm1fZW5kLCBQVURfU0laRSk7XG41MzY0Olx0XG41MzY1Olx0XHQvKlxuNTM2NjpcdFx0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2VcbjUzNjc6XHRcdCAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpdC5cbjUzNjg6XHRcdCAqL1xuNTM2OTpcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkgfHwgISh2X2VuZCBcdTAwM2Ugdl9zdGFydCkgfHxcbjUzNzA6XHRcdCAgICAoZW5kIFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFx1MDAzZT0gdl9lbmQpKVxuNTM3MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG41MzcyOlx0XG41MzczOlx0XHQqcmFuZ2Vfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydCwgUFVEX1NJWkUpLCB2X3N0YXJ0KTtcbjUzNzQ6XHRcdCpyYW5nZV9lbmQgPSBtaW4oQUxJR04oZW5kLCBQVURfU0laRSksIHZfZW5kKTtcbjUzNzU6XHRcdHJldHVybiB0cnVlO1xuNTM3NjpcdH1cbjUzNzc6XHRcbjUzNzg6XHRzdGF0aWMgdm9pZFxuNTM3OTpcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbjUzODA6XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kKVxuNTM4MTpcdHtcbjUzODI6XHRcdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xuNTM4MzpcdFx0aWYgKCpzdGFydCBcdTAwM2UgcmFuZ2Vfc3RhcnQpXG41Mzg0Olx0XHRcdCpzdGFydCA9IHJhbmdlX3N0YXJ0O1xuNTM4NTpcdFxuNTM4NjpcdFx0aWYgKCplbmQgXHUwMDNjIHJhbmdlX2VuZClcbjUzODc6XHRcdFx0KmVuZCA9IHJhbmdlX2VuZDtcbjUzODg6XHR9XG41Mzg5Olx0XG41MzkwOlx0c3RhdGljIHZvaWRcbjUzOTE6XHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNTM5MjpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbjUzOTM6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsXG41Mzk0Olx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbjUzOTU6XHR7XG41Mzk2Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuNTM5NzpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG41Mzk4Olx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG41Mzk5Olx0XG41NDAwOlx0XHRodWdldGxiX3ZtYV9hc3NlcnRfbG9ja2VkKHZtYSk7XG41NDAxOlx0XHRpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuNTQwMjpcdFxuNTQwMzpcdFx0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXHUwMDNjIHJhbmdlX2VuZDsgYWRkcmVzcyAmIzQzOz0gUFVEX1NJWkUpIHtcbjU0MDQ6XHRcdFx0cHRlX3QgKnB0ZXA7XG41NDA1Olx0XHRcdGJvb2wgc2hhcmVkO1xuNTQwNjpcdFxuNTQwNzpcdFx0XHRwdGVwID0gaHVnZXRsYl93YWxrKHZtYSwgYWRkcmVzcywgUE1EX1NJWkUpO1xuNTQwODpcdFx0XHRpZiAoIXB0ZXApXG41NDA5Olx0XHRcdFx0Y29udGludWU7XG41NDEwOlx0XG41NDExOlx0XHRcdHNwaW5fbG9jayhodWdlX3B0ZV9sb2NrcHRyKGgsIG1tLCBwdGVwKSk7XG41NDEyOlx0XHRcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcbjU0MTM6XHRcdFx0c3Bpbl91bmxvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpO1xuNTQxNDpcdFxuNTQxNTpcdFx0XHRpZiAoc2hhcmVkKVxuNTQxNjpcdFx0XHRcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgYWRkcmVzcyxcbjU0MTc6XHRcdFx0XHRcdFx0XHQgICAgIGFkZHJlc3MgJiM0MzsgUFVEX1NJWkUpO1xuNTQxODpcdFx0fVxuNTQxOTpcdH1cbjU0MjA6XHRcbjU0MjE6XHRzdGF0aWMgdm9pZFxuNTQyMjpcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuNTQyMzpcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxuNTQyNDpcdHtcbjU0MjU6XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcbjU0MjY6XHRcbjU0Mjc6XHRcdGlmIChodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpICE9IFBNRF9TSVpFKVxuNTQyODpcdFx0XHRyZXR1cm47XG41NDI5Olx0XG41NDMwOlx0XHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxuNTQzMTpcdFx0XHRcdFx0XHRcdTAwMjZyYW5nZV9zdGFydCwgXHUwMDI2cmFuZ2VfZW5kKSlcbjU0MzI6XHRcdFx0cmV0dXJuO1xuNTQzMzpcdFxuNTQzNDpcdFx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpO1xuNTQzNTpcdH1cbjU0MzY6XHQjZWxzZVxuNTQzNzpcdHN0YXRpYyB2b2lkXG41NDM4Olx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXG41NDM5Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXG41NDQwOlx0e1xuNTQ0MTpcdH1cbjU0NDI6XHQjZW5kaWZcbjU0NDM6XHRcbjU0NDQ6XHR2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG41NDQ1Olx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG41NDQ2Olx0e1xuNTQ0NzpcdFx0aWYgKCF2bWEtXHUwMDNldm1fZmlsZSlcdC8qIGh1Z2V0bGJmc19maWxlX21tYXAgZXJyb3IgKi9cbjU0NDg6XHRcdFx0cmV0dXJuO1xuNTQ0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vaHVnZXRsYi5jYCBmb3IgQ29udGV4dCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYG1tL2h1Z2V0bGIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGxpbmVzIDU0NTAtNTUyMCBhbmQgdGhlbiBjaXJjbGluZyBiYWNrIHRvIGxpbmVzIDcwMzAtNzA2MC4gVGhlc2UgcmFuZ2VzIGFyZSB1c3VhbGx5IHdoZXJlIHNvbWUgY3JpdGljYWwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaHVnZSBwYWdlIHN1YnN5c3RlbSBhbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2Ugd2lsbCBiZSBkZWZpbmVkLCBvciB3aGVyZSB0aGUgcmVsZXZhbnQgcGFnZSB0YWJsZSBsb2dpYyBpcyBob3VzZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUsIGhvcGVmdWxseSBJIGNhbiBkZWR1Y2Ugd2hhdCYjMzk7cyBoYXBwZW5pbmcgYmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgY29udGV4dCBpcy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbnRlcmFjdGlvbnMgaW4gdGhlc2UgcmFuZ2VzIHdpdGggTlVNQSwgbWVtb3J5IGFsbG9jYXRpb24gb3IgcmVsZWFzZSwgb3IgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgZm9jdXMgb2YgbXkgY3VycmVudCBxdWVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0NTA6XHRcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcbjU0NTE6XHRcdGlmICh2bWEtXHUwMDNldm1fZmlsZSkge1xuNTQ1MjpcdFx0XHRpX21tYXBfbG9ja193cml0ZSh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuNTQ1MzpcdFx0XHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgc3RhcnQsIGVuZCk7XG41NDU0Olx0XHR9XG41NDU1Olx0fVxuNTQ1NjpcdFxuNTQ1NzpcdHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG41NDU4Olx0XHRcdCAgICAgICBzdHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpXG41NDU5Olx0e1xuNTQ2MDpcdFx0emFwX2ZsYWdzX3QgemFwX2ZsYWdzID0gZGV0YWlscyA/IGRldGFpbHMtXHUwMDNlemFwX2ZsYWdzIDogMDtcbjU0NjE6XHRcbjU0NjI6XHRcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpXHQvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovXG41NDYzOlx0XHRcdHJldHVybjtcbjU0NjQ6XHRcbjU0NjU6XHRcdGlmICh6YXBfZmxhZ3MgXHUwMDI2IFpBUF9GTEFHX1VOTUFQKSB7XHQvKiBmaW5hbCB1bm1hcCAqL1xuNTQ2NjpcdFx0XHQvKlxuNTQ2NzpcdFx0XHQgKiBVbmxvY2sgYW5kIGZyZWUgdGhlIHZtYSBsb2NrIGJlZm9yZSByZWxlYXNpbmcgaV9tbWFwX3J3c2VtLlxuNTQ2ODpcdFx0XHQgKiBXaGVuIHRoZSB2bWFfbG9jayBpcyBmcmVlZCwgdGhpcyBtYWtlcyB0aGUgdm1hIGluZWxpZ2libGVcbjU0Njk6XHRcdFx0ICogZm9yIHBtZCBzaGFyaW5nLiAgQW5kLCBpX21tYXBfcndzZW0gaXMgcmVxdWlyZWQgdG8gc2V0IHVwXG41NDcwOlx0XHRcdCAqIHBtZCBzaGFyaW5nLiAgVGhpcyBpcyBpbXBvcnRhbnQgYXMgcGFnZSB0YWJsZXMgZm9yIHRoaXNcbjU0NzE6XHRcdFx0ICogdW5tYXBwZWQgcmFuZ2Ugd2lsbCBiZSBhc3luY2hyb3VzbHkgZGVsZXRlZC4gIElmIHRoZSBwYWdlXG41NDcyOlx0XHRcdCAqIHRhYmxlcyBhcmUgc2hhcmVkLCB0aGVyZSB3aWxsIGJlIGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5XG41NDczOlx0XHRcdCAqIHNvbWVvbmUgZWxzZS5cbjU0NzQ6XHRcdFx0ICovXG41NDc1Olx0XHRcdF9faHVnZXRsYl92bWFfdW5sb2NrX3dyaXRlX2ZyZWUodm1hKTtcbjU0NzY6XHRcdH0gZWxzZSB7XG41NDc3Olx0XHRcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xuNTQ3ODpcdFx0fVxuNTQ3OTpcdFxuNTQ4MDpcdFx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuNTQ4MTpcdFx0XHRpX21tYXBfdW5sb2NrX3dyaXRlKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG41NDgyOlx0fVxuNTQ4MzpcdFxuNTQ4NDpcdHZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG41NDg1Olx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbjU0ODY6XHRcdFx0XHQgIHphcF9mbGFnc190IHphcF9mbGFncylcbjU0ODc6XHR7XG41NDg4Olx0XHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xuNTQ4OTpcdFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xuNTQ5MDpcdFxuNTQ5MTpcdFx0bW11X25vdGlmaWVyX3JhbmdlX2luaXQoXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cdTAwM2V2bV9tbSxcbjU0OTI6XHRcdFx0XHRcdHN0YXJ0LCBlbmQpO1xuNTQ5MzpcdFx0LypcbjU0OTQ6XHRcdCAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzXG41NDk1Olx0XHQgKiBob2xkIGlfbW1hcF9yd3NlbSBhbmQgdGhlIGh1Z2V0bGIgVk1BIGxvY2sgZm9yIHNoYXJlZCBtYXBwaW5ncywgc28gUE1EXG41NDk2Olx0XHQgKiBzaGFyaW5nIHN0YXRlIGNhbm5vdCBjaGFuZ2UgYmVmb3JlIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKS5cbjU0OTc6XHRcdCAqL1xuNTQ5ODpcdFx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuNTQ5OTpcdFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuNTUwMDpcdFx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCB2bWEtXHUwMDNldm1fbW0pO1xuNTUwMTpcdFxuNTUwMjpcdFx0X191bm1hcF9odWdlcGFnZV9yYW5nZShcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIGVuZCxcbjU1MDM6XHRcdFx0XHQgICAgICAgZm9saW8sIHphcF9mbGFncyk7XG41NTA0Olx0XG41NTA1Olx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuNTUwNjpcdFx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbjU1MDc6XHR9XG41NTA4Olx0XG41NTA5Olx0LypcbjU1MTA6XHQgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBvcmlnaW5hbCBtYXBwZXIgaXMgZmFpbGluZyB0byBDT1cgYSBNQVBfUFJJVkFURVxuNTUxMTpcdCAqIG1hcHBpbmcgaXQgb3ducyB0aGUgcmVzZXJ2ZSBwYWdlIGZvci4gVGhlIGludGVudGlvbiBpcyB0byB1bm1hcCB0aGUgcGFnZVxuNTUxMjpcdCAqIGZyb20gb3RoZXIgVk1BcyBhbmQgbGV0IHRoZSBjaGlsZHJlbiBiZSBTSUdLSUxMZWQgaWYgdGhleSBhcmUgZmF1bHRpbmcgdGhlXG41NTEzOlx0ICogc2FtZSByZWdpb24uXG41NTE0Olx0ICovXG41NTE1Olx0c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuNTUxNjpcdFx0XHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbjU1MTc6XHR7XG41NTE4Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuNTUxOTpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICppdGVyX3ZtYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlIGBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzAzMC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsIG92ZXJsYXBzIG9yIGNvbmZsaWN0cyB3aGVuIHdlJiMzOTtyZSBjb25zaWRlcmluZyBQZXJpcGhlcmFsIE1vZHVsZSBEcml2ZXIgKFBNRCkgc2hhcmluZy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgZm9yIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgd2hlbiBtdWx0aXBsZSBtb2R1bGVzIG1pZ2h0IGJlIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNhbWUgaGFyZHdhcmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjcml0ZXJpYSB1c2VkIHRvIGRldGVybWluZSBpZiBzaGFyaW5nICppcyogcG9zc2libGUsIGFuZCBtb3JlIGNyaXRpY2FsbHksIGhvdyB0aGUgcmFuZ2UgYWRqdXN0bWVudHMgYXJlIHBlcmZvcm1lZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFyaXNlIHdpdGggY29uY3VycmVudCBhY2Nlc3MuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LCBhbmQgSSYjMzk7bSBlYWdlciB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzAzMDpcdH1cbjcwMzE6XHRcbjcwMzI6XHQvKlxuNzAzMzpcdCAqIERldGVybWluZSBpZiBzdGFydCxlbmQgcmFuZ2Ugd2l0aGluIHZtYSBjb3VsZCBiZSBtYXBwZWQgYnkgc2hhcmVkIHBtZC5cbjcwMzQ6XHQgKiBJZiB5ZXMsIGFkanVzdCBzdGFydCBhbmQgZW5kIHRvIGNvdmVyIHJhbmdlIGFzc29jaWF0ZWQgd2l0aCBwb3NzaWJsZVxuNzAzNTpcdCAqIHNoYXJlZCBwbWQgbWFwcGluZ3MuXG43MDM2Olx0ICovXG43MDM3Olx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG43MDM4Olx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuNzAzOTpcdHtcbjcwNDA6XHRcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcbjcwNDE6XHRcbjcwNDI6XHRcdGlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsXG43MDQzOlx0XHRcdFx0XHRcdFx1MDAyNnJhbmdlX3N0YXJ0LCBcdTAwMjZyYW5nZV9lbmQpKVxuNzA0NDpcdFx0XHRyZXR1cm47XG43MDQ1Olx0XG43MDQ2Olx0XHRhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpO1xuNzA0NzpcdH1cbjcwNDg6XHRcbjcwNDk6XHQvKlxuNzA1MDpcdCAqIFNlYXJjaCBmb3IgYSBzaGFyZWFibGUgcG1kIHBhZ2UgZm9yIGh1Z2V0bGIuIEluIGFueSBjYXNlIGNhbGxzIHBtZF9hbGxvYygpXG43MDUxOlx0ICogYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcHRlLiBXaGlsZSB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoZVxuNzA1MjpcdCAqICFzaGFyZWQgcG1kIGNhc2UgYmVjYXVzZSB3ZSBjYW4gYWxsb2NhdGUgdGhlIHBtZCBsYXRlciBhcyB3ZWxsLCBpdCBtYWtlcyB0aGVcbjcwNTM6XHQgKiBjb2RlIG11Y2ggY2xlYW5lci4gcG1kIGFsbG9jYXRpb24gaXMgZXNzZW50aWFsIGZvciB0aGUgc2hhcmVkIGNhc2UgYmVjYXVzZVxuNzA1NDpcdCAqIHB1ZCBoYXMgdG8gYmUgcG9wdWxhdGVkIGluc2lkZSB0aGUgc2FtZSBpX21tYXBfcndzZW0gc2VjdGlvbiAtIG90aGVyd2lzZVxuNzA1NTpcdCAqIHJhY2luZyB0YXNrcyBjb3VsZCBlaXRoZXIgbWlzcyB0aGUgc2hhcmluZyAoc2VlIGh1Z2VfcHRlX29mZnNldCkgb3Igc2VsZWN0IGFcbjcwNTY6XHQgKiBiYWQgcG1kIGZvciBzaGFyaW5nLlxuNzA1NzpcdCAqL1xuNzA1ODpcdHB0ZV90ICpodWdlX3BtZF9zaGFyZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG43MDU5Olx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZClcbjcwNjA6XHR7XG43MDYxOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZztcbjcwNjI6XHRcdGNvbnN0IHBnb2ZmX3QgaWR4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcbjcwNjM6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3ZtYTtcbjcwNjQ6XHRcdHVuc2lnbmVkIGxvbmcgc2FkZHI7XG43MDY1Olx0XHRwdGVfdCAqc3B0ZSA9IE5VTEw7XG43MDY2Olx0XHRwdGVfdCAqcHRlO1xuNzA2NzpcdFxuNzA2ODpcdFx0aV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTtcbjcwNjk6XHRcdG1hcHBpbmdfcm1hcF90cmVlX2ZvcmVhY2goc3ZtYSwgbWFwcGluZywgaWR4LCBpZHgpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYCBDYWxsc2l0ZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBkaXZlLiBXaGVyZSBhcmUgdGhlIGNhbGxlcnM/IEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgbG9naWMgZHJpdmluZyBpdHMgcGFydGljdWxhciBhY3Rpb25zIGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgd2UgbG9va2luZyBhdCBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIE5VTUEgY29uc2lkZXJhdGlvbnMsIHNvbWV0aGluZyByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIG9yIHBlcmhhcHMgYSBtb3JlIG9ic2N1cmUgb3B0aW1pemF0aW9uIHBhdGg/IEdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjYWxsIHNpdGVzIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCB0byB1bnJhdmVsaW5nIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBiaXQgb2YgY29kZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBpdCYjMzk7cyB0aWVkIHRvIGFueSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgbWVtb3J5IG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ0PXZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDU6dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNDYtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0zMTA9c3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0zMTQtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDozMTU6c3RhdGljIGlubGluZSB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMxNi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYz01MTMxPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxNDctXHRcdFx0XHRvbGRfZW5kKTtcbm1tL2h1Z2V0bGIuYzo1MTQ4Olx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsIFx1MDAyNnJhbmdlLmVuZCk7XG5tbS9odWdldGxiLmMtNTE0OS1cdC8qXG4tLVxubW0vaHVnZXRsYi5jPTY1Nzc9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy02NjAxLVx0XHRcdFx0MCwgbW0sIHN0YXJ0LCBlbmQpO1xubW0vaHVnZXRsYi5jOjY2MDI6XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbm1tL2h1Z2V0bGIuYy02NjAzLVxuLS1cbm1tL2h1Z2V0bGIuYz03MDExPWJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9odWdldGxiLmMtNzAzNi0gKi9cbm1tL2h1Z2V0bGIuYzo3MDM3OnZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTcwMzgtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuLS1cbm1tL2h1Z2V0bGIuYz03MTkzPXZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtNzE5Ni1cbm1tL2h1Z2V0bGIuYzo3MTk3OnZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTcxOTgtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuLS1cbm1tL2h1Z2V0bGIuYz03NDQ0PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5zaGFyZV9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy03NDY3LVx0Lypcbm1tL2h1Z2V0bGIuYzo3NDY4Olx0ICogTm8gbmVlZCB0byBjYWxsIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpLCBiZWNhdXNlXG5tbS9odWdldGxiLmMtNzQ2OS1cdCAqIHdlIGhhdmUgYWxyZWFkeSBkb25lIHRoZSBQVURfU0laRSBhbGlnbm1lbnQuXG4tLVxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX3BvaXNvbmVkX2h1Z2V0bGJfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTIwMDQtXHRcdFx0XHRhZGRyZXNzLCByYW5nZS5lbmQpO1xubW0vcm1hcC5jOjIwMDU6XHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbm1tL3JtYXAuYy0yMDA2LVx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuLS1cbm1tL3JtYXAuYz0yNDY1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjUwMi1cdFx0ICovXG5tbS9ybWFwLmM6MjUwMzpcdFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgXHUwMDI2cmFuZ2Uuc3RhcnQsXG5tbS9ybWFwLmMtMjUwNC1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJhbmdlLmVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjU0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2V0bGJmcyBQTUQgU2hhcmluZyBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgaHVnZXRsYmZzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBQTUQgc2hhcmluZywgdW5tYXBwaW5nLCBhbmQgemFwcGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgbG9naWMgc2hpZnQgYW5kIGRldGVybWluZSBpdHMgc2lnbmlmaWNhbmNlIGZvciBzdGFiaWxpdHkgYW5kIHBvdGVudGlhbCBidWdzLgoKUHJldmlvdXNseSwgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpYCBpbiBgX19odWdldGxiX3phcF9iZWdpbigpYCBhbmQgYHVubWFwX2h1Z2VwYWdlX3JhbmdlKClgIHdvdWxkICphbHdheXMqIGFsaWduIHRoZSBtZW1vcnkgcmFuZ2UgdG8gUFVEIGJvdW5kYXJpZXMgaWYgdGhlcmUgd2FzIGEgcG9zc2liaWxpdHkgb2YgUE1EIHNoYXJpbmcgKG1lYW5pbmcgYFZNX01BWVNIQVJFYCB3YXMgc2V0IGFuZCB0aGUgcmFuZ2Ugc3Bhbm5lZCBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQpLiBOb3csIHRoaXMgaXMgZGlmZmVyZW50LiBJdCBsb29rcyBsaWtlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKClgIHdpbGwgb25seSBleHBhbmQgdGhlIHJhbmdlIHdoZW4gdGhlcmUgYXJlICphY3R1YWxseSogc2hhcmVkIFBNRCBwYWdlIHRhYmxlcyB3aXRoaW4gaXQuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYW4gZXhwbGljaXQgY2hlY2ssIHVzaW5nIGBodWdldGxiX3dhbGtgIGFuZCBgcHRkZXNjX3BtZF9pc19zaGFyZWQoKWAgdG8gdmVyaWZ5IFBNRCBzaGFyaW5nLiBGdXJ0aGVybW9yZSwgdGhlIHBvaW50IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaGFwcGVucyBoYXMgY2hhbmdlZC4gSW4gYF9faHVnZXRsYl96YXBfYmVnaW4oKWAsIGl0JiMzOTtzIGNhbGxlZCAqYWZ0ZXIqIGFjcXVpcmluZyB0aGUgYGlfbW1hcF9sb2NrX3dyaXRlYC4KClRoaXMgc2VlbXMgbGlrZSBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiBob3cgaHVnZXRsYmZzIGhhbmRsZXMgcmFuZ2UgYWRqdXN0bWVudHMgZHVyaW5nIHVubWFwcGluZyBvciB6YXBwaW5nLiBUaGUgbmV3IGFwcHJvYWNoIGZvY3VzZXMgb24gYWN0dWFsIHNoYXJpbmcgc3RhdGUgdW5kZXIgYSBzcGlubG9jayBpbnN0ZWFkIG9mIHBvdGVudGlhbCBzaGFyaW5nLiBUaGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb3JyZWN0bmVzcyBhcmUgc3Vic3RhbnRpYWwuCgpDb25zaWRlcmluZyB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd2l0aGluIGh1Z2V0bGJmcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6ei4gSHVnZXRsYmZzIHN5c2NhbGxzIGFyZSBlYXNpbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB1c2Vyc3BhY2UgdG9vbHMgc3VjaCBhcyBgbW1hcGAsIGBtdW5tYXBgLCBgbWFkdmlzZSBNQURWX0RPTlRORUVEYCwgYW5kIGBmYWxsb2NhdGUgUFVOQ0hfSE9MRWAuIFRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBQTUQgc2hhcmluZyBjYWxjdWxhdGlvbnMsIG1tdSBub3RpZmllciByYW5nZXMgYW5kIGhvdyB0aGUgc3lzdGVtIHVubWFwcyBodWdlIHBhZ2VzLgoKVG8gZW5zdXJlIHByb3BlciB0ZXN0aW5nLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQuIEZyb20gYGZzL0tjb25maWdgLCBJIHNlZSB0aGF0IGBIVUdFVExCRlNgIGVuYWJsZXMgYEhVR0VUTEJfUEFHRWAsIGFuZCBzdWJzZXF1ZW50bHksIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgIChpZiBgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFYCBpcyBzZWxlY3RlZCwgd2hpY2ggaXMgY29tbW9uIG9uIHg4Nl82NCkuIEkgc2hvdWxkIHNlYXJjaCB0aGUgYEtjb25maWdgIGZvciBgSFVHRVRMQkZTYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgaW1wYWN0IHRoZSBmdXp6aW5nIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipIVUdFVExCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc9MTEwPWNvbmZpZyA4eHhfQ1BVMTVcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtDUFUxNSBTaWxpY29uIEVycmF0YVwmIzM0O1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZzoxMTI6XHRkZXBlbmRzIG9uICFIVUdFVExCX1BBR0VcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTEzLVx0ZGVmYXVsdCB5XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNTktXHRwcm9tcHQgXCYjMzQ7SHVnZVRMQiBwYWdlIHNpemVcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjA6XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2MS1cdGRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlmIFBBR0VfU0laRV82NEtCXG4tLVxuZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL0tjb25maWc6MjUyOlx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTMtXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXG4tLVxuZnMvS2NvbmZpZz0yNjM9Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbi0tXG5mcy9LY29uZmlnLTI2NS1cdGRlZmF1bHQgblxuZnMvS2NvbmZpZzoyNjY6XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI2Ny1cdGhlbHBcbi0tXG5mcy9LY29uZmlnPTI3Nz1jb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnOjI3OTpcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxuZnMvS2NvbmZpZy0yODAtXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4tLVxuaW5pdC9LY29uZmlnPTEyOTM9Y29uZmlnIENHUk9VUF9IVUdFVExCXG5pbml0L0tjb25maWctMTI5NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBjb250cm9sbGVyXCYjMzQ7XG5pbml0L0tjb25maWc6MTI5NTpcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFXG5pbml0L0tjb25maWctMTI5Ni1cdHNlbGVjdCBQQUdFX0NPVU5URVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyODAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2VUTEIgUE1EIFBhZ2UgVGFibGUgU2hhcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AgY29uZmlndXJhdGlvbiBvcHRpb24uIEZpcnN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gVGhlIEtjb25maWcgZmlsZXMgdGVsbCBtZSB0aGF0IGl0JiMzOTtzIGEgYGRlZl9ib29sYCB0aWVkIHRvIGBIVUdFVExCX1BBR0VgLiBBbmQgbG9va2luZyBmdXJ0aGVyLCBgSFVHRVRMQl9QQUdFYCBpdHNlbGYgaXMgYSBgZGVmX2Jvb2xgIHRoYXQgZGVwZW5kcyBvbiBgSFVHRVRMQkZTYC4gU28sIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbiBib2lscyBkb3duIHRvIGBIVUdFVExCRlNgLCB3aGlsZSBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYCBpcyBlZmZlY3RpdmVseSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGRlcml2ZWQgZnJvbSB0aGUgc2VsZWN0aW9uIG9mIGBIVUdFVExCRlNgLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBIVUdFVExCRlNgIGlzIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgd2lsbCBlbmFibGUsIGFuZCB0aGUgaW50ZXJuYWwgYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AgaXMgYSBjb25zZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZm9jdXMgdG8gdGhlIGNvZGUgaXRzZWxmLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgaW1wYWN0ZWQgYnkgdGhpcyBwYXRjaC4gSW4gYG1tL2h1Z2V0bGIuY2AsIEkgc2VlIGEgZmV3IGtleSBwbGF5ZXJzOiBgX19odWdldGxiX3phcF9iZWdpbmAsIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAsIGFuZCBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4gVGhlc2UgbmFtZXMgYXJlIGFsbCBub24tc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBhcyB0aGV5JiMzOTtyZSBsaWtlbHkgZXhwb3J0ZWQuIE5vdywgdGltZSB0byBkb3VibGUtY2hlY2sgdGhlaXIgZGVjbGFyYXRpb24gaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCB0byBtYWtlIHN1cmUgdGhleSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMsIGV4cG9zZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGhlYWRlcnMgc2F5IGFib3V0IHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faHVnZXRsYl96YXBfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ1PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0ODpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjUzPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTYtXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTc6XHRcdF9faHVnZXRsYl96YXBfYmVnaW4odm1hLCBzdGFydCwgZW5kKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1OC19XG4tLVxubW0vaHVnZXRsYi5jPTU0Mzg9YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXG4tLVxubW0vaHVnZXRsYi5jLTU0NDMtXG5tbS9odWdldGxiLmM6NTQ0NDp2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTQ0NS1cdFx0XHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gaG93IGl0JiMzOTtzIGFjdHVhbGx5IGhhbmRsaW5nIHRoZSB1bm1hcHBpbmcgb2YgaHVnZSBwYWdlcy4gV2Uga25vdyB0aGUgaGlnaC1sZXZlbCBnb2FsLCBidXQgdGhlIGRldmlsJiMzOTtzIGFsd2F5cyBpbiB0aGUgZGV0YWlscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBpc24mIzM5O3QgaXQ/IEkgd2FudCB0byBleGFtaW5lIHRoZSBsb2dpYyBmbG93LCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGl0IGVtcGxveXMgKGlmIGFueSksIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgdGFibGVzLiBJcyBpdCBjb3JyZWN0bHkgaGFuZGxpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGNvbnRlbnRpb24gdGhhdCB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBzdWJ0bGUgaW5lZmZpY2llbmNpZXMgaW4gaG93IGl0IHdhbGtzIHRoZSBwYWdlIHRhYmxlcyBhbmQgcGVyZm9ybXMgdGhlIHVubWFwcGluZz8gSSBhbHNvIHdhbnQgdG8gdmVyaWZ5IGl0IGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucyBncmFjZWZ1bGx5IGFuZCBlbnN1cmUgdGhhdCBpdCBrZWVwcyB0aGUgc3lzdGVtIGluIGEgY29uc2lzdGVudCBzdGF0ZS4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCAqZXZlcnkqIG51YW5jZSBvZiB3aGF0IHRoaXMgY29kZSBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bm1hcF9odWdlcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz0zODA9c3RhdGljIHZvaWQgaHVnZXRsYl91bm1hcF9maWxlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDE2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDE3Olx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDE4LVx0XHRcdFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDUxLVx0XHRpZiAoaHVnZXRsYl92bWFfbWFwc19wZm4odm1hLCB2X3N0YXJ0LCBwZm4pKVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDUyOlx0XHRcdHVubWFwX2h1Z2VwYWdlX3JhbmdlKHZtYSwgdl9zdGFydCwgdl9lbmQsIE5VTEwsXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTMtXHRcdFx0XHRcdCAgICAgWkFQX0ZMQUdfRFJPUF9NQVJLRVIpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTQ2Mz1odWdldGxiX3ZtZGVsZXRlX2xpc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3Qgc3RhcnQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDgzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg0Olx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDg1LVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4OC1cdFx0ICogdm1hcy4gIFRoZXJlZm9yZSwgbG9jayBpcyBub3QgaGVsZCB3aGVuIGNhbGxpbmdcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4OTpcdFx0ICogdW5tYXBfaHVnZXBhZ2VfcmFuZ2UgZm9yIHByaXZhdGUgdm1hcy5cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ5MC1cdFx0ICovXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTI4PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyOS1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTMxLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMzItXHRcdFx0ICBzdHJ1Y3QgZm9saW8gKiwgemFwX2ZsYWdzX3QpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMzOnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTM0LVx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDM0PXN0YXRpYyBpbmxpbmUgbG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ0MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQ0MjpzdGF0aWMgaW5saW5lIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDQzLVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2h1Z2V0bGIuYz01MTMxPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxOTUtXG5tbS9odWdldGxiLmM6NTE5Njp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtNTE5Ny1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jPTU0NTc9dm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTQ4My1cbm1tL2h1Z2V0bGIuYzo1NDg0OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9odWdldGxiLmMtNTQ4NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy01NDk1LVx0ICogaG9sZCBpX21tYXBfcndzZW0gYW5kIHRoZSBodWdldGxiIFZNQSBsb2NrIGZvciBzaGFyZWQgbWFwcGluZ3MsIHNvIFBNRFxubW0vaHVnZXRsYi5jOjU0OTY6XHQgKiBzaGFyaW5nIHN0YXRlIGNhbm5vdCBjaGFuZ2UgYmVmb3JlIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKS5cbm1tL2h1Z2V0bGIuYy01NDk3LVx0ICovXG4tLVxubW0vaHVnZXRsYi5jLTU1MDEtXG5tbS9odWdldGxiLmM6NTUwMjpcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIHN0YXJ0LCBlbmQsXG5tbS9odWdldGxiLmMtNTUwMy1cdFx0XHQgICAgICAgZm9saW8sIHphcF9mbGFncyk7XG4tLVxubW0vaHVnZXRsYi5jPTU1MTU9c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01NTMzLVx0ICogdGhpcyBtYXBwaW5nIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlIFZNQXMsXG5tbS9odWdldGxiLmM6NTUzNDpcdCAqIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKSBpcyBjYWxsZWQgYXMgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkXG5tbS9odWdldGxiLmMtNTUzNS1cdCAqL1xuLS1cbm1tL2h1Z2V0bGIuYy01NTU3LVx0XHRpZiAoIWlzX3ZtYV9yZXN2X3NldChpdGVyX3ZtYSwgSFBBR0VfUkVTVl9PV05FUikpXG5tbS9odWdldGxiLmM6NTU1ODpcdFx0XHR1bm1hcF9odWdlcGFnZV9yYW5nZShpdGVyX3ZtYSwgYWRkcmVzcyxcbm1tL2h1Z2V0bGIuYy01NTU5LVx0XHRcdFx0XHQgICAgIGFkZHJlc3MgJiM0MzsgaHVnZV9wYWdlX3NpemUoaCksXG4tLVxubW0vbWVtb3J5LmM9MjIwNj1zdGF0aWMgdm9pZCBfX3phcF92bWFfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtMjIyOC1cdFx0XHRyZXR1cm47XG5tbS9tZW1vcnkuYzoyMjI5Olx0XHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHRsYiwgdm1hLCBzdGFydCwgZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xubW0vbWVtb3J5LmMtMjIzMC1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTE4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElzc3VlcyB3aXRoIEh1Z2VUTEIgUGFnZSBaYXBwaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBjYWxscy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2UgemFwcGluZyBtaWdodCBiZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgb2JzZXJ2ZWQgcHJvYmxlbS4gSXQgY291bGQgYmUgaW4gYG1tL21lbW9yeS5jYCwgd2hpY2ggaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBIb3dldmVyLCBJIHNob3VsZG4mIzM5O3QgbGltaXQgbXlzZWxmIHRvIHRoYXQgZGlyZWN0b3J5LiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIGNoZWNrIGV2ZXJ5d2hlcmUgcmVsZXZhbnQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHR5cGljYWwgZGVidWdnaW5nIHN0cmF0ZWd5OyB1c2luZyBgZ2l0IGdyZXBgIGFuZCBtYXliZSBzb21lIGNyb3NzLXJlZmVyZW5jaW5nIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBodWdldGxiX3phcF9iZWdpbmAgaXMgdXNlZCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl96YXBfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ1PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0Ny1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0ODpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYmVnaW4sIHVuc2lnbmVkIGxvbmcgKmVuZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNTA9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjUyLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUzOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTYtXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTc6XHRcdF9faHVnZXRsYl96YXBfYmVnaW4odm1hLCBzdGFydCwgZW5kKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1OC19XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzIwLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MzIxOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMi1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYz01NDM4PWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuLS1cbm1tL2h1Z2V0bGIuYy01NDQzLVxubW0vaHVnZXRsYi5jOjU0NDQ6dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jLTU0NDUtXHRcdFx0IHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4tLVxubW0vbWVtb3J5LmM9MjI5Mj12b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxuLS1cbm1tL21lbW9yeS5jLTIzMDctXG5tbS9tZW1vcnkuYzoyMzA4Olx0XHRodWdldGxiX3phcF9iZWdpbih2bWEsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpO1xubW0vbWVtb3J5LmMtMjMwOS1cdFx0X196YXBfdm1hX3JhbmdlKHRsYiwgdm1hLCBzdGFydCwgZW5kLCBcdTAwMjZkZXRhaWxzKTtcbi0tXG5tbS9tZW1vcnkuYz0yMzMwPXZvaWQgemFwX3ZtYV9yYW5nZV9iYXRjaGVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMjM0My1cdFx0XHRcdGFkZHJlc3MsIGVuZCk7XG5tbS9tZW1vcnkuYzoyMzQ0Olx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbm1tL21lbW9yeS5jLTIzNDUtXHR1cGRhdGVfaGl3YXRlcl9yc3Modm1hLVx1MDAzZXZtX21tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMjIKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlVExCIFBNRCBQYWdlIFRhYmxlIFNoYXJpbmcgTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgaGF2ZW4mIzM5O3QgdG91Y2hlZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGZpbGVzIG9yIHN5bWJvbHMgYmV5b25kIHRoZSBpbml0aWFsIHNjb3BlLiBUaGUgZGlmZiBzdW1tYXJ5IGZvY3VzZXMgb24gYG1tL2h1Z2V0bGIuY2AsIGFuZCB0aGF0JiMzOTtzIGV4cGVjdGVkLiBTcGVjaWZpY2FsbHksIGl0IGxpc3RzIHNldmVyYWwgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBQTUQgc2hhcmluZyBhbmQgcmFuZ2UgYWRqdXN0bWVudHMuCgpOZXh0LCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzLiBCYXNlZCBvbiB0aGUgY29kZSwgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBhcmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbjogYF9faHVnZXRsYl96YXBfYmVnaW5gLCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBhbmQgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB3ZSYjMzk7bGwgbmVlZCB0byB3YXRjaC4KCk5vdywgbGV0JiMzOTtzIGdldCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIGNvcmUgY29uZmlndXJhdGlvbiBpcyBgSFVHRVRMQkZTYCwgYW5kIHRoYXQgcHVsbHMgaW4gYEhVR0VUTEJfUEFHRWAuIFRoZSBjcnVjaWFsIGFzcGVjdCBoZXJlIGlzIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgLCB3aGljaCBkZXBlbmRzIG9uIGBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVgIGFuZCBgU1BMSVRfUE1EX1BUTE9DS1NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIG9yIGNvbnNpZGVyZWQuIEkgdGhpbmsgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgIGFyZSBzdWZmaWNpZW50LiBUaGUgZmluYWwgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgWyYjMzQ7SFVHRVRMQkZTJiMzNDssICYjMzQ7SFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HJiMzNDtdLgoKQWxyaWdodCwgdGltZSB0byBzeW50aGVzaXplIHRoaXMgaW5mb3JtYXRpb24uIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGxvZ2ljIGZvciBIdWdlVExCIFBNRCBwYWdlIHRhYmxlIHNoYXJpbmcuIEluc3RlYWQgb2YgYnJvYWRseSBleHBhbmRpbmcgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIHJhbmdlcyB1bmRlciBQTUQgc2hhcmluZywgd2UmIzM5O3JlIG1ha2luZyBpdCBtb3JlIHByZWNpc2UsIGV4cGFuZGluZyBvbmx5IHdoZW4gKmFjdHVhbCogUE1EIHRhYmxlIHNoYXJpbmcgZXhpc3RzIHdpdGhpbiB0aGUgcmFuZ2UuIFRoaXMgaW1wYWN0cyB0aGUgcmFuZ2UgYWRqdXN0bWVudCBjb2RlIHdpdGhpbiBgX19odWdldGxiX3phcF9iZWdpbmAsIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAsIGFuZCBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB0cmlnZ2VyZWQgYnkgdmFyaW91cyBIdWdlVExCIG9wZXJhdGlvbnMgbGlrZSBtbWFwLCBtdW5tYXAsIG1hZHZpc2UsIGFuZCBob2xlIHB1bmNoLCBzbyB0aGF0JiMzOTtzIHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgd291bGQgbGllLgoKT2theSwgdGhhdCYjMzk7cyBldmVyeXRoaW5nLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHVnZXRsYl96YXBfYmVnaW4mIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBodWdldGxiIFBNRCBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYnkgY2hlY2tpbmcgd2hldGhlciBQTUQgdGFibGVzIGFyZSBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHRoZSByYW5nZSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgZXhwYW5kaW5nIGFsbCBwb3RlbnRpYWxseSBzaGFyZWFibGUgcmFuZ2VzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBodWdldGxiIG1lbW9yeSB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYmVoYXZpb3IgcmVhY2hhYmxlIHZpYSBodWdldGxiZnMgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHVnZXRsYl96YXBfYmVnaW4mIzM0OywKICAgICYjMzQ7dW5tYXBfaHVnZXBhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBodWdldGxiIFBNRCBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYnkgY2hlY2tpbmcgd2hldGhlciBQTUQgdGFibGVzIGFyZSBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHRoZSByYW5nZSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgZXhwYW5kaW5nIGFsbCBwb3RlbnRpYWxseSBzaGFyZWFibGUgcmFuZ2VzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBodWdldGxiIG1lbW9yeSB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYmVoYXZpb3IgcmVhY2hhYmxlIHZpYSBodWdldGxiZnMgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIFBNRCBwYWdlIHRhYmxlIHNoYXJpbmcgcmFuZ2UgYWRqdXN0bWVudHMgKGluIGBtbS9odWdldGxiLmNgKSB0byBvbmx5IGV4cGFuZCB0aGUgdW5tYXBwaW5nL3phcCBhZGRyZXNzIHJhbmdlIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHJhbmdlX3N0YXJ0YCBhbmQgYHJhbmdlX2VuZGApIGFyZSBwcm9wZXJseSBhc3NpZ25lZCBiZWZvcmUgdXNlIHdoZW4gYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYCByZXR1cm5zIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGFjY2Vzc2VkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSB0YWJsZSB3YWxrcywgbG9ja2luZywgb3IgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydGlvbiBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhOTBhMTg4NTQ3ZmEyOWYwOTU2YWZmZTdjMGU2ODU5YjJiMjdhM2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowMToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi5lODBlMTExODM4NWYwIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC01MzUzLDE2ICYjNDM7NTM1MywxMDUgQEAgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2godGxiLCB2bWEpOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcKJiM0MztzdGF0aWMgYm9vbAomIzQzO3BtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpyYW5nZV9zdGFydCwKJiM0MzsJCQkgICB1bnNpZ25lZCBsb25nICpyYW5nZV9lbmQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZfc3RhcnQgPSBBTElHTih2bWEtJmd0O3ZtX3N0YXJ0LCBQVURfU0laRSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdl9lbmQgPSBBTElHTl9ET1dOKHZtYS0mZ3Q7dm1fZW5kLCBQVURfU0laRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHZtYSBuZWVkcyB0byBzcGFuIGF0IGxlYXN0IG9uZSBhbGlnbmVkIFBVRCBzaXplLCBhbmQgdGhlIHJhbmdlCiYjNDM7CSAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpdC4KJiM0MzsJICovCiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUFZU0hBUkUpIHx8ICEodl9lbmQgJmd0OyB2X3N0YXJ0KSB8fAomIzQzOwkgICAgKGVuZCAmbHQ7PSB2X3N0YXJ0KSB8fCAoc3RhcnQgJmd0Oz0gdl9lbmQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkqcmFuZ2Vfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydCwgUFVEX1NJWkUpLCB2X3N0YXJ0KTsKJiM0MzsJKnJhbmdlX2VuZCA9IG1pbihBTElHTihlbmQsIFBVRF9TSVpFKSwgdl9lbmQpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsCiYjNDM7CQkJICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZCkKJiM0Mzt7CiYjNDM7CS8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqLwomIzQzOwlpZiAoKnN0YXJ0ICZndDsgcmFuZ2Vfc3RhcnQpCiYjNDM7CQkqc3RhcnQgPSByYW5nZV9zdGFydDsKJiM0MzsKJiM0MzsJaWYgKCplbmQgJmx0OyByYW5nZV9lbmQpCiYjNDM7CQkqZW5kID0gcmFuZ2VfZW5kOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNfaW5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtJmd0O3ZtX21tOwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiYjNDM7CiYjNDM7CWh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQodm1hKTsKJiM0MzsJaV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcpOwomIzQzOwomIzQzOwlmb3IgKGFkZHJlc3MgPSByYW5nZV9zdGFydDsgYWRkcmVzcyAmbHQ7IHJhbmdlX2VuZDsgYWRkcmVzcyAmIzQzOz0gUFVEX1NJWkUpIHsKJiM0MzsJCXB0ZV90ICpwdGVwOwomIzQzOwkJYm9vbCBzaGFyZWQ7CiYjNDM7CiYjNDM7CQlwdGVwID0gaHVnZXRsYl93YWxrKHZtYSwgYWRkcmVzcywgUE1EX1NJWkUpOwomIzQzOwkJaWYgKCFwdGVwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTsKJiM0MzsJCXNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTsKJiM0MzsJCXNwaW5fdW5sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTsKJiM0MzsKJiM0MzsJCWlmIChzaGFyZWQpCiYjNDM7CQkJYWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCBhZGRyZXNzLAomIzQzOwkJCQkJCSAgICAgYWRkcmVzcyAmIzQzOyBQVURfU0laRSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MzthZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmVuZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDsKJiM0MzsKJiM0MzsJaWYgKGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkgIT0gUE1EX1NJWkUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsCiYjNDM7CQkJCQkmYW1wO3JhbmdlX3N0YXJ0LCAmYW1wO3JhbmdlX2VuZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNfaW5fcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LAomIzQzOwkJCSAgICAgdW5zaWduZWQgbG9uZyAqZW5kKQomIzQzO3sKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCkKIHsKIAlpZiAoIXZtYS0mZ3Q7dm1fZmlsZSkJLyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqLwogCQlyZXR1cm47CiAKLQlhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBzdGFydCwgZW5kKTsKIAlodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHZtYSk7Ci0JaWYgKHZtYS0mZ3Q7dm1fZmlsZSkKJiM0MzsJaWYgKHZtYS0mZ3Q7dm1fZmlsZSkgewogCQlpX21tYXBfbG9ja193cml0ZSh2bWEtJmd0O3ZtX2ZpbGUtJmd0O2ZfbWFwcGluZyk7CiYjNDM7CQlhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgc3RhcnQsIGVuZCk7CiYjNDM7CX0KIH0KIAogdm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKQEAgLTU0MDEsNyAmIzQzOzU0OTAsMTIgQEAgdm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAogCW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZhbXA7cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS0mZ3Q7dm1fbW0sCiAJCQkJc3RhcnQsIGVuZCk7Ci0JYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJmFtcDtyYW5nZS5zdGFydCwgJmFtcDtyYW5nZS5lbmQpOwomIzQzOwkvKgomIzQzOwkgKiBPbmx5IGV4cGFuZCBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBUaGUgY2FsbGVycwomIzQzOwkgKiBob2xkIGlfbW1hcF9yd3NlbSBhbmQgdGhlIGh1Z2V0bGIgVk1BIGxvY2sgZm9yIHNoYXJlZCBtYXBwaW5ncywgc28gUE1ECiYjNDM7CSAqIHNoYXJpbmcgc3RhdGUgY2Fubm90IGNoYW5nZSBiZWZvcmUgX191bm1hcF9odWdlcGFnZV9yYW5nZSgpLgomIzQzOwkgKi8KJiM0MzsJYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyh2bWEsICZhbXA7cmFuZ2Uuc3RhcnQsICZhbXA7cmFuZ2UuZW5kKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmYW1wO3JhbmdlKTsKIAl0bGJfZ2F0aGVyX21tdSgmYW1wO3RsYiwgdm1hLSZndDt2bV9tbSk7CiAKQEAgLTY5NDMsMjMgJiM0Mzs3MDM3LDEzIEBAIGJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpCiB7Ci0JdW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLSZndDt2bV9zdGFydCwgUFVEX1NJWkUpLAotCQl2X2VuZCA9IEFMSUdOX0RPV04odm1hLSZndDt2bV9lbmQsIFBVRF9TSVpFKTsKJiM0MzsJdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kOwogCi0JLyoKLQkgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZQotCSAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpbi4KLQkgKi8KLQlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kICZndDsgdl9zdGFydCkgfHwKLQkJKCplbmQgJmx0Oz0gdl9zdGFydCkgfHwgKCpzdGFydCAmZ3Q7PSB2X2VuZCkpCiYjNDM7CWlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsCiYjNDM7CQkJCQkmYW1wO3JhbmdlX3N0YXJ0LCAmYW1wO3JhbmdlX2VuZCkpCiAJCXJldHVybjsKIAotCS8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqLwotCWlmICgqc3RhcnQgJmd0OyB2X3N0YXJ0KQotCQkqc3RhcnQgPSBBTElHTl9ET1dOKCpzdGFydCwgUFVEX1NJWkUpOwotCi0JaWYgKCplbmQgJmx0OyB2X2VuZCkKLQkJKmVuZCA9IEFMSUdOKCplbmQsIFBVRF9TSVpFKTsKJiM0MzsJYWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTsKIH0KIAogLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjEKCQkJCQkJCW91dHB1dDogMTgyCgkJCQkJCQl0aG91Z2h0czogODUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYWdlIFRhYmxlIFNoYXJpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIGBtbS9odWdldGxiLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgYXJvdW5kIHNoYXJpbmcgYW5kIHVubWFwcGluZyBodWdldGxiIHBhZ2UgdGFibGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCAqd2hhdCogZXhhY3RseSBpdCYjMzk7cyBjaGFuZ2luZyBhbmQgdGhlbiBhc3Nlc3MgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB3aGljaCBpbmNsdWRlcyBjaGVja2luZyBmb3IgS01TQU4gY29uY2VybnMuCgpGaXJzdCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgaW50cm9kdWNpbmcgZnVuY3Rpb25zIGxpa2UgYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYCwgYGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmdgLCBhbmQgc29tZSB2YXJpYXRpb25zIG9mIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBob3cgYF9faHVnZXRsYl96YXBfYmVnaW5gIGFuZCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGhhbmRsZSBzaGFyZWQgUE1Ecy4gSXQmIzM5O3MgYWxzbyByZWZhY3RvcmluZyBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSB0aGVyZSBhbnkgcmVkIGZsYWdzPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGZvciBhbnl0aGluZyB0aGF0IHNtYWNrcyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgIG9yIHRoZSBsaWtlKSwgYW55IGRhbmdlcm91cyBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgb3BlbiB0aGUgZG9vciB0byBLTVNBTiBpc3N1ZXMuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNgLiBJdCBwYXNzZXMgYHJhbmdlX3N0YXJ0YCBhbmQgYHJhbmdlX2VuZGAgYXMgcG9pbnRlcnMgdG8gYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYC4gV2l0aGluIHRoYXQgZnVuY3Rpb24sIHRoZXJlJiMzOTtzIGEgY2hlY2s6IHRoZSBmdW5jdGlvbiBpbml0aWFsaXplcyB0aG9zZSB2YXJpYWJsZXMgKmNvbmRpdGlvbmFsbHkqLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgVk1BIGlzIHNoYXJlYWJsZSBhbmQgdGhlIHN0YXJ0L2VuZCByYW5nZXMgYXJlIHZhbGlkLiBIb3dldmVyLCBpZiB0aGF0IGNoZWNrIGZhaWxzLCBgYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc2AgaW1tZWRpYXRlbHkgcmV0dXJucy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgc2FmZSBiZWNhdXNlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzYCBjaGVja3MgaXRzIHJldHVybiB2YWx1ZS4gSW5zaWRlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlYCwgbG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYGFkZHJlc3NgLCBgcHRlcGAsIGFuZCBgc2hhcmVkYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBkaXJlY3QgY29waWVzIHRvIHVzZXJzcGFjZSBhbmQgbm8gb2J2aW91cyBtZW1vcnkgbGVha3MuIFNvIGZhciwgaXQgc2VlbXMgY2xlYW47IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKRGVlcGVyIGNvbnNpZGVyYXRpb25zOiBJIGhhdmUgdG8gY29uc2lkZXIgbWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggcGFnZSB0YWJsZXMgYW5kIFRMQiBpbnZhbGlkYXRpb24uIFdlJiMzOTtyZSBhbHNvIHRhbGtpbmcgYWJvdXQgcmFuZ2UgYm91bmRhcmllcywgYW5kIHRob3NlIGNhbiBiZSB0cmlja3kuIEJ1dCwgaG9uZXN0bHksIGFueSBibGF0YW50IFVBRiBvciBsb2NraW5nIGJ1Z3Mgd291bGQgbGlrZWx5IGJlIGNhdWdodCBieSBLQVNBTiBvciBMT0NLREVQLCBvciB0aGUgTU0gZGVidWcgc3R1ZmYuIE15IGFzc2Vzc21lbnQgaXMgdGhhdCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UgaGVyZS4KCk5vdywgYSBmaW5hbCBjaGVjay4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgS01TQU4gdGVzdGluZyBpcyBuZWVkZWQuIFRoZSBydWxlIGlzLCB3ZSAqZG9uJiMzOTt0KiBydW4gS01TQU4gaWYgS0FTQU4gKG9yIHNvbWV0aGluZyBlbHNlKSBjYW4gY2F0Y2ggdGhlIGlzc3VlLiBXZSBvbmx5IG5lZWQgS01TQU4gaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aDogMSkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U7IDIpIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOyAzKSBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyOyBvciA0KSBkYW5nZXJvdXMgYm91bmRzIGNoZWNrcy4gTm9uZSBvZiB0aGVzZSBzY2VuYXJpb3MgYXBwbHkuCgpTbywgYmFzZWQgb24gbXkgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IHJlcXVpcmVkIGhlcmUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBQTUQgcGFnZSB0YWJsZSBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIChpbiBgbW0vaHVnZXRsYi5jYCkgdG8gb25seSBleHBhbmQgdGhlIHVubWFwcGluZy96YXAgYWRkcmVzcyByYW5nZSBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGByYW5nZV9zdGFydGAgYW5kIGByYW5nZV9lbmRgKSBhcmUgcHJvcGVybHkgYXNzaWduZWQgYmVmb3JlIHVzZSB3aGVuIGBwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZWAgcmV0dXJucyB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY3JlYXRlZCBvciBhY2Nlc3NlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhZ2UgdGFibGUgd2Fsa3MsIGxvY2tpbmcsIG9yIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRpb24gY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgUE1EIHBhZ2UgdGFibGUgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyAoaW4gYG1tL2h1Z2V0bGIuY2ApIHRvIG9ubHkgZXhwYW5kIHRoZSB1bm1hcHBpbmcvemFwIGFkZHJlc3MgcmFuZ2UgZm9yIFBVRHMgd2hvc2UgUE1EIHRhYmxlIGlzIGFjdHVhbGx5IHNoYXJlZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgcmFuZ2Vfc3RhcnRgIGFuZCBgcmFuZ2VfZW5kYCkgYXJlIHByb3Blcmx5IGFzc2lnbmVkIGJlZm9yZSB1c2Ugd2hlbiBgcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2VgIHJldHVybnMgdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgYWNjZXNzZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIHRhYmxlIHdhbGtzLCBsb2NraW5nLCBvciBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0aW9uIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MjEuMjg2NTYzMDE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMzczMTY0MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odWdldGxiX3phcF9iZWdpblwiLFxuICAgIFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcImFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgUE1EIHBhZ2UgdGFibGUgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyAoaW4gYG1tL2h1Z2V0bGIuY2ApIHRvIG9ubHkgZXhwYW5kIHRoZSB1bm1hcHBpbmcvemFwIGFkZHJlc3MgcmFuZ2UgZm9yIFBVRHMgd2hvc2UgUE1EIHRhYmxlIGlzIGFjdHVhbGx5IHNoYXJlZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgcmFuZ2Vfc3RhcnRgIGFuZCBgcmFuZ2VfZW5kYCkgYXJlIHByb3Blcmx5IGFzc2lnbmVkIGJlZm9yZSB1c2Ugd2hlbiBgcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2VgIHJldHVybnMgdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgYWNjZXNzZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIHRhYmxlIHdhbGtzLCBsb2NraW5nLCBvciBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0aW9uIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgaHVnZXRsYiBQTUQgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyBkdXJpbmcgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJ5IGNoZWNraW5nIHdoZXRoZXIgUE1EIHRhYmxlcyBhcmUgYWN0dWFsbHkgc2hhcmVkIGFjcm9zcyB0aGUgcmFuZ2UgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IGV4cGFuZGluZyBhbGwgcG90ZW50aWFsbHkgc2hhcmVhYmxlIHJhbmdlcy4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgaHVnZXRsYiBtZW1vcnkgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJlaGF2aW9yIHJlYWNoYWJsZSB2aWEgaHVnZXRsYmZzIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAxOjIxLjI4NjU2ODU0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMjM1NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2E5MGExODg1NDdmYTI5ZjA5NTZhZmZlN2MwZTY4NTliMmIyN2EzZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowMToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA3ODU3NzI4NDU3OTUyLi5lODBlMTExODM4NWYwIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC01MzUzLDE2ICs1MzUzLDEwNSBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2godGxiLCB2bWEpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbitzdGF0aWMgYm9vbFxcbitwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgKnJhbmdlX3N0YXJ0LFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpyYW5nZV9lbmQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVxcdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpO1xcbitcXHR1bnNpZ25lZCBsb25nIHZfZW5kID0gQUxJR05fRE9XTih2bWEtXFx1MDAzZXZtX2VuZCwgUFVEX1NJWkUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2VcXG4rXFx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFxcdTAwM2Ugdl9zdGFydCkgfHxcXG4rXFx0ICAgIChlbmQgXFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFxcdTAwM2U9IHZfZW5kKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0KnJhbmdlX3N0YXJ0ID0gbWF4KEFMSUdOX0RPV04oc3RhcnQsIFBVRF9TSVpFKSwgdl9zdGFydCk7XFxuK1xcdCpyYW5nZV9lbmQgPSBtaW4oQUxJR04oZW5kLCBQVURfU0laRSksIHZfZW5kKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK2FkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcXG4re1xcbitcXHQvKiBFeHRlbmQgdGhlIHJhbmdlIHRvIGJlIFBVRCBhbGlnbmVkIGZvciBhIHdvcnN0IGNhc2Ugc2NlbmFyaW8gKi9cXG4rXFx0aWYgKCpzdGFydCBcXHUwMDNlIHJhbmdlX3N0YXJ0KVxcbitcXHRcXHQqc3RhcnQgPSByYW5nZV9zdGFydDtcXG4rXFxuK1xcdGlmICgqZW5kIFxcdTAwM2MgcmFuZ2VfZW5kKVxcbitcXHRcXHQqZW5kID0gcmFuZ2VfZW5kO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZFxcbithZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcXG4re1xcbitcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cXHUwMDNldm1fbW07XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcXG4rXFxuK1xcdGh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcXG4rXFx0aV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcpO1xcbitcXG4rXFx0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXFx1MDAzYyByYW5nZV9lbmQ7IGFkZHJlc3MgKz0gUFVEX1NJWkUpIHtcXG4rXFx0XFx0cHRlX3QgKnB0ZXA7XFxuK1xcdFxcdGJvb2wgc2hhcmVkO1xcbitcXG4rXFx0XFx0cHRlcCA9IGh1Z2V0bGJfd2Fsayh2bWEsIGFkZHJlc3MsIFBNRF9TSVpFKTtcXG4rXFx0XFx0aWYgKCFwdGVwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNwaW5fbG9jayhodWdlX3B0ZV9sb2NrcHRyKGgsIG1tLCBwdGVwKSk7XFxuK1xcdFxcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpO1xcbitcXG4rXFx0XFx0aWYgKHNoYXJlZClcXG4rXFx0XFx0XFx0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCBhZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFkZHJlc3MgKyBQVURfU0laRSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuK1xcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcXG4rXFxuK1xcdGlmIChodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpICE9IFBNRF9TSVpFKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmFuZ2Vfc3RhcnQsIFxcdTAwMjZyYW5nZV9lbmQpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIHZvaWRcXG4rYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuK1xcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxcbit7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiB2b2lkIF9faHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbiB7XFxuIFxcdGlmICghdm1hLVxcdTAwM2V2bV9maWxlKVxcdC8qIGh1Z2V0bGJmc19maWxlX21tYXAgZXJyb3IgKi9cXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0YWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgc3RhcnQsIGVuZCk7XFxuIFxcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSlcXG4rXFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSkge1xcbiBcXHRcXHRpX21tYXBfbG9ja193cml0ZSh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuK1xcdFxcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBzdGFydCwgZW5kKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIF9faHVnZXRsYl96YXBfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkBAIC01NDAxLDcgKzU0OTAsMTIgQEAgdm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFxuIFxcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFxcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVxcdTAwM2V2bV9tbSxcXG4gXFx0XFx0XFx0XFx0c3RhcnQsIGVuZCk7XFxuLVxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxuK1xcdC8qXFxuK1xcdCAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzXFxuK1xcdCAqIGhvbGQgaV9tbWFwX3J3c2VtIGFuZCB0aGUgaHVnZXRsYiBWTUEgbG9jayBmb3Igc2hhcmVkIG1hcHBpbmdzLCBzbyBQTURcXG4rXFx0ICogc2hhcmluZyBzdGF0ZSBjYW5ub3QgY2hhbmdlIGJlZm9yZSBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkuXFxuK1xcdCAqL1xcbitcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgXFx1MDAyNnJhbmdlLnN0YXJ0LCBcXHUwMDI2cmFuZ2UuZW5kKTtcXG4gXFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXFx1MDAyNnJhbmdlKTtcXG4gXFx0dGxiX2dhdGhlcl9tbXUoXFx1MDAyNnRsYiwgdm1hLVxcdTAwM2V2bV9tbSk7XFxuIFxcbkBAIC02OTQzLDIzICs3MDM3LDEzIEBAIGJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVxcdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpLFxcbi1cXHRcXHR2X2VuZCA9IEFMSUdOX0RPV04odm1hLVxcdTAwM2V2bV9lbmQsIFBVRF9TSVpFKTtcXG4rXFx0dW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2VcXG4tXFx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGluLlxcbi1cXHQgKi9cXG4tXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFxcdTAwM2Ugdl9zdGFydCkgfHxcXG4tXFx0XFx0KCplbmQgXFx1MDAzYz0gdl9zdGFydCkgfHwgKCpzdGFydCBcXHUwMDNlPSB2X2VuZCkpXFxuK1xcdGlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZyYW5nZV9zdGFydCwgXFx1MDAyNnJhbmdlX2VuZCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xcbi1cXHRpZiAoKnN0YXJ0IFxcdTAwM2Ugdl9zdGFydClcXG4tXFx0XFx0KnN0YXJ0ID0gQUxJR05fRE9XTigqc3RhcnQsIFBVRF9TSVpFKTtcXG4tXFxuLVxcdGlmICgqZW5kIFxcdTAwM2Mgdl9lbmQpXFxuLVxcdFxcdCplbmQgPSBBTElHTigqZW5kLCBQVURfU0laRSk7XFxuK1xcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7XFxuIH1cXG4gXFxuIC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAxOjIxLjY1NzY3NTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxMzExNTAwMjA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHVnZXRsYl96YXBfYmVnaW5cIixcbiAgICBcInVubWFwX2h1Z2VwYWdlX3JhbmdlXCIsXG4gICAgXCJhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgaHVnZXRsYiBQTUQgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyBkdXJpbmcgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJ5IGNoZWNraW5nIHdoZXRoZXIgUE1EIHRhYmxlcyBhcmUgYWN0dWFsbHkgc2hhcmVkIGFjcm9zcyB0aGUgcmFuZ2UgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IGV4cGFuZGluZyBhbGwgcG90ZW50aWFsbHkgc2hhcmVhYmxlIHJhbmdlcy4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgaHVnZXRsYiBtZW1vcnkgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJlaGF2aW9yIHJlYWNoYWJsZSB2aWEgaHVnZXRsYmZzIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhOTBhMTg4NTQ3ZmEyOWYwOTU2YWZmZTdjMGU2ODU5YjJiMjdhM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowMToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNzg1NzcyODQ1Nzk1Mi4uZTgwZTExMTgzODVmMCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtNTM1MywxNiArNTM1MywxMDUgQEAgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aHVnZV9wbWRfdW5zaGFyZV9mbHVzaCh0bGIsIHZtYSk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4rc3RhdGljIGJvb2xcbitwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqcmFuZ2Vfc3RhcnQsXG4rXHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqcmFuZ2VfZW5kKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS1cdTAwM2V2bV9zdGFydCwgUFVEX1NJWkUpO1xuK1x0dW5zaWduZWQgbG9uZyB2X2VuZCA9IEFMSUdOX0RPV04odm1hLVx1MDAzZXZtX2VuZCwgUFVEX1NJWkUpO1xuK1xuK1x0LypcbitcdCAqIHZtYSBuZWVkcyB0byBzcGFuIGF0IGxlYXN0IG9uZSBhbGlnbmVkIFBVRCBzaXplLCBhbmQgdGhlIHJhbmdlXG4rXHQgKiBtdXN0IGJlIGF0IGxlYXN0IHBhcnRpYWxseSB3aXRoaW4gaXQuXG4rXHQgKi9cbitcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpIHx8ICEodl9lbmQgXHUwMDNlIHZfc3RhcnQpIHx8XG4rXHQgICAgKGVuZCBcdTAwM2M9IHZfc3RhcnQpIHx8IChzdGFydCBcdTAwM2U9IHZfZW5kKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0KnJhbmdlX3N0YXJ0ID0gbWF4KEFMSUdOX0RPV04oc3RhcnQsIFBVRF9TSVpFKSwgdl9zdGFydCk7XG4rXHQqcmFuZ2VfZW5kID0gbWluKEFMSUdOKGVuZCwgUFVEX1NJWkUpLCB2X2VuZCk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWRcbithZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbit7XG4rXHQvKiBFeHRlbmQgdGhlIHJhbmdlIHRvIGJlIFBVRCBhbGlnbmVkIGZvciBhIHdvcnN0IGNhc2Ugc2NlbmFyaW8gKi9cbitcdGlmICgqc3RhcnQgXHUwMDNlIHJhbmdlX3N0YXJ0KVxuK1x0XHQqc3RhcnQgPSByYW5nZV9zdGFydDtcbitcbitcdGlmICgqZW5kIFx1MDAzYyByYW5nZV9lbmQpXG4rXHRcdCplbmQgPSByYW5nZV9lbmQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9lbmQpXG4re1xuK1x0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuK1xuK1x0aHVnZXRsYl92bWFfYXNzZXJ0X2xvY2tlZCh2bWEpO1xuK1x0aV9tbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbitcbitcdGZvciAoYWRkcmVzcyA9IHJhbmdlX3N0YXJ0OyBhZGRyZXNzIFx1MDAzYyByYW5nZV9lbmQ7IGFkZHJlc3MgKz0gUFVEX1NJWkUpIHtcbitcdFx0cHRlX3QgKnB0ZXA7XG4rXHRcdGJvb2wgc2hhcmVkO1xuK1xuK1x0XHRwdGVwID0gaHVnZXRsYl93YWxrKHZtYSwgYWRkcmVzcywgUE1EX1NJWkUpO1xuK1x0XHRpZiAoIXB0ZXApXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNwaW5fbG9jayhodWdlX3B0ZV9sb2NrcHRyKGgsIG1tLCBwdGVwKSk7XG4rXHRcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcbitcdFx0c3Bpbl91bmxvY2soaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCkpO1xuK1xuK1x0XHRpZiAoc2hhcmVkKVxuK1x0XHRcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgYWRkcmVzcyxcbitcdFx0XHRcdFx0XHQgICAgIGFkZHJlc3MgKyBQVURfU0laRSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kO1xuK1xuK1x0aWYgKGh1Z2VfcGFnZV9zaXplKGhzdGF0ZV92bWEodm1hKSkgIT0gUE1EX1NJWkUpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2Uodm1hLCAqc3RhcnQsICplbmQsXG4rXHRcdFx0XHRcdFx1MDAyNnJhbmdlX3N0YXJ0LCBcdTAwMjZyYW5nZV9lbmQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIHZvaWRcbithZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbitcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmVuZClcbit7XG4rfVxuKyNlbmRpZlxuK1xuIHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiB7XG4gXHRpZiAoIXZtYS1cdTAwM2V2bV9maWxlKVx0LyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqL1xuIFx0XHRyZXR1cm47XG4gXG4tXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBzdGFydCwgZW5kKTtcbiBcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcbi1cdGlmICh2bWEtXHUwMDNldm1fZmlsZSlcbitcdGlmICh2bWEtXHUwMDNldm1fZmlsZSkge1xuIFx0XHRpX21tYXBfbG9ja193cml0ZSh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuK1x0XHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgc3RhcnQsIGVuZCk7XG4rXHR9XG4gfVxuIFxuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5AQCAtNTQwMSw3ICs1NDkwLDEyIEBAIHZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXG4gXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHRcdFx0c3RhcnQsIGVuZCk7XG4tXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbitcdC8qXG4rXHQgKiBPbmx5IGV4cGFuZCBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBUaGUgY2FsbGVyc1xuK1x0ICogaG9sZCBpX21tYXBfcndzZW0gYW5kIHRoZSBodWdldGxiIFZNQSBsb2NrIGZvciBzaGFyZWQgbWFwcGluZ3MsIHNvIFBNRFxuK1x0ICogc2hhcmluZyBzdGF0ZSBjYW5ub3QgY2hhbmdlIGJlZm9yZSBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkuXG4rXHQgKi9cbitcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBcdTAwMjZyYW5nZS5zdGFydCwgXHUwMDI2cmFuZ2UuZW5kKTtcbiBcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbiBcdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgdm1hLVx1MDAzZXZtX21tKTtcbiBcbkBAIC02OTQzLDIzICs3MDM3LDEzIEBAIGJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVx1MDAzZXZtX3N0YXJ0LCBQVURfU0laRSksXG4tXHRcdHZfZW5kID0gQUxJR05fRE9XTih2bWEtXHUwMDNldm1fZW5kLCBQVURfU0laRSk7XG4rXHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7XG4gXG4tXHQvKlxuLVx0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2Vcbi1cdCAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpbi5cbi1cdCAqL1xuLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkgfHwgISh2X2VuZCBcdTAwM2Ugdl9zdGFydCkgfHxcbi1cdFx0KCplbmQgXHUwMDNjPSB2X3N0YXJ0KSB8fCAoKnN0YXJ0IFx1MDAzZT0gdl9lbmQpKVxuK1x0aWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCxcbitcdFx0XHRcdFx0XHUwMDI2cmFuZ2Vfc3RhcnQsIFx1MDAyNnJhbmdlX2VuZCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xuLVx0aWYgKCpzdGFydCBcdTAwM2Ugdl9zdGFydClcbi1cdFx0KnN0YXJ0ID0gQUxJR05fRE9XTigqc3RhcnQsIFBVRF9TSVpFKTtcbi1cbi1cdGlmICgqZW5kIFx1MDAzYyB2X2VuZClcbi1cdFx0KmVuZCA9IEFMSUdOKCplbmQsIFBVRF9TSVpFKTtcbitcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCk7XG4gfVxuIFxuIC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowMToyMS42NTc2NzcxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNTQyOTAzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG1tL2h1Z2V0bGIuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3Mga2lja3MgaW46IHRpbWUgdG8gZGlzc2VjdCB0aGlzLiBMZXQncyBzZWUgd2hhdCB0aGV5J3JlIHRyeWluZyB0byBkby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNoYW5nZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBodWdlIHBhZ2UgbWFuYWdlbWVudC5cblxuRmlyc3QsIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgaW5zcGVjdCB0aGUgcGF0Y2ggaXRzZWxmLCBvZiBjb3Vyc2UuIEJ1dCBiZWZvcmUgSSBldmVuIGdldCBpbnRvIGxpbmUtYnktbGluZSBkaWZmcywgSSdsbCB3YW50IHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBhbmQgY29udGV4dC5cblxuVGhlbiwgSSdsbCByZWFjaCBmb3IgbXkgdG9vbHMg4oCTIHByb2JhYmx5IGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHdoYXQgcGFydHMgb2YgYG1tL2h1Z2V0bGIuY2AgYXJlIGFmZmVjdGVkLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBzeW1ib2xzIHRoYXQgbWlnaHQgY29tZSBpbnRvIHBsYXkgaGVyZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBpbXBhY3QgYW5kIHBvdGVudGlhbCBzaWRlLWVmZmVjdHMgb2YgdGhpcyBtb2RpZmljYXRpb24uIFdoYXQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXJlIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IG5ldyBmZWF0dXJlcyBiZWluZyBpbnRyb2R1Y2VkIG9yIGV4aXN0aW5nIGJlaGF2aW9ycyBiZWluZyBtb2RpZmllZD8gSSdtIGdvaW5nIHRvIGRldGVybWluZSB3aGljaCBhcmVhcyBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiB0aGlzIHBhdGNoIGludGVyc2VjdHMgd2l0aC5cblxuSSdtIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBtaWdodCBiZS5cbkknbSBsb29raW5nIGZvciB0aGUgcmVsYXRlZCBzeW1ib2xzIHRvIHNlZSBpZiB0aGUgcGF0Y2ggbWFrZXMgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlbSwgYW5kIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzeW1ib2xzLlxuXG5UaGUgY29yZSBvZiBteSBhbmFseXNpcyB3aWxsIHJldm9sdmUgYXJvdW5kIGhvdyB0aGlzIHBhdGNoIGltcGFjdHMgdGhlIG92ZXJhbGwgaHVnZSBwYWdlIHN1YnN5c3RlbS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBJJ2xsIG5lZWQgdG8gYW5zd2VyIGFib3V0IHBlcmZvcm1hbmNlLCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBhbGlnbnMgd2l0aCB0aGUgZXN0YWJsaXNoZWQgZGVzaWduIHByaW5jaXBsZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBob2xlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MjkuNzExOTcxMTU5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTkwMzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz00ODg0PWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00OTMwLVxcbm1tL2h1Z2V0bGIuYzo0OTMxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxubW0vaHVnZXRsYi5jLTQ5MzItXFx0XFx0LyogSWYgdGhlIHBhZ2V0YWJsZXMgYXJlIHNoYXJlZCwgdGhlcmUgaXMgbm90aGluZyB0byBkbyAqL1xcbi0tXFxubW0vaHVnZXRsYi5jPTUxOTY9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUzNTUtXFxubW0vaHVnZXRsYi5jOjUzNTY6I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG5tbS9odWdldGxiLmMtNTM1Ny1zdGF0aWMgYm9vbFxcbi0tXFxubW0vaHVnZXRsYi5jPTY5NDE9bG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02OTgxLVxcbm1tL2h1Z2V0bGIuYzo2OTgyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxubW0vaHVnZXRsYi5jLTY5ODMtc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV90YWJsZV9zaGFyZWFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jPTcxNjA9dm9pZCBodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcxNzEtXFxubW0vaHVnZXRsYi5jOjcxNzI6I2Vsc2UgLyogIUNPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcgKi9cXG5tbS9odWdldGxiLmMtNzE3My1cXG4tLVxcbm1tL2h1Z2V0bGIuYz03MjAyPWJvb2wgd2FudF9wbWRfc2hhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MjA1LX1cXG5tbS9odWdldGxiLmM6NzIwNjojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyAqL1xcbm1tL2h1Z2V0bGIuYy03MjA3LVxcbi0tXFxubW0vaHVnZXRsYi5jPTczMDI9X193ZWFrIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9tYXNrX2xhc3RfcGFnZShzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy03MzAzLXtcXG5tbS9odWdldGxiLmM6NzMwNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbm1tL2h1Z2V0bGIuYy03MzA1LVxcdGlmIChodWdlX3BhZ2Vfc2l6ZShoKSA9PSBQTURfU0laRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MjkuNzYzOTY4MjY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4MzEzOTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgSHVudCBmb3IgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgZm9jdXMgaXMgZmluZGluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBlbnRyaWVzIHJlbGF0ZWQgdG8gYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBwcmV0dHkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSwgc28gdGhlIHNlYXJjaCBzaG91bGRuJ3QgYmUgdG9vIGJyb2FkLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIGhpZXJhcmNoeS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSAqZXhhY3QqIGVudHJ5IG9yIGVudHJpZXMgcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoaXMgYmVoYXZpb3IuIFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgcG9zc2libGUgdmFsdWVzLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIFRoaXMgd2lsbCBpbnZvbHZlIHVzaW5nIHN0YW5kYXJkIHRvb2xzIG9yIG1ldGhvZHMgZm9yIG5hdmlnYXRpbmcgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtIC0gaG9wZWZ1bGx5LCBpdCdzIG5vdCBidXJpZWQgdG9vIGRlZXAgd2l0aGluIHNvbWUgb2JzY3VyZSBmaWxlLlxuXG5PbmNlIEkndmUgcGlucG9pbnRlZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBlbnRyeSwgSSdsbCBhc3Nlc3MgdGhlIGNvbnRleHQuIFdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgcmVsYXRlZD8gV2hhdCBmZWF0dXJlcyBkZXBlbmQgb24gdGhpcz8gV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBleGlzdGVuY2U/IEJhc2ljYWxseSwgSSdtIGFpbWluZyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoaXMgb3B0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIGtlcm5lbCBsYW5kc2NhcGUuIEknbGwgbmVlZCB0byBleHRyYWN0IGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgSSBjYW4gZnJvbSB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZiwgYW5kIG1heWJlIGxvb2sgaW50byByZWxhdGVkIHNvdXJjZSBmaWxlcyBpZiBuZWNlc3NhcnkuIFRoaXMgd2lsbCBoZWxwIG1lIHRydWx5IHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIHdvcmtzIGFuZCB3aGVyZSBpdCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQ1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MzIuNDQ3MTA5ODY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODE3MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTQ4ODQ9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ5MzAtXFxubW0vaHVnZXRsYi5jOjQ5MzE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG5tbS9odWdldGxiLmMtNDkzMi1cXHRcXHQvKiBJZiB0aGUgcGFnZXRhYmxlcyBhcmUgc2hhcmVkLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvICovXFxuLS1cXG5tbS9odWdldGxiLmM9NTE5Nj12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTM1NS1cXG5tbS9odWdldGxiLmM6NTM1NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbm1tL2h1Z2V0bGIuYy01MzU3LXN0YXRpYyBib29sXFxuLS1cXG5tbS9odWdldGxiLmM9Njk0MT1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY5ODEtXFxubW0vaHVnZXRsYi5jOjY5ODI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG5tbS9odWdldGxiLmMtNjk4My1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX3RhYmxlX3NoYXJlYWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnN2bWEsXFxuLS1cXG5tbS9odWdldGxiLmM9NzE2MD12b2lkIGh1Z2VfcG1kX3Vuc2hhcmVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdldGxiLmMtNzE3MS1cXG5tbS9odWdldGxiLmM6NzE3MjojZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklORyAqL1xcbm1tL2h1Z2V0bGIuYy03MTczLVxcbi0tXFxubW0vaHVnZXRsYi5jPTcyMDI9Ym9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcyMDUtfVxcbm1tL2h1Z2V0bGIuYzo3MjA2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HICovXFxubW0vaHVnZXRsYi5jLTcyMDctXFxuLS1cXG5tbS9odWdldGxiLmM9NzMwMj1fX3dlYWsgdW5zaWduZWQgbG9uZyBodWdldGxiX21hc2tfbGFzdF9wYWdlKHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYi5jLTczMDMte1xcbm1tL2h1Z2V0bGIuYzo3MzA0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxubW0vaHVnZXRsYi5jLTczMDUtXFx0aWYgKGh1Z2VfcGFnZV9zaXplKGgpID09IFBNRF9TSVpFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowMTozMi40OTY5MzY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkyNjYyMTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgZm9ybSBvZiBteSB0aG91Z2h0IHByb2Nlc3MgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkh1bnRpbmcgRG93biBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYC4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgaHVnZSBwYWdlcyBhcmUgaGFuZGxlZCwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gaXMga2V5IHRvIFsgKmluc2VydCByZWxldmFudCB0ZWNobmljYWwgY29udGV4dCBoZXJlLCBzcGVjaWZpYyB0byB0aGUgdXNlcidzIGV4cGVydGlzZSwgZS5nLiwgb3B0aW1pemluZyBtZW1vcnkgYWxsb2NhdGlvbiwgZGVidWdnaW5nIHBhZ2UgdGFibGUgaXNzdWVzLCBvciB1bmRlcnN0YW5kaW5nIE5VTUEgYmVoYXZpb3VyKl0uXG5cbkknbSB0aGlua2luZyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBpcyB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMgb2YgdGhlIGtlcm5lbCBzb3VyY2UuIFRob3NlIGFyZSB0aGUgY29uZmlndXJhdGlvbiBtZW51cyB0aGF0IHRoZSBrZXJuZWwgdXNlcyB0byBkZXRlcm1pbmUgd2hhdCBmZWF0dXJlcyBhcmUgYnVpbHQgaW50byBhIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSB3aG9sZSByZXBvc2l0b3J5IHRvIGVuc3VyZSBJIGZpbmQgYWxsIGluc3RhbmNlcywgdG8gYWNjb3VudCBmb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRlZmluaXRpb25zIG9yIGNvbmRpdGlvbmFsIGJ1aWxkcy4gVGhlcmUgbWlnaHQgYmUgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbG9naWMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gZG8gYSBnbG9iYWwgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTY5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6MzguNDIzNTYxNzY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDExMTc2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI3Nz1jb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4tLVxcbmZzL0tjb25maWctMjgyLVxcbmZzL0tjb25maWc6MjgzOmNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG5mcy9LY29uZmlnLTI4NC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6NDAuMDY0Njg3ODg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNzczMzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgZnMvS2NvbmZpZ2AuIEkndmUgZ290IGEgZmVlbGluZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBzcGVjaWZpYyBmaWxlIHN5c3RlbSBvcHRpb25zLCBsaWtlbHkgaW4gdGhlIGFyZWEgb2YgYSBwYXJ0aWN1bGFyIGZpbGVzeXN0ZW0sIGxldCdzIHNheSBhcm91bmQgbGluZSAyODMuIFRpbWUgdG8gZmlyZSB1cCBteSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLiBJJ2xsIG5lZWQgdG8gc2VlIHdoYXQncyBkZWZpbmVkIHRoZXJlLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBjb25maWcgb3B0aW9ucy4gVGhlcmUgbWF5IGJlIGEgc3VidGxlIGRlcGVuZGVuY3kgdGhhdCBJIGFtIG92ZXJsb29raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDE6NDIuMDAyNDI1ODg1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHQgIChib290IGNvbW1hbmQgbGluZSkgb3IgaHVnZXRsYl9vcHRpbWl6ZV92bWVtbWFwIChzeXNjdGwpLlxcbiAyNzE6XFx0ZW5kaWYgIyBIVUdFVExCRlNcXG4gMjcyOlxcdFxcbiAyNzM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRVxcbiAyNzQ6XFx0XFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuIDI3NTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDI3NjpcXHRcXG4gMjc3OlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNzg6XFx0XFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuIDI3OTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfV0FOVF9PUFRJTUlaRV9IVUdFVExCX1ZNRU1NQVBcXG4gMjgwOlxcdFxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4gMjgxOlxcdFxcdHNlbGVjdCBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUIGlmIEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVFxcbiAyODI6XFx0XFxuIDI4MzpcXHRjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuIDI4NDpcXHRcXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4gMjg1OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFxcdTAwMjZcXHUwMDI2IFNQTElUX1BNRF9QVExPQ0tTXFxuIDI4NjpcXHRcXG4gMjg3OlxcdGNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuIDI4ODpcXHRcXHRib29sXFxuIDI4OTpcXHRcXG4gMjkwOlxcdHNvdXJjZSBcXFwiZnMvY29uZmlnZnMvS2NvbmZpZ1xcXCJcXG4gMjkxOlxcdHNvdXJjZSBcXFwiZnMvZWZpdmFyZnMvS2NvbmZpZ1xcXCJcXG4gMjkyOlxcdFxcbiAyOTM6XFx0ZW5kbWVudVxcbiAyOTQ6XFx0XFxuIDI5NTpcXHRtZW51Y29uZmlnIE1JU0NfRklMRVNZU1RFTVNcXG4gMjk2OlxcdFxcdGJvb2wgXFxcIk1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXNcXFwiXFxuIDI5NzpcXHRcXHRkZWZhdWx0IHlcXG4gMjk4OlxcdFxcdGhlbHBcXG4gMjk5OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHZhcmlvdXMgbWlzY2VsbGFuZW91c1xcbiAzMDA6XFx0XFx0ICBmaWxlc3lzdGVtcywgc3VjaCBhcyBmaWxlc3lzdGVtcyB0aGF0IGNhbWUgZnJvbSBvdGhlclxcbiAzMDE6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtcy5cXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxcbiAzMDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAxOjQyLjAwMjUzMjk0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUxNjM0NTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBIVUdFVExCRlMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgSFVHRVRMQkZTYCBhY3R1YWxseSByZWxpZXMgb24gZnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludC4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIHRhcmdldGluZyBgZnMvS2NvbmZpZ2AgYW5kIGBtbS9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQgb2YgZGVwZW5kZW5jeSB3b3VsZCBiZSBkZWZpbmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0LCB3aGVuIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGRpcmVjdGx5IGltcGFjdCB3aGV0aGVyIG9yIG5vdCBgSFVHRVRMQkZTYCBjYW4gZXZlbiBiZSBjb21waWxlZCwgb3IgZnVuY3Rpb25zIGNvcnJlY3RseS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcywgcG9zc2libHkgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGZpbGUgc3lzdGVtIGNvcmUgY29tcG9uZW50cy4gSXQncyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgZGVidWdnaW5nIGV4ZXJjaXNlIOKAkyBqdXN0IG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSdtIGFudGljaXBhdGluZyB0aGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHJlcmVxdWlzaXRlIHNldHRpbmdzIG5lZWRlZCBmb3IgYEhVR0VUTEJGU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjAyLjUxODg4MTg3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NzcyNjE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQkZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjA0LjYwNjYxODMzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDM4ODUzNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBiZXR0ZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBvdXQgdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDI0NS0yNzUgaW4gYGZzL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvcmUgb3B0aW9ucyBhcmUgbGlrZWx5IGRlZmluZWQgb3IgaW5jbHVkZWQgZm9yIGFueSBrZXkgcGFyYW1ldGVycyBiZWluZyBleHBvc2VkIHRvIHRoZSB1c2VyLiBHaXZlbiB3aGF0IEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCwgaXQncyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBgc291cmNlYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgcHVsbCBpbiBvdGhlciBzZWN0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiwgYXMgdGhpcyBjYW4gb2Z0ZW4gaGlkZSBzb21lIG9mIHRoZSBpbXBvcnRhbnQgZGV0YWlscy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIHNvbGlkIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowMjoxMC4wNDU0NzU0MjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNDY6XFx0XFxuIDI0NzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjQ4OlxcdFxcdGRlZl9ib29sIG5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNjc6XFx0XFx0aGVscFxcbiAyNjg6XFx0XFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cXG4gMjY5OlxcdFxcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxcbiAyNzA6XFx0XFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cXG4gMjcxOlxcdGVuZGlmICMgSFVHRVRMQkZTXFxuIDI3MjpcXHRcXG4gMjczOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gMjc0OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbiAyNzU6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiAyNzY6XFx0XFxuIDI3NzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG4gMjc4OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbiAyNzk6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjEwLjA0NTU1Nzg5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTEyMjc0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVgIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFYC4gSSBrbm93IHdoYXQgaXQgKm1lYW5zKiDigJMgdGhlIGRlc2lyZSBmb3IgdGhlIGFyY2hpdGVjdHVyZSB0byBzdXBwb3J0IHNoYXJlZCBodWdlIFBNRHMg4oCTIGJ1dCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlICoqcHJhY3RpY2FsIGltcGxpY2F0aW9ucyoqIG9mIGl0cyBzdXBwb3J0LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGFyY2hpdGVjdHVyZXMgYWN0dWFsbHkgZGVmaW5lIGFuZCBlbmFibGUgdGhpcyBmZWF0dXJlLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGxpa2VseSBgS2NvbmZpZ2AgZmlsZXMgd2l0aGluIHRoZSBgYXJjaC9gIGRpcmVjdG9yaWVzLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggYXJjaGl0ZWN0dXJlcyBjb25kaXRpb25hbGx5IHNlbGVjdCBvciBkZXBlbmQgb24gdGhpcyBvcHRpb24uIEnigJlsbCBsaWtlbHkgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb25zLiBCZXlvbmQgYSBzaW1wbGUgZGVmaW5pdGlvbiwgSSdsbCBiZSBpbnRlcmVzdGVkIGluIGFueSBhc3NvY2lhdGVkIGZlYXR1cmVzIG9yIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGFsc28gZW5hYmxlZCBvciBkaXNhYmxlZCBieSBpdHMgcHJlc2VuY2UuIFRoaXMgY291bGQgcmFuZ2UgZnJvbSBzcGVjaWZpYyBtZW1vcnkgbW9kZWwgYXNzdW1wdGlvbnMgdG8gcGVyZm9ybWFuY2UtcmVsYXRlZCBjb25zaWRlcmF0aW9ucy4gTXkgZ29hbCBpcyB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZlYXR1cmUncyByb2xlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmVzIGl0IHRvdWNoZXMuIEknbSBub3QganVzdCBsb29raW5nIGZvciBhIHllcy9ubyBhbnN3ZXI7IEkgd2FudCB0byBzZWUgdGhlICp3aHkqIGFuZCB0aGUgKmhvdyouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjE2LjE1NzgzNjA4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MTcwNzgyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTExMTc9Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG4tLVxcbmFyY2gvS2NvbmZpZy0xMTIwLVxcbmFyY2gvS2NvbmZpZzoxMTIxOmNvbmZpZyBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcXG5hcmNoL0tjb25maWctMTEyMi1cXHRib29sXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy05NC1cXHRzZWxlY3QgQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTXFxuYXJjaC9hcm02NC9LY29uZmlnOjk1OlxcdHNlbGVjdCBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUgaWYgQVJNNjRfNEtfUEFHRVMgfHwgKEFSTTY0XzE2S19QQUdFUyBcXHUwMDI2XFx1MDAyNiAhQVJNNjRfVkFfQklUU18zNilcXG5hcmNoL2FybTY0L0tjb25maWctOTYtXFx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTg4LVxcdHNlbGVjdCBBUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCIGlmICFSSVNDVl9JU0FfU1ZOQVBPVFxcbmFyY2gvcmlzY3YvS2NvbmZpZzo4OTpcXHRzZWxlY3QgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIGlmIDY0QklUXFxuYXJjaC9yaXNjdi9LY29uZmlnLTkwLVxcdHNlbGVjdCBBUkNIX1dBTlRfTERfT1JQSEFOX1dBUk5cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNDgtXFx0c2VsZWN0IEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcXG5hcmNoL3g4Ni9LY29uZmlnOjE0OTpcXHRzZWxlY3QgQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFXFx0XFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0xNTAtXFx0c2VsZWN0IEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxcbi0tXFxuZnMvS2NvbmZpZz0yODM9Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbmZzL0tjb25maWctMjg0LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWc6Mjg1OlxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFxcdTAwMjZcXHUwMDI2IFNQTElUX1BNRF9QVExPQ0tTXFxuZnMvS2NvbmZpZy0yODYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjE3Ljc0OTU0OTgyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ1NzA3NDAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEh1Z2UgUGFnZXM6IEVuYWJsaW5nIFNoYXJlZCBQTUQgUGFnZSBUYWJsZXMqKlxuXG5BbHJpZ2h0LCBzbyAqSFVHRVRMQkZTKiBpcyB0aGUga2V5IGhlcmUg4oCTIGl0J3MgdGhlIGVuYWJsZXIuIFdlIGtub3cgdGhhdCBgSFVHRVRMQkZTYCB1bmxvY2tzIGBIVUdFVExCX1BBR0VgLCBhbmQgZnJvbSB0aGVyZSB3ZSBnZXQgYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCB0aGF0IGVuYWJsZXMgb24geDg2XzY0LCBhcm02NCwgYW5kIHRoZSBvdGhlciBhcmNoaXRlY3R1cmVzLiBXZSdyZSBsb29raW5nIGF0IHNvbWUgc2VyaW91cyBvcHRpbWl6YXRpb25zIGFyb3VuZCBodWdlIHBhZ2UgbWFuYWdlbWVudCBhdCB0aGUgUE1EIGxldmVsLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byBkaXNzZWN0IHRoaXMgcGF0Y2gsIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdOKAmXMgaW1wbGVtZW50ZWQuIEknbSBnb2luZyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9kaWZpY2F0aW9ucyBhbmQgbmV3IGZ1bmN0aW9ucy4gTGV0J3MgdHJhY2UgYmFjayBob3cgZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQsIGFuZCB3aG8gdGhlIGNhbGxlcnMgYXJlLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byBiZSBhYmxlIHRvIGp1ZGdlIHRoZSBpbXBsaWNhdGlvbnMuXG5cblRpbWUgdG8gY3JhY2sgb3BlbiBgbW0vaHVnZXRsYi5jYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWFnaWMgc3Vycm91bmRpbmcgaHVnZSBwYWdlcyBoYXBwZW5zLiBJJ2xsIHJlYWQgdGhyb3VnaCB0aGUgY29kZSBpbiB0aGUgbmVpZ2hib3Job29kIG9mIHRoZSBjaGFuZ2VzIHRvIGdhaW4gYSByZWFsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaW1wYWN0cyB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDI6MzkuMjA2NjI3MzMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTM1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUzNTA6XFx0XFx0fVxcbjUzNTE6XFx0XFx0dGxiX2VuZF92bWEodGxiLCB2bWEpO1xcbjUzNTI6XFx0XFxuNTM1MzpcXHRcXHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcXG41MzU0OlxcdH1cXG41MzU1OlxcdFxcbjUzNTY6XFx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG41MzU3OlxcdHN0YXRpYyBib29sXFxuNTM1ODpcXHRwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG41MzU5OlxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpyYW5nZV9zdGFydCxcXG41MzYwOlxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKnJhbmdlX2VuZClcXG41MzYxOlxcdHtcXG41MzYyOlxcdFxcdHVuc2lnbmVkIGxvbmcgdl9zdGFydCA9IEFMSUdOKHZtYS1cXHUwMDNldm1fc3RhcnQsIFBVRF9TSVpFKTtcXG41MzYzOlxcdFxcdHVuc2lnbmVkIGxvbmcgdl9lbmQgPSBBTElHTl9ET1dOKHZtYS1cXHUwMDNldm1fZW5kLCBQVURfU0laRSk7XFxuNTM2NDpcXHRcXG41MzY1OlxcdFxcdC8qXFxuNTM2NjpcXHRcXHQgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZVxcbjUzNjc6XFx0XFx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGl0LlxcbjUzNjg6XFx0XFx0ICovXFxuNTM2OTpcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUFZU0hBUkUpIHx8ICEodl9lbmQgXFx1MDAzZSB2X3N0YXJ0KSB8fFxcbjUzNzA6XFx0XFx0ICAgIChlbmQgXFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFxcdTAwM2U9IHZfZW5kKSlcXG41MzcxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41MzcyOlxcdFxcbjUzNzM6XFx0XFx0KnJhbmdlX3N0YXJ0ID0gbWF4KEFMSUdOX0RPV04oc3RhcnQsIFBVRF9TSVpFKSwgdl9zdGFydCk7XFxuNTM3NDpcXHRcXHQqcmFuZ2VfZW5kID0gbWluKEFMSUdOKGVuZCwgUFVEX1NJWkUpLCB2X2VuZCk7XFxuNTM3NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41Mzc2OlxcdH1cXG41Mzc3OlxcdFxcbjUzNzg6XFx0c3RhdGljIHZvaWRcXG41Mzc5OlxcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG41MzgwOlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgdW5zaWduZWQgbG9uZyByYW5nZV9lbmQpXFxuNTM4MTpcXHR7XFxuNTM4MjpcXHRcXHQvKiBFeHRlbmQgdGhlIHJhbmdlIHRvIGJlIFBVRCBhbGlnbmVkIGZvciBhIHdvcnN0IGNhc2Ugc2NlbmFyaW8gKi9cXG41MzgzOlxcdFxcdGlmICgqc3RhcnQgXFx1MDAzZSByYW5nZV9zdGFydClcXG41Mzg0OlxcdFxcdFxcdCpzdGFydCA9IHJhbmdlX3N0YXJ0O1xcbjUzODU6XFx0XFxuNTM4NjpcXHRcXHRpZiAoKmVuZCBcXHUwMDNjIHJhbmdlX2VuZClcXG41Mzg3OlxcdFxcdFxcdCplbmQgPSByYW5nZV9lbmQ7XFxuNTM4ODpcXHR9XFxuNTM4OTpcXHRcXG41MzkwOlxcdHN0YXRpYyB2b2lkXFxuNTM5MTpcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjUzOTI6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG41MzkzOlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsXFxuNTM5NDpcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcXG41Mzk1OlxcdHtcXG41Mzk2OlxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XFxuNTM5NzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cXHUwMDNldm1fbW07XFxuNTM5ODpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XFxuNTM5OTpcXHRcXG41NDAwOlxcdFxcdGh1Z2V0bGJfdm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcXG41NDAxOlxcdFxcdGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG41NDAyOlxcdFxcbjU0MDM6XFx0XFx0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXFx1MDAzYyByYW5nZV9lbmQ7IGFkZHJlc3MgKz0gUFVEX1NJWkUpIHtcXG41NDA0OlxcdFxcdFxcdHB0ZV90ICpwdGVwO1xcbjU0MDU6XFx0XFx0XFx0Ym9vbCBzaGFyZWQ7XFxuNTQwNjpcXHRcXG41NDA3OlxcdFxcdFxcdHB0ZXAgPSBodWdldGxiX3dhbGsodm1hLCBhZGRyZXNzLCBQTURfU0laRSk7XFxuNTQwODpcXHRcXHRcXHRpZiAoIXB0ZXApXFxuNTQwOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41NDEwOlxcdFxcbjU0MTE6XFx0XFx0XFx0c3Bpbl9sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcXG41NDEyOlxcdFxcdFxcdHNoYXJlZCA9IHB0ZGVzY19wbWRfaXNfc2hhcmVkKHZpcnRfdG9fcHRkZXNjKHB0ZXApKTtcXG41NDEzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcXG41NDE0OlxcdFxcbjU0MTU6XFx0XFx0XFx0aWYgKHNoYXJlZClcXG41NDE2OlxcdFxcdFxcdFxcdGFkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcoc3RhcnQsIGVuZCwgYWRkcmVzcyxcXG41NDE3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgYWRkcmVzcyArIFBVRF9TSVpFKTtcXG41NDE4OlxcdFxcdH1cXG41NDE5OlxcdH1cXG41NDIwOlxcdFxcbjU0MjE6XFx0c3RhdGljIHZvaWRcXG41NDIyOlxcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxcbjU0MjM6XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICplbmQpXFxuNTQyNDpcXHR7XFxuNTQyNTpcXHRcXHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7XFxuNTQyNjpcXHRcXG41NDI3OlxcdFxcdGlmIChodWdlX3BhZ2Vfc2l6ZShoc3RhdGVfdm1hKHZtYSkpICE9IFBNRF9TSVpFKVxcbjU0Mjg6XFx0XFx0XFx0cmV0dXJuO1xcbjU0Mjk6XFx0XFxuNTQzMDpcXHRcXHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxcbjU0MzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJhbmdlX3N0YXJ0LCBcXHUwMDI2cmFuZ2VfZW5kKSlcXG41NDMyOlxcdFxcdFxcdHJldHVybjtcXG41NDMzOlxcdFxcbjU0MzQ6XFx0XFx0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc19pbl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpO1xcbjU0MzU6XFx0fVxcbjU0MzY6XFx0I2Vsc2VcXG41NDM3OlxcdHN0YXRpYyB2b2lkXFxuNTQzODpcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcXG41NDM5OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxcbjU0NDA6XFx0e1xcbjU0NDE6XFx0fVxcbjU0NDI6XFx0I2VuZGlmXFxuNTQ0MzpcXHRcXG41NDQ0OlxcdHZvaWQgX19odWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG41NDQ1OlxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbjU0NDY6XFx0e1xcbjU0NDc6XFx0XFx0aWYgKCF2bWEtXFx1MDAzZXZtX2ZpbGUpXFx0LyogaHVnZXRsYmZzX2ZpbGVfbW1hcCBlcnJvciAqL1xcbjU0NDg6XFx0XFx0XFx0cmV0dXJuO1xcbjU0NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjM5LjIwNzEwMTQ2M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTk4OTE5MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG1tL2h1Z2V0bGIuY2AgZm9yIENvbnRleHQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgbW0vaHVnZXRsYi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgNTQ1MC01NTIwIGFuZCB0aGVuIGNpcmNsaW5nIGJhY2sgdG8gbGluZXMgNzAzMC03MDYwLiBUaGVzZSByYW5nZXMgYXJlIHVzdWFsbHkgd2hlcmUgc29tZSBjcml0aWNhbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBodWdlIHBhZ2Ugc3Vic3lzdGVtIGFuZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSB3aWxsIGJlIGRlZmluZWQsIG9yIHdoZXJlIHRoZSByZWxldmFudCBwYWdlIHRhYmxlIGxvZ2ljIGlzIGhvdXNlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZSwgaG9wZWZ1bGx5IEkgY2FuIGRlZHVjZSB3aGF0J3MgaGFwcGVuaW5nIGJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgSSdsbCBzZWUgd2hhdCB0aGUgY29udGV4dCBpcy4gSSdtIGV4cGVjdGluZyBzb21lIGludGVyYWN0aW9ucyBpbiB0aGVzZSByYW5nZXMgd2l0aCBOVU1BLCBtZW1vcnkgYWxsb2NhdGlvbiBvciByZWxlYXNlLCBvciBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBmb2N1cyBvZiBteSBjdXJyZW50IHF1ZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDI6NDIuMjA2MDIzOTU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQ1MDpcXHRcXHRodWdldGxiX3ZtYV9sb2NrX3dyaXRlKHZtYSk7XFxuNTQ1MTpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9maWxlKSB7XFxuNTQ1MjpcXHRcXHRcXHRpX21tYXBfbG9ja193cml0ZSh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuNTQ1MzpcXHRcXHRcXHRhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHZtYSwgc3RhcnQsIGVuZCk7XFxuNTQ1NDpcXHRcXHR9XFxuNTQ1NTpcXHR9XFxuNTQ1NjpcXHRcXG41NDU3OlxcdHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuNTQ1ODpcXHRcXHRcXHQgICAgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKVxcbjU0NTk6XFx0e1xcbjU0NjA6XFx0XFx0emFwX2ZsYWdzX3QgemFwX2ZsYWdzID0gZGV0YWlscyA/IGRldGFpbHMtXFx1MDAzZXphcF9mbGFncyA6IDA7XFxuNTQ2MTpcXHRcXG41NDYyOlxcdFxcdGlmICghdm1hLVxcdTAwM2V2bV9maWxlKVxcdC8qIGh1Z2V0bGJmc19maWxlX21tYXAgZXJyb3IgKi9cXG41NDYzOlxcdFxcdFxcdHJldHVybjtcXG41NDY0OlxcdFxcbjU0NjU6XFx0XFx0aWYgKHphcF9mbGFncyBcXHUwMDI2IFpBUF9GTEFHX1VOTUFQKSB7XFx0LyogZmluYWwgdW5tYXAgKi9cXG41NDY2OlxcdFxcdFxcdC8qXFxuNTQ2NzpcXHRcXHRcXHQgKiBVbmxvY2sgYW5kIGZyZWUgdGhlIHZtYSBsb2NrIGJlZm9yZSByZWxlYXNpbmcgaV9tbWFwX3J3c2VtLlxcbjU0Njg6XFx0XFx0XFx0ICogV2hlbiB0aGUgdm1hX2xvY2sgaXMgZnJlZWQsIHRoaXMgbWFrZXMgdGhlIHZtYSBpbmVsaWdpYmxlXFxuNTQ2OTpcXHRcXHRcXHQgKiBmb3IgcG1kIHNoYXJpbmcuICBBbmQsIGlfbW1hcF9yd3NlbSBpcyByZXF1aXJlZCB0byBzZXQgdXBcXG41NDcwOlxcdFxcdFxcdCAqIHBtZCBzaGFyaW5nLiAgVGhpcyBpcyBpbXBvcnRhbnQgYXMgcGFnZSB0YWJsZXMgZm9yIHRoaXNcXG41NDcxOlxcdFxcdFxcdCAqIHVubWFwcGVkIHJhbmdlIHdpbGwgYmUgYXN5bmNocm91c2x5IGRlbGV0ZWQuICBJZiB0aGUgcGFnZVxcbjU0NzI6XFx0XFx0XFx0ICogdGFibGVzIGFyZSBzaGFyZWQsIHRoZXJlIHdpbGwgYmUgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnlcXG41NDczOlxcdFxcdFxcdCAqIHNvbWVvbmUgZWxzZS5cXG41NDc0OlxcdFxcdFxcdCAqL1xcbjU0NzU6XFx0XFx0XFx0X19odWdldGxiX3ZtYV91bmxvY2tfd3JpdGVfZnJlZSh2bWEpO1xcbjU0NzY6XFx0XFx0fSBlbHNlIHtcXG41NDc3OlxcdFxcdFxcdGh1Z2V0bGJfdm1hX3VubG9ja193cml0ZSh2bWEpO1xcbjU0Nzg6XFx0XFx0fVxcbjU0Nzk6XFx0XFxuNTQ4MDpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9maWxlKVxcbjU0ODE6XFx0XFx0XFx0aV9tbWFwX3VubG9ja193cml0ZSh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuNTQ4MjpcXHR9XFxuNTQ4MzpcXHRcXG41NDg0OlxcdHZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuNTQ4NTpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbjU0ODY6XFx0XFx0XFx0XFx0ICB6YXBfZmxhZ3NfdCB6YXBfZmxhZ3MpXFxuNTQ4NzpcXHR7XFxuNTQ4ODpcXHRcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbjU0ODk6XFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbjU0OTA6XFx0XFxuNTQ5MTpcXHRcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIHZtYS1cXHUwMDNldm1fbW0sXFxuNTQ5MjpcXHRcXHRcXHRcXHRcXHRzdGFydCwgZW5kKTtcXG41NDkzOlxcdFxcdC8qXFxuNTQ5NDpcXHRcXHQgKiBPbmx5IGV4cGFuZCBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBUaGUgY2FsbGVyc1xcbjU0OTU6XFx0XFx0ICogaG9sZCBpX21tYXBfcndzZW0gYW5kIHRoZSBodWdldGxiIFZNQSBsb2NrIGZvciBzaGFyZWQgbWFwcGluZ3MsIHNvIFBNRFxcbjU0OTY6XFx0XFx0ICogc2hhcmluZyBzdGF0ZSBjYW5ub3QgY2hhbmdlIGJlZm9yZSBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKCkuXFxuNTQ5NzpcXHRcXHQgKi9cXG41NDk4OlxcdFxcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQpO1xcbjU0OTk6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXFx1MDAyNnJhbmdlKTtcXG41NTAwOlxcdFxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIHZtYS1cXHUwMDNldm1fbW0pO1xcbjU1MDE6XFx0XFxuNTUwMjpcXHRcXHRfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKFxcdTAwMjZ0bGIsIHZtYSwgc3RhcnQsIGVuZCxcXG41NTAzOlxcdFxcdFxcdFxcdCAgICAgICBmb2xpbywgemFwX2ZsYWdzKTtcXG41NTA0OlxcdFxcbjU1MDU6XFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuNTUwNjpcXHRcXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG41NTA3OlxcdH1cXG41NTA4OlxcdFxcbjU1MDk6XFx0LypcXG41NTEwOlxcdCAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIG9yaWdpbmFsIG1hcHBlciBpcyBmYWlsaW5nIHRvIENPVyBhIE1BUF9QUklWQVRFXFxuNTUxMTpcXHQgKiBtYXBwaW5nIGl0IG93bnMgdGhlIHJlc2VydmUgcGFnZSBmb3IuIFRoZSBpbnRlbnRpb24gaXMgdG8gdW5tYXAgdGhlIHBhZ2VcXG41NTEyOlxcdCAqIGZyb20gb3RoZXIgVk1BcyBhbmQgbGV0IHRoZSBjaGlsZHJlbiBiZSBTSUdLSUxMZWQgaWYgdGhleSBhcmUgZmF1bHRpbmcgdGhlXFxuNTUxMzpcXHQgKiBzYW1lIHJlZ2lvbi5cXG41NTE0OlxcdCAqL1xcbjU1MTU6XFx0c3RhdGljIHZvaWQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjU1MTY6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbjU1MTc6XFx0e1xcbjU1MTg6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcXG41NTE5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqaXRlcl92bWE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjAyOjQyLjIwNjI5OTQ0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI0NTA0OTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDcwMzAuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsIG92ZXJsYXBzIG9yIGNvbmZsaWN0cyB3aGVuIHdlJ3JlIGNvbnNpZGVyaW5nIFBlcmlwaGVyYWwgTW9kdWxlIERyaXZlciAoUE1EKSBzaGFyaW5nLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCB3aGVuIG11bHRpcGxlIG1vZHVsZXMgbWlnaHQgYmUgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2FtZSBoYXJkd2FyZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRlcmlhIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHNoYXJpbmcgKmlzKiBwb3NzaWJsZSwgYW5kIG1vcmUgY3JpdGljYWxseSwgaG93IHRoZSByYW5nZSBhZGp1c3RtZW50cyBhcmUgcGVyZm9ybWVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBhcmlzZSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgYW5kIEknbSBlYWdlciB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDM6MTIuNDUxMzUzNDU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzAzMDpcXHR9XFxuNzAzMTpcXHRcXG43MDMyOlxcdC8qXFxuNzAzMzpcXHQgKiBEZXRlcm1pbmUgaWYgc3RhcnQsZW5kIHJhbmdlIHdpdGhpbiB2bWEgY291bGQgYmUgbWFwcGVkIGJ5IHNoYXJlZCBwbWQuXFxuNzAzNDpcXHQgKiBJZiB5ZXMsIGFkanVzdCBzdGFydCBhbmQgZW5kIHRvIGNvdmVyIHJhbmdlIGFzc29jaWF0ZWQgd2l0aCBwb3NzaWJsZVxcbjcwMzU6XFx0ICogc2hhcmVkIHBtZCBtYXBwaW5ncy5cXG43MDM2OlxcdCAqL1xcbjcwMzc6XFx0dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuNzAzODpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbjcwMzk6XFx0e1xcbjcwNDA6XFx0XFx0dW5zaWduZWQgbG9uZyByYW5nZV9zdGFydCwgcmFuZ2VfZW5kO1xcbjcwNDE6XFx0XFxuNzA0MjpcXHRcXHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxcbjcwNDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJhbmdlX3N0YXJ0LCBcXHUwMDI2cmFuZ2VfZW5kKSlcXG43MDQ0OlxcdFxcdFxcdHJldHVybjtcXG43MDQ1OlxcdFxcbjcwNDY6XFx0XFx0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcXG43MDQ3OlxcdH1cXG43MDQ4OlxcdFxcbjcwNDk6XFx0LypcXG43MDUwOlxcdCAqIFNlYXJjaCBmb3IgYSBzaGFyZWFibGUgcG1kIHBhZ2UgZm9yIGh1Z2V0bGIuIEluIGFueSBjYXNlIGNhbGxzIHBtZF9hbGxvYygpXFxuNzA1MTpcXHQgKiBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwdGUuIFdoaWxlIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgdGhlXFxuNzA1MjpcXHQgKiAhc2hhcmVkIHBtZCBjYXNlIGJlY2F1c2Ugd2UgY2FuIGFsbG9jYXRlIHRoZSBwbWQgbGF0ZXIgYXMgd2VsbCwgaXQgbWFrZXMgdGhlXFxuNzA1MzpcXHQgKiBjb2RlIG11Y2ggY2xlYW5lci4gcG1kIGFsbG9jYXRpb24gaXMgZXNzZW50aWFsIGZvciB0aGUgc2hhcmVkIGNhc2UgYmVjYXVzZVxcbjcwNTQ6XFx0ICogcHVkIGhhcyB0byBiZSBwb3B1bGF0ZWQgaW5zaWRlIHRoZSBzYW1lIGlfbW1hcF9yd3NlbSBzZWN0aW9uIC0gb3RoZXJ3aXNlXFxuNzA1NTpcXHQgKiByYWNpbmcgdGFza3MgY291bGQgZWl0aGVyIG1pc3MgdGhlIHNoYXJpbmcgKHNlZSBodWdlX3B0ZV9vZmZzZXQpIG9yIHNlbGVjdCBhXFxuNzA1NjpcXHQgKiBiYWQgcG1kIGZvciBzaGFyaW5nLlxcbjcwNTc6XFx0ICovXFxuNzA1ODpcXHRwdGVfdCAqaHVnZV9wbWRfc2hhcmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjcwNTk6XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkKVxcbjcwNjA6XFx0e1xcbjcwNjE6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSB2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG43MDYyOlxcdFxcdGNvbnN0IHBnb2ZmX3QgaWR4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTtcXG43MDYzOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3ZtYTtcXG43MDY0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2FkZHI7XFxuNzA2NTpcXHRcXHRwdGVfdCAqc3B0ZSA9IE5VTEw7XFxuNzA2NjpcXHRcXHRwdGVfdCAqcHRlO1xcbjcwNjc6XFx0XFxuNzA2ODpcXHRcXHRpX21tYXBfbG9ja19yZWFkKG1hcHBpbmcpO1xcbjcwNjk6XFx0XFx0bWFwcGluZ19ybWFwX3RyZWVfZm9yZWFjaChzdm1hLCBtYXBwaW5nLCBpZHgsIGlkeCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowMzoxMi40NTE3MTMwOTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA0MjkxOTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAgQ2FsbHNpdGVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgaXRzIHVzYWdlIGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBjb2RlIGRpdmUuIFdoZXJlIGFyZSB0aGUgY2FsbGVycz8gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZW1wbG95ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBpbGx1bWluYXRlIHRoZSBsb2dpYyBkcml2aW5nIGl0cyBwYXJ0aWN1bGFyIGFjdGlvbnMgYW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEFyZSB3ZSBsb29raW5nIGF0IHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgTlVNQSBjb25zaWRlcmF0aW9ucywgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgb3IgcGVyaGFwcyBhIG1vcmUgb2JzY3VyZSBvcHRpbWl6YXRpb24gcGF0aD8gR2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgc2l0ZXMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIHVucmF2ZWxpbmcgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBjb2RlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQncyB0aWVkIHRvIGFueSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgbWVtb3J5IG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDM6MTkuNDk0NjM2MjU3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2MjQ5OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNDQ9dm9pZCBodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNDU6dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ2LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MzEwPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0zMTQtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MzE1OnN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMzE2LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jPTUxMzE9aW50IG1vdmVfaHVnZXRsYl9wYWdlX3RhYmxlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01MTQ3LVxcdFxcdFxcdFxcdG9sZF9lbmQpO1xcbm1tL2h1Z2V0bGIuYzo1MTQ4OlxcdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFxcdTAwMjZyYW5nZS5zdGFydCwgXFx1MDAyNnJhbmdlLmVuZCk7XFxubW0vaHVnZXRsYi5jLTUxNDktXFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02NTc3PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NjAxLVxcdFxcdFxcdFxcdDAsIG1tLCBzdGFydCwgZW5kKTtcXG5tbS9odWdldGxiLmM6NjYwMjpcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQpO1xcbm1tL2h1Z2V0bGIuYy02NjAzLVxcbi0tXFxubW0vaHVnZXRsYi5jPTcwMTE9Ym9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcwMzYtICovXFxubW0vaHVnZXRsYi5jOjcwMzc6dm9pZCBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTcwMzgtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcXG4tLVxcbm1tL2h1Z2V0bGIuYz03MTkzPXZvaWQgaHVnZV9wbWRfdW5zaGFyZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MTk2LVxcbm1tL2h1Z2V0bGIuYzo3MTk3OnZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy03MTk4LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpXFxuLS1cXG5tbS9odWdldGxiLmM9NzQ0ND1zdGF0aWMgdm9pZCBodWdldGxiX3Vuc2hhcmVfcG1kcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy03NDY3LVxcdC8qXFxubW0vaHVnZXRsYi5jOjc0Njg6XFx0ICogTm8gbmVlZCB0byBjYWxsIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpLCBiZWNhdXNlXFxubW0vaHVnZXRsYi5jLTc0NjktXFx0ICogd2UgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIFBVRF9TSVpFIGFsaWdubWVudC5cXG4tLVxcbm1tL3JtYXAuYz0xOTg0PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9wb2lzb25lZF9odWdldGxiX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTIwMDQtXFx0XFx0XFx0XFx0YWRkcmVzcywgcmFuZ2UuZW5kKTtcXG5tbS9ybWFwLmM6MjAwNTpcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQpO1xcbm1tL3JtYXAuYy0yMDA2LVxcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcdTAwMjZyYW5nZSk7XFxuLS1cXG5tbS9ybWFwLmM9MjQ2NT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjUwMi1cXHRcXHQgKi9cXG5tbS9ybWFwLmM6MjUwMzpcXHRcXHRhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsXFxubW0vcm1hcC5jLTI1MDQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cmFuZ2UuZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDM6MjEuNDUwODkzNTYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NDU0ODI5NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2V0bGJmcyBQTUQgU2hhcmluZyBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgdG8gdGhlIGh1Z2V0bGJmcyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgUE1EIHNoYXJpbmcsIHVubWFwcGluZywgYW5kIHphcHBpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGxvZ2ljIHNoaWZ0IGFuZCBkZXRlcm1pbmUgaXRzIHNpZ25pZmljYW5jZSBmb3Igc3RhYmlsaXR5IGFuZCBwb3RlbnRpYWwgYnVncy5cblxuUHJldmlvdXNseSwgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpYCBpbiBgX19odWdldGxiX3phcF9iZWdpbigpYCBhbmQgYHVubWFwX2h1Z2VwYWdlX3JhbmdlKClgIHdvdWxkICphbHdheXMqIGFsaWduIHRoZSBtZW1vcnkgcmFuZ2UgdG8gUFVEIGJvdW5kYXJpZXMgaWYgdGhlcmUgd2FzIGEgcG9zc2liaWxpdHkgb2YgUE1EIHNoYXJpbmcgKG1lYW5pbmcgYFZNX01BWVNIQVJFYCB3YXMgc2V0IGFuZCB0aGUgcmFuZ2Ugc3Bhbm5lZCBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQpLiBOb3csIHRoaXMgaXMgZGlmZmVyZW50LiBJdCBsb29rcyBsaWtlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKClgIHdpbGwgb25seSBleHBhbmQgdGhlIHJhbmdlIHdoZW4gdGhlcmUgYXJlICphY3R1YWxseSogc2hhcmVkIFBNRCBwYWdlIHRhYmxlcyB3aXRoaW4gaXQuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYW4gZXhwbGljaXQgY2hlY2ssIHVzaW5nIGBodWdldGxiX3dhbGtgIGFuZCBgcHRkZXNjX3BtZF9pc19zaGFyZWQoKWAgdG8gdmVyaWZ5IFBNRCBzaGFyaW5nLiBGdXJ0aGVybW9yZSwgdGhlIHBvaW50IGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgaGFwcGVucyBoYXMgY2hhbmdlZC4gSW4gYF9faHVnZXRsYl96YXBfYmVnaW4oKWAsIGl0J3MgY2FsbGVkICphZnRlciogYWNxdWlyaW5nIHRoZSBgaV9tbWFwX2xvY2tfd3JpdGVgLlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IGh1Z2V0bGJmcyBoYW5kbGVzIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgb3IgemFwcGluZy4gVGhlIG5ldyBhcHByb2FjaCBmb2N1c2VzIG9uIGFjdHVhbCBzaGFyaW5nIHN0YXRlIHVuZGVyIGEgc3BpbmxvY2sgaW5zdGVhZCBvZiBwb3RlbnRpYWwgc2hhcmluZy4gVGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgY29ycmVjdG5lc3MgYXJlIHN1YnN0YW50aWFsLlxuXG5Db25zaWRlcmluZyB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgd2l0aGluIGh1Z2V0bGJmcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6ei4gSHVnZXRsYmZzIHN5c2NhbGxzIGFyZSBlYXNpbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB1c2Vyc3BhY2UgdG9vbHMgc3VjaCBhcyBgbW1hcGAsIGBtdW5tYXBgLCBgbWFkdmlzZSBNQURWX0RPTlRORUVEYCwgYW5kIGBmYWxsb2NhdGUgUFVOQ0hfSE9MRWAuIFRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBQTUQgc2hhcmluZyBjYWxjdWxhdGlvbnMsIG1tdSBub3RpZmllciByYW5nZXMgYW5kIGhvdyB0aGUgc3lzdGVtIHVubWFwcyBodWdlIHBhZ2VzLlxuXG5UbyBlbnN1cmUgcHJvcGVyIHRlc3RpbmcsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkLiBGcm9tIGBmcy9LY29uZmlnYCwgSSBzZWUgdGhhdCBgSFVHRVRMQkZTYCBlbmFibGVzIGBIVUdFVExCX1BBR0VgLCBhbmQgc3Vic2VxdWVudGx5LCBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYCAoaWYgYEFSQ0hfV0FOVF9IVUdFX1BNRF9TSEFSRWAgaXMgc2VsZWN0ZWQsIHdoaWNoIGlzIGNvbW1vbiBvbiB4ODZfNjQpLiBJIHNob3VsZCBzZWFyY2ggdGhlIGBLY29uZmlnYCBmb3IgYEhVR0VUTEJGU2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6MDYuOTA1NzI1MzYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI4NzAzMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKkhVR0VUTEJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZz0xMTA9Y29uZmlnIDh4eF9DUFUxNVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTExLVxcdGJvb2wgXFxcIkNQVTE1IFNpbGljb24gRXJyYXRhXFxcIlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc6MTEyOlxcdGRlcGVuZHMgb24gIUhVR0VUTEJfUEFHRVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTEzLVxcdGRlZmF1bHQgeVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG5hcmNoL3NoL21tL0tjb25maWctMTU5LVxcdHByb21wdCBcXFwiSHVnZVRMQiBwYWdlIHNpemVcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2MDpcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjEtXFx0ZGVmYXVsdCBIVUdFVExCX1BBR0VfU0laRV8xTUIgaWYgUEFHRV9TSVpFXzY0S0JcXG4tLVxcbmZzL0tjb25maWc9MjUwPW1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL0tjb25maWc6MjUyOlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1My1cXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuLS1cXG5mcy9LY29uZmlnPTI2Mz1jb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbi0tXFxuZnMvS2NvbmZpZy0yNjUtXFx0ZGVmYXVsdCBuXFxuZnMvS2NvbmZpZzoyNjY6XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjY3LVxcdGhlbHBcXG4tLVxcbmZzL0tjb25maWc9Mjc3PWNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWc6Mjc5OlxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxcbmZzL0tjb25maWctMjgwLVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4tLVxcbmluaXQvS2NvbmZpZz0xMjkzPWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxcbmluaXQvS2NvbmZpZy0xMjk0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTI5NTpcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxcbmluaXQvS2NvbmZpZy0xMjk2LVxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6MDkuMzM0NDM1NzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4NTAyMDY4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgUE1EIFBhZ2UgVGFibGUgU2hhcmluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIFRoZSBLY29uZmlnIGZpbGVzIHRlbGwgbWUgdGhhdCBpdCdzIGEgYGRlZl9ib29sYCB0aWVkIHRvIGBIVUdFVExCX1BBR0VgLiBBbmQgbG9va2luZyBmdXJ0aGVyLCBgSFVHRVRMQl9QQUdFYCBpdHNlbGYgaXMgYSBgZGVmX2Jvb2xgIHRoYXQgZGVwZW5kcyBvbiBgSFVHRVRMQkZTYC4gU28sIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbiBib2lscyBkb3duIHRvIGBIVUdFVExCRlNgLCB3aGlsZSBgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HYCBpcyBlZmZlY3RpdmVseSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGRlcml2ZWQgZnJvbSB0aGUgc2VsZWN0aW9uIG9mIGBIVUdFVExCRlNgLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBIVUdFVExCRlNgIGlzIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgd2lsbCBlbmFibGUsIGFuZCB0aGUgaW50ZXJuYWwgYEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR2AgaXMgYSBjb25zZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGZvY3VzIHRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2guIEluIGBtbS9odWdldGxiLmNgLCBJIHNlZSBhIGZldyBrZXkgcGxheWVyczogYF9faHVnZXRsYl96YXBfYmVnaW5gLCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBhbmQgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAuIFRoZXNlIG5hbWVzIGFyZSBhbGwgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHNpZ24gYXMgdGhleSdyZSBsaWtlbHkgZXhwb3J0ZWQuIE5vdywgdGltZSB0byBkb3VibGUtY2hlY2sgdGhlaXIgZGVjbGFyYXRpb24gaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCB0byBtYWtlIHN1cmUgdGhleSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMsIGV4cG9zZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgaGVhZGVycyBzYXkgYWJvdXQgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6MjcuMTg0NjQ1Njc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI3NTA5ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHVnZXRsYl96YXBfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ1PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ3LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0ODpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTI1Mz1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl96YXBfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTYtXFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI1NzpcXHRcXHRfX2h1Z2V0bGJfemFwX2JlZ2luKHZtYSwgc3RhcnQsIGVuZCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU4LX1cXG4tLVxcbm1tL2h1Z2V0bGIuYz01NDM4PWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxcbi0tXFxubW0vaHVnZXRsYi5jLTU0NDMtXFxubW0vaHVnZXRsYi5jOjU0NDQ6dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy01NDQ1LVxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowNDoyOS4xMTIxNjIzMDdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1MDI0NjI3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGB1bm1hcF9odWdlcGFnZV9yYW5nZWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHVubWFwX2h1Z2VwYWdlX3JhbmdlYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgc3BlY2lmaWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgaXQncyBhY3R1YWxseSBoYW5kbGluZyB0aGUgdW5tYXBwaW5nIG9mIGh1Z2UgcGFnZXMuIFdlIGtub3cgdGhlIGhpZ2gtbGV2ZWwgZ29hbCwgYnV0IHRoZSBkZXZpbCdzIGFsd2F5cyBpbiB0aGUgZGV0YWlscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBpc24ndCBpdD8gSSB3YW50IHRvIGV4YW1pbmUgdGhlIGxvZ2ljIGZsb3csIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgaXQgZW1wbG95cyAoaWYgYW55KSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZXMuIElzIGl0IGNvcnJlY3RseSBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgY29udGVudGlvbiB0aGF0IHdlIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIHN1YnRsZSBpbmVmZmljaWVuY2llcyBpbiBob3cgaXQgd2Fsa3MgdGhlIHBhZ2UgdGFibGVzIGFuZCBwZXJmb3JtcyB0aGUgdW5tYXBwaW5nPyBJIGFsc28gd2FudCB0byB2ZXJpZnkgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zIGdyYWNlZnVsbHkgYW5kIGVuc3VyZSB0aGF0IGl0IGtlZXBzIHRoZSBzeXN0ZW0gaW4gYSBjb25zaXN0ZW50IHN0YXRlLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kICpldmVyeSogbnVhbmNlIG9mIHdoYXQgdGhpcyBjb2RlIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzczLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6NDAuNjE0NjI3OTY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3NjE3NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVubWFwX2h1Z2VwYWdlX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTM4MD1zdGF0aWMgdm9pZCBodWdldGxiX3VubWFwX2ZpbGVfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQxNi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0MTc6XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00MTgtXFx0XFx0XFx0XFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTEtXFx0XFx0aWYgKGh1Z2V0bGJfdm1hX21hcHNfcGZuKHZtYSwgdl9zdGFydCwgcGZuKSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTI6XFx0XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCB2X3N0YXJ0LCB2X2VuZCwgTlVMTCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NTMtXFx0XFx0XFx0XFx0XFx0ICAgICBaQVBfRkxBR19EUk9QX01BUktFUik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz00NjM9aHVnZXRsYl92bWRlbGV0ZV9saXN0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDgzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4NDpcXHRcXHR1bm1hcF9odWdlcGFnZV9yYW5nZSh2bWEsIHZfc3RhcnQsIHZfZW5kLCBOVUxMLCB6YXBfZmxhZ3MpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4NS1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ4OC1cXHRcXHQgKiB2bWFzLiAgVGhlcmVmb3JlLCBsb2NrIGlzIG5vdCBoZWxkIHdoZW4gY2FsbGluZ1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ4OTpcXHRcXHQgKiB1bm1hcF9odWdlcGFnZV9yYW5nZSBmb3IgcHJpdmF0ZSB2bWFzLlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ5MC1cXHRcXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyOD1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICosXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTI5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEzMDp2b2lkIHVubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzMi1cXHRcXHRcXHQgIHN0cnVjdCBmb2xpbyAqLCB6YXBfZmxhZ3NfdCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTMzOnZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEzNC1cXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDM0PXN0YXRpYyBpbmxpbmUgbG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDQxLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjQ0MjpzdGF0aWMgaW5saW5lIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQ0My1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01MTMxPWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTE5NS1cXG5tbS9odWdldGxiLmM6NTE5Njp2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZXRsYi5jLTUxOTctXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jPTU0NTc9dm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDgzLVxcbm1tL2h1Z2V0bGIuYzo1NDg0OnZvaWQgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vaHVnZXRsYi5jLTU0ODUtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NDk1LVxcdCAqIGhvbGQgaV9tbWFwX3J3c2VtIGFuZCB0aGUgaHVnZXRsYiBWTUEgbG9jayBmb3Igc2hhcmVkIG1hcHBpbmdzLCBzbyBQTURcXG5tbS9odWdldGxiLmM6NTQ5NjpcXHQgKiBzaGFyaW5nIHN0YXRlIGNhbm5vdCBjaGFuZ2UgYmVmb3JlIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKS5cXG5tbS9odWdldGxiLmMtNTQ5Ny1cXHQgKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTAxLVxcbm1tL2h1Z2V0bGIuYzo1NTAyOlxcdF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoXFx1MDAyNnRsYiwgdm1hLCBzdGFydCwgZW5kLFxcbm1tL2h1Z2V0bGIuYy01NTAzLVxcdFxcdFxcdCAgICAgICBmb2xpbywgemFwX2ZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz01NTE1PXN0YXRpYyB2b2lkIHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTMzLVxcdCAqIHRoaXMgbWFwcGluZyBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBWTUFzLFxcbm1tL2h1Z2V0bGIuYzo1NTM0OlxcdCAqIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKSBpcyBjYWxsZWQgYXMgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkXFxubW0vaHVnZXRsYi5jLTU1MzUtXFx0ICovXFxuLS1cXG5tbS9odWdldGxiLmMtNTU1Ny1cXHRcXHRpZiAoIWlzX3ZtYV9yZXN2X3NldChpdGVyX3ZtYSwgSFBBR0VfUkVTVl9PV05FUikpXFxubW0vaHVnZXRsYi5jOjU1NTg6XFx0XFx0XFx0dW5tYXBfaHVnZXBhZ2VfcmFuZ2UoaXRlcl92bWEsIGFkZHJlc3MsXFxubW0vaHVnZXRsYi5jLTU1NTktXFx0XFx0XFx0XFx0XFx0ICAgICBhZGRyZXNzICsgaHVnZV9wYWdlX3NpemUoaCksXFxuLS1cXG5tbS9tZW1vcnkuYz0yMjA2PXN0YXRpYyB2b2lkIF9femFwX3ZtYV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTIyMjgtXFx0XFx0XFx0cmV0dXJuO1xcbm1tL21lbW9yeS5jOjIyMjk6XFx0XFx0X191bm1hcF9odWdlcGFnZV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgTlVMTCwgemFwX2ZsYWdzKTtcXG5tbS9tZW1vcnkuYy0yMjMwLVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA0OjQyLjIxMjI1MzYzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDExNDY2ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJc3N1ZXMgd2l0aCBIdWdlVExCIFBhZ2UgWmFwcGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGh1Z2V0bGJfemFwX2JlZ2luYCBjYWxscy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2UgemFwcGluZyBtaWdodCBiZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgb2JzZXJ2ZWQgcHJvYmxlbS4gSXQgY291bGQgYmUgaW4gYG1tL21lbW9yeS5jYCwgd2hpY2ggaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBIb3dldmVyLCBJIHNob3VsZG4ndCBsaW1pdCBteXNlbGYgdG8gdGhhdCBkaXJlY3RvcnkuIEkgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgY2hlY2sgZXZlcnl3aGVyZSByZWxldmFudC4gSSdsbCBuZWVkIHRvIHVzZSBteSB0eXBpY2FsIGRlYnVnZ2luZyBzdHJhdGVneTsgdXNpbmcgYGdpdCBncmVwYCBhbmQgbWF5YmUgc29tZSBjcm9zcy1yZWZlcmVuY2luZyB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBodWdldGxiX3phcF9iZWdpbmAgaXMgdXNlZCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMTgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowNDo0Ni4yMjM3MjMwODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIxNjg1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl96YXBfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MjQ1PXZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjQ3LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjI0ODpleHRlcm4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI0OS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpiZWdpbiwgdW5zaWduZWQgbG9uZyAqZW5kKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0yNTA9ZXh0ZXJuIHZvaWQgX19odWdldGxiX3phcF9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTItXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MjUzOnN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3phcF9iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0yNTQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMjU2LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoyNTc6XFx0XFx0X19odWdldGxiX3phcF9iZWdpbih2bWEsIHN0YXJ0LCBlbmQpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTI1OC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0zMTU9c3RhdGljIGlubGluZSB2b2lkIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZShcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDozMjE6c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfemFwX2JlZ2luKFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTMyMi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz01NDM4PWFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxcbi0tXFxubW0vaHVnZXRsYi5jLTU0NDMtXFxubW0vaHVnZXRsYi5jOjU0NDQ6dm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYy01NDQ1LVxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxcbi0tXFxubW0vbWVtb3J5LmM9MjI5Mj12b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKVxcbi0tXFxubW0vbWVtb3J5LmMtMjMwNy1cXG5tbS9tZW1vcnkuYzoyMzA4OlxcdFxcdGh1Z2V0bGJfemFwX2JlZ2luKHZtYSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKTtcXG5tbS9tZW1vcnkuYy0yMzA5LVxcdFxcdF9femFwX3ZtYV9yYW5nZSh0bGIsIHZtYSwgc3RhcnQsIGVuZCwgXFx1MDAyNmRldGFpbHMpO1xcbi0tXFxubW0vbWVtb3J5LmM9MjMzMD12b2lkIHphcF92bWFfcmFuZ2VfYmF0Y2hlZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMjM0My1cXHRcXHRcXHRcXHRhZGRyZXNzLCBlbmQpO1xcbm1tL21lbW9yeS5jOjIzNDQ6XFx0aHVnZXRsYl96YXBfYmVnaW4odm1hLCBcXHUwMDI2cmFuZ2Uuc3RhcnQsIFxcdTAwMjZyYW5nZS5lbmQpO1xcbm1tL21lbW9yeS5jLTIzNDUtXFx0dXBkYXRlX2hpd2F0ZXJfcnNzKHZtYS1cXHUwMDNldm1fbW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowNDo0Ny44MTU4OTc2MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODc1MTY5NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlVExCIFBNRCBQYWdlIFRhYmxlIFNoYXJpbmcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGhhdmVuJ3QgdG91Y2hlZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGZpbGVzIG9yIHN5bWJvbHMgYmV5b25kIHRoZSBpbml0aWFsIHNjb3BlLiBUaGUgZGlmZiBzdW1tYXJ5IGZvY3VzZXMgb24gYG1tL2h1Z2V0bGIuY2AsIGFuZCB0aGF0J3MgZXhwZWN0ZWQuIFNwZWNpZmljYWxseSwgaXQgbGlzdHMgc2V2ZXJhbCBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIFBNRCBzaGFyaW5nIGFuZCByYW5nZSBhZGp1c3RtZW50cy5cblxuTmV4dCwgSSdsbCBpZGVudGlmeSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzLiBCYXNlZCBvbiB0aGUgY29kZSwgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBhcmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbjogYF9faHVnZXRsYl96YXBfYmVnaW5gLCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBhbmQgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB3ZSdsbCBuZWVkIHRvIHdhdGNoLlxuXG5Ob3csIGxldCdzIGdldCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIGNvcmUgY29uZmlndXJhdGlvbiBpcyBgSFVHRVRMQkZTYCwgYW5kIHRoYXQgcHVsbHMgaW4gYEhVR0VUTEJfUEFHRWAuIFRoZSBjcnVjaWFsIGFzcGVjdCBoZXJlIGlzIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgLCB3aGljaCBkZXBlbmRzIG9uIGBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVgIGFuZCBgU1BMSVRfUE1EX1BUTE9DS1NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIG9yIGNvbnNpZGVyZWQuIEkgdGhpbmsgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdgIGFyZSBzdWZmaWNpZW50LiBUaGUgZmluYWwgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgW1wiSFVHRVRMQkZTXCIsIFwiSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXCJdLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHN5bnRoZXNpemUgdGhpcyBpbmZvcm1hdGlvbi4gVGhlIHBhdGNoIGFsdGVycyB0aGUgbG9naWMgZm9yIEh1Z2VUTEIgUE1EIHBhZ2UgdGFibGUgc2hhcmluZy4gSW5zdGVhZCBvZiBicm9hZGx5IGV4cGFuZGluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgcmFuZ2VzIHVuZGVyIFBNRCBzaGFyaW5nLCB3ZSdyZSBtYWtpbmcgaXQgbW9yZSBwcmVjaXNlLCBleHBhbmRpbmcgb25seSB3aGVuICphY3R1YWwqIFBNRCB0YWJsZSBzaGFyaW5nIGV4aXN0cyB3aXRoaW4gdGhlIHJhbmdlLiBUaGlzIGltcGFjdHMgdGhlIHJhbmdlIGFkanVzdG1lbnQgY29kZSB3aXRoaW4gYF9faHVnZXRsYl96YXBfYmVnaW5gLCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgLCBhbmQgYGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdHJpZ2dlcmVkIGJ5IHZhcmlvdXMgSHVnZVRMQiBvcGVyYXRpb25zIGxpa2UgbW1hcCwgbXVubWFwLCBtYWR2aXNlLCBhbmQgaG9sZSBwdW5jaCwgc28gdGhhdCdzIHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgd291bGQgbGllLlxuXG5Pa2F5LCB0aGF0J3MgZXZlcnl0aGluZy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyMiwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDQ6NTQuNjkxMDcwMzQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1OTg4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odWdldGxiX3phcF9iZWdpblwiLFxuICAgIFwidW5tYXBfaHVnZXBhZ2VfcmFuZ2VcIixcbiAgICBcImFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBodWdldGxiIFBNRCBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIGR1cmluZyB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYnkgY2hlY2tpbmcgd2hldGhlciBQTUQgdGFibGVzIGFyZSBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHRoZSByYW5nZSByYXRoZXIgdGhhbiB1bmNvbmRpdGlvbmFsbHkgZXhwYW5kaW5nIGFsbCBwb3RlbnRpYWxseSBzaGFyZWFibGUgcmFuZ2VzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBodWdldGxiIG1lbW9yeSB1bm1hcHBpbmcgYW5kIHphcHBpbmcgYmVoYXZpb3IgcmVhY2hhYmxlIHZpYSBodWdldGxiZnMgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faHVnZXRsYl96YXBfYmVnaW5cIixcbiAgICBcInVubWFwX2h1Z2VwYWdlX3JhbmdlXCIsXG4gICAgXCJhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgaHVnZXRsYiBQTUQgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyBkdXJpbmcgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJ5IGNoZWNraW5nIHdoZXRoZXIgUE1EIHRhYmxlcyBhcmUgYWN0dWFsbHkgc2hhcmVkIGFjcm9zcyB0aGUgcmFuZ2UgcmF0aGVyIHRoYW4gdW5jb25kaXRpb25hbGx5IGV4cGFuZGluZyBhbGwgcG90ZW50aWFsbHkgc2hhcmVhYmxlIHJhbmdlcy4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgaHVnZXRsYiBtZW1vcnkgdW5tYXBwaW5nIGFuZCB6YXBwaW5nIGJlaGF2aW9yIHJlYWNoYWJsZSB2aWEgaHVnZXRsYmZzIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA0OjU0Ljc3MjY4MjM2NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NzAzNDIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA0OjU0Ljc3MzM2MjQ2NloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk4ODYzNDkyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIFBNRCBwYWdlIHRhYmxlIHNoYXJpbmcgcmFuZ2UgYWRqdXN0bWVudHMgKGluIGBtbS9odWdldGxiLmNgKSB0byBvbmx5IGV4cGFuZCB0aGUgdW5tYXBwaW5nL3phcCBhZGRyZXNzIHJhbmdlIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHJhbmdlX3N0YXJ0YCBhbmQgYHJhbmdlX2VuZGApIGFyZSBwcm9wZXJseSBhc3NpZ25lZCBiZWZvcmUgdXNlIHdoZW4gYHBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlYCByZXR1cm5zIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGFjY2Vzc2VkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFnZSB0YWJsZSB3YWxrcywgbG9ja2luZywgb3IgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydGlvbiBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2E5MGExODg1NDdmYTI5ZjA5NTZhZmZlN2MwZTY4NTliMmIyN2EzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEwOjAxOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi5lODBlMTExODM4NWYwIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC01MzUzLDE2ICs1MzUzLDEwNSBAQCB2b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRodWdlX3BtZF91bnNoYXJlX2ZsdXNoKHRsYiwgdm1hKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbitzdGF0aWMgYm9vbFxuK3BtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuK1x0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpyYW5nZV9zdGFydCxcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nICpyYW5nZV9lbmQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB2X3N0YXJ0ID0gQUxJR04odm1hLVx1MDAzZXZtX3N0YXJ0LCBQVURfU0laRSk7XG4rXHR1bnNpZ25lZCBsb25nIHZfZW5kID0gQUxJR05fRE9XTih2bWEtXHUwMDNldm1fZW5kLCBQVURfU0laRSk7XG4rXG4rXHQvKlxuK1x0ICogdm1hIG5lZWRzIHRvIHNwYW4gYXQgbGVhc3Qgb25lIGFsaWduZWQgUFVEIHNpemUsIGFuZCB0aGUgcmFuZ2VcbitcdCAqIG11c3QgYmUgYXQgbGVhc3QgcGFydGlhbGx5IHdpdGhpbiBpdC5cbitcdCAqL1xuK1x0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkgfHwgISh2X2VuZCBcdTAwM2Ugdl9zdGFydCkgfHxcbitcdCAgICAoZW5kIFx1MDAzYz0gdl9zdGFydCkgfHwgKHN0YXJ0IFx1MDAzZT0gdl9lbmQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQqcmFuZ2Vfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydCwgUFVEX1NJWkUpLCB2X3N0YXJ0KTtcbitcdCpyYW5nZV9lbmQgPSBtaW4oQUxJR04oZW5kLCBQVURfU0laRSksIHZfZW5kKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK2FkanVzdF9yYW5nZV9mb3JfcG1kX3NoYXJpbmcodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbitcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kKVxuK3tcbitcdC8qIEV4dGVuZCB0aGUgcmFuZ2UgdG8gYmUgUFVEIGFsaWduZWQgZm9yIGEgd29yc3QgY2FzZSBzY2VuYXJpbyAqL1xuK1x0aWYgKCpzdGFydCBcdTAwM2UgcmFuZ2Vfc3RhcnQpXG4rXHRcdCpzdGFydCA9IHJhbmdlX3N0YXJ0O1xuK1xuK1x0aWYgKCplbmQgXHUwMDNjIHJhbmdlX2VuZClcbitcdFx0KmVuZCA9IHJhbmdlX2VuZDtcbit9XG4rXG4rc3RhdGljIHZvaWRcbithZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX2VuZClcbit7XG4rXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4rXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG4rXG4rXHRodWdldGxiX3ZtYV9hc3NlcnRfbG9ja2VkKHZtYSk7XG4rXHRpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuK1xuK1x0Zm9yIChhZGRyZXNzID0gcmFuZ2Vfc3RhcnQ7IGFkZHJlc3MgXHUwMDNjIHJhbmdlX2VuZDsgYWRkcmVzcyArPSBQVURfU0laRSkge1xuK1x0XHRwdGVfdCAqcHRlcDtcbitcdFx0Ym9vbCBzaGFyZWQ7XG4rXG4rXHRcdHB0ZXAgPSBodWdldGxiX3dhbGsodm1hLCBhZGRyZXNzLCBQTURfU0laRSk7XG4rXHRcdGlmICghcHRlcClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3Bpbl9sb2NrKGh1Z2VfcHRlX2xvY2twdHIoaCwgbW0sIHB0ZXApKTtcbitcdFx0c2hhcmVkID0gcHRkZXNjX3BtZF9pc19zaGFyZWQodmlydF90b19wdGRlc2MocHRlcCkpO1xuK1x0XHRzcGluX3VubG9jayhodWdlX3B0ZV9sb2NrcHRyKGgsIG1tLCBwdGVwKSk7XG4rXG4rXHRcdGlmIChzaGFyZWQpXG4rXHRcdFx0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCBhZGRyZXNzLFxuK1x0XHRcdFx0XHRcdCAgICAgYWRkcmVzcyArIFBVRF9TSVpFKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWRcbithZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbitcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmVuZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7XG4rXG4rXHRpZiAoaHVnZV9wYWdlX3NpemUoaHN0YXRlX3ZtYSh2bWEpKSAhPSBQTURfU0laRSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZSh2bWEsICpzdGFydCwgKmVuZCxcbitcdFx0XHRcdFx0XHUwMDI2cmFuZ2Vfc3RhcnQsIFx1MDAyNnJhbmdlX2VuZCkpXG4rXHRcdHJldHVybjtcbitcbitcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNfaW5fcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgdm9pZFxuK2FkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuK1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZW5kKVxuK3tcbit9XG4rI2VuZGlmXG4rXG4gdm9pZCBfX2h1Z2V0bGJfemFwX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kKVxuIHtcbiBcdGlmICghdm1hLVx1MDAzZXZtX2ZpbGUpXHQvKiBodWdldGxiZnNfZmlsZV9tbWFwIGVycm9yICovXG4gXHRcdHJldHVybjtcbiBcbi1cdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIHN0YXJ0LCBlbmQpO1xuIFx0aHVnZXRsYl92bWFfbG9ja193cml0ZSh2bWEpO1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuK1x0aWYgKHZtYS1cdTAwM2V2bV9maWxlKSB7XG4gXHRcdGlfbW1hcF9sb2NrX3dyaXRlKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4rXHRcdGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHModm1hLCBzdGFydCwgZW5kKTtcbitcdH1cbiB9XG4gXG4gdm9pZCBfX2h1Z2V0bGJfemFwX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkBAIC01NDAxLDcgKzU0OTAsMTIgQEAgdm9pZCB1bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcbiBcdG1tdV9ub3RpZmllcl9yYW5nZV9pbml0KFx1MDAyNnJhbmdlLCBNTVVfTk9USUZZX0NMRUFSLCAwLCB2bWEtXHUwMDNldm1fbW0sXG4gXHRcdFx0XHRzdGFydCwgZW5kKTtcbi1cdGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuK1x0LypcbitcdCAqIE9ubHkgZXhwYW5kIGZvciBQVURzIHdob3NlIFBNRCB0YWJsZSBpcyBhY3R1YWxseSBzaGFyZWQuIFRoZSBjYWxsZXJzXG4rXHQgKiBob2xkIGlfbW1hcF9yd3NlbSBhbmQgdGhlIGh1Z2V0bGIgVk1BIGxvY2sgZm9yIHNoYXJlZCBtYXBwaW5ncywgc28gUE1EXG4rXHQgKiBzaGFyaW5nIHN0YXRlIGNhbm5vdCBjaGFuZ2UgYmVmb3JlIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2UoKS5cbitcdCAqL1xuK1x0YWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kcyh2bWEsIFx1MDAyNnJhbmdlLnN0YXJ0LCBcdTAwMjZyYW5nZS5lbmQpO1xuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXHUwMDI2cmFuZ2UpO1xuIFx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCB2bWEtXHUwMDNldm1fbW0pO1xuIFxuQEAgLTY5NDMsMjMgKzcwMzcsMTMgQEAgYm9vbCB3YW50X3BtZF9zaGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHZvaWQgYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHZfc3RhcnQgPSBBTElHTih2bWEtXHUwMDNldm1fc3RhcnQsIFBVRF9TSVpFKSxcbi1cdFx0dl9lbmQgPSBBTElHTl9ET1dOKHZtYS1cdTAwM2V2bV9lbmQsIFBVRF9TSVpFKTtcbitcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDtcbiBcbi1cdC8qXG4tXHQgKiB2bWEgbmVlZHMgdG8gc3BhbiBhdCBsZWFzdCBvbmUgYWxpZ25lZCBQVUQgc2l6ZSwgYW5kIHRoZSByYW5nZVxuLVx0ICogbXVzdCBiZSBhdCBsZWFzdCBwYXJ0aWFsbHkgd2l0aGluIGluLlxuLVx0ICovXG4tXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSB8fCAhKHZfZW5kIFx1MDAzZSB2X3N0YXJ0KSB8fFxuLVx0XHQoKmVuZCBcdTAwM2M9IHZfc3RhcnQpIHx8ICgqc3RhcnQgXHUwMDNlPSB2X2VuZCkpXG4rXHRpZiAoIXBtZF9zaGFyaW5nX3Bvc3NpYmxlX3JhbmdlKHZtYSwgKnN0YXJ0LCAqZW5kLFxuK1x0XHRcdFx0XHRcdTAwMjZyYW5nZV9zdGFydCwgXHUwMDI2cmFuZ2VfZW5kKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogRXh0ZW5kIHRoZSByYW5nZSB0byBiZSBQVUQgYWxpZ25lZCBmb3IgYSB3b3JzdCBjYXNlIHNjZW5hcmlvICovXG4tXHRpZiAoKnN0YXJ0IFx1MDAzZSB2X3N0YXJ0KVxuLVx0XHQqc3RhcnQgPSBBTElHTl9ET1dOKCpzdGFydCwgUFVEX1NJWkUpO1xuLVxuLVx0aWYgKCplbmQgXHUwMDNjIHZfZW5kKVxuLVx0XHQqZW5kID0gQUxJR04oKmVuZCwgUFVEX1NJWkUpO1xuK1x0YWRqdXN0X3JhbmdlX2Zvcl9wbWRfc2hhcmluZyhzdGFydCwgZW5kLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTtcbiB9XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA0OjU0Ljc3MzM2Mzc2NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODg2MzI1NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYWdlIFRhYmxlIFNoYXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgYG1tL2h1Z2V0bGIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBhcm91bmQgc2hhcmluZyBhbmQgdW5tYXBwaW5nIGh1Z2V0bGIgcGFnZSB0YWJsZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0ICp3aGF0KiBleGFjdGx5IGl0J3MgY2hhbmdpbmcgYW5kIHRoZW4gYXNzZXNzIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgd2hpY2ggaW5jbHVkZXMgY2hlY2tpbmcgZm9yIEtNU0FOIGNvbmNlcm5zLlxuXG5GaXJzdCwgbGV0J3MgYnJlYWsgZG93biB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGludHJvZHVjaW5nIGZ1bmN0aW9ucyBsaWtlIGBwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZWAsIGBhZGp1c3RfcmFuZ2VfZm9yX3BtZF9zaGFyaW5nYCwgYW5kIHNvbWUgdmFyaWF0aW9ucyBvZiBgYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc2AuIEl0IGxvb2tzIGxpa2UgaXQncyBtYWtpbmcgY2hhbmdlcyB0byBob3cgYF9faHVnZXRsYl96YXBfYmVnaW5gIGFuZCBgdW5tYXBfaHVnZXBhZ2VfcmFuZ2VgIGhhbmRsZSBzaGFyZWQgUE1Ecy4gSXQncyBhbHNvIHJlZmFjdG9yaW5nIGBhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJpbmdfcG9zc2libGVgLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHJlZCBmbGFncz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgYW55dGhpbmcgdGhhdCBzbWFja3Mgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UgKHZpYSBgY29weV90b191c2VyYCBvciB0aGUgbGlrZSksIGFueSBkYW5nZXJvdXMgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIG9wZW4gdGhlIGRvb3IgdG8gS01TQU4gaXNzdWVzLlxuXG5JJ20gemVyb2luZyBpbiBvbiBgYWRqdXN0X3JhbmdlX2Zvcl9zaGFyZWRfcG1kc2AuIEl0IHBhc3NlcyBgcmFuZ2Vfc3RhcnRgIGFuZCBgcmFuZ2VfZW5kYCBhcyBwb2ludGVycyB0byBgcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2VgLiBXaXRoaW4gdGhhdCBmdW5jdGlvbiwgdGhlcmUncyBhIGNoZWNrOiB0aGUgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhvc2UgdmFyaWFibGVzICpjb25kaXRpb25hbGx5KiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIFZNQSBpcyBzaGFyZWFibGUgYW5kIHRoZSBzdGFydC9lbmQgcmFuZ2VzIGFyZSB2YWxpZC4gSG93ZXZlciwgaWYgdGhhdCBjaGVjayBmYWlscywgYGFkanVzdF9yYW5nZV9mb3Jfc2hhcmVkX3BtZHNgIGltbWVkaWF0ZWx5IHJldHVybnMuIFRoaXMgbWVhbnMgd2UncmUgc2FmZSBiZWNhdXNlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzYCBjaGVja3MgaXRzIHJldHVybiB2YWx1ZS4gSW5zaWRlIGBhZGp1c3RfcmFuZ2VfZm9yX3NoYXJlZF9wbWRzX2luX3JhbmdlYCwgbG9jYWwgdmFyaWFibGVzIHN1Y2ggYXMgYGFkZHJlc3NgLCBgcHRlcGAsIGFuZCBgc2hhcmVkYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBkaXJlY3QgY29waWVzIHRvIHVzZXJzcGFjZSBhbmQgbm8gb2J2aW91cyBtZW1vcnkgbGVha3MuIFNvIGZhciwgaXQgc2VlbXMgY2xlYW47IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5EZWVwZXIgY29uc2lkZXJhdGlvbnM6IEkgaGF2ZSB0byBjb25zaWRlciBtZW1vcnkgbWFuYWdlbWVudCwgbG9ja2luZywgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBwYWdlIHRhYmxlcyBhbmQgVExCIGludmFsaWRhdGlvbi4gV2UncmUgYWxzbyB0YWxraW5nIGFib3V0IHJhbmdlIGJvdW5kYXJpZXMsIGFuZCB0aG9zZSBjYW4gYmUgdHJpY2t5LiBCdXQsIGhvbmVzdGx5LCBhbnkgYmxhdGFudCBVQUYgb3IgbG9ja2luZyBidWdzIHdvdWxkIGxpa2VseSBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUCwgb3IgdGhlIE1NIGRlYnVnIHN0dWZmLiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlIGhlcmUuXG5cbk5vdywgYSBmaW5hbCBjaGVjay4gV2UgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgS01TQU4gdGVzdGluZyBpcyBuZWVkZWQuIFRoZSBydWxlIGlzLCB3ZSAqZG9uJ3QqIHJ1biBLTVNBTiBpZiBLQVNBTiAob3Igc29tZXRoaW5nIGVsc2UpIGNhbiBjYXRjaCB0aGUgaXNzdWUuIFdlIG9ubHkgbmVlZCBLTVNBTiBpZiB3ZSdyZSBkZWFsaW5nIHdpdGg6IDEpIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOyAyKSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczsgMykgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcjsgb3IgNCkgZGFuZ2Vyb3VzIGJvdW5kcyBjaGVja3MuIE5vbmUgb2YgdGhlc2Ugc2NlbmFyaW9zIGFwcGx5LlxuXG5TbywgYmFzZWQgb24gbXkgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCByZXF1aXJlZCBoZXJlLiBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIxLCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA1OjA0LjY1OTY5Mjk1NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgUE1EIHBhZ2UgdGFibGUgc2hhcmluZyByYW5nZSBhZGp1c3RtZW50cyAoaW4gYG1tL2h1Z2V0bGIuY2ApIHRvIG9ubHkgZXhwYW5kIHRoZSB1bm1hcHBpbmcvemFwIGFkZHJlc3MgcmFuZ2UgZm9yIFBVRHMgd2hvc2UgUE1EIHRhYmxlIGlzIGFjdHVhbGx5IHNoYXJlZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgcmFuZ2Vfc3RhcnRgIGFuZCBgcmFuZ2VfZW5kYCkgYXJlIHByb3Blcmx5IGFzc2lnbmVkIGJlZm9yZSB1c2Ugd2hlbiBgcG1kX3NoYXJpbmdfcG9zc2libGVfcmFuZ2VgIHJldHVybnMgdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgYWNjZXNzZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWdlIHRhYmxlIHdhbGtzLCBsb2NraW5nLCBvciBUTEIgaW52YWxpZGF0aW9uIHJhbmdlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0aW9uIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBQTUQgcGFnZSB0YWJsZSBzaGFyaW5nIHJhbmdlIGFkanVzdG1lbnRzIChpbiBgbW0vaHVnZXRsYi5jYCkgdG8gb25seSBleHBhbmQgdGhlIHVubWFwcGluZy96YXAgYWRkcmVzcyByYW5nZSBmb3IgUFVEcyB3aG9zZSBQTUQgdGFibGUgaXMgYWN0dWFsbHkgc2hhcmVkLiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGByYW5nZV9zdGFydGAgYW5kIGByYW5nZV9lbmRgKSBhcmUgcHJvcGVybHkgYXNzaWduZWQgYmVmb3JlIHVzZSB3aGVuIGBwbWRfc2hhcmluZ19wb3NzaWJsZV9yYW5nZWAgcmV0dXJucyB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgYnVmZmVycyBhcmUgY3JlYXRlZCBvciBhY2Nlc3NlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhZ2UgdGFibGUgd2Fsa3MsIGxvY2tpbmcsIG9yIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRpb24gY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7kf5w[1] Phase: Succeeded StartedAt: 2026-08-31 10:05:15 +0000 UTC FinishedAt: 2026-08-31 10:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 10:05:15 +0000 UTC FinishedAt: 2026-08-31 10:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2] Phase: Succeeded StartedAt: 2026-08-31 10:05:15 +0000 UTC FinishedAt: 2026-08-31 13:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 10:05:15 +0000 UTC FinishedAt: 2026-08-31 13:48:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 10:05:15 +0000 UTC FinishedAt: 2026-08-31 10:05:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 10:05:15 +0000 UTC FinishedAt: 2026-08-31 10:05:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow7kf5w/series-workflow7kf5w-convert-artifact-3908100125/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 10:05:26 +0000 UTC FinishedAt: 2026-08-31 10:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 10:05:26 +0000 UTC FinishedAt: 2026-08-31 10:23:33 +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:*d4fda74c-8b4c-4cbd-bab3-2fc15ecd2d06,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-workflow7kf5w/series-workflow7kf5w-convert-artifact-3908100125/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": "5c5cbba3-5d04-42ae-a02d-8ca1d19a9e06", "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-workflow7kf5w/series-workflow7kf5w-build-action-3919925587/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:05:26 +0000 UTC FinishedAt: 2026-08-31 10:23:23 +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:*d4fda74c-8b4c-4cbd-bab3-2fc15ecd2d06,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-workflow7kf5w/series-workflow7kf5w-convert-artifact-3908100125/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": "5c5cbba3-5d04-42ae-a02d-8ca1d19a9e06", "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-workflow7kf5w/series-workflow7kf5w-build-action-3919925587/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 10:23:33 +0000 UTC FinishedAt: 2026-08-31 10:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 10:23:33 +0000 UTC FinishedAt: 2026-08-31 10:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 10:23:33 +0000 UTC FinishedAt: 2026-08-31 10:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 10:23:33 +0000 UTC FinishedAt: 2026-08-31 10:23:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow7kf5w/series-workflow7kf5w-convert-artifact-1425228792/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 10:23:43 +0000 UTC FinishedAt: 2026-08-31 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 10:23:43 +0000 UTC FinishedAt: 2026-08-31 10:25:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5c5cbba3-5d04-42ae-a02d-8ca1d19a9e06,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-workflow7kf5w/series-workflow7kf5w-build-action-3919925587/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-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 10:25:31 +0000 UTC FinishedAt: 2026-08-31 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 10:25:31 +0000 UTC FinishedAt: 2026-08-31 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 10:25:31 +0000 UTC FinishedAt: 2026-08-31 10:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 10:25:31 +0000 UTC FinishedAt: 2026-08-31 10:43:07 +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:*d4fda74c-8b4c-4cbd-bab3-2fc15ecd2d06,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-workflow7kf5w/series-workflow7kf5w-convert-artifact-1425228792/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": "37e8bd0f-5c5d-4b03-accc-c182d0f7291d", "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-workflow7kf5w/series-workflow7kf5w-build-action-3734825188/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:25:31 +0000 UTC FinishedAt: 2026-08-31 10:42:56 +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:*d4fda74c-8b4c-4cbd-bab3-2fc15ecd2d06,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-workflow7kf5w/series-workflow7kf5w-convert-artifact-1425228792/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": "37e8bd0f-5c5d-4b03-accc-c182d0f7291d", "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-workflow7kf5w/series-workflow7kf5w-build-action-3734825188/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 10:43:07 +0000 UTC FinishedAt: 2026-08-31 10:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 10:43:07 +0000 UTC FinishedAt: 2026-08-31 10:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 10:43:07 +0000 UTC FinishedAt: 2026-08-31 10:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 10:43:07 +0000 UTC FinishedAt: 2026-08-31 10:44: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:*37e8bd0f-5c5d-4b03-accc-c182d0f7291d,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-workflow7kf5w/series-workflow7kf5w-build-action-3734825188/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-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 10:45:02 +0000 UTC FinishedAt: 2026-08-31 13:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 10:45:02 +0000 UTC FinishedAt: 2026-08-31 13:48:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},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:*5c5cbba3-5d04-42ae-a02d-8ca1d19a9e06,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37e8bd0f-5c5d-4b03-accc-c182d0f7291d,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-workflow7kf5w/series-workflow7kf5w-build-action-3919925587/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-workflow7kf5w/series-workflow7kf5w-build-action-3734825188/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 10:45:02 +0000 UTC FinishedAt: 2026-08-31 10:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 10:45:02 +0000 UTC FinishedAt: 2026-08-31 10:45:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},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-workflow7kf5w/series-workflow7kf5w-convert-artifact-2980548689/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 10:45:02 +0000 UTC FinishedAt: 2026-08-31 10:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 10:45:02 +0000 UTC FinishedAt: 2026-08-31 10:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 10:45:02 +0000 UTC FinishedAt: 2026-08-31 10:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 10:45:12 +0000 UTC FinishedAt: 2026-08-31 13:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7kf5w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__hugetlb_zap_begin","unmap_hugepage_range","adjust_range_if_pmd_sharing_possible"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f05dc611ac09e7ec034171c7521329f7d9cbb940","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","HUGETLB_PMD_PAGE_TABLE_SHARING"],"series_id":"451111f2-c440-47cc-8c88-30e073ef9065","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 10:45:12 +0000 UTC FinishedAt: 2026-08-31 13:48:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5c5cbba3-5d04-42ae-a02d-8ca1d19a9e06,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37e8bd0f-5c5d-4b03-accc-c182d0f7291d,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-workflow7kf5w/series-workflow7kf5w-build-action-3919925587/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-workflow7kf5w/series-workflow7kf5w-build-action-3734825188/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-workflow7kf5w/series-workflow7kf5w-convert-artifact-2980548689/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,}