Name: series-workflowq6b2q Phase: Succeeded StartedAt: 2026-08-12 16:31:22 +0000 UTC FinishedAt: 2026-08-12 20:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[0] Phase: Succeeded StartedAt: 2026-08-12 16:31:22 +0000 UTC FinishedAt: 2026-08-12 16:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 16:31:22 +0000 UTC FinishedAt: 2026-08-12 16:36:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EROFS_FS_BACKED_BY_FILE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EROFS_FS_BACKED_BY_FILE" ], "series_id": "cd3d43d5-42dd-4f68-b035-fab415cb585b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "get_tree_super", "erofs_fc_parse_param", "erofs_fc_fill_super", "erofs_fc_get_tree", "erofs_fc_reconfigure", "erofs_sb_share_test_super" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X3RyZWVfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfcGFyc2VfcGFyYW0mIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtlcm9mc19mY19nZXRfdHJlZSYjMzQ7LAogICAgJiMzNDtlcm9mc19mY19yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBhbmQgYWxsb3dzIHNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUgb3B0aW9ucy4gSXQgdXNlcyBgbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXHUwMDNlb3B0YCwgaXMgemVyby1pbml0aWFsaXplZC4gU3Vic2VxdWVudCBtb2RpZmljYXRpb25zIHRvIGBzYmktXHUwMDNlb3B0YCBmaWVsZHMgZG8gbm90IGFsdGVyIHRoZSBwYWRkaW5nIGJ5dGVzLCBtZWFuaW5nIHRoZXkgcmVtYWluIHplcm9lZC4gVGhlcmVmb3JlLCB0aGUgYG1lbWNtcGAgb3BlcmF0aW9uIHNhZmVseSBjb21wYXJlcyBpbml0aWFsaXplZCBtZW1vcnkgYW5kIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgbXVsdGlwbGUgbW91bnRzIG9mIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSB0byBzaGFyZSBhIHNpbmdsZSBzdXBlcmJsb2NrLiBJdCBtb2RpZmllcyB0aGUgVkZTIGJ5IGV4cG9ydGluZyBgZ2V0X3RyZWVfc3VwZXJgIGFuZCBhZGRzIGxvZ2ljIGluIEVST0ZTIHRvIHBhcnNlIHRoZSBuZXcgb3B0aW9uIGFuZCBoYW5kbGUgc3VwZXJibG9jayBzaGFyaW5nLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNvZGUgcGF0aHMgaW4gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgc3VwZXJibG9jayBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxMTRmZjczZDdlNDIxMjEzNjU1NjNkMDVmMzhjMDk5YTFmNmQxODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjozMzozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG5pbmRleCBkMzAxZDlhYzk0NmE5Li4wMmNhZjNiMDYxZmVkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG5AQCAtMTM5LDYgJiM0MzsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS5cbiBzb3VyY2U9JXMgICAgICAgICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTcGVjaWZ5IHRoZSBiYWNraW5nIGltYWdlIGFzIGEgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLlxuJiM0MztzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gRmlsZS1iYWNrZWQgbW91bnRzXG5AQCAtMTU2LDYgJiM0MzsxNTksMTAgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0XG4gcmVzaWRlcyBvbiBhIGJsb2NrIGRldmljZSwgdXNlIHRoZSB0cmFkaXRpb25hbCBibG9jayBkZXZpY2UgbW91bnQgcGF0aFxuIGluc3RlYWQuXG4gXG4mIzQzO1doZW4gc3VwZXJibG9ja19zaGFyZSBpcyBzcGVjaWZpZWQsIG11bHRpcGxlIG1vdW50cyBvZiB0aGUgc2FtZSBiYWNraW5nXG4mIzQzO2ZpbGUgYXQgdGhlIHNhbWUgZnNvZmZzZXQgd2l0aCBjb21wYXRpYmxlIG1vdW50IG9wdGlvbnMgY2FuIHNoYXJlIGEgc2luZ2xlXG4mIzQzO3N1cGVyYmxvY2suICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy5cbiYjNDM7XG4gU3lzZnMgRW50cmllc1xuID09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbkBAIC0xNTYsNiAmIzQzOzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlx0XHQweDAwMDAwMDgwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cdFx0MHgwMDAwMDEwMFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcdFx0MHgwMDAwMDIwMFxuJiM0MzsjZGVmaW5lIEVST0ZTX01PVU5UX1NVUEVSQkxPQ0tfU0hBUkVcdDB4MDAwMDA0MDBcbiBcbiAjZGVmaW5lIGNsZWFyX29wdChvcHQsIG9wdGlvbilcdCgob3B0KS1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pXG4gI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbilcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xuaW5kZXggZGRjOTcxOWU2ZDE4ZS4uZTFhMWEyN2ZiZDE4ZCAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbkBAIC0zODYsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIGVudW0ge1xuIFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxuIFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcbi1cdE9wdF9zb3VyY2UsXG4mIzQzO1x0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XG5AQCAtNDE1LDYgJiM0Mzs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbiBcdGZzcGFyYW1fdTY0KFwmIzM0O2Zzb2Zmc2V0XCYjMzQ7LFx0XHRcdE9wdF9mc29mZnNldCksXG4gXHRmc3BhcmFtX2ZsYWcoXCYjMzQ7aW5vZGVfc2hhcmVcJiMzNDssXHRcdE9wdF9pbm9kZV9zaGFyZSksXG4gXHRmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKFwmIzM0O3NvdXJjZVwmIzM0OyxcdE9wdF9zb3VyY2UpLFxuJiM0MztcdGZzcGFyYW1fZmxhZyhcJiMzNDtzdXBlcmJsb2NrX3NoYXJlXCYjMzQ7LFx0T3B0X3N1cGVyYmxvY2tfc2hhcmUpLFxuIFx0e31cbiB9O1xuIFxuQEAgLTU2MCw2ICYjNDM7NTYxLDEyIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRlbHNlXG4gXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XG4mIzQzO1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcbiYjNDM7XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcJiMzNDssIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBPcHRfc291cmNlOlxuIFx0XHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XG4gXHR9XG5AQCAtNjUyLDYgJiM0Mzs2NTksMTYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuJiM0MztcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG4mIzQzO1x0XHRlcnJvcmZjKGZjLCBcJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2JpLVx1MDAzZWRldnMtXHUwMDNlZXh0cmFfZGV2aWNlcykge1xuJiM0MztcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7c3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXNcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFxuIFx0c2JpLVx1MDAzZWJsa3N6Yml0cyA9IFBBR0VfU0hJRlQ7XG4gXHRpZiAoIXNiLVx1MDAzZXNfYmRldikge1xuQEAgLTc3OSw2ICYjNDM7Nzk2LDM1IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgd2l0aCBhIHNiaSB0aGF0IGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCxcbiYjNDM7ICogc28gdGhhdCB0aGUgbWVtY21wIGxhdGVyIGVuc3VyZXMgbmV3X3NiaSBpcyBhbHNvIHNoYXJlYWJsZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqbmV3X3NiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbiYjNDM7XG4mIzQzO1x0aWYgKHNiLVx1MDAzZXNfaWZsYWdzIFx1MDAyNiBTQl9JX1JFVElSRUQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXNiaS1cdTAwM2VkaWYwLmZpbGUgfHwgIW5ld19zYmktXHUwMDNlZGlmMC5maWxlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSkgPT0gZmlsZV9pbm9kZShuZXdfc2JpLVx1MDAzZWRpZjAuZmlsZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHNiaS1cdTAwM2VkaWYwLmZzb2ZmID09IG5ld19zYmktXHUwMDNlZGlmMC5mc29mZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgIW1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlcm9mc19maWxlX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG4mIzQzO1x0XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXIsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIHtcbiBcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG5AQCAtNzk0LDcgJiM0Mzs4NDAsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDtzb3VyY2UgaXMgdW5zdXBwb3J0ZWRcJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4mIzQzO1x0XHRyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7XG4gXHR9XG4gXG4gXHRyZXQgPSBnZXRfdHJlZV9iZGV2X2ZsYWdzKGZjLCBlcm9mc19mY19maWxsX3N1cGVyLFxuQEAgLTgxMiw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXG4gXHRcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSktXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHNiaS1cdTAwM2VkaWYwLmZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZXJlYWRfZm9saW8pXG4tXHRcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpO1xuIFx0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtODI1LDYgJiM0Mzs4NzEsMTAgQEAgc3RhdGljIGludCBlcm9mc19mY19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXG4gXHREQkdfQlVHT04oIXNiX3Jkb25seShzYikpO1xuIFxuJiM0MztcdC8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqL1xuJiM0MztcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuIFx0aWYgKG5ld19zYmktXHUwMDNlZG9tYWluX2lkKVxuIFx0XHRlcm9mc19pbmZvKHNiLCBcJiMzNDtpZ25vcmluZyByZWNvbmZpZ3VyYXRpb24gZm9yIGRvbWFpbl9pZC5cJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCA1ZmVlY2Y1ZDkwMzhkLi43MWNkMmRiYWRlNWIzIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTEzODksNyAmIzQzOzEzODksMTcgQEAgc3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuJiM0MzsvKipcbiYjNDM7ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXG4mIzQzOyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXG4mIzQzOyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXG4mIzQzOyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrXG4mIzQzOyAqXG4mIzQzOyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xuJiM0MzsgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoXG4mIzQzOyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuIFx0XHRpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuQEAgLTE0MTYsMTIgJiM0MzsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7XG4gXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuJiM0MztcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfbm9kZXYpO1xuIFxuQEAgLTE0MjksNyAmIzQzOzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zaW5nbGUpO1xuIFxuQEAgLTE0MzksNyAmIzQzOzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHR2b2lkICprZXkpXG4ge1xuIFx0ZmMtXHUwMDNlc19mc19pbmZvID0ga2V5O1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuJiM0MztcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbkBAIC0xNTAsNiAmIzQzOzE1MCwxMCBAQCBleHRlcm4gaW50IHZmc19wYXJzZV9mc19wYXJhbV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG4gZXh0ZXJuIHZvaWQgZmNfZHJvcF9sb2NrZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiBcbiYjNDM7ZXh0ZXJuIGludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4mIzQzO1x0XHRcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4mIzQzO1x0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7XG4gZXh0ZXJuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdFx0IGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19CQUNLRURfQllfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF90cmVlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWUmIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7ZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZyBmaWxlIHRvIHNoYXJlIGEgc2luZ2xlIHN1cGVyYmxvY2suIEl0IG1vZGlmaWVzIHRoZSBWRlMgYnkgZXhwb3J0aW5nIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGFkZHMgbG9naWMgaW4gRVJPRlMgdG8gcGFyc2UgdGhlIG5ldyBvcHRpb24gYW5kIGhhbmRsZSBzdXBlcmJsb2NrIHNoYXJpbmcuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSBwYXRocyBpbiBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBzdXBlcmJsb2NrIG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTExNGZmNzNkN2U0MjEyMTM2NTU2M2QwNWYzOGMwOTlhMWY2ZDE4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE2OjMzOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdAppbmRleCBkMzAxZDlhYzk0NmE5Li4wMmNhZjNiMDYxZmVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdApAQCAtMTM5LDYgJiM0MzsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aQogICAgICAgICAgICAgICAgICAgICAgICBwYWdlIGNhY2hlLgogc291cmNlPSVzICAgICAgICAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU3BlY2lmeSB0aGUgYmFja2luZyBpbWFnZSBhcyBhIHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLgomIzQzO3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLgogPT09PT09PT09PT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogRmlsZS1iYWNrZWQgbW91bnRzCkBAIC0xNTYsNiAmIzQzOzE1OSwxMCBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXQKIHJlc2lkZXMgb24gYSBibG9jayBkZXZpY2UsIHVzZSB0aGUgdHJhZGl0aW9uYWwgYmxvY2sgZGV2aWNlIG1vdW50IHBhdGgKIGluc3RlYWQuCiAKJiM0MztXaGVuIHN1cGVyYmxvY2tfc2hhcmUgaXMgc3BlY2lmaWVkLCBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZwomIzQzO2ZpbGUgYXQgdGhlIHNhbWUgZnNvZmZzZXQgd2l0aCBjb21wYXRpYmxlIG1vdW50IG9wdGlvbnMgY2FuIHNoYXJlIGEgc2luZ2xlCiYjNDM7c3VwZXJibG9jay4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLgomIzQzOwogU3lzZnMgRW50cmllcwogPT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaAppbmRleCA1N2JkMjE4NTljNjVkLi44NmRhMjE5ZjhmNGVjIDEwMDY0NAotLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKQEAgLTE1Niw2ICYjNDM7MTU2LDcgQEAgc3RydWN0IGVyb2ZzX3NiX2luZm8gewogI2RlZmluZSBFUk9GU19NT1VOVF9EQVhfTkVWRVIJCTB4MDAwMDAwODAKICNkZWZpbmUgRVJPRlNfTU9VTlRfRElSRUNUX0lPCQkweDAwMDAwMTAwCiAjZGVmaW5lIEVST0ZTX01PVU5UX0lOT0RFX1NIQVJFCQkweDAwMDAwMjAwCiYjNDM7I2RlZmluZSBFUk9GU19NT1VOVF9TVVBFUkJMT0NLX1NIQVJFCTB4MDAwMDA0MDAKIAogI2RlZmluZSBjbGVhcl9vcHQob3B0LCBvcHRpb24pCSgob3B0KS0mZ3Q7bW91bnRfb3B0ICZhbXA7PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pCiAjZGVmaW5lIHNldF9vcHQob3B0LCBvcHRpb24pCSgob3B0KS0mZ3Q7bW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKQpkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmMKaW5kZXggZGRjOTcxOWU2ZDE4ZS4uZTFhMWEyN2ZiZDE4ZCAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9zdXBlci5jCkBAIC0zODYsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKQogZW51bSB7CiAJT3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLAogCU9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsCi0JT3B0X3NvdXJjZSwKJiM0MzsJT3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7CkBAIC00MTUsNiAmIzQzOzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0gewogCWZzcGFyYW1fdTY0KCYjMzQ7ZnNvZmZzZXQmIzM0OywJCQlPcHRfZnNvZmZzZXQpLAogCWZzcGFyYW1fZmxhZygmIzM0O2lub2RlX3NoYXJlJiMzNDssCQlPcHRfaW5vZGVfc2hhcmUpLAogCWZzcGFyYW1fZmlsZV9vcl9zdHJpbmcoJiMzNDtzb3VyY2UmIzM0OywJT3B0X3NvdXJjZSksCiYjNDM7CWZzcGFyYW1fZmxhZygmIzM0O3N1cGVyYmxvY2tfc2hhcmUmIzM0OywJT3B0X3N1cGVyYmxvY2tfc2hhcmUpLAogCXt9CiB9OwogCkBAIC01NjAsNiAmIzQzOzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJZWxzZQogCQkJc2V0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBJTk9ERV9TSEFSRSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIE9wdF9zdXBlcmJsb2NrX3NoYXJlOgomIzQzOwkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpCiYjNDM7CQkJZXJyb3JmYyhmYywgJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZCYjMzQ7LCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2V0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgT3B0X3NvdXJjZToKIAkJcmV0dXJuIGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShmYywgcGFyYW0pOwogCX0KQEAgLTY1Miw2ICYjNDM7NjU5LDE2IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCWVycm9yZmMoZmMsICYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQomIzQzOwlpZiAodGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgdGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgSU5PREVfU0hBUkUpKSB7CiYjNDM7CQllcnJvcmZjKGZjLCAmIzM0O3N1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWlmICh0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzYmktJmd0O2RldnMtJmd0O2V4dHJhX2RldmljZXMpIHsKJiM0MzsJCWVycm9yZmMoZmMsICYjMzQ7c3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXMmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiAJc2JpLSZndDtibGtzemJpdHMgPSBQQUdFX1NISUZUOwogCWlmICghc2ItJmd0O3NfYmRldikgewpAQCAtNzc5LDYgJiM0Mzs3OTYsMzUgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXQgaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LAomIzQzOyAqIHNvIHRoYXQgdGhlIG1lbWNtcCBsYXRlciBlbnN1cmVzIG5ld19zYmkgaXMgYWxzbyBzaGFyZWFibGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCSAgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKQomIzQzO3sKJiM0MzsJc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGVyb2ZzX3NiX2luZm8gKm5ld19zYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwomIzQzOwomIzQzOwlpZiAoc2ItJmd0O3NfaWZsYWdzICZhbXA7IFNCX0lfUkVUSVJFRCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAoIXNiaS0mZ3Q7ZGlmMC5maWxlIHx8ICFuZXdfc2JpLSZndDtkaWYwLmZpbGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGZpbGVfaW5vZGUoc2JpLSZndDtkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBzYmktJmd0O2RpZjAuZnNvZmYgPT0gbmV3X3NiaS0mZ3Q7ZGlmMC5mc29mZiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAhbWVtY21wKCZhbXA7c2JpLSZndDtvcHQsICZhbXA7bmV3X3NiaS0mZ3Q7b3B0LCBzaXplb2Yoc2JpLSZndDtvcHQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlcm9mc19maWxlX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwomIzQzOwomIzQzOwlpZiAoIXRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKQomIzQzOwkJcmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIHsKIAlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKQEAgLTc5NCw3ICYjNDM7ODQwLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCQllcnJvcmZjKGZjLCAmIzM0O3NvdXJjZSBpcyB1bnN1cHBvcnRlZCYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CQlyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7CiAJfQogCiAJcmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlciwKQEAgLTgxMiw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAKIAkJaWYgKFNfSVNSRUcoZmlsZV9pbm9kZShzYmktJmd0O2RpZjAuZmlsZSktJmd0O2lfbW9kZSkgJmFtcDsmYW1wOwogCQkgICAgc2JpLSZndDtkaWYwLmZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O3JlYWRfZm9saW8pCi0JCQlyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpOwomIzQzOwkJCXJldHVybiBlcm9mc19maWxlX2dldF90cmVlKGZjKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgyNSw2ICYjNDM7ODcxLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCiAJREJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTsKIAomIzQzOwkvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi8KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAobmV3X3NiaS0mZ3Q7ZG9tYWluX2lkKQogCQllcm9mc19pbmZvKHNiLCAmIzM0O2lnbm9yaW5nIHJlY29uZmlndXJhdGlvbiBmb3IgZG9tYWluX2lkLiYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0xMzg5LDcgJiM0MzsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiYjNDM7LyoqCiYjNDM7ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lCiYjNDM7ICogQGZjOiBUaGUgZmlsZXN5c3RlbSBjb250ZXh0IGhvbGRpbmcgdGhlIHBhcmFtZXRlcnMKJiM0MzsgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTAomIzQzOyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrCiYjNDM7ICoKJiM0MzsgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXMKJiM0MzsgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoCiYjNDM7ICogQGZpbGxfc3VwZXIuICBQYXNzaW5nIE5VTEwgZm9yIEB0ZXN0IGFsd2F5cyBjcmVhdGVzIGEgbmV3IHN1cGVyYmxvY2suCiYjNDM7ICovCiYjNDM7aW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLAogCQlpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKQEAgLTE0MTYsMTIgJiM0MzsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpOwogCXJldHVybiBlcnI7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7CiAKIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCSAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKIHsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTsKIApAQCAtMTQyOSw3ICYjNDM7MTQ0MCw3IEBAIGludCBnZXRfdHJlZV9zaW5nbGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpCiB7Ci0JcmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7CiAKQEAgLTE0MzksNyAmIzQzOzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQl2b2lkICprZXkpCiB7CiAJZmMtJmd0O3NfZnNfaW5mbyA9IGtleTsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaAppbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaApAQCAtMTUwLDYgJiM0MzsxNTAsMTAgQEAgZXh0ZXJuIGludCB2ZnNfcGFyc2VfZnNfcGFyYW1fc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCQkgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKTsKIGV4dGVybiB2b2lkIGZjX2Ryb3BfbG9ja2VkKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7CiAKJiM0MztleHRlcm4gaW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKJiM0MzsJCQkgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLAomIzQzOwkJCSBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQkJICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7CiBleHRlcm4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCSBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFUk9GUyBTdXBlcmJsb2NrIFNoYXJpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBkaWdnaW5nIGludG8gdGhlIGNvcmUgVkZTIGFuZCB0aGUgRVJPRlMgaW1wbGVtZW50YXRpb24uIFNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiBtb3VudGluZyB0aGUgc2FtZSBiYWNraW5nIGZpbGUgbXVsdGlwbGUgdGltZXMgc291bmRzIGxpa2UgYSBzb2xpZCBvcHRpbWl6YXRpb24sIGJ1dCBhbnl0aGluZyB0aGF0IHRvdWNoZXMgdGhpcyBsZXZlbCBvZiB0aGUgZmlsZXN5c3RlbSwgZXNwZWNpYWxseSBhZGRpbmcgbmV3IG9wdGlvbnMsIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBzY3J1dGlueSBhbmQgdGhvcm91Z2ggdGVzdGluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nOyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBkYXRhIGludGVncml0eSBvciBmaWxlc3lzdGVtIHN0YWJpbGl0eSBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlci4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSBwYXRjaCBjb2RlIGl0c2VsZiBoZWxwZnVsbHkgcG9pbnRzIG91dCBgQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCB3aXRoaW4gYGZzL2Vyb2ZzL3N1cGVyLmNgLiBDbGVhcmx5LCB0aGF0JiMzOTtzIGEgcHJlcmVxdWlzaXRlIHRvIGVuYWJsZSB0aGUgYHN1cGVyYmxvY2tfc2hhcmVgIG9wdGlvbi4gSXQgZXhwbGljaXRseSBjaGVja3MgZm9yIGl0OgoKYGBgYwogICAgY2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZToKICAgICAgaWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpCiAgICAgICAgZXJyb3JmYyhmYywgJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZCYjMzQ7LCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7CiAgICAgIGVsc2UKICAgICAgICBzZXRfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpOwogICAgICBicmVhazsKYGBgCgpJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpZiBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIGlzIG5vdCBlbmFibGVkLCB0aGUgbW91bnQgb3B0aW9uIHdpbGwgYmUgcmVqZWN0ZWQuIE9idmlvdXNseSwgYEVST0ZTX0ZTYCBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBlbmFibGUgRVJPRlMgaW4gdGhlIGZpcnN0IHBsYWNlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBjb25zdWx0IHRoZSBgZnMvZXJvZnMvS2NvbmZpZ2AgZmlsZSB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzIG9yIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gV2UgbmVlZCB0byBiZSBhd2FyZSBvZiBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFUk9GU19GU19CQUNLRURfQllfRklMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvS2NvbmZpZz04NT1jb25maWcgRVJPRlNfRlNfU0VDVVJJVFlcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTk3LVxuZnMvZXJvZnMvS2NvbmZpZzo5ODpjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcbmZzL2Vyb2ZzL0tjb25maWctOTktXHRib29sIFwmIzM0O0ZpbGUtYmFja2VkIEVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEVST0ZTIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNvbWUgYXNwZWN0IG9mIEVST0ZTIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBFUk9GUyBmaWxlc3lzdGVtIGRpcmVjdG9yeS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGZzL2Vyb2ZzL0tjb25maWdgIGFuZCwgZ2l2ZW4gbXkgZ2VuZXJhbCBmYW1pbGlhcml0eSB3aXRoIHRoZXNlIGZpbGVzLCBJJiMzOTtsbCBzdGFydCBsb29raW5nIGFyb3VuZCBsaW5lIDk4LiBUaGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHBvaW50IHRvIGJlZ2luOyB0aGF0IGxpbmUgbGlrZWx5IGNvdmVycyBhIHNwZWNpZmljIGZlYXR1cmUgb3Igb3B0aW9uIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5LiBUaW1lIHRvIGdldCBteSBleWVzIG9uIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIFNlY3VyaXR5IGxhYmVscyBwcm92aWRlIGFuIGFjY2VzcyBjb250cm9sIGZhY2lsaXR5IHRvIHN1cHBvcnQgTGludXhcbiAgOTE6XHRcdCAgU2VjdXJpdHkgTW9kZWxzIChMU01zKSBhY2NlcHRlZCBieSBBcHBBcm1vciwgU0VMaW51eCwgU21hY2sgYW5kIFRPTU9ZT1xuICA5MjpcdFx0ICBMaW51eC4gVGhpcyBvcHRpb24gZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZVxuICA5MzpcdFx0ICBzZWN1cml0eSBsYWJlbHMgaW4gdGhlIGVyb2ZzIGZpbGVzeXN0ZW0sIHNvIHRoYXQgaXQgcmVxdWlyZXMgZW5hYmxpbmdcbiAgOTQ6XHRcdCAgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IGluIGFkdmFuY2UuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlLCBzYXkgTi5cbiAgOTc6XHRcbiAgOTg6XHRjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcbiAgOTk6XHRcdGJvb2wgXCYjMzQ7RmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gMTAwOlx0XHRkZXBlbmRzIG9uIEVST0ZTX0ZTXG4gMTAxOlx0XHRkZWZhdWx0IHlcbiAxMDI6XHRcdGhlbHBcbiAxMDM6XHRcdCAgVGhpcyBhbGxvd3MgRVJPRlMgdG8gdXNlIGZpbGVzeXN0ZW0gaW1hZ2UgZmlsZXMgZGlyZWN0bHksIHdpdGhvdXRcbiAxMDQ6XHRcdCAgdGhlIGludGVyY2Vzc2lvbiBvZiBsb29wYmFjayBibG9jayBkZXZpY2VzIG9yIGxpa2V3aXNlLiBJdCBpc1xuIDEwNTpcdFx0ICBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjb250YWluZXIgaW1hZ2VzIHdpdGggbnVtZXJvdXMgYmxvYnMgYW5kXG4gMTA2Olx0XHQgIG90aGVyIHNhbmRib3hlcywgd2hlcmUgbG9vcCBkZXZpY2VzIGJlaGF2ZSBpbnRyaWNhdGVseS4gIEl0IGNhbiBhbHNvXG4gMTA3Olx0XHQgIGJlIHVzZWQgdG8gc2ltcGxpZnkgZXJyb3ItcHJvbmUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiB1bm5lY2Vzc2FyeVxuIDEwODpcdFx0ICB2aXJ0dWFsIGJsb2NrIGRldmljZXMuXG4gMTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRVJPRlMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgRVJPRlMgcGF0Y2guIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYEVST0ZTX0ZTYCBhbmQgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGFuZCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcy4KCkZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zOiBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gLCBgZXJvZnNfZmNfZmlsbF9zdXBlcmAsIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYCAobmV3KSwgYGVyb2ZzX2ZpbGVfZ2V0X3RyZWVgIChuZXcpLCBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBgZXJvZnNfZmNfcmVjb25maWd1cmVgLCBhbmQgYWxzbyBgZ2V0X3RyZWVfc3VwZXJgICh3aGljaCBpcyBuZXdseSBleHBvcnRlZCwgcHJldmlvdXNseSBgdmZzX2dldF9zdXBlcmApLgoKVGhlIHByb21wdCYjMzk7cyBndWlkYW5jZSBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSBzZWUgdGhhdCBgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcmAgYW5kIGBlcm9mc19maWxlX2dldF90cmVlYCBhcmUgaW5kZWVkIHN0YXRpYy4gVGhhdCBtZWFucyB0aGV5IGFyZSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLCBub3QgYW4gZXh0ZXJuYWxseSBhY2Nlc3NpYmxlIGVudHJ5cG9pbnQuIEkgd2FudCB0byBhdm9pZCBmb2N1c2luZyBvbiB0aGVzZSBpZiB0aGVyZSYjMzk7cyBhIGdvb2Qgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZS4KClNvLCBhY2NvcmRpbmcgdG8gbXkgaW5pdGlhbCBhbmFseXNpcywgSSBzaG91bGQgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlYCwgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCwgYW5kIHRoZSBuZXdseSBleHBvcnRlZCBgZ2V0X3RyZWVfc3VwZXJgLgoKT2theSwgSSYjMzk7dmUgY2hlY2tlZCBhbmQgdGhlc2UgZnVuY3Rpb25zOiBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gLCBgZXJvZnNfZmNfZmlsbF9zdXBlcmAsIGBlcm9mc19mY19nZXRfdHJlZWAsIGFuZCBgZXJvZnNfZmNfcmVjb25maWd1cmVgIGFyZSBhbGwgc3RhdGljLiBUaGF0JiMzOTtzIGEgYml0IGRpc2FwcG9pbnRpbmcuIEJ1dCB3YWl0Li4uIGV2ZW4gaWYgdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5JiMzOTtyZSB1c2VkIGFzIGNhbGxiYWNrcyB3aXRoaW4gYGZzX2NvbnRleHRfb3BlcmF0aW9uc2AuIFRoYXQgY2hhbmdlcyB0aGluZ3MsIGl0IG1ha2VzIHRoZW0gbW9yZSBpbXBvcnRhbnQuCgpBaCwgYnV0IGBnZXRfdHJlZV9zdXBlcmAgaW4gYGZzL3N1cGVyLmNgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBTbywgdGhhdCBvbmUgbG9va3MgcHJvbWlzaW5nLgoKTm93LCBjb25jZXJuaW5nIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgc3BlY2lmaWNhbGx5LCBpdCAqaXMqIHN0YXRpYywgd2hpY2ggaXNuJiMzOTt0IGlkZWFsLCBidXQgaXQmIzM5O3MgYW4gZW50cnkgcG9pbnQgZm9yIHBhcnNpbmcgbW91bnQgb3B0aW9ucywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGdpdmVuIHRoZSBjb25zdHJhaW50cywgaXQmIzM5O3MgcG9zc2libGUgdGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCgpMZXQgbWUgdGhpbmsuLi4gaXMgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBgZnMvZXJvZnMvc3VwZXIuY2AgdGhhdCBjb3VsZCBiZSB1c2VkPyBUaGF0JiMzOTtzIHdoYXQgSSBoYXZlIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2ZjX3BhcnNlX3BhcmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jPTQ0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy00NzYtXG5mcy9lcm9mcy9zdXBlci5jOjQ3NzpzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbmZzL2Vyb2ZzL3N1cGVyLmMtNDc4LVx0XHRcdFx0c3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz05NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXJvZnNfY29udGV4dF9vcHMgPSB7XG5mcy9lcm9mcy9zdXBlci5jOjk0MzpcdC5wYXJzZV9wYXJhbVx0PSBlcm9mc19mY19wYXJzZV9wYXJhbSxcbmZzL2Vyb2ZzL3N1cGVyLmMtOTQ0LVx0LmdldF90cmVlICAgICAgID0gZXJvZnNfZmNfZ2V0X3RyZWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBFUk9GUyBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gaW5pdGlhbGl6YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBgZXJvZnNfY29udGV4dF9vcHNgIGFuZCB0aGUgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoYXQgYGVyb2ZzX2NvbnRleHRfb3BzYCBtdXN0IGJlIGEgY3JpdGljYWwgc3RydWN0dXJlLCBsaWtlbHkgY29udGFpbmluZyBwb2ludGVycyB0byB0aGUgY29yZSBvcGVyYXRpb25hbCBmdW5jdGlvbnMgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBJdCBzZWVtcyB0aGF0IHRoaXMgc3RydWN0dXJlIGlzIHdoYXQgZ2V0cyBzZXQgZHVyaW5nIHRoZSBtb3VudCB0aW1lIG9wZXJhdGlvbiBzbyB0aGF0IHRoZSBmaWxlc3lzdGVtIGRyaXZlciBjYW4gaG9vayBpbnRvIGFueSBuZWVkZWQgbW91bnQgcGFyYW1ldGVycy4gVGhlIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIGZ1bmN0aW9uIG11c3QgYmUgdGhlIHBvaW50IHdoZXJlIHRoaXMgYWxsIGdldHMgc3RpdGNoZWQgdG9nZXRoZXIuIFRoZXJlZm9yZSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24gaXMgYSBjcml0aWNhbCBwaWVjZSBpbiB1bmRlcnN0YW5kaW5nIHRoZSBib290IG9wZXJhdGlvbiBmb3IgYW4gRVJPRlMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIGxvb2sgaW50byB0aGF0IHJlbGF0aW9uc2hpcCBhIGJpdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlcm9mc19pbml0X2ZzX2NvbnRleHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmM9OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGVyb2ZzX2NvbnRleHRfb3BzID0ge1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtOTQ4LVxuZnMvZXJvZnMvc3VwZXIuYzo5NDk6c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZXJvZnMvc3VwZXIuYy05NTAte1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9MTAwOT1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXJvZnNfZnNfdHlwZSA9IHtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTEwMTEtXHQubmFtZSAgICAgICAgICAgPSBcJiMzNDtlcm9mc1wmIzM0OyxcbmZzL2Vyb2ZzL3N1cGVyLmM6MTAxMjpcdC5pbml0X2ZzX2NvbnRleHQgPSBlcm9mc19pbml0X2ZzX2NvbnRleHQsXG5mcy9lcm9mcy9zdXBlci5jLTEwMTMtXHQua2lsbF9zYiAgICAgICAgPSBlcm9mc19raWxsX3NiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjgwCgkJCQkJCQlvdXRwdXQ6IDE5OAoJCQkJCQkJdGhvdWdodHM6IDYwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFUk9GUyBGdXp6aW5nIEVudHJ5cG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgdGhpcyBFUk9GUyBjb2RlLCBwYXJ0aWN1bGFybHkgaW4gbGlnaHQgb2YgdGhpcyBuZXcgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbi4gVGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgZ2V0X3RyZWVfc3VwZXJgIGFzIHRoZSBmb2N1cyBiZWNhdXNlIGl0JiMzOTtzIG5vbi1zdGF0aWMsIGJ1dCBJIGFsc28gY29uc2lkZXJlZCBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIHNpbmNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZCBieSBzeXprYWxsZXIgYXMgbG9uZyBhcyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCwgYnV0IEkgcmVhbGl6ZWQgYGdldF90cmVlX3N1cGVyYCBpcyBhIHN1aXRhYmxlIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQuCgpOb3csIHdoYXQgYWJvdXQgRVJPRlMtc3BlY2lmaWMgZnVuY3Rpb25zPyBHaXZlbiB0aGUgcHJvbXB0JiMzOTtzIHByZWZlcmVuY2UsIGl0IG1ha2VzIHNlbnNlIHRvIGZvY3VzIG9uIHRoZSBzdGF0aWMgb25lcyB0aGF0IGFyZSB1c2VkIGFzIGNhbGxiYWNrcy4gU2luY2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgdGhleSYjMzk7cmUgdW5saWtlbHkgdG8gYmUgaW5saW5lZC4gSSB3YXMgaW5pdGlhbGx5IGdvaW5nIHRvIGxpc3Q6CgoqICAgYGdldF90cmVlX3N1cGVyYAoqICAgYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYAoqICAgYGVyb2ZzX2ZjX2ZpbGxfc3VwZXJgCiogICBgZXJvZnNfZmNfZ2V0X3RyZWVgCiogICBgZXJvZnNfZmNfcmVjb25maWd1cmVgCgpUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBlcm9mc19maWxlX2dldF90cmVlYCBhbmQgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGFyZSBhbHNvIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgYWxzbyB0YWtlbi4gYGVyb2ZzX2ZpbGVfZ2V0X3RyZWVgIGlzIGNhbGxlZCBkaXJlY3RseSBieSBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBhbmQgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrIHRvIGBnZXRfdHJlZV9zdXBlcmAsIHNvIGl0cyBhZGRyZXNzIGlzIGFsc28gdGFrZW4uIFRoZXNlIGFyZSBpbXBvcnRhbnQuCgpTbywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgZ2V0X3RyZWVfc3VwZXJgIGFuZCBhbGwgdGhlc2UgRVJPRlMgY2FsbGJhY2sgZnVuY3Rpb25zLiBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlYCwgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCwgYW5kIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgZ2V0X3RyZWVfc3VwZXJgIGlzIGluZGVlZCB0aGUgb25seSBleHBvcnRlZCBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuIFllcywgaXQmIzM5O3MgZXhwb3J0ZWQsIHNvIHRoYXQgbG9va3MgY29ycmVjdC4KClJlZ2FyZGluZyB0aGUgb3ZlcmFsbCBzdHJhdGVneSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gbW91bnRpbmcgYW5kIHN1cGVyYmxvY2sgbWFuYWdlbWVudCBkdWUgdG8gdGhlIGBzdXBlcmJsb2NrX3NoYXJlYCBtb3VudCBvcHRpb24uIFRoYXQgb3BlbnMgdXAgcG90ZW50aWFsIGZ1enppbmcgb3Bwb3J0dW5pdGllcyBpbiB0aGUgRVJPRlMgZmlsZXN5c3RlbSBjb2RlLCBlc3BlY2lhbGx5IHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBWRlMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGluY2x1ZGVzIGJvdGggYEVST0ZTX0ZTYCBhbmQgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCB0byBjb3ZlciB0aGVzZSBuZXcgcGF0aHMgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19CQUNLRURfQllfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF90cmVlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWUmIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7ZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZyBmaWxlIHRvIHNoYXJlIGEgc2luZ2xlIHN1cGVyYmxvY2suIEl0IG1vZGlmaWVzIHRoZSBWRlMgYnkgZXhwb3J0aW5nIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGFkZHMgbG9naWMgaW4gRVJPRlMgdG8gcGFyc2UgdGhlIG5ldyBvcHRpb24gYW5kIGhhbmRsZSBzdXBlcmJsb2NrIHNoYXJpbmcuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSBwYXRocyBpbiBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBzdXBlcmJsb2NrIG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19CQUNLRURfQllfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF90cmVlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWUmIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7ZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZyBmaWxlIHRvIHNoYXJlIGEgc2luZ2xlIHN1cGVyYmxvY2suIEl0IG1vZGlmaWVzIHRoZSBWRlMgYnkgZXhwb3J0aW5nIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGFkZHMgbG9naWMgaW4gRVJPRlMgdG8gcGFyc2UgdGhlIG5ldyBvcHRpb24gYW5kIGhhbmRsZSBzdXBlcmJsb2NrIHNoYXJpbmcuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSBwYXRocyBpbiBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBzdXBlcmJsb2NrIG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKWAgdG8gY29tcGFyZSBtb3VudCBvcHRpb25zLiBXaGlsZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGNvbnRhaW5zIHBhZGRpbmcgYnl0ZXMgYmV0d2VlbiBgY2FjaGVfc3RyYXRlZ3lgICh1bnNpZ25lZCBjaGFyKSBhbmQgYG1vdW50X29wdGAgKHVuc2lnbmVkIGludCksIHRoZSBlbmNsb3NpbmcgYHN0cnVjdCBlcm9mc19zYl9pbmZvYCBpcyBhbHdheXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSBpbiBgZXJvZnNfaW5pdF9mc19jb250ZXh0YC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyB0aGUgcGFkZGluZyBieXRlcyBpbiBgc2JpLVx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVx1MDAzZW9wdGAgZmllbGRzIGRvIG5vdCBhbHRlciB0aGUgcGFkZGluZyBieXRlcywgbWVhbmluZyB0aGV5IHJlbWFpbiB6ZXJvZWQuIFRoZXJlZm9yZSwgdGhlIGBtZW1jbXBgIG9wZXJhdGlvbiBzYWZlbHkgY29tcGFyZXMgaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUxMTRmZjczZDdlNDIxMjEzNjU1NjNkMDVmMzhjMDk5YTFmNmQxODMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjozMzozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKaW5kZXggZDMwMWQ5YWM5NDZhOS4uMDJjYWYzYjA2MWZlZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKQEAgLTEzOSw2ICYjNDM7MTM5LDkgQEAgaW5vZGVfc2hhcmUgICAgICAgICAgICBFbmFibGUgaW5vZGUgcGFnZSBzaGFyaW5nIGZvciB0aGlzIGZpbGVzeXN0ZW0uICBJbm9kZXMgd2kKICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS4KIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFzIGFuIGFscmVhZHktb3BlbmVkIGZpbGUgZGVzY3JpcHRvci4KJiM0MztzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy4KID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEZpbGUtYmFja2VkIG1vdW50cwpAQCAtMTU2LDYgJiM0MzsxNTksMTAgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0CiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoCiBpbnN0ZWFkLgogCiYjNDM7V2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCwgbXVsdGlwbGUgbW91bnRzIG9mIHRoZSBzYW1lIGJhY2tpbmcKJiM0MztmaWxlIGF0IHRoZSBzYW1lIGZzb2Zmc2V0IHdpdGggY29tcGF0aWJsZSBtb3VudCBvcHRpb25zIGNhbiBzaGFyZSBhIHNpbmdsZQomIzQzO3N1cGVyYmxvY2suICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy4KJiM0MzsKIFN5c2ZzIEVudHJpZXMKID09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9pbnRlcm5hbC5oCkBAIC0xNTYsNiAmIzQzOzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHsKICNkZWZpbmUgRVJPRlNfTU9VTlRfREFYX05FVkVSCQkweDAwMDAwMDgwCiAjZGVmaW5lIEVST0ZTX01PVU5UX0RJUkVDVF9JTwkJMHgwMDAwMDEwMAogI2RlZmluZSBFUk9GU19NT1VOVF9JTk9ERV9TSEFSRQkJMHgwMDAwMDIwMAomIzQzOyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRQkweDAwMDAwNDAwCiAKICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKQkoKG9wdCktJmd0O21vdW50X29wdCAmYW1wOz0gfkVST0ZTX01PVU5UXyMjb3B0aW9uKQogI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKQkoKG9wdCktJmd0O21vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbikKZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jCmluZGV4IGRkYzk3MTllNmQxOGUuLmUxYTFhMjdmYmQxOGQgMTAwNjQ0Ci0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvc3VwZXIuYwpAQCAtMzg2LDcgJiM0MzszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSkKIGVudW0gewogCU9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSwKIAlPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLAotCU9wdF9zb3VyY2UsCiYjNDM7CU9wdF9zb3VyY2UsIE9wdF9zdXBlcmJsb2NrX3NoYXJlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBlcm9mc19wYXJhbV9jYWNoZV9zdHJhdGVneVtdID0gewpAQCAtNDE1LDYgJiM0Mzs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHsKIAlmc3BhcmFtX3U2NCgmIzM0O2Zzb2Zmc2V0JiMzNDssCQkJT3B0X2Zzb2Zmc2V0KSwKIAlmc3BhcmFtX2ZsYWcoJiMzNDtpbm9kZV9zaGFyZSYjMzQ7LAkJT3B0X2lub2RlX3NoYXJlKSwKIAlmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKCYjMzQ7c291cmNlJiMzNDssCU9wdF9zb3VyY2UpLAomIzQzOwlmc3BhcmFtX2ZsYWcoJiMzNDtzdXBlcmJsb2NrX3NoYXJlJiMzNDssCU9wdF9zdXBlcmJsb2NrX3NoYXJlKSwKIAl7fQogfTsKIApAQCAtNTYwLDYgJiM0Mzs1NjEsMTIgQEAgc3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCWVsc2UKIAkJCXNldF9vcHQoJmFtcDtzYmktJmd0O29wdCwgSU5PREVfU0hBUkUpOwogCQlicmVhazsKJiM0MzsJY2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZToKJiM0MzsJCWlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKQomIzQzOwkJCWVycm9yZmMoZmMsICYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWQmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpOwomIzQzOwkJZWxzZQomIzQzOwkJCXNldF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSk7CiYjNDM7CQlicmVhazsKIAljYXNlIE9wdF9zb3VyY2U6CiAJCXJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTsKIAl9CkBAIC02NTIsNiAmIzQzOzY1OSwxNiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCQllcnJvcmZjKGZjLCAmIzM0O0ZTREFYIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb24mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpICZhbXA7JmFtcDsKJiM0MzsJICAgIHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIElOT0RFX1NIQVJFKSkgewomIzQzOwkJZXJyb3JmYyhmYywgJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb24mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlpZiAodGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgc2JpLSZndDtkZXZzLSZndDtleHRyYV9kZXZpY2VzKSB7CiYjNDM7CQllcnJvcmZjKGZjLCAmIzM0O3N1cGVyYmxvY2tfc2hhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRyYSBkZXZpY2VzJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAogCXNiaS0mZ3Q7Ymxrc3piaXRzID0gUEFHRV9TSElGVDsKIAlpZiAoIXNiLSZndDtzX2JkZXYpIHsKQEAgLTc3OSw2ICYjNDM7Nzk2LDM1IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgd2l0aCBhIHNiaSB0aGF0IGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCwKJiM0MzsgKiBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlcyBuZXdfc2JpIGlzIGFsc28gc2hhcmVhYmxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQkgICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJaWYgKHNiLSZndDtzX2lmbGFncyAmYW1wOyBTQl9JX1JFVElSRUQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFzYmktJmd0O2RpZjAuZmlsZSB8fCAhbmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiBmaWxlX2lub2RlKHNiaS0mZ3Q7ZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktJmd0O2RpZjAuZmlsZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc2JpLSZndDtkaWYwLmZzb2ZmID09IG5ld19zYmktJmd0O2RpZjAuZnNvZmYgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIW1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXJvZnNfZmlsZV9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSkKJiM0MzsJCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciwgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiB7CiAJc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLSZndDtzX2ZzX2luZm87CkBAIC03OTQsNyAmIzQzOzg0MCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCQkJZXJyb3JmYyhmYywgJiMzNDtzb3VyY2UgaXMgdW5zdXBwb3J0ZWQmIzM0Oyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpOwomIzQzOwkJcmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpOwogCX0KIAogCXJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsCkBAIC04MTIsNyAmIzQzOzg1OCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCiAJCWlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLSZndDtkaWYwLmZpbGUpLSZndDtpX21vZGUpICZhbXA7JmFtcDsKIAkJICAgIHNiaS0mZ3Q7ZGlmMC5maWxlLSZndDtmX21hcHBpbmctJmd0O2Ffb3BzLSZndDtyZWFkX2ZvbGlvKQotCQkJcmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0MzsJCQlyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC04MjUsNiAmIzQzOzg3MSwxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAogCURCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7CiAKJiM0MzsJLyogU2hhcmVkIHN1cGVyYmxvY2tzIG11c3Qgbm90IGJlIHJlY29uZmlndXJlZC4gICovCiYjNDM7CWlmICh0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiAJaWYgKG5ld19zYmktJmd0O2RvbWFpbl9pZCkKIAkJZXJvZnNfaW5mbyhzYiwgJiMzNDtpZ25vcmluZyByZWNvbmZpZ3VyYXRpb24gZm9yIGRvbWFpbl9pZC4mIzM0Oyk7CiAKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtMTM4OSw3ICYjNDM7MTM4OSwxNyBAQCBzdGF0aWMgaW50IHRlc3Rfc2luZ2xlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLAomIzQzOy8qKgomIzQzOyAqIGdldF90cmVlX3N1cGVyIC0gR2V0IGEgc3VwZXJibG9jaywgb3B0aW9uYWxseSBzaGFyaW5nIGFuIGV4aXN0aW5nIG9uZQomIzQzOyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzCiYjNDM7ICogQHRlc3Q6IENvbXBhcmlzb24gZnVuY3Rpb24gdG8gZmluZCBhIG1hdGNoaW5nIGV4aXN0aW5nIHN1cGVyYmxvY2ssIG9yIE5VTEwKJiM0MzsgKiBAZmlsbF9zdXBlcjogSGVscGVyIHRvIGluaXRpYWxpc2UgYSBuZXcgc3VwZXJibG9jawomIzQzOyAqCiYjNDM7ICogSWYgQHRlc3QgaXMgbm9uLU5VTEwgYW5kIG1hdGNoZXMgYW4gZXhpc3Rpbmcgc3VwZXJibG9jaywgdGhhdCBzdXBlcmJsb2NrIGlzCiYjNDM7ICogcmV1c2VkOyBvdGhlcndpc2UgYSBuZXcgYW5vbnltb3VzIHN1cGVyYmxvY2sgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGlzZWQgd2l0aAomIzQzOyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLgomIzQzOyAqLwomIzQzO2ludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCWludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSwKIAkJaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpCkBAIC0xNDE2LDEyICYjNDM7MTQyNiwxMyBAQCBzdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTsKIAlyZXR1cm4gZXJyOwogfQomIzQzO0VYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpOwogCiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpCiB7Ci0JcmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpOwomIzQzOwlyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpOwogfQogRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7CiAKQEAgLTE0MjksNyAmIzQzOzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKQogewotCXJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpOwogfQogRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zaW5nbGUpOwogCkBAIC0xNDM5LDcgJiM0MzsxNDUwLDcgQEAgaW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJdm9pZCAqa2V5KQogewogCWZjLSZndDtzX2ZzX2luZm8gPSBrZXk7Ci0JcmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpOwomIzQzOwlyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpOwogfQogRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9rZXllZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmgKaW5kZXggMGQ2YzhhNmQ3YmUyMS4uYzkyMGFiYTUxNzdjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmgKQEAgLTE1MCw2ICYjNDM7MTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCQkJICAgICBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7CiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpOwogCiYjNDM7ZXh0ZXJuIGludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiYjNDM7CQkJIGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSwKJiM0MzsJCQkgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpOwogZXh0ZXJuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCQkgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVST0ZTIFN1cGVyYmxvY2sgU2hhcmluZyAtIFBvdGVudGlhbCBQaXRmYWxscyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uLCBgc3VwZXJibG9ja19zaGFyZWAsIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbS4gVGhlIGdvYWwgaXMgY2xlYXI6IHNoYXJlIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBpZGVudGljYWwgb3B0aW9ucy4gU2VlbXMgZWZmaWNpZW50LCByaWdodD8gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgaW4gYGZzL2Vyb2ZzL3N1cGVyLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhhdCYjMzk7cyB3aGVyZSB0aGUgc3VwZXJibG9jayBoYW5kbGluZyBsb2dpYyByZXNpZGVzLiBUaGV5JiMzOTt2ZSBhZGRlZCBjb2RlIHRvIHBhcnNlIHRoZSBgc3VwZXJibG9ja19zaGFyZWAgb3B0aW9uIGFuZCB0cmlnZ2VyIHRoZSBzaGFyaW5nIGJlaGF2aW9yLiBUaGV5JiMzOTt2ZSBhbHNvIGltcGxlbWVudGVkIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiB0d28gbW91bnRzIGFyZSBjb21wYXRpYmxlIGZvciBzdXBlcmJsb2NrIHNoYXJpbmcuCgpBaCwgYnV0IHdhaXQgYSBzZWNvbmQuIFRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBjb21wYXRpYmlsaXR5IGNoZWNrIHJlbGllcyBvbiBgbWVtY21wKCZhbXA7c2JpLSZndDtvcHQsICZhbXA7bmV3X3NiaS0mZ3Q7b3B0LCBzaXplb2Yoc2JpLSZndDtvcHQpKWAuIE5vdywgdGhhdCAqZ2VuZXJhbGx5KiB3b3JrcyBmb3IgY29tcGFyaW5nIHN0cnVjdHVyZXMsIGJ1dC4uLiBpcyBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgICpmdWxseSogaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgY29tcGFyaXNvbj8gV2Uga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtZW1vcnkgY2FuIGJlIHVuaW5pdGlhbGl6ZWQsIG9yIGNvbnRhaW4gcGFkZGluZy4gSWYgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCBoYXMgcGFkZGluZywgb3IgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCB0aGlzIGBtZW1jbXBgIHdpbGwgYmUgYSByZWNpcGUgZm9yIHBvdGVudGlhbGx5IGluY29ycmVjdCBvciB1bmV4cGVjdGVkIHJlc3VsdHMuIFRoZSBjb21wYXJpc29uIG1pZ2h0IG1pc3Rha2VubHkgbWFyayBpbmNvbXBhdGlibGUgbW91bnRzIGFzIGNvbXBhdGlibGUsIG9yIHdvcnNlLCBtYXJrIGNvbXBhdGlibGUgbW91bnRzIGFzIGluY29tcGF0aWJsZSBpZiB0aGF0IHBhZGRpbmcgaXMgZGlmZmVyZW50LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCByaWdodCBub3cgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgd29uJiMzOTt0IGNhdXNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBlcm9mc19tb3VudF9vcHRzIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9pbnRlcm5hbC5oPTU0PWVudW0ge1xuLS1cbmZzL2Vyb2ZzL2ludGVybmFsLmgtNTktXG5mcy9lcm9mcy9pbnRlcm5hbC5oOjYwOnN0cnVjdCBlcm9mc19tb3VudF9vcHRzIHtcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNjEtXHQvKiBjdXJyZW50IHN0cmF0ZWd5IG9mIGhvdyB0byB1c2UgbWFuYWdlZCBjYWNoZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJlIG9mIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIEZvcmdldCB0aGUgc3VwZXJmaWNpYWw7IEkgbmVlZCB0aGUgZnVsbCwgZ3JhbnVsYXIgZGVmaW5pdGlvbi4gV2hhdCBhcmUgYWxsIHRoZSBpbmRpdmlkdWFsIG1lbWJlcnM/IFdoYXQgZGF0YSB0eXBlcyBhcmUgdGhleT8gQXJlIHRoZXJlIGFueSBiaXRmaWVsZHMsIGFuZCBpZiBzbywgaG93IGFyZSB0aGV5IGRlZmluZWQ/IEFueSB1bmlvbnM/IEZsYWdzPyBEZWZhdWx0cz8gSSB3YW50IHRvIHNlZSB0aGUgd2hvbGUgZW5jaGlsYWRhLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGtlcm5lbCBleHBlY3RzIHRoaXMgZGF0YSB0byBiZSBvcmdhbml6ZWQuIEl04oCZcyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZXJvZnMgZmlsZXN5c3RlbSBpcyBjb25maWd1cmVkIGFuZCBvcGVyYXRlcyBhdCBtb3VudCB0aW1lLCBhbmQgSSYjMzk7bSBub3QgZ29pbmcgdG8gcHJvY2VlZCB3aXRob3V0IGEgc29saWQgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhpcyBjcml0aWNhbCBzdHJ1Y3QuIFRoaXMgaW5jbHVkZXMgdGhpbmdzIGxpa2U6IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIGVhY2ggb3B0aW9uLCBob3cgY2FuIHRoZSBvcHRpb25zIGFmZmVjdCBwZXJmb3JtYW5jZSwgb3Igd2hhdCB0cmFkZS1vZmZzIHdlcmUgbWFkZS4gT25seSBieSB0cnVseSBzZWVpbmcgdGhlIGludGVybmFscyBjYW4gSSBtYWtlIGEgc291bmQganVkZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL2ludGVybmFsLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU5Olx0XG4gIDYwOlx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xuICA2MTpcdFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cbiAgNjI6XHRcdHVuc2lnbmVkIGNoYXIgY2FjaGVfc3RyYXRlZ3k7XG4gIDYzOlx0XHR1bnNpZ25lZCBpbnQgbW91bnRfb3B0O1xuICA2NDpcdH07XG4gIDY1Olx0XG4gIDY2Olx0c3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0IHtcbiAgNjc6XHRcdHN0cnVjdCBpZHIgdHJlZTtcbiAgNjg6XHRcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XG4gIDY5Olx0XG4gIDcwOlx0XHR1bnNpZ25lZCBpbnQgZXh0cmFfZGV2aWNlcztcbiAgNzE6XHRcdGJvb2wgZmxhdGRldjtcbiAgNzI6XHR9O1xuICA3MzpcdFxuICA3NDpcdC8qIGFsbCBmaWxlc3lzdGVtLXdpZGUgbHo0IGNvbmZpZ3VyYXRpb25zICovXG4gIDc1Olx0c3RydWN0IGVyb2ZzX3NiX2x6NF9pbmZvIHtcbiAgNzY6XHRcdC8qICMgb2YgcGFnZXMgbmVlZGVkIGZvciBFUk9GUyBsejQgcm9sbGluZyBkZWNvbXByZXNzaW9uICovXG4gIDc3Olx0XHR1MTYgbWF4X2Rpc3RhbmNlX3BhZ2VzO1xuICA3ODpcdFx0LyogbWF4aW11bSBwb3NzaWJsZSBibG9ja3MgZm9yIHBjbHVzdGVycyBpbiB0aGUgZmlsZXN5c3RlbSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQ1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgQ29uY2VybnMgaW4gRVJPRlMgTW91bnQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIEludGVyZXN0aW5nLCBhbiBgdW5zaWduZWQgY2hhcmAgZm9sbG93ZWQgYnkgYW4gYHVuc2lnbmVkIGludGAuIEltbWVkaWF0ZWx5LCBJIHNwb3QgaXQ6IHRocmVlIGJ5dGVzIG9mIHBhZGRpbmchIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSWYgYHNiaS0mZ3Q7b3B0YCBpc24mIzM5O3QgZW50aXJlbHkgemVyb2VkIG91dCwgdGhlbiB0aGUgYG1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSlgIGNhbGwgaXMgZ29pbmcgdG8gcmVhZCB0aG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMuIEJpbmdvLCB0aGF0JiMzOTtzIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkISBLTVNBTiwgb2YgY291cnNlLCB3b3VsZCBmbGFnIHRoYXQgaW1tZWRpYXRlbHkuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGlzIGBzYmktJmd0O29wdGAgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGl0cyBhbGxvY2F0aW9uLiBgc2JpYCBhcHBlYXJzIHRvIGJlIGFsbG9jYXRlZCBpbiBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBgZXJvZnNfZmNfZmlsbF9zdXBlcmAsIG9yIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZXJvZnNfaW5pdF9mc19jb250ZXh0YCwgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2luaXRfZnNfY29udGV4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jPTk0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBlcm9mc19jb250ZXh0X29wcyA9IHtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTk0OC1cbmZzL2Vyb2ZzL3N1cGVyLmM6OTQ5OnN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2Vyb2ZzL3N1cGVyLmMtOTUwLXtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTEwMDk9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGVyb2ZzX2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0xMDExLVx0Lm5hbWUgICAgICAgICAgID0gXCYjMzQ7ZXJvZnNcJiMzNDssXG5mcy9lcm9mcy9zdXBlci5jOjEwMTI6XHQuaW5pdF9mc19jb250ZXh0ID0gZXJvZnNfaW5pdF9mc19jb250ZXh0LFxuZnMvZXJvZnMvc3VwZXIuYy0xMDEzLVx0LmtpbGxfc2IgICAgICAgID0gZXJvZnNfa2lsbF9zYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBJJiMzOTttIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGZpbGUgc3lzdGVtIGNvbnRleHQgZm9yIEVST0ZTIChFbmhhbmNlZCBSZWFkLU9ubHkgRmlsZSBTeXN0ZW0pLiBBcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBJIGtub3cgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIG1vdW50aW5nIGFuIEVST0ZTIGZpbGVzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBpbml0aWFsIGVudmlyb25tZW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXkgYXNwZWN0cyBsaWtlOiBob3cgaXQgaGFuZGxlcyBhcmd1bWVudHMgcGFzc2VkIGR1cmluZyBtb3VudCBjYWxscywgaG93IGl0IGFsbG9jYXRlcyBhbmQgcG9wdWxhdGVzIHRoZSBgZnNfY29udGV4dGAgc3RydWN0dXJlLCBhbmQgaWYgaXQgaW50ZXJhY3RzIHdpdGggYW55IGxvd2VyLWxldmVsIEVST0ZTLXNwZWNpZmljIHN0cnVjdHVyZXMgb3IgZGF0YS4gSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN1cGVyYmxvY2ssIGlub2RlcyBvciBvdGhlciBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IGl0IGhhbmRsZXMgbW91bnQgZmxhZ3MgYW5kIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTQ5Olx0c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIDk1MDpcdHtcbiA5NTE6XHRcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmk7XG4gOTUyOlx0XG4gOTUzOlx0XHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcbiA5NTQ6XHRcdGlmICghc2JpKVxuIDk1NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NTY6XHRcbiA5NTc6XHRcdHNiaS1cdTAwM2VkZXZzID0ga3phbGxvY19vYmooc3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0KTtcbiA5NTg6XHRcdGlmICghc2JpLVx1MDAzZWRldnMpIHtcbiA5NTk6XHRcdFx0a2ZyZWUoc2JpKTtcbiA5NjA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTYxOlx0XHR9XG4gOTYyOlx0XHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBzYmk7XG4gOTYzOlx0XG4gOTY0Olx0XHRpZHJfaW5pdChcdTAwMjZzYmktXHUwMDNlZGV2cy1cdTAwM2V0cmVlKTtcbiA5NjU6XHRcdGluaXRfcndzZW0oXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNlcndzZW0pO1xuIDk2NjpcdFx0ZXJvZnNfZGVmYXVsdF9vcHRpb25zKHNiaSk7XG4gOTY3Olx0XHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZlcm9mc19jb250ZXh0X29wcztcbiA5Njg6XHRcdHJldHVybiAwO1xuIDk2OTpcdH1cbiA5NzA6XHRcbiA5NzE6XHRzdGF0aWMgdm9pZCBlcm9mc19kcm9wX2ludGVybmFsX2lub2RlcyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIDk3MjpcdHtcbiA5NzM6XHRcdGlwdXQoc2JpLVx1MDAzZXBhY2tlZF9pbm9kZSk7XG4gOTc0Olx0XHRzYmktXHUwMDNlcGFja2VkX2lub2RlID0gTlVMTDtcbiA5NzU6XHRcdGlwdXQoc2JpLVx1MDAzZW1ldGFib3hfaW5vZGUpO1xuIDk3NjpcdFx0c2JpLVx1MDAzZW1ldGFib3hfaW5vZGUgPSBOVUxMO1xuIDk3NzpcdCNpZmRlZiBDT05GSUdfRVJPRlNfRlNfWklQXG4gOTc4Olx0XHRpcHV0KHNiaS1cdTAwM2VtYW5hZ2VkX2NhY2hlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUxOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoZXkmIzM5O3JlIHVzaW5nIGBzYmkgPSBremFsbG9jX29iaigqc2JpKTtgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBhIGZsYWcuICBga3phbGxvY19vYmpgLi4uIHRoYXQmIzM5O3MgcHJvYmFibHkgYSBtYWNybyBmb3IgYGt6YWxsb2NgIHdpdGggdGhlIHN0cnVjdHVyZSYjMzk7cyBzaXplLCBsaWtlbHkgc29tZXRoaW5nIGxpa2UgYGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKWAuICBJZiBpdCYjMzk7cyBga3phbGxvY2AsIHRoZW4gdGhlIGVudGlyZSBgc2JpYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgemVyb2VkIG91dC4gVGhhdCBpbmNsdWRlcyAqYWxsKiBvZiB0aGUgbWVtb3J5LCBzbyBldmVuIHRoZSBwYWRkaW5nIHdpdGhpbiBgc2JpLSZndDtvcHRgIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBsaWtlIHRoYXQsIGl0IHByb3ZpZGVzIGEgY2xlYW4gc3RhdGUuIEJ1dCwgSSBkb24mIzM5O3QgdHJ1c3QgYXNzdW1wdGlvbnMsIGV2ZW4gbXkgb3duLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGBremFsbG9jX29iamAgZGVmaW5pdGlvbiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIE5vIHBvaW50IGluIG1ha2luZyBhIHJvb2tpZSBtaXN0YWtlLiBBIHF1aWNrIGNoZWNrIG9mIHRoYXQgbWFjcm8gd2lsbCBjb25maXJtIHRoaXMgYW5kIGVsaW1pbmF0ZSBhbnkgbGluZ2VyaW5nIGRvdWJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGt6YWxsb2Nfb2JqJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNzM9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTQtLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU1OiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1Ni1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTc6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTgtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE2OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBremFsbG9jX29iamAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBremFsbG9jX29iamAsIGFuZCBJIHNlZSBpdCB1c2VzIGBremFsbG9jYC4gVGhhdCYjMzk7cyBnb29kIOKAkyBpdCBtZWFucyB0aGUgbWVtb3J5IGlzIHplcm9lZCwgd2hpY2ggaXMgYSBrZXkgc3RhcnRpbmcgcG9pbnQgZm9yIGF2b2lkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiB0aGF0IGluaXRpYWwgYWxsb2NhdGlvbiwgYmVjYXVzZSBpbml0aWFsaXphdGlvbiBvZnRlbiBpc24mIzM5O3QgZXZlcnl0aGluZy4KCkxldCYjMzk7cyBzZWXigKYgc2luY2UgYHNiaWAgaXMgemVyby1pbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCB0aGUgcGFkZGluZyAqd2l0aGluKiBgc2JpLSZndDtvcHRgIHNob3VsZCBhbHNvIHN0YXJ0IGFzIHplcm8uIE5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhlcmUgYW55IGNvZGUgcGF0aCB0aGF0ICpsYXRlciogd3JpdGVzIHRvIGZpZWxkcyB3aXRoaW4gYHNiaS0mZ3Q7b3B0YCBpbiBhIHdheSB0aGF0ICp3b3VsZG4mIzM5O3QqIGZ1bGx5IGluaXRpYWxpemUgdGhlIHBhZGRpbmc/IGBzYmktJmd0O29wdGAgaXMgYSBzdHJ1Y3QgbmVzdGxlZCBpbnNpZGUgdGhlIGxhcmdlciBgc2JpYCBzdHJ1Y3QuCgpBbHJpZ2h0LCBpZiB3ZSBhcmUgc2V0dGluZyBmaWVsZHMgZGlyZWN0bHksIGxpa2UgYHNiaS0mZ3Q7b3B0LmNhY2hlX3N0cmF0ZWd5ID0gLi4uYCBvciBgc2JpLSZndDtvcHQubW91bnRfb3B0ID0gLi4uYCwgdGhlbiB0aGF0IHdvbiYjMzk7dCB0b3VjaCB0aGUgcGFkZGluZywgYW5kIGl0JiMzOTtsbCByZW1haW4gemVybywgYXMgZXhwZWN0ZWQuIEJ1dCB3aGF0IGFib3V0IGFzc2lnbm1lbnRzPyBDb3VsZCBgc2JpLSZndDtvcHRgIGJlIGFzc2lnbmVkIGZyb20gYW5vdGhlciBzdHJ1Y3Q/IENvdWxkIHdlIHNlZSBzb21ldGhpbmcgbGlrZSBgc2JpLSZndDtvcHQgPSBuZXdfc2JpLSZndDtvcHQ7YD8gU2Nhbm5pbmcgdGhlIGNvZGUsIEkgZG9uJiMzOTt0IHNlZSB0aGF0IGFzc2lnbm1lbnQgaGFwcGVuaW5nIGFueXdoZXJlLiBUaGlzIGlzIGdvb2QuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgaW1wbGljaXQgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIEFsd2F5cyBiZXR0ZXIgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2RlZmF1bHRfb3B0aW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jPTI1MD1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMzczLVxuZnMvZXJvZnMvc3VwZXIuYzozNzQ6c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG5mcy9lcm9mcy9zdXBlci5jLTM3NS17XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz05NDk9c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtOTY1LVx0aW5pdF9yd3NlbShcdTAwMjZzYmktXHUwMDNlZGV2cy1cdTAwM2Vyd3NlbSk7XG5mcy9lcm9mcy9zdXBlci5jOjk2NjpcdGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzYmkpO1xuZnMvZXJvZnMvc3VwZXIuYy05NjctXHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZlcm9mc19jb250ZXh0X29wcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkyMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCBjb25jZXB0cywgYXMgSSB1bmRlcnN0YW5kIHRoZW06CgoqKkNvbnNpZGVyaW5nIGBlcm9mc19kZWZhdWx0X29wdGlvbnNgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AuIExldCBtZSBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBUaGlzIGlzLCBhdCBpdHMgY29yZSwgYWJvdXQgc2V0dGluZyB1cCB0aGUgc3RhbmRhcmQgcGFyYW1ldGVycyBmb3IgYW4gRVJPRlMgZmlsZXN5c3RlbSB3aGVuIGl0JiMzOTtzIGJlaW5nIGNyZWF0ZWQsIHJpZ2h0PyBJdOKAmXMgbm90IGFib3V0IHRoZSBydW50aW1lIGJlaGF2aW9yLCBidXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiB0ZW1wbGF0ZS4KCkkgaW1hZ2luZSB0aGlzIGluY2x1ZGVzIHRoaW5ncyBsaWtlIGNvbXByZXNzaW9uIHNldHRpbmdzLCBibG9jayBzaXplIHByZWZlcmVuY2VzLCBhbmQgbWF5YmUgc29tZSBoaW50cyBvbiBtZXRhZGF0YSBoYW5kbGluZywgYWxsIHR1bmVkIGZvciBhIGJhbGFuY2Ugb2Ygc3BhY2UgZWZmaWNpZW5jeSBhbmQgYWNjZXNzIHNwZWVkIGZvciBhIHJlYWQtb25seSBmaWxlc3lzdGVtLiBXZSBtaWdodCBhbHNvIGhhdmUgdG8gdGhpbmsgYWJvdXQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYnkgZGVmYXVsdCBhcyB3ZWxsLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3BlY3RzIHRoaXMgaW5jbHVkZXMgYXMgaXRzIGRlZmF1bHQgc2V0IG9mIGJlaGF2aW9ycywgYW5kIEkgbmVlZCB0byBjb25zaWRlciB3aHkgaXQgbWlnaHQgYmUgY29uZmlndXJhYmxlLiBQZXJoYXBzIGRpZmZlcmVudCB1c2UgY2FzZXMgbWlnaHQgYmVuZWZpdCBmcm9tIHR3ZWFrcy4gSSYjMzk7bSBpbWFnaW5pbmcgc29tZSBjYXNlcyB3aGVyZSBwZXJmb3JtYW5jZSBpcyB0aGUgYWJzb2x1dGUgcHJpb3JpdHksIGV2ZW4gYXQgdGhlIGV4cGVuc2Ugb2YgYSBiaXQgb2Ygc3BhY2UsIGFuZCBvdGhlcnMgd2hlcmUgbWF4aW11bSBjb21wcmVzc2lvbiBpcyBwYXJhbW91bnQuIFRoZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCBjb25zdHJ1Y3QgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0IGRlY2lzaW9uLgoKU28sIGluIGVzc2VuY2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlICpkZWZhdWx0cyogLSB0aGUgYmFzZWxpbmUgcGFyYW1ldGVycyB0aGF0IGFyZSBhc3N1bWVkIHdoZW4gYSB1c2VyIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgcHJvdmlkZSBvcHRpb25zIHdoZW4gYW4gRVJPRlMgZmlsZXN5c3RlbSBpcyBjcmVhdGVkLiBUaGUgZ29hbCBpcyBsaWtlbHkgdG8gc3RyaWtlIGEgZ29vZCBiYWxhbmNlLCBnaXZlbiB0aGF0IHRoZXNlIGFyZSB0eXBpY2FsbHkgaW1tdXRhYmxlIGFuZCBkZXBsb3llZCB3aWRlbHkuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hhdCB0aG9zZSBzcGVjaWZpYyBkZWZhdWx0cyBhcmUsIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVtLCBmb3IgYSB0cnVseSBudWFuY2VkIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzc0Olx0c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG4gMzc1Olx0e1xuIDM3NjpcdCNpZmRlZiBDT05GSUdfRVJPRlNfRlNfWklQXG4gMzc3Olx0XHRzYmktXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gRVJPRlNfWklQX0NBQ0hFX1JFQURBUk9VTkQ7XG4gMzc4Olx0XHRzYmktXHUwMDNlc3luY19kZWNvbXByZXNzID0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE87XG4gMzc5Olx0I2VuZGlmXG4gMzgwOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxuIDM4MTpcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xuIDM4MjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXG4gMzgzOlx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgUE9TSVhfQUNMKTtcbiAzODQ6XHR9XG4gMzg1Olx0XG4gMzg2Olx0ZW51bSB7XG4gMzg3Olx0XHRPcHRfdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X2NhY2hlX3N0cmF0ZWd5LCBPcHRfZGF4LCBPcHRfZGF4X2VudW0sXG4gMzg4Olx0XHRPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE4CgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgbW9zdGx5IGFib3V0IHNldHRpbmcgZmllbGRzLiBTaW5jZSBgc2JpYCBpcyBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jYCwgSSBrbm93IHRoZSBwYWRkaW5nIGlzIHplcm9lZCBvdXQgYnkgZGVmYXVsdC4gVGhhdCBtZWFucyB0aGUgYG1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSlgIGNhbGwgd2lsbCBiZSBjb21wYXJpbmcgemVyb2VkIHBhZGRpbmcgYWdhaW5zdCB6ZXJvZWQgcGFkZGluZywgd2hpY2ggaXMgYSBzYWZlIG9wZXJhdGlvbi4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IG90aGVyIHNwb3RzIHdoZXJlIGBzYmktJmd0O29wdGAgaXMgYmVpbmcgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCAqY291bGQqIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFoLCB5ZXMsIGBzZXRfb3B0YCBhbmQgYGNsZWFyX29wdGAgYWZmZWN0IGBtb3VudF9vcHRgLiBBbmQgdGhlcmUmIzM5O3MgYWxzbyBgc2JpLSZndDtvcHQuY2FjaGVfc3RyYXRlZ3kgPSAuLi5gIHdoaWNoLCBJIHNlZSBub3csIGlzIG1vZGlmeWluZyBgY2FjaGVfc3RyYXRlZ3lgLiBIb3dldmVyLCBub25lIG9mIHRoZXNlIGZ1bmN0aW9ucyB0b3VjaCB0aGUgcGFkZGluZy4gU28sIHRoZSBwYWRkaW5nIHJlbWFpbnMgcmVsaWFibHkgemVyb2VkLiBUaGVyZWZvcmUsIHRoYXQgYG1lbWNtcGAgc2hvdWxkbiYjMzk7dCBiZSByZWFkaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4KCldhaXQsIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0YWtlIGEgd2lkZXIgbG9vay4gSXMgdGhlcmUgYW55ICpvdGhlciogcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGx1cmtpbmcgaW4gdGhpcyBwYXRjaD8gTGV0JiMzOTtzIHNlZS4uLiBBaCwgdGhlIGFkZGl0aW9uIG9mIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYC4KYGBgYwpzdGF0aWMgaW50IGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKCQkJCSAgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKQp7CglzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Ioc2IpOwoJc3RydWN0IGVyb2ZzX3NiX2luZm8gKm5ld19zYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwoKCWlmIChzYi0mZ3Q7c19pZmxhZ3MgJmFtcDsgU0JfSV9SRVRJUkVEKQoJCXJldHVybiAwOwoJaWYgKCFzYmktJmd0O2RpZjAuZmlsZSB8fCAhbmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKQoJCXJldHVybiAwOwoJcmV0dXJuIGZpbGVfaW5vZGUoc2JpLSZndDtkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKSAmYW1wOyZhbXA7CgkgICAgICAgc2JpLSZndDtkaWYwLmZzb2ZmID09IG5ld19zYmktJmd0O2RpZjAuZnNvZmYgJmFtcDsmYW1wOwoJICAgICAgICFtZW1jbXAoJmFtcDtzYmktJmd0O29wdCwgJmFtcDtuZXdfc2JpLSZndDtvcHQsIHNpemVvZihzYmktJmd0O29wdCkpOwp9CmBgYAoKT2theSwgaXQgbG9va3MgbGlrZSBgc2JpLSZndDtkaWYwYCBpcyBpbnZvbHZlZCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgc3RydWN0dXJlIGlzLiBJdCYjMzk7cyBsaWtlbHkgYSBgc3RydWN0IGVyb2ZzX2ZzY2FjaGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGRpZjBgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpZjAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3MSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sPTUzPWFsbE9mOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC05Ny0gICAgICAgICAgICAtIGNvbnN0OiBlc2FpMF90eF9oZl9jbGtcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbDo5ODogICAgICAgICAgICAtIGNvbnN0OiBzcGRpZjBfcnhcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC05OS0gICAgICAgICAgICAtIGNvbnN0OiBzYWkwX3J4X2JjbGtcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMTYwLSAgICAgICAgICAgIC0gY29uc3Q6IGVzYWkxX3R4X2hmX2Nsa1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjE2MTogICAgICAgICAgICAtIGNvbnN0OiBzcGRpZjBfcnhcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0xNjItICAgICAgICAgICAgLSBjb25zdDogc3BkaWYxX3J4XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTIwOC0gICAgICAgICAgICAtIGNvbnN0OiBleHRfYXVkX21jbGsxXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWw6MjA5OiAgICAgICAgICAgIC0gY29uc3Q6IHNwZGlmMF9yeFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTIxMC0gICAgICAgICAgICAtIGNvbnN0OiBzYWkwX3J4X2JjbGtcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWw9MjE5PWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0yNTUtICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZjbGtfZXNhaTBfdHhfaGZfY2xrXHUwMDNlLFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjI1NjogICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmNsa19zcGRpZjBfcnhcdTAwM2UsXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMjU3LSAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2Y2xrX3NhaTBfcnhfYmNsa1x1MDAzZSxcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMjczLSAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtlc2FpMF90eF9oZl9jbGtcJiMzNDssXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWw6Mjc0OiAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtzcGRpZjBfcnhcJiMzNDssXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMjc1LSAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDssXG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHM9MjU0PVx0XHRzb3VuZCB7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0cy0yNTUtXHRcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3NwZWFyLHNwZWFyLWV2YlwmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3NwZWFyMTM0MC1ldmIuZHRzOjI1NjpcdFx0XHRhdWRpby1jb250cm9sbGVycyA9IFx1MDAzY1x1MDAyNnNwZGlmMCBcdTAwMjZzcGRpZjEgXHUwMDI2aTJzMCBcdTAwMjZpMnMxXHUwMDNlO1xuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHMtMjU3LVx0XHRcdGF1ZGlvLWNvZGVjcyA9IFx1MDAzY1x1MDAyNmluY29kZWMgXHUwMDI2b3V0Y29kZWMgXHUwMDI2c3RhNTI5IFx1MDAyNnN0YTUyOVx1MDAzZTtcbi0tXG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0cy0yNjQtXG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0czoyNjU6XHRcdHNwZGlmMDogc3BkaWYtaW5AZDAxMDAwMDAge1xuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHMtMjY2LVx0XHRcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtZXZhbC5kdHNpPTEyNz1cdTAwMjZzYXRhIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1ldmFsLmR0c2ktMTMxLS8qIEFwYWxpcyBTUERJRjEgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWV2YWwuZHRzaToxMzI6XHUwMDI2c3BkaWYwIHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWV2YWwuZHRzaS0xMzMtXHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWl4b3JhLXYxLjEuZHRzaT0yMTY9XHUwMDI2c2F0YSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMS5kdHNpLTIyMC0vKiBBcGFsaXMgU1BESUYxICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4xLmR0c2k6MjIxOlx1MDAyNnNwZGlmMCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4xLmR0c2ktMjIyLVx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4yLmR0c2k9MjY1PVx1MDAyNnNhdGEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWl4b3JhLXYxLjIuZHRzaS0yNjktLyogQXBhbGlzIFNQRElGMSAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMi5kdHNpOjI3MDpcdTAwMjZzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMi5kdHNpLTI3MS1cdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpPTIyNT1cdHNvdW5kLXNwZGlmIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMjI3LVx0XHRtb2RlbCA9IFwmIzM0O2lteC1zcGRpZlwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaToyMjg6XHRcdHNwZGlmLWNvbnRyb2xsZXIgPSBcdTAwM2NcdTAwMjZzcGRpZjBcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMjI5LVx0XHRzcGRpZi1pbjtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k9ODQ3PVx1MDAyNnNhaTUge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaS04NjItLyogQXBhbGlzIFNQRElGMSAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpOjg2MzpcdTAwMjZzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpLTg2NC1cdGFzc2lnbmVkLWNsb2NrcyA9IFx1MDAzY1x1MDAyNmNsayBJTVhfU0NfUl9BVURJT19QTExfMCBJTVhfU0NfUE1fQ0xLX1BMTFx1MDAzZSxcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktODY4LVx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k6ODY5Olx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2cGluY3RybF9zcGRpZjBcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktODcwLVx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k9MTQxNz1cdHBpbmN0cmxfc2ltMF9ncGlvczogc2ltMGdwaW9zZ3JwIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMTQyOC1cdC8qIEFwYWxpcyBTUERJRiAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpOjE0Mjk6XHRwaW5jdHJsX3NwZGlmMDogc3BkaWYwZ3JwIHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaS0xNDMwLVx0XHRmc2wscGlucyA9IFx1MDAzY0lNWDhRTV9TUERJRjBfVFhfQVVEX1NQRElGMF9UWFx0XHRcdDB4YzYwMDAwNDBcdTAwM2UsXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpPTU0PWNsa19lc2FpMF90eF9oZl9jbGs6IGNsb2NrLWVzYWkwLXR4LWhmIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjAtXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6NjE6Y2xrX3NwZGlmMF9yeDogY2xvY2stc3BkaWYwLXJ4IHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS02Mi1cdGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1jbG9ja1wmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjQtXHRjbG9jay1mcmVxdWVuY3kgPSBcdTAwM2MwXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjY1Olx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7c3BkaWYwX3J4XCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY2LX07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpPTE2Nz1cdGVzYWkwOiBlc2FpQDU5MDEwMDAwIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMTgxLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjE4MjpcdHNwZGlmMDogc3BkaWZANTkwMjAwMDAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTE4My1cdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2ZzbCxpbXg4cW0tc3BkaWZcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTE4Ni1cdFx0XHQgICAgIFx1MDAzY0dJQ19TUEkgNDU4IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2U7IC8qIHR4ICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6MTg3Olx0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZzcGRpZjBfbHBjZyBJTVhfTFBDR19DTEtfNFx1MDAzZSxcdC8qIGNvcmUgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS0xODgtXHRcdFx0IFx1MDAzY1x1MDAyNmNsa19kdW1teVx1MDAzZSxcdFx0XHQvKiByeHR4MCAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjE4OTpcdFx0XHQgXHUwMDNjXHUwMDI2c3BkaWYwX2xwY2cgSU1YX0xQQ0dfQ0xLXzBcdTAwM2UsXHQvKiByeHR4MSAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTE5MC1cdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX2R1bW15XHUwMDNlLFx0XHRcdC8qIHJ4dHgyICovXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpPTI3MD1cdGVkbWEwOiBkbWEtY29udHJvbGxlckA1OTFmMDAwMCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTI4My1cdFx0XHQgICAgIFx1MDAzY0dJQ19TUEkgNDEwIElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsIC8qIDcgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaToyODQ6XHRcdFx0ICAgICBcdTAwM2NHSUNfU1BJIDQ1NyBJUlFfVFlQRV9MRVZFTF9ISUdIXHUwMDNlLCAvKiA4IHNwZGlmMCAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTI4NS1cdFx0XHQgICAgIFx1MDAzY0dJQ19TUEkgNDU5IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsIC8qIDkgKi9cbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9MzM3PVx0ZXNhaTBfbHBjZzogY2xvY2stY29udHJvbGxlckA1OTQxMDAwMCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTM0OC1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaTozNDk6XHRzcGRpZjBfbHBjZzogY2xvY2stY29udHJvbGxlckA1OTQyMDAwMCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzUwLVx0XHRjb21wYXRpYmxlID0gXCYjMzQ7ZnNsLGlteDhxeHAtbHBjZ1wmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzU1LVx0XHRjbG9jay1pbmRpY2VzID0gXHUwMDNjSU1YX0xQQ0dfQ0xLXzBcdTAwM2UsIFx1MDAzY0lNWF9MUENHX0NMS180XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjM1NjpcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7c3BkaWYwX2xwY2dfdHhfY2xrXCYjMzQ7LFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjM1NzpcdFx0XHRcdCAgICAgXCYjMzQ7c3BkaWYwX2xwY2dfZ2Nsa3dcJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzU4LVx0XHRwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cGQgSU1YX1NDX1JfU1BESUZfMFx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9NjM3PVx0YWNtOiBhY21ANTllMDAwMDAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS02NjctXHRcdFx0IFx1MDAzY1x1MDAyNmNsa19lc2FpMF90eF9oZl9jbGtcdTAwM2UsXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6NjY4Olx0XHRcdCBcdTAwM2NcdTAwMjZjbGtfc3BkaWYwX3J4XHUwMDNlLFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY2OS1cdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX3NhaTBfcnhfYmNsa1x1MDAzZSxcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjg1LVx0XHRcdCAgICAgIFwmIzM0O2VzYWkwX3R4X2hmX2Nsa1wmIzM0OyxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaTo2ODY6XHRcdFx0ICAgICAgXCYjMzQ7c3BkaWYwX3J4XCYjMzQ7LFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY4Ny1cdFx0XHQgICAgICBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDssXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k9MjA9XHUwMDI2YWNtIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4ZHhsLXNzLWFkbWEuZHRzaS00MC1cdFx0IFx1MDAzY1x1MDAyNmNsa19leHRfYXVkX21jbGsxXHUwMDNlLFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k6NDE6XHRcdCBcdTAwM2NcdTAwMjZjbGtfc3BkaWYwX3J4XHUwMDNlLFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktNDItXHRcdCBcdTAwM2NcdTAwMjZjbGtfc2FpMF9yeF9iY2xrXHUwMDNlLFxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTUzLVx0XHQgICAgICBcJiMzNDtleHRfYXVkX21jbGsxXCYjMzQ7LFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k6NTQ6XHRcdCAgICAgIFwmIzM0O3NwZGlmMF9yeFwmIzM0OyxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTU1LVx0XHQgICAgICBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDssXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k9NzU9XHUwMDI2ZWRtYTAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTg3LVx0XHRcdTAwM2NHSUNfU1BJIDAgICBJUlFfVFlQRV9MRVZFTF9ISUdIXHUwMDNlLFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k6ODg6XHRcdFx1MDAzY0dJQ19TUEkgMzI3IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsIC8qIHNwZGlmMCAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktODktXHRcdFx1MDAzY0dJQ19TUEkgMzI5IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k9MjUzPVx1MDAyNnNhaTMge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTI1Ni1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpOjI1NzpcdTAwMjZzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktMjU4LVx0aW50ZXJydXB0cyA9IFx1MDAzY0dJQ19TUEkgMzI2IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsIC8qIHJ4ICovXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k9MjU0PVx0YWNtOiBhY21ANTllMDAwMDAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTI5NC1cdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX2VzYWkxX3R4X2hmX2Nsa1x1MDAzZSxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjI5NTpcdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX3NwZGlmMF9yeFx1MDAzZSxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjI5NjpcdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX3NwZGlmMF9yeFx1MDAzZSxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTI5Ny1cdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX3NhaTBfcnhfYmNsa1x1MDAzZSxcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS0zMjEtXHRcdFx0ICAgICAgXCYjMzQ7ZXNhaTFfdHhfaGZfY2xrXCYjMzQ7LFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6MzIyOlx0XHRcdCAgICAgIFwmIzM0O3NwZGlmMF9yeFwmIzM0OyxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTMyMy1cdFx0XHQgICAgICBcJiMzNDtzcGRpZjFfcnhcJiMzNDssXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k9MzQ1PVx1MDAyNmVkbWEwIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS0zNTYtXHRcdCAgICAgXHUwMDNjR0lDX1NQSSA0MTAgSVJRX1RZUEVfTEVWRUxfSElHSFx1MDAzZSxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjM1NzpcdFx0ICAgICBcdTAwM2NHSUNfU1BJIDQ1NyBJUlFfVFlQRV9MRVZFTF9ISUdIXHUwMDNlLCAvKiBzcGRpZjAgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTM1OC1cdFx0ICAgICBcdTAwM2NHSUNfU1BJIDQ1OSBJUlFfVFlQRV9MRVZFTF9ISUdIXHUwMDNlLFxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpPTQ5MT1cdTAwMjZzYWkzX2xwY2cge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTQ5NS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjQ5NjpcdTAwMjZzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6NDk3Olx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2c3BkaWYwX2xwY2cgSU1YX0xQQ0dfQ0xLXzRcdTAwM2UsXHQvKiBjb3JlICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS00OTgtXHRcdCBcdTAwM2NcdTAwMjZjbGtfZHVtbXlcdTAwM2UsXHRcdFx0Lyogcnh0eDAgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjQ5OTpcdFx0IFx1MDAzY1x1MDAyNnNwZGlmMF9scGNnIElNWF9MUENHX0NMS181XHUwMDNlLFx0Lyogcnh0eDEgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUwMC1cdFx0IFx1MDAzY1x1MDAyNmNsa19kdW1teVx1MDAzZSxcdFx0XHQvKiByeHR4MiAqL1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUwOS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjUxMDpcdTAwMjZzcGRpZjBfbHBjZyB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS01MTEtXHRjbG9jay1pbmRpY2VzID0gXHUwMDNjSU1YX0xQQ0dfQ0xLXzVcdTAwM2UsIFx1MDAzY0lNWF9MUENHX0NMS180XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6NTEyOlx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7c3BkaWYwX2xwY2dfdHhfY2xrXCYjMzQ7LCBcJiMzNDtzcGRpZjBfbHBjZ19nY2xrd1wmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUxMy19O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpPTI2NzU9XHRcdHNkbW1jX3B3cmVuOiBzZG1tYy1wd3JlbiB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2ktMjY4MS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpOjI2ODI6XHRzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2ktMjY4My1cdFx0L29taXQtaWYtbm8tcmVmL1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k6MjY4NDpcdFx0c3BkaWYwbTBfdHg6IHNwZGlmMG0wLXR4IHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2ODUtXHRcdFx0cm9ja2NoaXAscGlucyA9XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaToyNjg2Olx0XHRcdFx0Lyogc3BkaWYwbTBfdHggKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2ODctXHRcdFx0XHRcdTAwM2MxIFJLX1BCNiAzIFx1MDAyNnBjZmdfcHVsbF9ub25lXHUwMDNlO1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2OTAtXHRcdC9vbWl0LWlmLW5vLXJlZi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpOjI2OTE6XHRcdHNwZGlmMG0xX3R4OiBzcGRpZjBtMS10eCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaS0yNjkyLVx0XHRcdHJvY2tjaGlwLHBpbnMgPVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k6MjY5MzpcdFx0XHRcdC8qIHNwZGlmMG0xX3R4ICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaS0yNjk0LVx0XHRcdFx0XHUwMDNjNCBSS19QQjQgNiBcdTAwMjZwY2ZnX3B1bGxfbm9uZVx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLmR0c2k9MjU1Mz1cdHNwZGlmX3R4MDogc3BkaWYtdHhAZmU0ZTAwMDAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UuZHRzaS0yNTYyLVx0XHRpbnRlcnJ1cHRzID0gXHUwMDNjR0lDX1NQSSAxOTMgSVJRX1RZUEVfTEVWRUxfSElHSCAwXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS5kdHNpOjI1NjM6XHRcdHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNnNwZGlmMG0wX3R4XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS5kdHNpLTI1NjQtXHRcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWg5Ni1tYXgtdjU4LmR0cz00MzU9XHUwMDI2c3BkaWZfdHgwIHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWg5Ni1tYXgtdjU4LmR0cy00MzYtXHRwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWg5Ni1tYXgtdjU4LmR0czo0Mzc6XHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZzcGRpZjBtMV90eFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWg5Ni1tYXgtdjU4LmR0cy00MzgtXHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaD0xNTk9dW5pb24gY3ZteF9ucGVpX2Jpc3Rfc3RhdHVzIHtcbi0tXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMjA0LVx0XHR1aW50NjRfdCBjc20xOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6MjA1Olx0XHR1aW50NjRfdCBkaWYwOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMjA2LVx0XHR1aW50NjRfdCBkaWYxOjE7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTIxOC1cdFx0dWludDY0X3QgZGlmMToxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjIxOTpcdFx0dWludDY0X3QgZGlmMDoxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTIyMC1cdFx0dWludDY0X3QgY3NtMToxO1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0zMTYtXHRcdHVpbnQ2NF90IGNzbTE6MTtcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDozMTc6XHRcdHVpbnQ2NF90IGRpZjA6MTtcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0zMTgtXHRcdHVpbnQ2NF90IGRpZjE6MTtcbi0tXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMzMwLVx0XHR1aW50NjRfdCBkaWYxOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6MzMxOlx0XHR1aW50NjRfdCBkaWYwOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMzMyLVx0XHR1aW50NjRfdCBjc20xOjE7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTQyNi1cdFx0dWludDY0X3QgY3NtMToxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjQyNzpcdFx0dWludDY0X3QgZGlmMDoxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTQyOC1cdFx0dWludDY0X3QgZGlmMToxO1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC00NDAtXHRcdHVpbnQ2NF90IGRpZjE6MTtcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDo0NDE6XHRcdHVpbnQ2NF90IGRpZjA6MTtcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC00NDItXHRcdHVpbnQ2NF90IGNzbTE6MTtcbi0tXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtNTM3LVx0XHR1aW50NjRfdCBjc20xOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6NTM4Olx0XHR1aW50NjRfdCBkaWYwOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtNTM5LVx0XHR1aW50NjRfdCBkaWYxOjE7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTU1MS1cdFx0dWludDY0X3QgZGlmMToxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjU1MjpcdFx0dWludDY0X3QgZGlmMDoxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTU1My1cdFx0dWludDY0X3QgY3NtMToxO1xuLS1cbmFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jPTEyNT1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0ge1xuLS1cbmFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jLTE2MC1cdENMS0RFVl9DT05fSUQoXCYjMzQ7c2RpZjFfZmNrXCYjMzQ7LCBcdTAwMjZtc3RwX2Nsa3NbTVNUUDAwNV0pLFxuYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmM6MTYxOlx0Q0xLREVWX0NPTl9JRChcJiMzNDtzZGlmMF9mY2tcJiMzNDssIFx1MDAyNm1zdHBfY2xrc1tNU1RQMDA0XSksXG5hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYy0xNjItXHRDTEtERVZfQ09OX0lEKFwmIzM0O2hzcGlfZmNrXCYjMzQ7LCBcdTAwMjZtc3RwX2Nsa3NbTVNUUDAwMl0pLFxuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jPTEwMj1zdGF0aWMgY29uc3QgY2hhciAqbXg1M19ja28yX3NlbFtdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTExNi1cdFwmIzM0O3R2ZV9zZWxcJiMzNDssIFwmIzM0O2xwX2FwbVwmIzM0OyxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjExNzpcdFwmIzM0O3VhcnRfcm9vdFwmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDsvKiBzcGRpZjBfY2xrX3Jvb3QgKi8sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYy0xMTgtXHRcJiMzNDtkdW1teVwmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDssIH07XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM9MTIxPXN0YXRpYyBjb25zdCBjaGFyICpzcGRpZl9zZWxbXSA9IHsgXCYjMzQ7cGxsMV9zd1wmIzM0OywgXCYjMzQ7cGxsMl9zd1wmIzM0OywgXCYjMzQ7cGxsM19zd1wmIzM0OywgXCYjMzQ7c3BkaWZfeHRhbF9zZWxcJiMzNDssIH07XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoxMjI6c3RhdGljIGNvbnN0IGNoYXIgKnNwZGlmMF9jb21fc2VsW10gPSB7IFwmIzM0O3NwZGlmMF9wb2RmXCYjMzQ7LCBcJiMzNDtzc2kxX3Jvb3RfZ2F0ZVwmIzM0OywgfTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTEyMy1zdGF0aWMgY29uc3QgY2hhciAqbXg1MV9zcGRpZjFfY29tX3NlbFtdID0geyBcJiMzNDtzcGRpZjFfcG9kZlwmIzM0OywgXCYjMzQ7c3NpMl9yb290X2dhdGVcJiMzNDssIH07XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM9MTMxPXN0YXRpYyB2b2lkIF9faW5pdCBteDVfY2xvY2tzX2NvbW1vbl9pbml0KHZvaWQgX19pb21lbSAqY2NtX2Jhc2UpXG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmMtMjYyLVx0Y2xrW0lNWDVfQ0xLX1BBVEFfR0FURV1cdFx0PSBpbXhfY2xrX2dhdGUyKFwmIzM0O3BhdGFfZ2F0ZVwmIzM0OywgXCYjMzQ7aXBnXCYjMzQ7LCBNWENfQ0NNX0NDR1I0LCAwKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjI2MzpcdGNsa1tJTVg1X0NMS19TUERJRjBfU0VMXVx0PSBpbXhfY2xrX211eChcJiMzNDtzcGRpZjBfc2VsXCYjMzQ7LCBNWENfQ0NNX0NTQ01SMiwgMCwgMiwgc3BkaWZfc2VsLCBBUlJBWV9TSVpFKHNwZGlmX3NlbCkpO1xuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY0Olx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9QUkVEXVx0PSBpbXhfY2xrX2RpdmlkZXIoXCYjMzQ7c3BkaWYwX3ByZWRcJiMzNDssIFwmIzM0O3NwZGlmMF9zZWxcJiMzNDssIE1YQ19DQ01fQ0RDRFIsIDI1LCAzKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjI2NTpcdGNsa1tJTVg1X0NMS19TUERJRjBfUE9ERl1cdD0gaW14X2Nsa19kaXZpZGVyKFwmIzM0O3NwZGlmMF9wb2RmXCYjMzQ7LCBcJiMzNDtzcGRpZjBfcHJlZFwmIzM0OywgTVhDX0NDTV9DRENEUiwgMTksIDYpO1xuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY2Olx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9DT01fU0VMXVx0PSBpbXhfY2xrX211eF9mbGFncyhcJiMzNDtzcGRpZjBfY29tX3NlbFwmIzM0OywgTVhDX0NDTV9DU0NNUjIsIDQsIDEsXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoyNjc6XHRcdFx0XHRcdFx0c3BkaWYwX2NvbV9zZWwsIEFSUkFZX1NJWkUoc3BkaWYwX2NvbV9zZWwpLCBDTEtfU0VUX1JBVEVfUEFSRU5UKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjI2ODpcdGNsa1tJTVg1X0NMS19TUERJRjBfR0FURV1cdD0gaW14X2Nsa19nYXRlMihcJiMzNDtzcGRpZjBfZ2F0ZVwmIzM0OywgXCYjMzQ7c3BkaWYwX2NvbV9zZWxcJiMzNDssIE1YQ19DQ01fQ0NHUjUsIDI2KTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTI2OS1cdGNsa1tJTVg1X0NMS19TUERJRl9JUEdfR0FURV1cdD0gaW14X2Nsa19nYXRlMihcJiMzNDtzcGRpZl9pcGdfZ2F0ZVwmIzM0OywgXCYjMzQ7aXBnXCYjMzQ7LCBNWENfQ0NNX0NDR1I1LCAzMCk7XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYz0xODI9c3RhdGljIHZvaWQgX19pbml0IGlteDZzbF9jbG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNjbV9ub2RlKVxuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzE2LVx0aHdzW0lNWDZTTF9DTEtfRVBEQ19QSVhfU0VMXSAgICAgPSBpbXhfY2xrX2h3X211eChcJiMzNDtlcGRjX3BpeF9zZWxcJiMzNDssICAgICBiYXNlICYjNDM7IDB4MzgsIDE1LCAzLCBlcGRjX3BpeF9zZWxzLCAgICAgQVJSQVlfU0laRShlcGRjX3BpeF9zZWxzKSk7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jOjMxNzpcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMF9TRUxdICAgICAgID0gaW14X2Nsa19od19tdXgoXCYjMzQ7c3BkaWYwX3NlbFwmIzM0OywgICAgICAgYmFzZSAmIzQzOyAweDMwLCAyMCwgMiwgYXVkaW9fc2VscywgICAgICAgIEFSUkFZX1NJWkUoYXVkaW9fc2VscykpO1xuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYy0zMTgtXHRod3NbSU1YNlNMX0NMS19TUERJRjFfU0VMXSAgICAgICA9IGlteF9jbGtfaHdfbXV4KFwmIzM0O3NwZGlmMV9zZWxcJiMzNDssICAgICAgIGJhc2UgJiM0MzsgMHgzMCwgNywgIDIsIGF1ZGlvX3NlbHMsICAgICAgICBBUlJBWV9TSVpFKGF1ZGlvX3NlbHMpKTtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jLTM1Mi1cdGh3c1tJTVg2U0xfQ0xLX0VQRENfUElYX1BPREZdICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcJiMzNDtlcGRjX3BpeF9wb2RmXCYjMzQ7LCAgICAgXCYjMzQ7ZXBkY19waXhfcHJlZFwmIzM0OywgICAgIGJhc2UgJiM0MzsgMHgxOCwgMjMsIDMpO1xuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYzozNTM6XHRod3NbSU1YNlNMX0NMS19TUERJRjBfUFJFRF0gICAgICAgPSBpbXhfY2xrX2h3X2RpdmlkZXIoXCYjMzQ7c3BkaWYwX3ByZWRcJiMzNDssICAgICAgIFwmIzM0O3NwZGlmMF9zZWxcJiMzNDssICAgICAgICBiYXNlICYjNDM7IDB4MzAsIDI1LCAzKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmM6MzU0Olx0aHdzW0lNWDZTTF9DTEtfU1BESUYwX1BPREZdICAgICAgID0gaW14X2Nsa19od19kaXZpZGVyKFwmIzM0O3NwZGlmMF9wb2RmXCYjMzQ7LCAgICAgICBcJiMzNDtzcGRpZjBfcHJlZFwmIzM0OywgICAgICAgYmFzZSAmIzQzOyAweDMwLCAyMiwgMyk7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jLTM1NS1cdGh3c1tJTVg2U0xfQ0xLX1NQRElGMV9QUkVEXSAgICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcJiMzNDtzcGRpZjFfcHJlZFwmIzM0OywgICAgICAgXCYjMzQ7c3BkaWYxX3NlbFwmIzM0OywgICAgICAgIGJhc2UgJiM0MzsgMHgzMCwgMTIsIDMpO1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzk3LVx0aHdzW0lNWDZTTF9DTEtfU1BCQV0gICAgICAgICA9IGlteF9jbGtfaHdfZ2F0ZTIoXCYjMzQ7c3BiYVwmIzM0OywgICAgICAgICBcJiMzNDtpcGdcJiMzNDssICAgICAgICAgICAgICAgYmFzZSAmIzQzOyAweDdjLCAxMik7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jOjM5ODpcdGh3c1tJTVg2U0xfQ0xLX1NQRElGXSAgICAgICAgPSBpbXhfY2xrX2h3X2dhdGUyX3NoYXJlZChcJiMzNDtzcGRpZlwmIzM0OywgICAgIFwmIzM0O3NwZGlmMF9wb2RmXCYjMzQ7LCAgIGJhc2UgJiM0MzsgMHg3YywgMTQsIFx1MDAyNnNoYXJlX2NvdW50X3NwZGlmKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzk5LVx0aHdzW0lNWDZTTF9DTEtfU1BESUZfR0NMS10gICA9IGlteF9jbGtfaHdfZ2F0ZTJfc2hhcmVkKFwmIzM0O3NwZGlmX2djbGtcJiMzNDssICBcJiMzNDtpcGdcJiMzNDssICAgICAgICAgYmFzZSAmIzQzOyAweDdjLCAxNCwgXHUwMDI2c2hhcmVfY291bnRfc3BkaWYpO1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz03OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBpbXg4cW1fYXVkX2Nsa19zZWxzW10gPSB7XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTkzLVx0eyAuZndfbmFtZSA9IFwmIzM0O2VzYWkxX3R4X2hmX2Nsa1wmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jOjk0Olx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTk1LVx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMV9yeFwmIzM0OyB9LFxuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz0xMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgaW14OHFtX21jbGtfb3V0X3NlbHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTA5LVx0eyAuZndfbmFtZSA9IFwmIzM0O2hkbWlfcnhfbWNsa1wmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jOjExMDpcdHsgLmZ3X25hbWUgPSBcJiMzNDtzcGRpZjBfcnhcJiMzNDsgfSxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xMTEtXHR7IC5md19uYW1lID0gXCYjMzQ7c3BkaWYxX3J4XCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTEzND1zdGF0aWMgc3RydWN0IGNsa19pbXg4X2FjbV9zZWwgaW14OHFtX3NlbHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTQ5LVx0eyBcJiMzNDthY21fc2FpN19tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX1NBSTdfTUNMS19TRUwsIGlteDhxbV9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHFtX21jbGtfc2VscyksIDB4MTUwMDAwLCAwLCAyIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTUwOlx0eyBcJiMzNDthY21fc3BkaWYwX21jbGtfc2VsXCYjMzQ7LCBJTVhfQURNQV9BQ01fU1BESUYwX1RYX0NMS19TRUwsIGlteDhxbV9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHFtX21jbGtfc2VscyksIDB4MUEwMDAwLCAwLCAyIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTUxLVx0eyBcJiMzNDthY21fc3BkaWYxX21jbGtfc2VsXCYjMzQ7LCBJTVhfQURNQV9BQ01fU1BESUYxX1RYX0NMS19TRUwsIGlteDhxbV9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHFtX21jbGtfc2VscyksIDB4MUIwMDAwLCAwLCAyIH0sXG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTE1NT1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBpbXg4cXhwX2F1ZF9jbGtfc2Vsc1tdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xNjMtXHR7IC5md19uYW1lID0gXCYjMzQ7ZXNhaTBfdHhfaGZfY2xrXCYjMzQ7IH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTY0Olx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTE2NS1cdHsgLmZ3X25hbWUgPSBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MTczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGlteDhxeHBfbWNsa19vdXRfc2Vsc1tdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xNzctXHR7IC5pbmRleCA9IC0xIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTc4Olx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTE3OS1cdHsgLmluZGV4ID0gLTEgfSxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MTkxPXN0YXRpYyBzdHJ1Y3QgY2xrX2lteDhfYWNtX3NlbCBpbXg4cXhwX3NlbHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjAyLVx0eyBcJiMzNDthY21fc2FpNV9tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX1NBSTVfTUNMS19TRUwsIGlteDhxeHBfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxeHBfbWNsa19zZWxzKSwgMHgxNTAwMDAsIDAsIDIgfSxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoyMDM6XHR7IFwmIzM0O2FjbV9zcGRpZjBfbWNsa19zZWxcJiMzNDssIElNWF9BRE1BX0FDTV9TUERJRjBfVFhfQ0xLX1NFTCwgaW14OHF4cF9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHF4cF9tY2xrX3NlbHMpLCAweDFBMDAwMCwgMCwgMiB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTIwNC1cdHsgXCYjMzQ7YWNtX21xc19tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX01RU19UWF9DTEtfU0VMLCBpbXg4cXhwX21jbGtfc2VscywgQVJSQVlfU0laRShpbXg4cXhwX21jbGtfc2VscyksIDB4MUMwMDAwLCAwLCAyIH0sXG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTIwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBpbXg4ZHhsX2F1ZF9jbGtfc2Vsc1tdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0yMTUtXHR7IC5pbmRleCA9IC0xIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjE2Olx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTIxNy1cdHsgLmZ3X25hbWUgPSBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MjI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGlteDhkeGxfbWNsa19vdXRfc2Vsc1tdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0yMjktXHR7IC5pbmRleCA9IC0xIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjMwOlx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTIzMS1cdHsgLmluZGV4ID0gLTEgfSxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MjQzPXN0YXRpYyBzdHJ1Y3QgY2xrX2lteDhfYWNtX3NlbCBpbXg4ZHhsX3NlbHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjUxLVx0eyBcJiMzNDthY21fc2FpM19tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX1NBSTNfTUNMS19TRUwsIGlteDhkeGxfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhkeGxfbWNsa19zZWxzKSwgMHgxMTAwMDAsIDAsIDIgfSxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoyNTI6XHR7IFwmIzM0O2FjbV9zcGRpZjBfbWNsa19zZWxcJiMzNDssIElNWF9BRE1BX0FDTV9TUERJRjBfVFhfQ0xLX1NFTCwgaW14OGR4bF9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OGR4bF9tY2xrX3NlbHMpLCAweDFBMDAwMCwgMCwgMiB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTI1My1cdHsgXCYjMzQ7YWNtX21xc19tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX01RU19UWF9DTEtfU0VMLCBpbXg4ZHhsX21jbGtfc2VscywgQVJSQVlfU0laRShpbXg4ZHhsX21jbGtfc2VscyksIDB4MUMwMDAwLCAwLCAyIH0sXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRhMS1jcGctbXNzci5jPTEyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3NzRhMV9tb2RfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YTEtY3BnLW1zc3IuYy0xNTMtXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc0QTFfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGExLWNwZy1tc3NyLmM6MTU0Olx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0IDMxNCxcdFI4QTc3NEExX0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRhMS1jcGctbXNzci5jLTE1NS1cdERFRl9NT0QoXCYjMzQ7cGNpZTFcJiMzNDssXHRcdCAzMTgsXHRSOEE3NzRBMV9DTEtfUzNEMSksXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRiMS1jcGctbXNzci5jPTEyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3NzRiMV9tb2RfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YjEtY3BnLW1zc3IuYy0xNTEtXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc0QjFfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGIxLWNwZy1tc3NyLmM6MTUyOlx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0IDMxNCxcdFI4QTc3NEIxX0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRiMS1jcGctbXNzci5jLTE1My1cdERFRl9NT0QoXCYjMzQ7cGNpZTFcJiMzNDssXHRcdCAzMTgsXHRSOEE3NzRCMV9DTEtfUzNEMSksXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRjMC1jcGctbXNzci5jPTEzND1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3NzRjMF9tb2RfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YzAtY3BnLW1zc3IuYy0xNTktXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc0QzBfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGMwLWNwZy1tc3NyLmM6MTYwOlx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0IDMxNCxcdFI4QTc3NEMwX0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRjMC1jcGctbXNzci5jLTE2MS1cdERFRl9NT0QoXCYjMzQ7cGNpZTBcJiMzNDssXHRcdCAzMTksXHRSOEE3NzRDMF9DTEtfUzNEMSksXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRlMS1jcGctbXNzci5jPTEyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3NzRlMV9tb2RfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0ZTEtY3BnLW1zc3IuYy0xNTgtXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc0RTFfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGUxLWNwZy1tc3NyLmM6MTU5Olx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0IDMxNCxcdFI4QTc3NEUxX0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRlMS1jcGctbXNzci5jLTE2MC1cdERFRl9NT0QoXCYjMzQ7cGNpZTFcJiMzNDssXHRcdCAzMTgsXHRSOEE3NzRFMV9DTEtfUzNEMSksXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk1LWNwZy1tc3NyLmM9MTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNzcl9tb2RfY2xrIHI4YTc3OTVfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTUtY3BnLW1zc3IuYy0xNjEtXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc5NV9DTEtfU0QxKSxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5NS1jcGctbXNzci5jOjE2MjpcdERFRl9NT0QoXCYjMzQ7c2RpZjBcJiMzNDssXHRcdCAzMTQsXHRSOEE3Nzk1X0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk1LWNwZy1tc3NyLmMtMTYzLVx0REVGX01PRChcJiMzNDtwY2llMVwmIzM0OyxcdFx0IDMxOCxcdFI4QTc3OTVfQ0xLX1MzRDEpLFxuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5Ni1jcGctbXNzci5jPTEzMz1zdGF0aWMgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3Nzk2X21vZF9jbGtzW10gX19pbml0ZGF0YSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYy0xNjItXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc5Nl9DTEtfU0QxKSxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5Ni1jcGctbXNzci5jOjE2MzpcdERFRl9NT0QoXCYjMzQ7c2RpZjBcJiMzNDssXHRcdCAzMTQsXHRSOEE3Nzk2X0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk2LWNwZy1tc3NyLmMtMTY0LVx0REVGX01PRChcJiMzNDtwY2llMVwmIzM0OyxcdFx0IDMxOCxcdFI4QTc3OTZfQ0xLX1MzRDEpLFxuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5NjUtY3BnLW1zc3IuYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc5NjVfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmMtMTU4LVx0REVGX01PRChcJiMzNDtzZGlmMVwmIzM0OyxcdFx0MzEzLFx0UjhBNzc5NjVfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmM6MTU5Olx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0MzE0LFx0UjhBNzc5NjVfQ0xLX1NEMCksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmMtMTYwLVx0REVGX01PRChcJiMzNDtwY2llMVwmIzM0OyxcdFx0MzE4LFx0UjhBNzc5NjVfQ0xLX1MzRDEpLFxuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5OTAtY3BnLW1zc3IuYz0xMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc5OTBfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTkwLWNwZy1tc3NyLmMtMTYxLVx0REVGX01PRChcJiMzNDtzZGlmMVwmIzM0OyxcdFx0IDMxMyxcdFI4QTc3OTkwX0NMS19TRDEpLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk5MC1jcGctbXNzci5jOjE2MjpcdERFRl9NT0QoXCYjMzQ7c2RpZjBcJiMzNDssXHRcdCAzMTQsXHRSOEE3Nzk5MF9DTEtfU0QwKSxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5OTAtY3BnLW1zc3IuYy0xNjMtXHRERUZfTU9EKFwmIzM0O3BjaWUwXCYjMzQ7LFx0XHQgMzE5LFx0UjhBNzc5OTBfQ0xLX1MzRDEpLFxuLS1cbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYz00ODM9UE5BTUUoY2xrX2kyczEwXzhjaF9yeF9wKVx0XHQ9IHsgXCYjMzQ7Y2xrX2kyczEwXzhjaF9yeF9zcmNcJiMzNDssIFwmIzM0O2Nsa19pMnMxMF84Y2hfcnhfZnJhY1wmIzM0OywgXCYjMzQ7aTJzMTBfbWNsa2luXCYjMzQ7LCBcJiMzNDt4aW4xMm1cJiMzNDsgfTtcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo0ODQ6UE5BTUUoY2xrX3NwZGlmMF9wKVx0XHRcdD0geyBcJiMzNDtjbGtfc3BkaWYwX3NyY1wmIzM0OywgXCYjMzQ7Y2xrX3NwZGlmMF9mcmFjXCYjMzQ7LCBcJiMzNDt4aW4xMm1cJiMzNDsgfTtcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy00ODUtUE5BTUUoY2xrX3NwZGlmMV9wKVx0XHRcdD0geyBcJiMzNDtjbGtfc3BkaWYxX3NyY1wmIzM0OywgXCYjMzQ7Y2xrX3NwZGlmMV9mcmFjXCYjMzQ7LCBcJiMzNDt4aW4xMm1cJiMzNDsgfTtcbi0tXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM9NTc4PXN0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfY2xrX2JyYW5jaCByazM1ODhfaTJzMTBfOGNoX3J4X2ZyYWNtdXggX19pbml0ZGF0YSA9XG4tLVxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTU4MS1cbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo1ODI6c3RhdGljIHN0cnVjdCByb2NrY2hpcF9jbGtfYnJhbmNoIHJrMzU4OF9zcGRpZjBfZnJhY211eCBfX2luaXRkYXRhID1cbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo1ODM6XHRNVVgoQ0xLX1NQRElGMCwgXCYjMzQ7Y2xrX3NwZGlmMFwmIzM0OywgY2xrX3NwZGlmMF9wLCBDTEtfU0VUX1JBVEVfUEFSRU5ULFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTU4NC1cdFx0XHRSSzM1ODhfQ0xLU0VMX0NPTigzNCksIDAsIDIsIE1GTEFHUyk7XG4tLVxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jPTY4MD1zdGF0aWMgc3RydWN0IHJvY2tjaGlwX2Nsa19icmFuY2ggcmszNTg4X2Vhcmx5X2Nsa19icmFuY2hlc1tdIF9faW5pdGRhdGEgPSB7XG4tLVxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTk1Mi1cbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo5NTM6XHRHQVRFKEhDTEtfU1BESUYwLCBcJiMzNDtoY2xrX3NwZGlmMFwmIzM0OywgXCYjMzQ7aGNsa19hdWRpb19yb290XCYjMzQ7LCAwLFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTk1NC1cdFx0XHRSSzM1ODhfQ0xLR0FURV9DT04oOCksIDE0LCBHRkxBR1MpLFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jOjk1NTpcdENPTVBPU0lURShDTEtfU1BESUYwX1NSQywgXCYjMzQ7Y2xrX3NwZGlmMF9zcmNcJiMzNDssIGdwbGxfYXVwbGxfcCwgMCxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTYtXHRcdFx0UkszNTg4X0NMS1NFTF9DT04oMzIpLCA4LCAxLCBNRkxBR1MsIDMsIDUsIERGTEFHUyxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTctXHRcdFx0UkszNTg4X0NMS0dBVEVfQ09OKDgpLCAxNSwgR0ZMQUdTKSxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo5NTg6XHRDT01QT1NJVEVfRlJBQ01VWChDTEtfU1BESUYwX0ZSQUMsIFwmIzM0O2Nsa19zcGRpZjBfZnJhY1wmIzM0OywgXCYjMzQ7Y2xrX3NwZGlmMF9zcmNcJiMzNDssXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtOTU5LVx0XHRcdENMS19TRVRfUkFURV9QQVJFTlQsXG4tLVxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTk2MS1cdFx0XHRSSzM1ODhfQ0xLR0FURV9DT04oOSksIDAsIEdGTEFHUyxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo5NjI6XHRcdFx0XHUwMDI2cmszNTg4X3NwZGlmMF9mcmFjbXV4KSxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo5NjM6XHRHQVRFKE1DTEtfU1BESUYwLCBcJiMzNDttY2xrX3NwZGlmMFwmIzM0OywgXCYjMzQ7Y2xrX3NwZGlmMFwmIzM0OywgMCxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NjQtXHRcdFx0UkszNTg4X0NMS0dBVEVfQ09OKDkpLCAxLCBHRkxBR1MpLFxuLS1cbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYz03Mzc9UE5BTUUobW91dF9jbXVfY3BfbXBsbF9jbGtfdXNlcl9wYXJlbnRzKVx0PSB7IFwmIzM0O29zY2Nsa1wmIzM0OyB9O1xuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjczODpQTkFNRShtb3V0X2NtdV9hdWRfYXVkaWYwX3ApXHRcdFx0PSB7IFwmIzM0O2RvdXRfc2hhcmVkMF9kaXYxXCYjMzQ7LFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTczOS1cdFx0XHRcdFx0XHQgICAgXCYjMzQ7ZG91dF9zaGFyZWQxX2RpdjFcJiMzNDssXG4tLVxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jPTg5MD1QTkFNRShtb3V0X2NtdV9tdXhfYWxpdmVfbm9jX3ApXHRcdFx0PSB7IFwmIzM0O2RvdXRfc2hhcmVkMF9kaXYyXCYjMzQ7LFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTg5MS1cdFx0XHRcdFx0XHQgICAgXCYjMzQ7ZG91dF9zaGFyZWQyX2RpdjJcJiMzNDsgfTtcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzo4OTI6UE5BTUUobW91dF9jbXVfbXV4X2F1ZF9hdWRpZjBfcClcdFx0PSB7IFwmIzM0O2RvdXRfc2hhcmVkMF9kaXYxXCYjMzQ7LFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTg5My1cdFx0XHRcdFx0XHQgICAgXCYjMzQ7ZG91dF9zaGFyZWQxX2RpdjFcJiMzNDssXG4tLVxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jPTEzNTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzYW1zdW5nX211eF9jbG9jayB0b3BfbXV4X2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTM2MC1cdCAgICA0LCAxKSxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxMzYxOlx0TVVYKENMS19NT1VUX0NNVV9BVURfQVVESUYwLCBcJiMzNDttb3V0X2NtdV9hdWRfYXVkaWYwXCYjMzQ7LFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjEzNjI6XHQgICAgbW91dF9jbXVfYXVkX2F1ZGlmMF9wLCBDTEtfQ09OX01VWF9DTEtDTVVfQVVEX0FVRElGMCwgMCwgMyksXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTM2My1cdE1VWChDTEtfTU9VVF9DTVVfQVVEX0FVRElGMSwgXCYjMzQ7bW91dF9jbXVfYXVkX2F1ZGlmMVwmIzM0Oyxcbi0tXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTQxMS1cdCAgICBtb3V0X2NtdV9tdXhfYWxpdmVfbm9jX3AsIENMS19DT05fTVVYX01VWF9DTEtDTVVfQUxJVkVfTk9DLCAwLCAxKSxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNDEyOlx0TVVYKENMS19NT1VUX0NNVV9NVVhfQVVEX0FVRElGMCwgXCYjMzQ7bW91dF9jbXVfbXV4X2F1ZF9hdWRpZjBcJiMzNDssXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM6MTQxMzpcdCAgICBtb3V0X2NtdV9tdXhfYXVkX2F1ZGlmMF9wLCBDTEtfQ09OX01VWF9NVVhfQ0xLQ01VX0FVRF9BVURJRjAsXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTQxNC1cdCAgICAwLCAzKSxcbi0tXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM9MTYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrIHRvcF9kaXZfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy0xNzEzLVx0ICAgIFwmIzM0O21vdXRfY211X211eF9jcF9zaGFyZWQxX2Nsa1wmIzM0OywgQ0xLX0NPTl9ESVZfQ1BfU0hBUkVEMV9DTEssIDAsIDMpLFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjE3MTQ6XHRESVYoQ0xLX0RPVVRfQ01VX0RJVl9BVURfQVVESUYwLCBcJiMzNDtkb3V0X2NtdV9kaXZfYXVkX2F1ZGlmMFwmIzM0OyxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNzE1Olx0ICAgIFwmIzM0O21vdXRfY211X211eF9hdWRfYXVkaWYwXCYjMzQ7LCBDTEtfQ09OX0RJVl9ESVZfQ0xLQ01VX0FVRF9BVURJRjAsXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTcxNi1cdCAgICAwLCA2KSxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNzE3Olx0RElWKENMS19ET1VUX0NNVV9ESVZfQVVEX0FVRElGMF9TTSwgXCYjMzQ7ZG91dF9jbXVfZGl2X2F1ZF9hdWRpZjBfc21cJiMzNDssXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM6MTcxODpcdCAgICBcJiMzNDttb3V0X2NtdV9hdWRfYXVkaWYwXCYjMzQ7LCBDTEtfQ09OX0RJVl9ESVZfQ0xLQ01VX0FVRF9BVURJRjBfU00sIDAsIDYpLFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTE3MTktXHRESVYoQ0xLX0RPVVRfQ01VX0RJVl9BVURfQVVESUYxLCBcJiMzNDtkb3V0X2NtdV9kaXZfYXVkX2F1ZGlmMVwmIzM0Oyxcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2lteC9zY3UtcGQuYz0xMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfc2NfcGRfcmFuZ2UgaW14OHF4cF9zY3VfcGRfcmFuZ2VzW10gPSB7XG4tLVxuZHJpdmVycy9wbWRvbWFpbi9pbXgvc2N1LXBkLmMtMTU5LVx0eyBcJiMzNDtlc2FpMVwmIzM0OywgSU1YX1NDX1JfRVNBSV8xLCAxLCBmYWxzZSwgMCB9LFxuZHJpdmVycy9wbWRvbWFpbi9pbXgvc2N1LXBkLmM6MTYwOlx0eyBcJiMzNDtzcGRpZjBcJiMzNDssIElNWF9TQ19SX1NQRElGXzAsIDEsIGZhbHNlLCAwIH0sXG5kcml2ZXJzL3BtZG9tYWluL2lteC9zY3UtcGQuYy0xNjEtXHR7IFwmIzM0O3NwZGlmMVwmIzM0OywgSU1YX1NDX1JfU1BESUZfMSwgMSwgZmFsc2UsIDAgfSxcbi0tXG5mcy9lcm9mcy9kYXRhLmM9Njc9aW50IGVyb2ZzX2luaXRfbWV0YWJ1ZihzdHJ1Y3QgZXJvZnNfYnVmICpidWYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXJvZnMvZGF0YS5jLTc4LVx0fVxuZnMvZXJvZnMvZGF0YS5jOjc5Olx0YnVmLVx1MDAzZW9mZiA9IHNiaS1cdTAwM2VkaWYwLmZzb2ZmO1xuZnMvZXJvZnMvZGF0YS5jLTgwLVx0aWYgKGVyb2ZzX2lzX2ZpbGVpb19tb2RlKHNiaSkpIHtcbmZzL2Vyb2ZzL2RhdGEuYzo4MTpcdFx0YnVmLVx1MDAzZWZpbGUgPSBzYmktXHUwMDNlZGlmMC5maWxlO1x0Lyogc29tZSBmcyBsaWtlIEZVU0UgbmVlZHMgaXQgKi9cbmZzL2Vyb2ZzL2RhdGEuYy04Mi1cdFx0YnVmLVx1MDAzZW1hcHBpbmcgPSBidWYtXHUwMDNlZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4tLVxuZnMvZXJvZnMvZGF0YS5jPTIwOT1pbnQgZXJvZnNfbWFwX2RldihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXJvZnNfbWFwX2RldiAqbWFwKVxuLS1cbmZzL2Vyb2ZzL2RhdGEuYy0yMTUtXG5mcy9lcm9mcy9kYXRhLmM6MjE2Olx0ZXJvZnNfZmlsbF9mcm9tX2RldmluZm8obWFwLCBzYiwgXHUwMDI2RVJPRlNfU0Ioc2IpLVx1MDAzZWRpZjApO1xuZnMvZXJvZnMvZGF0YS5jLTIxNy1cdG1hcC1cdTAwM2VtX2JkZXYgPSBzYi1cdTAwM2VzX2JkZXY7XHQvKiB1c2Ugc19iZGV2IGZvciB0aGUgcHJpbWFyeSBkZXZpY2UgKi9cbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oPTg3PXN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbmZzL2Vyb2ZzL2ludGVybmFsLmg6ODg6XHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8gZGlmMDtcbmZzL2Vyb2ZzL2ludGVybmFsLmgtODktXHRzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyBvcHQ7XHQvKiBvcHRpb25zICovXG4tLVxuZnMvZXJvZnMvaW50ZXJuYWwuaD0xNjU9c3RhdGljIGlubGluZSBib29sIGVyb2ZzX2lzX2ZpbGVpb19tb2RlKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTE2Ni17XG5mcy9lcm9mcy9pbnRlcm5hbC5oOjE2NzpcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkgXHUwMDI2XHUwMDI2IHNiaS1cdTAwM2VkaWYwLmZpbGU7XG5mcy9lcm9mcy9pbnRlcm5hbC5oLTE2OC19XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz0xODM9c3RhdGljIGludCBlcm9mc19zY2FuX2RldmljZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTE5Mi1cbmZzL2Vyb2ZzL3N1cGVyLmM6MTkzOlx0c2JpLVx1MDAzZXRvdGFsX2Jsb2NrcyA9IHNiaS1cdTAwM2VkaWYwLmJsb2NrcztcbmZzL2Vyb2ZzL3N1cGVyLmMtMTk0LVx0aWYgKCFlcm9mc19zYl9oYXNfZGV2aWNlX3RhYmxlKHNiaSkpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0yMDUtXG5mcy9lcm9mcy9zdXBlci5jOjIwNjpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSBcdTAwMjZcdTAwMjYgIXNiaS1cdTAwM2VkaWYwLmRheF9kZXYpIHtcbmZzL2Vyb2ZzL3N1cGVyLmMtMjA3LVx0XHRlcm9mc19pbmZvKHNiLCBcJiMzNDtEQVggdW5zdXBwb3J0ZWQgYnkgYmxvY2sgZGV2aWNlLiBUdXJuaW5nIG9mZiBEQVguXCYjMzQ7KTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTI1MD1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMzAxLVx0fVxuZnMvZXJvZnMvc3VwZXIuYzozMDI6XHRzYmktXHUwMDNlZGlmMC5ibG9ja3MgPSBsZTMyX3RvX2NwdShkc2ItXHUwMDNlYmxvY2tzX2xvKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtMzAzLVx0c2JpLVx1MDAzZW1ldGFfYmxrYWRkciA9IGxlMzJfdG9fY3B1KGRzYi1cdTAwM2VtZXRhX2Jsa2FkZHIpO1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMzIxLVx0XHRzYmktXHUwMDNlcm9vdF9uaWQgPSBsZTY0X3RvX2NwdShkc2ItXHUwMDNlcm9vdG5pZF84Yik7XG5mcy9lcm9mcy9zdXBlci5jOjMyMjpcdFx0c2JpLVx1MDAzZWRpZjAuYmxvY2tzID0gc2JpLVx1MDAzZWRpZjAuYmxvY2tzIHxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzIzLVx0XHRcdFx0KCh1NjQpbGUxNl90b19jcHUoZHNiLVx1MDAzZXJiLmJsb2Nrc19oaSkgXHUwMDNjXHUwMDNjIDMyKTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTQ0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy00NDctXG5mcy9lcm9mcy9zdXBlci5jOjQ0ODpcdGlmIChmYy1cdTAwM2Vzb3VyY2UgfHwgc2JpLVx1MDAzZWRpZjAuZmlsZSlcbmZzL2Vyb2ZzL3N1cGVyLmMtNDQ5LVx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDtNdWx0aXBsZSBzb3VyY2VzXCYjMzQ7KTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTQ2Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbmZzL2Vyb2ZzL3N1cGVyLmM6NDY4Olx0XHRzYmktXHUwMDNlZGlmMC5maWxlID0gbm9fZnJlZV9wdHIocGFyYW0tXHUwMDNlZmlsZSk7XG5mcy9lcm9mcy9zdXBlci5jLTQ2OS1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz00Nzc9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjM5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgRVJPRlMgRGV2aWNlIEluZm9ybWF0aW9uKioKClJpZ2h0LCBzbyBgZGlmMGAgaXMgZGVmaW5lZCBhcyBhIGBzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm9gLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG1ldGFkYXRhIGZvciB0aGUgRVJPRlMgZGV2aWNlIGlzIHN0b3JlZCwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgbGF5b3V0IGFuZCBob3cgaXQmIzM5O3Mgb3BlcmF0aW5nLiBOb3csIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm9gIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIGl0OyB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBmb3IgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGFuZCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gYmxvY2sgc2l6ZXMsIGNvbXByZXNzaW9uIHNldHRpbmdzLCBhbmQgc3VwZXJibG9jayBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgb24tZGlzayBmb3JtYXQuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IGluLWRlcHRoIGFuYWx5c2lzIG9mIHRoZSBFUk9GUyBkZXZpY2UmIzM5O3MgcHJvcGVydGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGVyb2ZzX2RldmljZV9pbmZvIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9pbnRlcm5hbC5oPTQyPXR5cGVkZWYgdTY0IGVyb2ZzX2Jsa190O1xuZnMvZXJvZnMvaW50ZXJuYWwuaC00My1cbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDQ6c3RydWN0IGVyb2ZzX2RldmljZV9pbmZvIHtcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUtXHRjaGFyICpwYXRoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBlcm9mc19kZXZpY2VfaW5mb2AgU3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZXJvZnNfZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBpbnNpZGUgYW5kIG91dC4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIGNhbiYjMzk7dCBhZmZvcmQgYW55IGdhcHMgaW4gbXkgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gLSBubyBza2ltbWluZywgbm8gc2hvcnRjdXRzLiBHb3R0YSBrbm93IHRoZSBuaXR0eS1ncml0dHkgZGV0YWlsczsgYWxsIHRoZSBtZW1iZXJzLCB0aGVpciBkYXRhIHR5cGVzLCB0aGVpciBwdXJwb3NlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgRVJPRlMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzdHJ1Y3R1cmUgaW50ZXJmYWNlcyB3aXRoIHRoZSBibG9jayBkZXZpY2UsIGhvdyBpdCBtYW5hZ2VzIG1ldGFkYXRhLCBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIGl0IGVuYWJsZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdWxseSB3aWxsIGFsbG93IG1lIHRvIG1ha2UgYW55IGVuaGFuY2VtZW50cyBvciBkZWJ1ZyBhbnkgaXNzdWVzIEkgY29tZSBhY3Jvc3MgbGF0ZXIuIEnigJltIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0b28sIGFuZCB3YW50IHRvIGV2YWx1YXRlIGlmIEkgY2FuIHNlZSBpZiB0aGVyZSBhcmUgYmV0dGVyIG1lbW9yeSBhbGlnbm1lbnQgb3Igb3JkZXIgY2hvaWNlcyB0aGF0IGNvdWxkIGJlIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvaW50ZXJuYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDQ6XHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8ge1xuICA0NTpcdFx0Y2hhciAqcGF0aDtcbiAgNDY6XHRcdHN0cnVjdCBmaWxlICpmaWxlO1xuICA0NzpcdFx0c3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXY7XG4gIDQ4Olx0XHR1NjQgZnNvZmYsIGRheF9wYXJ0X29mZjtcbiAgNDk6XHRcbiAgNTA6XHRcdGVyb2ZzX2Jsa190IGJsb2NrcztcbiAgNTE6XHRcdGVyb2ZzX2Jsa190IHVuaWFkZHI7XG4gIDUyOlx0fTtcbiAgNTM6XHRcbiAgNTQ6XHRlbnVtIHtcbiAgNTU6XHRcdEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPLFxuICA1NjpcdFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09OLFxuICA1NzpcdFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09GRlxuICA1ODpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDM0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFUk9GUyBTdXBlcmJsb2NrIFNoYXJpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMuIEl0JiMzOTtzIGNvbXBhcmluZyB0d28gYHN0cnVjdCBlcm9mc19zYl9pbmZvYCBzdHJ1Y3R1cmVzLCBgc2JpYCBhbmQgYG5ld19zYmlgLCB0byBzZWUgaWYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgdW5kZXJseWluZyBmaWxlc3lzdGVtLiBUaGUgY29tcGFyaXNvbiBjaGVja3Mgc2V2ZXJhbCBhc3BlY3RzLCBzdGFydGluZyB3aXRoIHRoZSBgZmlsZWAgYW5kIGBmc29mZmAgbWVtYmVycyB3aXRoaW4gdGhlIGBkaWYwYCBzdHJ1Y3QsIHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGRldmljZSBpbmZvcm1hdGlvbi4gSWYgZWl0aGVyIG9mIHRob3NlIGFyZSBudWxsLCBpdCBpbW1lZGlhdGVseSBiYWlscyBvdXQuCgpUaGUgY29yZSBvZiB0aGUgY29tcGFyaXNvbiBoaW5nZXMgb24gd2hldGhlciB0aGUgaW5vZGVzIG9mIHRob3NlIGZpbGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCB0aGUgb2Zmc2V0cyBhcmUgdGhlIHNhbWUsIGFuZCwgbW9zdCBjcml0aWNhbGx5LCBhIGBtZW1jbXBgIG9mIHRoZSBgc2JpLSZndDtvcHRgIGZpZWxkIGFnYWluc3QgYG5ld19zYmktJmd0O29wdGAgaXMgcGVyZm9ybWVkLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgYSBtYXRjaCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gMS4KClRoZSB1c2Ugb2YgYG1lbWNtcGAgaGVyZSBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHF1ZXN0aW9uOiBpcyB0aGlzIHRoZSAqb25seSogcGxhY2Ugd2hlcmUgYHNiaS0mZ3Q7b3B0YCBpcyBtb2RpZmllZD8gSWYgdGhlcmUgYXJlIG90aGVyIHBhdGhzIHdoZXJlIGl0IGdldHMgdXBkYXRlZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIHVwZGF0ZXMgbWlnaHQgYWZmZWN0IHRoaXMgc2hhcmluZyB0ZXN0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hlcmUgYHNiaS0mZ3Q7b3B0YCBpcyBpbml0aWFsaXplZCBvciBtb2RpZmllZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIHRvIHNlZSB3aGVyZSB0aGUgYHNiaS0mZ3Q7b3B0YCBmaWVsZCBnZXRzIGl0cyB2YWx1ZXMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgc2luY2UgdGhlIGZ1bmN0aW9uIHN1Z2dlc3RzIHdlIGNhbiBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJvZnNfZmNfcGFyc2VfcGFyYW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYz00NDM9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtNDc2LVxuZnMvZXJvZnMvc3VwZXIuYzo0Nzc6c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG5mcy9lcm9mcy9zdXBlci5jLTQ3OC1cdFx0XHRcdHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGVyb2ZzX2NvbnRleHRfb3BzID0ge1xuZnMvZXJvZnMvc3VwZXIuYzo5NDM6XHQucGFyc2VfcGFyYW1cdD0gZXJvZnNfZmNfcGFyc2VfcGFyYW0sXG5mcy9lcm9mcy9zdXBlci5jLTk0NC1cdC5nZXRfdHJlZSAgICAgICA9IGVyb2ZzX2ZjX2dldF90cmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI5OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBlcm9mc19mY19wYXJzZV9wYXJhbWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBndXRzIG9mIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhcnNlZC4gV2hhdCYjMzk7cyB0aGUgc3RyYXRlZ3k/IEFyZSB0aGV5IHVzaW5nIGEgc3RyYWlnaHRmb3J3YXJkIHRva2VuaXphdGlvbiBhcHByb2FjaCwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCB0byBoYW5kbGUgdmFyaWF0aW9ucyBhbmQgcG90ZW50aWFsIGVycm9ycyBpbiB0aGUgaW5wdXQ/IEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7dmUgYWNjb3VudGVkIGZvciBhbGwgdGhlIGVkZ2UgY2FzZXMuIFRoaW5rIGFib3V0IGhvdyB0aGUgcGFyYW1ldGVycyBpbnRlcmFjdCDigJMgYXJlIHRoZXJlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGRlZmF1bHQgdmFsdWVzLCBhbmQgaG93IGFyZSB0aG9zZSBoYW5kbGVkIGR1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzPyBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBtYXliZSBhIHN0YWNrIGJ1ZmZlciwgYW55IHBvc3NpYmlsaXR5IG9mIGFuIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eT8gTW9zdCBpbXBvcnRhbnRseSwgZG9lcyB0aGlzIGNvZGUgaW1wbGVtZW50IHRoZSBwYXJhbWV0ZXJzIGluIGEgc2ltcGxlIHdheT8gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc3Olx0c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gNDc4Olx0XHRcdFx0XHRzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbiA0Nzk6XHR7XG4gNDgwOlx0XHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuIDQ4MTpcdFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XG4gNDgyOlx0XHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8gKmRpZjtcbiA0ODM6XHRcdGludCBvcHQsIHJldDtcbiA0ODQ6XHRcbiA0ODU6XHRcdG9wdCA9IGZzX3BhcnNlKGZjLCBlcm9mc19mc19wYXJhbWV0ZXJzLCBwYXJhbSwgXHUwMDI2cmVzdWx0KTtcbiA0ODY6XHRcdGlmIChvcHQgXHUwMDNjIDApXG4gNDg3Olx0XHRcdHJldHVybiBvcHQ7XG4gNDg4Olx0XG4gNDg5Olx0XHRzd2l0Y2ggKG9wdCkge1xuIDQ5MDpcdFx0Y2FzZSBPcHRfdXNlcl94YXR0cjpcbiA0OTE6XHRcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXG4gNDkyOlx0XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7eyxub311c2VyX3hhdHRyIG9wdGlvbnMgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4gNDkzOlx0XHRcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxuIDQ5NDpcdFx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XG4gNDk1Olx0XHRcdGVsc2VcbiA0OTY6XHRcdFx0XHRjbGVhcl9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XG4gNDk3Olx0XHRcdGJyZWFrO1xuIDQ5ODpcdFx0Y2FzZSBPcHRfYWNsOlxuIDQ5OTpcdFx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXG4gNTAwOlx0XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7eyxub31hY2wgb3B0aW9ucyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiA1MDE6XHRcdFx0ZWxzZSBpZiAocmVzdWx0LmJvb2xlYW4pXG4gNTAyOlx0XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xuIDUwMzpcdFx0XHRlbHNlXG4gNTA0Olx0XHRcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFBPU0lYX0FDTCk7XG4gNTA1Olx0XHRcdGJyZWFrO1xuIDUwNjpcdFx0Y2FzZSBPcHRfY2FjaGVfc3RyYXRlZ3k6XG4gNTA3Olx0XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWklQKSlcbiA1MDg6XHRcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDtjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkLCBjYWNoZV9zdHJhdGVneSBpZ25vcmVkXCYjMzQ7KTtcbiA1MDk6XHRcdFx0ZWxzZVxuIDUxMDpcdFx0XHRcdHNiaS1cdTAwM2VvcHQuY2FjaGVfc3RyYXRlZ3kgPSByZXN1bHQudWludF8zMjtcbiA1MTE6XHRcdFx0YnJlYWs7XG4gNTEyOlx0XHRjYXNlIE9wdF9kYXg6XG4gNTEzOlx0XHRcdGlmICghZXJvZnNfZmNfc2V0X2RheF9tb2RlKGZjLCBFUk9GU19NT1VOVF9EQVhfQUxXQVlTKSlcbiA1MTQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTU6XHRcdFx0YnJlYWs7XG4gNTE2Olx0XHRjYXNlIE9wdF9kYXhfZW51bTpcbiA1MTc6XHRcdFx0aWYgKCFlcm9mc19mY19zZXRfZGF4X21vZGUoZmMsIHJlc3VsdC51aW50XzMyKSlcbiA1MTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTk6XHRcdFx0YnJlYWs7XG4gNTIwOlx0XHRjYXNlIE9wdF9kZXZpY2U6XG4gNTIxOlx0XHRcdGRpZiA9IGt6YWxsb2Nfb2JqKCpkaWYpO1xuIDUyMjpcdFx0XHRpZiAoIWRpZilcbiA1MjM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA1MjQ6XHRcdFx0ZGlmLVx1MDAzZXBhdGggPSBrc3RyZHVwKHBhcmFtLVx1MDAzZXN0cmluZywgR0ZQX0tFUk5FTCk7XG4gNTI1Olx0XHRcdGlmICghZGlmLVx1MDAzZXBhdGgpIHtcbiA1MjY6XHRcdFx0XHRrZnJlZShkaWYpO1xuIDUyNzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDUyODpcdFx0XHR9XG4gNTI5Olx0XHRcdGRvd25fd3JpdGUoXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNlcndzZW0pO1xuIDUzMDpcdFx0XHRyZXQgPSBpZHJfYWxsb2MoXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNldHJlZSwgZGlmLCAwLCAwLCBHRlBfS0VSTkVMKTtcbiA1MzE6XHRcdFx0dXBfd3JpdGUoXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNlcndzZW0pO1xuIDUzMjpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gNTMzOlx0XHRcdFx0a2ZyZWUoZGlmLVx1MDAzZXBhdGgpO1xuIDUzNDpcdFx0XHRcdGtmcmVlKGRpZik7XG4gNTM1Olx0XHRcdFx0cmV0dXJuIHJldDtcbiA1MzY6XHRcdFx0fVxuIDUzNzpcdFx0XHQmIzQzOyYjNDM7c2JpLVx1MDAzZWRldnMtXHUwMDNlZXh0cmFfZGV2aWNlcztcbiA1Mzg6XHRcdFx0YnJlYWs7XG4gNTM5Olx0XHRjYXNlIE9wdF9kb21haW5faWQ6XG4gNTQwOlx0XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRSkpIHtcbiA1NDE6XHRcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZFwmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuIDU0MjpcdFx0XHR9IGVsc2Uge1xuIDU0MzpcdFx0XHRcdGtmcmVlX3NlbnNpdGl2ZShzYmktXHUwMDNlZG9tYWluX2lkKTtcbiA1NDQ6XHRcdFx0XHRzYmktXHUwMDNlZG9tYWluX2lkID0gbm9fZnJlZV9wdHIocGFyYW0tXHUwMDNlc3RyaW5nKTtcbiA1NDU6XHRcdFx0fVxuIDU0NjpcdFx0XHRicmVhaztcbiA1NDc6XHRcdGNhc2UgT3B0X2RpcmVjdGlvOlxuIDU0ODpcdFx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcbiA1NDk6XHRcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZFwmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuIDU1MDpcdFx0XHRlbHNlIGlmIChyZXN1bHQuYm9vbGVhbilcbiA1NTE6XHRcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERJUkVDVF9JTyk7XG4gNTUyOlx0XHRcdGVsc2VcbiA1NTM6XHRcdFx0XHRjbGVhcl9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgRElSRUNUX0lPKTtcbiA1NTQ6XHRcdFx0YnJlYWs7XG4gNTU1Olx0XHRjYXNlIE9wdF9mc29mZnNldDpcbiA1NTY6XHRcdFx0c2JpLVx1MDAzZWRpZjAuZnNvZmYgPSByZXN1bHQudWludF82NDtcbiA1NTc6XHRcdFx0YnJlYWs7XG4gNTU4Olx0XHRjYXNlIE9wdF9pbm9kZV9zaGFyZTpcbiA1NTk6XHRcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QQUdFX0NBQ0hFX1NIQVJFKSlcbiA1NjA6XHRcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZFwmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuIDU2MTpcdFx0XHRlbHNlXG4gNTYyOlx0XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSk7XG4gNTYzOlx0XHRcdGJyZWFrO1xuIDU2NDpcdFx0Y2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZTpcbiA1NjU6XHRcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpXG4gNTY2Olx0XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcJiMzNDssIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbiA1Njc6XHRcdFx0ZWxzZVxuIDU2ODpcdFx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSk7XG4gNTY5Olx0XHRcdGJyZWFrO1xuIDU3MDpcdFx0Y2FzZSBPcHRfc291cmNlOlxuIDU3MTpcdFx0XHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XG4gNTcyOlx0XHR9XG4gNTczOlx0XHRyZXR1cm4gMDtcbiA1NzQ6XHR9XG4gNTc1Olx0XG4gNTc2Olx0c3RhdGljIGludCBlcm9mc19lbmNvZGVfZmgoc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpmaCwgaW50ICptYXhfbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzYmktJmd0O29wdGAgc3RydWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZC4gV2UmIzM5O3JlIHNldHRpbmcgYW5kIGNsZWFyaW5nIG9wdGlvbnMgdXNpbmcgYHNldF9vcHRgIGFuZCBgY2xlYXJfb3B0YCwgYW5kIHdlJiMzOTtyZSBhbHNvIGRpcmVjdGx5IGFzc2lnbmluZyBhIHZhbHVlIHRvIGBzYmktJmd0O29wdC5jYWNoZV9zdHJhdGVneWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0ICpub25lKiBvZiB0aGVzZSBvcGVyYXRpb25zIHRvdWNoIHRoZSBwYWRkaW5nIHdpdGhpbiB0aGUgYHNiaS0mZ3Q7b3B0YCBzdHJ1Y3R1cmUuCgpOb3csIGJlY2F1c2UgYHNiaWAgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB0aGUgcGFkZGluZyB3aXRoaW4gYHNiaS0mZ3Q7b3B0YCBzaG91bGQgYmUgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0JiMzOTtzIGdvb2QuIFdoaWNoIG1lYW5zIHRoYXQgdGhlIHN1YnNlcXVlbnQgYG1lbWNtcGAgb3BlcmF0aW9uIGlzIGNvbXBhcmluZyB6ZXJvZWQgcGFkZGluZyBhZ2FpbnN0IHplcm9lZCBwYWRkaW5nLiBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLCB3aGljaCBpcyB3aGF0IEkgaW5pdGlhbGx5IHN1c3BlY3RlZC4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgY2FuJiMzOTt0IGp1c3Qgc3RvcCBhdCBvbmUgaW5zdGFuY2UuIE15IGZpZWxkIGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0byBhbHdheXMgYmUgdmlnaWxhbnQgZm9yIG90aGVyIHBvc3NpYmxlIGFyZWFzIG9mIGNvbmNlcm4uIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGdldF90cmVlX3N1cGVyYCBmdW5jdGlvbiB3aXRoaW4gYGZzL3N1cGVyLmNgLiBUaGVyZSBtaWdodCBiZSBhbm90aGVyIHNpbWlsYXIgdnVsbmVyYWJpbGl0eSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzg5Olx0XHRyZXR1cm4gMTtcbjEzOTA6XHR9XG4xMzkxOlx0XG4xMzkyOlx0LyoqXG4xMzkzOlx0ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXG4xMzk0Olx0ICogQGZjOiBUaGUgZmlsZXN5c3RlbSBjb250ZXh0IGhvbGRpbmcgdGhlIHBhcmFtZXRlcnNcbjEzOTU6XHQgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTFxuMTM5NjpcdCAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrXG4xMzk3Olx0ICpcbjEzOTg6XHQgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXNcbjEzOTk6XHQgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoXG4xNDAwOlx0ICogQGZpbGxfc3VwZXIuICBQYXNzaW5nIE5VTEwgZm9yIEB0ZXN0IGFsd2F5cyBjcmVhdGVzIGEgbmV3IHN1cGVyYmxvY2suXG4xNDAxOlx0ICovXG4xNDAyOlx0aW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbjE0MDM6XHRcdFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuMTQwNDpcdFx0XHRpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuMTQwNTpcdFx0XHRcdFx0ICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuMTQwNjpcdHtcbjE0MDc6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XG4xNDA4Olx0XHRpbnQgZXJyO1xuMTQwOTpcdFxuMTQxMDpcdFx0c2IgPSBzZ2V0X2ZjKGZjLCB0ZXN0LCBzZXRfYW5vbl9zdXBlcl9mYyk7XG4xNDExOlx0XHRpZiAoSVNfRVJSKHNiKSlcbjE0MTI6XHRcdFx0cmV0dXJuIFBUUl9FUlIoc2IpO1xuMTQxMzpcdFxuMTQxNDpcdFx0aWYgKCFzYi1cdTAwM2VzX3Jvb3QpIHtcbjE0MTU6XHRcdFx0ZXJyID0gZmlsbF9zdXBlcihzYiwgZmMpO1xuMTQxNjpcdFx0XHRpZiAoZXJyKVxuMTQxNzpcdFx0XHRcdGdvdG8gZXJyb3I7XG4xNDE4Olx0XG4xNDE5Olx0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfQUNUSVZFO1xuMTQyMDpcdFx0fVxuMTQyMTpcdFxuMTQyMjpcdFx0ZmMtXHUwMDNlcm9vdCA9IGRnZXQoc2ItXHUwMDNlc19yb290KTtcbjE0MjM6XHRcdHJldHVybiAwO1xuMTQyNDpcdFxuMTQyNTpcdGVycm9yOlxuMTQyNjpcdFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuMTQyNzpcdFx0cmV0dXJuIGVycjtcbjE0Mjg6XHR9XG4xNDI5Olx0RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7XG4xNDMwOlx0XG4xNDMxOlx0aW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbjE0MzI6XHRcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuMTQzMzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4xNDM0Olx0e1xuMTQzNTpcdFx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcbjE0MzY6XHR9XG4xNDM3Olx0RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XG4xNDM4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjgyCgkJCQkJCQlvdXRwdXQ6IDI5OQoJCQkJCQkJdGhvdWdodHM6IDE2NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEVST0ZTIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgcmVuYW1lIGFuZCBleHBvcnQgb2YgYHZmc19nZXRfc3VwZXJgIHRvIGBnZXRfdHJlZV9zdXBlcmAuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyB3aGVyZSBLTVNBTiBjb21lcyBpbnRvIHBsYXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQuCgpMZXQmIzM5O3MgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgS01TQU4gcnVsZXMgdG8gbWFrZSBzdXJlOgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyAtIE5vLCBub3RoaW5nIGdvZXMgdG8gdXNlcnNwYWNlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAtIE5vcGUsIG5vdCBzZWVpbmcgdGhhdCBoZXJlLgozLiAgQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHJlYWQgbGF0ZXIgLSBObywgZG9lc24mIzM5O3QgbG9vayBsaWtlIGFueSBvZiB0aGF0IGlzIGludHJvZHVjZWQuCjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGxldCBzdXJyb3VuZGluZyBjb2RlIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMgLSBObyBvYnZpb3VzIHZpb2xhdGlvbnMgdGhlcmUgZWl0aGVyLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgY29kZSwgdGhlIGNydWNpYWwgcGFydCBpcyB0aGUgYG1lbWNtcGAgY2FsbC4gSXQmIzM5O3MgY29tcGFyaW5nIGBzYmktJmd0O29wdGAgYW5kIGBuZXdfc2JpLSZndDtvcHRgIHdoaWNoIGFyZSBib3RoIHBhcnQgb2YgYHN0cnVjdCBlcm9mc19zYl9pbmZvYC4gQW5kIHRoZSBhbGxvY2F0aW9uLCBga3phbGxvY19vYmpgLCBpcyBrZXkgaGVyZS4gVGhhdCB6ZXJvZXMgdGhlIG1lbW9yeS4gU28sIHBhZGRpbmcgd2l0aGluIGBzYmktJmd0O29wdGAgKnNob3VsZCogYmUgemVyb2VkLCBhbmQgaXQmIzM5O3MgbmV2ZXIgbW9kaWZpZWQsIHNvIGl0IHN0YXlzIHplcm9lZC4gVGhlcmVmb3JlLCB0aGF0IGBtZW1jbXBgIGNvbXBhcmVzIGluaXRpYWxpemVkIG1lbW9yeS4KCkJ1dCwgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUuIElzIHRoZXJlIGFueSB3YXkgYHNiaS0mZ3Q7b3B0YCBpcyBjb3BpZWQgZnJvbSBzb21ld2hlcmUgZWxzZT8gTGV0JiMzOTtzIGNoZWNrIHdoZXJlIGBzYmlgIGlzIGFsbG9jYXRlZCwgc3RhcnRpbmcgd2l0aCBgZXJvZnNfaW5pdF9mc19jb250ZXh0YC4gUmlnaHQsIGBremFsbG9jX29iamAhIGBzYmktJmd0O29wdGAgaXMgYWx3YXlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGFuZCB0aGUgYWxsb2NhdGlvbiBpcyBpbml0aWFsaXplZCB0aGVyZS4KCk9rYXksIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwbGFjZXMgd2hlcmUgYHNiaWAgaXMgYWxsb2NhdGVkLiBMZXQgbWUgY2hlY2sgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYC4gQWgsIGp1c3QgYSBjaGVjay4gTm8gY2hhbmdlcyB0byB0aGUgYWxsb2NhdGlvbi4KCldoZXJlIGVsc2UgaXMgYG1lbWNtcGAgdXNlZD8gTG9va2luZyBhZ2FpbiwgdGhlcmUmIzM5O3Mgb25seSBvbmUgdXNlOiBgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbXBhcmlzb24gaGFwcGVucy4gQnV0LCBzaW5jZSBgc2JpYCBpcyBhbHdheXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jX29iamAsIHRoZXJlJiMzOTtzIG5vIHdheSB0aGUgbWVtb3J5IGNhbiBiZSB1bmluaXRpYWxpemVkLgoKT2theSwgbGV0JiMzOTtzIG5haWwgdGhpcyBkb3duLiBJcyB0aGVyZSBwYWRkaW5nPyBDaGVja2luZyBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLCB5ZXMsIHRoZXJlIGlzIHBhZGRpbmcgYmV0d2VlbiBgY2FjaGVfc3RyYXRlZ3lgICh1bnNpZ25lZCBjaGFyKSBhbmQgYG1vdW50X29wdGAgKHVuc2lnbmVkIGludCkuIFRoYXQgcGFkZGluZyBpcyB0aHJlZSBieXRlcy4gQnV0IHRoZSB3aG9sZSBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIHplcm9lZCBieSB0aGUgYWxsb2NhdGlvbiwgYW5kIHRob3NlIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBtb2RpZmllZC4gVGhleSBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gU28gd2hlbiB0aGF0IGBtZW1jbXBgIGdldHMgY2FsbGVkLCBpdCYjMzk7cyBjb21wYXJpbmcgemVyb2VkIHBhZGRpbmcgd2l0aCB6ZXJvZWQgcGFkZGluZy4gVGhhdCYjMzk7cyAqc2FmZSouCgpTbywgbm8uIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZSBwYXRjaCBqdXN0IGFkZHMgYSBuZXcgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbiBhbmQgYWxsb3dzIHNoYXJpbmcgc3VwZXJibG9ja3MgaWYgdGhlIGJhY2tpbmcgZmlsZSBhbmQgb3B0aW9ucyBhcmUgY29tcGF0aWJsZS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFyZSBlbm91Z2ggdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzLCBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVzZS1hZnRlci1mcmVlLiBXZSBkb24mIzM5O3QgbmVlZCBLTVNBTiBoZXJlLgoKT2theSwgaGVyZSYjMzk7cyBob3cgSSB3b3VsZCBzdW1tYXJpemUgdGhpczogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3VwZXJibG9ja19zaGFyZWAgb3B0aW9uLCBhbGxvd2luZyBzdXBlcmJsb2NrIHNoYXJpbmcgd2l0aCBpZGVudGljYWwgYmFja2luZyBmaWxlcyBhbmQgbW91bnQgb3B0aW9ucy4gSXQgdXNlcyBgbWVtY21wYCB0byBjb21wYXJlIG9wdGlvbnMsIGluY2x1ZGluZyBwYWRkaW5nIHdpdGhpbiBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBIb3dldmVyLCBzaW5jZSBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLCBhbGwgbWVtb3J5LCBpbmNsdWRpbmcgcGFkZGluZyB3aXRoaW4gYHNiaS0mZ3Q7b3B0YCwgaXMgemVyby1pbml0aWFsaXplZC4gU3Vic2VxdWVudCBtb2RpZmljYXRpb25zIG9ubHkgYWZmZWN0IHNwZWNpZmljIGZpZWxkcywgbGVhdmluZyB0aGUgcGFkZGluZyB1bnRvdWNoZWQuIFRodXMsIGBtZW1jbXBgIHNhZmVseSBjb21wYXJlcyBpbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ7IEtNU0FOIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBhbmQgYWxsb3dzIHNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUgb3B0aW9ucy4gSXQgdXNlcyBgbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXHUwMDNlb3B0YCwgaXMgemVyby1pbml0aWFsaXplZC4gU3Vic2VxdWVudCBtb2RpZmljYXRpb25zIHRvIGBzYmktXHUwMDNlb3B0YCBmaWVsZHMgZG8gbm90IGFsdGVyIHRoZSBwYWRkaW5nIGJ5dGVzLCBtZWFuaW5nIHRoZXkgcmVtYWluIHplcm9lZC4gVGhlcmVmb3JlLCB0aGUgYG1lbWNtcGAgb3BlcmF0aW9uIHNhZmVseSBjb21wYXJlcyBpbml0aWFsaXplZCBtZW1vcnkgYW5kIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKWAgdG8gY29tcGFyZSBtb3VudCBvcHRpb25zLiBXaGlsZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGNvbnRhaW5zIHBhZGRpbmcgYnl0ZXMgYmV0d2VlbiBgY2FjaGVfc3RyYXRlZ3lgICh1bnNpZ25lZCBjaGFyKSBhbmQgYG1vdW50X29wdGAgKHVuc2lnbmVkIGludCksIHRoZSBlbmNsb3NpbmcgYHN0cnVjdCBlcm9mc19zYl9pbmZvYCBpcyBhbHdheXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSBpbiBgZXJvZnNfaW5pdF9mc19jb250ZXh0YC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyB0aGUgcGFkZGluZyBieXRlcyBpbiBgc2JpLVx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVx1MDAzZW9wdGAgZmllbGRzIGRvIG5vdCBhbHRlciB0aGUgcGFkZGluZyBieXRlcywgbWVhbmluZyB0aGV5IHJlbWFpbiB6ZXJvZWQuIFRoZXJlZm9yZSwgdGhlIGBtZW1jbXBgIG9wZXJhdGlvbiBzYWZlbHkgY29tcGFyZXMgaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjMzOjM4LjM2Mzk2NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIxNjQxMjkxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X3RyZWVfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX3BhcnNlX3BhcmFtXCIsXG4gICAgXCJlcm9mc19mY19maWxsX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19nZXRfdHJlZVwiLFxuICAgIFwiZXJvZnNfZmNfcmVjb25maWd1cmVcIixcbiAgICBcImVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIHNpemVvZihzYmktXFx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXFx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVxcdTAwM2VvcHRgIGZpZWxkcyBkbyBub3QgYWx0ZXIgdGhlIHBhZGRpbmcgYnl0ZXMsIG1lYW5pbmcgdGhleSByZW1haW4gemVyb2VkLiBUaGVyZWZvcmUsIHRoZSBgbWVtY21wYCBvcGVyYXRpb24gc2FmZWx5IGNvbXBhcmVzIGluaXRpYWxpemVkIG1lbW9yeSBhbmQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0sIGFsbG93aW5nIG11bHRpcGxlIG1vdW50cyBvZiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgdG8gc2hhcmUgYSBzaW5nbGUgc3VwZXJibG9jay4gSXQgbW9kaWZpZXMgdGhlIFZGUyBieSBleHBvcnRpbmcgYGdldF90cmVlX3N1cGVyYCBhbmQgYWRkcyBsb2dpYyBpbiBFUk9GUyB0byBwYXJzZSB0aGUgbmV3IG9wdGlvbiBhbmQgaGFuZGxlIHN1cGVyYmxvY2sgc2hhcmluZy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHBhdGhzIGluIGZpbGVzeXN0ZW0gbW91bnRpbmcgYW5kIHN1cGVyYmxvY2sgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjMzOjM4LjM2Mzk3MDk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDA4NTkwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MTE0ZmY3M2Q3ZTQyMTIxMzY1NTYzZDA1ZjM4YzA5OWExZjZkMTgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjMzOjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcXG5pbmRleCBkMzAxZDlhYzk0NmE5Li4wMmNhZjNiMDYxZmVkIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcXG5AQCAtMTM5LDYgKzEzOSw5IEBAIGlub2RlX3NoYXJlICAgICAgICAgICAgRW5hYmxlIGlub2RlIHBhZ2Ugc2hhcmluZyBmb3IgdGhpcyBmaWxlc3lzdGVtLiAgSW5vZGVzIHdpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS5cXG4gc291cmNlPSVzICAgICAgICAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU3BlY2lmeSB0aGUgYmFja2luZyBpbWFnZSBhcyBhIHBhdGhcXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBhcyBhbiBhbHJlYWR5LW9wZW5lZCBmaWxlIGRlc2NyaXB0b3IuXFxuK3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWVcXG4rICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGVcXG4rICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXFxuID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbiBGaWxlLWJhY2tlZCBtb3VudHNcXG5AQCAtMTU2LDYgKzE1OSwxMCBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXRcXG4gcmVzaWRlcyBvbiBhIGJsb2NrIGRldmljZSwgdXNlIHRoZSB0cmFkaXRpb25hbCBibG9jayBkZXZpY2UgbW91bnQgcGF0aFxcbiBpbnN0ZWFkLlxcbiBcXG4rV2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCwgbXVsdGlwbGUgbW91bnRzIG9mIHRoZSBzYW1lIGJhY2tpbmdcXG4rZmlsZSBhdCB0aGUgc2FtZSBmc29mZnNldCB3aXRoIGNvbXBhdGlibGUgbW91bnQgb3B0aW9ucyBjYW4gc2hhcmUgYSBzaW5nbGVcXG4rc3VwZXJibG9jay4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxcbitcXG4gU3lzZnMgRW50cmllc1xcbiA9PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxcbmluZGV4IDU3YmQyMTg1OWM2NWQuLjg2ZGEyMTlmOGY0ZWMgMTAwNjQ0XFxuLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcXG5AQCAtMTU2LDYgKzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcXG4gI2RlZmluZSBFUk9GU19NT1VOVF9EQVhfTkVWRVJcXHRcXHQweDAwMDAwMDgwXFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfRElSRUNUX0lPXFx0XFx0MHgwMDAwMDEwMFxcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0lOT0RFX1NIQVJFXFx0XFx0MHgwMDAwMDIwMFxcbisjZGVmaW5lIEVST0ZTX01PVU5UX1NVUEVSQkxPQ0tfU0hBUkVcXHQweDAwMDAwNDAwXFxuIFxcbiAjZGVmaW5lIGNsZWFyX29wdChvcHQsIG9wdGlvbilcXHQoKG9wdCktXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pXFxuICNkZWZpbmUgc2V0X29wdChvcHQsIG9wdGlvbilcXHQoKG9wdCktXFx1MDAzZW1vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbilcXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcXG5pbmRleCBkZGM5NzE5ZTZkMThlLi5lMWExYTI3ZmJkMThkIDEwMDY0NFxcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcXG4rKysgYi9mcy9lcm9mcy9zdXBlci5jXFxuQEAgLTM4Niw3ICszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSlcXG4gZW51bSB7XFxuIFxcdE9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSxcXG4gXFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcXG4tXFx0T3B0X3NvdXJjZSxcXG4rXFx0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XFxuQEAgLTQxNSw2ICs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHtcXG4gXFx0ZnNwYXJhbV91NjQoXFxcImZzb2Zmc2V0XFxcIixcXHRcXHRcXHRPcHRfZnNvZmZzZXQpLFxcbiBcXHRmc3BhcmFtX2ZsYWcoXFxcImlub2RlX3NoYXJlXFxcIixcXHRcXHRPcHRfaW5vZGVfc2hhcmUpLFxcbiBcXHRmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKFxcXCJzb3VyY2VcXFwiLFxcdE9wdF9zb3VyY2UpLFxcbitcXHRmc3BhcmFtX2ZsYWcoXFxcInN1cGVyYmxvY2tfc2hhcmVcXFwiLFxcdE9wdF9zdXBlcmJsb2NrX3NoYXJlKSxcXG4gXFx0e31cXG4gfTtcXG4gXFxuQEAgLTU2MCw2ICs1NjEsMTIgQEAgc3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIElOT0RFX1NIQVJFKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XFxuK1xcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKVxcbitcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcXFwiLCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBPcHRfc291cmNlOlxcbiBcXHRcXHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XFxuIFxcdH1cXG5AQCAtNjUyLDYgKzY1OSwxNiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRcXHRlcnJvcmZjKGZjLCBcXFwiRlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbitcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkpIHtcXG4rXFx0XFx0ZXJyb3JmYyhmYywgXFxcInN1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2JpLVxcdTAwM2VkZXZzLVxcdTAwM2VleHRyYV9kZXZpY2VzKSB7XFxuK1xcdFxcdGVycm9yZmMoZmMsIFxcXCJzdXBlcmJsb2NrX3NoYXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0cmEgZGV2aWNlc1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0c2JpLVxcdTAwM2VibGtzemJpdHMgPSBQQUdFX1NISUZUO1xcbiBcXHRpZiAoIXNiLVxcdTAwM2VzX2JkZXYpIHtcXG5AQCAtNzc5LDYgKzc5NiwzNSBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXQgaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LFxcbisgKiBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlcyBuZXdfc2JpIGlzIGFsc28gc2hhcmVhYmxlLlxcbisgKi9cXG4rc3RhdGljIGludCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbit7XFxuK1xcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7XFxuK1xcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4rXFxuK1xcdGlmIChzYi1cXHUwMDNlc19pZmxhZ3MgXFx1MDAyNiBTQl9JX1JFVElSRUQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoIXNiaS1cXHUwMDNlZGlmMC5maWxlIHx8ICFuZXdfc2JpLVxcdTAwM2VkaWYwLmZpbGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXFx1MDAzZWRpZjAuZmlsZSkgPT0gZmlsZV9pbm9kZShuZXdfc2JpLVxcdTAwM2VkaWYwLmZpbGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBzYmktXFx1MDAzZWRpZjAuZnNvZmYgPT0gbmV3X3NiaS1cXHUwMDNlZGlmMC5mc29mZiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgIW1lbWNtcChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIHNpemVvZihzYmktXFx1MDAzZW9wdCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbit7XFxuK1xcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cXHUwMDNlc19mc19pbmZvO1xcbitcXG4rXFx0aWYgKCF0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKVxcbitcXHRcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbitcXG4rXFx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIHtcXG4gXFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuQEAgLTc5NCw3ICs4NDAsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0XFx0XFx0ZXJyb3JmYyhmYywgXFxcInNvdXJjZSBpcyB1bnN1cHBvcnRlZFxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbitcXHRcXHRyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsXFxuQEAgLTgxMiw3ICs4NTgsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFxuIFxcdFxcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVxcdTAwM2VkaWYwLmZpbGUpLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBzYmktXFx1MDAzZWRpZjAuZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlcmVhZF9mb2xpbylcXG4tXFx0XFx0XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpO1xcbiBcXHR9XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtODI1LDYgKzg3MSwxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFxuIFxcdERCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7XFxuIFxcbitcXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cXG4rXFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbiBcXHRpZiAobmV3X3NiaS1cXHUwMDNlZG9tYWluX2lkKVxcbiBcXHRcXHRlcm9mc19pbmZvKHNiLCBcXFwiaWdub3JpbmcgcmVjb25maWd1cmF0aW9uIGZvciBkb21haW5faWQuXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMTM4OSw3ICsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbisvKipcXG4rICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXFxuKyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXFxuKyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXFxuKyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrXFxuKyAqXFxuKyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xcbisgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoXFxuKyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxcbisgKi9cXG4raW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxcbiBcXHRcXHRpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXFxuQEAgLTE0MTYsMTIgKzE0MjYsMTMgQEAgc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpO1xcbiBcXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4ge1xcbi1cXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuK1xcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XFxuIFxcbkBAIC0xNDI5LDcgKzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4ge1xcbi1cXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbitcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7XFxuIFxcbkBAIC0xNDM5LDcgKzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbiBcXHRcXHR2b2lkICprZXkpXFxuIHtcXG4gXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IGtleTtcXG4tXFx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbitcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxcbkBAIC0xNTAsNiArMTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xcbiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiBcXG4rZXh0ZXJuIGludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuK1xcdFxcdFxcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXFxuK1xcdFxcdFxcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcXG4gZXh0ZXJuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzM6MzkuMjY1NTQ4MDg2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzUzOTc5MTkxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X3RyZWVfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX3BhcnNlX3BhcmFtXCIsXG4gICAgXCJlcm9mc19mY19maWxsX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19nZXRfdHJlZVwiLFxuICAgIFwiZXJvZnNfZmNfcmVjb25maWd1cmVcIixcbiAgICBcImVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZyBmaWxlIHRvIHNoYXJlIGEgc2luZ2xlIHN1cGVyYmxvY2suIEl0IG1vZGlmaWVzIHRoZSBWRlMgYnkgZXhwb3J0aW5nIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGFkZHMgbG9naWMgaW4gRVJPRlMgdG8gcGFyc2UgdGhlIG5ldyBvcHRpb24gYW5kIGhhbmRsZSBzdXBlcmJsb2NrIHNoYXJpbmcuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSBwYXRocyBpbiBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBzdXBlcmJsb2NrIG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTE0ZmY3M2Q3ZTQyMTIxMzY1NTYzZDA1ZjM4YzA5OWExZjZkMTgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTY6MzM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG5pbmRleCBkMzAxZDlhYzk0NmE5Li4wMmNhZjNiMDYxZmVkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG5AQCAtMTM5LDYgKzEzOSw5IEBAIGlub2RlX3NoYXJlICAgICAgICAgICAgRW5hYmxlIGlub2RlIHBhZ2Ugc2hhcmluZyBmb3IgdGhpcyBmaWxlc3lzdGVtLiAgSW5vZGVzIHdpXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlIGNhY2hlLlxuIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBhcyBhbiBhbHJlYWR5LW9wZW5lZCBmaWxlIGRlc2NyaXB0b3IuXG4rc3VwZXJibG9ja19zaGFyZSAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU2hhcmUgdGhlIHN1cGVyYmxvY2sgd2hlbiB0aGUgc2FtZVxuKyAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlXG4rICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXG4gPT09PT09PT09PT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiBGaWxlLWJhY2tlZCBtb3VudHNcbkBAIC0xNTYsNiArMTU5LDEwIEBAIE9ubHkgcmVndWxhciBmaWxlcyBhcmUgYWNjZXB0ZWQgYXMgYmFja2luZyBmaWxlczsgdG8gbW91bnQgYW4gaW1hZ2UgdGhhdFxuIHJlc2lkZXMgb24gYSBibG9jayBkZXZpY2UsIHVzZSB0aGUgdHJhZGl0aW9uYWwgYmxvY2sgZGV2aWNlIG1vdW50IHBhdGhcbiBpbnN0ZWFkLlxuIFxuK1doZW4gc3VwZXJibG9ja19zaGFyZSBpcyBzcGVjaWZpZWQsIG11bHRpcGxlIG1vdW50cyBvZiB0aGUgc2FtZSBiYWNraW5nXG4rZmlsZSBhdCB0aGUgc2FtZSBmc29mZnNldCB3aXRoIGNvbXBhdGlibGUgbW91bnQgb3B0aW9ucyBjYW4gc2hhcmUgYSBzaW5nbGVcbitzdXBlcmJsb2NrLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXG4rXG4gU3lzZnMgRW50cmllc1xuID09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbkBAIC0xNTYsNiArMTU2LDcgQEAgc3RydWN0IGVyb2ZzX3NiX2luZm8ge1xuICNkZWZpbmUgRVJPRlNfTU9VTlRfREFYX05FVkVSXHRcdDB4MDAwMDAwODBcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RJUkVDVF9JT1x0XHQweDAwMDAwMTAwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9JTk9ERV9TSEFSRVx0XHQweDAwMDAwMjAwXG4rI2RlZmluZSBFUk9GU19NT1VOVF9TVVBFUkJMT0NLX1NIQVJFXHQweDAwMDAwNDAwXG4gXG4gI2RlZmluZSBjbGVhcl9vcHQob3B0LCBvcHRpb24pXHQoKG9wdCktXHUwMDNlbW91bnRfb3B0IFx1MDAyNj0gfkVST0ZTX01PVU5UXyMjb3B0aW9uKVxuICNkZWZpbmUgc2V0X29wdChvcHQsIG9wdGlvbilcdCgob3B0KS1cdTAwM2Vtb3VudF9vcHQgfD0gRVJPRlNfTU9VTlRfIyNvcHRpb24pXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbmluZGV4IGRkYzk3MTllNmQxOGUuLmUxYTFhMjdmYmQxOGQgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9zdXBlci5jXG4rKysgYi9mcy9lcm9mcy9zdXBlci5jXG5AQCAtMzg2LDcgKzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIGVudW0ge1xuIFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxuIFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcbi1cdE9wdF9zb3VyY2UsXG4rXHRPcHRfc291cmNlLCBPcHRfc3VwZXJibG9ja19zaGFyZSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbXSA9IHtcbkBAIC00MTUsNiArNDE1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBlcm9mc19mc19wYXJhbWV0ZXJzW10gPSB7XG4gXHRmc3BhcmFtX3U2NChcImZzb2Zmc2V0XCIsXHRcdFx0T3B0X2Zzb2Zmc2V0KSxcbiBcdGZzcGFyYW1fZmxhZyhcImlub2RlX3NoYXJlXCIsXHRcdE9wdF9pbm9kZV9zaGFyZSksXG4gXHRmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKFwic291cmNlXCIsXHRPcHRfc291cmNlKSxcbitcdGZzcGFyYW1fZmxhZyhcInN1cGVyYmxvY2tfc2hhcmVcIixcdE9wdF9zdXBlcmJsb2NrX3NoYXJlKSxcbiBcdHt9XG4gfTtcbiBcbkBAIC01NjAsNiArNTYxLDEyIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRlbHNlXG4gXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZTpcbitcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpXG4rXHRcdFx0ZXJyb3JmYyhmYywgXCIlcyBvcHRpb24gbm90IHN1cHBvcnRlZFwiLCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgT3B0X3NvdXJjZTpcbiBcdFx0cmV0dXJuIGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShmYywgcGFyYW0pO1xuIFx0fVxuQEAgLTY1Miw2ICs2NTksMTYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0ZXJyb3JmYyhmYywgXCJGU0RBWCBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbitcdCAgICB0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkpIHtcbitcdFx0ZXJyb3JmYyhmYywgXCJzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNiaS1cdTAwM2VkZXZzLVx1MDAzZWV4dHJhX2RldmljZXMpIHtcbitcdFx0ZXJyb3JmYyhmYywgXCJzdXBlcmJsb2NrX3NoYXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0cmEgZGV2aWNlc1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRzYmktXHUwMDNlYmxrc3piaXRzID0gUEFHRV9TSElGVDtcbiBcdGlmICghc2ItXHUwMDNlc19iZGV2KSB7XG5AQCAtNzc5LDYgKzc5NiwzNSBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogVGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXQgaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LFxuKyAqIHNvIHRoYXQgdGhlIG1lbWNtcCBsYXRlciBlbnN1cmVzIG5ld19zYmkgaXMgYWxzbyBzaGFyZWFibGUuXG4rICovXG4rc3RhdGljIGludCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Ioc2IpO1xuK1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKm5ld19zYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG4rXG4rXHRpZiAoc2ItXHUwMDNlc19pZmxhZ3MgXHUwMDI2IFNCX0lfUkVUSVJFRClcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAoIXNiaS1cdTAwM2VkaWYwLmZpbGUgfHwgIW5ld19zYmktXHUwMDNlZGlmMC5maWxlKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBmaWxlX2lub2RlKHNiaS1cdTAwM2VkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS1cdTAwM2VkaWYwLmZpbGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHNiaS1cdTAwM2VkaWYwLmZzb2ZmID09IG5ld19zYmktXHUwMDNlZGlmMC5mc29mZiBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpO1xuK31cbitcbitzdGF0aWMgaW50IGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuK3tcbitcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG4rXG4rXHRpZiAoIXRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKVxuK1x0XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuK1xuK1x0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbit9XG4rXG4gc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4ge1xuIFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbkBAIC03OTQsNyArODQwLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdFx0ZXJyb3JmYyhmYywgXCJzb3VyY2UgaXMgdW5zdXBwb3J0ZWRcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcdFx0cmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpO1xuIFx0fVxuIFxuIFx0cmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlcixcbkBAIC04MTIsNyArODU4LDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXG4gXHRcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSktXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHNiaS1cdTAwM2VkaWYwLmZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZXJlYWRfZm9saW8pXG4tXHRcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcdFx0XHRyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7XG4gXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjUsNiArODcxLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0REJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTtcbiBcbitcdC8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqL1xuK1x0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0aWYgKG5ld19zYmktXHUwMDNlZG9tYWluX2lkKVxuIFx0XHRlcm9mc19pbmZvKHNiLCBcImlnbm9yaW5nIHJlY29uZmlndXJhdGlvbiBmb3IgZG9tYWluX2lkLlwiKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0xMzg5LDcgKzEzODksMTcgQEAgc3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuKy8qKlxuKyAqIGdldF90cmVlX3N1cGVyIC0gR2V0IGEgc3VwZXJibG9jaywgb3B0aW9uYWxseSBzaGFyaW5nIGFuIGV4aXN0aW5nIG9uZVxuKyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXG4rICogQHRlc3Q6IENvbXBhcmlzb24gZnVuY3Rpb24gdG8gZmluZCBhIG1hdGNoaW5nIGV4aXN0aW5nIHN1cGVyYmxvY2ssIG9yIE5VTExcbisgKiBAZmlsbF9zdXBlcjogSGVscGVyIHRvIGluaXRpYWxpc2UgYSBuZXcgc3VwZXJibG9ja1xuKyAqXG4rICogSWYgQHRlc3QgaXMgbm9uLU5VTEwgYW5kIG1hdGNoZXMgYW4gZXhpc3Rpbmcgc3VwZXJibG9jaywgdGhhdCBzdXBlcmJsb2NrIGlzXG4rICogcmV1c2VkOyBvdGhlcndpc2UgYSBuZXcgYW5vbnltb3VzIHN1cGVyYmxvY2sgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGlzZWQgd2l0aFxuKyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxuKyAqL1xuK2ludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcbiBcdFx0aW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbkBAIC0xNDE2LDEyICsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbitFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTtcbiBcbiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHQgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbiB7XG4tXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTtcbiBcbkBAIC0xNDI5LDcgKzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7XG4gXG5AQCAtMTQzOSw3ICsxNDUwLDcgQEAgaW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0dm9pZCAqa2V5KVxuIHtcbiBcdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGtleTtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTtcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbkBAIC0xNTAsNiArMTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKTtcbiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIFxuK2V4dGVybiBpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuK1x0XHRcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4rXHRcdFx0IGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpO1xuIGV4dGVybiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjMzOjM5LjI2NTU0OTU5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMTg0NTk4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRVJPRlMgU3VwZXJibG9jayBTaGFyaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBkaWdnaW5nIGludG8gdGhlIGNvcmUgVkZTIGFuZCB0aGUgRVJPRlMgaW1wbGVtZW50YXRpb24uIFNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiBtb3VudGluZyB0aGUgc2FtZSBiYWNraW5nIGZpbGUgbXVsdGlwbGUgdGltZXMgc291bmRzIGxpa2UgYSBzb2xpZCBvcHRpbWl6YXRpb24sIGJ1dCBhbnl0aGluZyB0aGF0IHRvdWNoZXMgdGhpcyBsZXZlbCBvZiB0aGUgZmlsZXN5c3RlbSwgZXNwZWNpYWxseSBhZGRpbmcgbmV3IG9wdGlvbnMsIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBzY3J1dGlueSBhbmQgdGhvcm91Z2ggdGVzdGluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nOyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBkYXRhIGludGVncml0eSBvciBmaWxlc3lzdGVtIHN0YWJpbGl0eSBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlci5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgcGF0Y2ggY29kZSBpdHNlbGYgaGVscGZ1bGx5IHBvaW50cyBvdXQgYENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRWAgd2l0aGluIGBmcy9lcm9mcy9zdXBlci5jYC4gQ2xlYXJseSwgdGhhdCdzIGEgcHJlcmVxdWlzaXRlIHRvIGVuYWJsZSB0aGUgYHN1cGVyYmxvY2tfc2hhcmVgIG9wdGlvbi4gSXQgZXhwbGljaXRseSBjaGVja3MgZm9yIGl0OlxuXG5gYGBjXG4gICAgY2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZTpcbiAgICAgIGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKVxuICAgICAgICBlcnJvcmZjKGZjLCBcIiVzIG9wdGlvbiBub3Qgc3VwcG9ydGVkXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbiAgICAgIGVsc2VcbiAgICAgICAgc2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbiAgICAgIGJyZWFrO1xuYGBgXG5cbkl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaWYgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCBpcyBub3QgZW5hYmxlZCwgdGhlIG1vdW50IG9wdGlvbiB3aWxsIGJlIHJlamVjdGVkLiBPYnZpb3VzbHksIGBFUk9GU19GU2AgaXMgcmVxdWlyZWQgdG8gYWN0dWFsbHkgZW5hYmxlIEVST0ZTIGluIHRoZSBmaXJzdCBwbGFjZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uc3VsdCB0aGUgYGZzL2Vyb2ZzL0tjb25maWdgIGZpbGUgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcyBvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAuIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozMzo0Ni4zODQwMTI1MjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNjMxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9LY29uZmlnPTg1PWNvbmZpZyBFUk9GU19GU19TRUNVUklUWVxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy05Ny1cXG5mcy9lcm9mcy9LY29uZmlnOjk4OmNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxcbmZzL2Vyb2ZzL0tjb25maWctOTktXFx0Ym9vbCBcXFwiRmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozMzo0Ni40MjgxNzk2ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc3MTA0NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEVST0ZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBhc3BlY3Qgb2YgRVJPRlMgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIEVST0ZTIGZpbGVzeXN0ZW0gZGlyZWN0b3J5LiBMZXQncyBzdGFydCB3aXRoIGBmcy9lcm9mcy9LY29uZmlnYCBhbmQsIGdpdmVuIG15IGdlbmVyYWwgZmFtaWxpYXJpdHkgd2l0aCB0aGVzZSBmaWxlcywgSSdsbCBzdGFydCBsb29raW5nIGFyb3VuZCBsaW5lIDk4LiBUaGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHBvaW50IHRvIGJlZ2luOyB0aGF0IGxpbmUgbGlrZWx5IGNvdmVycyBhIHNwZWNpZmljIGZlYXR1cmUgb3Igb3B0aW9uIEknbSB0cnlpbmcgdG8gaWRlbnRpZnkuIFRpbWUgdG8gZ2V0IG15IGV5ZXMgb24gdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzM6NTAuMzA1Mjg2Mjg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHQgIFNlY3VyaXR5IGxhYmVscyBwcm92aWRlIGFuIGFjY2VzcyBjb250cm9sIGZhY2lsaXR5IHRvIHN1cHBvcnQgTGludXhcXG4gIDkxOlxcdFxcdCAgU2VjdXJpdHkgTW9kZWxzIChMU01zKSBhY2NlcHRlZCBieSBBcHBBcm1vciwgU0VMaW51eCwgU21hY2sgYW5kIFRPTU9ZT1xcbiAgOTI6XFx0XFx0ICBMaW51eC4gVGhpcyBvcHRpb24gZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZVxcbiAgOTM6XFx0XFx0ICBzZWN1cml0eSBsYWJlbHMgaW4gdGhlIGVyb2ZzIGZpbGVzeXN0ZW0sIHNvIHRoYXQgaXQgcmVxdWlyZXMgZW5hYmxpbmdcXG4gIDk0OlxcdFxcdCAgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IGluIGFkdmFuY2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUsIHNheSBOLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcXG4gIDk5OlxcdFxcdGJvb2wgXFxcIkZpbGUtYmFja2VkIEVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMTAwOlxcdFxcdGRlcGVuZHMgb24gRVJPRlNfRlNcXG4gMTAxOlxcdFxcdGRlZmF1bHQgeVxcbiAxMDI6XFx0XFx0aGVscFxcbiAxMDM6XFx0XFx0ICBUaGlzIGFsbG93cyBFUk9GUyB0byB1c2UgZmlsZXN5c3RlbSBpbWFnZSBmaWxlcyBkaXJlY3RseSwgd2l0aG91dFxcbiAxMDQ6XFx0XFx0ICB0aGUgaW50ZXJjZXNzaW9uIG9mIGxvb3BiYWNrIGJsb2NrIGRldmljZXMgb3IgbGlrZXdpc2UuIEl0IGlzXFxuIDEwNTpcXHRcXHQgIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGNvbnRhaW5lciBpbWFnZXMgd2l0aCBudW1lcm91cyBibG9icyBhbmRcXG4gMTA2OlxcdFxcdCAgb3RoZXIgc2FuZGJveGVzLCB3aGVyZSBsb29wIGRldmljZXMgYmVoYXZlIGludHJpY2F0ZWx5LiAgSXQgY2FuIGFsc29cXG4gMTA3OlxcdFxcdCAgYmUgdXNlZCB0byBzaW1wbGlmeSBlcnJvci1wcm9uZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIHVubmVjZXNzYXJ5XFxuIDEwODpcXHRcXHQgIHZpcnR1YWwgYmxvY2sgZGV2aWNlcy5cXG4gMTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozMzo1MC4zMDUzNTE2OThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzUxNTk4ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFUk9GUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgRVJPRlMgcGF0Y2guIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYEVST0ZTX0ZTYCBhbmQgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGFuZCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcy5cblxuRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyB0aGVzZSBmdW5jdGlvbnM6IGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIChuZXcpLCBgZXJvZnNfZmlsZV9nZXRfdHJlZWAgKG5ldyksIGBlcm9mc19mY19nZXRfdHJlZWAsIGBlcm9mc19mY19yZWNvbmZpZ3VyZWAsIGFuZCBhbHNvIGBnZXRfdHJlZV9zdXBlcmAgKHdoaWNoIGlzIG5ld2x5IGV4cG9ydGVkLCBwcmV2aW91c2x5IGB2ZnNfZ2V0X3N1cGVyYCkuXG5cblRoZSBwcm9tcHQncyBndWlkYW5jZSBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiBJIHNlZSB0aGF0IGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYCBhbmQgYGVyb2ZzX2ZpbGVfZ2V0X3RyZWVgIGFyZSBpbmRlZWQgc3RhdGljLiBUaGF0IG1lYW5zIHRoZXkgYXJlIGludGVybmFsIHRvIHRoZSBtb2R1bGUsIG5vdCBhbiBleHRlcm5hbGx5IGFjY2Vzc2libGUgZW50cnlwb2ludC4gSSB3YW50IHRvIGF2b2lkIGZvY3VzaW5nIG9uIHRoZXNlIGlmIHRoZXJlJ3MgYSBnb29kIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUuXG5cblNvLCBhY2NvcmRpbmcgdG8gbXkgaW5pdGlhbCBhbmFseXNpcywgSSBzaG91bGQgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlYCwgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCwgYW5kIHRoZSBuZXdseSBleHBvcnRlZCBgZ2V0X3RyZWVfc3VwZXJgLlxuXG5Pa2F5LCBJJ3ZlIGNoZWNrZWQgYW5kIHRoZXNlIGZ1bmN0aW9uczogYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYCwgYGVyb2ZzX2ZjX2ZpbGxfc3VwZXJgLCBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBhbmQgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCdzIGEgYml0IGRpc2FwcG9pbnRpbmcuIEJ1dCB3YWl0Li4uIGV2ZW4gaWYgdGhleSdyZSBzdGF0aWMsIHRoZXkncmUgdXNlZCBhcyBjYWxsYmFja3Mgd2l0aGluIGBmc19jb250ZXh0X29wZXJhdGlvbnNgLiBUaGF0IGNoYW5nZXMgdGhpbmdzLCBpdCBtYWtlcyB0aGVtIG1vcmUgaW1wb3J0YW50LlxuXG5BaCwgYnV0IGBnZXRfdHJlZV9zdXBlcmAgaW4gYGZzL3N1cGVyLmNgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBTbywgdGhhdCBvbmUgbG9va3MgcHJvbWlzaW5nLlxuXG5Ob3csIGNvbmNlcm5pbmcgYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYCBzcGVjaWZpY2FsbHksIGl0ICppcyogc3RhdGljLCB3aGljaCBpc24ndCBpZGVhbCwgYnV0IGl0J3MgYW4gZW50cnkgcG9pbnQgZm9yIHBhcnNpbmcgbW91bnQgb3B0aW9ucywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzLCBpdCdzIHBvc3NpYmxlIHRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLlxuXG5MZXQgbWUgdGhpbmsuLi4gaXMgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBgZnMvZXJvZnMvc3VwZXIuY2AgdGhhdCBjb3VsZCBiZSB1c2VkPyBUaGF0J3Mgd2hhdCBJIGhhdmUgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozMzo1OS42NTY5NTM4ODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0OTMwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXJvZnNfZmNfcGFyc2VfcGFyYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9zdXBlci5jPTQ0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTQ3Ni1cXG5mcy9lcm9mcy9zdXBlci5jOjQ3NzpzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG5mcy9lcm9mcy9zdXBlci5jLTQ3OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGVyb2ZzX2NvbnRleHRfb3BzID0ge1xcbmZzL2Vyb2ZzL3N1cGVyLmM6OTQzOlxcdC5wYXJzZV9wYXJhbVxcdD0gZXJvZnNfZmNfcGFyc2VfcGFyYW0sXFxuZnMvZXJvZnMvc3VwZXIuYy05NDQtXFx0LmdldF90cmVlICAgICAgID0gZXJvZnNfZmNfZ2V0X3RyZWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjMzOjU5LjcwNDQ1MTQxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTYzNTkwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBFUk9GUyBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBFUk9GUyBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBgZXJvZnNfY29udGV4dF9vcHNgIGFuZCB0aGUgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoYXQgYGVyb2ZzX2NvbnRleHRfb3BzYCBtdXN0IGJlIGEgY3JpdGljYWwgc3RydWN0dXJlLCBsaWtlbHkgY29udGFpbmluZyBwb2ludGVycyB0byB0aGUgY29yZSBvcGVyYXRpb25hbCBmdW5jdGlvbnMgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBJdCBzZWVtcyB0aGF0IHRoaXMgc3RydWN0dXJlIGlzIHdoYXQgZ2V0cyBzZXQgZHVyaW5nIHRoZSBtb3VudCB0aW1lIG9wZXJhdGlvbiBzbyB0aGF0IHRoZSBmaWxlc3lzdGVtIGRyaXZlciBjYW4gaG9vayBpbnRvIGFueSBuZWVkZWQgbW91bnQgcGFyYW1ldGVycy4gVGhlIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIGZ1bmN0aW9uIG11c3QgYmUgdGhlIHBvaW50IHdoZXJlIHRoaXMgYWxsIGdldHMgc3RpdGNoZWQgdG9nZXRoZXIuIFRoZXJlZm9yZSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24gaXMgYSBjcml0aWNhbCBwaWVjZSBpbiB1bmRlcnN0YW5kaW5nIHRoZSBib290IG9wZXJhdGlvbiBmb3IgYW4gRVJPRlMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIGxvb2sgaW50byB0aGF0IHJlbGF0aW9uc2hpcCBhIGJpdCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6MDMuNjAwODEyNDE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM0NDc3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcm9mc19pbml0X2ZzX2NvbnRleHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9zdXBlci5jPTk0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBlcm9mc19jb250ZXh0X29wcyA9IHtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtOTQ4LVxcbmZzL2Vyb2ZzL3N1cGVyLmM6OTQ5OnN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9lcm9mcy9zdXBlci5jLTk1MC17XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTEwMDk9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGVyb2ZzX2ZzX3R5cGUgPSB7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTEwMTEtXFx0Lm5hbWUgICAgICAgICAgID0gXFxcImVyb2ZzXFxcIixcXG5mcy9lcm9mcy9zdXBlci5jOjEwMTI6XFx0LmluaXRfZnNfY29udGV4dCA9IGVyb2ZzX2luaXRfZnNfY29udGV4dCxcXG5mcy9lcm9mcy9zdXBlci5jLTEwMTMtXFx0LmtpbGxfc2IgICAgICAgID0gZXJvZnNfa2lsbF9zYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6MDMuNjQ2MTYyODkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTMyMjg3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEVST0ZTIEZ1enppbmcgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgdGhpcyBFUk9GUyBjb2RlLCBwYXJ0aWN1bGFybHkgaW4gbGlnaHQgb2YgdGhpcyBuZXcgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbi4gVGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgZ2V0X3RyZWVfc3VwZXJgIGFzIHRoZSBmb2N1cyBiZWNhdXNlIGl0J3Mgbm9uLXN0YXRpYywgYnV0IEkgYWxzbyBjb25zaWRlcmVkIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgc2luY2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHN5emthbGxlciBhcyBsb25nIGFzIHRoZXkgYXJlbid0IGlubGluZWQsIGJ1dCBJIHJlYWxpemVkIGBnZXRfdHJlZV9zdXBlcmAgaXMgYSBzdWl0YWJsZSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50LlxuXG5Ob3csIHdoYXQgYWJvdXQgRVJPRlMtc3BlY2lmaWMgZnVuY3Rpb25zPyBHaXZlbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSwgaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgb24gdGhlIHN0YXRpYyBvbmVzIHRoYXQgYXJlIHVzZWQgYXMgY2FsbGJhY2tzLiBTaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuLCB0aGV5J3JlIHVubGlrZWx5IHRvIGJlIGlubGluZWQuIEkgd2FzIGluaXRpYWxseSBnb2luZyB0byBsaXN0OlxuXG4qICAgYGdldF90cmVlX3N1cGVyYFxuKiAgIGBlcm9mc19mY19wYXJzZV9wYXJhbWBcbiogICBgZXJvZnNfZmNfZmlsbF9zdXBlcmBcbiogICBgZXJvZnNfZmNfZ2V0X3RyZWVgXG4qICAgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYFxuXG5UaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBlcm9mc19maWxlX2dldF90cmVlYCBhbmQgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGFyZSBhbHNvIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgYWxzbyB0YWtlbi4gYGVyb2ZzX2ZpbGVfZ2V0X3RyZWVgIGlzIGNhbGxlZCBkaXJlY3RseSBieSBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBhbmQgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrIHRvIGBnZXRfdHJlZV9zdXBlcmAsIHNvIGl0cyBhZGRyZXNzIGlzIGFsc28gdGFrZW4uIFRoZXNlIGFyZSBpbXBvcnRhbnQuXG5cblNvLCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGdldF90cmVlX3N1cGVyYCBhbmQgYWxsIHRoZXNlIEVST0ZTIGNhbGxiYWNrIGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlYCwgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCwgYW5kIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYGdldF90cmVlX3N1cGVyYCBpcyBpbmRlZWQgdGhlIG9ubHkgZXhwb3J0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbiBoZXJlLiBZZXMsIGl0J3MgZXhwb3J0ZWQsIHNvIHRoYXQgbG9va3MgY29ycmVjdC5cblxuUmVnYXJkaW5nIHRoZSBvdmVyYWxsIHN0cmF0ZWd5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IGNvZGUgcGF0aHMgcmVsYXRlZCB0byBtb3VudGluZyBhbmQgc3VwZXJibG9jayBtYW5hZ2VtZW50IGR1ZSB0byB0aGUgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbi4gVGhhdCBvcGVucyB1cCBwb3RlbnRpYWwgZnV6emluZyBvcHBvcnR1bml0aWVzIGluIHRoZSBFUk9GUyBmaWxlc3lzdGVtIGNvZGUsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIFZGUy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgYm90aCBgRVJPRlNfRlNgIGFuZCBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIHRvIGNvdmVyIHRoZXNlIG5ldyBwYXRocyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI4MCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6MTQuNTc4NDUxOTY0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwMTA3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVST0ZTX0ZTXCIsXG4gICAgXCJFUk9GU19GU19CQUNLRURfQllfRklMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdldF90cmVlX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19wYXJzZV9wYXJhbVwiLFxuICAgIFwiZXJvZnNfZmNfZmlsbF9zdXBlclwiLFxuICAgIFwiZXJvZnNfZmNfZ2V0X3RyZWVcIixcbiAgICBcImVyb2ZzX2ZjX3JlY29uZmlndXJlXCIsXG4gICAgXCJlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgbXVsdGlwbGUgbW91bnRzIG9mIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSB0byBzaGFyZSBhIHNpbmdsZSBzdXBlcmJsb2NrLiBJdCBtb2RpZmllcyB0aGUgVkZTIGJ5IGV4cG9ydGluZyBgZ2V0X3RyZWVfc3VwZXJgIGFuZCBhZGRzIGxvZ2ljIGluIEVST0ZTIHRvIHBhcnNlIHRoZSBuZXcgb3B0aW9uIGFuZCBoYW5kbGUgc3VwZXJibG9jayBzaGFyaW5nLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNvZGUgcGF0aHMgaW4gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgc3VwZXJibG9jayBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfdHJlZV9zdXBlclwiLFxuICAgIFwiZXJvZnNfZmNfcGFyc2VfcGFyYW1cIixcbiAgICBcImVyb2ZzX2ZjX2ZpbGxfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX2dldF90cmVlXCIsXG4gICAgXCJlcm9mc19mY19yZWNvbmZpZ3VyZVwiLFxuICAgIFwiZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0sIGFsbG93aW5nIG11bHRpcGxlIG1vdW50cyBvZiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgdG8gc2hhcmUgYSBzaW5nbGUgc3VwZXJibG9jay4gSXQgbW9kaWZpZXMgdGhlIFZGUyBieSBleHBvcnRpbmcgYGdldF90cmVlX3N1cGVyYCBhbmQgYWRkcyBsb2dpYyBpbiBFUk9GUyB0byBwYXJzZSB0aGUgbmV3IG9wdGlvbiBhbmQgaGFuZGxlIHN1cGVyYmxvY2sgc2hhcmluZy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHBhdGhzIGluIGZpbGVzeXN0ZW0gbW91bnRpbmcgYW5kIHN1cGVyYmxvY2sgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjE0LjY2MzQ4Mzc4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1ODY0NjAxMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6MTQuNjY0MDczMTg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNTg2NDAwODAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBhbmQgYWxsb3dzIHNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUgb3B0aW9ucy4gSXQgdXNlcyBgbWVtY21wKFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgXFx1MDAyNm5ld19zYmktXFx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cXHUwMDNlb3B0KSlgIHRvIGNvbXBhcmUgbW91bnQgb3B0aW9ucy4gV2hpbGUgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCBjb250YWlucyBwYWRkaW5nIGJ5dGVzIGJldHdlZW4gYGNhY2hlX3N0cmF0ZWd5YCAodW5zaWduZWQgY2hhcikgYW5kIGBtb3VudF9vcHRgICh1bnNpZ25lZCBpbnQpLCB0aGUgZW5jbG9zaW5nIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AgaXMgYWx3YXlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGAuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgdGhlIHBhZGRpbmcgYnl0ZXMgaW4gYHNiaS1cXHUwMDNlb3B0YCwgaXMgemVyby1pbml0aWFsaXplZC4gU3Vic2VxdWVudCBtb2RpZmljYXRpb25zIHRvIGBzYmktXFx1MDAzZW9wdGAgZmllbGRzIGRvIG5vdCBhbHRlciB0aGUgcGFkZGluZyBieXRlcywgbWVhbmluZyB0aGV5IHJlbWFpbiB6ZXJvZWQuIFRoZXJlZm9yZSwgdGhlIGBtZW1jbXBgIG9wZXJhdGlvbiBzYWZlbHkgY29tcGFyZXMgaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTExNGZmNzNkN2U0MjEyMTM2NTU2M2QwNWYzOGMwOTlhMWY2ZDE4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjMzOjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuaW5kZXggZDMwMWQ5YWM5NDZhOS4uMDJjYWYzYjA2MWZlZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuQEAgLTEzOSw2ICsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS5cbiBzb3VyY2U9JXMgICAgICAgICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTcGVjaWZ5IHRoZSBiYWNraW5nIGltYWdlIGFzIGEgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLlxuK3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWVcbisgICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZVxuKyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gRmlsZS1iYWNrZWQgbW91bnRzXG5AQCAtMTU2LDYgKzE1OSwxMCBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXRcbiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoXG4gaW5zdGVhZC5cbiBcbitXaGVuIHN1cGVyYmxvY2tfc2hhcmUgaXMgc3BlY2lmaWVkLCBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZ1xuK2ZpbGUgYXQgdGhlIHNhbWUgZnNvZmZzZXQgd2l0aCBjb21wYXRpYmxlIG1vdW50IG9wdGlvbnMgY2FuIHNoYXJlIGEgc2luZ2xlXG4rc3VwZXJibG9jay4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuK1xuIFN5c2ZzIEVudHJpZXNcbiA9PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbmluZGV4IDU3YmQyMTg1OWM2NWQuLjg2ZGEyMTlmOGY0ZWMgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5AQCAtMTU2LDYgKzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlx0XHQweDAwMDAwMDgwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cdFx0MHgwMDAwMDEwMFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcdFx0MHgwMDAwMDIwMFxuKyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRVx0MHgwMDAwMDQwMFxuIFxuICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCBcdTAwMjY9IH5FUk9GU19NT1VOVF8jI29wdGlvbilcbiAjZGVmaW5lIHNldF9vcHQob3B0LCBvcHRpb24pXHQoKG9wdCktXHUwMDNlbW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKVxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jXG5pbmRleCBkZGM5NzE5ZTZkMThlLi5lMWExYTI3ZmJkMThkIDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xuKysrIGIvZnMvZXJvZnMvc3VwZXIuY1xuQEAgLTM4Niw3ICszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSlcbiBlbnVtIHtcbiBcdE9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSxcbiBcdE9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsXG4tXHRPcHRfc291cmNlLFxuK1x0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XG5AQCAtNDE1LDYgKzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0ge1xuIFx0ZnNwYXJhbV91NjQoXCJmc29mZnNldFwiLFx0XHRcdE9wdF9mc29mZnNldCksXG4gXHRmc3BhcmFtX2ZsYWcoXCJpbm9kZV9zaGFyZVwiLFx0XHRPcHRfaW5vZGVfc2hhcmUpLFxuIFx0ZnNwYXJhbV9maWxlX29yX3N0cmluZyhcInNvdXJjZVwiLFx0T3B0X3NvdXJjZSksXG4rXHRmc3BhcmFtX2ZsYWcoXCJzdXBlcmJsb2NrX3NoYXJlXCIsXHRPcHRfc3VwZXJibG9ja19zaGFyZSksXG4gXHR7fVxuIH07XG4gXG5AQCAtNTYwLDYgKzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ZWxzZVxuIFx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XG4rXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKVxuK1x0XHRcdGVycm9yZmMoZmMsIFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcIiwgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE9wdF9zb3VyY2U6XG4gXHRcdHJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTtcbiBcdH1cbkBAIC02NTIsNiArNjU5LDE2IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdGVycm9yZmMoZmMsIFwiRlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4rXHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG4rXHRcdGVycm9yZmMoZmMsIFwic3VwZXJibG9ja19zaGFyZSBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbitcdCAgICBzYmktXHUwMDNlZGV2cy1cdTAwM2VleHRyYV9kZXZpY2VzKSB7XG4rXHRcdGVycm9yZmMoZmMsIFwic3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXNcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuIFx0c2JpLVx1MDAzZWJsa3N6Yml0cyA9IFBBR0VfU0hJRlQ7XG4gXHRpZiAoIXNiLVx1MDAzZXNfYmRldikge1xuQEAgLTc3OSw2ICs3OTYsMzUgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFRoZSBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgd2l0aCBhIHNiaSB0aGF0IGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCxcbisgKiBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlcyBuZXdfc2JpIGlzIGFsc28gc2hhcmVhYmxlLlxuKyAqL1xuK3N0YXRpYyBpbnQgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTtcbitcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0aWYgKHNiLVx1MDAzZXNfaWZsYWdzIFx1MDAyNiBTQl9JX1JFVElSRUQpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFzYmktXHUwMDNlZGlmMC5maWxlIHx8ICFuZXdfc2JpLVx1MDAzZWRpZjAuZmlsZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXHUwMDNlZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktXHUwMDNlZGlmMC5maWxlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBzYmktXHUwMDNlZGlmMC5mc29mZiA9PSBuZXdfc2JpLVx1MDAzZWRpZjAuZnNvZmYgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIW1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKTtcbit9XG4rXG4rc3RhdGljIGludCBlcm9mc19maWxlX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0aWYgKCF0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbitcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciwgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIHtcbiBcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG5AQCAtNzk0LDcgKzg0MCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0XHRcdGVycm9yZmMoZmMsIFwic291cmNlIGlzIHVuc3VwcG9ydGVkXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXHRcdHJldHVybiBlcm9mc19maWxlX2dldF90cmVlKGZjKTtcbiBcdH1cbiBcbiBcdHJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsXG5AQCAtODEyLDcgKzg1OCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0XHRpZiAoU19JU1JFRyhmaWxlX2lub2RlKHNiaS1cdTAwM2VkaWYwLmZpbGUpLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBzYmktXHUwMDNlZGlmMC5maWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VyZWFkX2ZvbGlvKVxuLVx0XHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXHRcdFx0cmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpO1xuIFx0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtODI1LDYgKzg3MSwxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcbiBcdERCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7XG4gXG4rXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbiBcdGlmIChuZXdfc2JpLVx1MDAzZWRvbWFpbl9pZClcbiBcdFx0ZXJvZnNfaW5mbyhzYiwgXCJpZ25vcmluZyByZWNvbmZpZ3VyYXRpb24gZm9yIGRvbWFpbl9pZC5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMTM4OSw3ICsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbisvKipcbisgKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmVcbisgKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVyc1xuKyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXG4rICogQGZpbGxfc3VwZXI6IEhlbHBlciB0byBpbml0aWFsaXNlIGEgbmV3IHN1cGVyYmxvY2tcbisgKlxuKyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xuKyAqIHJldXNlZDsgb3RoZXJ3aXNlIGEgbmV3IGFub255bW91cyBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpc2VkIHdpdGhcbisgKiBAZmlsbF9zdXBlci4gIFBhc3NpbmcgTlVMTCBmb3IgQHRlc3QgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgc3VwZXJibG9jay5cbisgKi9cbitpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4gXHRcdGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHQgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG5AQCAtMTQxNiwxMiArMTQyNiwxMyBAQCBzdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7XG4gXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuK1x0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XG4gXG5AQCAtMTQyOSw3ICsxNDQwLDcgQEAgaW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuIHtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zaW5nbGUpO1xuIFxuQEAgLTE0MzksNyArMTQ1MCw3IEBAIGludCBnZXRfdHJlZV9rZXllZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdHZvaWQgKmtleSlcbiB7XG4gXHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBrZXk7XG4tXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5pbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5AQCAtMTUwLDYgKzE1MCwxMCBAQCBleHRlcm4gaW50IHZmc19wYXJzZV9mc19wYXJhbV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG4gZXh0ZXJuIHZvaWQgZmNfZHJvcF9sb2NrZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiBcbitleHRlcm4gaW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbitcdFx0XHQgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuK1x0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiBleHRlcm4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHQgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDoxNC42NjQwNzU4ODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNTMzMDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFUk9GUyBTdXBlcmJsb2NrIFNoYXJpbmcgLSBQb3RlbnRpYWwgUGl0ZmFsbHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uLCBgc3VwZXJibG9ja19zaGFyZWAsIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbS4gVGhlIGdvYWwgaXMgY2xlYXI6IHNoYXJlIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBpZGVudGljYWwgb3B0aW9ucy4gU2VlbXMgZWZmaWNpZW50LCByaWdodD8gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgaW4gYGZzL2Vyb2ZzL3N1cGVyLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhhdCdzIHdoZXJlIHRoZSBzdXBlcmJsb2NrIGhhbmRsaW5nIGxvZ2ljIHJlc2lkZXMuIFRoZXkndmUgYWRkZWQgY29kZSB0byBwYXJzZSB0aGUgYHN1cGVyYmxvY2tfc2hhcmVgIG9wdGlvbiBhbmQgdHJpZ2dlciB0aGUgc2hhcmluZyBiZWhhdmlvci4gVGhleSd2ZSBhbHNvIGltcGxlbWVudGVkIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiB0d28gbW91bnRzIGFyZSBjb21wYXRpYmxlIGZvciBzdXBlcmJsb2NrIHNoYXJpbmcuXG5cbkFoLCBidXQgd2FpdCBhIHNlY29uZC4gVGhlIGNydWNpYWwgcGFydCBvZiB0aGlzIGNvbXBhdGliaWxpdHkgY2hlY2sgcmVsaWVzIG9uIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBOb3csIHRoYXQgKmdlbmVyYWxseSogd29ya3MgZm9yIGNvbXBhcmluZyBzdHJ1Y3R1cmVzLCBidXQuLi4gaXMgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGNvbXBhcmlzb24/IFdlIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgbWVtb3J5IGNhbiBiZSB1bmluaXRpYWxpemVkLCBvciBjb250YWluIHBhZGRpbmcuIElmIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgaGFzIHBhZGRpbmcsIG9yIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcywgdGhpcyBgbWVtY21wYCB3aWxsIGJlIGEgcmVjaXBlIGZvciBwb3RlbnRpYWxseSBpbmNvcnJlY3Qgb3IgdW5leHBlY3RlZCByZXN1bHRzLiBUaGUgY29tcGFyaXNvbiBtaWdodCBtaXN0YWtlbmx5IG1hcmsgaW5jb21wYXRpYmxlIG1vdW50cyBhcyBjb21wYXRpYmxlLCBvciB3b3JzZSwgbWFyayBjb21wYXRpYmxlIG1vdW50cyBhcyBpbmNvbXBhdGlibGUgaWYgdGhhdCBwYWRkaW5nIGlzIGRpZmZlcmVudC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgcmlnaHQgbm93IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIHdvbid0IGNhdXNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDoxOS43Njk0MDkxNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQyNjYzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGVyb2ZzX21vdW50X29wdHMgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvaW50ZXJuYWwuaD01ND1lbnVtIHtcXG4tLVxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNTktXFxuZnMvZXJvZnMvaW50ZXJuYWwuaDo2MDpzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyB7XFxuZnMvZXJvZnMvaW50ZXJuYWwuaC02MS1cXHQvKiBjdXJyZW50IHN0cmF0ZWd5IG9mIGhvdyB0byB1c2UgbWFuYWdlZCBjYWNoZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDoyMi4yOTM2ODE1NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1OTQ5NTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJlIG9mIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIEZvcmdldCB0aGUgc3VwZXJmaWNpYWw7IEkgbmVlZCB0aGUgZnVsbCwgZ3JhbnVsYXIgZGVmaW5pdGlvbi4gV2hhdCBhcmUgYWxsIHRoZSBpbmRpdmlkdWFsIG1lbWJlcnM/IFdoYXQgZGF0YSB0eXBlcyBhcmUgdGhleT8gQXJlIHRoZXJlIGFueSBiaXRmaWVsZHMsIGFuZCBpZiBzbywgaG93IGFyZSB0aGV5IGRlZmluZWQ/IEFueSB1bmlvbnM/IEZsYWdzPyBEZWZhdWx0cz8gSSB3YW50IHRvIHNlZSB0aGUgd2hvbGUgZW5jaGlsYWRhLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGtlcm5lbCBleHBlY3RzIHRoaXMgZGF0YSB0byBiZSBvcmdhbml6ZWQuIEl04oCZcyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZXJvZnMgZmlsZXN5c3RlbSBpcyBjb25maWd1cmVkIGFuZCBvcGVyYXRlcyBhdCBtb3VudCB0aW1lLCBhbmQgSSdtIG5vdCBnb2luZyB0byBwcm9jZWVkIHdpdGhvdXQgYSBzb2xpZCBncmlwIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGlzIGNyaXRpY2FsIHN0cnVjdC4gVGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZTogV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBvcHRpb24sIGhvdyBjYW4gdGhlIG9wdGlvbnMgYWZmZWN0IHBlcmZvcm1hbmNlLCBvciB3aGF0IHRyYWRlLW9mZnMgd2VyZSBtYWRlLiBPbmx5IGJ5IHRydWx5IHNlZWluZyB0aGUgaW50ZXJuYWxzIGNhbiBJIG1ha2UgYSBzb3VuZCBqdWRnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDoyNi43NTMxNzk5MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvaW50ZXJuYWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1OTpcXHRcXG4gIDYwOlxcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzIHtcXG4gIDYxOlxcdFxcdC8qIGN1cnJlbnQgc3RyYXRlZ3kgb2YgaG93IHRvIHVzZSBtYW5hZ2VkIGNhY2hlICovXFxuICA2MjpcXHRcXHR1bnNpZ25lZCBjaGFyIGNhY2hlX3N0cmF0ZWd5O1xcbiAgNjM6XFx0XFx0dW5zaWduZWQgaW50IG1vdW50X29wdDtcXG4gIDY0OlxcdH07XFxuICA2NTpcXHRcXG4gIDY2OlxcdHN0cnVjdCBlcm9mc19kZXZfY29udGV4dCB7XFxuICA2NzpcXHRcXHRzdHJ1Y3QgaWRyIHRyZWU7XFxuICA2ODpcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHR1bnNpZ25lZCBpbnQgZXh0cmFfZGV2aWNlcztcXG4gIDcxOlxcdFxcdGJvb2wgZmxhdGRldjtcXG4gIDcyOlxcdH07XFxuICA3MzpcXHRcXG4gIDc0OlxcdC8qIGFsbCBmaWxlc3lzdGVtLXdpZGUgbHo0IGNvbmZpZ3VyYXRpb25zICovXFxuICA3NTpcXHRzdHJ1Y3QgZXJvZnNfc2JfbHo0X2luZm8ge1xcbiAgNzY6XFx0XFx0LyogIyBvZiBwYWdlcyBuZWVkZWQgZm9yIEVST0ZTIGx6NCByb2xsaW5nIGRlY29tcHJlc3Npb24gKi9cXG4gIDc3OlxcdFxcdHUxNiBtYXhfZGlzdGFuY2VfcGFnZXM7XFxuICA3ODpcXHRcXHQvKiBtYXhpbXVtIHBvc3NpYmxlIGJsb2NrcyBmb3IgcGNsdXN0ZXJzIGluIHRoZSBmaWxlc3lzdGVtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjI2Ljc1MzI3ODExOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDA4Njk1NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgQ29uY2VybnMgaW4gRVJPRlMgTW91bnQgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBJbnRlcmVzdGluZywgYW4gYHVuc2lnbmVkIGNoYXJgIGZvbGxvd2VkIGJ5IGFuIGB1bnNpZ25lZCBpbnRgLiBJbW1lZGlhdGVseSwgSSBzcG90IGl0OiB0aHJlZSBieXRlcyBvZiBwYWRkaW5nISBUaGF0J3MgYSByZWQgZmxhZy4gSWYgYHNiaS1cdTAwM2VvcHRgIGlzbid0IGVudGlyZWx5IHplcm9lZCBvdXQsIHRoZW4gdGhlIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgIGNhbGwgaXMgZ29pbmcgdG8gcmVhZCB0aG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMuIEJpbmdvLCB0aGF0J3MgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQhIEtNU0FOLCBvZiBjb3Vyc2UsIHdvdWxkIGZsYWcgdGhhdCBpbW1lZGlhdGVseS5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgKndoZXJlKiBpcyBgc2JpLVx1MDAzZW9wdGAgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGl0cyBhbGxvY2F0aW9uLiBgc2JpYCBhcHBlYXJzIHRvIGJlIGFsbG9jYXRlZCBpbiBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBgZXJvZnNfZmNfZmlsbF9zdXBlcmAsIG9yIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBMZXQncyBzdGFydCB3aXRoIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLCB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjMxLjc2MTk3NjA1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMDMxMjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcm9mc19pbml0X2ZzX2NvbnRleHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvc3VwZXIuYz05NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXJvZnNfY29udGV4dF9vcHMgPSB7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTk0OC1cXG5mcy9lcm9mcy9zdXBlci5jOjk0OTpzdGF0aWMgaW50IGVyb2ZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXJvZnMvc3VwZXIuYy05NTAte1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0xMDA5PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBlcm9mc19mc190eXBlID0ge1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy0xMDExLVxcdC5uYW1lICAgICAgICAgICA9IFxcXCJlcm9mc1xcXCIsXFxuZnMvZXJvZnMvc3VwZXIuYzoxMDEyOlxcdC5pbml0X2ZzX2NvbnRleHQgPSBlcm9mc19pbml0X2ZzX2NvbnRleHQsXFxuZnMvZXJvZnMvc3VwZXIuYy0xMDEzLVxcdC5raWxsX3NiICAgICAgICA9IGVyb2ZzX2tpbGxfc2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjMzLjc2MjI5MzU4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzEwODc1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgZXJvZnNfaW5pdF9mc19jb250ZXh0YC4gSSdtIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGZpbGUgc3lzdGVtIGNvbnRleHQgZm9yIEVST0ZTIChFbmhhbmNlZCBSZWFkLU9ubHkgRmlsZSBTeXN0ZW0pLiBBcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBJIGtub3cgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIG1vdW50aW5nIGFuIEVST0ZTIGZpbGVzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBpbml0aWFsIGVudmlyb25tZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBhc3BlY3RzIGxpa2U6IGhvdyBpdCBoYW5kbGVzIGFyZ3VtZW50cyBwYXNzZWQgZHVyaW5nIG1vdW50IGNhbGxzLCBob3cgaXQgYWxsb2NhdGVzIGFuZCBwb3B1bGF0ZXMgdGhlIGBmc19jb250ZXh0YCBzdHJ1Y3R1cmUsIGFuZCBpZiBpdCBpbnRlcmFjdHMgd2l0aCBhbnkgbG93ZXItbGV2ZWwgRVJPRlMtc3BlY2lmaWMgc3RydWN0dXJlcyBvciBkYXRhLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3VwZXJibG9jaywgaW5vZGVzIG9yIG90aGVyIGtleSBkYXRhIHN0cnVjdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBtb3VudCBmbGFncyBhbmQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjM3LjEzMzM4Mzg0OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NDksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NDk6XFx0c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiA5NTA6XFx0e1xcbiA5NTE6XFx0XFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaTtcXG4gOTUyOlxcdFxcbiA5NTM6XFx0XFx0c2JpID0ga3phbGxvY19vYmooKnNiaSk7XFxuIDk1NDpcXHRcXHRpZiAoIXNiaSlcXG4gOTU1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5NTY6XFx0XFxuIDk1NzpcXHRcXHRzYmktXFx1MDAzZWRldnMgPSBremFsbG9jX29iaihzdHJ1Y3QgZXJvZnNfZGV2X2NvbnRleHQpO1xcbiA5NTg6XFx0XFx0aWYgKCFzYmktXFx1MDAzZWRldnMpIHtcXG4gOTU5OlxcdFxcdFxcdGtmcmVlKHNiaSk7XFxuIDk2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTYxOlxcdFxcdH1cXG4gOTYyOlxcdFxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBzYmk7XFxuIDk2MzpcXHRcXG4gOTY0OlxcdFxcdGlkcl9pbml0KFxcdTAwMjZzYmktXFx1MDAzZWRldnMtXFx1MDAzZXRyZWUpO1xcbiA5NjU6XFx0XFx0aW5pdF9yd3NlbShcXHUwMDI2c2JpLVxcdTAwM2VkZXZzLVxcdTAwM2Vyd3NlbSk7XFxuIDk2NjpcXHRcXHRlcm9mc19kZWZhdWx0X29wdGlvbnMoc2JpKTtcXG4gOTY3OlxcdFxcdGZjLVxcdTAwM2VvcHMgPSBcXHUwMDI2ZXJvZnNfY29udGV4dF9vcHM7XFxuIDk2ODpcXHRcXHRyZXR1cm4gMDtcXG4gOTY5OlxcdH1cXG4gOTcwOlxcdFxcbiA5NzE6XFx0c3RhdGljIHZvaWQgZXJvZnNfZHJvcF9pbnRlcm5hbF9pbm9kZXMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSlcXG4gOTcyOlxcdHtcXG4gOTczOlxcdFxcdGlwdXQoc2JpLVxcdTAwM2VwYWNrZWRfaW5vZGUpO1xcbiA5NzQ6XFx0XFx0c2JpLVxcdTAwM2VwYWNrZWRfaW5vZGUgPSBOVUxMO1xcbiA5NzU6XFx0XFx0aXB1dChzYmktXFx1MDAzZW1ldGFib3hfaW5vZGUpO1xcbiA5NzY6XFx0XFx0c2JpLVxcdTAwM2VtZXRhYm94X2lub2RlID0gTlVMTDtcXG4gOTc3OlxcdCNpZmRlZiBDT05GSUdfRVJPRlNfRlNfWklQXFxuIDk3ODpcXHRcXHRpcHV0KHNiaS1cXHUwMDNlbWFuYWdlZF9jYWNoZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjM3LjEzMzUyMjcwOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzc3MzY5NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhleSdyZSB1c2luZyBgc2JpID0ga3phbGxvY19vYmooKnNiaSk7YC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnLiAgYGt6YWxsb2Nfb2JqYC4uLiB0aGF0J3MgcHJvYmFibHkgYSBtYWNybyBmb3IgYGt6YWxsb2NgIHdpdGggdGhlIHN0cnVjdHVyZSdzIHNpemUsIGxpa2VseSBzb21ldGhpbmcgbGlrZSBga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpYC4gIElmIGl0J3MgYGt6YWxsb2NgLCB0aGVuIHRoZSBlbnRpcmUgYHNiaWAgc3RydWN0dXJlIGlzIGJlaW5nIHplcm9lZCBvdXQuIFRoYXQgaW5jbHVkZXMgKmFsbCogb2YgdGhlIG1lbW9yeSwgc28gZXZlbiB0aGUgcGFkZGluZyB3aXRoaW4gYHNiaS1cdTAwM2VvcHRgIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBsaWtlIHRoYXQsIGl0IHByb3ZpZGVzIGEgY2xlYW4gc3RhdGUuIEJ1dCwgSSBkb24ndCB0cnVzdCBhc3N1bXB0aW9ucywgZXZlbiBteSBvd24uIExldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBga3phbGxvY19vYmpgIGRlZmluaXRpb24gdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHdoYXQncyBoYXBwZW5pbmcuIE5vIHBvaW50IGluIG1ha2luZyBhIHJvb2tpZSBtaXN0YWtlLiBBIHF1aWNrIGNoZWNrIG9mIHRoYXQgbWFjcm8gd2lsbCBjb25maXJtIHRoaXMgYW5kIGVsaW1pbmF0ZSBhbnkgbGluZ2VyaW5nIGRvdWJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTE4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDo0MS45MTA4OTUxMTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTYyMDI0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBremFsbG9jX29ialwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDczPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTQtLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1NTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTYtXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTc6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTgtXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEwLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjQzLjU2NzEwMzEzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDE0NjcxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBga3phbGxvY19vYmpgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGt6YWxsb2Nfb2JqYCwgYW5kIEkgc2VlIGl0IHVzZXMgYGt6YWxsb2NgLiBUaGF0J3MgZ29vZCDigJMgaXQgbWVhbnMgdGhlIG1lbW9yeSBpcyB6ZXJvZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50IGZvciBhdm9pZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4gdGhhdCBpbml0aWFsIGFsbG9jYXRpb24sIGJlY2F1c2UgaW5pdGlhbGl6YXRpb24gb2Z0ZW4gaXNuJ3QgZXZlcnl0aGluZy5cblxuTGV0J3Mgc2Vl4oCmIHNpbmNlIGBzYmlgIGlzIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jYCwgdGhlIHBhZGRpbmcgKndpdGhpbiogYHNiaS1cdTAwM2VvcHRgIHNob3VsZCBhbHNvIHN0YXJ0IGFzIHplcm8uIE5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhlcmUgYW55IGNvZGUgcGF0aCB0aGF0ICpsYXRlciogd3JpdGVzIHRvIGZpZWxkcyB3aXRoaW4gYHNiaS1cdTAwM2VvcHRgIGluIGEgd2F5IHRoYXQgKndvdWxkbid0KiBmdWxseSBpbml0aWFsaXplIHRoZSBwYWRkaW5nPyBgc2JpLVx1MDAzZW9wdGAgaXMgYSBzdHJ1Y3QgbmVzdGxlZCBpbnNpZGUgdGhlIGxhcmdlciBgc2JpYCBzdHJ1Y3QuXG5cbkFscmlnaHQsIGlmIHdlIGFyZSBzZXR0aW5nIGZpZWxkcyBkaXJlY3RseSwgbGlrZSBgc2JpLVx1MDAzZW9wdC5jYWNoZV9zdHJhdGVneSA9IC4uLmAgb3IgYHNiaS1cdTAwM2VvcHQubW91bnRfb3B0ID0gLi4uYCwgdGhlbiB0aGF0IHdvbid0IHRvdWNoIHRoZSBwYWRkaW5nLCBhbmQgaXQnbGwgcmVtYWluIHplcm8sIGFzIGV4cGVjdGVkLiBCdXQgd2hhdCBhYm91dCBhc3NpZ25tZW50cz8gQ291bGQgYHNiaS1cdTAwM2VvcHRgIGJlIGFzc2lnbmVkIGZyb20gYW5vdGhlciBzdHJ1Y3Q/IENvdWxkIHdlIHNlZSBzb21ldGhpbmcgbGlrZSBgc2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O2A/IFNjYW5uaW5nIHRoZSBjb2RlLCBJIGRvbid0IHNlZSB0aGF0IGFzc2lnbm1lbnQgaGFwcGVuaW5nIGFueXdoZXJlLiBUaGlzIGlzIGdvb2QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AgdG8gbWFrZSBzdXJlIHRoZXJlIGlzbid0IHNvbWUgaW1wbGljaXQgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIEFsd2F5cyBiZXR0ZXIgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6NTAuMDA4NTczODQxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNDY4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyb2ZzX2RlZmF1bHRfb3B0aW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9zdXBlci5jPTI1MD1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy0zNzMtXFxuZnMvZXJvZnMvc3VwZXIuYzozNzQ6c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXFxuZnMvZXJvZnMvc3VwZXIuYy0zNzUte1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz05NDk9c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy05NjUtXFx0aW5pdF9yd3NlbShcXHUwMDI2c2JpLVxcdTAwM2VkZXZzLVxcdTAwM2Vyd3NlbSk7XFxuZnMvZXJvZnMvc3VwZXIuYzo5NjY6XFx0ZXJvZnNfZGVmYXVsdF9vcHRpb25zKHNiaSk7XFxuZnMvZXJvZnMvc3VwZXIuYy05NjctXFx0ZmMtXFx1MDAzZW9wcyA9IFxcdTAwMjZlcm9mc19jb250ZXh0X29wcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6NTEuNjIwMDQ4MzAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDYwNTE4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCBjb25jZXB0cywgYXMgSSB1bmRlcnN0YW5kIHRoZW06XG5cbioqQ29uc2lkZXJpbmcgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AuIExldCBtZSBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBUaGlzIGlzLCBhdCBpdHMgY29yZSwgYWJvdXQgc2V0dGluZyB1cCB0aGUgc3RhbmRhcmQgcGFyYW1ldGVycyBmb3IgYW4gRVJPRlMgZmlsZXN5c3RlbSB3aGVuIGl0J3MgYmVpbmcgY3JlYXRlZCwgcmlnaHQ/IEl04oCZcyBub3QgYWJvdXQgdGhlIHJ1bnRpbWUgYmVoYXZpb3IsIGJ1dCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIHRlbXBsYXRlLlxuXG5JIGltYWdpbmUgdGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZSBjb21wcmVzc2lvbiBzZXR0aW5ncywgYmxvY2sgc2l6ZSBwcmVmZXJlbmNlcywgYW5kIG1heWJlIHNvbWUgaGludHMgb24gbWV0YWRhdGEgaGFuZGxpbmcsIGFsbCB0dW5lZCBmb3IgYSBiYWxhbmNlIG9mIHNwYWNlIGVmZmljaWVuY3kgYW5kIGFjY2VzcyBzcGVlZCBmb3IgYSByZWFkLW9ubHkgZmlsZXN5c3RlbS4gV2UgbWlnaHQgYWxzbyBoYXZlIHRvIHRoaW5rIGFib3V0IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGJ5IGRlZmF1bHQgYXMgd2VsbC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3BlY3RzIHRoaXMgaW5jbHVkZXMgYXMgaXRzIGRlZmF1bHQgc2V0IG9mIGJlaGF2aW9ycywgYW5kIEkgbmVlZCB0byBjb25zaWRlciB3aHkgaXQgbWlnaHQgYmUgY29uZmlndXJhYmxlLiBQZXJoYXBzIGRpZmZlcmVudCB1c2UgY2FzZXMgbWlnaHQgYmVuZWZpdCBmcm9tIHR3ZWFrcy4gSSdtIGltYWdpbmluZyBzb21lIGNhc2VzIHdoZXJlIHBlcmZvcm1hbmNlIGlzIHRoZSBhYnNvbHV0ZSBwcmlvcml0eSwgZXZlbiBhdCB0aGUgZXhwZW5zZSBvZiBhIGJpdCBvZiBzcGFjZSwgYW5kIG90aGVycyB3aGVyZSBtYXhpbXVtIGNvbXByZXNzaW9uIGlzIHBhcmFtb3VudC4gVGhlIGBlcm9mc19kZWZhdWx0X29wdGlvbnNgIGNvbnN0cnVjdCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgZGVjaXNpb24uXG5cblNvLCBpbiBlc3NlbmNlLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlICpkZWZhdWx0cyogLSB0aGUgYmFzZWxpbmUgcGFyYW1ldGVycyB0aGF0IGFyZSBhc3N1bWVkIHdoZW4gYSB1c2VyIGRvZXNuJ3QgZXhwbGljaXRseSBwcm92aWRlIG9wdGlvbnMgd2hlbiBhbiBFUk9GUyBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuIFRoZSBnb2FsIGlzIGxpa2VseSB0byBzdHJpa2UgYSBnb29kIGJhbGFuY2UsIGdpdmVuIHRoYXQgdGhlc2UgYXJlIHR5cGljYWxseSBpbW11dGFibGUgYW5kIGRlcGxveWVkIHdpZGVseS4gTm93LCBJIG5lZWQgdG8ga25vdyB3aGF0IHRob3NlIHNwZWNpZmljIGRlZmF1bHRzIGFyZSwgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZW0sIGZvciBhIHRydWx5IG51YW5jZWQgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkyMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjU2LjQ2NjEwMzEyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzQsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNzQ6XFx0c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXFxuIDM3NTpcXHR7XFxuIDM3NjpcXHQjaWZkZWYgQ09ORklHX0VST0ZTX0ZTX1pJUFxcbiAzNzc6XFx0XFx0c2JpLVxcdTAwM2VvcHQuY2FjaGVfc3RyYXRlZ3kgPSBFUk9GU19aSVBfQ0FDSEVfUkVBREFST1VORDtcXG4gMzc4OlxcdFxcdHNiaS1cXHUwMDNlc3luY19kZWNvbXByZXNzID0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE87XFxuIDM3OTpcXHQjZW5kaWZcXG4gMzgwOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXFxuIDM4MTpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XFxuIDM4MjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfUE9TSVhfQUNMKSlcXG4gMzgzOlxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbiAzODQ6XFx0fVxcbiAzODU6XFx0XFxuIDM4NjpcXHRlbnVtIHtcXG4gMzg3OlxcdFxcdE9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSxcXG4gMzg4OlxcdFxcdE9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjU2LjQ2NjIzODgwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjI1Njc2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIG1vc3RseSBhYm91dCBzZXR0aW5nIGZpZWxkcy4gU2luY2UgYHNiaWAgaXMgaW5pdGlhbGl6ZWQgd2l0aCBga3phbGxvY2AsIEkga25vdyB0aGUgcGFkZGluZyBpcyB6ZXJvZWQgb3V0IGJ5IGRlZmF1bHQuIFRoYXQgbWVhbnMgdGhlIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgIGNhbGwgd2lsbCBiZSBjb21wYXJpbmcgemVyb2VkIHBhZGRpbmcgYWdhaW5zdCB6ZXJvZWQgcGFkZGluZywgd2hpY2ggaXMgYSBzYWZlIG9wZXJhdGlvbi5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBvdGhlciBzcG90cyB3aGVyZSBgc2JpLVx1MDAzZW9wdGAgaXMgYmVpbmcgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCAqY291bGQqIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFoLCB5ZXMsIGBzZXRfb3B0YCBhbmQgYGNsZWFyX29wdGAgYWZmZWN0IGBtb3VudF9vcHRgLiBBbmQgdGhlcmUncyBhbHNvIGBzYmktXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gLi4uYCB3aGljaCwgSSBzZWUgbm93LCBpcyBtb2RpZnlpbmcgYGNhY2hlX3N0cmF0ZWd5YC4gSG93ZXZlciwgbm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgdG91Y2ggdGhlIHBhZGRpbmcuIFNvLCB0aGUgcGFkZGluZyByZW1haW5zIHJlbGlhYmx5IHplcm9lZC4gVGhlcmVmb3JlLCB0aGF0IGBtZW1jbXBgIHNob3VsZG4ndCBiZSByZWFkaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHRha2UgYSB3aWRlciBsb29rLiBJcyB0aGVyZSBhbnkgKm90aGVyKiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgbHVya2luZyBpbiB0aGlzIHBhdGNoPyBMZXQncyBzZWUuLi4gQWgsIHRoZSBhZGRpdGlvbiBvZiBgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcmAuXG5gYGBjXG5zdGF0aWMgaW50IGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcblx0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG57XG5cdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7XG5cdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuXG5cdGlmIChzYi1cdTAwM2VzX2lmbGFncyBcdTAwMjYgU0JfSV9SRVRJUkVEKVxuXHRcdHJldHVybiAwO1xuXHRpZiAoIXNiaS1cdTAwM2VkaWYwLmZpbGUgfHwgIW5ld19zYmktXHUwMDNlZGlmMC5maWxlKVxuXHRcdHJldHVybiAwO1xuXHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXHUwMDNlZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktXHUwMDNlZGlmMC5maWxlKSBcdTAwMjZcdTAwMjZcblx0ICAgICAgIHNiaS1cdTAwM2VkaWYwLmZzb2ZmID09IG5ld19zYmktXHUwMDNlZGlmMC5mc29mZiBcdTAwMjZcdTAwMjZcblx0ICAgICAgICFtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSk7XG59XG5gYGBcblxuT2theSwgaXQgbG9va3MgbGlrZSBgc2JpLVx1MDAzZWRpZjBgIGlzIGludm9sdmVkLCBhbmQgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHN0cnVjdHVyZSBpcy4gSXQncyBsaWtlbHkgYSBgc3RydWN0IGVyb2ZzX2ZzY2FjaGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGRpZjBgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTgsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNTowNS42OTE5MTcwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNTQzMDYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWYwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTcxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWw9NTM9YWxsT2Y6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtOTctICAgICAgICAgICAgLSBjb25zdDogZXNhaTBfdHhfaGZfY2xrXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjk4OiAgICAgICAgICAgIC0gY29uc3Q6IHNwZGlmMF9yeFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC05OS0gICAgICAgICAgICAtIGNvbnN0OiBzYWkwX3J4X2JjbGtcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0xNjAtICAgICAgICAgICAgLSBjb25zdDogZXNhaTFfdHhfaGZfY2xrXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjE2MTogICAgICAgICAgICAtIGNvbnN0OiBzcGRpZjBfcnhcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMTYyLSAgICAgICAgICAgIC0gY29uc3Q6IHNwZGlmMV9yeFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTIwOC0gICAgICAgICAgICAtIGNvbnN0OiBleHRfYXVkX21jbGsxXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjIwOTogICAgICAgICAgICAtIGNvbnN0OiBzcGRpZjBfcnhcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMjEwLSAgICAgICAgICAgIC0gY29uc3Q6IHNhaTBfcnhfYmNsa1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sPTIxOT1leGFtcGxlczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0yNTUtICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmNsa19lc2FpMF90eF9oZl9jbGtcXHUwMDNlLFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbDoyNTY6ICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmNsa19zcGRpZjBfcnhcXHUwMDNlLFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0yNTctICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmNsa19zYWkwX3J4X2JjbGtcXHUwMDNlLFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTI3My0gICAgICAgICAgICAgICAgICAgICAgXFxcImVzYWkwX3R4X2hmX2Nsa1xcXCIsXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjI3NDogICAgICAgICAgICAgICAgICAgICAgXFxcInNwZGlmMF9yeFxcXCIsXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTI3NS0gICAgICAgICAgICAgICAgICAgICAgXFxcInNhaTBfcnhfYmNsa1xcXCIsXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0cz0yNTQ9XFx0XFx0c291bmQge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3NwZWFyMTM0MC1ldmIuZHRzLTI1NS1cXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInNwZWFyLHNwZWFyLWV2YlxcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHM6MjU2OlxcdFxcdFxcdGF1ZGlvLWNvbnRyb2xsZXJzID0gXFx1MDAzY1xcdTAwMjZzcGRpZjAgXFx1MDAyNnNwZGlmMSBcXHUwMDI2aTJzMCBcXHUwMDI2aTJzMVxcdTAwM2U7XFxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHMtMjU3LVxcdFxcdFxcdGF1ZGlvLWNvZGVjcyA9IFxcdTAwM2NcXHUwMDI2aW5jb2RlYyBcXHUwMDI2b3V0Y29kZWMgXFx1MDAyNnN0YTUyOSBcXHUwMDI2c3RhNTI5XFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3NwZWFyMTM0MC1ldmIuZHRzLTI2NC1cXG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0czoyNjU6XFx0XFx0c3BkaWYwOiBzcGRpZi1pbkBkMDEwMDAwMCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHMtMjY2LVxcdFxcdFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWV2YWwuZHRzaT0xMjc9XFx1MDAyNnNhdGEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtZXZhbC5kdHNpLTEzMS0vKiBBcGFsaXMgU1BESUYxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtZXZhbC5kdHNpOjEzMjpcXHUwMDI2c3BkaWYwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1ldmFsLmR0c2ktMTMzLVxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWl4b3JhLXYxLjEuZHRzaT0yMTY9XFx1MDAyNnNhdGEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMS5kdHNpLTIyMC0vKiBBcGFsaXMgU1BESUYxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMS5kdHNpOjIyMTpcXHUwMDI2c3BkaWYwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4xLmR0c2ktMjIyLVxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWl4b3JhLXYxLjIuZHRzaT0yNjU9XFx1MDAyNnNhdGEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMi5kdHNpLTI2OS0vKiBBcGFsaXMgU1BESUYxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMi5kdHNpOjI3MDpcXHUwMDI2c3BkaWYwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4yLmR0c2ktMjcxLVxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaT0yMjU9XFx0c291bmQtc3BkaWYge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpLTIyNy1cXHRcXHRtb2RlbCA9IFxcXCJpbXgtc3BkaWZcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaToyMjg6XFx0XFx0c3BkaWYtY29udHJvbGxlciA9IFxcdTAwM2NcXHUwMDI2c3BkaWYwXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMjI5LVxcdFxcdHNwZGlmLWluO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpPTg0Nz1cXHUwMDI2c2FpNSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktODYyLS8qIEFwYWxpcyBTUERJRjEgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k6ODYzOlxcdTAwMjZzcGRpZjAge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaS04NjQtXFx0YXNzaWduZWQtY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZjbGsgSU1YX1NDX1JfQVVESU9fUExMXzAgSU1YX1NDX1BNX0NMS19QTExcXHUwMDNlLFxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpLTg2OC1cXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaTo4Njk6XFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZwaW5jdHJsX3NwZGlmMFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpLTg3MC1cXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k9MTQxNz1cXHRwaW5jdHJsX3NpbTBfZ3Bpb3M6IHNpbTBncGlvc2dycCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMTQyOC1cXHQvKiBBcGFsaXMgU1BESUYgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k6MTQyOTpcXHRwaW5jdHJsX3NwZGlmMDogc3BkaWYwZ3JwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMTQzMC1cXHRcXHRmc2wscGlucyA9IFxcdTAwM2NJTVg4UU1fU1BESUYwX1RYX0FVRF9TUERJRjBfVFhcXHRcXHRcXHQweGM2MDAwMDQwXFx1MDAzZSxcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaT01ND1jbGtfZXNhaTBfdHhfaGZfY2xrOiBjbG9jay1lc2FpMC10eC1oZiB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjAtXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjYxOmNsa19zcGRpZjBfcng6IGNsb2NrLXNwZGlmMC1yeCB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTYyLVxcdGNvbXBhdGlibGUgPSBcXFwiZml4ZWQtY2xvY2tcXFwiO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY0LVxcdGNsb2NrLWZyZXF1ZW5jeSA9IFxcdTAwM2MwXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6NjU6XFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXFxcInNwZGlmMF9yeFxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY2LX07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9MTY3PVxcdGVzYWkwOiBlc2FpQDU5MDEwMDAwIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS0xODEtXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjE4MjpcXHRzcGRpZjA6IHNwZGlmQDU5MDIwMDAwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMTgzLVxcdFxcdGNvbXBhdGlibGUgPSBcXFwiZnNsLGlteDhxbS1zcGRpZlxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMTg2LVxcdFxcdFxcdCAgICAgXFx1MDAzY0dJQ19TUEkgNDU4IElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlOyAvKiB0eCAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaToxODc6XFx0XFx0Y2xvY2tzID0gXFx1MDAzY1xcdTAwMjZzcGRpZjBfbHBjZyBJTVhfTFBDR19DTEtfNFxcdTAwM2UsXFx0LyogY29yZSAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS0xODgtXFx0XFx0XFx0IFxcdTAwM2NcXHUwMDI2Y2xrX2R1bW15XFx1MDAzZSxcXHRcXHRcXHQvKiByeHR4MCAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaToxODk6XFx0XFx0XFx0IFxcdTAwM2NcXHUwMDI2c3BkaWYwX2xwY2cgSU1YX0xQQ0dfQ0xLXzBcXHUwMDNlLFxcdC8qIHJ4dHgxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTE5MC1cXHRcXHRcXHQgXFx1MDAzY1xcdTAwMjZjbGtfZHVtbXlcXHUwMDNlLFxcdFxcdFxcdC8qIHJ4dHgyICovXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9MjcwPVxcdGVkbWEwOiBkbWEtY29udHJvbGxlckA1OTFmMDAwMCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMjgzLVxcdFxcdFxcdCAgICAgXFx1MDAzY0dJQ19TUEkgNDEwIElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlLCAvKiA3ICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjI4NDpcXHRcXHRcXHQgICAgIFxcdTAwM2NHSUNfU1BJIDQ1NyBJUlFfVFlQRV9MRVZFTF9ISUdIXFx1MDAzZSwgLyogOCBzcGRpZjAgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMjg1LVxcdFxcdFxcdCAgICAgXFx1MDAzY0dJQ19TUEkgNDU5IElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlLCAvKiA5ICovXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9MzM3PVxcdGVzYWkwX2xwY2c6IGNsb2NrLWNvbnRyb2xsZXJANTk0MTAwMDAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTM0OC1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6MzQ5OlxcdHNwZGlmMF9scGNnOiBjbG9jay1jb250cm9sbGVyQDU5NDIwMDAwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzUwLVxcdFxcdGNvbXBhdGlibGUgPSBcXFwiZnNsLGlteDhxeHAtbHBjZ1xcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzU1LVxcdFxcdGNsb2NrLWluZGljZXMgPSBcXHUwMDNjSU1YX0xQQ0dfQ0xLXzBcXHUwMDNlLCBcXHUwMDNjSU1YX0xQQ0dfQ0xLXzRcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaTozNTY6XFx0XFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXFxcInNwZGlmMF9scGNnX3R4X2Nsa1xcXCIsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjM1NzpcXHRcXHRcXHRcXHQgICAgIFxcXCJzcGRpZjBfbHBjZ19nY2xrd1xcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTM1OC1cXHRcXHRwb3dlci1kb21haW5zID0gXFx1MDAzY1xcdTAwMjZwZCBJTVhfU0NfUl9TUERJRl8wXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaT02Mzc9XFx0YWNtOiBhY21ANTllMDAwMDAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY2Ny1cXHRcXHRcXHQgXFx1MDAzY1xcdTAwMjZjbGtfZXNhaTBfdHhfaGZfY2xrXFx1MDAzZSxcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6NjY4OlxcdFxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19zcGRpZjBfcnhcXHUwMDNlLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS02NjktXFx0XFx0XFx0IFxcdTAwM2NcXHUwMDI2Y2xrX3NhaTBfcnhfYmNsa1xcdTAwM2UsXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjg1LVxcdFxcdFxcdCAgICAgIFxcXCJlc2FpMF90eF9oZl9jbGtcXFwiLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaTo2ODY6XFx0XFx0XFx0ICAgICAgXFxcInNwZGlmMF9yeFxcXCIsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY4Ny1cXHRcXHRcXHQgICAgICBcXFwic2FpMF9yeF9iY2xrXFxcIixcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpPTIwPVxcdTAwMjZhY20ge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktNDAtXFx0XFx0IFxcdTAwM2NcXHUwMDI2Y2xrX2V4dF9hdWRfbWNsazFcXHUwMDNlLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpOjQxOlxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19zcGRpZjBfcnhcXHUwMDNlLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTQyLVxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19zYWkwX3J4X2JjbGtcXHUwMDNlLFxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktNTMtXFx0XFx0ICAgICAgXFxcImV4dF9hdWRfbWNsazFcXFwiLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpOjU0OlxcdFxcdCAgICAgIFxcXCJzcGRpZjBfcnhcXFwiLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTU1LVxcdFxcdCAgICAgIFxcXCJzYWkwX3J4X2JjbGtcXFwiLFxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k9NzU9XFx1MDAyNmVkbWEwIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTg3LVxcdFxcdFxcdTAwM2NHSUNfU1BJIDAgICBJUlFfVFlQRV9MRVZFTF9ISUdIXFx1MDAzZSxcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4ZHhsLXNzLWFkbWEuZHRzaTo4ODpcXHRcXHRcXHUwMDNjR0lDX1NQSSAzMjcgSVJRX1RZUEVfTEVWRUxfSElHSFxcdTAwM2UsIC8qIHNwZGlmMCAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTg5LVxcdFxcdFxcdTAwM2NHSUNfU1BJIDMyOSBJUlFfVFlQRV9MRVZFTF9ISUdIXFx1MDAzZSxcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpPTI1Mz1cXHUwMDI2c2FpMyB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4ZHhsLXNzLWFkbWEuZHRzaS0yNTYtXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k6MjU3OlxcdTAwMjZzcGRpZjAge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTI1OC1cXHRpbnRlcnJ1cHRzID0gXFx1MDAzY0dJQ19TUEkgMzI2IElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlLCAvKiByeCAqL1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k9MjU0PVxcdGFjbTogYWNtQDU5ZTAwMDAwIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTI5NC1cXHRcXHRcXHQgXFx1MDAzY1xcdTAwMjZjbGtfZXNhaTFfdHhfaGZfY2xrXFx1MDAzZSxcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaToyOTU6XFx0XFx0XFx0IFxcdTAwM2NcXHUwMDI2Y2xrX3NwZGlmMF9yeFxcdTAwM2UsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6Mjk2OlxcdFxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19zcGRpZjBfcnhcXHUwMDNlLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTI5Ny1cXHRcXHRcXHQgXFx1MDAzY1xcdTAwMjZjbGtfc2FpMF9yeF9iY2xrXFx1MDAzZSxcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTMyMS1cXHRcXHRcXHQgICAgICBcXFwiZXNhaTFfdHhfaGZfY2xrXFxcIixcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaTozMjI6XFx0XFx0XFx0ICAgICAgXFxcInNwZGlmMF9yeFxcXCIsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2ktMzIzLVxcdFxcdFxcdCAgICAgIFxcXCJzcGRpZjFfcnhcXFwiLFxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k9MzQ1PVxcdTAwMjZlZG1hMCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS0zNTYtXFx0XFx0ICAgICBcXHUwMDNjR0lDX1NQSSA0MTAgSVJRX1RZUEVfTEVWRUxfSElHSFxcdTAwM2UsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6MzU3OlxcdFxcdCAgICAgXFx1MDAzY0dJQ19TUEkgNDU3IElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlLCAvKiBzcGRpZjAgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS0zNTgtXFx0XFx0ICAgICBcXHUwMDNjR0lDX1NQSSA0NTkgSVJRX1RZUEVfTEVWRUxfSElHSFxcdTAwM2UsXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaT00OTE9XFx1MDAyNnNhaTNfbHBjZyB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS00OTUtXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6NDk2OlxcdTAwMjZzcGRpZjAge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjQ5NzpcXHRjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnNwZGlmMF9scGNnIElNWF9MUENHX0NMS180XFx1MDAzZSxcXHQvKiBjb3JlICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2ktNDk4LVxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19kdW1teVxcdTAwM2UsXFx0XFx0XFx0Lyogcnh0eDAgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaTo0OTk6XFx0XFx0IFxcdTAwM2NcXHUwMDI2c3BkaWYwX2xwY2cgSU1YX0xQQ0dfQ0xLXzVcXHUwMDNlLFxcdC8qIHJ4dHgxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2ktNTAwLVxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19kdW1teVxcdTAwM2UsXFx0XFx0XFx0Lyogcnh0eDIgKi9cXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUwOS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaTo1MTA6XFx1MDAyNnNwZGlmMF9scGNnIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS01MTEtXFx0Y2xvY2staW5kaWNlcyA9IFxcdTAwM2NJTVhfTFBDR19DTEtfNVxcdTAwM2UsIFxcdTAwM2NJTVhfTFBDR19DTEtfNFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6NTEyOlxcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFxcXCJzcGRpZjBfbHBjZ190eF9jbGtcXFwiLCBcXFwic3BkaWYwX2xwY2dfZ2Nsa3dcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUxMy19O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k9MjY3NT1cXHRcXHRzZG1tY19wd3Jlbjogc2RtbWMtcHdyZW4ge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2ktMjY4MS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaToyNjgyOlxcdHNwZGlmMCB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2ktMjY4My1cXHRcXHQvb21pdC1pZi1uby1yZWYvXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k6MjY4NDpcXHRcXHRzcGRpZjBtMF90eDogc3BkaWYwbTAtdHgge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2ODUtXFx0XFx0XFx0cm9ja2NoaXAscGlucyA9XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k6MjY4NjpcXHRcXHRcXHRcXHQvKiBzcGRpZjBtMF90eCAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2ODctXFx0XFx0XFx0XFx0XFx1MDAzYzEgUktfUEI2IDMgXFx1MDAyNnBjZmdfcHVsbF9ub25lXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2OTAtXFx0XFx0L29taXQtaWYtbm8tcmVmL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpOjI2OTE6XFx0XFx0c3BkaWYwbTFfdHg6IHNwZGlmMG0xLXR4IHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaS0yNjkyLVxcdFxcdFxcdHJvY2tjaGlwLHBpbnMgPVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpOjI2OTM6XFx0XFx0XFx0XFx0Lyogc3BkaWYwbTFfdHggKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaS0yNjk0LVxcdFxcdFxcdFxcdFxcdTAwM2M0IFJLX1BCNCA2IFxcdTAwMjZwY2ZnX3B1bGxfbm9uZVxcdTAwM2U7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLmR0c2k9MjU1Mz1cXHRzcGRpZl90eDA6IHNwZGlmLXR4QGZlNGUwMDAwIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UuZHRzaS0yNTYyLVxcdFxcdGludGVycnVwdHMgPSBcXHUwMDNjR0lDX1NQSSAxOTMgSVJRX1RZUEVfTEVWRUxfSElHSCAwXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLmR0c2k6MjU2MzpcXHRcXHRwaW5jdHJsLTAgPSBcXHUwMDNjXFx1MDAyNnNwZGlmMG0wX3R4XFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLmR0c2ktMjU2NC1cXHRcXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtaDk2LW1heC12NTguZHRzPTQzNT1cXHUwMDI2c3BkaWZfdHgwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1oOTYtbWF4LXY1OC5kdHMtNDM2LVxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtaDk2LW1heC12NTguZHRzOjQzNzpcXHRwaW5jdHJsLTAgPSBcXHUwMDNjXFx1MDAyNnNwZGlmMG0xX3R4XFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1oOTYtbWF4LXY1OC5kdHMtNDM4LVxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaD0xNTk9dW5pb24gY3ZteF9ucGVpX2Jpc3Rfc3RhdHVzIHtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0yMDQtXFx0XFx0dWludDY0X3QgY3NtMToxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDoyMDU6XFx0XFx0dWludDY0X3QgZGlmMDoxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0yMDYtXFx0XFx0dWludDY0X3QgZGlmMToxO1xcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTIxOC1cXHRcXHR1aW50NjRfdCBkaWYxOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjIxOTpcXHRcXHR1aW50NjRfdCBkaWYwOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTIyMC1cXHRcXHR1aW50NjRfdCBjc20xOjE7XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMzE2LVxcdFxcdHVpbnQ2NF90IGNzbTE6MTtcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6MzE3OlxcdFxcdHVpbnQ2NF90IGRpZjA6MTtcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMzE4LVxcdFxcdHVpbnQ2NF90IGRpZjE6MTtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0zMzAtXFx0XFx0dWludDY0X3QgZGlmMToxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDozMzE6XFx0XFx0dWludDY0X3QgZGlmMDoxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0zMzItXFx0XFx0dWludDY0X3QgY3NtMToxO1xcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTQyNi1cXHRcXHR1aW50NjRfdCBjc20xOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjQyNzpcXHRcXHR1aW50NjRfdCBkaWYwOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTQyOC1cXHRcXHR1aW50NjRfdCBkaWYxOjE7XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtNDQwLVxcdFxcdHVpbnQ2NF90IGRpZjE6MTtcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6NDQxOlxcdFxcdHVpbnQ2NF90IGRpZjA6MTtcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtNDQyLVxcdFxcdHVpbnQ2NF90IGNzbTE6MTtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC01MzctXFx0XFx0dWludDY0X3QgY3NtMToxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDo1Mzg6XFx0XFx0dWludDY0X3QgZGlmMDoxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC01MzktXFx0XFx0dWludDY0X3QgZGlmMToxO1xcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTU1MS1cXHRcXHR1aW50NjRfdCBkaWYxOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjU1MjpcXHRcXHR1aW50NjRfdCBkaWYwOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTU1My1cXHRcXHR1aW50NjRfdCBjc20xOjE7XFxuLS1cXG5hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYz0xMjU9c3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHtcXG4tLVxcbmFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jLTE2MC1cXHRDTEtERVZfQ09OX0lEKFxcXCJzZGlmMV9mY2tcXFwiLCBcXHUwMDI2bXN0cF9jbGtzW01TVFAwMDVdKSxcXG5hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYzoxNjE6XFx0Q0xLREVWX0NPTl9JRChcXFwic2RpZjBfZmNrXFxcIiwgXFx1MDAyNm1zdHBfY2xrc1tNU1RQMDA0XSksXFxuYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMtMTYyLVxcdENMS0RFVl9DT05fSUQoXFxcImhzcGlfZmNrXFxcIiwgXFx1MDAyNm1zdHBfY2xrc1tNU1RQMDAyXSksXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYz0xMDI9c3RhdGljIGNvbnN0IGNoYXIgKm14NTNfY2tvMl9zZWxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTExNi1cXHRcXFwidHZlX3NlbFxcXCIsIFxcXCJscF9hcG1cXFwiLFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjExNzpcXHRcXFwidWFydF9yb290XFxcIiwgXFxcImR1bW15XFxcIi8qIHNwZGlmMF9jbGtfcm9vdCAqLyxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYy0xMTgtXFx0XFxcImR1bW15XFxcIiwgXFxcImR1bW15XFxcIiwgfTtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jPTEyMT1zdGF0aWMgY29uc3QgY2hhciAqc3BkaWZfc2VsW10gPSB7IFxcXCJwbGwxX3N3XFxcIiwgXFxcInBsbDJfc3dcXFwiLCBcXFwicGxsM19zd1xcXCIsIFxcXCJzcGRpZl94dGFsX3NlbFxcXCIsIH07XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MTIyOnN0YXRpYyBjb25zdCBjaGFyICpzcGRpZjBfY29tX3NlbFtdID0geyBcXFwic3BkaWYwX3BvZGZcXFwiLCBcXFwic3NpMV9yb290X2dhdGVcXFwiLCB9O1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTEyMy1zdGF0aWMgY29uc3QgY2hhciAqbXg1MV9zcGRpZjFfY29tX3NlbFtdID0geyBcXFwic3BkaWYxX3BvZGZcXFwiLCBcXFwic3NpMl9yb290X2dhdGVcXFwiLCB9O1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM9MTMxPXN0YXRpYyB2b2lkIF9faW5pdCBteDVfY2xvY2tzX2NvbW1vbl9pbml0KHZvaWQgX19pb21lbSAqY2NtX2Jhc2UpXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYy0yNjItXFx0Y2xrW0lNWDVfQ0xLX1BBVEFfR0FURV1cXHRcXHQ9IGlteF9jbGtfZ2F0ZTIoXFxcInBhdGFfZ2F0ZVxcXCIsIFxcXCJpcGdcXFwiLCBNWENfQ0NNX0NDR1I0LCAwKTtcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoyNjM6XFx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9TRUxdXFx0PSBpbXhfY2xrX211eChcXFwic3BkaWYwX3NlbFxcXCIsIE1YQ19DQ01fQ1NDTVIyLCAwLCAyLCBzcGRpZl9zZWwsIEFSUkFZX1NJWkUoc3BkaWZfc2VsKSk7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY0OlxcdGNsa1tJTVg1X0NMS19TUERJRjBfUFJFRF1cXHQ9IGlteF9jbGtfZGl2aWRlcihcXFwic3BkaWYwX3ByZWRcXFwiLCBcXFwic3BkaWYwX3NlbFxcXCIsIE1YQ19DQ01fQ0RDRFIsIDI1LCAzKTtcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoyNjU6XFx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9QT0RGXVxcdD0gaW14X2Nsa19kaXZpZGVyKFxcXCJzcGRpZjBfcG9kZlxcXCIsIFxcXCJzcGRpZjBfcHJlZFxcXCIsIE1YQ19DQ01fQ0RDRFIsIDE5LCA2KTtcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoyNjY6XFx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9DT01fU0VMXVxcdD0gaW14X2Nsa19tdXhfZmxhZ3MoXFxcInNwZGlmMF9jb21fc2VsXFxcIiwgTVhDX0NDTV9DU0NNUjIsIDQsIDEsXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY3OlxcdFxcdFxcdFxcdFxcdFxcdHNwZGlmMF9jb21fc2VsLCBBUlJBWV9TSVpFKHNwZGlmMF9jb21fc2VsKSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCk7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY4OlxcdGNsa1tJTVg1X0NMS19TUERJRjBfR0FURV1cXHQ9IGlteF9jbGtfZ2F0ZTIoXFxcInNwZGlmMF9nYXRlXFxcIiwgXFxcInNwZGlmMF9jb21fc2VsXFxcIiwgTVhDX0NDTV9DQ0dSNSwgMjYpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTI2OS1cXHRjbGtbSU1YNV9DTEtfU1BESUZfSVBHX0dBVEVdXFx0PSBpbXhfY2xrX2dhdGUyKFxcXCJzcGRpZl9pcGdfZ2F0ZVxcXCIsIFxcXCJpcGdcXFwiLCBNWENfQ0NNX0NDR1I1LCAzMCk7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jPTE4Mj1zdGF0aWMgdm9pZCBfX2luaXQgaW14NnNsX2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25vZGUpXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jLTMxNi1cXHRod3NbSU1YNlNMX0NMS19FUERDX1BJWF9TRUxdICAgICA9IGlteF9jbGtfaHdfbXV4KFxcXCJlcGRjX3BpeF9zZWxcXFwiLCAgICAgYmFzZSArIDB4MzgsIDE1LCAzLCBlcGRjX3BpeF9zZWxzLCAgICAgQVJSQVlfU0laRShlcGRjX3BpeF9zZWxzKSk7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYzozMTc6XFx0aHdzW0lNWDZTTF9DTEtfU1BESUYwX1NFTF0gICAgICAgPSBpbXhfY2xrX2h3X211eChcXFwic3BkaWYwX3NlbFxcXCIsICAgICAgIGJhc2UgKyAweDMwLCAyMCwgMiwgYXVkaW9fc2VscywgICAgICAgIEFSUkFZX1NJWkUoYXVkaW9fc2VscykpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzE4LVxcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMV9TRUxdICAgICAgID0gaW14X2Nsa19od19tdXgoXFxcInNwZGlmMV9zZWxcXFwiLCAgICAgICBiYXNlICsgMHgzMCwgNywgIDIsIGF1ZGlvX3NlbHMsICAgICAgICBBUlJBWV9TSVpFKGF1ZGlvX3NlbHMpKTtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzUyLVxcdGh3c1tJTVg2U0xfQ0xLX0VQRENfUElYX1BPREZdICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcXFwiZXBkY19waXhfcG9kZlxcXCIsICAgICBcXFwiZXBkY19waXhfcHJlZFxcXCIsICAgICBiYXNlICsgMHgxOCwgMjMsIDMpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmM6MzUzOlxcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMF9QUkVEXSAgICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcXFwic3BkaWYwX3ByZWRcXFwiLCAgICAgICBcXFwic3BkaWYwX3NlbFxcXCIsICAgICAgICBiYXNlICsgMHgzMCwgMjUsIDMpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmM6MzU0OlxcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMF9QT0RGXSAgICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcXFwic3BkaWYwX3BvZGZcXFwiLCAgICAgICBcXFwic3BkaWYwX3ByZWRcXFwiLCAgICAgICBiYXNlICsgMHgzMCwgMjIsIDMpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzU1LVxcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMV9QUkVEXSAgICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcXFwic3BkaWYxX3ByZWRcXFwiLCAgICAgICBcXFwic3BkaWYxX3NlbFxcXCIsICAgICAgICBiYXNlICsgMHgzMCwgMTIsIDMpO1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYy0zOTctXFx0aHdzW0lNWDZTTF9DTEtfU1BCQV0gICAgICAgICA9IGlteF9jbGtfaHdfZ2F0ZTIoXFxcInNwYmFcXFwiLCAgICAgICAgIFxcXCJpcGdcXFwiLCAgICAgICAgICAgICAgIGJhc2UgKyAweDdjLCAxMik7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYzozOTg6XFx0aHdzW0lNWDZTTF9DTEtfU1BESUZdICAgICAgICA9IGlteF9jbGtfaHdfZ2F0ZTJfc2hhcmVkKFxcXCJzcGRpZlxcXCIsICAgICBcXFwic3BkaWYwX3BvZGZcXFwiLCAgIGJhc2UgKyAweDdjLCAxNCwgXFx1MDAyNnNoYXJlX2NvdW50X3NwZGlmKTtcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jLTM5OS1cXHRod3NbSU1YNlNMX0NMS19TUERJRl9HQ0xLXSAgID0gaW14X2Nsa19od19nYXRlMl9zaGFyZWQoXFxcInNwZGlmX2djbGtcXFwiLCAgXFxcImlwZ1xcXCIsICAgICAgICAgYmFzZSArIDB4N2MsIDE0LCBcXHUwMDI2c2hhcmVfY291bnRfc3BkaWYpO1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGlteDhxbV9hdWRfY2xrX3NlbHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy05My1cXHR7IC5md19uYW1lID0gXFxcImVzYWkxX3R4X2hmX2Nsa1xcXCIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6OTQ6XFx0eyAuZndfbmFtZSA9IFxcXCJzcGRpZjBfcnhcXFwiIH0sXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTk1LVxcdHsgLmZ3X25hbWUgPSBcXFwic3BkaWYxX3J4XFxcIiB9LFxcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTEwNT1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBpbXg4cW1fbWNsa19vdXRfc2Vsc1tdID0ge1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTEwOS1cXHR7IC5md19uYW1lID0gXFxcImhkbWlfcnhfbWNsa1xcXCIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTEwOlxcdHsgLmZ3X25hbWUgPSBcXFwic3BkaWYwX3J4XFxcIiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xMTEtXFx0eyAuZndfbmFtZSA9IFxcXCJzcGRpZjFfcnhcXFwiIH0sXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MTM0PXN0YXRpYyBzdHJ1Y3QgY2xrX2lteDhfYWNtX3NlbCBpbXg4cW1fc2Vsc1tdID0ge1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTE0OS1cXHR7IFxcXCJhY21fc2FpN19tY2xrX3NlbFxcXCIsIElNWF9BRE1BX0FDTV9TQUk3X01DTEtfU0VMLCBpbXg4cW1fbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxbV9tY2xrX3NlbHMpLCAweDE1MDAwMCwgMCwgMiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoxNTA6XFx0eyBcXFwiYWNtX3NwZGlmMF9tY2xrX3NlbFxcXCIsIElNWF9BRE1BX0FDTV9TUERJRjBfVFhfQ0xLX1NFTCwgaW14OHFtX21jbGtfc2VscywgQVJSQVlfU0laRShpbXg4cW1fbWNsa19zZWxzKSwgMHgxQTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTUxLVxcdHsgXFxcImFjbV9zcGRpZjFfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fU1BESUYxX1RYX0NMS19TRUwsIGlteDhxbV9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHFtX21jbGtfc2VscyksIDB4MUIwMDAwLCAwLCAyIH0sXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGlteDhxeHBfYXVkX2Nsa19zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTYzLVxcdHsgLmZ3X25hbWUgPSBcXFwiZXNhaTBfdHhfaGZfY2xrXFxcIiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoxNjQ6XFx0eyAuZndfbmFtZSA9IFxcXCJzcGRpZjBfcnhcXFwiIH0sXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTE2NS1cXHR7IC5md19uYW1lID0gXFxcInNhaTBfcnhfYmNsa1xcXCIgfSxcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz0xNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgaW14OHF4cF9tY2xrX291dF9zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTc3LVxcdHsgLmluZGV4ID0gLTEgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTc4OlxcdHsgLmZ3X25hbWUgPSBcXFwic3BkaWYwX3J4XFxcIiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xNzktXFx0eyAuaW5kZXggPSAtMSB9LFxcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTE5MT1zdGF0aWMgc3RydWN0IGNsa19pbXg4X2FjbV9zZWwgaW14OHF4cF9zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjAyLVxcdHsgXFxcImFjbV9zYWk1X21jbGtfc2VsXFxcIiwgSU1YX0FETUFfQUNNX1NBSTVfTUNMS19TRUwsIGlteDhxeHBfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxeHBfbWNsa19zZWxzKSwgMHgxNTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjAzOlxcdHsgXFxcImFjbV9zcGRpZjBfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fU1BESUYwX1RYX0NMS19TRUwsIGlteDhxeHBfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxeHBfbWNsa19zZWxzKSwgMHgxQTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjA0LVxcdHsgXFxcImFjbV9tcXNfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fTVFTX1RYX0NMS19TRUwsIGlteDhxeHBfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxeHBfbWNsa19zZWxzKSwgMHgxQzAwMDAsIDAsIDIgfSxcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz0yMDc9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgaW14OGR4bF9hdWRfY2xrX3NlbHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0yMTUtXFx0eyAuaW5kZXggPSAtMSB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoyMTY6XFx0eyAuZndfbmFtZSA9IFxcXCJzcGRpZjBfcnhcXFwiIH0sXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTIxNy1cXHR7IC5md19uYW1lID0gXFxcInNhaTBfcnhfYmNsa1xcXCIgfSxcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz0yMjU9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgaW14OGR4bF9tY2xrX291dF9zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjI5LVxcdHsgLmluZGV4ID0gLTEgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjMwOlxcdHsgLmZ3X25hbWUgPSBcXFwic3BkaWYwX3J4XFxcIiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0yMzEtXFx0eyAuaW5kZXggPSAtMSB9LFxcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTI0Mz1zdGF0aWMgc3RydWN0IGNsa19pbXg4X2FjbV9zZWwgaW14OGR4bF9zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjUxLVxcdHsgXFxcImFjbV9zYWkzX21jbGtfc2VsXFxcIiwgSU1YX0FETUFfQUNNX1NBSTNfTUNMS19TRUwsIGlteDhkeGxfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhkeGxfbWNsa19zZWxzKSwgMHgxMTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjUyOlxcdHsgXFxcImFjbV9zcGRpZjBfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fU1BESUYwX1RYX0NMS19TRUwsIGlteDhkeGxfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhkeGxfbWNsa19zZWxzKSwgMHgxQTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjUzLVxcdHsgXFxcImFjbV9tcXNfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fTVFTX1RYX0NMS19TRUwsIGlteDhkeGxfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhkeGxfbWNsa19zZWxzKSwgMHgxQzAwMDAsIDAsIDIgfSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YTEtY3BnLW1zc3IuYz0xMjY9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc0YTFfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YTEtY3BnLW1zc3IuYy0xNTMtXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc0QTFfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRhMS1jcGctbXNzci5jOjE1NDpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0IDMxNCxcXHRSOEE3NzRBMV9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGExLWNwZy1tc3NyLmMtMTU1LVxcdERFRl9NT0QoXFxcInBjaWUxXFxcIixcXHRcXHQgMzE4LFxcdFI4QTc3NEExX0NMS19TM0QxKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YjEtY3BnLW1zc3IuYz0xMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc0YjFfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YjEtY3BnLW1zc3IuYy0xNTEtXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc0QjFfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRiMS1jcGctbXNzci5jOjE1MjpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0IDMxNCxcXHRSOEE3NzRCMV9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGIxLWNwZy1tc3NyLmMtMTUzLVxcdERFRl9NT0QoXFxcInBjaWUxXFxcIixcXHRcXHQgMzE4LFxcdFI4QTc3NEIxX0NMS19TM0QxKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YzAtY3BnLW1zc3IuYz0xMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc0YzBfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YzAtY3BnLW1zc3IuYy0xNTktXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc0QzBfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRjMC1jcGctbXNzci5jOjE2MDpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0IDMxNCxcXHRSOEE3NzRDMF9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGMwLWNwZy1tc3NyLmMtMTYxLVxcdERFRl9NT0QoXFxcInBjaWUwXFxcIixcXHRcXHQgMzE5LFxcdFI4QTc3NEMwX0NMS19TM0QxKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0ZTEtY3BnLW1zc3IuYz0xMjc9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc0ZTFfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0ZTEtY3BnLW1zc3IuYy0xNTgtXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc0RTFfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRlMS1jcGctbXNzci5jOjE1OTpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0IDMxNCxcXHRSOEE3NzRFMV9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGUxLWNwZy1tc3NyLmMtMTYwLVxcdERFRl9NT0QoXFxcInBjaWUxXFxcIixcXHRcXHQgMzE4LFxcdFI4QTc3NEUxX0NMS19TM0QxKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5NS1jcGctbXNzci5jPTEzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3Nzk1X21vZF9jbGtzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTUtY3BnLW1zc3IuYy0xNjEtXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc5NV9DTEtfU0QxKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTUtY3BnLW1zc3IuYzoxNjI6XFx0REVGX01PRChcXFwic2RpZjBcXFwiLFxcdFxcdCAzMTQsXFx0UjhBNzc5NV9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTUtY3BnLW1zc3IuYy0xNjMtXFx0REVGX01PRChcXFwicGNpZTFcXFwiLFxcdFxcdCAzMTgsXFx0UjhBNzc5NV9DTEtfUzNEMSksXFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYz0xMzM9c3RhdGljIHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc5Nl9tb2RfY2xrc1tdIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYy0xNjItXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc5Nl9DTEtfU0QxKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYzoxNjM6XFx0REVGX01PRChcXFwic2RpZjBcXFwiLFxcdFxcdCAzMTQsXFx0UjhBNzc5Nl9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYy0xNjQtXFx0REVGX01PRChcXFwicGNpZTFcXFwiLFxcdFxcdCAzMTgsXFx0UjhBNzc5Nl9DTEtfUzNEMSksXFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmM9MTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNzcl9tb2RfY2xrIHI4YTc3OTY1X21vZF9jbGtzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmMtMTU4LVxcdERFRl9NT0QoXFxcInNkaWYxXFxcIixcXHRcXHQzMTMsXFx0UjhBNzc5NjVfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk2NS1jcGctbXNzci5jOjE1OTpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0MzE0LFxcdFI4QTc3OTY1X0NMS19TRDApLFxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5NjUtY3BnLW1zc3IuYy0xNjAtXFx0REVGX01PRChcXFwicGNpZTFcXFwiLFxcdFxcdDMxOCxcXHRSOEE3Nzk2NV9DTEtfUzNEMSksXFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTkwLWNwZy1tc3NyLmM9MTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNzcl9tb2RfY2xrIHI4YTc3OTkwX21vZF9jbGtzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTkwLWNwZy1tc3NyLmMtMTYxLVxcdERFRl9NT0QoXFxcInNkaWYxXFxcIixcXHRcXHQgMzEzLFxcdFI4QTc3OTkwX0NMS19TRDEpLFxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5OTAtY3BnLW1zc3IuYzoxNjI6XFx0REVGX01PRChcXFwic2RpZjBcXFwiLFxcdFxcdCAzMTQsXFx0UjhBNzc5OTBfQ0xLX1NEMCksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk5MC1jcGctbXNzci5jLTE2My1cXHRERUZfTU9EKFxcXCJwY2llMFxcXCIsXFx0XFx0IDMxOSxcXHRSOEE3Nzk5MF9DTEtfUzNEMSksXFxuLS1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM9NDgzPVBOQU1FKGNsa19pMnMxMF84Y2hfcnhfcClcXHRcXHQ9IHsgXFxcImNsa19pMnMxMF84Y2hfcnhfc3JjXFxcIiwgXFxcImNsa19pMnMxMF84Y2hfcnhfZnJhY1xcXCIsIFxcXCJpMnMxMF9tY2xraW5cXFwiLCBcXFwieGluMTJtXFxcIiB9O1xcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo0ODQ6UE5BTUUoY2xrX3NwZGlmMF9wKVxcdFxcdFxcdD0geyBcXFwiY2xrX3NwZGlmMF9zcmNcXFwiLCBcXFwiY2xrX3NwZGlmMF9mcmFjXFxcIiwgXFxcInhpbjEybVxcXCIgfTtcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtNDg1LVBOQU1FKGNsa19zcGRpZjFfcClcXHRcXHRcXHQ9IHsgXFxcImNsa19zcGRpZjFfc3JjXFxcIiwgXFxcImNsa19zcGRpZjFfZnJhY1xcXCIsIFxcXCJ4aW4xMm1cXFwiIH07XFxuLS1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM9NTc4PXN0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfY2xrX2JyYW5jaCByazM1ODhfaTJzMTBfOGNoX3J4X2ZyYWNtdXggX19pbml0ZGF0YSA9XFxuLS1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtNTgxLVxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo1ODI6c3RhdGljIHN0cnVjdCByb2NrY2hpcF9jbGtfYnJhbmNoIHJrMzU4OF9zcGRpZjBfZnJhY211eCBfX2luaXRkYXRhID1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM6NTgzOlxcdE1VWChDTEtfU1BESUYwLCBcXFwiY2xrX3NwZGlmMFxcXCIsIGNsa19zcGRpZjBfcCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtNTg0LVxcdFxcdFxcdFJLMzU4OF9DTEtTRUxfQ09OKDM0KSwgMCwgMiwgTUZMQUdTKTtcXG4tLVxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYz02ODA9c3RhdGljIHN0cnVjdCByb2NrY2hpcF9jbGtfYnJhbmNoIHJrMzU4OF9lYXJseV9jbGtfYnJhbmNoZXNbXSBfX2luaXRkYXRhID0ge1xcbi0tXFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTk1Mi1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM6OTUzOlxcdEdBVEUoSENMS19TUERJRjAsIFxcXCJoY2xrX3NwZGlmMFxcXCIsIFxcXCJoY2xrX2F1ZGlvX3Jvb3RcXFwiLCAwLFxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTQtXFx0XFx0XFx0UkszNTg4X0NMS0dBVEVfQ09OKDgpLCAxNCwgR0ZMQUdTKSxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM6OTU1OlxcdENPTVBPU0lURShDTEtfU1BESUYwX1NSQywgXFxcImNsa19zcGRpZjBfc3JjXFxcIiwgZ3BsbF9hdXBsbF9wLCAwLFxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTYtXFx0XFx0XFx0UkszNTg4X0NMS1NFTF9DT04oMzIpLCA4LCAxLCBNRkxBR1MsIDMsIDUsIERGTEFHUyxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtOTU3LVxcdFxcdFxcdFJLMzU4OF9DTEtHQVRFX0NPTig4KSwgMTUsIEdGTEFHUyksXFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jOjk1ODpcXHRDT01QT1NJVEVfRlJBQ01VWChDTEtfU1BESUYwX0ZSQUMsIFxcXCJjbGtfc3BkaWYwX2ZyYWNcXFwiLCBcXFwiY2xrX3NwZGlmMF9zcmNcXFwiLFxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTktXFx0XFx0XFx0Q0xLX1NFVF9SQVRFX1BBUkVOVCxcXG4tLVxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NjEtXFx0XFx0XFx0UkszNTg4X0NMS0dBVEVfQ09OKDkpLCAwLCBHRkxBR1MsXFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jOjk2MjpcXHRcXHRcXHRcXHUwMDI2cmszNTg4X3NwZGlmMF9mcmFjbXV4KSxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM6OTYzOlxcdEdBVEUoTUNMS19TUERJRjAsIFxcXCJtY2xrX3NwZGlmMFxcXCIsIFxcXCJjbGtfc3BkaWYwXFxcIiwgMCxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtOTY0LVxcdFxcdFxcdFJLMzU4OF9DTEtHQVRFX0NPTig5KSwgMSwgR0ZMQUdTKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYz03Mzc9UE5BTUUobW91dF9jbXVfY3BfbXBsbF9jbGtfdXNlcl9wYXJlbnRzKVxcdD0geyBcXFwib3NjY2xrXFxcIiB9O1xcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzo3Mzg6UE5BTUUobW91dF9jbXVfYXVkX2F1ZGlmMF9wKVxcdFxcdFxcdD0geyBcXFwiZG91dF9zaGFyZWQwX2RpdjFcXFwiLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy03MzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJkb3V0X3NoYXJlZDFfZGl2MVxcXCIsXFxuLS1cXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM9ODkwPVBOQU1FKG1vdXRfY211X211eF9hbGl2ZV9ub2NfcClcXHRcXHRcXHQ9IHsgXFxcImRvdXRfc2hhcmVkMF9kaXYyXFxcIixcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtODkxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiZG91dF9zaGFyZWQyX2RpdjJcXFwiIH07XFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjg5MjpQTkFNRShtb3V0X2NtdV9tdXhfYXVkX2F1ZGlmMF9wKVxcdFxcdD0geyBcXFwiZG91dF9zaGFyZWQwX2RpdjFcXFwiLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy04OTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJkb3V0X3NoYXJlZDFfZGl2MVxcXCIsXFxuLS1cXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM9MTM1ND1zdGF0aWMgY29uc3Qgc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIHRvcF9tdXhfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTEzNjAtXFx0ICAgIDQsIDEpLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxMzYxOlxcdE1VWChDTEtfTU9VVF9DTVVfQVVEX0FVRElGMCwgXFxcIm1vdXRfY211X2F1ZF9hdWRpZjBcXFwiLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxMzYyOlxcdCAgICBtb3V0X2NtdV9hdWRfYXVkaWYwX3AsIENMS19DT05fTVVYX0NMS0NNVV9BVURfQVVESUYwLCAwLCAzKSxcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTM2My1cXHRNVVgoQ0xLX01PVVRfQ01VX0FVRF9BVURJRjEsIFxcXCJtb3V0X2NtdV9hdWRfYXVkaWYxXFxcIixcXG4tLVxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy0xNDExLVxcdCAgICBtb3V0X2NtdV9tdXhfYWxpdmVfbm9jX3AsIENMS19DT05fTVVYX01VWF9DTEtDTVVfQUxJVkVfTk9DLCAwLCAxKSxcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM6MTQxMjpcXHRNVVgoQ0xLX01PVVRfQ01VX01VWF9BVURfQVVESUYwLCBcXFwibW91dF9jbXVfbXV4X2F1ZF9hdWRpZjBcXFwiLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNDEzOlxcdCAgICBtb3V0X2NtdV9tdXhfYXVkX2F1ZGlmMF9wLCBDTEtfQ09OX01VWF9NVVhfQ0xLQ01VX0FVRF9BVURJRjAsXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTE0MTQtXFx0ICAgIDAsIDMpLFxcbi0tXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jPTE2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayB0b3BfZGl2X2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy0xNzEzLVxcdCAgICBcXFwibW91dF9jbXVfbXV4X2NwX3NoYXJlZDFfY2xrXFxcIiwgQ0xLX0NPTl9ESVZfQ1BfU0hBUkVEMV9DTEssIDAsIDMpLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNzE0OlxcdERJVihDTEtfRE9VVF9DTVVfRElWX0FVRF9BVURJRjAsIFxcXCJkb3V0X2NtdV9kaXZfYXVkX2F1ZGlmMFxcXCIsXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjE3MTU6XFx0ICAgIFxcXCJtb3V0X2NtdV9tdXhfYXVkX2F1ZGlmMFxcXCIsIENMS19DT05fRElWX0RJVl9DTEtDTVVfQVVEX0FVRElGMCxcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTcxNi1cXHQgICAgMCwgNiksXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjE3MTc6XFx0RElWKENMS19ET1VUX0NNVV9ESVZfQVVEX0FVRElGMF9TTSwgXFxcImRvdXRfY211X2Rpdl9hdWRfYXVkaWYwX3NtXFxcIixcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM6MTcxODpcXHQgICAgXFxcIm1vdXRfY211X2F1ZF9hdWRpZjBcXFwiLCBDTEtfQ09OX0RJVl9ESVZfQ0xLQ01VX0FVRF9BVURJRjBfU00sIDAsIDYpLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy0xNzE5LVxcdERJVihDTEtfRE9VVF9DTVVfRElWX0FVRF9BVURJRjEsIFxcXCJkb3V0X2NtdV9kaXZfYXVkX2F1ZGlmMVxcXCIsXFxuLS1cXG5kcml2ZXJzL3BtZG9tYWluL2lteC9zY3UtcGQuYz0xMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfc2NfcGRfcmFuZ2UgaW14OHF4cF9zY3VfcGRfcmFuZ2VzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BtZG9tYWluL2lteC9zY3UtcGQuYy0xNTktXFx0eyBcXFwiZXNhaTFcXFwiLCBJTVhfU0NfUl9FU0FJXzEsIDEsIGZhbHNlLCAwIH0sXFxuZHJpdmVycy9wbWRvbWFpbi9pbXgvc2N1LXBkLmM6MTYwOlxcdHsgXFxcInNwZGlmMFxcXCIsIElNWF9TQ19SX1NQRElGXzAsIDEsIGZhbHNlLCAwIH0sXFxuZHJpdmVycy9wbWRvbWFpbi9pbXgvc2N1LXBkLmMtMTYxLVxcdHsgXFxcInNwZGlmMVxcXCIsIElNWF9TQ19SX1NQRElGXzEsIDEsIGZhbHNlLCAwIH0sXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9Njc9aW50IGVyb2ZzX2luaXRfbWV0YWJ1ZihzdHJ1Y3QgZXJvZnNfYnVmICpidWYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmMtNzgtXFx0fVxcbmZzL2Vyb2ZzL2RhdGEuYzo3OTpcXHRidWYtXFx1MDAzZW9mZiA9IHNiaS1cXHUwMDNlZGlmMC5mc29mZjtcXG5mcy9lcm9mcy9kYXRhLmMtODAtXFx0aWYgKGVyb2ZzX2lzX2ZpbGVpb19tb2RlKHNiaSkpIHtcXG5mcy9lcm9mcy9kYXRhLmM6ODE6XFx0XFx0YnVmLVxcdTAwM2VmaWxlID0gc2JpLVxcdTAwM2VkaWYwLmZpbGU7XFx0Lyogc29tZSBmcyBsaWtlIEZVU0UgbmVlZHMgaXQgKi9cXG5mcy9lcm9mcy9kYXRhLmMtODItXFx0XFx0YnVmLVxcdTAwM2VtYXBwaW5nID0gYnVmLVxcdTAwM2VmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9MjA5PWludCBlcm9mc19tYXBfZGV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBlcm9mc19tYXBfZGV2ICptYXApXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmMtMjE1LVxcbmZzL2Vyb2ZzL2RhdGEuYzoyMTY6XFx0ZXJvZnNfZmlsbF9mcm9tX2RldmluZm8obWFwLCBzYiwgXFx1MDAyNkVST0ZTX1NCKHNiKS1cXHUwMDNlZGlmMCk7XFxuZnMvZXJvZnMvZGF0YS5jLTIxNy1cXHRtYXAtXFx1MDAzZW1fYmRldiA9IHNiLVxcdTAwM2VzX2JkZXY7XFx0LyogdXNlIHNfYmRldiBmb3IgdGhlIHByaW1hcnkgZGV2aWNlICovXFxuLS1cXG5mcy9lcm9mcy9pbnRlcm5hbC5oPTg3PXN0cnVjdCBlcm9mc19zYl9pbmZvIHtcXG5mcy9lcm9mcy9pbnRlcm5hbC5oOjg4OlxcdHN0cnVjdCBlcm9mc19kZXZpY2VfaW5mbyBkaWYwO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtODktXFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMgb3B0O1xcdC8qIG9wdGlvbnMgKi9cXG4tLVxcbmZzL2Vyb2ZzL2ludGVybmFsLmg9MTY1PXN0YXRpYyBpbmxpbmUgYm9vbCBlcm9mc19pc19maWxlaW9fbW9kZShzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtMTY2LXtcXG5mcy9lcm9mcy9pbnRlcm5hbC5oOjE2NzpcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlZGlmMC5maWxlO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtMTY4LX1cXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9MTgzPXN0YXRpYyBpbnQgZXJvZnNfc2Nhbl9kZXZpY2VzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTE5Mi1cXG5mcy9lcm9mcy9zdXBlci5jOjE5MzpcXHRzYmktXFx1MDAzZXRvdGFsX2Jsb2NrcyA9IHNiaS1cXHUwMDNlZGlmMC5ibG9ja3M7XFxuZnMvZXJvZnMvc3VwZXIuYy0xOTQtXFx0aWYgKCFlcm9mc19zYl9oYXNfZGV2aWNlX3RhYmxlKHNiaSkpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTIwNS1cXG5mcy9lcm9mcy9zdXBlci5jOjIwNjpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSBcXHUwMDI2XFx1MDAyNiAhc2JpLVxcdTAwM2VkaWYwLmRheF9kZXYpIHtcXG5mcy9lcm9mcy9zdXBlci5jLTIwNy1cXHRcXHRlcm9mc19pbmZvKHNiLCBcXFwiREFYIHVuc3VwcG9ydGVkIGJ5IGJsb2NrIGRldmljZS4gVHVybmluZyBvZmYgREFYLlxcXCIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0yNTA9c3RhdGljIGludCBlcm9mc19yZWFkX3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzAxLVxcdH1cXG5mcy9lcm9mcy9zdXBlci5jOjMwMjpcXHRzYmktXFx1MDAzZWRpZjAuYmxvY2tzID0gbGUzMl90b19jcHUoZHNiLVxcdTAwM2VibG9ja3NfbG8pO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMzAzLVxcdHNiaS1cXHUwMDNlbWV0YV9ibGthZGRyID0gbGUzMl90b19jcHUoZHNiLVxcdTAwM2VtZXRhX2Jsa2FkZHIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy0zMjEtXFx0XFx0c2JpLVxcdTAwM2Vyb290X25pZCA9IGxlNjRfdG9fY3B1KGRzYi1cXHUwMDNlcm9vdG5pZF84Yik7XFxuZnMvZXJvZnMvc3VwZXIuYzozMjI6XFx0XFx0c2JpLVxcdTAwM2VkaWYwLmJsb2NrcyA9IHNiaS1cXHUwMDNlZGlmMC5ibG9ja3MgfFxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzIzLVxcdFxcdFxcdFxcdCgodTY0KWxlMTZfdG9fY3B1KGRzYi1cXHUwMDNlcmIuYmxvY2tzX2hpKSBcXHUwMDNjXFx1MDAzYyAzMik7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTQ0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTQ0Ny1cXG5mcy9lcm9mcy9zdXBlci5jOjQ0ODpcXHRpZiAoZmMtXFx1MDAzZXNvdXJjZSB8fCBzYmktXFx1MDAzZWRpZjAuZmlsZSlcXG5mcy9lcm9mcy9zdXBlci5jLTQ0OS1cXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwiTXVsdGlwbGUgc291cmNlc1xcXCIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy00NjctXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZnMvZXJvZnMvc3VwZXIuYzo0Njg6XFx0XFx0c2JpLVxcdTAwM2VkaWYwLmZpbGUgPSBub19mcmVlX3B0cihwYXJhbS1cXHUwMDNlZmlsZSk7XFxuZnMvZXJvZnMvc3VwZXIuYy00NjktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTQ3Nz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNTowNy4zMTczNTMwMTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MzU2OTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBFUk9GUyBEZXZpY2UgSW5mb3JtYXRpb24qKlxuXG5SaWdodCwgc28gYGRpZjBgIGlzIGRlZmluZWQgYXMgYSBgc3RydWN0IGVyb2ZzX2RldmljZV9pbmZvYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBtZXRhZGF0YSBmb3IgdGhlIEVST0ZTIGRldmljZSBpcyBzdG9yZWQsIGFuZCBpdCdzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZmlsZSBzeXN0ZW0ncyBsYXlvdXQgYW5kIGhvdyBpdCdzIG9wZXJhdGluZy4gTm93LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgc3RydWN0IGVyb2ZzX2RldmljZV9pbmZvYCBpdHNlbGYuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZmllbGRzIHdpdGhpbiBpdDsgdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgZm9yIGRldmljZSBpZGVudGlmaWNhdGlvbiBhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGJsb2NrIHNpemVzLCBjb21wcmVzc2lvbiBzZXR0aW5ncywgYW5kIHN1cGVyYmxvY2sgaW5mb3JtYXRpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgb24tZGlzayBmb3JtYXQuIEl0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgaW4tZGVwdGggYW5hbHlzaXMgb2YgdGhlIEVST0ZTIGRldmljZSdzIHByb3BlcnRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjM5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzU6MTEuMDEwOTI1NDU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY3Nzg5OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBlcm9mc19kZXZpY2VfaW5mbyBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9pbnRlcm5hbC5oPTQyPXR5cGVkZWYgdTY0IGVyb2ZzX2Jsa190O1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDMtXFxuZnMvZXJvZnMvaW50ZXJuYWwuaDo0NDpzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8ge1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUtXFx0Y2hhciAqcGF0aDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzU6MTMuMzc4NzI1NzgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDQ2MDg5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBlcm9mc19kZXZpY2VfaW5mb2AgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGVyb2ZzX2RldmljZV9pbmZvYCBzdHJ1Y3R1cmUgaW5zaWRlIGFuZCBvdXQuIEl0J3MgYSBrZXkgcGllY2UsIGFuZCBJIGNhbid0IGFmZm9yZCBhbnkgZ2FwcyBpbiBteSB1bmRlcnN0YW5kaW5nLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIC0gbm8gc2tpbW1pbmcsIG5vIHNob3J0Y3V0cy4gR290dGEga25vdyB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHM7IGFsbCB0aGUgbWVtYmVycywgdGhlaXIgZGF0YSB0eXBlcywgdGhlaXIgcHVycG9zZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgc3RydWN0dXJlIGludGVyZmFjZXMgd2l0aCB0aGUgYmxvY2sgZGV2aWNlLCBob3cgaXQgbWFuYWdlcyBtZXRhZGF0YSwgYW5kIHdoYXQgb3B0aW1pemF0aW9ucyBpdCBlbmFibGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVsbHkgd2lsbCBhbGxvdyBtZSB0byBtYWtlIGFueSBlbmhhbmNlbWVudHMgb3IgZGVidWcgYW55IGlzc3VlcyBJIGNvbWUgYWNyb3NzIGxhdGVyLiBJ4oCZbSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgdG9vLCBhbmQgd2FudCB0byBldmFsdWF0ZSBpZiBJIGNhbiBzZWUgaWYgdGhlcmUgYXJlIGJldHRlciBtZW1vcnkgYWxpZ25tZW50IG9yIG9yZGVyIGNob2ljZXMgdGhhdCBjb3VsZCBiZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM1OjIxLjc4MzMzNzU3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDExNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvaW50ZXJuYWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0NCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0NDpcXHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8ge1xcbiAgNDU6XFx0XFx0Y2hhciAqcGF0aDtcXG4gIDQ2OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbiAgNDc6XFx0XFx0c3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXY7XFxuICA0ODpcXHRcXHR1NjQgZnNvZmYsIGRheF9wYXJ0X29mZjtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ZXJvZnNfYmxrX3QgYmxvY2tzO1xcbiAgNTE6XFx0XFx0ZXJvZnNfYmxrX3QgdW5pYWRkcjtcXG4gIDUyOlxcdH07XFxuICA1MzpcXHRcXG4gIDU0OlxcdGVudW0ge1xcbiAgNTU6XFx0XFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE8sXFxuICA1NjpcXHRcXHRFUk9GU19TWU5DX0RFQ09NUFJFU1NfRk9SQ0VfT04sXFxuICA1NzpcXHRcXHRFUk9GU19TWU5DX0RFQ09NUFJFU1NfRk9SQ0VfT0ZGXFxuICA1ODpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNToyMS43ODM0NDAwNjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyMDg5Njg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRVJPRlMgU3VwZXJibG9jayBTaGFyaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcmAgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYy4gSXQncyBjb21wYXJpbmcgdHdvIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2Agc3RydWN0dXJlcywgYHNiaWAgYW5kIGBuZXdfc2JpYCwgdG8gc2VlIGlmIHRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIHVuZGVybHlpbmcgZmlsZXN5c3RlbS4gVGhlIGNvbXBhcmlzb24gY2hlY2tzIHNldmVyYWwgYXNwZWN0cywgc3RhcnRpbmcgd2l0aCB0aGUgYGZpbGVgIGFuZCBgZnNvZmZgIG1lbWJlcnMgd2l0aGluIHRoZSBgZGlmMGAgc3RydWN0LCB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBkZXZpY2UgaW5mb3JtYXRpb24uIElmIGVpdGhlciBvZiB0aG9zZSBhcmUgbnVsbCwgaXQgaW1tZWRpYXRlbHkgYmFpbHMgb3V0LlxuXG5UaGUgY29yZSBvZiB0aGUgY29tcGFyaXNvbiBoaW5nZXMgb24gd2hldGhlciB0aGUgaW5vZGVzIG9mIHRob3NlIGZpbGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCB0aGUgb2Zmc2V0cyBhcmUgdGhlIHNhbWUsIGFuZCwgbW9zdCBjcml0aWNhbGx5LCBhIGBtZW1jbXBgIG9mIHRoZSBgc2JpLVx1MDAzZW9wdGAgZmllbGQgYWdhaW5zdCBgbmV3X3NiaS1cdTAwM2VvcHRgIGlzIHBlcmZvcm1lZC4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnN0aXR1dGVzIGEgbWF0Y2ggZm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIDEuXG5cblRoZSB1c2Ugb2YgYG1lbWNtcGAgaGVyZSBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHF1ZXN0aW9uOiBpcyB0aGlzIHRoZSAqb25seSogcGxhY2Ugd2hlcmUgYHNiaS1cdTAwM2VvcHRgIGlzIG1vZGlmaWVkPyBJZiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgd2hlcmUgaXQgZ2V0cyB1cGRhdGVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgdXBkYXRlcyBtaWdodCBhZmZlY3QgdGhpcyBzaGFyaW5nIHRlc3QuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGVyZSBgc2JpLVx1MDAzZW9wdGAgaXMgaW5pdGlhbGl6ZWQgb3IgbW9kaWZpZWQuIEknbGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIHRvIHNlZSB3aGVyZSB0aGUgYHNiaS1cdTAwM2VvcHRgIGZpZWxkIGdldHMgaXRzIHZhbHVlcy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIHNpbmNlIHRoZSBmdW5jdGlvbiBzdWdnZXN0cyB3ZSBjYW4gc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDM0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzU6MjguNzA0MzQwNTI4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2NzM2Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyb2ZzX2ZjX3BhcnNlX3BhcmFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL3N1cGVyLmM9NDQzPXN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2Vfc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNDc2LVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NDc3OnN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbmZzL2Vyb2ZzL3N1cGVyLmMtNDc4LVxcdFxcdFxcdFxcdHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz05NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXJvZnNfY29udGV4dF9vcHMgPSB7XFxuZnMvZXJvZnMvc3VwZXIuYzo5NDM6XFx0LnBhcnNlX3BhcmFtXFx0PSBlcm9mc19mY19wYXJzZV9wYXJhbSxcXG5mcy9lcm9mcy9zdXBlci5jLTk0NC1cXHQuZ2V0X3RyZWUgICAgICAgPSBlcm9mc19mY19nZXRfdHJlZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzU6MzAuMzkxMDg1NTEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTQ2NTk4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBlcm9mc19mY19wYXJzZV9wYXJhbWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgZ3V0cyBvZiB0aGlzLiBJJ20gZm9jdXNpbmcgb24gYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhcnNlZC4gV2hhdCdzIHRoZSBzdHJhdGVneT8gQXJlIHRoZXkgdXNpbmcgYSBzdHJhaWdodGZvcndhcmQgdG9rZW5pemF0aW9uIGFwcHJvYWNoLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIHRvIGhhbmRsZSB2YXJpYXRpb25zIGFuZCBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBpbnB1dD8gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3ZlIGFjY291bnRlZCBmb3IgYWxsIHRoZSBlZGdlIGNhc2VzLiBUaGluayBhYm91dCBob3cgdGhlIHBhcmFtZXRlcnMgaW50ZXJhY3Qg4oCTIGFyZSB0aGVyZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBkZWZhdWx0IHZhbHVlcywgYW5kIGhvdyBhcmUgdGhvc2UgaGFuZGxlZCBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcz8gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBtYXliZSBhIHN0YWNrIGJ1ZmZlciwgYW55IHBvc3NpYmlsaXR5IG9mIGFuIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eT8gTW9zdCBpbXBvcnRhbnRseSwgZG9lcyB0aGlzIGNvZGUgaW1wbGVtZW50IHRoZSBwYXJhbWV0ZXJzIGluIGEgc2ltcGxlIHdheT8gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI5OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM1OjM0LjQ0NTc0NzkyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9lcm9mcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3NyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0Nzc6XFx0c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIDQ3ODpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4gNDc5OlxcdHtcXG4gNDgwOlxcdFxcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cXHUwMDNlc19mc19pbmZvO1xcbiA0ODE6XFx0XFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XFxuIDQ4MjpcXHRcXHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8gKmRpZjtcXG4gNDgzOlxcdFxcdGludCBvcHQsIHJldDtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0b3B0ID0gZnNfcGFyc2UoZmMsIGVyb2ZzX2ZzX3BhcmFtZXRlcnMsIHBhcmFtLCBcXHUwMDI2cmVzdWx0KTtcXG4gNDg2OlxcdFxcdGlmIChvcHQgXFx1MDAzYyAwKVxcbiA0ODc6XFx0XFx0XFx0cmV0dXJuIG9wdDtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gNDkwOlxcdFxcdGNhc2UgT3B0X3VzZXJfeGF0dHI6XFxuIDQ5MTpcXHRcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSlcXG4gNDkyOlxcdFxcdFxcdFxcdGVycm9yZmMoZmMsIFxcXCJ7LG5vfXVzZXJfeGF0dHIgb3B0aW9ucyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuIDQ5MzpcXHRcXHRcXHRlbHNlIGlmIChyZXN1bHQuYm9vbGVhbilcXG4gNDk0OlxcdFxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcXG4gNDk1OlxcdFxcdFxcdGVsc2VcXG4gNDk2OlxcdFxcdFxcdFxcdGNsZWFyX29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xcbiA0OTc6XFx0XFx0XFx0YnJlYWs7XFxuIDQ5ODpcXHRcXHRjYXNlIE9wdF9hY2w6XFxuIDQ5OTpcXHRcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXFxuIDUwMDpcXHRcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwieyxub31hY2wgb3B0aW9ucyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuIDUwMTpcXHRcXHRcXHRlbHNlIGlmIChyZXN1bHQuYm9vbGVhbilcXG4gNTAyOlxcdFxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbiA1MDM6XFx0XFx0XFx0ZWxzZVxcbiA1MDQ6XFx0XFx0XFx0XFx0Y2xlYXJfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgUE9TSVhfQUNMKTtcXG4gNTA1OlxcdFxcdFxcdGJyZWFrO1xcbiA1MDY6XFx0XFx0Y2FzZSBPcHRfY2FjaGVfc3RyYXRlZ3k6XFxuIDUwNzpcXHRcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpXFxuIDUwODpcXHRcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCwgY2FjaGVfc3RyYXRlZ3kgaWdub3JlZFxcXCIpO1xcbiA1MDk6XFx0XFx0XFx0ZWxzZVxcbiA1MTA6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VvcHQuY2FjaGVfc3RyYXRlZ3kgPSByZXN1bHQudWludF8zMjtcXG4gNTExOlxcdFxcdFxcdGJyZWFrO1xcbiA1MTI6XFx0XFx0Y2FzZSBPcHRfZGF4OlxcbiA1MTM6XFx0XFx0XFx0aWYgKCFlcm9mc19mY19zZXRfZGF4X21vZGUoZmMsIEVST0ZTX01PVU5UX0RBWF9BTFdBWVMpKVxcbiA1MTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUxNTpcXHRcXHRcXHRicmVhaztcXG4gNTE2OlxcdFxcdGNhc2UgT3B0X2RheF9lbnVtOlxcbiA1MTc6XFx0XFx0XFx0aWYgKCFlcm9mc19mY19zZXRfZGF4X21vZGUoZmMsIHJlc3VsdC51aW50XzMyKSlcXG4gNTE4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTk6XFx0XFx0XFx0YnJlYWs7XFxuIDUyMDpcXHRcXHRjYXNlIE9wdF9kZXZpY2U6XFxuIDUyMTpcXHRcXHRcXHRkaWYgPSBremFsbG9jX29iaigqZGlmKTtcXG4gNTIyOlxcdFxcdFxcdGlmICghZGlmKVxcbiA1MjM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDUyNDpcXHRcXHRcXHRkaWYtXFx1MDAzZXBhdGggPSBrc3RyZHVwKHBhcmFtLVxcdTAwM2VzdHJpbmcsIEdGUF9LRVJORUwpO1xcbiA1MjU6XFx0XFx0XFx0aWYgKCFkaWYtXFx1MDAzZXBhdGgpIHtcXG4gNTI2OlxcdFxcdFxcdFxcdGtmcmVlKGRpZik7XFxuIDUyNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNTI4OlxcdFxcdFxcdH1cXG4gNTI5OlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnNiaS1cXHUwMDNlZGV2cy1cXHUwMDNlcndzZW0pO1xcbiA1MzA6XFx0XFx0XFx0cmV0ID0gaWRyX2FsbG9jKFxcdTAwMjZzYmktXFx1MDAzZWRldnMtXFx1MDAzZXRyZWUsIGRpZiwgMCwgMCwgR0ZQX0tFUk5FTCk7XFxuIDUzMTpcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2c2JpLVxcdTAwM2VkZXZzLVxcdTAwM2Vyd3NlbSk7XFxuIDUzMjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiA1MzM6XFx0XFx0XFx0XFx0a2ZyZWUoZGlmLVxcdTAwM2VwYXRoKTtcXG4gNTM0OlxcdFxcdFxcdFxcdGtmcmVlKGRpZik7XFxuIDUzNTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1MzY6XFx0XFx0XFx0fVxcbiA1Mzc6XFx0XFx0XFx0KytzYmktXFx1MDAzZWRldnMtXFx1MDAzZWV4dHJhX2RldmljZXM7XFxuIDUzODpcXHRcXHRcXHRicmVhaztcXG4gNTM5OlxcdFxcdGNhc2UgT3B0X2RvbWFpbl9pZDpcXG4gNTQwOlxcdFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRSkpIHtcXG4gNTQxOlxcdFxcdFxcdFxcdGVycm9yZmMoZmMsIFxcXCIlcyBvcHRpb24gbm90IHN1cHBvcnRlZFxcXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcXG4gNTQyOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDU0MzpcXHRcXHRcXHRcXHRrZnJlZV9zZW5zaXRpdmUoc2JpLVxcdTAwM2Vkb21haW5faWQpO1xcbiA1NDQ6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2Vkb21haW5faWQgPSBub19mcmVlX3B0cihwYXJhbS1cXHUwMDNlc3RyaW5nKTtcXG4gNTQ1OlxcdFxcdFxcdH1cXG4gNTQ2OlxcdFxcdFxcdGJyZWFrO1xcbiA1NDc6XFx0XFx0Y2FzZSBPcHRfZGlyZWN0aW86XFxuIDU0ODpcXHRcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcXG4gNTQ5OlxcdFxcdFxcdFxcdGVycm9yZmMoZmMsIFxcXCIlcyBvcHRpb24gbm90IHN1cHBvcnRlZFxcXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcXG4gNTUwOlxcdFxcdFxcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxcbiA1NTE6XFx0XFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIERJUkVDVF9JTyk7XFxuIDU1MjpcXHRcXHRcXHRlbHNlXFxuIDU1MzpcXHRcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBESVJFQ1RfSU8pO1xcbiA1NTQ6XFx0XFx0XFx0YnJlYWs7XFxuIDU1NTpcXHRcXHRjYXNlIE9wdF9mc29mZnNldDpcXG4gNTU2OlxcdFxcdFxcdHNiaS1cXHUwMDNlZGlmMC5mc29mZiA9IHJlc3VsdC51aW50XzY0O1xcbiA1NTc6XFx0XFx0XFx0YnJlYWs7XFxuIDU1ODpcXHRcXHRjYXNlIE9wdF9pbm9kZV9zaGFyZTpcXG4gNTU5OlxcdFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRSkpXFxuIDU2MDpcXHRcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcXFwiLCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7XFxuIDU2MTpcXHRcXHRcXHRlbHNlXFxuIDU2MjpcXHRcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xcbiA1NjM6XFx0XFx0XFx0YnJlYWs7XFxuIDU2NDpcXHRcXHRjYXNlIE9wdF9zdXBlcmJsb2NrX3NoYXJlOlxcbiA1NjU6XFx0XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpXFxuIDU2NjpcXHRcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcXFwiLCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7XFxuIDU2NzpcXHRcXHRcXHRlbHNlXFxuIDU2ODpcXHRcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSk7XFxuIDU2OTpcXHRcXHRcXHRicmVhaztcXG4gNTcwOlxcdFxcdGNhc2UgT3B0X3NvdXJjZTpcXG4gNTcxOlxcdFxcdFxcdHJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTtcXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcdHJldHVybiAwO1xcbiA1NzQ6XFx0fVxcbiA1NzU6XFx0XFxuIDU3NjpcXHRzdGF0aWMgaW50IGVyb2ZzX2VuY29kZV9maChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKmZoLCBpbnQgKm1heF9sZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM1OjM0LjQ0NTg2NTIzMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA4MTgxMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzYmktXHUwMDNlb3B0YCBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCdzIGJlaW5nIGhhbmRsZWQuIFdlJ3JlIHNldHRpbmcgYW5kIGNsZWFyaW5nIG9wdGlvbnMgdXNpbmcgYHNldF9vcHRgIGFuZCBgY2xlYXJfb3B0YCwgYW5kIHdlJ3JlIGFsc28gZGlyZWN0bHkgYXNzaWduaW5nIGEgdmFsdWUgdG8gYHNiaS1cdTAwM2VvcHQuY2FjaGVfc3RyYXRlZ3lgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCAqbm9uZSogb2YgdGhlc2Ugb3BlcmF0aW9ucyB0b3VjaCB0aGUgcGFkZGluZyB3aXRoaW4gdGhlIGBzYmktXHUwMDNlb3B0YCBzdHJ1Y3R1cmUuXG5cbk5vdywgYmVjYXVzZSBgc2JpYCBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHRoZSBwYWRkaW5nIHdpdGhpbiBgc2JpLVx1MDAzZW9wdGAgc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhhdCdzIGdvb2QuIFdoaWNoIG1lYW5zIHRoYXQgdGhlIHN1YnNlcXVlbnQgYG1lbWNtcGAgb3BlcmF0aW9uIGlzIGNvbXBhcmluZyB6ZXJvZWQgcGFkZGluZyBhZ2FpbnN0IHplcm9lZCBwYWRkaW5nLiBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLCB3aGljaCBpcyB3aGF0IEkgaW5pdGlhbGx5IHN1c3BlY3RlZC5cblxuQnV0IHdhaXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBjYW4ndCBqdXN0IHN0b3AgYXQgb25lIGluc3RhbmNlLiBNeSBmaWVsZCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdG8gYWx3YXlzIGJlIHZpZ2lsYW50IGZvciBvdGhlciBwb3NzaWJsZSBhcmVhcyBvZiBjb25jZXJuLiBMZXQncyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGdldF90cmVlX3N1cGVyYCBmdW5jdGlvbiB3aXRoaW4gYGZzL3N1cGVyLmNgLiBUaGVyZSBtaWdodCBiZSBhbm90aGVyIHNpbWlsYXIgdnVsbmVyYWJpbGl0eSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNTo0MC42NTQwNDk5MzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM4OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM4OTpcXHRcXHRyZXR1cm4gMTtcXG4xMzkwOlxcdH1cXG4xMzkxOlxcdFxcbjEzOTI6XFx0LyoqXFxuMTM5MzpcXHQgKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmVcXG4xMzk0OlxcdCAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXFxuMTM5NTpcXHQgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTFxcbjEzOTY6XFx0ICogQGZpbGxfc3VwZXI6IEhlbHBlciB0byBpbml0aWFsaXNlIGEgbmV3IHN1cGVyYmxvY2tcXG4xMzk3OlxcdCAqXFxuMTM5ODpcXHQgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXNcXG4xMzk5OlxcdCAqIHJldXNlZDsgb3RoZXJ3aXNlIGEgbmV3IGFub255bW91cyBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpc2VkIHdpdGhcXG4xNDAwOlxcdCAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxcbjE0MDE6XFx0ICovXFxuMTQwMjpcXHRpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbjE0MDM6XFx0XFx0XFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxcbjE0MDQ6XFx0XFx0XFx0aW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4xNDA1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4xNDA2OlxcdHtcXG4xNDA3OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuMTQwODpcXHRcXHRpbnQgZXJyO1xcbjE0MDk6XFx0XFxuMTQxMDpcXHRcXHRzYiA9IHNnZXRfZmMoZmMsIHRlc3QsIHNldF9hbm9uX3N1cGVyX2ZjKTtcXG4xNDExOlxcdFxcdGlmIChJU19FUlIoc2IpKVxcbjE0MTI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc2IpO1xcbjE0MTM6XFx0XFxuMTQxNDpcXHRcXHRpZiAoIXNiLVxcdTAwM2VzX3Jvb3QpIHtcXG4xNDE1OlxcdFxcdFxcdGVyciA9IGZpbGxfc3VwZXIoc2IsIGZjKTtcXG4xNDE2OlxcdFxcdFxcdGlmIChlcnIpXFxuMTQxNzpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjE0MTg6XFx0XFxuMTQxOTpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9BQ1RJVkU7XFxuMTQyMDpcXHRcXHR9XFxuMTQyMTpcXHRcXG4xNDIyOlxcdFxcdGZjLVxcdTAwM2Vyb290ID0gZGdldChzYi1cXHUwMDNlc19yb290KTtcXG4xNDIzOlxcdFxcdHJldHVybiAwO1xcbjE0MjQ6XFx0XFxuMTQyNTpcXHRlcnJvcjpcXG4xNDI2OlxcdFxcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcXG4xNDI3OlxcdFxcdHJldHVybiBlcnI7XFxuMTQyODpcXHR9XFxuMTQyOTpcXHRFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0aW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4xNDMyOlxcdFxcdFxcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4xNDMzOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxcbjE0MzQ6XFx0e1xcbjE0MzU6XFx0XFx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcXG4xNDM2OlxcdH1cXG4xNDM3OlxcdEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfbm9kZXYpO1xcbjE0Mzg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM1OjQwLjY1NDIwMzMwNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTg3Mzg1NTczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRVJPRlMgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHJlbmFtZSBhbmQgZXhwb3J0IG9mIGB2ZnNfZ2V0X3N1cGVyYCB0byBgZ2V0X3RyZWVfc3VwZXJgLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd2hpY2ggaXMgd2hlcmUgS01TQU4gY29tZXMgaW50byBwbGF5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgcmlnaHQuXG5cbkxldCdzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIEtNU0FOIHJ1bGVzIHRvIG1ha2Ugc3VyZTpcbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIC0gTm8sIG5vdGhpbmcgZ29lcyB0byB1c2Vyc3BhY2UuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAtIE5vcGUsIG5vdCBzZWVpbmcgdGhhdCBoZXJlLlxuMy4gIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBtaWdodCBiZSByZWFkIGxhdGVyIC0gTm8sIGRvZXNuJ3QgbG9vayBsaWtlIGFueSBvZiB0aGF0IGlzIGludHJvZHVjZWQuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBsZXQgc3Vycm91bmRpbmcgY29kZSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIC0gTm8gb2J2aW91cyB2aW9sYXRpb25zIHRoZXJlIGVpdGhlci5cblxuTm93LCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgY29kZSwgdGhlIGNydWNpYWwgcGFydCBpcyB0aGUgYG1lbWNtcGAgY2FsbC4gSXQncyBjb21wYXJpbmcgYHNiaS1cdTAwM2VvcHRgIGFuZCBgbmV3X3NiaS1cdTAwM2VvcHRgIHdoaWNoIGFyZSBib3RoIHBhcnQgb2YgYHN0cnVjdCBlcm9mc19zYl9pbmZvYC4gQW5kIHRoZSBhbGxvY2F0aW9uLCBga3phbGxvY19vYmpgLCBpcyBrZXkgaGVyZS4gVGhhdCB6ZXJvZXMgdGhlIG1lbW9yeS4gU28sIHBhZGRpbmcgd2l0aGluIGBzYmktXHUwMDNlb3B0YCAqc2hvdWxkKiBiZSB6ZXJvZWQsIGFuZCBpdCdzIG5ldmVyIG1vZGlmaWVkLCBzbyBpdCBzdGF5cyB6ZXJvZWQuIFRoZXJlZm9yZSwgdGhhdCBgbWVtY21wYCBjb21wYXJlcyBpbml0aWFsaXplZCBtZW1vcnkuXG5cbkJ1dCwgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUuIElzIHRoZXJlIGFueSB3YXkgYHNiaS1cdTAwM2VvcHRgIGlzIGNvcGllZCBmcm9tIHNvbWV3aGVyZSBlbHNlPyBMZXQncyBjaGVjayB3aGVyZSBgc2JpYCBpcyBhbGxvY2F0ZWQsIHN0YXJ0aW5nIHdpdGggYGVyb2ZzX2luaXRfZnNfY29udGV4dGAuIFJpZ2h0LCBga3phbGxvY19vYmpgISBgc2JpLVx1MDAzZW9wdGAgaXMgYWx3YXlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGFuZCB0aGUgYWxsb2NhdGlvbiBpcyBpbml0aWFsaXplZCB0aGVyZS5cblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIGBzYmlgIGlzIGFsbG9jYXRlZC4gTGV0IG1lIGNoZWNrIGBlcm9mc19mY19yZWNvbmZpZ3VyZWAuIEFoLCBqdXN0IGEgY2hlY2suIE5vIGNoYW5nZXMgdG8gdGhlIGFsbG9jYXRpb24uXG5cbldoZXJlIGVsc2UgaXMgYG1lbWNtcGAgdXNlZD8gTG9va2luZyBhZ2FpbiwgdGhlcmUncyBvbmx5IG9uZSB1c2U6IGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYC4gVGhhdCdzIHdoZXJlIHRoZSBjb21wYXJpc29uIGhhcHBlbnMuIEJ1dCwgc2luY2UgYHNiaWAgaXMgYWx3YXlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBga3phbGxvY19vYmpgLCB0aGVyZSdzIG5vIHdheSB0aGUgbWVtb3J5IGNhbiBiZSB1bmluaXRpYWxpemVkLlxuXG5Pa2F5LCBsZXQncyBuYWlsIHRoaXMgZG93bi4gSXMgdGhlcmUgcGFkZGluZz8gQ2hlY2tpbmcgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCwgeWVzLCB0aGVyZSBpcyBwYWRkaW5nIGJldHdlZW4gYGNhY2hlX3N0cmF0ZWd5YCAodW5zaWduZWQgY2hhcikgYW5kIGBtb3VudF9vcHRgICh1bnNpZ25lZCBpbnQpLiBUaGF0IHBhZGRpbmcgaXMgdGhyZWUgYnl0ZXMuIEJ1dCB0aGUgd2hvbGUgYHN0cnVjdCBlcm9mc19zYl9pbmZvYCBpcyB6ZXJvZWQgYnkgdGhlIGFsbG9jYXRpb24sIGFuZCB0aG9zZSBwYWRkaW5nIGJ5dGVzIGFyZSBub3QgbW9kaWZpZWQuIFRoZXkgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIFNvIHdoZW4gdGhhdCBgbWVtY21wYCBnZXRzIGNhbGxlZCwgaXQncyBjb21wYXJpbmcgemVyb2VkIHBhZGRpbmcgd2l0aCB6ZXJvZWQgcGFkZGluZy4gVGhhdCdzICpzYWZlKi5cblxuU28sIG5vLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIHBhdGNoIGp1c3QgYWRkcyBhIG5ldyBgc3VwZXJibG9ja19zaGFyZWAgbW91bnQgb3B0aW9uIGFuZCBhbGxvd3Mgc2hhcmluZyBzdXBlcmJsb2NrcyBpZiB0aGUgYmFja2luZyBmaWxlIGFuZCBvcHRpb25zIGFyZSBjb21wYXRpYmxlLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYXJlIGVub3VnaCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMsIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdXNlLWFmdGVyLWZyZWUuIFdlIGRvbid0IG5lZWQgS01TQU4gaGVyZS5cblxuT2theSwgaGVyZSdzIGhvdyBJIHdvdWxkIHN1bW1hcml6ZSB0aGlzOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBzdXBlcmJsb2NrX3NoYXJlYCBvcHRpb24sIGFsbG93aW5nIHN1cGVyYmxvY2sgc2hhcmluZyB3aXRoIGlkZW50aWNhbCBiYWNraW5nIGZpbGVzIGFuZCBtb3VudCBvcHRpb25zLiBJdCB1c2VzIGBtZW1jbXBgIHRvIGNvbXBhcmUgb3B0aW9ucywgaW5jbHVkaW5nIHBhZGRpbmcgd2l0aGluIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIEhvd2V2ZXIsIHNpbmNlIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AgaXMgYWx3YXlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGAsIGFsbCBtZW1vcnksIGluY2x1ZGluZyBwYWRkaW5nIHdpdGhpbiBgc2JpLVx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBzcGVjaWZpYyBmaWVsZHMsIGxlYXZpbmcgdGhlIHBhZGRpbmcgdW50b3VjaGVkLiBUaHVzLCBgbWVtY21wYCBzYWZlbHkgY29tcGFyZXMgaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50OyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjgyLCJPdXRwdXRUb2tlbnMiOjI5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNjowMC41MjgwNjE0NDlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIHNpemVvZihzYmktXFx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXFx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVxcdTAwM2VvcHRgIGZpZWxkcyBkbyBub3QgYWx0ZXIgdGhlIHBhZGRpbmcgYnl0ZXMsIG1lYW5pbmcgdGhleSByZW1haW4gemVyb2VkLiBUaGVyZWZvcmUsIHRoZSBgbWVtY21wYCBvcGVyYXRpb24gc2FmZWx5IGNvbXBhcmVzIGluaXRpYWxpemVkIG1lbW9yeSBhbmQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIHNpemVvZihzYmktXFx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXFx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVxcdTAwM2VvcHRgIGZpZWxkcyBkbyBub3QgYWx0ZXIgdGhlIHBhZGRpbmcgYnl0ZXMsIG1lYW5pbmcgdGhleSByZW1haW4gemVyb2VkLiBUaGVyZWZvcmUsIHRoZSBgbWVtY21wYCBvcGVyYXRpb24gc2FmZWx5IGNvbXBhcmVzIGluaXRpYWxpemVkIG1lbW9yeSBhbmQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq6b2q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 16:31:22 +0000 UTC FinishedAt: 2026-08-12 16:36:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EROFS_FS_BACKED_BY_FILE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5e6de6a2b522f659defacb1551d0465ba6ce13cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EROFS_FS_BACKED_BY_FILE" ], "series_id": "cd3d43d5-42dd-4f68-b035-fab415cb585b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "get_tree_super", "erofs_fc_parse_param", "erofs_fc_fill_super", "erofs_fc_get_tree", "erofs_fc_reconfigure", "erofs_sb_share_test_super" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X3RyZWVfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfcGFyc2VfcGFyYW0mIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtlcm9mc19mY19nZXRfdHJlZSYjMzQ7LAogICAgJiMzNDtlcm9mc19mY19yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBhbmQgYWxsb3dzIHNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUgb3B0aW9ucy4gSXQgdXNlcyBgbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXHUwMDNlb3B0YCwgaXMgemVyby1pbml0aWFsaXplZC4gU3Vic2VxdWVudCBtb2RpZmljYXRpb25zIHRvIGBzYmktXHUwMDNlb3B0YCBmaWVsZHMgZG8gbm90IGFsdGVyIHRoZSBwYWRkaW5nIGJ5dGVzLCBtZWFuaW5nIHRoZXkgcmVtYWluIHplcm9lZC4gVGhlcmVmb3JlLCB0aGUgYG1lbWNtcGAgb3BlcmF0aW9uIHNhZmVseSBjb21wYXJlcyBpbml0aWFsaXplZCBtZW1vcnkgYW5kIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgbXVsdGlwbGUgbW91bnRzIG9mIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSB0byBzaGFyZSBhIHNpbmdsZSBzdXBlcmJsb2NrLiBJdCBtb2RpZmllcyB0aGUgVkZTIGJ5IGV4cG9ydGluZyBgZ2V0X3RyZWVfc3VwZXJgIGFuZCBhZGRzIGxvZ2ljIGluIEVST0ZTIHRvIHBhcnNlIHRoZSBuZXcgb3B0aW9uIGFuZCBoYW5kbGUgc3VwZXJibG9jayBzaGFyaW5nLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNvZGUgcGF0aHMgaW4gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgc3VwZXJibG9jayBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxMTRmZjczZDdlNDIxMjEzNjU1NjNkMDVmMzhjMDk5YTFmNmQxODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjozMzozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG5pbmRleCBkMzAxZDlhYzk0NmE5Li4wMmNhZjNiMDYxZmVkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG5AQCAtMTM5LDYgJiM0MzsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS5cbiBzb3VyY2U9JXMgICAgICAgICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTcGVjaWZ5IHRoZSBiYWNraW5nIGltYWdlIGFzIGEgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLlxuJiM0MztzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gRmlsZS1iYWNrZWQgbW91bnRzXG5AQCAtMTU2LDYgJiM0MzsxNTksMTAgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0XG4gcmVzaWRlcyBvbiBhIGJsb2NrIGRldmljZSwgdXNlIHRoZSB0cmFkaXRpb25hbCBibG9jayBkZXZpY2UgbW91bnQgcGF0aFxuIGluc3RlYWQuXG4gXG4mIzQzO1doZW4gc3VwZXJibG9ja19zaGFyZSBpcyBzcGVjaWZpZWQsIG11bHRpcGxlIG1vdW50cyBvZiB0aGUgc2FtZSBiYWNraW5nXG4mIzQzO2ZpbGUgYXQgdGhlIHNhbWUgZnNvZmZzZXQgd2l0aCBjb21wYXRpYmxlIG1vdW50IG9wdGlvbnMgY2FuIHNoYXJlIGEgc2luZ2xlXG4mIzQzO3N1cGVyYmxvY2suICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy5cbiYjNDM7XG4gU3lzZnMgRW50cmllc1xuID09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbkBAIC0xNTYsNiAmIzQzOzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlx0XHQweDAwMDAwMDgwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cdFx0MHgwMDAwMDEwMFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcdFx0MHgwMDAwMDIwMFxuJiM0MzsjZGVmaW5lIEVST0ZTX01PVU5UX1NVUEVSQkxPQ0tfU0hBUkVcdDB4MDAwMDA0MDBcbiBcbiAjZGVmaW5lIGNsZWFyX29wdChvcHQsIG9wdGlvbilcdCgob3B0KS1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pXG4gI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbilcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xuaW5kZXggZGRjOTcxOWU2ZDE4ZS4uZTFhMWEyN2ZiZDE4ZCAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbkBAIC0zODYsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIGVudW0ge1xuIFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxuIFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcbi1cdE9wdF9zb3VyY2UsXG4mIzQzO1x0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XG5AQCAtNDE1LDYgJiM0Mzs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbiBcdGZzcGFyYW1fdTY0KFwmIzM0O2Zzb2Zmc2V0XCYjMzQ7LFx0XHRcdE9wdF9mc29mZnNldCksXG4gXHRmc3BhcmFtX2ZsYWcoXCYjMzQ7aW5vZGVfc2hhcmVcJiMzNDssXHRcdE9wdF9pbm9kZV9zaGFyZSksXG4gXHRmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKFwmIzM0O3NvdXJjZVwmIzM0OyxcdE9wdF9zb3VyY2UpLFxuJiM0MztcdGZzcGFyYW1fZmxhZyhcJiMzNDtzdXBlcmJsb2NrX3NoYXJlXCYjMzQ7LFx0T3B0X3N1cGVyYmxvY2tfc2hhcmUpLFxuIFx0e31cbiB9O1xuIFxuQEAgLTU2MCw2ICYjNDM7NTYxLDEyIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRlbHNlXG4gXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XG4mIzQzO1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcbiYjNDM7XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcJiMzNDssIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBPcHRfc291cmNlOlxuIFx0XHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XG4gXHR9XG5AQCAtNjUyLDYgJiM0Mzs2NTksMTYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuJiM0MztcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG4mIzQzO1x0XHRlcnJvcmZjKGZjLCBcJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2JpLVx1MDAzZWRldnMtXHUwMDNlZXh0cmFfZGV2aWNlcykge1xuJiM0MztcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7c3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXNcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFxuIFx0c2JpLVx1MDAzZWJsa3N6Yml0cyA9IFBBR0VfU0hJRlQ7XG4gXHRpZiAoIXNiLVx1MDAzZXNfYmRldikge1xuQEAgLTc3OSw2ICYjNDM7Nzk2LDM1IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgd2l0aCBhIHNiaSB0aGF0IGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCxcbiYjNDM7ICogc28gdGhhdCB0aGUgbWVtY21wIGxhdGVyIGVuc3VyZXMgbmV3X3NiaSBpcyBhbHNvIHNoYXJlYWJsZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqbmV3X3NiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbiYjNDM7XG4mIzQzO1x0aWYgKHNiLVx1MDAzZXNfaWZsYWdzIFx1MDAyNiBTQl9JX1JFVElSRUQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXNiaS1cdTAwM2VkaWYwLmZpbGUgfHwgIW5ld19zYmktXHUwMDNlZGlmMC5maWxlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSkgPT0gZmlsZV9pbm9kZShuZXdfc2JpLVx1MDAzZWRpZjAuZmlsZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHNiaS1cdTAwM2VkaWYwLmZzb2ZmID09IG5ld19zYmktXHUwMDNlZGlmMC5mc29mZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgIW1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlcm9mc19maWxlX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG4mIzQzO1x0XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXIsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIHtcbiBcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG5AQCAtNzk0LDcgJiM0Mzs4NDAsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDtzb3VyY2UgaXMgdW5zdXBwb3J0ZWRcJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4mIzQzO1x0XHRyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7XG4gXHR9XG4gXG4gXHRyZXQgPSBnZXRfdHJlZV9iZGV2X2ZsYWdzKGZjLCBlcm9mc19mY19maWxsX3N1cGVyLFxuQEAgLTgxMiw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXG4gXHRcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSktXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHNiaS1cdTAwM2VkaWYwLmZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZXJlYWRfZm9saW8pXG4tXHRcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpO1xuIFx0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtODI1LDYgJiM0Mzs4NzEsMTAgQEAgc3RhdGljIGludCBlcm9mc19mY19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXG4gXHREQkdfQlVHT04oIXNiX3Jkb25seShzYikpO1xuIFxuJiM0MztcdC8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqL1xuJiM0MztcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuIFx0aWYgKG5ld19zYmktXHUwMDNlZG9tYWluX2lkKVxuIFx0XHRlcm9mc19pbmZvKHNiLCBcJiMzNDtpZ25vcmluZyByZWNvbmZpZ3VyYXRpb24gZm9yIGRvbWFpbl9pZC5cJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCA1ZmVlY2Y1ZDkwMzhkLi43MWNkMmRiYWRlNWIzIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTEzODksNyAmIzQzOzEzODksMTcgQEAgc3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuJiM0MzsvKipcbiYjNDM7ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXG4mIzQzOyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXG4mIzQzOyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXG4mIzQzOyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrXG4mIzQzOyAqXG4mIzQzOyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xuJiM0MzsgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoXG4mIzQzOyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuIFx0XHRpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuQEAgLTE0MTYsMTIgJiM0MzsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7XG4gXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuJiM0MztcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfbm9kZXYpO1xuIFxuQEAgLTE0MjksNyAmIzQzOzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zaW5nbGUpO1xuIFxuQEAgLTE0MzksNyAmIzQzOzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHR2b2lkICprZXkpXG4ge1xuIFx0ZmMtXHUwMDNlc19mc19pbmZvID0ga2V5O1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuJiM0MztcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbkBAIC0xNTAsNiAmIzQzOzE1MCwxMCBAQCBleHRlcm4gaW50IHZmc19wYXJzZV9mc19wYXJhbV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG4gZXh0ZXJuIHZvaWQgZmNfZHJvcF9sb2NrZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiBcbiYjNDM7ZXh0ZXJuIGludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4mIzQzO1x0XHRcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4mIzQzO1x0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7XG4gZXh0ZXJuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdFx0IGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19CQUNLRURfQllfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF90cmVlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWUmIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7ZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZyBmaWxlIHRvIHNoYXJlIGEgc2luZ2xlIHN1cGVyYmxvY2suIEl0IG1vZGlmaWVzIHRoZSBWRlMgYnkgZXhwb3J0aW5nIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGFkZHMgbG9naWMgaW4gRVJPRlMgdG8gcGFyc2UgdGhlIG5ldyBvcHRpb24gYW5kIGhhbmRsZSBzdXBlcmJsb2NrIHNoYXJpbmcuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSBwYXRocyBpbiBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBzdXBlcmJsb2NrIG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTExNGZmNzNkN2U0MjEyMTM2NTU2M2QwNWYzOGMwOTlhMWY2ZDE4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE2OjMzOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdAppbmRleCBkMzAxZDlhYzk0NmE5Li4wMmNhZjNiMDYxZmVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdApAQCAtMTM5LDYgJiM0MzsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aQogICAgICAgICAgICAgICAgICAgICAgICBwYWdlIGNhY2hlLgogc291cmNlPSVzICAgICAgICAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU3BlY2lmeSB0aGUgYmFja2luZyBpbWFnZSBhcyBhIHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLgomIzQzO3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLgogPT09PT09PT09PT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogRmlsZS1iYWNrZWQgbW91bnRzCkBAIC0xNTYsNiAmIzQzOzE1OSwxMCBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXQKIHJlc2lkZXMgb24gYSBibG9jayBkZXZpY2UsIHVzZSB0aGUgdHJhZGl0aW9uYWwgYmxvY2sgZGV2aWNlIG1vdW50IHBhdGgKIGluc3RlYWQuCiAKJiM0MztXaGVuIHN1cGVyYmxvY2tfc2hhcmUgaXMgc3BlY2lmaWVkLCBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZwomIzQzO2ZpbGUgYXQgdGhlIHNhbWUgZnNvZmZzZXQgd2l0aCBjb21wYXRpYmxlIG1vdW50IG9wdGlvbnMgY2FuIHNoYXJlIGEgc2luZ2xlCiYjNDM7c3VwZXJibG9jay4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLgomIzQzOwogU3lzZnMgRW50cmllcwogPT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaAppbmRleCA1N2JkMjE4NTljNjVkLi44NmRhMjE5ZjhmNGVjIDEwMDY0NAotLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKQEAgLTE1Niw2ICYjNDM7MTU2LDcgQEAgc3RydWN0IGVyb2ZzX3NiX2luZm8gewogI2RlZmluZSBFUk9GU19NT1VOVF9EQVhfTkVWRVIJCTB4MDAwMDAwODAKICNkZWZpbmUgRVJPRlNfTU9VTlRfRElSRUNUX0lPCQkweDAwMDAwMTAwCiAjZGVmaW5lIEVST0ZTX01PVU5UX0lOT0RFX1NIQVJFCQkweDAwMDAwMjAwCiYjNDM7I2RlZmluZSBFUk9GU19NT1VOVF9TVVBFUkJMT0NLX1NIQVJFCTB4MDAwMDA0MDAKIAogI2RlZmluZSBjbGVhcl9vcHQob3B0LCBvcHRpb24pCSgob3B0KS0mZ3Q7bW91bnRfb3B0ICZhbXA7PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pCiAjZGVmaW5lIHNldF9vcHQob3B0LCBvcHRpb24pCSgob3B0KS0mZ3Q7bW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKQpkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmMKaW5kZXggZGRjOTcxOWU2ZDE4ZS4uZTFhMWEyN2ZiZDE4ZCAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9zdXBlci5jCkBAIC0zODYsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKQogZW51bSB7CiAJT3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLAogCU9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsCi0JT3B0X3NvdXJjZSwKJiM0MzsJT3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7CkBAIC00MTUsNiAmIzQzOzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0gewogCWZzcGFyYW1fdTY0KCYjMzQ7ZnNvZmZzZXQmIzM0OywJCQlPcHRfZnNvZmZzZXQpLAogCWZzcGFyYW1fZmxhZygmIzM0O2lub2RlX3NoYXJlJiMzNDssCQlPcHRfaW5vZGVfc2hhcmUpLAogCWZzcGFyYW1fZmlsZV9vcl9zdHJpbmcoJiMzNDtzb3VyY2UmIzM0OywJT3B0X3NvdXJjZSksCiYjNDM7CWZzcGFyYW1fZmxhZygmIzM0O3N1cGVyYmxvY2tfc2hhcmUmIzM0OywJT3B0X3N1cGVyYmxvY2tfc2hhcmUpLAogCXt9CiB9OwogCkBAIC01NjAsNiAmIzQzOzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJZWxzZQogCQkJc2V0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBJTk9ERV9TSEFSRSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIE9wdF9zdXBlcmJsb2NrX3NoYXJlOgomIzQzOwkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpCiYjNDM7CQkJZXJyb3JmYyhmYywgJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZCYjMzQ7LCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2V0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgT3B0X3NvdXJjZToKIAkJcmV0dXJuIGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShmYywgcGFyYW0pOwogCX0KQEAgLTY1Miw2ICYjNDM7NjU5LDE2IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCWVycm9yZmMoZmMsICYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQomIzQzOwlpZiAodGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgdGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgSU5PREVfU0hBUkUpKSB7CiYjNDM7CQllcnJvcmZjKGZjLCAmIzM0O3N1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWlmICh0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzYmktJmd0O2RldnMtJmd0O2V4dHJhX2RldmljZXMpIHsKJiM0MzsJCWVycm9yZmMoZmMsICYjMzQ7c3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXMmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiAJc2JpLSZndDtibGtzemJpdHMgPSBQQUdFX1NISUZUOwogCWlmICghc2ItJmd0O3NfYmRldikgewpAQCAtNzc5LDYgJiM0Mzs3OTYsMzUgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXQgaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LAomIzQzOyAqIHNvIHRoYXQgdGhlIG1lbWNtcCBsYXRlciBlbnN1cmVzIG5ld19zYmkgaXMgYWxzbyBzaGFyZWFibGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCSAgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKQomIzQzO3sKJiM0MzsJc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGVyb2ZzX3NiX2luZm8gKm5ld19zYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwomIzQzOwomIzQzOwlpZiAoc2ItJmd0O3NfaWZsYWdzICZhbXA7IFNCX0lfUkVUSVJFRCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAoIXNiaS0mZ3Q7ZGlmMC5maWxlIHx8ICFuZXdfc2JpLSZndDtkaWYwLmZpbGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGZpbGVfaW5vZGUoc2JpLSZndDtkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBzYmktJmd0O2RpZjAuZnNvZmYgPT0gbmV3X3NiaS0mZ3Q7ZGlmMC5mc29mZiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAhbWVtY21wKCZhbXA7c2JpLSZndDtvcHQsICZhbXA7bmV3X3NiaS0mZ3Q7b3B0LCBzaXplb2Yoc2JpLSZndDtvcHQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlcm9mc19maWxlX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwomIzQzOwomIzQzOwlpZiAoIXRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKQomIzQzOwkJcmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIHsKIAlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKQEAgLTc5NCw3ICYjNDM7ODQwLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCQllcnJvcmZjKGZjLCAmIzM0O3NvdXJjZSBpcyB1bnN1cHBvcnRlZCYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CQlyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7CiAJfQogCiAJcmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlciwKQEAgLTgxMiw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAKIAkJaWYgKFNfSVNSRUcoZmlsZV9pbm9kZShzYmktJmd0O2RpZjAuZmlsZSktJmd0O2lfbW9kZSkgJmFtcDsmYW1wOwogCQkgICAgc2JpLSZndDtkaWYwLmZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O3JlYWRfZm9saW8pCi0JCQlyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpOwomIzQzOwkJCXJldHVybiBlcm9mc19maWxlX2dldF90cmVlKGZjKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgyNSw2ICYjNDM7ODcxLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCiAJREJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTsKIAomIzQzOwkvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi8KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAobmV3X3NiaS0mZ3Q7ZG9tYWluX2lkKQogCQllcm9mc19pbmZvKHNiLCAmIzM0O2lnbm9yaW5nIHJlY29uZmlndXJhdGlvbiBmb3IgZG9tYWluX2lkLiYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0xMzg5LDcgJiM0MzsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiYjNDM7LyoqCiYjNDM7ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lCiYjNDM7ICogQGZjOiBUaGUgZmlsZXN5c3RlbSBjb250ZXh0IGhvbGRpbmcgdGhlIHBhcmFtZXRlcnMKJiM0MzsgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTAomIzQzOyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrCiYjNDM7ICoKJiM0MzsgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXMKJiM0MzsgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoCiYjNDM7ICogQGZpbGxfc3VwZXIuICBQYXNzaW5nIE5VTEwgZm9yIEB0ZXN0IGFsd2F5cyBjcmVhdGVzIGEgbmV3IHN1cGVyYmxvY2suCiYjNDM7ICovCiYjNDM7aW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLAogCQlpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKQEAgLTE0MTYsMTIgJiM0MzsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpOwogCXJldHVybiBlcnI7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7CiAKIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCSAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKIHsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTsKIApAQCAtMTQyOSw3ICYjNDM7MTQ0MCw3IEBAIGludCBnZXRfdHJlZV9zaW5nbGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpCiB7Ci0JcmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7CiAKQEAgLTE0MzksNyAmIzQzOzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQl2b2lkICprZXkpCiB7CiAJZmMtJmd0O3NfZnNfaW5mbyA9IGtleTsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaAppbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaApAQCAtMTUwLDYgJiM0MzsxNTAsMTAgQEAgZXh0ZXJuIGludCB2ZnNfcGFyc2VfZnNfcGFyYW1fc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCQkgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKTsKIGV4dGVybiB2b2lkIGZjX2Ryb3BfbG9ja2VkKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7CiAKJiM0MztleHRlcm4gaW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKJiM0MzsJCQkgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLAomIzQzOwkJCSBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQkJICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7CiBleHRlcm4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCSBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFUk9GUyBTdXBlcmJsb2NrIFNoYXJpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBkaWdnaW5nIGludG8gdGhlIGNvcmUgVkZTIGFuZCB0aGUgRVJPRlMgaW1wbGVtZW50YXRpb24uIFNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiBtb3VudGluZyB0aGUgc2FtZSBiYWNraW5nIGZpbGUgbXVsdGlwbGUgdGltZXMgc291bmRzIGxpa2UgYSBzb2xpZCBvcHRpbWl6YXRpb24sIGJ1dCBhbnl0aGluZyB0aGF0IHRvdWNoZXMgdGhpcyBsZXZlbCBvZiB0aGUgZmlsZXN5c3RlbSwgZXNwZWNpYWxseSBhZGRpbmcgbmV3IG9wdGlvbnMsIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBzY3J1dGlueSBhbmQgdGhvcm91Z2ggdGVzdGluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nOyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBkYXRhIGludGVncml0eSBvciBmaWxlc3lzdGVtIHN0YWJpbGl0eSBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlci4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSBwYXRjaCBjb2RlIGl0c2VsZiBoZWxwZnVsbHkgcG9pbnRzIG91dCBgQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCB3aXRoaW4gYGZzL2Vyb2ZzL3N1cGVyLmNgLiBDbGVhcmx5LCB0aGF0JiMzOTtzIGEgcHJlcmVxdWlzaXRlIHRvIGVuYWJsZSB0aGUgYHN1cGVyYmxvY2tfc2hhcmVgIG9wdGlvbi4gSXQgZXhwbGljaXRseSBjaGVja3MgZm9yIGl0OgoKYGBgYwogICAgY2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZToKICAgICAgaWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpCiAgICAgICAgZXJyb3JmYyhmYywgJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZCYjMzQ7LCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7CiAgICAgIGVsc2UKICAgICAgICBzZXRfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpOwogICAgICBicmVhazsKYGBgCgpJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpZiBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIGlzIG5vdCBlbmFibGVkLCB0aGUgbW91bnQgb3B0aW9uIHdpbGwgYmUgcmVqZWN0ZWQuIE9idmlvdXNseSwgYEVST0ZTX0ZTYCBpcyByZXF1aXJlZCB0byBhY3R1YWxseSBlbmFibGUgRVJPRlMgaW4gdGhlIGZpcnN0IHBsYWNlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBjb25zdWx0IHRoZSBgZnMvZXJvZnMvS2NvbmZpZ2AgZmlsZSB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzIG9yIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gV2UgbmVlZCB0byBiZSBhd2FyZSBvZiBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFUk9GU19GU19CQUNLRURfQllfRklMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvS2NvbmZpZz04NT1jb25maWcgRVJPRlNfRlNfU0VDVVJJVFlcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTk3LVxuZnMvZXJvZnMvS2NvbmZpZzo5ODpjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcbmZzL2Vyb2ZzL0tjb25maWctOTktXHRib29sIFwmIzM0O0ZpbGUtYmFja2VkIEVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEVST0ZTIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNvbWUgYXNwZWN0IG9mIEVST0ZTIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBFUk9GUyBmaWxlc3lzdGVtIGRpcmVjdG9yeS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGZzL2Vyb2ZzL0tjb25maWdgIGFuZCwgZ2l2ZW4gbXkgZ2VuZXJhbCBmYW1pbGlhcml0eSB3aXRoIHRoZXNlIGZpbGVzLCBJJiMzOTtsbCBzdGFydCBsb29raW5nIGFyb3VuZCBsaW5lIDk4LiBUaGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHBvaW50IHRvIGJlZ2luOyB0aGF0IGxpbmUgbGlrZWx5IGNvdmVycyBhIHNwZWNpZmljIGZlYXR1cmUgb3Igb3B0aW9uIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5LiBUaW1lIHRvIGdldCBteSBleWVzIG9uIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIFNlY3VyaXR5IGxhYmVscyBwcm92aWRlIGFuIGFjY2VzcyBjb250cm9sIGZhY2lsaXR5IHRvIHN1cHBvcnQgTGludXhcbiAgOTE6XHRcdCAgU2VjdXJpdHkgTW9kZWxzIChMU01zKSBhY2NlcHRlZCBieSBBcHBBcm1vciwgU0VMaW51eCwgU21hY2sgYW5kIFRPTU9ZT1xuICA5MjpcdFx0ICBMaW51eC4gVGhpcyBvcHRpb24gZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZVxuICA5MzpcdFx0ICBzZWN1cml0eSBsYWJlbHMgaW4gdGhlIGVyb2ZzIGZpbGVzeXN0ZW0sIHNvIHRoYXQgaXQgcmVxdWlyZXMgZW5hYmxpbmdcbiAgOTQ6XHRcdCAgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IGluIGFkdmFuY2UuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlLCBzYXkgTi5cbiAgOTc6XHRcbiAgOTg6XHRjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcbiAgOTk6XHRcdGJvb2wgXCYjMzQ7RmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gMTAwOlx0XHRkZXBlbmRzIG9uIEVST0ZTX0ZTXG4gMTAxOlx0XHRkZWZhdWx0IHlcbiAxMDI6XHRcdGhlbHBcbiAxMDM6XHRcdCAgVGhpcyBhbGxvd3MgRVJPRlMgdG8gdXNlIGZpbGVzeXN0ZW0gaW1hZ2UgZmlsZXMgZGlyZWN0bHksIHdpdGhvdXRcbiAxMDQ6XHRcdCAgdGhlIGludGVyY2Vzc2lvbiBvZiBsb29wYmFjayBibG9jayBkZXZpY2VzIG9yIGxpa2V3aXNlLiBJdCBpc1xuIDEwNTpcdFx0ICBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjb250YWluZXIgaW1hZ2VzIHdpdGggbnVtZXJvdXMgYmxvYnMgYW5kXG4gMTA2Olx0XHQgIG90aGVyIHNhbmRib3hlcywgd2hlcmUgbG9vcCBkZXZpY2VzIGJlaGF2ZSBpbnRyaWNhdGVseS4gIEl0IGNhbiBhbHNvXG4gMTA3Olx0XHQgIGJlIHVzZWQgdG8gc2ltcGxpZnkgZXJyb3ItcHJvbmUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiB1bm5lY2Vzc2FyeVxuIDEwODpcdFx0ICB2aXJ0dWFsIGJsb2NrIGRldmljZXMuXG4gMTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRVJPRlMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgRVJPRlMgcGF0Y2guIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYEVST0ZTX0ZTYCBhbmQgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGFuZCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcy4KCkZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zOiBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gLCBgZXJvZnNfZmNfZmlsbF9zdXBlcmAsIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYCAobmV3KSwgYGVyb2ZzX2ZpbGVfZ2V0X3RyZWVgIChuZXcpLCBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBgZXJvZnNfZmNfcmVjb25maWd1cmVgLCBhbmQgYWxzbyBgZ2V0X3RyZWVfc3VwZXJgICh3aGljaCBpcyBuZXdseSBleHBvcnRlZCwgcHJldmlvdXNseSBgdmZzX2dldF9zdXBlcmApLgoKVGhlIHByb21wdCYjMzk7cyBndWlkYW5jZSBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSBzZWUgdGhhdCBgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcmAgYW5kIGBlcm9mc19maWxlX2dldF90cmVlYCBhcmUgaW5kZWVkIHN0YXRpYy4gVGhhdCBtZWFucyB0aGV5IGFyZSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLCBub3QgYW4gZXh0ZXJuYWxseSBhY2Nlc3NpYmxlIGVudHJ5cG9pbnQuIEkgd2FudCB0byBhdm9pZCBmb2N1c2luZyBvbiB0aGVzZSBpZiB0aGVyZSYjMzk7cyBhIGdvb2Qgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZS4KClNvLCBhY2NvcmRpbmcgdG8gbXkgaW5pdGlhbCBhbmFseXNpcywgSSBzaG91bGQgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlYCwgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCwgYW5kIHRoZSBuZXdseSBleHBvcnRlZCBgZ2V0X3RyZWVfc3VwZXJgLgoKT2theSwgSSYjMzk7dmUgY2hlY2tlZCBhbmQgdGhlc2UgZnVuY3Rpb25zOiBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gLCBgZXJvZnNfZmNfZmlsbF9zdXBlcmAsIGBlcm9mc19mY19nZXRfdHJlZWAsIGFuZCBgZXJvZnNfZmNfcmVjb25maWd1cmVgIGFyZSBhbGwgc3RhdGljLiBUaGF0JiMzOTtzIGEgYml0IGRpc2FwcG9pbnRpbmcuIEJ1dCB3YWl0Li4uIGV2ZW4gaWYgdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5JiMzOTtyZSB1c2VkIGFzIGNhbGxiYWNrcyB3aXRoaW4gYGZzX2NvbnRleHRfb3BlcmF0aW9uc2AuIFRoYXQgY2hhbmdlcyB0aGluZ3MsIGl0IG1ha2VzIHRoZW0gbW9yZSBpbXBvcnRhbnQuCgpBaCwgYnV0IGBnZXRfdHJlZV9zdXBlcmAgaW4gYGZzL3N1cGVyLmNgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBTbywgdGhhdCBvbmUgbG9va3MgcHJvbWlzaW5nLgoKTm93LCBjb25jZXJuaW5nIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgc3BlY2lmaWNhbGx5LCBpdCAqaXMqIHN0YXRpYywgd2hpY2ggaXNuJiMzOTt0IGlkZWFsLCBidXQgaXQmIzM5O3MgYW4gZW50cnkgcG9pbnQgZm9yIHBhcnNpbmcgbW91bnQgb3B0aW9ucywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGdpdmVuIHRoZSBjb25zdHJhaW50cywgaXQmIzM5O3MgcG9zc2libGUgdGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCgpMZXQgbWUgdGhpbmsuLi4gaXMgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBgZnMvZXJvZnMvc3VwZXIuY2AgdGhhdCBjb3VsZCBiZSB1c2VkPyBUaGF0JiMzOTtzIHdoYXQgSSBoYXZlIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2ZjX3BhcnNlX3BhcmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jPTQ0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy00NzYtXG5mcy9lcm9mcy9zdXBlci5jOjQ3NzpzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbmZzL2Vyb2ZzL3N1cGVyLmMtNDc4LVx0XHRcdFx0c3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz05NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXJvZnNfY29udGV4dF9vcHMgPSB7XG5mcy9lcm9mcy9zdXBlci5jOjk0MzpcdC5wYXJzZV9wYXJhbVx0PSBlcm9mc19mY19wYXJzZV9wYXJhbSxcbmZzL2Vyb2ZzL3N1cGVyLmMtOTQ0LVx0LmdldF90cmVlICAgICAgID0gZXJvZnNfZmNfZ2V0X3RyZWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBFUk9GUyBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gaW5pdGlhbGl6YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBgZXJvZnNfY29udGV4dF9vcHNgIGFuZCB0aGUgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoYXQgYGVyb2ZzX2NvbnRleHRfb3BzYCBtdXN0IGJlIGEgY3JpdGljYWwgc3RydWN0dXJlLCBsaWtlbHkgY29udGFpbmluZyBwb2ludGVycyB0byB0aGUgY29yZSBvcGVyYXRpb25hbCBmdW5jdGlvbnMgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBJdCBzZWVtcyB0aGF0IHRoaXMgc3RydWN0dXJlIGlzIHdoYXQgZ2V0cyBzZXQgZHVyaW5nIHRoZSBtb3VudCB0aW1lIG9wZXJhdGlvbiBzbyB0aGF0IHRoZSBmaWxlc3lzdGVtIGRyaXZlciBjYW4gaG9vayBpbnRvIGFueSBuZWVkZWQgbW91bnQgcGFyYW1ldGVycy4gVGhlIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIGZ1bmN0aW9uIG11c3QgYmUgdGhlIHBvaW50IHdoZXJlIHRoaXMgYWxsIGdldHMgc3RpdGNoZWQgdG9nZXRoZXIuIFRoZXJlZm9yZSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24gaXMgYSBjcml0aWNhbCBwaWVjZSBpbiB1bmRlcnN0YW5kaW5nIHRoZSBib290IG9wZXJhdGlvbiBmb3IgYW4gRVJPRlMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIGxvb2sgaW50byB0aGF0IHJlbGF0aW9uc2hpcCBhIGJpdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlcm9mc19pbml0X2ZzX2NvbnRleHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmM9OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGVyb2ZzX2NvbnRleHRfb3BzID0ge1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtOTQ4LVxuZnMvZXJvZnMvc3VwZXIuYzo5NDk6c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZXJvZnMvc3VwZXIuYy05NTAte1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9MTAwOT1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXJvZnNfZnNfdHlwZSA9IHtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTEwMTEtXHQubmFtZSAgICAgICAgICAgPSBcJiMzNDtlcm9mc1wmIzM0OyxcbmZzL2Vyb2ZzL3N1cGVyLmM6MTAxMjpcdC5pbml0X2ZzX2NvbnRleHQgPSBlcm9mc19pbml0X2ZzX2NvbnRleHQsXG5mcy9lcm9mcy9zdXBlci5jLTEwMTMtXHQua2lsbF9zYiAgICAgICAgPSBlcm9mc19raWxsX3NiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjgwCgkJCQkJCQlvdXRwdXQ6IDE5OAoJCQkJCQkJdGhvdWdodHM6IDYwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFUk9GUyBGdXp6aW5nIEVudHJ5cG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgdGhpcyBFUk9GUyBjb2RlLCBwYXJ0aWN1bGFybHkgaW4gbGlnaHQgb2YgdGhpcyBuZXcgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbi4gVGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgZ2V0X3RyZWVfc3VwZXJgIGFzIHRoZSBmb2N1cyBiZWNhdXNlIGl0JiMzOTtzIG5vbi1zdGF0aWMsIGJ1dCBJIGFsc28gY29uc2lkZXJlZCBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIHNpbmNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZCBieSBzeXprYWxsZXIgYXMgbG9uZyBhcyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCwgYnV0IEkgcmVhbGl6ZWQgYGdldF90cmVlX3N1cGVyYCBpcyBhIHN1aXRhYmxlIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQuCgpOb3csIHdoYXQgYWJvdXQgRVJPRlMtc3BlY2lmaWMgZnVuY3Rpb25zPyBHaXZlbiB0aGUgcHJvbXB0JiMzOTtzIHByZWZlcmVuY2UsIGl0IG1ha2VzIHNlbnNlIHRvIGZvY3VzIG9uIHRoZSBzdGF0aWMgb25lcyB0aGF0IGFyZSB1c2VkIGFzIGNhbGxiYWNrcy4gU2luY2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgdGhleSYjMzk7cmUgdW5saWtlbHkgdG8gYmUgaW5saW5lZC4gSSB3YXMgaW5pdGlhbGx5IGdvaW5nIHRvIGxpc3Q6CgoqICAgYGdldF90cmVlX3N1cGVyYAoqICAgYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYAoqICAgYGVyb2ZzX2ZjX2ZpbGxfc3VwZXJgCiogICBgZXJvZnNfZmNfZ2V0X3RyZWVgCiogICBgZXJvZnNfZmNfcmVjb25maWd1cmVgCgpUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBlcm9mc19maWxlX2dldF90cmVlYCBhbmQgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGFyZSBhbHNvIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgYWxzbyB0YWtlbi4gYGVyb2ZzX2ZpbGVfZ2V0X3RyZWVgIGlzIGNhbGxlZCBkaXJlY3RseSBieSBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBhbmQgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrIHRvIGBnZXRfdHJlZV9zdXBlcmAsIHNvIGl0cyBhZGRyZXNzIGlzIGFsc28gdGFrZW4uIFRoZXNlIGFyZSBpbXBvcnRhbnQuCgpTbywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgZ2V0X3RyZWVfc3VwZXJgIGFuZCBhbGwgdGhlc2UgRVJPRlMgY2FsbGJhY2sgZnVuY3Rpb25zLiBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlYCwgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCwgYW5kIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgZ2V0X3RyZWVfc3VwZXJgIGlzIGluZGVlZCB0aGUgb25seSBleHBvcnRlZCBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuIFllcywgaXQmIzM5O3MgZXhwb3J0ZWQsIHNvIHRoYXQgbG9va3MgY29ycmVjdC4KClJlZ2FyZGluZyB0aGUgb3ZlcmFsbCBzdHJhdGVneSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gbW91bnRpbmcgYW5kIHN1cGVyYmxvY2sgbWFuYWdlbWVudCBkdWUgdG8gdGhlIGBzdXBlcmJsb2NrX3NoYXJlYCBtb3VudCBvcHRpb24uIFRoYXQgb3BlbnMgdXAgcG90ZW50aWFsIGZ1enppbmcgb3Bwb3J0dW5pdGllcyBpbiB0aGUgRVJPRlMgZmlsZXN5c3RlbSBjb2RlLCBlc3BlY2lhbGx5IHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBWRlMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGluY2x1ZGVzIGJvdGggYEVST0ZTX0ZTYCBhbmQgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCB0byBjb3ZlciB0aGVzZSBuZXcgcGF0aHMgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19CQUNLRURfQllfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF90cmVlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWUmIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7ZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZyBmaWxlIHRvIHNoYXJlIGEgc2luZ2xlIHN1cGVyYmxvY2suIEl0IG1vZGlmaWVzIHRoZSBWRlMgYnkgZXhwb3J0aW5nIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGFkZHMgbG9naWMgaW4gRVJPRlMgdG8gcGFyc2UgdGhlIG5ldyBvcHRpb24gYW5kIGhhbmRsZSBzdXBlcmJsb2NrIHNoYXJpbmcuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSBwYXRocyBpbiBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBzdXBlcmJsb2NrIG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUk9GU19GUyYjMzQ7LAogICAgJiMzNDtFUk9GU19GU19CQUNLRURfQllfRklMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF90cmVlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX3BhcnNlX3BhcmFtJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWUmIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7ZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZyBmaWxlIHRvIHNoYXJlIGEgc2luZ2xlIHN1cGVyYmxvY2suIEl0IG1vZGlmaWVzIHRoZSBWRlMgYnkgZXhwb3J0aW5nIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGFkZHMgbG9naWMgaW4gRVJPRlMgdG8gcGFyc2UgdGhlIG5ldyBvcHRpb24gYW5kIGhhbmRsZSBzdXBlcmJsb2NrIHNoYXJpbmcuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSBwYXRocyBpbiBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBzdXBlcmJsb2NrIG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKWAgdG8gY29tcGFyZSBtb3VudCBvcHRpb25zLiBXaGlsZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGNvbnRhaW5zIHBhZGRpbmcgYnl0ZXMgYmV0d2VlbiBgY2FjaGVfc3RyYXRlZ3lgICh1bnNpZ25lZCBjaGFyKSBhbmQgYG1vdW50X29wdGAgKHVuc2lnbmVkIGludCksIHRoZSBlbmNsb3NpbmcgYHN0cnVjdCBlcm9mc19zYl9pbmZvYCBpcyBhbHdheXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSBpbiBgZXJvZnNfaW5pdF9mc19jb250ZXh0YC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyB0aGUgcGFkZGluZyBieXRlcyBpbiBgc2JpLVx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVx1MDAzZW9wdGAgZmllbGRzIGRvIG5vdCBhbHRlciB0aGUgcGFkZGluZyBieXRlcywgbWVhbmluZyB0aGV5IHJlbWFpbiB6ZXJvZWQuIFRoZXJlZm9yZSwgdGhlIGBtZW1jbXBgIG9wZXJhdGlvbiBzYWZlbHkgY29tcGFyZXMgaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUxMTRmZjczZDdlNDIxMjEzNjU1NjNkMDVmMzhjMDk5YTFmNmQxODMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjozMzozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKaW5kZXggZDMwMWQ5YWM5NDZhOS4uMDJjYWYzYjA2MWZlZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKQEAgLTEzOSw2ICYjNDM7MTM5LDkgQEAgaW5vZGVfc2hhcmUgICAgICAgICAgICBFbmFibGUgaW5vZGUgcGFnZSBzaGFyaW5nIGZvciB0aGlzIGZpbGVzeXN0ZW0uICBJbm9kZXMgd2kKICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS4KIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFzIGFuIGFscmVhZHktb3BlbmVkIGZpbGUgZGVzY3JpcHRvci4KJiM0MztzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy4KID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEZpbGUtYmFja2VkIG1vdW50cwpAQCAtMTU2LDYgJiM0MzsxNTksMTAgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0CiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoCiBpbnN0ZWFkLgogCiYjNDM7V2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCwgbXVsdGlwbGUgbW91bnRzIG9mIHRoZSBzYW1lIGJhY2tpbmcKJiM0MztmaWxlIGF0IHRoZSBzYW1lIGZzb2Zmc2V0IHdpdGggY29tcGF0aWJsZSBtb3VudCBvcHRpb25zIGNhbiBzaGFyZSBhIHNpbmdsZQomIzQzO3N1cGVyYmxvY2suICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy4KJiM0MzsKIFN5c2ZzIEVudHJpZXMKID09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9pbnRlcm5hbC5oCkBAIC0xNTYsNiAmIzQzOzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHsKICNkZWZpbmUgRVJPRlNfTU9VTlRfREFYX05FVkVSCQkweDAwMDAwMDgwCiAjZGVmaW5lIEVST0ZTX01PVU5UX0RJUkVDVF9JTwkJMHgwMDAwMDEwMAogI2RlZmluZSBFUk9GU19NT1VOVF9JTk9ERV9TSEFSRQkJMHgwMDAwMDIwMAomIzQzOyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRQkweDAwMDAwNDAwCiAKICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKQkoKG9wdCktJmd0O21vdW50X29wdCAmYW1wOz0gfkVST0ZTX01PVU5UXyMjb3B0aW9uKQogI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKQkoKG9wdCktJmd0O21vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbikKZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jCmluZGV4IGRkYzk3MTllNmQxOGUuLmUxYTFhMjdmYmQxOGQgMTAwNjQ0Ci0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvc3VwZXIuYwpAQCAtMzg2LDcgJiM0MzszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSkKIGVudW0gewogCU9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSwKIAlPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLAotCU9wdF9zb3VyY2UsCiYjNDM7CU9wdF9zb3VyY2UsIE9wdF9zdXBlcmJsb2NrX3NoYXJlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBlcm9mc19wYXJhbV9jYWNoZV9zdHJhdGVneVtdID0gewpAQCAtNDE1LDYgJiM0Mzs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHsKIAlmc3BhcmFtX3U2NCgmIzM0O2Zzb2Zmc2V0JiMzNDssCQkJT3B0X2Zzb2Zmc2V0KSwKIAlmc3BhcmFtX2ZsYWcoJiMzNDtpbm9kZV9zaGFyZSYjMzQ7LAkJT3B0X2lub2RlX3NoYXJlKSwKIAlmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKCYjMzQ7c291cmNlJiMzNDssCU9wdF9zb3VyY2UpLAomIzQzOwlmc3BhcmFtX2ZsYWcoJiMzNDtzdXBlcmJsb2NrX3NoYXJlJiMzNDssCU9wdF9zdXBlcmJsb2NrX3NoYXJlKSwKIAl7fQogfTsKIApAQCAtNTYwLDYgJiM0Mzs1NjEsMTIgQEAgc3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCWVsc2UKIAkJCXNldF9vcHQoJmFtcDtzYmktJmd0O29wdCwgSU5PREVfU0hBUkUpOwogCQlicmVhazsKJiM0MzsJY2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZToKJiM0MzsJCWlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKQomIzQzOwkJCWVycm9yZmMoZmMsICYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWQmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpOwomIzQzOwkJZWxzZQomIzQzOwkJCXNldF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSk7CiYjNDM7CQlicmVhazsKIAljYXNlIE9wdF9zb3VyY2U6CiAJCXJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTsKIAl9CkBAIC02NTIsNiAmIzQzOzY1OSwxNiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCQllcnJvcmZjKGZjLCAmIzM0O0ZTREFYIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb24mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpICZhbXA7JmFtcDsKJiM0MzsJICAgIHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIElOT0RFX1NIQVJFKSkgewomIzQzOwkJZXJyb3JmYyhmYywgJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb24mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlpZiAodGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgc2JpLSZndDtkZXZzLSZndDtleHRyYV9kZXZpY2VzKSB7CiYjNDM7CQllcnJvcmZjKGZjLCAmIzM0O3N1cGVyYmxvY2tfc2hhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRyYSBkZXZpY2VzJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAogCXNiaS0mZ3Q7Ymxrc3piaXRzID0gUEFHRV9TSElGVDsKIAlpZiAoIXNiLSZndDtzX2JkZXYpIHsKQEAgLTc3OSw2ICYjNDM7Nzk2LDM1IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgd2l0aCBhIHNiaSB0aGF0IGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCwKJiM0MzsgKiBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlcyBuZXdfc2JpIGlzIGFsc28gc2hhcmVhYmxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQkgICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJaWYgKHNiLSZndDtzX2lmbGFncyAmYW1wOyBTQl9JX1JFVElSRUQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFzYmktJmd0O2RpZjAuZmlsZSB8fCAhbmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiBmaWxlX2lub2RlKHNiaS0mZ3Q7ZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktJmd0O2RpZjAuZmlsZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc2JpLSZndDtkaWYwLmZzb2ZmID09IG5ld19zYmktJmd0O2RpZjAuZnNvZmYgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIW1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXJvZnNfZmlsZV9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSkKJiM0MzsJCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciwgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiB7CiAJc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLSZndDtzX2ZzX2luZm87CkBAIC03OTQsNyAmIzQzOzg0MCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCQkJZXJyb3JmYyhmYywgJiMzNDtzb3VyY2UgaXMgdW5zdXBwb3J0ZWQmIzM0Oyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpOwomIzQzOwkJcmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpOwogCX0KIAogCXJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsCkBAIC04MTIsNyAmIzQzOzg1OCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCiAJCWlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLSZndDtkaWYwLmZpbGUpLSZndDtpX21vZGUpICZhbXA7JmFtcDsKIAkJICAgIHNiaS0mZ3Q7ZGlmMC5maWxlLSZndDtmX21hcHBpbmctJmd0O2Ffb3BzLSZndDtyZWFkX2ZvbGlvKQotCQkJcmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0MzsJCQlyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC04MjUsNiAmIzQzOzg3MSwxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAogCURCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7CiAKJiM0MzsJLyogU2hhcmVkIHN1cGVyYmxvY2tzIG11c3Qgbm90IGJlIHJlY29uZmlndXJlZC4gICovCiYjNDM7CWlmICh0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiAJaWYgKG5ld19zYmktJmd0O2RvbWFpbl9pZCkKIAkJZXJvZnNfaW5mbyhzYiwgJiMzNDtpZ25vcmluZyByZWNvbmZpZ3VyYXRpb24gZm9yIGRvbWFpbl9pZC4mIzM0Oyk7CiAKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtMTM4OSw3ICYjNDM7MTM4OSwxNyBAQCBzdGF0aWMgaW50IHRlc3Rfc2luZ2xlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLAomIzQzOy8qKgomIzQzOyAqIGdldF90cmVlX3N1cGVyIC0gR2V0IGEgc3VwZXJibG9jaywgb3B0aW9uYWxseSBzaGFyaW5nIGFuIGV4aXN0aW5nIG9uZQomIzQzOyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzCiYjNDM7ICogQHRlc3Q6IENvbXBhcmlzb24gZnVuY3Rpb24gdG8gZmluZCBhIG1hdGNoaW5nIGV4aXN0aW5nIHN1cGVyYmxvY2ssIG9yIE5VTEwKJiM0MzsgKiBAZmlsbF9zdXBlcjogSGVscGVyIHRvIGluaXRpYWxpc2UgYSBuZXcgc3VwZXJibG9jawomIzQzOyAqCiYjNDM7ICogSWYgQHRlc3QgaXMgbm9uLU5VTEwgYW5kIG1hdGNoZXMgYW4gZXhpc3Rpbmcgc3VwZXJibG9jaywgdGhhdCBzdXBlcmJsb2NrIGlzCiYjNDM7ICogcmV1c2VkOyBvdGhlcndpc2UgYSBuZXcgYW5vbnltb3VzIHN1cGVyYmxvY2sgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGlzZWQgd2l0aAomIzQzOyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLgomIzQzOyAqLwomIzQzO2ludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCWludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSwKIAkJaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpCkBAIC0xNDE2LDEyICYjNDM7MTQyNiwxMyBAQCBzdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTsKIAlyZXR1cm4gZXJyOwogfQomIzQzO0VYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpOwogCiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpCiB7Ci0JcmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpOwomIzQzOwlyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpOwogfQogRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7CiAKQEAgLTE0MjksNyAmIzQzOzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKQogewotCXJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpOwogfQogRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zaW5nbGUpOwogCkBAIC0xNDM5LDcgJiM0MzsxNDUwLDcgQEAgaW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJdm9pZCAqa2V5KQogewogCWZjLSZndDtzX2ZzX2luZm8gPSBrZXk7Ci0JcmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpOwomIzQzOwlyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpOwogfQogRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9rZXllZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmgKaW5kZXggMGQ2YzhhNmQ3YmUyMS4uYzkyMGFiYTUxNzdjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmgKQEAgLTE1MCw2ICYjNDM7MTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCQkJICAgICBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7CiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpOwogCiYjNDM7ZXh0ZXJuIGludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiYjNDM7CQkJIGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSwKJiM0MzsJCQkgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpOwogZXh0ZXJuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCQkgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVST0ZTIFN1cGVyYmxvY2sgU2hhcmluZyAtIFBvdGVudGlhbCBQaXRmYWxscyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uLCBgc3VwZXJibG9ja19zaGFyZWAsIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbS4gVGhlIGdvYWwgaXMgY2xlYXI6IHNoYXJlIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBpZGVudGljYWwgb3B0aW9ucy4gU2VlbXMgZWZmaWNpZW50LCByaWdodD8gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgaW4gYGZzL2Vyb2ZzL3N1cGVyLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhhdCYjMzk7cyB3aGVyZSB0aGUgc3VwZXJibG9jayBoYW5kbGluZyBsb2dpYyByZXNpZGVzLiBUaGV5JiMzOTt2ZSBhZGRlZCBjb2RlIHRvIHBhcnNlIHRoZSBgc3VwZXJibG9ja19zaGFyZWAgb3B0aW9uIGFuZCB0cmlnZ2VyIHRoZSBzaGFyaW5nIGJlaGF2aW9yLiBUaGV5JiMzOTt2ZSBhbHNvIGltcGxlbWVudGVkIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiB0d28gbW91bnRzIGFyZSBjb21wYXRpYmxlIGZvciBzdXBlcmJsb2NrIHNoYXJpbmcuCgpBaCwgYnV0IHdhaXQgYSBzZWNvbmQuIFRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBjb21wYXRpYmlsaXR5IGNoZWNrIHJlbGllcyBvbiBgbWVtY21wKCZhbXA7c2JpLSZndDtvcHQsICZhbXA7bmV3X3NiaS0mZ3Q7b3B0LCBzaXplb2Yoc2JpLSZndDtvcHQpKWAuIE5vdywgdGhhdCAqZ2VuZXJhbGx5KiB3b3JrcyBmb3IgY29tcGFyaW5nIHN0cnVjdHVyZXMsIGJ1dC4uLiBpcyBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgICpmdWxseSogaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgY29tcGFyaXNvbj8gV2Uga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtZW1vcnkgY2FuIGJlIHVuaW5pdGlhbGl6ZWQsIG9yIGNvbnRhaW4gcGFkZGluZy4gSWYgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCBoYXMgcGFkZGluZywgb3IgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCB0aGlzIGBtZW1jbXBgIHdpbGwgYmUgYSByZWNpcGUgZm9yIHBvdGVudGlhbGx5IGluY29ycmVjdCBvciB1bmV4cGVjdGVkIHJlc3VsdHMuIFRoZSBjb21wYXJpc29uIG1pZ2h0IG1pc3Rha2VubHkgbWFyayBpbmNvbXBhdGlibGUgbW91bnRzIGFzIGNvbXBhdGlibGUsIG9yIHdvcnNlLCBtYXJrIGNvbXBhdGlibGUgbW91bnRzIGFzIGluY29tcGF0aWJsZSBpZiB0aGF0IHBhZGRpbmcgaXMgZGlmZmVyZW50LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCByaWdodCBub3cgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgd29uJiMzOTt0IGNhdXNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBlcm9mc19tb3VudF9vcHRzIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9pbnRlcm5hbC5oPTU0PWVudW0ge1xuLS1cbmZzL2Vyb2ZzL2ludGVybmFsLmgtNTktXG5mcy9lcm9mcy9pbnRlcm5hbC5oOjYwOnN0cnVjdCBlcm9mc19tb3VudF9vcHRzIHtcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNjEtXHQvKiBjdXJyZW50IHN0cmF0ZWd5IG9mIGhvdyB0byB1c2UgbWFuYWdlZCBjYWNoZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJlIG9mIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIEZvcmdldCB0aGUgc3VwZXJmaWNpYWw7IEkgbmVlZCB0aGUgZnVsbCwgZ3JhbnVsYXIgZGVmaW5pdGlvbi4gV2hhdCBhcmUgYWxsIHRoZSBpbmRpdmlkdWFsIG1lbWJlcnM/IFdoYXQgZGF0YSB0eXBlcyBhcmUgdGhleT8gQXJlIHRoZXJlIGFueSBiaXRmaWVsZHMsIGFuZCBpZiBzbywgaG93IGFyZSB0aGV5IGRlZmluZWQ/IEFueSB1bmlvbnM/IEZsYWdzPyBEZWZhdWx0cz8gSSB3YW50IHRvIHNlZSB0aGUgd2hvbGUgZW5jaGlsYWRhLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGtlcm5lbCBleHBlY3RzIHRoaXMgZGF0YSB0byBiZSBvcmdhbml6ZWQuIEl04oCZcyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZXJvZnMgZmlsZXN5c3RlbSBpcyBjb25maWd1cmVkIGFuZCBvcGVyYXRlcyBhdCBtb3VudCB0aW1lLCBhbmQgSSYjMzk7bSBub3QgZ29pbmcgdG8gcHJvY2VlZCB3aXRob3V0IGEgc29saWQgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhpcyBjcml0aWNhbCBzdHJ1Y3QuIFRoaXMgaW5jbHVkZXMgdGhpbmdzIGxpa2U6IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mIGVhY2ggb3B0aW9uLCBob3cgY2FuIHRoZSBvcHRpb25zIGFmZmVjdCBwZXJmb3JtYW5jZSwgb3Igd2hhdCB0cmFkZS1vZmZzIHdlcmUgbWFkZS4gT25seSBieSB0cnVseSBzZWVpbmcgdGhlIGludGVybmFscyBjYW4gSSBtYWtlIGEgc291bmQganVkZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL2ludGVybmFsLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU5Olx0XG4gIDYwOlx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xuICA2MTpcdFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cbiAgNjI6XHRcdHVuc2lnbmVkIGNoYXIgY2FjaGVfc3RyYXRlZ3k7XG4gIDYzOlx0XHR1bnNpZ25lZCBpbnQgbW91bnRfb3B0O1xuICA2NDpcdH07XG4gIDY1Olx0XG4gIDY2Olx0c3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0IHtcbiAgNjc6XHRcdHN0cnVjdCBpZHIgdHJlZTtcbiAgNjg6XHRcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XG4gIDY5Olx0XG4gIDcwOlx0XHR1bnNpZ25lZCBpbnQgZXh0cmFfZGV2aWNlcztcbiAgNzE6XHRcdGJvb2wgZmxhdGRldjtcbiAgNzI6XHR9O1xuICA3MzpcdFxuICA3NDpcdC8qIGFsbCBmaWxlc3lzdGVtLXdpZGUgbHo0IGNvbmZpZ3VyYXRpb25zICovXG4gIDc1Olx0c3RydWN0IGVyb2ZzX3NiX2x6NF9pbmZvIHtcbiAgNzY6XHRcdC8qICMgb2YgcGFnZXMgbmVlZGVkIGZvciBFUk9GUyBsejQgcm9sbGluZyBkZWNvbXByZXNzaW9uICovXG4gIDc3Olx0XHR1MTYgbWF4X2Rpc3RhbmNlX3BhZ2VzO1xuICA3ODpcdFx0LyogbWF4aW11bSBwb3NzaWJsZSBibG9ja3MgZm9yIHBjbHVzdGVycyBpbiB0aGUgZmlsZXN5c3RlbSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQ1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgQ29uY2VybnMgaW4gRVJPRlMgTW91bnQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIEludGVyZXN0aW5nLCBhbiBgdW5zaWduZWQgY2hhcmAgZm9sbG93ZWQgYnkgYW4gYHVuc2lnbmVkIGludGAuIEltbWVkaWF0ZWx5LCBJIHNwb3QgaXQ6IHRocmVlIGJ5dGVzIG9mIHBhZGRpbmchIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSWYgYHNiaS0mZ3Q7b3B0YCBpc24mIzM5O3QgZW50aXJlbHkgemVyb2VkIG91dCwgdGhlbiB0aGUgYG1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSlgIGNhbGwgaXMgZ29pbmcgdG8gcmVhZCB0aG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMuIEJpbmdvLCB0aGF0JiMzOTtzIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkISBLTVNBTiwgb2YgY291cnNlLCB3b3VsZCBmbGFnIHRoYXQgaW1tZWRpYXRlbHkuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGlzIGBzYmktJmd0O29wdGAgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGl0cyBhbGxvY2F0aW9uLiBgc2JpYCBhcHBlYXJzIHRvIGJlIGFsbG9jYXRlZCBpbiBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBgZXJvZnNfZmNfZmlsbF9zdXBlcmAsIG9yIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZXJvZnNfaW5pdF9mc19jb250ZXh0YCwgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2luaXRfZnNfY29udGV4dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jPTk0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBlcm9mc19jb250ZXh0X29wcyA9IHtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTk0OC1cbmZzL2Vyb2ZzL3N1cGVyLmM6OTQ5OnN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2Vyb2ZzL3N1cGVyLmMtOTUwLXtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTEwMDk9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGVyb2ZzX2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0xMDExLVx0Lm5hbWUgICAgICAgICAgID0gXCYjMzQ7ZXJvZnNcJiMzNDssXG5mcy9lcm9mcy9zdXBlci5jOjEwMTI6XHQuaW5pdF9mc19jb250ZXh0ID0gZXJvZnNfaW5pdF9mc19jb250ZXh0LFxuZnMvZXJvZnMvc3VwZXIuYy0xMDEzLVx0LmtpbGxfc2IgICAgICAgID0gZXJvZnNfa2lsbF9zYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBJJiMzOTttIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGZpbGUgc3lzdGVtIGNvbnRleHQgZm9yIEVST0ZTIChFbmhhbmNlZCBSZWFkLU9ubHkgRmlsZSBTeXN0ZW0pLiBBcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBJIGtub3cgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIG1vdW50aW5nIGFuIEVST0ZTIGZpbGVzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBpbml0aWFsIGVudmlyb25tZW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXkgYXNwZWN0cyBsaWtlOiBob3cgaXQgaGFuZGxlcyBhcmd1bWVudHMgcGFzc2VkIGR1cmluZyBtb3VudCBjYWxscywgaG93IGl0IGFsbG9jYXRlcyBhbmQgcG9wdWxhdGVzIHRoZSBgZnNfY29udGV4dGAgc3RydWN0dXJlLCBhbmQgaWYgaXQgaW50ZXJhY3RzIHdpdGggYW55IGxvd2VyLWxldmVsIEVST0ZTLXNwZWNpZmljIHN0cnVjdHVyZXMgb3IgZGF0YS4gSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN1cGVyYmxvY2ssIGlub2RlcyBvciBvdGhlciBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IGl0IGhhbmRsZXMgbW91bnQgZmxhZ3MgYW5kIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTQ5Olx0c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIDk1MDpcdHtcbiA5NTE6XHRcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmk7XG4gOTUyOlx0XG4gOTUzOlx0XHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcbiA5NTQ6XHRcdGlmICghc2JpKVxuIDk1NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NTY6XHRcbiA5NTc6XHRcdHNiaS1cdTAwM2VkZXZzID0ga3phbGxvY19vYmooc3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0KTtcbiA5NTg6XHRcdGlmICghc2JpLVx1MDAzZWRldnMpIHtcbiA5NTk6XHRcdFx0a2ZyZWUoc2JpKTtcbiA5NjA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTYxOlx0XHR9XG4gOTYyOlx0XHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBzYmk7XG4gOTYzOlx0XG4gOTY0Olx0XHRpZHJfaW5pdChcdTAwMjZzYmktXHUwMDNlZGV2cy1cdTAwM2V0cmVlKTtcbiA5NjU6XHRcdGluaXRfcndzZW0oXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNlcndzZW0pO1xuIDk2NjpcdFx0ZXJvZnNfZGVmYXVsdF9vcHRpb25zKHNiaSk7XG4gOTY3Olx0XHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZlcm9mc19jb250ZXh0X29wcztcbiA5Njg6XHRcdHJldHVybiAwO1xuIDk2OTpcdH1cbiA5NzA6XHRcbiA5NzE6XHRzdGF0aWMgdm9pZCBlcm9mc19kcm9wX2ludGVybmFsX2lub2RlcyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIDk3MjpcdHtcbiA5NzM6XHRcdGlwdXQoc2JpLVx1MDAzZXBhY2tlZF9pbm9kZSk7XG4gOTc0Olx0XHRzYmktXHUwMDNlcGFja2VkX2lub2RlID0gTlVMTDtcbiA5NzU6XHRcdGlwdXQoc2JpLVx1MDAzZW1ldGFib3hfaW5vZGUpO1xuIDk3NjpcdFx0c2JpLVx1MDAzZW1ldGFib3hfaW5vZGUgPSBOVUxMO1xuIDk3NzpcdCNpZmRlZiBDT05GSUdfRVJPRlNfRlNfWklQXG4gOTc4Olx0XHRpcHV0KHNiaS1cdTAwM2VtYW5hZ2VkX2NhY2hlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUxOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoZXkmIzM5O3JlIHVzaW5nIGBzYmkgPSBremFsbG9jX29iaigqc2JpKTtgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBhIGZsYWcuICBga3phbGxvY19vYmpgLi4uIHRoYXQmIzM5O3MgcHJvYmFibHkgYSBtYWNybyBmb3IgYGt6YWxsb2NgIHdpdGggdGhlIHN0cnVjdHVyZSYjMzk7cyBzaXplLCBsaWtlbHkgc29tZXRoaW5nIGxpa2UgYGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKWAuICBJZiBpdCYjMzk7cyBga3phbGxvY2AsIHRoZW4gdGhlIGVudGlyZSBgc2JpYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgemVyb2VkIG91dC4gVGhhdCBpbmNsdWRlcyAqYWxsKiBvZiB0aGUgbWVtb3J5LCBzbyBldmVuIHRoZSBwYWRkaW5nIHdpdGhpbiBgc2JpLSZndDtvcHRgIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBsaWtlIHRoYXQsIGl0IHByb3ZpZGVzIGEgY2xlYW4gc3RhdGUuIEJ1dCwgSSBkb24mIzM5O3QgdHJ1c3QgYXNzdW1wdGlvbnMsIGV2ZW4gbXkgb3duLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIGBremFsbG9jX29iamAgZGVmaW5pdGlvbiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIE5vIHBvaW50IGluIG1ha2luZyBhIHJvb2tpZSBtaXN0YWtlLiBBIHF1aWNrIGNoZWNrIG9mIHRoYXQgbWFjcm8gd2lsbCBjb25maXJtIHRoaXMgYW5kIGVsaW1pbmF0ZSBhbnkgbGluZ2VyaW5nIGRvdWJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGt6YWxsb2Nfb2JqJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNzM9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTQtLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU1OiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTE1Ni1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTc6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTgtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIENPVU5UKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE2OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBremFsbG9jX29iamAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBremFsbG9jX29iamAsIGFuZCBJIHNlZSBpdCB1c2VzIGBremFsbG9jYC4gVGhhdCYjMzk7cyBnb29kIOKAkyBpdCBtZWFucyB0aGUgbWVtb3J5IGlzIHplcm9lZCwgd2hpY2ggaXMgYSBrZXkgc3RhcnRpbmcgcG9pbnQgZm9yIGF2b2lkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiB0aGF0IGluaXRpYWwgYWxsb2NhdGlvbiwgYmVjYXVzZSBpbml0aWFsaXphdGlvbiBvZnRlbiBpc24mIzM5O3QgZXZlcnl0aGluZy4KCkxldCYjMzk7cyBzZWXigKYgc2luY2UgYHNiaWAgaXMgemVyby1pbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCB0aGUgcGFkZGluZyAqd2l0aGluKiBgc2JpLSZndDtvcHRgIHNob3VsZCBhbHNvIHN0YXJ0IGFzIHplcm8uIE5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhlcmUgYW55IGNvZGUgcGF0aCB0aGF0ICpsYXRlciogd3JpdGVzIHRvIGZpZWxkcyB3aXRoaW4gYHNiaS0mZ3Q7b3B0YCBpbiBhIHdheSB0aGF0ICp3b3VsZG4mIzM5O3QqIGZ1bGx5IGluaXRpYWxpemUgdGhlIHBhZGRpbmc/IGBzYmktJmd0O29wdGAgaXMgYSBzdHJ1Y3QgbmVzdGxlZCBpbnNpZGUgdGhlIGxhcmdlciBgc2JpYCBzdHJ1Y3QuCgpBbHJpZ2h0LCBpZiB3ZSBhcmUgc2V0dGluZyBmaWVsZHMgZGlyZWN0bHksIGxpa2UgYHNiaS0mZ3Q7b3B0LmNhY2hlX3N0cmF0ZWd5ID0gLi4uYCBvciBgc2JpLSZndDtvcHQubW91bnRfb3B0ID0gLi4uYCwgdGhlbiB0aGF0IHdvbiYjMzk7dCB0b3VjaCB0aGUgcGFkZGluZywgYW5kIGl0JiMzOTtsbCByZW1haW4gemVybywgYXMgZXhwZWN0ZWQuIEJ1dCB3aGF0IGFib3V0IGFzc2lnbm1lbnRzPyBDb3VsZCBgc2JpLSZndDtvcHRgIGJlIGFzc2lnbmVkIGZyb20gYW5vdGhlciBzdHJ1Y3Q/IENvdWxkIHdlIHNlZSBzb21ldGhpbmcgbGlrZSBgc2JpLSZndDtvcHQgPSBuZXdfc2JpLSZndDtvcHQ7YD8gU2Nhbm5pbmcgdGhlIGNvZGUsIEkgZG9uJiMzOTt0IHNlZSB0aGF0IGFzc2lnbm1lbnQgaGFwcGVuaW5nIGFueXdoZXJlLiBUaGlzIGlzIGdvb2QuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgaW1wbGljaXQgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIEFsd2F5cyBiZXR0ZXIgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2RlZmF1bHRfb3B0aW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jPTI1MD1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMzczLVxuZnMvZXJvZnMvc3VwZXIuYzozNzQ6c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG5mcy9lcm9mcy9zdXBlci5jLTM3NS17XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz05NDk9c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtOTY1LVx0aW5pdF9yd3NlbShcdTAwMjZzYmktXHUwMDNlZGV2cy1cdTAwM2Vyd3NlbSk7XG5mcy9lcm9mcy9zdXBlci5jOjk2NjpcdGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzYmkpO1xuZnMvZXJvZnMvc3VwZXIuYy05NjctXHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZlcm9mc19jb250ZXh0X29wcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkyMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCBjb25jZXB0cywgYXMgSSB1bmRlcnN0YW5kIHRoZW06CgoqKkNvbnNpZGVyaW5nIGBlcm9mc19kZWZhdWx0X29wdGlvbnNgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AuIExldCBtZSBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBUaGlzIGlzLCBhdCBpdHMgY29yZSwgYWJvdXQgc2V0dGluZyB1cCB0aGUgc3RhbmRhcmQgcGFyYW1ldGVycyBmb3IgYW4gRVJPRlMgZmlsZXN5c3RlbSB3aGVuIGl0JiMzOTtzIGJlaW5nIGNyZWF0ZWQsIHJpZ2h0PyBJdOKAmXMgbm90IGFib3V0IHRoZSBydW50aW1lIGJlaGF2aW9yLCBidXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiB0ZW1wbGF0ZS4KCkkgaW1hZ2luZSB0aGlzIGluY2x1ZGVzIHRoaW5ncyBsaWtlIGNvbXByZXNzaW9uIHNldHRpbmdzLCBibG9jayBzaXplIHByZWZlcmVuY2VzLCBhbmQgbWF5YmUgc29tZSBoaW50cyBvbiBtZXRhZGF0YSBoYW5kbGluZywgYWxsIHR1bmVkIGZvciBhIGJhbGFuY2Ugb2Ygc3BhY2UgZWZmaWNpZW5jeSBhbmQgYWNjZXNzIHNwZWVkIGZvciBhIHJlYWQtb25seSBmaWxlc3lzdGVtLiBXZSBtaWdodCBhbHNvIGhhdmUgdG8gdGhpbmsgYWJvdXQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYnkgZGVmYXVsdCBhcyB3ZWxsLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3BlY3RzIHRoaXMgaW5jbHVkZXMgYXMgaXRzIGRlZmF1bHQgc2V0IG9mIGJlaGF2aW9ycywgYW5kIEkgbmVlZCB0byBjb25zaWRlciB3aHkgaXQgbWlnaHQgYmUgY29uZmlndXJhYmxlLiBQZXJoYXBzIGRpZmZlcmVudCB1c2UgY2FzZXMgbWlnaHQgYmVuZWZpdCBmcm9tIHR3ZWFrcy4gSSYjMzk7bSBpbWFnaW5pbmcgc29tZSBjYXNlcyB3aGVyZSBwZXJmb3JtYW5jZSBpcyB0aGUgYWJzb2x1dGUgcHJpb3JpdHksIGV2ZW4gYXQgdGhlIGV4cGVuc2Ugb2YgYSBiaXQgb2Ygc3BhY2UsIGFuZCBvdGhlcnMgd2hlcmUgbWF4aW11bSBjb21wcmVzc2lvbiBpcyBwYXJhbW91bnQuIFRoZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCBjb25zdHJ1Y3QgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0IGRlY2lzaW9uLgoKU28sIGluIGVzc2VuY2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlICpkZWZhdWx0cyogLSB0aGUgYmFzZWxpbmUgcGFyYW1ldGVycyB0aGF0IGFyZSBhc3N1bWVkIHdoZW4gYSB1c2VyIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgcHJvdmlkZSBvcHRpb25zIHdoZW4gYW4gRVJPRlMgZmlsZXN5c3RlbSBpcyBjcmVhdGVkLiBUaGUgZ29hbCBpcyBsaWtlbHkgdG8gc3RyaWtlIGEgZ29vZCBiYWxhbmNlLCBnaXZlbiB0aGF0IHRoZXNlIGFyZSB0eXBpY2FsbHkgaW1tdXRhYmxlIGFuZCBkZXBsb3llZCB3aWRlbHkuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hhdCB0aG9zZSBzcGVjaWZpYyBkZWZhdWx0cyBhcmUsIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVtLCBmb3IgYSB0cnVseSBudWFuY2VkIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzc0Olx0c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG4gMzc1Olx0e1xuIDM3NjpcdCNpZmRlZiBDT05GSUdfRVJPRlNfRlNfWklQXG4gMzc3Olx0XHRzYmktXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gRVJPRlNfWklQX0NBQ0hFX1JFQURBUk9VTkQ7XG4gMzc4Olx0XHRzYmktXHUwMDNlc3luY19kZWNvbXByZXNzID0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE87XG4gMzc5Olx0I2VuZGlmXG4gMzgwOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxuIDM4MTpcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xuIDM4MjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXG4gMzgzOlx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgUE9TSVhfQUNMKTtcbiAzODQ6XHR9XG4gMzg1Olx0XG4gMzg2Olx0ZW51bSB7XG4gMzg3Olx0XHRPcHRfdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X2NhY2hlX3N0cmF0ZWd5LCBPcHRfZGF4LCBPcHRfZGF4X2VudW0sXG4gMzg4Olx0XHRPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE4CgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgbW9zdGx5IGFib3V0IHNldHRpbmcgZmllbGRzLiBTaW5jZSBgc2JpYCBpcyBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jYCwgSSBrbm93IHRoZSBwYWRkaW5nIGlzIHplcm9lZCBvdXQgYnkgZGVmYXVsdC4gVGhhdCBtZWFucyB0aGUgYG1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSlgIGNhbGwgd2lsbCBiZSBjb21wYXJpbmcgemVyb2VkIHBhZGRpbmcgYWdhaW5zdCB6ZXJvZWQgcGFkZGluZywgd2hpY2ggaXMgYSBzYWZlIG9wZXJhdGlvbi4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IG90aGVyIHNwb3RzIHdoZXJlIGBzYmktJmd0O29wdGAgaXMgYmVpbmcgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCAqY291bGQqIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFoLCB5ZXMsIGBzZXRfb3B0YCBhbmQgYGNsZWFyX29wdGAgYWZmZWN0IGBtb3VudF9vcHRgLiBBbmQgdGhlcmUmIzM5O3MgYWxzbyBgc2JpLSZndDtvcHQuY2FjaGVfc3RyYXRlZ3kgPSAuLi5gIHdoaWNoLCBJIHNlZSBub3csIGlzIG1vZGlmeWluZyBgY2FjaGVfc3RyYXRlZ3lgLiBIb3dldmVyLCBub25lIG9mIHRoZXNlIGZ1bmN0aW9ucyB0b3VjaCB0aGUgcGFkZGluZy4gU28sIHRoZSBwYWRkaW5nIHJlbWFpbnMgcmVsaWFibHkgemVyb2VkLiBUaGVyZWZvcmUsIHRoYXQgYG1lbWNtcGAgc2hvdWxkbiYjMzk7dCBiZSByZWFkaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4KCldhaXQsIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0YWtlIGEgd2lkZXIgbG9vay4gSXMgdGhlcmUgYW55ICpvdGhlciogcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGx1cmtpbmcgaW4gdGhpcyBwYXRjaD8gTGV0JiMzOTtzIHNlZS4uLiBBaCwgdGhlIGFkZGl0aW9uIG9mIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYC4KYGBgYwpzdGF0aWMgaW50IGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKCQkJCSAgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKQp7CglzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Ioc2IpOwoJc3RydWN0IGVyb2ZzX3NiX2luZm8gKm5ld19zYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwoKCWlmIChzYi0mZ3Q7c19pZmxhZ3MgJmFtcDsgU0JfSV9SRVRJUkVEKQoJCXJldHVybiAwOwoJaWYgKCFzYmktJmd0O2RpZjAuZmlsZSB8fCAhbmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKQoJCXJldHVybiAwOwoJcmV0dXJuIGZpbGVfaW5vZGUoc2JpLSZndDtkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKSAmYW1wOyZhbXA7CgkgICAgICAgc2JpLSZndDtkaWYwLmZzb2ZmID09IG5ld19zYmktJmd0O2RpZjAuZnNvZmYgJmFtcDsmYW1wOwoJICAgICAgICFtZW1jbXAoJmFtcDtzYmktJmd0O29wdCwgJmFtcDtuZXdfc2JpLSZndDtvcHQsIHNpemVvZihzYmktJmd0O29wdCkpOwp9CmBgYAoKT2theSwgaXQgbG9va3MgbGlrZSBgc2JpLSZndDtkaWYwYCBpcyBpbnZvbHZlZCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgc3RydWN0dXJlIGlzLiBJdCYjMzk7cyBsaWtlbHkgYSBgc3RydWN0IGVyb2ZzX2ZzY2FjaGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGRpZjBgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpZjAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3MSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sPTUzPWFsbE9mOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC05Ny0gICAgICAgICAgICAtIGNvbnN0OiBlc2FpMF90eF9oZl9jbGtcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbDo5ODogICAgICAgICAgICAtIGNvbnN0OiBzcGRpZjBfcnhcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC05OS0gICAgICAgICAgICAtIGNvbnN0OiBzYWkwX3J4X2JjbGtcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMTYwLSAgICAgICAgICAgIC0gY29uc3Q6IGVzYWkxX3R4X2hmX2Nsa1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjE2MTogICAgICAgICAgICAtIGNvbnN0OiBzcGRpZjBfcnhcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0xNjItICAgICAgICAgICAgLSBjb25zdDogc3BkaWYxX3J4XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTIwOC0gICAgICAgICAgICAtIGNvbnN0OiBleHRfYXVkX21jbGsxXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWw6MjA5OiAgICAgICAgICAgIC0gY29uc3Q6IHNwZGlmMF9yeFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTIxMC0gICAgICAgICAgICAtIGNvbnN0OiBzYWkwX3J4X2JjbGtcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWw9MjE5PWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0yNTUtICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZjbGtfZXNhaTBfdHhfaGZfY2xrXHUwMDNlLFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjI1NjogICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmNsa19zcGRpZjBfcnhcdTAwM2UsXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMjU3LSAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2Y2xrX3NhaTBfcnhfYmNsa1x1MDAzZSxcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMjczLSAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtlc2FpMF90eF9oZl9jbGtcJiMzNDssXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWw6Mjc0OiAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtzcGRpZjBfcnhcJiMzNDssXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMjc1LSAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDssXG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHM9MjU0PVx0XHRzb3VuZCB7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0cy0yNTUtXHRcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3NwZWFyLHNwZWFyLWV2YlwmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3NwZWFyMTM0MC1ldmIuZHRzOjI1NjpcdFx0XHRhdWRpby1jb250cm9sbGVycyA9IFx1MDAzY1x1MDAyNnNwZGlmMCBcdTAwMjZzcGRpZjEgXHUwMDI2aTJzMCBcdTAwMjZpMnMxXHUwMDNlO1xuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHMtMjU3LVx0XHRcdGF1ZGlvLWNvZGVjcyA9IFx1MDAzY1x1MDAyNmluY29kZWMgXHUwMDI2b3V0Y29kZWMgXHUwMDI2c3RhNTI5IFx1MDAyNnN0YTUyOVx1MDAzZTtcbi0tXG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0cy0yNjQtXG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0czoyNjU6XHRcdHNwZGlmMDogc3BkaWYtaW5AZDAxMDAwMDAge1xuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHMtMjY2LVx0XHRcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtZXZhbC5kdHNpPTEyNz1cdTAwMjZzYXRhIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1ldmFsLmR0c2ktMTMxLS8qIEFwYWxpcyBTUERJRjEgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWV2YWwuZHRzaToxMzI6XHUwMDI2c3BkaWYwIHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWV2YWwuZHRzaS0xMzMtXHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWl4b3JhLXYxLjEuZHRzaT0yMTY9XHUwMDI2c2F0YSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMS5kdHNpLTIyMC0vKiBBcGFsaXMgU1BESUYxICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4xLmR0c2k6MjIxOlx1MDAyNnNwZGlmMCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4xLmR0c2ktMjIyLVx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4yLmR0c2k9MjY1PVx1MDAyNnNhdGEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWl4b3JhLXYxLjIuZHRzaS0yNjktLyogQXBhbGlzIFNQRElGMSAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMi5kdHNpOjI3MDpcdTAwMjZzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMi5kdHNpLTI3MS1cdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpPTIyNT1cdHNvdW5kLXNwZGlmIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMjI3LVx0XHRtb2RlbCA9IFwmIzM0O2lteC1zcGRpZlwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaToyMjg6XHRcdHNwZGlmLWNvbnRyb2xsZXIgPSBcdTAwM2NcdTAwMjZzcGRpZjBcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMjI5LVx0XHRzcGRpZi1pbjtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k9ODQ3PVx1MDAyNnNhaTUge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaS04NjItLyogQXBhbGlzIFNQRElGMSAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpOjg2MzpcdTAwMjZzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpLTg2NC1cdGFzc2lnbmVkLWNsb2NrcyA9IFx1MDAzY1x1MDAyNmNsayBJTVhfU0NfUl9BVURJT19QTExfMCBJTVhfU0NfUE1fQ0xLX1BMTFx1MDAzZSxcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktODY4LVx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k6ODY5Olx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2cGluY3RybF9zcGRpZjBcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktODcwLVx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k9MTQxNz1cdHBpbmN0cmxfc2ltMF9ncGlvczogc2ltMGdwaW9zZ3JwIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMTQyOC1cdC8qIEFwYWxpcyBTUERJRiAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpOjE0Mjk6XHRwaW5jdHJsX3NwZGlmMDogc3BkaWYwZ3JwIHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaS0xNDMwLVx0XHRmc2wscGlucyA9IFx1MDAzY0lNWDhRTV9TUERJRjBfVFhfQVVEX1NQRElGMF9UWFx0XHRcdDB4YzYwMDAwNDBcdTAwM2UsXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpPTU0PWNsa19lc2FpMF90eF9oZl9jbGs6IGNsb2NrLWVzYWkwLXR4LWhmIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjAtXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6NjE6Y2xrX3NwZGlmMF9yeDogY2xvY2stc3BkaWYwLXJ4IHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS02Mi1cdGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1jbG9ja1wmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjQtXHRjbG9jay1mcmVxdWVuY3kgPSBcdTAwM2MwXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjY1Olx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7c3BkaWYwX3J4XCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY2LX07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpPTE2Nz1cdGVzYWkwOiBlc2FpQDU5MDEwMDAwIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMTgxLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjE4MjpcdHNwZGlmMDogc3BkaWZANTkwMjAwMDAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTE4My1cdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2ZzbCxpbXg4cW0tc3BkaWZcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTE4Ni1cdFx0XHQgICAgIFx1MDAzY0dJQ19TUEkgNDU4IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2U7IC8qIHR4ICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6MTg3Olx0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZzcGRpZjBfbHBjZyBJTVhfTFBDR19DTEtfNFx1MDAzZSxcdC8qIGNvcmUgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS0xODgtXHRcdFx0IFx1MDAzY1x1MDAyNmNsa19kdW1teVx1MDAzZSxcdFx0XHQvKiByeHR4MCAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjE4OTpcdFx0XHQgXHUwMDNjXHUwMDI2c3BkaWYwX2xwY2cgSU1YX0xQQ0dfQ0xLXzBcdTAwM2UsXHQvKiByeHR4MSAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTE5MC1cdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX2R1bW15XHUwMDNlLFx0XHRcdC8qIHJ4dHgyICovXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpPTI3MD1cdGVkbWEwOiBkbWEtY29udHJvbGxlckA1OTFmMDAwMCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTI4My1cdFx0XHQgICAgIFx1MDAzY0dJQ19TUEkgNDEwIElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsIC8qIDcgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaToyODQ6XHRcdFx0ICAgICBcdTAwM2NHSUNfU1BJIDQ1NyBJUlFfVFlQRV9MRVZFTF9ISUdIXHUwMDNlLCAvKiA4IHNwZGlmMCAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTI4NS1cdFx0XHQgICAgIFx1MDAzY0dJQ19TUEkgNDU5IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsIC8qIDkgKi9cbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9MzM3PVx0ZXNhaTBfbHBjZzogY2xvY2stY29udHJvbGxlckA1OTQxMDAwMCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTM0OC1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaTozNDk6XHRzcGRpZjBfbHBjZzogY2xvY2stY29udHJvbGxlckA1OTQyMDAwMCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzUwLVx0XHRjb21wYXRpYmxlID0gXCYjMzQ7ZnNsLGlteDhxeHAtbHBjZ1wmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzU1LVx0XHRjbG9jay1pbmRpY2VzID0gXHUwMDNjSU1YX0xQQ0dfQ0xLXzBcdTAwM2UsIFx1MDAzY0lNWF9MUENHX0NMS180XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjM1NjpcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7c3BkaWYwX2xwY2dfdHhfY2xrXCYjMzQ7LFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjM1NzpcdFx0XHRcdCAgICAgXCYjMzQ7c3BkaWYwX2xwY2dfZ2Nsa3dcJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzU4LVx0XHRwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cGQgSU1YX1NDX1JfU1BESUZfMFx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9NjM3PVx0YWNtOiBhY21ANTllMDAwMDAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS02NjctXHRcdFx0IFx1MDAzY1x1MDAyNmNsa19lc2FpMF90eF9oZl9jbGtcdTAwM2UsXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6NjY4Olx0XHRcdCBcdTAwM2NcdTAwMjZjbGtfc3BkaWYwX3J4XHUwMDNlLFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY2OS1cdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX3NhaTBfcnhfYmNsa1x1MDAzZSxcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjg1LVx0XHRcdCAgICAgIFwmIzM0O2VzYWkwX3R4X2hmX2Nsa1wmIzM0OyxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaTo2ODY6XHRcdFx0ICAgICAgXCYjMzQ7c3BkaWYwX3J4XCYjMzQ7LFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY4Ny1cdFx0XHQgICAgICBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDssXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k9MjA9XHUwMDI2YWNtIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4ZHhsLXNzLWFkbWEuZHRzaS00MC1cdFx0IFx1MDAzY1x1MDAyNmNsa19leHRfYXVkX21jbGsxXHUwMDNlLFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k6NDE6XHRcdCBcdTAwM2NcdTAwMjZjbGtfc3BkaWYwX3J4XHUwMDNlLFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktNDItXHRcdCBcdTAwM2NcdTAwMjZjbGtfc2FpMF9yeF9iY2xrXHUwMDNlLFxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTUzLVx0XHQgICAgICBcJiMzNDtleHRfYXVkX21jbGsxXCYjMzQ7LFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k6NTQ6XHRcdCAgICAgIFwmIzM0O3NwZGlmMF9yeFwmIzM0OyxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTU1LVx0XHQgICAgICBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDssXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k9NzU9XHUwMDI2ZWRtYTAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTg3LVx0XHRcdTAwM2NHSUNfU1BJIDAgICBJUlFfVFlQRV9MRVZFTF9ISUdIXHUwMDNlLFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k6ODg6XHRcdFx1MDAzY0dJQ19TUEkgMzI3IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsIC8qIHNwZGlmMCAqL1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktODktXHRcdFx1MDAzY0dJQ19TUEkgMzI5IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k9MjUzPVx1MDAyNnNhaTMge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTI1Ni1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpOjI1NzpcdTAwMjZzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktMjU4LVx0aW50ZXJydXB0cyA9IFx1MDAzY0dJQ19TUEkgMzI2IElSUV9UWVBFX0xFVkVMX0hJR0hcdTAwM2UsIC8qIHJ4ICovXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k9MjU0PVx0YWNtOiBhY21ANTllMDAwMDAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTI5NC1cdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX2VzYWkxX3R4X2hmX2Nsa1x1MDAzZSxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjI5NTpcdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX3NwZGlmMF9yeFx1MDAzZSxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjI5NjpcdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX3NwZGlmMF9yeFx1MDAzZSxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTI5Ny1cdFx0XHQgXHUwMDNjXHUwMDI2Y2xrX3NhaTBfcnhfYmNsa1x1MDAzZSxcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS0zMjEtXHRcdFx0ICAgICAgXCYjMzQ7ZXNhaTFfdHhfaGZfY2xrXCYjMzQ7LFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6MzIyOlx0XHRcdCAgICAgIFwmIzM0O3NwZGlmMF9yeFwmIzM0OyxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTMyMy1cdFx0XHQgICAgICBcJiMzNDtzcGRpZjFfcnhcJiMzNDssXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k9MzQ1PVx1MDAyNmVkbWEwIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS0zNTYtXHRcdCAgICAgXHUwMDNjR0lDX1NQSSA0MTAgSVJRX1RZUEVfTEVWRUxfSElHSFx1MDAzZSxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjM1NzpcdFx0ICAgICBcdTAwM2NHSUNfU1BJIDQ1NyBJUlFfVFlQRV9MRVZFTF9ISUdIXHUwMDNlLCAvKiBzcGRpZjAgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTM1OC1cdFx0ICAgICBcdTAwM2NHSUNfU1BJIDQ1OSBJUlFfVFlQRV9MRVZFTF9ISUdIXHUwMDNlLFxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpPTQ5MT1cdTAwMjZzYWkzX2xwY2cge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTQ5NS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjQ5NjpcdTAwMjZzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6NDk3Olx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2c3BkaWYwX2xwY2cgSU1YX0xQQ0dfQ0xLXzRcdTAwM2UsXHQvKiBjb3JlICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS00OTgtXHRcdCBcdTAwM2NcdTAwMjZjbGtfZHVtbXlcdTAwM2UsXHRcdFx0Lyogcnh0eDAgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjQ5OTpcdFx0IFx1MDAzY1x1MDAyNnNwZGlmMF9scGNnIElNWF9MUENHX0NMS181XHUwMDNlLFx0Lyogcnh0eDEgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUwMC1cdFx0IFx1MDAzY1x1MDAyNmNsa19kdW1teVx1MDAzZSxcdFx0XHQvKiByeHR4MiAqL1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUwOS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjUxMDpcdTAwMjZzcGRpZjBfbHBjZyB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS01MTEtXHRjbG9jay1pbmRpY2VzID0gXHUwMDNjSU1YX0xQQ0dfQ0xLXzVcdTAwM2UsIFx1MDAzY0lNWF9MUENHX0NMS180XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6NTEyOlx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7c3BkaWYwX2xwY2dfdHhfY2xrXCYjMzQ7LCBcJiMzNDtzcGRpZjBfbHBjZ19nY2xrd1wmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUxMy19O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpPTI2NzU9XHRcdHNkbW1jX3B3cmVuOiBzZG1tYy1wd3JlbiB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2ktMjY4MS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpOjI2ODI6XHRzcGRpZjAge1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2ktMjY4My1cdFx0L29taXQtaWYtbm8tcmVmL1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k6MjY4NDpcdFx0c3BkaWYwbTBfdHg6IHNwZGlmMG0wLXR4IHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2ODUtXHRcdFx0cm9ja2NoaXAscGlucyA9XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaToyNjg2Olx0XHRcdFx0Lyogc3BkaWYwbTBfdHggKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2ODctXHRcdFx0XHRcdTAwM2MxIFJLX1BCNiAzIFx1MDAyNnBjZmdfcHVsbF9ub25lXHUwMDNlO1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2OTAtXHRcdC9vbWl0LWlmLW5vLXJlZi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpOjI2OTE6XHRcdHNwZGlmMG0xX3R4OiBzcGRpZjBtMS10eCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaS0yNjkyLVx0XHRcdHJvY2tjaGlwLHBpbnMgPVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k6MjY5MzpcdFx0XHRcdC8qIHNwZGlmMG0xX3R4ICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaS0yNjk0LVx0XHRcdFx0XHUwMDNjNCBSS19QQjQgNiBcdTAwMjZwY2ZnX3B1bGxfbm9uZVx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLmR0c2k9MjU1Mz1cdHNwZGlmX3R4MDogc3BkaWYtdHhAZmU0ZTAwMDAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UuZHRzaS0yNTYyLVx0XHRpbnRlcnJ1cHRzID0gXHUwMDNjR0lDX1NQSSAxOTMgSVJRX1RZUEVfTEVWRUxfSElHSCAwXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS5kdHNpOjI1NjM6XHRcdHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNnNwZGlmMG0wX3R4XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS5kdHNpLTI1NjQtXHRcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWg5Ni1tYXgtdjU4LmR0cz00MzU9XHUwMDI2c3BkaWZfdHgwIHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWg5Ni1tYXgtdjU4LmR0cy00MzYtXHRwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWg5Ni1tYXgtdjU4LmR0czo0Mzc6XHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZzcGRpZjBtMV90eFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWg5Ni1tYXgtdjU4LmR0cy00MzgtXHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaD0xNTk9dW5pb24gY3ZteF9ucGVpX2Jpc3Rfc3RhdHVzIHtcbi0tXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMjA0LVx0XHR1aW50NjRfdCBjc20xOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6MjA1Olx0XHR1aW50NjRfdCBkaWYwOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMjA2LVx0XHR1aW50NjRfdCBkaWYxOjE7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTIxOC1cdFx0dWludDY0X3QgZGlmMToxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjIxOTpcdFx0dWludDY0X3QgZGlmMDoxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTIyMC1cdFx0dWludDY0X3QgY3NtMToxO1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0zMTYtXHRcdHVpbnQ2NF90IGNzbTE6MTtcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDozMTc6XHRcdHVpbnQ2NF90IGRpZjA6MTtcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0zMTgtXHRcdHVpbnQ2NF90IGRpZjE6MTtcbi0tXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMzMwLVx0XHR1aW50NjRfdCBkaWYxOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6MzMxOlx0XHR1aW50NjRfdCBkaWYwOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMzMyLVx0XHR1aW50NjRfdCBjc20xOjE7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTQyNi1cdFx0dWludDY0X3QgY3NtMToxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjQyNzpcdFx0dWludDY0X3QgZGlmMDoxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTQyOC1cdFx0dWludDY0X3QgZGlmMToxO1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC00NDAtXHRcdHVpbnQ2NF90IGRpZjE6MTtcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDo0NDE6XHRcdHVpbnQ2NF90IGRpZjA6MTtcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC00NDItXHRcdHVpbnQ2NF90IGNzbTE6MTtcbi0tXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtNTM3LVx0XHR1aW50NjRfdCBjc20xOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6NTM4Olx0XHR1aW50NjRfdCBkaWYwOjE7XG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtNTM5LVx0XHR1aW50NjRfdCBkaWYxOjE7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTU1MS1cdFx0dWludDY0X3QgZGlmMToxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjU1MjpcdFx0dWludDY0X3QgZGlmMDoxO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTU1My1cdFx0dWludDY0X3QgY3NtMToxO1xuLS1cbmFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jPTEyNT1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0ge1xuLS1cbmFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jLTE2MC1cdENMS0RFVl9DT05fSUQoXCYjMzQ7c2RpZjFfZmNrXCYjMzQ7LCBcdTAwMjZtc3RwX2Nsa3NbTVNUUDAwNV0pLFxuYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmM6MTYxOlx0Q0xLREVWX0NPTl9JRChcJiMzNDtzZGlmMF9mY2tcJiMzNDssIFx1MDAyNm1zdHBfY2xrc1tNU1RQMDA0XSksXG5hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYy0xNjItXHRDTEtERVZfQ09OX0lEKFwmIzM0O2hzcGlfZmNrXCYjMzQ7LCBcdTAwMjZtc3RwX2Nsa3NbTVNUUDAwMl0pLFxuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jPTEwMj1zdGF0aWMgY29uc3QgY2hhciAqbXg1M19ja28yX3NlbFtdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTExNi1cdFwmIzM0O3R2ZV9zZWxcJiMzNDssIFwmIzM0O2xwX2FwbVwmIzM0OyxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjExNzpcdFwmIzM0O3VhcnRfcm9vdFwmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDsvKiBzcGRpZjBfY2xrX3Jvb3QgKi8sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYy0xMTgtXHRcJiMzNDtkdW1teVwmIzM0OywgXCYjMzQ7ZHVtbXlcJiMzNDssIH07XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM9MTIxPXN0YXRpYyBjb25zdCBjaGFyICpzcGRpZl9zZWxbXSA9IHsgXCYjMzQ7cGxsMV9zd1wmIzM0OywgXCYjMzQ7cGxsMl9zd1wmIzM0OywgXCYjMzQ7cGxsM19zd1wmIzM0OywgXCYjMzQ7c3BkaWZfeHRhbF9zZWxcJiMzNDssIH07XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoxMjI6c3RhdGljIGNvbnN0IGNoYXIgKnNwZGlmMF9jb21fc2VsW10gPSB7IFwmIzM0O3NwZGlmMF9wb2RmXCYjMzQ7LCBcJiMzNDtzc2kxX3Jvb3RfZ2F0ZVwmIzM0OywgfTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTEyMy1zdGF0aWMgY29uc3QgY2hhciAqbXg1MV9zcGRpZjFfY29tX3NlbFtdID0geyBcJiMzNDtzcGRpZjFfcG9kZlwmIzM0OywgXCYjMzQ7c3NpMl9yb290X2dhdGVcJiMzNDssIH07XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM9MTMxPXN0YXRpYyB2b2lkIF9faW5pdCBteDVfY2xvY2tzX2NvbW1vbl9pbml0KHZvaWQgX19pb21lbSAqY2NtX2Jhc2UpXG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmMtMjYyLVx0Y2xrW0lNWDVfQ0xLX1BBVEFfR0FURV1cdFx0PSBpbXhfY2xrX2dhdGUyKFwmIzM0O3BhdGFfZ2F0ZVwmIzM0OywgXCYjMzQ7aXBnXCYjMzQ7LCBNWENfQ0NNX0NDR1I0LCAwKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjI2MzpcdGNsa1tJTVg1X0NMS19TUERJRjBfU0VMXVx0PSBpbXhfY2xrX211eChcJiMzNDtzcGRpZjBfc2VsXCYjMzQ7LCBNWENfQ0NNX0NTQ01SMiwgMCwgMiwgc3BkaWZfc2VsLCBBUlJBWV9TSVpFKHNwZGlmX3NlbCkpO1xuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY0Olx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9QUkVEXVx0PSBpbXhfY2xrX2RpdmlkZXIoXCYjMzQ7c3BkaWYwX3ByZWRcJiMzNDssIFwmIzM0O3NwZGlmMF9zZWxcJiMzNDssIE1YQ19DQ01fQ0RDRFIsIDI1LCAzKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjI2NTpcdGNsa1tJTVg1X0NMS19TUERJRjBfUE9ERl1cdD0gaW14X2Nsa19kaXZpZGVyKFwmIzM0O3NwZGlmMF9wb2RmXCYjMzQ7LCBcJiMzNDtzcGRpZjBfcHJlZFwmIzM0OywgTVhDX0NDTV9DRENEUiwgMTksIDYpO1xuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY2Olx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9DT01fU0VMXVx0PSBpbXhfY2xrX211eF9mbGFncyhcJiMzNDtzcGRpZjBfY29tX3NlbFwmIzM0OywgTVhDX0NDTV9DU0NNUjIsIDQsIDEsXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoyNjc6XHRcdFx0XHRcdFx0c3BkaWYwX2NvbV9zZWwsIEFSUkFZX1NJWkUoc3BkaWYwX2NvbV9zZWwpLCBDTEtfU0VUX1JBVEVfUEFSRU5UKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjI2ODpcdGNsa1tJTVg1X0NMS19TUERJRjBfR0FURV1cdD0gaW14X2Nsa19nYXRlMihcJiMzNDtzcGRpZjBfZ2F0ZVwmIzM0OywgXCYjMzQ7c3BkaWYwX2NvbV9zZWxcJiMzNDssIE1YQ19DQ01fQ0NHUjUsIDI2KTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTI2OS1cdGNsa1tJTVg1X0NMS19TUERJRl9JUEdfR0FURV1cdD0gaW14X2Nsa19nYXRlMihcJiMzNDtzcGRpZl9pcGdfZ2F0ZVwmIzM0OywgXCYjMzQ7aXBnXCYjMzQ7LCBNWENfQ0NNX0NDR1I1LCAzMCk7XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYz0xODI9c3RhdGljIHZvaWQgX19pbml0IGlteDZzbF9jbG9ja3NfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNjbV9ub2RlKVxuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzE2LVx0aHdzW0lNWDZTTF9DTEtfRVBEQ19QSVhfU0VMXSAgICAgPSBpbXhfY2xrX2h3X211eChcJiMzNDtlcGRjX3BpeF9zZWxcJiMzNDssICAgICBiYXNlICYjNDM7IDB4MzgsIDE1LCAzLCBlcGRjX3BpeF9zZWxzLCAgICAgQVJSQVlfU0laRShlcGRjX3BpeF9zZWxzKSk7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jOjMxNzpcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMF9TRUxdICAgICAgID0gaW14X2Nsa19od19tdXgoXCYjMzQ7c3BkaWYwX3NlbFwmIzM0OywgICAgICAgYmFzZSAmIzQzOyAweDMwLCAyMCwgMiwgYXVkaW9fc2VscywgICAgICAgIEFSUkFZX1NJWkUoYXVkaW9fc2VscykpO1xuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYy0zMTgtXHRod3NbSU1YNlNMX0NMS19TUERJRjFfU0VMXSAgICAgICA9IGlteF9jbGtfaHdfbXV4KFwmIzM0O3NwZGlmMV9zZWxcJiMzNDssICAgICAgIGJhc2UgJiM0MzsgMHgzMCwgNywgIDIsIGF1ZGlvX3NlbHMsICAgICAgICBBUlJBWV9TSVpFKGF1ZGlvX3NlbHMpKTtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jLTM1Mi1cdGh3c1tJTVg2U0xfQ0xLX0VQRENfUElYX1BPREZdICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcJiMzNDtlcGRjX3BpeF9wb2RmXCYjMzQ7LCAgICAgXCYjMzQ7ZXBkY19waXhfcHJlZFwmIzM0OywgICAgIGJhc2UgJiM0MzsgMHgxOCwgMjMsIDMpO1xuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYzozNTM6XHRod3NbSU1YNlNMX0NMS19TUERJRjBfUFJFRF0gICAgICAgPSBpbXhfY2xrX2h3X2RpdmlkZXIoXCYjMzQ7c3BkaWYwX3ByZWRcJiMzNDssICAgICAgIFwmIzM0O3NwZGlmMF9zZWxcJiMzNDssICAgICAgICBiYXNlICYjNDM7IDB4MzAsIDI1LCAzKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmM6MzU0Olx0aHdzW0lNWDZTTF9DTEtfU1BESUYwX1BPREZdICAgICAgID0gaW14X2Nsa19od19kaXZpZGVyKFwmIzM0O3NwZGlmMF9wb2RmXCYjMzQ7LCAgICAgICBcJiMzNDtzcGRpZjBfcHJlZFwmIzM0OywgICAgICAgYmFzZSAmIzQzOyAweDMwLCAyMiwgMyk7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jLTM1NS1cdGh3c1tJTVg2U0xfQ0xLX1NQRElGMV9QUkVEXSAgICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcJiMzNDtzcGRpZjFfcHJlZFwmIzM0OywgICAgICAgXCYjMzQ7c3BkaWYxX3NlbFwmIzM0OywgICAgICAgIGJhc2UgJiM0MzsgMHgzMCwgMTIsIDMpO1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzk3LVx0aHdzW0lNWDZTTF9DTEtfU1BCQV0gICAgICAgICA9IGlteF9jbGtfaHdfZ2F0ZTIoXCYjMzQ7c3BiYVwmIzM0OywgICAgICAgICBcJiMzNDtpcGdcJiMzNDssICAgICAgICAgICAgICAgYmFzZSAmIzQzOyAweDdjLCAxMik7XG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jOjM5ODpcdGh3c1tJTVg2U0xfQ0xLX1NQRElGXSAgICAgICAgPSBpbXhfY2xrX2h3X2dhdGUyX3NoYXJlZChcJiMzNDtzcGRpZlwmIzM0OywgICAgIFwmIzM0O3NwZGlmMF9wb2RmXCYjMzQ7LCAgIGJhc2UgJiM0MzsgMHg3YywgMTQsIFx1MDAyNnNoYXJlX2NvdW50X3NwZGlmKTtcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzk5LVx0aHdzW0lNWDZTTF9DTEtfU1BESUZfR0NMS10gICA9IGlteF9jbGtfaHdfZ2F0ZTJfc2hhcmVkKFwmIzM0O3NwZGlmX2djbGtcJiMzNDssICBcJiMzNDtpcGdcJiMzNDssICAgICAgICAgYmFzZSAmIzQzOyAweDdjLCAxNCwgXHUwMDI2c2hhcmVfY291bnRfc3BkaWYpO1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz03OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBpbXg4cW1fYXVkX2Nsa19zZWxzW10gPSB7XG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTkzLVx0eyAuZndfbmFtZSA9IFwmIzM0O2VzYWkxX3R4X2hmX2Nsa1wmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jOjk0Olx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTk1LVx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMV9yeFwmIzM0OyB9LFxuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz0xMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgaW14OHFtX21jbGtfb3V0X3NlbHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTA5LVx0eyAuZndfbmFtZSA9IFwmIzM0O2hkbWlfcnhfbWNsa1wmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jOjExMDpcdHsgLmZ3X25hbWUgPSBcJiMzNDtzcGRpZjBfcnhcJiMzNDsgfSxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xMTEtXHR7IC5md19uYW1lID0gXCYjMzQ7c3BkaWYxX3J4XCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTEzND1zdGF0aWMgc3RydWN0IGNsa19pbXg4X2FjbV9zZWwgaW14OHFtX3NlbHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTQ5LVx0eyBcJiMzNDthY21fc2FpN19tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX1NBSTdfTUNMS19TRUwsIGlteDhxbV9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHFtX21jbGtfc2VscyksIDB4MTUwMDAwLCAwLCAyIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTUwOlx0eyBcJiMzNDthY21fc3BkaWYwX21jbGtfc2VsXCYjMzQ7LCBJTVhfQURNQV9BQ01fU1BESUYwX1RYX0NMS19TRUwsIGlteDhxbV9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHFtX21jbGtfc2VscyksIDB4MUEwMDAwLCAwLCAyIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTUxLVx0eyBcJiMzNDthY21fc3BkaWYxX21jbGtfc2VsXCYjMzQ7LCBJTVhfQURNQV9BQ01fU1BESUYxX1RYX0NMS19TRUwsIGlteDhxbV9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHFtX21jbGtfc2VscyksIDB4MUIwMDAwLCAwLCAyIH0sXG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTE1NT1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBpbXg4cXhwX2F1ZF9jbGtfc2Vsc1tdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xNjMtXHR7IC5md19uYW1lID0gXCYjMzQ7ZXNhaTBfdHhfaGZfY2xrXCYjMzQ7IH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTY0Olx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTE2NS1cdHsgLmZ3X25hbWUgPSBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MTczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGlteDhxeHBfbWNsa19vdXRfc2Vsc1tdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xNzctXHR7IC5pbmRleCA9IC0xIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTc4Olx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTE3OS1cdHsgLmluZGV4ID0gLTEgfSxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MTkxPXN0YXRpYyBzdHJ1Y3QgY2xrX2lteDhfYWNtX3NlbCBpbXg4cXhwX3NlbHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjAyLVx0eyBcJiMzNDthY21fc2FpNV9tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX1NBSTVfTUNMS19TRUwsIGlteDhxeHBfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxeHBfbWNsa19zZWxzKSwgMHgxNTAwMDAsIDAsIDIgfSxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoyMDM6XHR7IFwmIzM0O2FjbV9zcGRpZjBfbWNsa19zZWxcJiMzNDssIElNWF9BRE1BX0FDTV9TUERJRjBfVFhfQ0xLX1NFTCwgaW14OHF4cF9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHF4cF9tY2xrX3NlbHMpLCAweDFBMDAwMCwgMCwgMiB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTIwNC1cdHsgXCYjMzQ7YWNtX21xc19tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX01RU19UWF9DTEtfU0VMLCBpbXg4cXhwX21jbGtfc2VscywgQVJSQVlfU0laRShpbXg4cXhwX21jbGtfc2VscyksIDB4MUMwMDAwLCAwLCAyIH0sXG4tLVxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTIwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBpbXg4ZHhsX2F1ZF9jbGtfc2Vsc1tdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0yMTUtXHR7IC5pbmRleCA9IC0xIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjE2Olx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTIxNy1cdHsgLmZ3X25hbWUgPSBcJiMzNDtzYWkwX3J4X2JjbGtcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MjI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGlteDhkeGxfbWNsa19vdXRfc2Vsc1tdID0ge1xuLS1cbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0yMjktXHR7IC5pbmRleCA9IC0xIH0sXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjMwOlx0eyAuZndfbmFtZSA9IFwmIzM0O3NwZGlmMF9yeFwmIzM0OyB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTIzMS1cdHsgLmluZGV4ID0gLTEgfSxcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MjQzPXN0YXRpYyBzdHJ1Y3QgY2xrX2lteDhfYWNtX3NlbCBpbXg4ZHhsX3NlbHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjUxLVx0eyBcJiMzNDthY21fc2FpM19tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX1NBSTNfTUNMS19TRUwsIGlteDhkeGxfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhkeGxfbWNsa19zZWxzKSwgMHgxMTAwMDAsIDAsIDIgfSxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoyNTI6XHR7IFwmIzM0O2FjbV9zcGRpZjBfbWNsa19zZWxcJiMzNDssIElNWF9BRE1BX0FDTV9TUERJRjBfVFhfQ0xLX1NFTCwgaW14OGR4bF9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OGR4bF9tY2xrX3NlbHMpLCAweDFBMDAwMCwgMCwgMiB9LFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTI1My1cdHsgXCYjMzQ7YWNtX21xc19tY2xrX3NlbFwmIzM0OywgSU1YX0FETUFfQUNNX01RU19UWF9DTEtfU0VMLCBpbXg4ZHhsX21jbGtfc2VscywgQVJSQVlfU0laRShpbXg4ZHhsX21jbGtfc2VscyksIDB4MUMwMDAwLCAwLCAyIH0sXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRhMS1jcGctbXNzci5jPTEyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3NzRhMV9tb2RfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YTEtY3BnLW1zc3IuYy0xNTMtXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc0QTFfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGExLWNwZy1tc3NyLmM6MTU0Olx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0IDMxNCxcdFI4QTc3NEExX0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRhMS1jcGctbXNzci5jLTE1NS1cdERFRl9NT0QoXCYjMzQ7cGNpZTFcJiMzNDssXHRcdCAzMTgsXHRSOEE3NzRBMV9DTEtfUzNEMSksXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRiMS1jcGctbXNzci5jPTEyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3NzRiMV9tb2RfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YjEtY3BnLW1zc3IuYy0xNTEtXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc0QjFfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGIxLWNwZy1tc3NyLmM6MTUyOlx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0IDMxNCxcdFI4QTc3NEIxX0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRiMS1jcGctbXNzci5jLTE1My1cdERFRl9NT0QoXCYjMzQ7cGNpZTFcJiMzNDssXHRcdCAzMTgsXHRSOEE3NzRCMV9DTEtfUzNEMSksXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRjMC1jcGctbXNzci5jPTEzND1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3NzRjMF9tb2RfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YzAtY3BnLW1zc3IuYy0xNTktXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc0QzBfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGMwLWNwZy1tc3NyLmM6MTYwOlx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0IDMxNCxcdFI4QTc3NEMwX0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRjMC1jcGctbXNzci5jLTE2MS1cdERFRl9NT0QoXCYjMzQ7cGNpZTBcJiMzNDssXHRcdCAzMTksXHRSOEE3NzRDMF9DTEtfUzNEMSksXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRlMS1jcGctbXNzci5jPTEyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3NzRlMV9tb2RfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0ZTEtY3BnLW1zc3IuYy0xNTgtXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc0RTFfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGUxLWNwZy1tc3NyLmM6MTU5Olx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0IDMxNCxcdFI4QTc3NEUxX0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRlMS1jcGctbXNzci5jLTE2MC1cdERFRl9NT0QoXCYjMzQ7cGNpZTFcJiMzNDssXHRcdCAzMTgsXHRSOEE3NzRFMV9DTEtfUzNEMSksXG4tLVxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk1LWNwZy1tc3NyLmM9MTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNzcl9tb2RfY2xrIHI4YTc3OTVfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTUtY3BnLW1zc3IuYy0xNjEtXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc5NV9DTEtfU0QxKSxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5NS1jcGctbXNzci5jOjE2MjpcdERFRl9NT0QoXCYjMzQ7c2RpZjBcJiMzNDssXHRcdCAzMTQsXHRSOEE3Nzk1X0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk1LWNwZy1tc3NyLmMtMTYzLVx0REVGX01PRChcJiMzNDtwY2llMVwmIzM0OyxcdFx0IDMxOCxcdFI4QTc3OTVfQ0xLX1MzRDEpLFxuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5Ni1jcGctbXNzci5jPTEzMz1zdGF0aWMgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3Nzk2X21vZF9jbGtzW10gX19pbml0ZGF0YSA9IHtcbi0tXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYy0xNjItXHRERUZfTU9EKFwmIzM0O3NkaWYxXCYjMzQ7LFx0XHQgMzEzLFx0UjhBNzc5Nl9DTEtfU0QxKSxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5Ni1jcGctbXNzci5jOjE2MzpcdERFRl9NT0QoXCYjMzQ7c2RpZjBcJiMzNDssXHRcdCAzMTQsXHRSOEE3Nzk2X0NMS19TRDApLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk2LWNwZy1tc3NyLmMtMTY0LVx0REVGX01PRChcJiMzNDtwY2llMVwmIzM0OyxcdFx0IDMxOCxcdFI4QTc3OTZfQ0xLX1MzRDEpLFxuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5NjUtY3BnLW1zc3IuYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc5NjVfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmMtMTU4LVx0REVGX01PRChcJiMzNDtzZGlmMVwmIzM0OyxcdFx0MzEzLFx0UjhBNzc5NjVfQ0xLX1NEMSksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmM6MTU5Olx0REVGX01PRChcJiMzNDtzZGlmMFwmIzM0OyxcdFx0MzE0LFx0UjhBNzc5NjVfQ0xLX1NEMCksXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmMtMTYwLVx0REVGX01PRChcJiMzNDtwY2llMVwmIzM0OyxcdFx0MzE4LFx0UjhBNzc5NjVfQ0xLX1MzRDEpLFxuLS1cbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5OTAtY3BnLW1zc3IuYz0xMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc5OTBfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTkwLWNwZy1tc3NyLmMtMTYxLVx0REVGX01PRChcJiMzNDtzZGlmMVwmIzM0OyxcdFx0IDMxMyxcdFI4QTc3OTkwX0NMS19TRDEpLFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk5MC1jcGctbXNzci5jOjE2MjpcdERFRl9NT0QoXCYjMzQ7c2RpZjBcJiMzNDssXHRcdCAzMTQsXHRSOEE3Nzk5MF9DTEtfU0QwKSxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5OTAtY3BnLW1zc3IuYy0xNjMtXHRERUZfTU9EKFwmIzM0O3BjaWUwXCYjMzQ7LFx0XHQgMzE5LFx0UjhBNzc5OTBfQ0xLX1MzRDEpLFxuLS1cbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYz00ODM9UE5BTUUoY2xrX2kyczEwXzhjaF9yeF9wKVx0XHQ9IHsgXCYjMzQ7Y2xrX2kyczEwXzhjaF9yeF9zcmNcJiMzNDssIFwmIzM0O2Nsa19pMnMxMF84Y2hfcnhfZnJhY1wmIzM0OywgXCYjMzQ7aTJzMTBfbWNsa2luXCYjMzQ7LCBcJiMzNDt4aW4xMm1cJiMzNDsgfTtcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo0ODQ6UE5BTUUoY2xrX3NwZGlmMF9wKVx0XHRcdD0geyBcJiMzNDtjbGtfc3BkaWYwX3NyY1wmIzM0OywgXCYjMzQ7Y2xrX3NwZGlmMF9mcmFjXCYjMzQ7LCBcJiMzNDt4aW4xMm1cJiMzNDsgfTtcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy00ODUtUE5BTUUoY2xrX3NwZGlmMV9wKVx0XHRcdD0geyBcJiMzNDtjbGtfc3BkaWYxX3NyY1wmIzM0OywgXCYjMzQ7Y2xrX3NwZGlmMV9mcmFjXCYjMzQ7LCBcJiMzNDt4aW4xMm1cJiMzNDsgfTtcbi0tXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM9NTc4PXN0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfY2xrX2JyYW5jaCByazM1ODhfaTJzMTBfOGNoX3J4X2ZyYWNtdXggX19pbml0ZGF0YSA9XG4tLVxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTU4MS1cbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo1ODI6c3RhdGljIHN0cnVjdCByb2NrY2hpcF9jbGtfYnJhbmNoIHJrMzU4OF9zcGRpZjBfZnJhY211eCBfX2luaXRkYXRhID1cbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo1ODM6XHRNVVgoQ0xLX1NQRElGMCwgXCYjMzQ7Y2xrX3NwZGlmMFwmIzM0OywgY2xrX3NwZGlmMF9wLCBDTEtfU0VUX1JBVEVfUEFSRU5ULFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTU4NC1cdFx0XHRSSzM1ODhfQ0xLU0VMX0NPTigzNCksIDAsIDIsIE1GTEFHUyk7XG4tLVxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jPTY4MD1zdGF0aWMgc3RydWN0IHJvY2tjaGlwX2Nsa19icmFuY2ggcmszNTg4X2Vhcmx5X2Nsa19icmFuY2hlc1tdIF9faW5pdGRhdGEgPSB7XG4tLVxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTk1Mi1cbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo5NTM6XHRHQVRFKEhDTEtfU1BESUYwLCBcJiMzNDtoY2xrX3NwZGlmMFwmIzM0OywgXCYjMzQ7aGNsa19hdWRpb19yb290XCYjMzQ7LCAwLFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTk1NC1cdFx0XHRSSzM1ODhfQ0xLR0FURV9DT04oOCksIDE0LCBHRkxBR1MpLFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jOjk1NTpcdENPTVBPU0lURShDTEtfU1BESUYwX1NSQywgXCYjMzQ7Y2xrX3NwZGlmMF9zcmNcJiMzNDssIGdwbGxfYXVwbGxfcCwgMCxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTYtXHRcdFx0UkszNTg4X0NMS1NFTF9DT04oMzIpLCA4LCAxLCBNRkxBR1MsIDMsIDUsIERGTEFHUyxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTctXHRcdFx0UkszNTg4X0NMS0dBVEVfQ09OKDgpLCAxNSwgR0ZMQUdTKSxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo5NTg6XHRDT01QT1NJVEVfRlJBQ01VWChDTEtfU1BESUYwX0ZSQUMsIFwmIzM0O2Nsa19zcGRpZjBfZnJhY1wmIzM0OywgXCYjMzQ7Y2xrX3NwZGlmMF9zcmNcJiMzNDssXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtOTU5LVx0XHRcdENMS19TRVRfUkFURV9QQVJFTlQsXG4tLVxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTk2MS1cdFx0XHRSSzM1ODhfQ0xLR0FURV9DT04oOSksIDAsIEdGTEFHUyxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo5NjI6XHRcdFx0XHUwMDI2cmszNTg4X3NwZGlmMF9mcmFjbXV4KSxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo5NjM6XHRHQVRFKE1DTEtfU1BESUYwLCBcJiMzNDttY2xrX3NwZGlmMFwmIzM0OywgXCYjMzQ7Y2xrX3NwZGlmMFwmIzM0OywgMCxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NjQtXHRcdFx0UkszNTg4X0NMS0dBVEVfQ09OKDkpLCAxLCBHRkxBR1MpLFxuLS1cbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYz03Mzc9UE5BTUUobW91dF9jbXVfY3BfbXBsbF9jbGtfdXNlcl9wYXJlbnRzKVx0PSB7IFwmIzM0O29zY2Nsa1wmIzM0OyB9O1xuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjczODpQTkFNRShtb3V0X2NtdV9hdWRfYXVkaWYwX3ApXHRcdFx0PSB7IFwmIzM0O2RvdXRfc2hhcmVkMF9kaXYxXCYjMzQ7LFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTczOS1cdFx0XHRcdFx0XHQgICAgXCYjMzQ7ZG91dF9zaGFyZWQxX2RpdjFcJiMzNDssXG4tLVxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jPTg5MD1QTkFNRShtb3V0X2NtdV9tdXhfYWxpdmVfbm9jX3ApXHRcdFx0PSB7IFwmIzM0O2RvdXRfc2hhcmVkMF9kaXYyXCYjMzQ7LFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTg5MS1cdFx0XHRcdFx0XHQgICAgXCYjMzQ7ZG91dF9zaGFyZWQyX2RpdjJcJiMzNDsgfTtcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzo4OTI6UE5BTUUobW91dF9jbXVfbXV4X2F1ZF9hdWRpZjBfcClcdFx0PSB7IFwmIzM0O2RvdXRfc2hhcmVkMF9kaXYxXCYjMzQ7LFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTg5My1cdFx0XHRcdFx0XHQgICAgXCYjMzQ7ZG91dF9zaGFyZWQxX2RpdjFcJiMzNDssXG4tLVxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jPTEzNTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzYW1zdW5nX211eF9jbG9jayB0b3BfbXV4X2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTM2MC1cdCAgICA0LCAxKSxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxMzYxOlx0TVVYKENMS19NT1VUX0NNVV9BVURfQVVESUYwLCBcJiMzNDttb3V0X2NtdV9hdWRfYXVkaWYwXCYjMzQ7LFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjEzNjI6XHQgICAgbW91dF9jbXVfYXVkX2F1ZGlmMF9wLCBDTEtfQ09OX01VWF9DTEtDTVVfQVVEX0FVRElGMCwgMCwgMyksXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTM2My1cdE1VWChDTEtfTU9VVF9DTVVfQVVEX0FVRElGMSwgXCYjMzQ7bW91dF9jbXVfYXVkX2F1ZGlmMVwmIzM0Oyxcbi0tXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTQxMS1cdCAgICBtb3V0X2NtdV9tdXhfYWxpdmVfbm9jX3AsIENMS19DT05fTVVYX01VWF9DTEtDTVVfQUxJVkVfTk9DLCAwLCAxKSxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNDEyOlx0TVVYKENMS19NT1VUX0NNVV9NVVhfQVVEX0FVRElGMCwgXCYjMzQ7bW91dF9jbXVfbXV4X2F1ZF9hdWRpZjBcJiMzNDssXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM6MTQxMzpcdCAgICBtb3V0X2NtdV9tdXhfYXVkX2F1ZGlmMF9wLCBDTEtfQ09OX01VWF9NVVhfQ0xLQ01VX0FVRF9BVURJRjAsXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTQxNC1cdCAgICAwLCAzKSxcbi0tXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM9MTYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IHNhbXN1bmdfZGl2X2Nsb2NrIHRvcF9kaXZfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy0xNzEzLVx0ICAgIFwmIzM0O21vdXRfY211X211eF9jcF9zaGFyZWQxX2Nsa1wmIzM0OywgQ0xLX0NPTl9ESVZfQ1BfU0hBUkVEMV9DTEssIDAsIDMpLFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjE3MTQ6XHRESVYoQ0xLX0RPVVRfQ01VX0RJVl9BVURfQVVESUYwLCBcJiMzNDtkb3V0X2NtdV9kaXZfYXVkX2F1ZGlmMFwmIzM0OyxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNzE1Olx0ICAgIFwmIzM0O21vdXRfY211X211eF9hdWRfYXVkaWYwXCYjMzQ7LCBDTEtfQ09OX0RJVl9ESVZfQ0xLQ01VX0FVRF9BVURJRjAsXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTcxNi1cdCAgICAwLCA2KSxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNzE3Olx0RElWKENMS19ET1VUX0NNVV9ESVZfQVVEX0FVRElGMF9TTSwgXCYjMzQ7ZG91dF9jbXVfZGl2X2F1ZF9hdWRpZjBfc21cJiMzNDssXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM6MTcxODpcdCAgICBcJiMzNDttb3V0X2NtdV9hdWRfYXVkaWYwXCYjMzQ7LCBDTEtfQ09OX0RJVl9ESVZfQ0xLQ01VX0FVRF9BVURJRjBfU00sIDAsIDYpLFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTE3MTktXHRESVYoQ0xLX0RPVVRfQ01VX0RJVl9BVURfQVVESUYxLCBcJiMzNDtkb3V0X2NtdV9kaXZfYXVkX2F1ZGlmMVwmIzM0Oyxcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2lteC9zY3UtcGQuYz0xMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfc2NfcGRfcmFuZ2UgaW14OHF4cF9zY3VfcGRfcmFuZ2VzW10gPSB7XG4tLVxuZHJpdmVycy9wbWRvbWFpbi9pbXgvc2N1LXBkLmMtMTU5LVx0eyBcJiMzNDtlc2FpMVwmIzM0OywgSU1YX1NDX1JfRVNBSV8xLCAxLCBmYWxzZSwgMCB9LFxuZHJpdmVycy9wbWRvbWFpbi9pbXgvc2N1LXBkLmM6MTYwOlx0eyBcJiMzNDtzcGRpZjBcJiMzNDssIElNWF9TQ19SX1NQRElGXzAsIDEsIGZhbHNlLCAwIH0sXG5kcml2ZXJzL3BtZG9tYWluL2lteC9zY3UtcGQuYy0xNjEtXHR7IFwmIzM0O3NwZGlmMVwmIzM0OywgSU1YX1NDX1JfU1BESUZfMSwgMSwgZmFsc2UsIDAgfSxcbi0tXG5mcy9lcm9mcy9kYXRhLmM9Njc9aW50IGVyb2ZzX2luaXRfbWV0YWJ1ZihzdHJ1Y3QgZXJvZnNfYnVmICpidWYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXJvZnMvZGF0YS5jLTc4LVx0fVxuZnMvZXJvZnMvZGF0YS5jOjc5Olx0YnVmLVx1MDAzZW9mZiA9IHNiaS1cdTAwM2VkaWYwLmZzb2ZmO1xuZnMvZXJvZnMvZGF0YS5jLTgwLVx0aWYgKGVyb2ZzX2lzX2ZpbGVpb19tb2RlKHNiaSkpIHtcbmZzL2Vyb2ZzL2RhdGEuYzo4MTpcdFx0YnVmLVx1MDAzZWZpbGUgPSBzYmktXHUwMDNlZGlmMC5maWxlO1x0Lyogc29tZSBmcyBsaWtlIEZVU0UgbmVlZHMgaXQgKi9cbmZzL2Vyb2ZzL2RhdGEuYy04Mi1cdFx0YnVmLVx1MDAzZW1hcHBpbmcgPSBidWYtXHUwMDNlZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4tLVxuZnMvZXJvZnMvZGF0YS5jPTIwOT1pbnQgZXJvZnNfbWFwX2RldihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXJvZnNfbWFwX2RldiAqbWFwKVxuLS1cbmZzL2Vyb2ZzL2RhdGEuYy0yMTUtXG5mcy9lcm9mcy9kYXRhLmM6MjE2Olx0ZXJvZnNfZmlsbF9mcm9tX2RldmluZm8obWFwLCBzYiwgXHUwMDI2RVJPRlNfU0Ioc2IpLVx1MDAzZWRpZjApO1xuZnMvZXJvZnMvZGF0YS5jLTIxNy1cdG1hcC1cdTAwM2VtX2JkZXYgPSBzYi1cdTAwM2VzX2JkZXY7XHQvKiB1c2Ugc19iZGV2IGZvciB0aGUgcHJpbWFyeSBkZXZpY2UgKi9cbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oPTg3PXN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbmZzL2Vyb2ZzL2ludGVybmFsLmg6ODg6XHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8gZGlmMDtcbmZzL2Vyb2ZzL2ludGVybmFsLmgtODktXHRzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyBvcHQ7XHQvKiBvcHRpb25zICovXG4tLVxuZnMvZXJvZnMvaW50ZXJuYWwuaD0xNjU9c3RhdGljIGlubGluZSBib29sIGVyb2ZzX2lzX2ZpbGVpb19tb2RlKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTE2Ni17XG5mcy9lcm9mcy9pbnRlcm5hbC5oOjE2NzpcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkgXHUwMDI2XHUwMDI2IHNiaS1cdTAwM2VkaWYwLmZpbGU7XG5mcy9lcm9mcy9pbnRlcm5hbC5oLTE2OC19XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz0xODM9c3RhdGljIGludCBlcm9mc19zY2FuX2RldmljZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTE5Mi1cbmZzL2Vyb2ZzL3N1cGVyLmM6MTkzOlx0c2JpLVx1MDAzZXRvdGFsX2Jsb2NrcyA9IHNiaS1cdTAwM2VkaWYwLmJsb2NrcztcbmZzL2Vyb2ZzL3N1cGVyLmMtMTk0LVx0aWYgKCFlcm9mc19zYl9oYXNfZGV2aWNlX3RhYmxlKHNiaSkpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0yMDUtXG5mcy9lcm9mcy9zdXBlci5jOjIwNjpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSBcdTAwMjZcdTAwMjYgIXNiaS1cdTAwM2VkaWYwLmRheF9kZXYpIHtcbmZzL2Vyb2ZzL3N1cGVyLmMtMjA3LVx0XHRlcm9mc19pbmZvKHNiLCBcJiMzNDtEQVggdW5zdXBwb3J0ZWQgYnkgYmxvY2sgZGV2aWNlLiBUdXJuaW5nIG9mZiBEQVguXCYjMzQ7KTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTI1MD1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMzAxLVx0fVxuZnMvZXJvZnMvc3VwZXIuYzozMDI6XHRzYmktXHUwMDNlZGlmMC5ibG9ja3MgPSBsZTMyX3RvX2NwdShkc2ItXHUwMDNlYmxvY2tzX2xvKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtMzAzLVx0c2JpLVx1MDAzZW1ldGFfYmxrYWRkciA9IGxlMzJfdG9fY3B1KGRzYi1cdTAwM2VtZXRhX2Jsa2FkZHIpO1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMzIxLVx0XHRzYmktXHUwMDNlcm9vdF9uaWQgPSBsZTY0X3RvX2NwdShkc2ItXHUwMDNlcm9vdG5pZF84Yik7XG5mcy9lcm9mcy9zdXBlci5jOjMyMjpcdFx0c2JpLVx1MDAzZWRpZjAuYmxvY2tzID0gc2JpLVx1MDAzZWRpZjAuYmxvY2tzIHxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzIzLVx0XHRcdFx0KCh1NjQpbGUxNl90b19jcHUoZHNiLVx1MDAzZXJiLmJsb2Nrc19oaSkgXHUwMDNjXHUwMDNjIDMyKTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTQ0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy00NDctXG5mcy9lcm9mcy9zdXBlci5jOjQ0ODpcdGlmIChmYy1cdTAwM2Vzb3VyY2UgfHwgc2JpLVx1MDAzZWRpZjAuZmlsZSlcbmZzL2Vyb2ZzL3N1cGVyLmMtNDQ5LVx0XHRyZXR1cm4gaW52YWxmKGZjLCBcJiMzNDtNdWx0aXBsZSBzb3VyY2VzXCYjMzQ7KTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTQ2Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbmZzL2Vyb2ZzL3N1cGVyLmM6NDY4Olx0XHRzYmktXHUwMDNlZGlmMC5maWxlID0gbm9fZnJlZV9wdHIocGFyYW0tXHUwMDNlZmlsZSk7XG5mcy9lcm9mcy9zdXBlci5jLTQ2OS1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz00Nzc9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjM5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgRVJPRlMgRGV2aWNlIEluZm9ybWF0aW9uKioKClJpZ2h0LCBzbyBgZGlmMGAgaXMgZGVmaW5lZCBhcyBhIGBzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm9gLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG1ldGFkYXRhIGZvciB0aGUgRVJPRlMgZGV2aWNlIGlzIHN0b3JlZCwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgbGF5b3V0IGFuZCBob3cgaXQmIzM5O3Mgb3BlcmF0aW5nLiBOb3csIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm9gIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIGl0OyB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBmb3IgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGFuZCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gYmxvY2sgc2l6ZXMsIGNvbXByZXNzaW9uIHNldHRpbmdzLCBhbmQgc3VwZXJibG9jayBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgb24tZGlzayBmb3JtYXQuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IGluLWRlcHRoIGFuYWx5c2lzIG9mIHRoZSBFUk9GUyBkZXZpY2UmIzM5O3MgcHJvcGVydGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGVyb2ZzX2RldmljZV9pbmZvIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9pbnRlcm5hbC5oPTQyPXR5cGVkZWYgdTY0IGVyb2ZzX2Jsa190O1xuZnMvZXJvZnMvaW50ZXJuYWwuaC00My1cbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDQ6c3RydWN0IGVyb2ZzX2RldmljZV9pbmZvIHtcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUtXHRjaGFyICpwYXRoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBlcm9mc19kZXZpY2VfaW5mb2AgU3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZXJvZnNfZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBpbnNpZGUgYW5kIG91dC4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIGNhbiYjMzk7dCBhZmZvcmQgYW55IGdhcHMgaW4gbXkgdW5kZXJzdGFuZGluZy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gLSBubyBza2ltbWluZywgbm8gc2hvcnRjdXRzLiBHb3R0YSBrbm93IHRoZSBuaXR0eS1ncml0dHkgZGV0YWlsczsgYWxsIHRoZSBtZW1iZXJzLCB0aGVpciBkYXRhIHR5cGVzLCB0aGVpciBwdXJwb3NlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgRVJPRlMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBzdHJ1Y3R1cmUgaW50ZXJmYWNlcyB3aXRoIHRoZSBibG9jayBkZXZpY2UsIGhvdyBpdCBtYW5hZ2VzIG1ldGFkYXRhLCBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIGl0IGVuYWJsZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdWxseSB3aWxsIGFsbG93IG1lIHRvIG1ha2UgYW55IGVuaGFuY2VtZW50cyBvciBkZWJ1ZyBhbnkgaXNzdWVzIEkgY29tZSBhY3Jvc3MgbGF0ZXIuIEnigJltIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0b28sIGFuZCB3YW50IHRvIGV2YWx1YXRlIGlmIEkgY2FuIHNlZSBpZiB0aGVyZSBhcmUgYmV0dGVyIG1lbW9yeSBhbGlnbm1lbnQgb3Igb3JkZXIgY2hvaWNlcyB0aGF0IGNvdWxkIGJlIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvaW50ZXJuYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDQ6XHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8ge1xuICA0NTpcdFx0Y2hhciAqcGF0aDtcbiAgNDY6XHRcdHN0cnVjdCBmaWxlICpmaWxlO1xuICA0NzpcdFx0c3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXY7XG4gIDQ4Olx0XHR1NjQgZnNvZmYsIGRheF9wYXJ0X29mZjtcbiAgNDk6XHRcbiAgNTA6XHRcdGVyb2ZzX2Jsa190IGJsb2NrcztcbiAgNTE6XHRcdGVyb2ZzX2Jsa190IHVuaWFkZHI7XG4gIDUyOlx0fTtcbiAgNTM6XHRcbiAgNTQ6XHRlbnVtIHtcbiAgNTU6XHRcdEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPLFxuICA1NjpcdFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09OLFxuICA1NzpcdFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09GRlxuICA1ODpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDM0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFUk9GUyBTdXBlcmJsb2NrIFNoYXJpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMuIEl0JiMzOTtzIGNvbXBhcmluZyB0d28gYHN0cnVjdCBlcm9mc19zYl9pbmZvYCBzdHJ1Y3R1cmVzLCBgc2JpYCBhbmQgYG5ld19zYmlgLCB0byBzZWUgaWYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgdW5kZXJseWluZyBmaWxlc3lzdGVtLiBUaGUgY29tcGFyaXNvbiBjaGVja3Mgc2V2ZXJhbCBhc3BlY3RzLCBzdGFydGluZyB3aXRoIHRoZSBgZmlsZWAgYW5kIGBmc29mZmAgbWVtYmVycyB3aXRoaW4gdGhlIGBkaWYwYCBzdHJ1Y3QsIHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGRldmljZSBpbmZvcm1hdGlvbi4gSWYgZWl0aGVyIG9mIHRob3NlIGFyZSBudWxsLCBpdCBpbW1lZGlhdGVseSBiYWlscyBvdXQuCgpUaGUgY29yZSBvZiB0aGUgY29tcGFyaXNvbiBoaW5nZXMgb24gd2hldGhlciB0aGUgaW5vZGVzIG9mIHRob3NlIGZpbGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCB0aGUgb2Zmc2V0cyBhcmUgdGhlIHNhbWUsIGFuZCwgbW9zdCBjcml0aWNhbGx5LCBhIGBtZW1jbXBgIG9mIHRoZSBgc2JpLSZndDtvcHRgIGZpZWxkIGFnYWluc3QgYG5ld19zYmktJmd0O29wdGAgaXMgcGVyZm9ybWVkLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgYSBtYXRjaCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gMS4KClRoZSB1c2Ugb2YgYG1lbWNtcGAgaGVyZSBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHF1ZXN0aW9uOiBpcyB0aGlzIHRoZSAqb25seSogcGxhY2Ugd2hlcmUgYHNiaS0mZ3Q7b3B0YCBpcyBtb2RpZmllZD8gSWYgdGhlcmUgYXJlIG90aGVyIHBhdGhzIHdoZXJlIGl0IGdldHMgdXBkYXRlZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIHVwZGF0ZXMgbWlnaHQgYWZmZWN0IHRoaXMgc2hhcmluZyB0ZXN0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hlcmUgYHNiaS0mZ3Q7b3B0YCBpcyBpbml0aWFsaXplZCBvciBtb2RpZmllZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIHRvIHNlZSB3aGVyZSB0aGUgYHNiaS0mZ3Q7b3B0YCBmaWVsZCBnZXRzIGl0cyB2YWx1ZXMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgc2luY2UgdGhlIGZ1bmN0aW9uIHN1Z2dlc3RzIHdlIGNhbiBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJvZnNfZmNfcGFyc2VfcGFyYW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYz00NDM9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtNDc2LVxuZnMvZXJvZnMvc3VwZXIuYzo0Nzc6c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG5mcy9lcm9mcy9zdXBlci5jLTQ3OC1cdFx0XHRcdHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGVyb2ZzX2NvbnRleHRfb3BzID0ge1xuZnMvZXJvZnMvc3VwZXIuYzo5NDM6XHQucGFyc2VfcGFyYW1cdD0gZXJvZnNfZmNfcGFyc2VfcGFyYW0sXG5mcy9lcm9mcy9zdXBlci5jLTk0NC1cdC5nZXRfdHJlZSAgICAgICA9IGVyb2ZzX2ZjX2dldF90cmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI5OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBlcm9mc19mY19wYXJzZV9wYXJhbWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBndXRzIG9mIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhcnNlZC4gV2hhdCYjMzk7cyB0aGUgc3RyYXRlZ3k/IEFyZSB0aGV5IHVzaW5nIGEgc3RyYWlnaHRmb3J3YXJkIHRva2VuaXphdGlvbiBhcHByb2FjaCwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCB0byBoYW5kbGUgdmFyaWF0aW9ucyBhbmQgcG90ZW50aWFsIGVycm9ycyBpbiB0aGUgaW5wdXQ/IEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7dmUgYWNjb3VudGVkIGZvciBhbGwgdGhlIGVkZ2UgY2FzZXMuIFRoaW5rIGFib3V0IGhvdyB0aGUgcGFyYW1ldGVycyBpbnRlcmFjdCDigJMgYXJlIHRoZXJlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGRlZmF1bHQgdmFsdWVzLCBhbmQgaG93IGFyZSB0aG9zZSBoYW5kbGVkIGR1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzPyBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBtYXliZSBhIHN0YWNrIGJ1ZmZlciwgYW55IHBvc3NpYmlsaXR5IG9mIGFuIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eT8gTW9zdCBpbXBvcnRhbnRseSwgZG9lcyB0aGlzIGNvZGUgaW1wbGVtZW50IHRoZSBwYXJhbWV0ZXJzIGluIGEgc2ltcGxlIHdheT8gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc3Olx0c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gNDc4Olx0XHRcdFx0XHRzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbiA0Nzk6XHR7XG4gNDgwOlx0XHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuIDQ4MTpcdFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XG4gNDgyOlx0XHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8gKmRpZjtcbiA0ODM6XHRcdGludCBvcHQsIHJldDtcbiA0ODQ6XHRcbiA0ODU6XHRcdG9wdCA9IGZzX3BhcnNlKGZjLCBlcm9mc19mc19wYXJhbWV0ZXJzLCBwYXJhbSwgXHUwMDI2cmVzdWx0KTtcbiA0ODY6XHRcdGlmIChvcHQgXHUwMDNjIDApXG4gNDg3Olx0XHRcdHJldHVybiBvcHQ7XG4gNDg4Olx0XG4gNDg5Olx0XHRzd2l0Y2ggKG9wdCkge1xuIDQ5MDpcdFx0Y2FzZSBPcHRfdXNlcl94YXR0cjpcbiA0OTE6XHRcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXG4gNDkyOlx0XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7eyxub311c2VyX3hhdHRyIG9wdGlvbnMgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4gNDkzOlx0XHRcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxuIDQ5NDpcdFx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XG4gNDk1Olx0XHRcdGVsc2VcbiA0OTY6XHRcdFx0XHRjbGVhcl9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XG4gNDk3Olx0XHRcdGJyZWFrO1xuIDQ5ODpcdFx0Y2FzZSBPcHRfYWNsOlxuIDQ5OTpcdFx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXG4gNTAwOlx0XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7eyxub31hY2wgb3B0aW9ucyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiA1MDE6XHRcdFx0ZWxzZSBpZiAocmVzdWx0LmJvb2xlYW4pXG4gNTAyOlx0XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xuIDUwMzpcdFx0XHRlbHNlXG4gNTA0Olx0XHRcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFBPU0lYX0FDTCk7XG4gNTA1Olx0XHRcdGJyZWFrO1xuIDUwNjpcdFx0Y2FzZSBPcHRfY2FjaGVfc3RyYXRlZ3k6XG4gNTA3Olx0XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWklQKSlcbiA1MDg6XHRcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDtjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkLCBjYWNoZV9zdHJhdGVneSBpZ25vcmVkXCYjMzQ7KTtcbiA1MDk6XHRcdFx0ZWxzZVxuIDUxMDpcdFx0XHRcdHNiaS1cdTAwM2VvcHQuY2FjaGVfc3RyYXRlZ3kgPSByZXN1bHQudWludF8zMjtcbiA1MTE6XHRcdFx0YnJlYWs7XG4gNTEyOlx0XHRjYXNlIE9wdF9kYXg6XG4gNTEzOlx0XHRcdGlmICghZXJvZnNfZmNfc2V0X2RheF9tb2RlKGZjLCBFUk9GU19NT1VOVF9EQVhfQUxXQVlTKSlcbiA1MTQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTU6XHRcdFx0YnJlYWs7XG4gNTE2Olx0XHRjYXNlIE9wdF9kYXhfZW51bTpcbiA1MTc6XHRcdFx0aWYgKCFlcm9mc19mY19zZXRfZGF4X21vZGUoZmMsIHJlc3VsdC51aW50XzMyKSlcbiA1MTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTk6XHRcdFx0YnJlYWs7XG4gNTIwOlx0XHRjYXNlIE9wdF9kZXZpY2U6XG4gNTIxOlx0XHRcdGRpZiA9IGt6YWxsb2Nfb2JqKCpkaWYpO1xuIDUyMjpcdFx0XHRpZiAoIWRpZilcbiA1MjM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA1MjQ6XHRcdFx0ZGlmLVx1MDAzZXBhdGggPSBrc3RyZHVwKHBhcmFtLVx1MDAzZXN0cmluZywgR0ZQX0tFUk5FTCk7XG4gNTI1Olx0XHRcdGlmICghZGlmLVx1MDAzZXBhdGgpIHtcbiA1MjY6XHRcdFx0XHRrZnJlZShkaWYpO1xuIDUyNzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDUyODpcdFx0XHR9XG4gNTI5Olx0XHRcdGRvd25fd3JpdGUoXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNlcndzZW0pO1xuIDUzMDpcdFx0XHRyZXQgPSBpZHJfYWxsb2MoXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNldHJlZSwgZGlmLCAwLCAwLCBHRlBfS0VSTkVMKTtcbiA1MzE6XHRcdFx0dXBfd3JpdGUoXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNlcndzZW0pO1xuIDUzMjpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gNTMzOlx0XHRcdFx0a2ZyZWUoZGlmLVx1MDAzZXBhdGgpO1xuIDUzNDpcdFx0XHRcdGtmcmVlKGRpZik7XG4gNTM1Olx0XHRcdFx0cmV0dXJuIHJldDtcbiA1MzY6XHRcdFx0fVxuIDUzNzpcdFx0XHQmIzQzOyYjNDM7c2JpLVx1MDAzZWRldnMtXHUwMDNlZXh0cmFfZGV2aWNlcztcbiA1Mzg6XHRcdFx0YnJlYWs7XG4gNTM5Olx0XHRjYXNlIE9wdF9kb21haW5faWQ6XG4gNTQwOlx0XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRSkpIHtcbiA1NDE6XHRcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZFwmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuIDU0MjpcdFx0XHR9IGVsc2Uge1xuIDU0MzpcdFx0XHRcdGtmcmVlX3NlbnNpdGl2ZShzYmktXHUwMDNlZG9tYWluX2lkKTtcbiA1NDQ6XHRcdFx0XHRzYmktXHUwMDNlZG9tYWluX2lkID0gbm9fZnJlZV9wdHIocGFyYW0tXHUwMDNlc3RyaW5nKTtcbiA1NDU6XHRcdFx0fVxuIDU0NjpcdFx0XHRicmVhaztcbiA1NDc6XHRcdGNhc2UgT3B0X2RpcmVjdGlvOlxuIDU0ODpcdFx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcbiA1NDk6XHRcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZFwmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuIDU1MDpcdFx0XHRlbHNlIGlmIChyZXN1bHQuYm9vbGVhbilcbiA1NTE6XHRcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERJUkVDVF9JTyk7XG4gNTUyOlx0XHRcdGVsc2VcbiA1NTM6XHRcdFx0XHRjbGVhcl9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgRElSRUNUX0lPKTtcbiA1NTQ6XHRcdFx0YnJlYWs7XG4gNTU1Olx0XHRjYXNlIE9wdF9mc29mZnNldDpcbiA1NTY6XHRcdFx0c2JpLVx1MDAzZWRpZjAuZnNvZmYgPSByZXN1bHQudWludF82NDtcbiA1NTc6XHRcdFx0YnJlYWs7XG4gNTU4Olx0XHRjYXNlIE9wdF9pbm9kZV9zaGFyZTpcbiA1NTk6XHRcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QQUdFX0NBQ0hFX1NIQVJFKSlcbiA1NjA6XHRcdFx0XHRlcnJvcmZjKGZjLCBcJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZFwmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuIDU2MTpcdFx0XHRlbHNlXG4gNTYyOlx0XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSk7XG4gNTYzOlx0XHRcdGJyZWFrO1xuIDU2NDpcdFx0Y2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZTpcbiA1NjU6XHRcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpXG4gNTY2Olx0XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcJiMzNDssIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbiA1Njc6XHRcdFx0ZWxzZVxuIDU2ODpcdFx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSk7XG4gNTY5Olx0XHRcdGJyZWFrO1xuIDU3MDpcdFx0Y2FzZSBPcHRfc291cmNlOlxuIDU3MTpcdFx0XHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XG4gNTcyOlx0XHR9XG4gNTczOlx0XHRyZXR1cm4gMDtcbiA1NzQ6XHR9XG4gNTc1Olx0XG4gNTc2Olx0c3RhdGljIGludCBlcm9mc19lbmNvZGVfZmgoc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpmaCwgaW50ICptYXhfbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzYmktJmd0O29wdGAgc3RydWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZC4gV2UmIzM5O3JlIHNldHRpbmcgYW5kIGNsZWFyaW5nIG9wdGlvbnMgdXNpbmcgYHNldF9vcHRgIGFuZCBgY2xlYXJfb3B0YCwgYW5kIHdlJiMzOTtyZSBhbHNvIGRpcmVjdGx5IGFzc2lnbmluZyBhIHZhbHVlIHRvIGBzYmktJmd0O29wdC5jYWNoZV9zdHJhdGVneWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0ICpub25lKiBvZiB0aGVzZSBvcGVyYXRpb25zIHRvdWNoIHRoZSBwYWRkaW5nIHdpdGhpbiB0aGUgYHNiaS0mZ3Q7b3B0YCBzdHJ1Y3R1cmUuCgpOb3csIGJlY2F1c2UgYHNiaWAgaXRzZWxmIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB0aGUgcGFkZGluZyB3aXRoaW4gYHNiaS0mZ3Q7b3B0YCBzaG91bGQgYmUgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0JiMzOTtzIGdvb2QuIFdoaWNoIG1lYW5zIHRoYXQgdGhlIHN1YnNlcXVlbnQgYG1lbWNtcGAgb3BlcmF0aW9uIGlzIGNvbXBhcmluZyB6ZXJvZWQgcGFkZGluZyBhZ2FpbnN0IHplcm9lZCBwYWRkaW5nLiBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLCB3aGljaCBpcyB3aGF0IEkgaW5pdGlhbGx5IHN1c3BlY3RlZC4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgY2FuJiMzOTt0IGp1c3Qgc3RvcCBhdCBvbmUgaW5zdGFuY2UuIE15IGZpZWxkIGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0byBhbHdheXMgYmUgdmlnaWxhbnQgZm9yIG90aGVyIHBvc3NpYmxlIGFyZWFzIG9mIGNvbmNlcm4uIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGdldF90cmVlX3N1cGVyYCBmdW5jdGlvbiB3aXRoaW4gYGZzL3N1cGVyLmNgLiBUaGVyZSBtaWdodCBiZSBhbm90aGVyIHNpbWlsYXIgdnVsbmVyYWJpbGl0eSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzg5Olx0XHRyZXR1cm4gMTtcbjEzOTA6XHR9XG4xMzkxOlx0XG4xMzkyOlx0LyoqXG4xMzkzOlx0ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXG4xMzk0Olx0ICogQGZjOiBUaGUgZmlsZXN5c3RlbSBjb250ZXh0IGhvbGRpbmcgdGhlIHBhcmFtZXRlcnNcbjEzOTU6XHQgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTFxuMTM5NjpcdCAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrXG4xMzk3Olx0ICpcbjEzOTg6XHQgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXNcbjEzOTk6XHQgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoXG4xNDAwOlx0ICogQGZpbGxfc3VwZXIuICBQYXNzaW5nIE5VTEwgZm9yIEB0ZXN0IGFsd2F5cyBjcmVhdGVzIGEgbmV3IHN1cGVyYmxvY2suXG4xNDAxOlx0ICovXG4xNDAyOlx0aW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbjE0MDM6XHRcdFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuMTQwNDpcdFx0XHRpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuMTQwNTpcdFx0XHRcdFx0ICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuMTQwNjpcdHtcbjE0MDc6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XG4xNDA4Olx0XHRpbnQgZXJyO1xuMTQwOTpcdFxuMTQxMDpcdFx0c2IgPSBzZ2V0X2ZjKGZjLCB0ZXN0LCBzZXRfYW5vbl9zdXBlcl9mYyk7XG4xNDExOlx0XHRpZiAoSVNfRVJSKHNiKSlcbjE0MTI6XHRcdFx0cmV0dXJuIFBUUl9FUlIoc2IpO1xuMTQxMzpcdFxuMTQxNDpcdFx0aWYgKCFzYi1cdTAwM2VzX3Jvb3QpIHtcbjE0MTU6XHRcdFx0ZXJyID0gZmlsbF9zdXBlcihzYiwgZmMpO1xuMTQxNjpcdFx0XHRpZiAoZXJyKVxuMTQxNzpcdFx0XHRcdGdvdG8gZXJyb3I7XG4xNDE4Olx0XG4xNDE5Olx0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfQUNUSVZFO1xuMTQyMDpcdFx0fVxuMTQyMTpcdFxuMTQyMjpcdFx0ZmMtXHUwMDNlcm9vdCA9IGRnZXQoc2ItXHUwMDNlc19yb290KTtcbjE0MjM6XHRcdHJldHVybiAwO1xuMTQyNDpcdFxuMTQyNTpcdGVycm9yOlxuMTQyNjpcdFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuMTQyNzpcdFx0cmV0dXJuIGVycjtcbjE0Mjg6XHR9XG4xNDI5Olx0RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7XG4xNDMwOlx0XG4xNDMxOlx0aW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbjE0MzI6XHRcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuMTQzMzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4xNDM0Olx0e1xuMTQzNTpcdFx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcbjE0MzY6XHR9XG4xNDM3Olx0RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XG4xNDM4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjgyCgkJCQkJCQlvdXRwdXQ6IDI5OQoJCQkJCQkJdGhvdWdodHM6IDE2NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEVST0ZTIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgcmVuYW1lIGFuZCBleHBvcnQgb2YgYHZmc19nZXRfc3VwZXJgIHRvIGBnZXRfdHJlZV9zdXBlcmAuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyB3aGVyZSBLTVNBTiBjb21lcyBpbnRvIHBsYXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQuCgpMZXQmIzM5O3MgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgS01TQU4gcnVsZXMgdG8gbWFrZSBzdXJlOgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyAtIE5vLCBub3RoaW5nIGdvZXMgdG8gdXNlcnNwYWNlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAtIE5vcGUsIG5vdCBzZWVpbmcgdGhhdCBoZXJlLgozLiAgQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHJlYWQgbGF0ZXIgLSBObywgZG9lc24mIzM5O3QgbG9vayBsaWtlIGFueSBvZiB0aGF0IGlzIGludHJvZHVjZWQuCjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGxldCBzdXJyb3VuZGluZyBjb2RlIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMgLSBObyBvYnZpb3VzIHZpb2xhdGlvbnMgdGhlcmUgZWl0aGVyLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgY29kZSwgdGhlIGNydWNpYWwgcGFydCBpcyB0aGUgYG1lbWNtcGAgY2FsbC4gSXQmIzM5O3MgY29tcGFyaW5nIGBzYmktJmd0O29wdGAgYW5kIGBuZXdfc2JpLSZndDtvcHRgIHdoaWNoIGFyZSBib3RoIHBhcnQgb2YgYHN0cnVjdCBlcm9mc19zYl9pbmZvYC4gQW5kIHRoZSBhbGxvY2F0aW9uLCBga3phbGxvY19vYmpgLCBpcyBrZXkgaGVyZS4gVGhhdCB6ZXJvZXMgdGhlIG1lbW9yeS4gU28sIHBhZGRpbmcgd2l0aGluIGBzYmktJmd0O29wdGAgKnNob3VsZCogYmUgemVyb2VkLCBhbmQgaXQmIzM5O3MgbmV2ZXIgbW9kaWZpZWQsIHNvIGl0IHN0YXlzIHplcm9lZC4gVGhlcmVmb3JlLCB0aGF0IGBtZW1jbXBgIGNvbXBhcmVzIGluaXRpYWxpemVkIG1lbW9yeS4KCkJ1dCwgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUuIElzIHRoZXJlIGFueSB3YXkgYHNiaS0mZ3Q7b3B0YCBpcyBjb3BpZWQgZnJvbSBzb21ld2hlcmUgZWxzZT8gTGV0JiMzOTtzIGNoZWNrIHdoZXJlIGBzYmlgIGlzIGFsbG9jYXRlZCwgc3RhcnRpbmcgd2l0aCBgZXJvZnNfaW5pdF9mc19jb250ZXh0YC4gUmlnaHQsIGBremFsbG9jX29iamAhIGBzYmktJmd0O29wdGAgaXMgYWx3YXlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGFuZCB0aGUgYWxsb2NhdGlvbiBpcyBpbml0aWFsaXplZCB0aGVyZS4KCk9rYXksIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwbGFjZXMgd2hlcmUgYHNiaWAgaXMgYWxsb2NhdGVkLiBMZXQgbWUgY2hlY2sgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYC4gQWgsIGp1c3QgYSBjaGVjay4gTm8gY2hhbmdlcyB0byB0aGUgYWxsb2NhdGlvbi4KCldoZXJlIGVsc2UgaXMgYG1lbWNtcGAgdXNlZD8gTG9va2luZyBhZ2FpbiwgdGhlcmUmIzM5O3Mgb25seSBvbmUgdXNlOiBgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbXBhcmlzb24gaGFwcGVucy4gQnV0LCBzaW5jZSBgc2JpYCBpcyBhbHdheXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jX29iamAsIHRoZXJlJiMzOTtzIG5vIHdheSB0aGUgbWVtb3J5IGNhbiBiZSB1bmluaXRpYWxpemVkLgoKT2theSwgbGV0JiMzOTtzIG5haWwgdGhpcyBkb3duLiBJcyB0aGVyZSBwYWRkaW5nPyBDaGVja2luZyBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLCB5ZXMsIHRoZXJlIGlzIHBhZGRpbmcgYmV0d2VlbiBgY2FjaGVfc3RyYXRlZ3lgICh1bnNpZ25lZCBjaGFyKSBhbmQgYG1vdW50X29wdGAgKHVuc2lnbmVkIGludCkuIFRoYXQgcGFkZGluZyBpcyB0aHJlZSBieXRlcy4gQnV0IHRoZSB3aG9sZSBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIHplcm9lZCBieSB0aGUgYWxsb2NhdGlvbiwgYW5kIHRob3NlIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBtb2RpZmllZC4gVGhleSBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gU28gd2hlbiB0aGF0IGBtZW1jbXBgIGdldHMgY2FsbGVkLCBpdCYjMzk7cyBjb21wYXJpbmcgemVyb2VkIHBhZGRpbmcgd2l0aCB6ZXJvZWQgcGFkZGluZy4gVGhhdCYjMzk7cyAqc2FmZSouCgpTbywgbm8uIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZSBwYXRjaCBqdXN0IGFkZHMgYSBuZXcgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbiBhbmQgYWxsb3dzIHNoYXJpbmcgc3VwZXJibG9ja3MgaWYgdGhlIGJhY2tpbmcgZmlsZSBhbmQgb3B0aW9ucyBhcmUgY29tcGF0aWJsZS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFyZSBlbm91Z2ggdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzLCBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVzZS1hZnRlci1mcmVlLiBXZSBkb24mIzM5O3QgbmVlZCBLTVNBTiBoZXJlLgoKT2theSwgaGVyZSYjMzk7cyBob3cgSSB3b3VsZCBzdW1tYXJpemUgdGhpczogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3VwZXJibG9ja19zaGFyZWAgb3B0aW9uLCBhbGxvd2luZyBzdXBlcmJsb2NrIHNoYXJpbmcgd2l0aCBpZGVudGljYWwgYmFja2luZyBmaWxlcyBhbmQgbW91bnQgb3B0aW9ucy4gSXQgdXNlcyBgbWVtY21wYCB0byBjb21wYXJlIG9wdGlvbnMsIGluY2x1ZGluZyBwYWRkaW5nIHdpdGhpbiBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBIb3dldmVyLCBzaW5jZSBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLCBhbGwgbWVtb3J5LCBpbmNsdWRpbmcgcGFkZGluZyB3aXRoaW4gYHNiaS0mZ3Q7b3B0YCwgaXMgemVyby1pbml0aWFsaXplZC4gU3Vic2VxdWVudCBtb2RpZmljYXRpb25zIG9ubHkgYWZmZWN0IHNwZWNpZmljIGZpZWxkcywgbGVhdmluZyB0aGUgcGFkZGluZyB1bnRvdWNoZWQuIFRodXMsIGBtZW1jbXBgIHNhZmVseSBjb21wYXJlcyBpbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQ7IEtNU0FOIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBhbmQgYWxsb3dzIHNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUgb3B0aW9ucy4gSXQgdXNlcyBgbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXHUwMDNlb3B0YCwgaXMgemVyby1pbml0aWFsaXplZC4gU3Vic2VxdWVudCBtb2RpZmljYXRpb25zIHRvIGBzYmktXHUwMDNlb3B0YCBmaWVsZHMgZG8gbm90IGFsdGVyIHRoZSBwYWRkaW5nIGJ5dGVzLCBtZWFuaW5nIHRoZXkgcmVtYWluIHplcm9lZC4gVGhlcmVmb3JlLCB0aGUgYG1lbWNtcGAgb3BlcmF0aW9uIHNhZmVseSBjb21wYXJlcyBpbml0aWFsaXplZCBtZW1vcnkgYW5kIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKWAgdG8gY29tcGFyZSBtb3VudCBvcHRpb25zLiBXaGlsZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGNvbnRhaW5zIHBhZGRpbmcgYnl0ZXMgYmV0d2VlbiBgY2FjaGVfc3RyYXRlZ3lgICh1bnNpZ25lZCBjaGFyKSBhbmQgYG1vdW50X29wdGAgKHVuc2lnbmVkIGludCksIHRoZSBlbmNsb3NpbmcgYHN0cnVjdCBlcm9mc19zYl9pbmZvYCBpcyBhbHdheXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAgKHdoaWNoIHplcm9lcyB0aGUgbWVtb3J5KSBpbiBgZXJvZnNfaW5pdF9mc19jb250ZXh0YC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyB0aGUgcGFkZGluZyBieXRlcyBpbiBgc2JpLVx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVx1MDAzZW9wdGAgZmllbGRzIGRvIG5vdCBhbHRlciB0aGUgcGFkZGluZyBieXRlcywgbWVhbmluZyB0aGV5IHJlbWFpbiB6ZXJvZWQuIFRoZXJlZm9yZSwgdGhlIGBtZW1jbXBgIG9wZXJhdGlvbiBzYWZlbHkgY29tcGFyZXMgaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjMzOjM4LjM2Mzk2NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIxNjQxMjkxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X3RyZWVfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX3BhcnNlX3BhcmFtXCIsXG4gICAgXCJlcm9mc19mY19maWxsX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19nZXRfdHJlZVwiLFxuICAgIFwiZXJvZnNfZmNfcmVjb25maWd1cmVcIixcbiAgICBcImVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIHNpemVvZihzYmktXFx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXFx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVxcdTAwM2VvcHRgIGZpZWxkcyBkbyBub3QgYWx0ZXIgdGhlIHBhZGRpbmcgYnl0ZXMsIG1lYW5pbmcgdGhleSByZW1haW4gemVyb2VkLiBUaGVyZWZvcmUsIHRoZSBgbWVtY21wYCBvcGVyYXRpb24gc2FmZWx5IGNvbXBhcmVzIGluaXRpYWxpemVkIG1lbW9yeSBhbmQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0sIGFsbG93aW5nIG11bHRpcGxlIG1vdW50cyBvZiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgdG8gc2hhcmUgYSBzaW5nbGUgc3VwZXJibG9jay4gSXQgbW9kaWZpZXMgdGhlIFZGUyBieSBleHBvcnRpbmcgYGdldF90cmVlX3N1cGVyYCBhbmQgYWRkcyBsb2dpYyBpbiBFUk9GUyB0byBwYXJzZSB0aGUgbmV3IG9wdGlvbiBhbmQgaGFuZGxlIHN1cGVyYmxvY2sgc2hhcmluZy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHBhdGhzIGluIGZpbGVzeXN0ZW0gbW91bnRpbmcgYW5kIHN1cGVyYmxvY2sgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjMzOjM4LjM2Mzk3MDk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDA4NTkwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MTE0ZmY3M2Q3ZTQyMTIxMzY1NTYzZDA1ZjM4YzA5OWExZjZkMTgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjMzOjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcXG5pbmRleCBkMzAxZDlhYzk0NmE5Li4wMmNhZjNiMDYxZmVkIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcXG5AQCAtMTM5LDYgKzEzOSw5IEBAIGlub2RlX3NoYXJlICAgICAgICAgICAgRW5hYmxlIGlub2RlIHBhZ2Ugc2hhcmluZyBmb3IgdGhpcyBmaWxlc3lzdGVtLiAgSW5vZGVzIHdpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS5cXG4gc291cmNlPSVzICAgICAgICAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU3BlY2lmeSB0aGUgYmFja2luZyBpbWFnZSBhcyBhIHBhdGhcXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBhcyBhbiBhbHJlYWR5LW9wZW5lZCBmaWxlIGRlc2NyaXB0b3IuXFxuK3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWVcXG4rICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGVcXG4rICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXFxuID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbiBGaWxlLWJhY2tlZCBtb3VudHNcXG5AQCAtMTU2LDYgKzE1OSwxMCBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXRcXG4gcmVzaWRlcyBvbiBhIGJsb2NrIGRldmljZSwgdXNlIHRoZSB0cmFkaXRpb25hbCBibG9jayBkZXZpY2UgbW91bnQgcGF0aFxcbiBpbnN0ZWFkLlxcbiBcXG4rV2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCwgbXVsdGlwbGUgbW91bnRzIG9mIHRoZSBzYW1lIGJhY2tpbmdcXG4rZmlsZSBhdCB0aGUgc2FtZSBmc29mZnNldCB3aXRoIGNvbXBhdGlibGUgbW91bnQgb3B0aW9ucyBjYW4gc2hhcmUgYSBzaW5nbGVcXG4rc3VwZXJibG9jay4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxcbitcXG4gU3lzZnMgRW50cmllc1xcbiA9PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxcbmluZGV4IDU3YmQyMTg1OWM2NWQuLjg2ZGEyMTlmOGY0ZWMgMTAwNjQ0XFxuLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcXG5AQCAtMTU2LDYgKzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcXG4gI2RlZmluZSBFUk9GU19NT1VOVF9EQVhfTkVWRVJcXHRcXHQweDAwMDAwMDgwXFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfRElSRUNUX0lPXFx0XFx0MHgwMDAwMDEwMFxcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0lOT0RFX1NIQVJFXFx0XFx0MHgwMDAwMDIwMFxcbisjZGVmaW5lIEVST0ZTX01PVU5UX1NVUEVSQkxPQ0tfU0hBUkVcXHQweDAwMDAwNDAwXFxuIFxcbiAjZGVmaW5lIGNsZWFyX29wdChvcHQsIG9wdGlvbilcXHQoKG9wdCktXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pXFxuICNkZWZpbmUgc2V0X29wdChvcHQsIG9wdGlvbilcXHQoKG9wdCktXFx1MDAzZW1vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbilcXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcXG5pbmRleCBkZGM5NzE5ZTZkMThlLi5lMWExYTI3ZmJkMThkIDEwMDY0NFxcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcXG4rKysgYi9mcy9lcm9mcy9zdXBlci5jXFxuQEAgLTM4Niw3ICszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSlcXG4gZW51bSB7XFxuIFxcdE9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSxcXG4gXFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcXG4tXFx0T3B0X3NvdXJjZSxcXG4rXFx0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XFxuQEAgLTQxNSw2ICs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHtcXG4gXFx0ZnNwYXJhbV91NjQoXFxcImZzb2Zmc2V0XFxcIixcXHRcXHRcXHRPcHRfZnNvZmZzZXQpLFxcbiBcXHRmc3BhcmFtX2ZsYWcoXFxcImlub2RlX3NoYXJlXFxcIixcXHRcXHRPcHRfaW5vZGVfc2hhcmUpLFxcbiBcXHRmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKFxcXCJzb3VyY2VcXFwiLFxcdE9wdF9zb3VyY2UpLFxcbitcXHRmc3BhcmFtX2ZsYWcoXFxcInN1cGVyYmxvY2tfc2hhcmVcXFwiLFxcdE9wdF9zdXBlcmJsb2NrX3NoYXJlKSxcXG4gXFx0e31cXG4gfTtcXG4gXFxuQEAgLTU2MCw2ICs1NjEsMTIgQEAgc3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIElOT0RFX1NIQVJFKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XFxuK1xcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKVxcbitcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcXFwiLCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBPcHRfc291cmNlOlxcbiBcXHRcXHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XFxuIFxcdH1cXG5AQCAtNjUyLDYgKzY1OSwxNiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRcXHRlcnJvcmZjKGZjLCBcXFwiRlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbitcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkpIHtcXG4rXFx0XFx0ZXJyb3JmYyhmYywgXFxcInN1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2JpLVxcdTAwM2VkZXZzLVxcdTAwM2VleHRyYV9kZXZpY2VzKSB7XFxuK1xcdFxcdGVycm9yZmMoZmMsIFxcXCJzdXBlcmJsb2NrX3NoYXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0cmEgZGV2aWNlc1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0c2JpLVxcdTAwM2VibGtzemJpdHMgPSBQQUdFX1NISUZUO1xcbiBcXHRpZiAoIXNiLVxcdTAwM2VzX2JkZXYpIHtcXG5AQCAtNzc5LDYgKzc5NiwzNSBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXQgaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LFxcbisgKiBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlcyBuZXdfc2JpIGlzIGFsc28gc2hhcmVhYmxlLlxcbisgKi9cXG4rc3RhdGljIGludCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbit7XFxuK1xcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7XFxuK1xcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4rXFxuK1xcdGlmIChzYi1cXHUwMDNlc19pZmxhZ3MgXFx1MDAyNiBTQl9JX1JFVElSRUQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoIXNiaS1cXHUwMDNlZGlmMC5maWxlIHx8ICFuZXdfc2JpLVxcdTAwM2VkaWYwLmZpbGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXFx1MDAzZWRpZjAuZmlsZSkgPT0gZmlsZV9pbm9kZShuZXdfc2JpLVxcdTAwM2VkaWYwLmZpbGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBzYmktXFx1MDAzZWRpZjAuZnNvZmYgPT0gbmV3X3NiaS1cXHUwMDNlZGlmMC5mc29mZiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgIW1lbWNtcChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIHNpemVvZihzYmktXFx1MDAzZW9wdCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbit7XFxuK1xcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cXHUwMDNlc19mc19pbmZvO1xcbitcXG4rXFx0aWYgKCF0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKVxcbitcXHRcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbitcXG4rXFx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIHtcXG4gXFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuQEAgLTc5NCw3ICs4NDAsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0XFx0XFx0ZXJyb3JmYyhmYywgXFxcInNvdXJjZSBpcyB1bnN1cHBvcnRlZFxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbitcXHRcXHRyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsXFxuQEAgLTgxMiw3ICs4NTgsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFxuIFxcdFxcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVxcdTAwM2VkaWYwLmZpbGUpLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBzYmktXFx1MDAzZWRpZjAuZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlcmVhZF9mb2xpbylcXG4tXFx0XFx0XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpO1xcbiBcXHR9XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtODI1LDYgKzg3MSwxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFxuIFxcdERCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7XFxuIFxcbitcXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cXG4rXFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbiBcXHRpZiAobmV3X3NiaS1cXHUwMDNlZG9tYWluX2lkKVxcbiBcXHRcXHRlcm9mc19pbmZvKHNiLCBcXFwiaWdub3JpbmcgcmVjb25maWd1cmF0aW9uIGZvciBkb21haW5faWQuXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMTM4OSw3ICsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbisvKipcXG4rICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXFxuKyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXFxuKyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXFxuKyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrXFxuKyAqXFxuKyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xcbisgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoXFxuKyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxcbisgKi9cXG4raW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxcbiBcXHRcXHRpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXFxuQEAgLTE0MTYsMTIgKzE0MjYsMTMgQEAgc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpO1xcbiBcXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4ge1xcbi1cXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuK1xcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XFxuIFxcbkBAIC0xNDI5LDcgKzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4ge1xcbi1cXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbitcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7XFxuIFxcbkBAIC0xNDM5LDcgKzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbiBcXHRcXHR2b2lkICprZXkpXFxuIHtcXG4gXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IGtleTtcXG4tXFx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbitcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxcbkBAIC0xNTAsNiArMTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xcbiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiBcXG4rZXh0ZXJuIGludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuK1xcdFxcdFxcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXFxuK1xcdFxcdFxcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcXG4gZXh0ZXJuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzM6MzkuMjY1NTQ4MDg2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzUzOTc5MTkxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X3RyZWVfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX3BhcnNlX3BhcmFtXCIsXG4gICAgXCJlcm9mc19mY19maWxsX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19nZXRfdHJlZVwiLFxuICAgIFwiZXJvZnNfZmNfcmVjb25maWd1cmVcIixcbiAgICBcImVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZyBmaWxlIHRvIHNoYXJlIGEgc2luZ2xlIHN1cGVyYmxvY2suIEl0IG1vZGlmaWVzIHRoZSBWRlMgYnkgZXhwb3J0aW5nIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGFkZHMgbG9naWMgaW4gRVJPRlMgdG8gcGFyc2UgdGhlIG5ldyBvcHRpb24gYW5kIGhhbmRsZSBzdXBlcmJsb2NrIHNoYXJpbmcuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSBwYXRocyBpbiBmaWxlc3lzdGVtIG1vdW50aW5nIGFuZCBzdXBlcmJsb2NrIG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTE0ZmY3M2Q3ZTQyMTIxMzY1NTYzZDA1ZjM4YzA5OWExZjZkMTgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTY6MzM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG5pbmRleCBkMzAxZDlhYzk0NmE5Li4wMmNhZjNiMDYxZmVkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG5AQCAtMTM5LDYgKzEzOSw5IEBAIGlub2RlX3NoYXJlICAgICAgICAgICAgRW5hYmxlIGlub2RlIHBhZ2Ugc2hhcmluZyBmb3IgdGhpcyBmaWxlc3lzdGVtLiAgSW5vZGVzIHdpXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlIGNhY2hlLlxuIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBhcyBhbiBhbHJlYWR5LW9wZW5lZCBmaWxlIGRlc2NyaXB0b3IuXG4rc3VwZXJibG9ja19zaGFyZSAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU2hhcmUgdGhlIHN1cGVyYmxvY2sgd2hlbiB0aGUgc2FtZVxuKyAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlXG4rICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXG4gPT09PT09PT09PT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiBGaWxlLWJhY2tlZCBtb3VudHNcbkBAIC0xNTYsNiArMTU5LDEwIEBAIE9ubHkgcmVndWxhciBmaWxlcyBhcmUgYWNjZXB0ZWQgYXMgYmFja2luZyBmaWxlczsgdG8gbW91bnQgYW4gaW1hZ2UgdGhhdFxuIHJlc2lkZXMgb24gYSBibG9jayBkZXZpY2UsIHVzZSB0aGUgdHJhZGl0aW9uYWwgYmxvY2sgZGV2aWNlIG1vdW50IHBhdGhcbiBpbnN0ZWFkLlxuIFxuK1doZW4gc3VwZXJibG9ja19zaGFyZSBpcyBzcGVjaWZpZWQsIG11bHRpcGxlIG1vdW50cyBvZiB0aGUgc2FtZSBiYWNraW5nXG4rZmlsZSBhdCB0aGUgc2FtZSBmc29mZnNldCB3aXRoIGNvbXBhdGlibGUgbW91bnQgb3B0aW9ucyBjYW4gc2hhcmUgYSBzaW5nbGVcbitzdXBlcmJsb2NrLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXG4rXG4gU3lzZnMgRW50cmllc1xuID09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbkBAIC0xNTYsNiArMTU2LDcgQEAgc3RydWN0IGVyb2ZzX3NiX2luZm8ge1xuICNkZWZpbmUgRVJPRlNfTU9VTlRfREFYX05FVkVSXHRcdDB4MDAwMDAwODBcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RJUkVDVF9JT1x0XHQweDAwMDAwMTAwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9JTk9ERV9TSEFSRVx0XHQweDAwMDAwMjAwXG4rI2RlZmluZSBFUk9GU19NT1VOVF9TVVBFUkJMT0NLX1NIQVJFXHQweDAwMDAwNDAwXG4gXG4gI2RlZmluZSBjbGVhcl9vcHQob3B0LCBvcHRpb24pXHQoKG9wdCktXHUwMDNlbW91bnRfb3B0IFx1MDAyNj0gfkVST0ZTX01PVU5UXyMjb3B0aW9uKVxuICNkZWZpbmUgc2V0X29wdChvcHQsIG9wdGlvbilcdCgob3B0KS1cdTAwM2Vtb3VudF9vcHQgfD0gRVJPRlNfTU9VTlRfIyNvcHRpb24pXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbmluZGV4IGRkYzk3MTllNmQxOGUuLmUxYTFhMjdmYmQxOGQgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9zdXBlci5jXG4rKysgYi9mcy9lcm9mcy9zdXBlci5jXG5AQCAtMzg2LDcgKzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIGVudW0ge1xuIFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxuIFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcbi1cdE9wdF9zb3VyY2UsXG4rXHRPcHRfc291cmNlLCBPcHRfc3VwZXJibG9ja19zaGFyZSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbXSA9IHtcbkBAIC00MTUsNiArNDE1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBlcm9mc19mc19wYXJhbWV0ZXJzW10gPSB7XG4gXHRmc3BhcmFtX3U2NChcImZzb2Zmc2V0XCIsXHRcdFx0T3B0X2Zzb2Zmc2V0KSxcbiBcdGZzcGFyYW1fZmxhZyhcImlub2RlX3NoYXJlXCIsXHRcdE9wdF9pbm9kZV9zaGFyZSksXG4gXHRmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKFwic291cmNlXCIsXHRPcHRfc291cmNlKSxcbitcdGZzcGFyYW1fZmxhZyhcInN1cGVyYmxvY2tfc2hhcmVcIixcdE9wdF9zdXBlcmJsb2NrX3NoYXJlKSxcbiBcdHt9XG4gfTtcbiBcbkBAIC01NjAsNiArNTYxLDEyIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRlbHNlXG4gXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZTpcbitcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpXG4rXHRcdFx0ZXJyb3JmYyhmYywgXCIlcyBvcHRpb24gbm90IHN1cHBvcnRlZFwiLCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgT3B0X3NvdXJjZTpcbiBcdFx0cmV0dXJuIGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShmYywgcGFyYW0pO1xuIFx0fVxuQEAgLTY1Miw2ICs2NTksMTYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0ZXJyb3JmYyhmYywgXCJGU0RBWCBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbitcdCAgICB0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkpIHtcbitcdFx0ZXJyb3JmYyhmYywgXCJzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNiaS1cdTAwM2VkZXZzLVx1MDAzZWV4dHJhX2RldmljZXMpIHtcbitcdFx0ZXJyb3JmYyhmYywgXCJzdXBlcmJsb2NrX3NoYXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0cmEgZGV2aWNlc1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRzYmktXHUwMDNlYmxrc3piaXRzID0gUEFHRV9TSElGVDtcbiBcdGlmICghc2ItXHUwMDNlc19iZGV2KSB7XG5AQCAtNzc5LDYgKzc5NiwzNSBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogVGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXQgaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LFxuKyAqIHNvIHRoYXQgdGhlIG1lbWNtcCBsYXRlciBlbnN1cmVzIG5ld19zYmkgaXMgYWxzbyBzaGFyZWFibGUuXG4rICovXG4rc3RhdGljIGludCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Ioc2IpO1xuK1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKm5ld19zYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG4rXG4rXHRpZiAoc2ItXHUwMDNlc19pZmxhZ3MgXHUwMDI2IFNCX0lfUkVUSVJFRClcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAoIXNiaS1cdTAwM2VkaWYwLmZpbGUgfHwgIW5ld19zYmktXHUwMDNlZGlmMC5maWxlKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBmaWxlX2lub2RlKHNiaS1cdTAwM2VkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS1cdTAwM2VkaWYwLmZpbGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHNiaS1cdTAwM2VkaWYwLmZzb2ZmID09IG5ld19zYmktXHUwMDNlZGlmMC5mc29mZiBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpO1xuK31cbitcbitzdGF0aWMgaW50IGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuK3tcbitcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG4rXG4rXHRpZiAoIXRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKVxuK1x0XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuK1xuK1x0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbit9XG4rXG4gc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4ge1xuIFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbkBAIC03OTQsNyArODQwLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdFx0ZXJyb3JmYyhmYywgXCJzb3VyY2UgaXMgdW5zdXBwb3J0ZWRcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcdFx0cmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpO1xuIFx0fVxuIFxuIFx0cmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlcixcbkBAIC04MTIsNyArODU4LDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXG4gXHRcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSktXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHNiaS1cdTAwM2VkaWYwLmZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZXJlYWRfZm9saW8pXG4tXHRcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcdFx0XHRyZXR1cm4gZXJvZnNfZmlsZV9nZXRfdHJlZShmYyk7XG4gXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjUsNiArODcxLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0REJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTtcbiBcbitcdC8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqL1xuK1x0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0aWYgKG5ld19zYmktXHUwMDNlZG9tYWluX2lkKVxuIFx0XHRlcm9mc19pbmZvKHNiLCBcImlnbm9yaW5nIHJlY29uZmlndXJhdGlvbiBmb3IgZG9tYWluX2lkLlwiKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0xMzg5LDcgKzEzODksMTcgQEAgc3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuKy8qKlxuKyAqIGdldF90cmVlX3N1cGVyIC0gR2V0IGEgc3VwZXJibG9jaywgb3B0aW9uYWxseSBzaGFyaW5nIGFuIGV4aXN0aW5nIG9uZVxuKyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXG4rICogQHRlc3Q6IENvbXBhcmlzb24gZnVuY3Rpb24gdG8gZmluZCBhIG1hdGNoaW5nIGV4aXN0aW5nIHN1cGVyYmxvY2ssIG9yIE5VTExcbisgKiBAZmlsbF9zdXBlcjogSGVscGVyIHRvIGluaXRpYWxpc2UgYSBuZXcgc3VwZXJibG9ja1xuKyAqXG4rICogSWYgQHRlc3QgaXMgbm9uLU5VTEwgYW5kIG1hdGNoZXMgYW4gZXhpc3Rpbmcgc3VwZXJibG9jaywgdGhhdCBzdXBlcmJsb2NrIGlzXG4rICogcmV1c2VkOyBvdGhlcndpc2UgYSBuZXcgYW5vbnltb3VzIHN1cGVyYmxvY2sgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGlzZWQgd2l0aFxuKyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxuKyAqL1xuK2ludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcbiBcdFx0aW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbkBAIC0xNDE2LDEyICsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbitFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTtcbiBcbiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHQgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbiB7XG4tXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTtcbiBcbkBAIC0xNDI5LDcgKzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7XG4gXG5AQCAtMTQzOSw3ICsxNDUwLDcgQEAgaW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0dm9pZCAqa2V5KVxuIHtcbiBcdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGtleTtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTtcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbkBAIC0xNTAsNiArMTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKTtcbiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIFxuK2V4dGVybiBpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuK1x0XHRcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4rXHRcdFx0IGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpO1xuIGV4dGVybiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjMzOjM5LjI2NTU0OTU5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMTg0NTk4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRVJPRlMgU3VwZXJibG9jayBTaGFyaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBkaWdnaW5nIGludG8gdGhlIGNvcmUgVkZTIGFuZCB0aGUgRVJPRlMgaW1wbGVtZW50YXRpb24uIFNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiBtb3VudGluZyB0aGUgc2FtZSBiYWNraW5nIGZpbGUgbXVsdGlwbGUgdGltZXMgc291bmRzIGxpa2UgYSBzb2xpZCBvcHRpbWl6YXRpb24sIGJ1dCBhbnl0aGluZyB0aGF0IHRvdWNoZXMgdGhpcyBsZXZlbCBvZiB0aGUgZmlsZXN5c3RlbSwgZXNwZWNpYWxseSBhZGRpbmcgbmV3IG9wdGlvbnMsIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBzY3J1dGlueSBhbmQgdGhvcm91Z2ggdGVzdGluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nOyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBkYXRhIGludGVncml0eSBvciBmaWxlc3lzdGVtIHN0YWJpbGl0eSBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlci5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgcGF0Y2ggY29kZSBpdHNlbGYgaGVscGZ1bGx5IHBvaW50cyBvdXQgYENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRWAgd2l0aGluIGBmcy9lcm9mcy9zdXBlci5jYC4gQ2xlYXJseSwgdGhhdCdzIGEgcHJlcmVxdWlzaXRlIHRvIGVuYWJsZSB0aGUgYHN1cGVyYmxvY2tfc2hhcmVgIG9wdGlvbi4gSXQgZXhwbGljaXRseSBjaGVja3MgZm9yIGl0OlxuXG5gYGBjXG4gICAgY2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZTpcbiAgICAgIGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKVxuICAgICAgICBlcnJvcmZjKGZjLCBcIiVzIG9wdGlvbiBub3Qgc3VwcG9ydGVkXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbiAgICAgIGVsc2VcbiAgICAgICAgc2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbiAgICAgIGJyZWFrO1xuYGBgXG5cbkl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaWYgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCBpcyBub3QgZW5hYmxlZCwgdGhlIG1vdW50IG9wdGlvbiB3aWxsIGJlIHJlamVjdGVkLiBPYnZpb3VzbHksIGBFUk9GU19GU2AgaXMgcmVxdWlyZWQgdG8gYWN0dWFsbHkgZW5hYmxlIEVST0ZTIGluIHRoZSBmaXJzdCBwbGFjZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uc3VsdCB0aGUgYGZzL2Vyb2ZzL0tjb25maWdgIGZpbGUgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcyBvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAuIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozMzo0Ni4zODQwMTI1MjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNjMxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9LY29uZmlnPTg1PWNvbmZpZyBFUk9GU19GU19TRUNVUklUWVxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy05Ny1cXG5mcy9lcm9mcy9LY29uZmlnOjk4OmNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxcbmZzL2Vyb2ZzL0tjb25maWctOTktXFx0Ym9vbCBcXFwiRmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozMzo0Ni40MjgxNzk2ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc3MTA0NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEVST0ZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBhc3BlY3Qgb2YgRVJPRlMgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIEVST0ZTIGZpbGVzeXN0ZW0gZGlyZWN0b3J5LiBMZXQncyBzdGFydCB3aXRoIGBmcy9lcm9mcy9LY29uZmlnYCBhbmQsIGdpdmVuIG15IGdlbmVyYWwgZmFtaWxpYXJpdHkgd2l0aCB0aGVzZSBmaWxlcywgSSdsbCBzdGFydCBsb29raW5nIGFyb3VuZCBsaW5lIDk4LiBUaGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHBvaW50IHRvIGJlZ2luOyB0aGF0IGxpbmUgbGlrZWx5IGNvdmVycyBhIHNwZWNpZmljIGZlYXR1cmUgb3Igb3B0aW9uIEknbSB0cnlpbmcgdG8gaWRlbnRpZnkuIFRpbWUgdG8gZ2V0IG15IGV5ZXMgb24gdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzM6NTAuMzA1Mjg2Mjg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHQgIFNlY3VyaXR5IGxhYmVscyBwcm92aWRlIGFuIGFjY2VzcyBjb250cm9sIGZhY2lsaXR5IHRvIHN1cHBvcnQgTGludXhcXG4gIDkxOlxcdFxcdCAgU2VjdXJpdHkgTW9kZWxzIChMU01zKSBhY2NlcHRlZCBieSBBcHBBcm1vciwgU0VMaW51eCwgU21hY2sgYW5kIFRPTU9ZT1xcbiAgOTI6XFx0XFx0ICBMaW51eC4gVGhpcyBvcHRpb24gZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZVxcbiAgOTM6XFx0XFx0ICBzZWN1cml0eSBsYWJlbHMgaW4gdGhlIGVyb2ZzIGZpbGVzeXN0ZW0sIHNvIHRoYXQgaXQgcmVxdWlyZXMgZW5hYmxpbmdcXG4gIDk0OlxcdFxcdCAgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IGluIGFkdmFuY2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUsIHNheSBOLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcXG4gIDk5OlxcdFxcdGJvb2wgXFxcIkZpbGUtYmFja2VkIEVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMTAwOlxcdFxcdGRlcGVuZHMgb24gRVJPRlNfRlNcXG4gMTAxOlxcdFxcdGRlZmF1bHQgeVxcbiAxMDI6XFx0XFx0aGVscFxcbiAxMDM6XFx0XFx0ICBUaGlzIGFsbG93cyBFUk9GUyB0byB1c2UgZmlsZXN5c3RlbSBpbWFnZSBmaWxlcyBkaXJlY3RseSwgd2l0aG91dFxcbiAxMDQ6XFx0XFx0ICB0aGUgaW50ZXJjZXNzaW9uIG9mIGxvb3BiYWNrIGJsb2NrIGRldmljZXMgb3IgbGlrZXdpc2UuIEl0IGlzXFxuIDEwNTpcXHRcXHQgIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGNvbnRhaW5lciBpbWFnZXMgd2l0aCBudW1lcm91cyBibG9icyBhbmRcXG4gMTA2OlxcdFxcdCAgb3RoZXIgc2FuZGJveGVzLCB3aGVyZSBsb29wIGRldmljZXMgYmVoYXZlIGludHJpY2F0ZWx5LiAgSXQgY2FuIGFsc29cXG4gMTA3OlxcdFxcdCAgYmUgdXNlZCB0byBzaW1wbGlmeSBlcnJvci1wcm9uZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIHVubmVjZXNzYXJ5XFxuIDEwODpcXHRcXHQgIHZpcnR1YWwgYmxvY2sgZGV2aWNlcy5cXG4gMTA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozMzo1MC4zMDUzNTE2OThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzUxNTk4ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFUk9GUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgRVJPRlMgcGF0Y2guIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYEVST0ZTX0ZTYCBhbmQgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGFuZCBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcy5cblxuRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyB0aGVzZSBmdW5jdGlvbnM6IGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIChuZXcpLCBgZXJvZnNfZmlsZV9nZXRfdHJlZWAgKG5ldyksIGBlcm9mc19mY19nZXRfdHJlZWAsIGBlcm9mc19mY19yZWNvbmZpZ3VyZWAsIGFuZCBhbHNvIGBnZXRfdHJlZV9zdXBlcmAgKHdoaWNoIGlzIG5ld2x5IGV4cG9ydGVkLCBwcmV2aW91c2x5IGB2ZnNfZ2V0X3N1cGVyYCkuXG5cblRoZSBwcm9tcHQncyBndWlkYW5jZSBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiBJIHNlZSB0aGF0IGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYCBhbmQgYGVyb2ZzX2ZpbGVfZ2V0X3RyZWVgIGFyZSBpbmRlZWQgc3RhdGljLiBUaGF0IG1lYW5zIHRoZXkgYXJlIGludGVybmFsIHRvIHRoZSBtb2R1bGUsIG5vdCBhbiBleHRlcm5hbGx5IGFjY2Vzc2libGUgZW50cnlwb2ludC4gSSB3YW50IHRvIGF2b2lkIGZvY3VzaW5nIG9uIHRoZXNlIGlmIHRoZXJlJ3MgYSBnb29kIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUuXG5cblNvLCBhY2NvcmRpbmcgdG8gbXkgaW5pdGlhbCBhbmFseXNpcywgSSBzaG91bGQgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlYCwgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCwgYW5kIHRoZSBuZXdseSBleHBvcnRlZCBgZ2V0X3RyZWVfc3VwZXJgLlxuXG5Pa2F5LCBJJ3ZlIGNoZWNrZWQgYW5kIHRoZXNlIGZ1bmN0aW9uczogYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYCwgYGVyb2ZzX2ZjX2ZpbGxfc3VwZXJgLCBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBhbmQgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCdzIGEgYml0IGRpc2FwcG9pbnRpbmcuIEJ1dCB3YWl0Li4uIGV2ZW4gaWYgdGhleSdyZSBzdGF0aWMsIHRoZXkncmUgdXNlZCBhcyBjYWxsYmFja3Mgd2l0aGluIGBmc19jb250ZXh0X29wZXJhdGlvbnNgLiBUaGF0IGNoYW5nZXMgdGhpbmdzLCBpdCBtYWtlcyB0aGVtIG1vcmUgaW1wb3J0YW50LlxuXG5BaCwgYnV0IGBnZXRfdHJlZV9zdXBlcmAgaW4gYGZzL3N1cGVyLmNgIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLiBTbywgdGhhdCBvbmUgbG9va3MgcHJvbWlzaW5nLlxuXG5Ob3csIGNvbmNlcm5pbmcgYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYCBzcGVjaWZpY2FsbHksIGl0ICppcyogc3RhdGljLCB3aGljaCBpc24ndCBpZGVhbCwgYnV0IGl0J3MgYW4gZW50cnkgcG9pbnQgZm9yIHBhcnNpbmcgbW91bnQgb3B0aW9ucywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzLCBpdCdzIHBvc3NpYmxlIHRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLlxuXG5MZXQgbWUgdGhpbmsuLi4gaXMgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiBgZnMvZXJvZnMvc3VwZXIuY2AgdGhhdCBjb3VsZCBiZSB1c2VkPyBUaGF0J3Mgd2hhdCBJIGhhdmUgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozMzo1OS42NTY5NTM4ODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0OTMwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXJvZnNfZmNfcGFyc2VfcGFyYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9zdXBlci5jPTQ0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTQ3Ni1cXG5mcy9lcm9mcy9zdXBlci5jOjQ3NzpzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG5mcy9lcm9mcy9zdXBlci5jLTQ3OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGVyb2ZzX2NvbnRleHRfb3BzID0ge1xcbmZzL2Vyb2ZzL3N1cGVyLmM6OTQzOlxcdC5wYXJzZV9wYXJhbVxcdD0gZXJvZnNfZmNfcGFyc2VfcGFyYW0sXFxuZnMvZXJvZnMvc3VwZXIuYy05NDQtXFx0LmdldF90cmVlICAgICAgID0gZXJvZnNfZmNfZ2V0X3RyZWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjMzOjU5LjcwNDQ1MTQxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTYzNTkwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBFUk9GUyBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBFUk9GUyBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBgZXJvZnNfY29udGV4dF9vcHNgIGFuZCB0aGUgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoYXQgYGVyb2ZzX2NvbnRleHRfb3BzYCBtdXN0IGJlIGEgY3JpdGljYWwgc3RydWN0dXJlLCBsaWtlbHkgY29udGFpbmluZyBwb2ludGVycyB0byB0aGUgY29yZSBvcGVyYXRpb25hbCBmdW5jdGlvbnMgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBJdCBzZWVtcyB0aGF0IHRoaXMgc3RydWN0dXJlIGlzIHdoYXQgZ2V0cyBzZXQgZHVyaW5nIHRoZSBtb3VudCB0aW1lIG9wZXJhdGlvbiBzbyB0aGF0IHRoZSBmaWxlc3lzdGVtIGRyaXZlciBjYW4gaG9vayBpbnRvIGFueSBuZWVkZWQgbW91bnQgcGFyYW1ldGVycy4gVGhlIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIGZ1bmN0aW9uIG11c3QgYmUgdGhlIHBvaW50IHdoZXJlIHRoaXMgYWxsIGdldHMgc3RpdGNoZWQgdG9nZXRoZXIuIFRoZXJlZm9yZSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24gaXMgYSBjcml0aWNhbCBwaWVjZSBpbiB1bmRlcnN0YW5kaW5nIHRoZSBib290IG9wZXJhdGlvbiBmb3IgYW4gRVJPRlMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIGxvb2sgaW50byB0aGF0IHJlbGF0aW9uc2hpcCBhIGJpdCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6MDMuNjAwODEyNDE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM0NDc3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcm9mc19pbml0X2ZzX2NvbnRleHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9zdXBlci5jPTk0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBlcm9mc19jb250ZXh0X29wcyA9IHtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtOTQ4LVxcbmZzL2Vyb2ZzL3N1cGVyLmM6OTQ5OnN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9lcm9mcy9zdXBlci5jLTk1MC17XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTEwMDk9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGVyb2ZzX2ZzX3R5cGUgPSB7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTEwMTEtXFx0Lm5hbWUgICAgICAgICAgID0gXFxcImVyb2ZzXFxcIixcXG5mcy9lcm9mcy9zdXBlci5jOjEwMTI6XFx0LmluaXRfZnNfY29udGV4dCA9IGVyb2ZzX2luaXRfZnNfY29udGV4dCxcXG5mcy9lcm9mcy9zdXBlci5jLTEwMTMtXFx0LmtpbGxfc2IgICAgICAgID0gZXJvZnNfa2lsbF9zYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6MDMuNjQ2MTYyODkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTMyMjg3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEVST0ZTIEZ1enppbmcgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgdGhpcyBFUk9GUyBjb2RlLCBwYXJ0aWN1bGFybHkgaW4gbGlnaHQgb2YgdGhpcyBuZXcgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbi4gVGhlIHByb21wdCBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgZ2V0X3RyZWVfc3VwZXJgIGFzIHRoZSBmb2N1cyBiZWNhdXNlIGl0J3Mgbm9uLXN0YXRpYywgYnV0IEkgYWxzbyBjb25zaWRlcmVkIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgc2luY2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHN5emthbGxlciBhcyBsb25nIGFzIHRoZXkgYXJlbid0IGlubGluZWQsIGJ1dCBJIHJlYWxpemVkIGBnZXRfdHJlZV9zdXBlcmAgaXMgYSBzdWl0YWJsZSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50LlxuXG5Ob3csIHdoYXQgYWJvdXQgRVJPRlMtc3BlY2lmaWMgZnVuY3Rpb25zPyBHaXZlbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSwgaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgb24gdGhlIHN0YXRpYyBvbmVzIHRoYXQgYXJlIHVzZWQgYXMgY2FsbGJhY2tzLiBTaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuLCB0aGV5J3JlIHVubGlrZWx5IHRvIGJlIGlubGluZWQuIEkgd2FzIGluaXRpYWxseSBnb2luZyB0byBsaXN0OlxuXG4qICAgYGdldF90cmVlX3N1cGVyYFxuKiAgIGBlcm9mc19mY19wYXJzZV9wYXJhbWBcbiogICBgZXJvZnNfZmNfZmlsbF9zdXBlcmBcbiogICBgZXJvZnNfZmNfZ2V0X3RyZWVgXG4qICAgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYFxuXG5UaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBlcm9mc19maWxlX2dldF90cmVlYCBhbmQgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGFyZSBhbHNvIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgYWxzbyB0YWtlbi4gYGVyb2ZzX2ZpbGVfZ2V0X3RyZWVgIGlzIGNhbGxlZCBkaXJlY3RseSBieSBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBhbmQgYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrIHRvIGBnZXRfdHJlZV9zdXBlcmAsIHNvIGl0cyBhZGRyZXNzIGlzIGFsc28gdGFrZW4uIFRoZXNlIGFyZSBpbXBvcnRhbnQuXG5cblNvLCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGdldF90cmVlX3N1cGVyYCBhbmQgYWxsIHRoZXNlIEVST0ZTIGNhbGxiYWNrIGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBlcm9mc19mY19wYXJzZV9wYXJhbWAsIGBlcm9mc19mY19maWxsX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlYCwgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCwgYW5kIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYGdldF90cmVlX3N1cGVyYCBpcyBpbmRlZWQgdGhlIG9ubHkgZXhwb3J0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbiBoZXJlLiBZZXMsIGl0J3MgZXhwb3J0ZWQsIHNvIHRoYXQgbG9va3MgY29ycmVjdC5cblxuUmVnYXJkaW5nIHRoZSBvdmVyYWxsIHN0cmF0ZWd5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IGNvZGUgcGF0aHMgcmVsYXRlZCB0byBtb3VudGluZyBhbmQgc3VwZXJibG9jayBtYW5hZ2VtZW50IGR1ZSB0byB0aGUgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbi4gVGhhdCBvcGVucyB1cCBwb3RlbnRpYWwgZnV6emluZyBvcHBvcnR1bml0aWVzIGluIHRoZSBFUk9GUyBmaWxlc3lzdGVtIGNvZGUsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIFZGUy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgYm90aCBgRVJPRlNfRlNgIGFuZCBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIHRvIGNvdmVyIHRoZXNlIG5ldyBwYXRocyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI4MCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6MTQuNTc4NDUxOTY0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwMTA3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVST0ZTX0ZTXCIsXG4gICAgXCJFUk9GU19GU19CQUNLRURfQllfRklMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdldF90cmVlX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19wYXJzZV9wYXJhbVwiLFxuICAgIFwiZXJvZnNfZmNfZmlsbF9zdXBlclwiLFxuICAgIFwiZXJvZnNfZmNfZ2V0X3RyZWVcIixcbiAgICBcImVyb2ZzX2ZjX3JlY29uZmlndXJlXCIsXG4gICAgXCJlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgbXVsdGlwbGUgbW91bnRzIG9mIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSB0byBzaGFyZSBhIHNpbmdsZSBzdXBlcmJsb2NrLiBJdCBtb2RpZmllcyB0aGUgVkZTIGJ5IGV4cG9ydGluZyBgZ2V0X3RyZWVfc3VwZXJgIGFuZCBhZGRzIGxvZ2ljIGluIEVST0ZTIHRvIHBhcnNlIHRoZSBuZXcgb3B0aW9uIGFuZCBoYW5kbGUgc3VwZXJibG9jayBzaGFyaW5nLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNvZGUgcGF0aHMgaW4gZmlsZXN5c3RlbSBtb3VudGluZyBhbmQgc3VwZXJibG9jayBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfdHJlZV9zdXBlclwiLFxuICAgIFwiZXJvZnNfZmNfcGFyc2VfcGFyYW1cIixcbiAgICBcImVyb2ZzX2ZjX2ZpbGxfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX2dldF90cmVlXCIsXG4gICAgXCJlcm9mc19mY19yZWNvbmZpZ3VyZVwiLFxuICAgIFwiZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0sIGFsbG93aW5nIG11bHRpcGxlIG1vdW50cyBvZiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgdG8gc2hhcmUgYSBzaW5nbGUgc3VwZXJibG9jay4gSXQgbW9kaWZpZXMgdGhlIFZGUyBieSBleHBvcnRpbmcgYGdldF90cmVlX3N1cGVyYCBhbmQgYWRkcyBsb2dpYyBpbiBFUk9GUyB0byBwYXJzZSB0aGUgbmV3IG9wdGlvbiBhbmQgaGFuZGxlIHN1cGVyYmxvY2sgc2hhcmluZy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHBhdGhzIGluIGZpbGVzeXN0ZW0gbW91bnRpbmcgYW5kIHN1cGVyYmxvY2sgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjE0LjY2MzQ4Mzc4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1ODY0NjAxMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6MTQuNjY0MDczMTg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNTg2NDAwODAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBhbmQgYWxsb3dzIHNoYXJpbmcgc3VwZXJibG9ja3Mgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUgb3B0aW9ucy4gSXQgdXNlcyBgbWVtY21wKFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgXFx1MDAyNm5ld19zYmktXFx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cXHUwMDNlb3B0KSlgIHRvIGNvbXBhcmUgbW91bnQgb3B0aW9ucy4gV2hpbGUgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCBjb250YWlucyBwYWRkaW5nIGJ5dGVzIGJldHdlZW4gYGNhY2hlX3N0cmF0ZWd5YCAodW5zaWduZWQgY2hhcikgYW5kIGBtb3VudF9vcHRgICh1bnNpZ25lZCBpbnQpLCB0aGUgZW5jbG9zaW5nIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AgaXMgYWx3YXlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgICh3aGljaCB6ZXJvZXMgdGhlIG1lbW9yeSkgaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGAuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0dXJlLCBpbmNsdWRpbmcgdGhlIHBhZGRpbmcgYnl0ZXMgaW4gYHNiaS1cXHUwMDNlb3B0YCwgaXMgemVyby1pbml0aWFsaXplZC4gU3Vic2VxdWVudCBtb2RpZmljYXRpb25zIHRvIGBzYmktXFx1MDAzZW9wdGAgZmllbGRzIGRvIG5vdCBhbHRlciB0aGUgcGFkZGluZyBieXRlcywgbWVhbmluZyB0aGV5IHJlbWFpbiB6ZXJvZWQuIFRoZXJlZm9yZSwgdGhlIGBtZW1jbXBgIG9wZXJhdGlvbiBzYWZlbHkgY29tcGFyZXMgaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTExNGZmNzNkN2U0MjEyMTM2NTU2M2QwNWYzOGMwOTlhMWY2ZDE4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjMzOjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuaW5kZXggZDMwMWQ5YWM5NDZhOS4uMDJjYWYzYjA2MWZlZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuQEAgLTEzOSw2ICsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS5cbiBzb3VyY2U9JXMgICAgICAgICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTcGVjaWZ5IHRoZSBiYWNraW5nIGltYWdlIGFzIGEgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLlxuK3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWVcbisgICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZVxuKyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gRmlsZS1iYWNrZWQgbW91bnRzXG5AQCAtMTU2LDYgKzE1OSwxMCBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXRcbiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoXG4gaW5zdGVhZC5cbiBcbitXaGVuIHN1cGVyYmxvY2tfc2hhcmUgaXMgc3BlY2lmaWVkLCBtdWx0aXBsZSBtb3VudHMgb2YgdGhlIHNhbWUgYmFja2luZ1xuK2ZpbGUgYXQgdGhlIHNhbWUgZnNvZmZzZXQgd2l0aCBjb21wYXRpYmxlIG1vdW50IG9wdGlvbnMgY2FuIHNoYXJlIGEgc2luZ2xlXG4rc3VwZXJibG9jay4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuK1xuIFN5c2ZzIEVudHJpZXNcbiA9PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbmluZGV4IDU3YmQyMTg1OWM2NWQuLjg2ZGEyMTlmOGY0ZWMgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5AQCAtMTU2LDYgKzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlx0XHQweDAwMDAwMDgwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cdFx0MHgwMDAwMDEwMFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcdFx0MHgwMDAwMDIwMFxuKyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRVx0MHgwMDAwMDQwMFxuIFxuICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCBcdTAwMjY9IH5FUk9GU19NT1VOVF8jI29wdGlvbilcbiAjZGVmaW5lIHNldF9vcHQob3B0LCBvcHRpb24pXHQoKG9wdCktXHUwMDNlbW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKVxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jXG5pbmRleCBkZGM5NzE5ZTZkMThlLi5lMWExYTI3ZmJkMThkIDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xuKysrIGIvZnMvZXJvZnMvc3VwZXIuY1xuQEAgLTM4Niw3ICszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSlcbiBlbnVtIHtcbiBcdE9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSxcbiBcdE9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsXG4tXHRPcHRfc291cmNlLFxuK1x0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XG5AQCAtNDE1LDYgKzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0ge1xuIFx0ZnNwYXJhbV91NjQoXCJmc29mZnNldFwiLFx0XHRcdE9wdF9mc29mZnNldCksXG4gXHRmc3BhcmFtX2ZsYWcoXCJpbm9kZV9zaGFyZVwiLFx0XHRPcHRfaW5vZGVfc2hhcmUpLFxuIFx0ZnNwYXJhbV9maWxlX29yX3N0cmluZyhcInNvdXJjZVwiLFx0T3B0X3NvdXJjZSksXG4rXHRmc3BhcmFtX2ZsYWcoXCJzdXBlcmJsb2NrX3NoYXJlXCIsXHRPcHRfc3VwZXJibG9ja19zaGFyZSksXG4gXHR7fVxuIH07XG4gXG5AQCAtNTYwLDYgKzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ZWxzZVxuIFx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XG4rXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKVxuK1x0XHRcdGVycm9yZmMoZmMsIFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcIiwgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE9wdF9zb3VyY2U6XG4gXHRcdHJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTtcbiBcdH1cbkBAIC02NTIsNiArNjU5LDE2IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdGVycm9yZmMoZmMsIFwiRlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4rXHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG4rXHRcdGVycm9yZmMoZmMsIFwic3VwZXJibG9ja19zaGFyZSBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbitcdCAgICBzYmktXHUwMDNlZGV2cy1cdTAwM2VleHRyYV9kZXZpY2VzKSB7XG4rXHRcdGVycm9yZmMoZmMsIFwic3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXNcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuIFx0c2JpLVx1MDAzZWJsa3N6Yml0cyA9IFBBR0VfU0hJRlQ7XG4gXHRpZiAoIXNiLVx1MDAzZXNfYmRldikge1xuQEAgLTc3OSw2ICs3OTYsMzUgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFRoZSBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgd2l0aCBhIHNiaSB0aGF0IGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCxcbisgKiBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlcyBuZXdfc2JpIGlzIGFsc28gc2hhcmVhYmxlLlxuKyAqL1xuK3N0YXRpYyBpbnQgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTtcbitcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0aWYgKHNiLVx1MDAzZXNfaWZsYWdzIFx1MDAyNiBTQl9JX1JFVElSRUQpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFzYmktXHUwMDNlZGlmMC5maWxlIHx8ICFuZXdfc2JpLVx1MDAzZWRpZjAuZmlsZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXHUwMDNlZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktXHUwMDNlZGlmMC5maWxlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBzYmktXHUwMDNlZGlmMC5mc29mZiA9PSBuZXdfc2JpLVx1MDAzZWRpZjAuZnNvZmYgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIW1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKTtcbit9XG4rXG4rc3RhdGljIGludCBlcm9mc19maWxlX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0aWYgKCF0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbitcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlciwgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIHtcbiBcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG5AQCAtNzk0LDcgKzg0MCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0XHRcdGVycm9yZmMoZmMsIFwic291cmNlIGlzIHVuc3VwcG9ydGVkXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXHRcdHJldHVybiBlcm9mc19maWxlX2dldF90cmVlKGZjKTtcbiBcdH1cbiBcbiBcdHJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsXG5AQCAtODEyLDcgKzg1OCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0XHRpZiAoU19JU1JFRyhmaWxlX2lub2RlKHNiaS1cdTAwM2VkaWYwLmZpbGUpLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBzYmktXHUwMDNlZGlmMC5maWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VyZWFkX2ZvbGlvKVxuLVx0XHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXHRcdFx0cmV0dXJuIGVyb2ZzX2ZpbGVfZ2V0X3RyZWUoZmMpO1xuIFx0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtODI1LDYgKzg3MSwxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcbiBcdERCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7XG4gXG4rXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbiBcdGlmIChuZXdfc2JpLVx1MDAzZWRvbWFpbl9pZClcbiBcdFx0ZXJvZnNfaW5mbyhzYiwgXCJpZ25vcmluZyByZWNvbmZpZ3VyYXRpb24gZm9yIGRvbWFpbl9pZC5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMTM4OSw3ICsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbisvKipcbisgKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmVcbisgKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVyc1xuKyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXG4rICogQGZpbGxfc3VwZXI6IEhlbHBlciB0byBpbml0aWFsaXNlIGEgbmV3IHN1cGVyYmxvY2tcbisgKlxuKyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xuKyAqIHJldXNlZDsgb3RoZXJ3aXNlIGEgbmV3IGFub255bW91cyBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpc2VkIHdpdGhcbisgKiBAZmlsbF9zdXBlci4gIFBhc3NpbmcgTlVMTCBmb3IgQHRlc3QgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgc3VwZXJibG9jay5cbisgKi9cbitpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4gXHRcdGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHQgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG5AQCAtMTQxNiwxMiArMTQyNiwxMyBAQCBzdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7XG4gXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuK1x0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XG4gXG5AQCAtMTQyOSw3ICsxNDQwLDcgQEAgaW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuIHtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zaW5nbGUpO1xuIFxuQEAgLTE0MzksNyArMTQ1MCw3IEBAIGludCBnZXRfdHJlZV9rZXllZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdHZvaWQgKmtleSlcbiB7XG4gXHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBrZXk7XG4tXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5pbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5AQCAtMTUwLDYgKzE1MCwxMCBAQCBleHRlcm4gaW50IHZmc19wYXJzZV9mc19wYXJhbV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG4gZXh0ZXJuIHZvaWQgZmNfZHJvcF9sb2NrZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiBcbitleHRlcm4gaW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbitcdFx0XHQgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuK1x0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiBleHRlcm4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHQgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDoxNC42NjQwNzU4ODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNTMzMDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFUk9GUyBTdXBlcmJsb2NrIFNoYXJpbmcgLSBQb3RlbnRpYWwgUGl0ZmFsbHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uLCBgc3VwZXJibG9ja19zaGFyZWAsIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbS4gVGhlIGdvYWwgaXMgY2xlYXI6IHNoYXJlIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBpZGVudGljYWwgb3B0aW9ucy4gU2VlbXMgZWZmaWNpZW50LCByaWdodD8gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBtb2RpZmljYXRpb24gaXMgaW4gYGZzL2Vyb2ZzL3N1cGVyLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhhdCdzIHdoZXJlIHRoZSBzdXBlcmJsb2NrIGhhbmRsaW5nIGxvZ2ljIHJlc2lkZXMuIFRoZXkndmUgYWRkZWQgY29kZSB0byBwYXJzZSB0aGUgYHN1cGVyYmxvY2tfc2hhcmVgIG9wdGlvbiBhbmQgdHJpZ2dlciB0aGUgc2hhcmluZyBiZWhhdmlvci4gVGhleSd2ZSBhbHNvIGltcGxlbWVudGVkIGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiB0d28gbW91bnRzIGFyZSBjb21wYXRpYmxlIGZvciBzdXBlcmJsb2NrIHNoYXJpbmcuXG5cbkFoLCBidXQgd2FpdCBhIHNlY29uZC4gVGhlIGNydWNpYWwgcGFydCBvZiB0aGlzIGNvbXBhdGliaWxpdHkgY2hlY2sgcmVsaWVzIG9uIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBOb3csIHRoYXQgKmdlbmVyYWxseSogd29ya3MgZm9yIGNvbXBhcmluZyBzdHJ1Y3R1cmVzLCBidXQuLi4gaXMgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGNvbXBhcmlzb24/IFdlIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgbWVtb3J5IGNhbiBiZSB1bmluaXRpYWxpemVkLCBvciBjb250YWluIHBhZGRpbmcuIElmIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgaGFzIHBhZGRpbmcsIG9yIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcywgdGhpcyBgbWVtY21wYCB3aWxsIGJlIGEgcmVjaXBlIGZvciBwb3RlbnRpYWxseSBpbmNvcnJlY3Qgb3IgdW5leHBlY3RlZCByZXN1bHRzLiBUaGUgY29tcGFyaXNvbiBtaWdodCBtaXN0YWtlbmx5IG1hcmsgaW5jb21wYXRpYmxlIG1vdW50cyBhcyBjb21wYXRpYmxlLCBvciB3b3JzZSwgbWFyayBjb21wYXRpYmxlIG1vdW50cyBhcyBpbmNvbXBhdGlibGUgaWYgdGhhdCBwYWRkaW5nIGlzIGRpZmZlcmVudC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgcmlnaHQgbm93IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIHdvbid0IGNhdXNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDoxOS43Njk0MDkxNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQyNjYzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGVyb2ZzX21vdW50X29wdHMgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvaW50ZXJuYWwuaD01ND1lbnVtIHtcXG4tLVxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNTktXFxuZnMvZXJvZnMvaW50ZXJuYWwuaDo2MDpzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyB7XFxuZnMvZXJvZnMvaW50ZXJuYWwuaC02MS1cXHQvKiBjdXJyZW50IHN0cmF0ZWd5IG9mIGhvdyB0byB1c2UgbWFuYWdlZCBjYWNoZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDoyMi4yOTM2ODE1NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1OTQ5NTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJlIG9mIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIEZvcmdldCB0aGUgc3VwZXJmaWNpYWw7IEkgbmVlZCB0aGUgZnVsbCwgZ3JhbnVsYXIgZGVmaW5pdGlvbi4gV2hhdCBhcmUgYWxsIHRoZSBpbmRpdmlkdWFsIG1lbWJlcnM/IFdoYXQgZGF0YSB0eXBlcyBhcmUgdGhleT8gQXJlIHRoZXJlIGFueSBiaXRmaWVsZHMsIGFuZCBpZiBzbywgaG93IGFyZSB0aGV5IGRlZmluZWQ/IEFueSB1bmlvbnM/IEZsYWdzPyBEZWZhdWx0cz8gSSB3YW50IHRvIHNlZSB0aGUgd2hvbGUgZW5jaGlsYWRhLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGtlcm5lbCBleHBlY3RzIHRoaXMgZGF0YSB0byBiZSBvcmdhbml6ZWQuIEl04oCZcyB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZXJvZnMgZmlsZXN5c3RlbSBpcyBjb25maWd1cmVkIGFuZCBvcGVyYXRlcyBhdCBtb3VudCB0aW1lLCBhbmQgSSdtIG5vdCBnb2luZyB0byBwcm9jZWVkIHdpdGhvdXQgYSBzb2xpZCBncmlwIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGlzIGNyaXRpY2FsIHN0cnVjdC4gVGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZTogV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBvcHRpb24sIGhvdyBjYW4gdGhlIG9wdGlvbnMgYWZmZWN0IHBlcmZvcm1hbmNlLCBvciB3aGF0IHRyYWRlLW9mZnMgd2VyZSBtYWRlLiBPbmx5IGJ5IHRydWx5IHNlZWluZyB0aGUgaW50ZXJuYWxzIGNhbiBJIG1ha2UgYSBzb3VuZCBqdWRnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDoyNi43NTMxNzk5MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvaW50ZXJuYWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1OTpcXHRcXG4gIDYwOlxcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzIHtcXG4gIDYxOlxcdFxcdC8qIGN1cnJlbnQgc3RyYXRlZ3kgb2YgaG93IHRvIHVzZSBtYW5hZ2VkIGNhY2hlICovXFxuICA2MjpcXHRcXHR1bnNpZ25lZCBjaGFyIGNhY2hlX3N0cmF0ZWd5O1xcbiAgNjM6XFx0XFx0dW5zaWduZWQgaW50IG1vdW50X29wdDtcXG4gIDY0OlxcdH07XFxuICA2NTpcXHRcXG4gIDY2OlxcdHN0cnVjdCBlcm9mc19kZXZfY29udGV4dCB7XFxuICA2NzpcXHRcXHRzdHJ1Y3QgaWRyIHRyZWU7XFxuICA2ODpcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHR1bnNpZ25lZCBpbnQgZXh0cmFfZGV2aWNlcztcXG4gIDcxOlxcdFxcdGJvb2wgZmxhdGRldjtcXG4gIDcyOlxcdH07XFxuICA3MzpcXHRcXG4gIDc0OlxcdC8qIGFsbCBmaWxlc3lzdGVtLXdpZGUgbHo0IGNvbmZpZ3VyYXRpb25zICovXFxuICA3NTpcXHRzdHJ1Y3QgZXJvZnNfc2JfbHo0X2luZm8ge1xcbiAgNzY6XFx0XFx0LyogIyBvZiBwYWdlcyBuZWVkZWQgZm9yIEVST0ZTIGx6NCByb2xsaW5nIGRlY29tcHJlc3Npb24gKi9cXG4gIDc3OlxcdFxcdHUxNiBtYXhfZGlzdGFuY2VfcGFnZXM7XFxuICA3ODpcXHRcXHQvKiBtYXhpbXVtIHBvc3NpYmxlIGJsb2NrcyBmb3IgcGNsdXN0ZXJzIGluIHRoZSBmaWxlc3lzdGVtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjI2Ljc1MzI3ODExOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDA4Njk1NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgQ29uY2VybnMgaW4gRVJPRlMgTW91bnQgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBJbnRlcmVzdGluZywgYW4gYHVuc2lnbmVkIGNoYXJgIGZvbGxvd2VkIGJ5IGFuIGB1bnNpZ25lZCBpbnRgLiBJbW1lZGlhdGVseSwgSSBzcG90IGl0OiB0aHJlZSBieXRlcyBvZiBwYWRkaW5nISBUaGF0J3MgYSByZWQgZmxhZy4gSWYgYHNiaS1cdTAwM2VvcHRgIGlzbid0IGVudGlyZWx5IHplcm9lZCBvdXQsIHRoZW4gdGhlIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgIGNhbGwgaXMgZ29pbmcgdG8gcmVhZCB0aG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMuIEJpbmdvLCB0aGF0J3MgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQhIEtNU0FOLCBvZiBjb3Vyc2UsIHdvdWxkIGZsYWcgdGhhdCBpbW1lZGlhdGVseS5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgKndoZXJlKiBpcyBgc2JpLVx1MDAzZW9wdGAgaW5pdGlhbGl6ZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGl0cyBhbGxvY2F0aW9uLiBgc2JpYCBhcHBlYXJzIHRvIGJlIGFsbG9jYXRlZCBpbiBgZXJvZnNfZmNfZ2V0X3RyZWVgLCBgZXJvZnNfZmNfZmlsbF9zdXBlcmAsIG9yIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBMZXQncyBzdGFydCB3aXRoIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLCB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjMxLjc2MTk3NjA1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMDMxMjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcm9mc19pbml0X2ZzX2NvbnRleHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvc3VwZXIuYz05NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXJvZnNfY29udGV4dF9vcHMgPSB7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTk0OC1cXG5mcy9lcm9mcy9zdXBlci5jOjk0OTpzdGF0aWMgaW50IGVyb2ZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXJvZnMvc3VwZXIuYy05NTAte1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0xMDA5PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBlcm9mc19mc190eXBlID0ge1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy0xMDExLVxcdC5uYW1lICAgICAgICAgICA9IFxcXCJlcm9mc1xcXCIsXFxuZnMvZXJvZnMvc3VwZXIuYzoxMDEyOlxcdC5pbml0X2ZzX2NvbnRleHQgPSBlcm9mc19pbml0X2ZzX2NvbnRleHQsXFxuZnMvZXJvZnMvc3VwZXIuYy0xMDEzLVxcdC5raWxsX3NiICAgICAgICA9IGVyb2ZzX2tpbGxfc2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjMzLjc2MjI5MzU4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzEwODc1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgZXJvZnNfaW5pdF9mc19jb250ZXh0YC4gSSdtIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGZpbGUgc3lzdGVtIGNvbnRleHQgZm9yIEVST0ZTIChFbmhhbmNlZCBSZWFkLU9ubHkgRmlsZSBTeXN0ZW0pLiBBcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBJIGtub3cgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIG1vdW50aW5nIGFuIEVST0ZTIGZpbGVzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBpbml0aWFsIGVudmlyb25tZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBhc3BlY3RzIGxpa2U6IGhvdyBpdCBoYW5kbGVzIGFyZ3VtZW50cyBwYXNzZWQgZHVyaW5nIG1vdW50IGNhbGxzLCBob3cgaXQgYWxsb2NhdGVzIGFuZCBwb3B1bGF0ZXMgdGhlIGBmc19jb250ZXh0YCBzdHJ1Y3R1cmUsIGFuZCBpZiBpdCBpbnRlcmFjdHMgd2l0aCBhbnkgbG93ZXItbGV2ZWwgRVJPRlMtc3BlY2lmaWMgc3RydWN0dXJlcyBvciBkYXRhLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3VwZXJibG9jaywgaW5vZGVzIG9yIG90aGVyIGtleSBkYXRhIHN0cnVjdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBtb3VudCBmbGFncyBhbmQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjM3LjEzMzM4Mzg0OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NDksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NDk6XFx0c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiA5NTA6XFx0e1xcbiA5NTE6XFx0XFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaTtcXG4gOTUyOlxcdFxcbiA5NTM6XFx0XFx0c2JpID0ga3phbGxvY19vYmooKnNiaSk7XFxuIDk1NDpcXHRcXHRpZiAoIXNiaSlcXG4gOTU1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5NTY6XFx0XFxuIDk1NzpcXHRcXHRzYmktXFx1MDAzZWRldnMgPSBremFsbG9jX29iaihzdHJ1Y3QgZXJvZnNfZGV2X2NvbnRleHQpO1xcbiA5NTg6XFx0XFx0aWYgKCFzYmktXFx1MDAzZWRldnMpIHtcXG4gOTU5OlxcdFxcdFxcdGtmcmVlKHNiaSk7XFxuIDk2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTYxOlxcdFxcdH1cXG4gOTYyOlxcdFxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBzYmk7XFxuIDk2MzpcXHRcXG4gOTY0OlxcdFxcdGlkcl9pbml0KFxcdTAwMjZzYmktXFx1MDAzZWRldnMtXFx1MDAzZXRyZWUpO1xcbiA5NjU6XFx0XFx0aW5pdF9yd3NlbShcXHUwMDI2c2JpLVxcdTAwM2VkZXZzLVxcdTAwM2Vyd3NlbSk7XFxuIDk2NjpcXHRcXHRlcm9mc19kZWZhdWx0X29wdGlvbnMoc2JpKTtcXG4gOTY3OlxcdFxcdGZjLVxcdTAwM2VvcHMgPSBcXHUwMDI2ZXJvZnNfY29udGV4dF9vcHM7XFxuIDk2ODpcXHRcXHRyZXR1cm4gMDtcXG4gOTY5OlxcdH1cXG4gOTcwOlxcdFxcbiA5NzE6XFx0c3RhdGljIHZvaWQgZXJvZnNfZHJvcF9pbnRlcm5hbF9pbm9kZXMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSlcXG4gOTcyOlxcdHtcXG4gOTczOlxcdFxcdGlwdXQoc2JpLVxcdTAwM2VwYWNrZWRfaW5vZGUpO1xcbiA5NzQ6XFx0XFx0c2JpLVxcdTAwM2VwYWNrZWRfaW5vZGUgPSBOVUxMO1xcbiA5NzU6XFx0XFx0aXB1dChzYmktXFx1MDAzZW1ldGFib3hfaW5vZGUpO1xcbiA5NzY6XFx0XFx0c2JpLVxcdTAwM2VtZXRhYm94X2lub2RlID0gTlVMTDtcXG4gOTc3OlxcdCNpZmRlZiBDT05GSUdfRVJPRlNfRlNfWklQXFxuIDk3ODpcXHRcXHRpcHV0KHNiaS1cXHUwMDNlbWFuYWdlZF9jYWNoZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjM3LjEzMzUyMjcwOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzc3MzY5NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhleSdyZSB1c2luZyBgc2JpID0ga3phbGxvY19vYmooKnNiaSk7YC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnLiAgYGt6YWxsb2Nfb2JqYC4uLiB0aGF0J3MgcHJvYmFibHkgYSBtYWNybyBmb3IgYGt6YWxsb2NgIHdpdGggdGhlIHN0cnVjdHVyZSdzIHNpemUsIGxpa2VseSBzb21ldGhpbmcgbGlrZSBga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpYC4gIElmIGl0J3MgYGt6YWxsb2NgLCB0aGVuIHRoZSBlbnRpcmUgYHNiaWAgc3RydWN0dXJlIGlzIGJlaW5nIHplcm9lZCBvdXQuIFRoYXQgaW5jbHVkZXMgKmFsbCogb2YgdGhlIG1lbW9yeSwgc28gZXZlbiB0aGUgcGFkZGluZyB3aXRoaW4gYHNiaS1cdTAwM2VvcHRgIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBsaWtlIHRoYXQsIGl0IHByb3ZpZGVzIGEgY2xlYW4gc3RhdGUuIEJ1dCwgSSBkb24ndCB0cnVzdCBhc3N1bXB0aW9ucywgZXZlbiBteSBvd24uIExldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBga3phbGxvY19vYmpgIGRlZmluaXRpb24gdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHdoYXQncyBoYXBwZW5pbmcuIE5vIHBvaW50IGluIG1ha2luZyBhIHJvb2tpZSBtaXN0YWtlLiBBIHF1aWNrIGNoZWNrIG9mIHRoYXQgbWFjcm8gd2lsbCBjb25maXJtIHRoaXMgYW5kIGVsaW1pbmF0ZSBhbnkgbGluZ2VyaW5nIGRvdWJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTE4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNDo0MS45MTA4OTUxMTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTYyMDI0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBremFsbG9jX29ialwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDczPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTQtLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1NTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTYtXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTc6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTgtXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEwLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjQzLjU2NzEwMzEzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDE0NjcxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBga3phbGxvY19vYmpgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGt6YWxsb2Nfb2JqYCwgYW5kIEkgc2VlIGl0IHVzZXMgYGt6YWxsb2NgLiBUaGF0J3MgZ29vZCDigJMgaXQgbWVhbnMgdGhlIG1lbW9yeSBpcyB6ZXJvZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50IGZvciBhdm9pZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4gdGhhdCBpbml0aWFsIGFsbG9jYXRpb24sIGJlY2F1c2UgaW5pdGlhbGl6YXRpb24gb2Z0ZW4gaXNuJ3QgZXZlcnl0aGluZy5cblxuTGV0J3Mgc2Vl4oCmIHNpbmNlIGBzYmlgIGlzIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jYCwgdGhlIHBhZGRpbmcgKndpdGhpbiogYHNiaS1cdTAwM2VvcHRgIHNob3VsZCBhbHNvIHN0YXJ0IGFzIHplcm8uIE5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhlcmUgYW55IGNvZGUgcGF0aCB0aGF0ICpsYXRlciogd3JpdGVzIHRvIGZpZWxkcyB3aXRoaW4gYHNiaS1cdTAwM2VvcHRgIGluIGEgd2F5IHRoYXQgKndvdWxkbid0KiBmdWxseSBpbml0aWFsaXplIHRoZSBwYWRkaW5nPyBgc2JpLVx1MDAzZW9wdGAgaXMgYSBzdHJ1Y3QgbmVzdGxlZCBpbnNpZGUgdGhlIGxhcmdlciBgc2JpYCBzdHJ1Y3QuXG5cbkFscmlnaHQsIGlmIHdlIGFyZSBzZXR0aW5nIGZpZWxkcyBkaXJlY3RseSwgbGlrZSBgc2JpLVx1MDAzZW9wdC5jYWNoZV9zdHJhdGVneSA9IC4uLmAgb3IgYHNiaS1cdTAwM2VvcHQubW91bnRfb3B0ID0gLi4uYCwgdGhlbiB0aGF0IHdvbid0IHRvdWNoIHRoZSBwYWRkaW5nLCBhbmQgaXQnbGwgcmVtYWluIHplcm8sIGFzIGV4cGVjdGVkLiBCdXQgd2hhdCBhYm91dCBhc3NpZ25tZW50cz8gQ291bGQgYHNiaS1cdTAwM2VvcHRgIGJlIGFzc2lnbmVkIGZyb20gYW5vdGhlciBzdHJ1Y3Q/IENvdWxkIHdlIHNlZSBzb21ldGhpbmcgbGlrZSBgc2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O2A/IFNjYW5uaW5nIHRoZSBjb2RlLCBJIGRvbid0IHNlZSB0aGF0IGFzc2lnbm1lbnQgaGFwcGVuaW5nIGFueXdoZXJlLiBUaGlzIGlzIGdvb2QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AgdG8gbWFrZSBzdXJlIHRoZXJlIGlzbid0IHNvbWUgaW1wbGljaXQgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIEFsd2F5cyBiZXR0ZXIgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6NTAuMDA4NTczODQxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNDY4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyb2ZzX2RlZmF1bHRfb3B0aW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9zdXBlci5jPTI1MD1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy0zNzMtXFxuZnMvZXJvZnMvc3VwZXIuYzozNzQ6c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXFxuZnMvZXJvZnMvc3VwZXIuYy0zNzUte1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz05NDk9c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy05NjUtXFx0aW5pdF9yd3NlbShcXHUwMDI2c2JpLVxcdTAwM2VkZXZzLVxcdTAwM2Vyd3NlbSk7XFxuZnMvZXJvZnMvc3VwZXIuYzo5NjY6XFx0ZXJvZnNfZGVmYXVsdF9vcHRpb25zKHNiaSk7XFxuZnMvZXJvZnMvc3VwZXIuYy05NjctXFx0ZmMtXFx1MDAzZW9wcyA9IFxcdTAwMjZlcm9mc19jb250ZXh0X29wcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzQ6NTEuNjIwMDQ4MzAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDYwNTE4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCBjb25jZXB0cywgYXMgSSB1bmRlcnN0YW5kIHRoZW06XG5cbioqQ29uc2lkZXJpbmcgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AuIExldCBtZSBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBUaGlzIGlzLCBhdCBpdHMgY29yZSwgYWJvdXQgc2V0dGluZyB1cCB0aGUgc3RhbmRhcmQgcGFyYW1ldGVycyBmb3IgYW4gRVJPRlMgZmlsZXN5c3RlbSB3aGVuIGl0J3MgYmVpbmcgY3JlYXRlZCwgcmlnaHQ/IEl04oCZcyBub3QgYWJvdXQgdGhlIHJ1bnRpbWUgYmVoYXZpb3IsIGJ1dCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIHRlbXBsYXRlLlxuXG5JIGltYWdpbmUgdGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZSBjb21wcmVzc2lvbiBzZXR0aW5ncywgYmxvY2sgc2l6ZSBwcmVmZXJlbmNlcywgYW5kIG1heWJlIHNvbWUgaGludHMgb24gbWV0YWRhdGEgaGFuZGxpbmcsIGFsbCB0dW5lZCBmb3IgYSBiYWxhbmNlIG9mIHNwYWNlIGVmZmljaWVuY3kgYW5kIGFjY2VzcyBzcGVlZCBmb3IgYSByZWFkLW9ubHkgZmlsZXN5c3RlbS4gV2UgbWlnaHQgYWxzbyBoYXZlIHRvIHRoaW5rIGFib3V0IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGJ5IGRlZmF1bHQgYXMgd2VsbC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3BlY3RzIHRoaXMgaW5jbHVkZXMgYXMgaXRzIGRlZmF1bHQgc2V0IG9mIGJlaGF2aW9ycywgYW5kIEkgbmVlZCB0byBjb25zaWRlciB3aHkgaXQgbWlnaHQgYmUgY29uZmlndXJhYmxlLiBQZXJoYXBzIGRpZmZlcmVudCB1c2UgY2FzZXMgbWlnaHQgYmVuZWZpdCBmcm9tIHR3ZWFrcy4gSSdtIGltYWdpbmluZyBzb21lIGNhc2VzIHdoZXJlIHBlcmZvcm1hbmNlIGlzIHRoZSBhYnNvbHV0ZSBwcmlvcml0eSwgZXZlbiBhdCB0aGUgZXhwZW5zZSBvZiBhIGJpdCBvZiBzcGFjZSwgYW5kIG90aGVycyB3aGVyZSBtYXhpbXVtIGNvbXByZXNzaW9uIGlzIHBhcmFtb3VudC4gVGhlIGBlcm9mc19kZWZhdWx0X29wdGlvbnNgIGNvbnN0cnVjdCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgZGVjaXNpb24uXG5cblNvLCBpbiBlc3NlbmNlLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlICpkZWZhdWx0cyogLSB0aGUgYmFzZWxpbmUgcGFyYW1ldGVycyB0aGF0IGFyZSBhc3N1bWVkIHdoZW4gYSB1c2VyIGRvZXNuJ3QgZXhwbGljaXRseSBwcm92aWRlIG9wdGlvbnMgd2hlbiBhbiBFUk9GUyBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuIFRoZSBnb2FsIGlzIGxpa2VseSB0byBzdHJpa2UgYSBnb29kIGJhbGFuY2UsIGdpdmVuIHRoYXQgdGhlc2UgYXJlIHR5cGljYWxseSBpbW11dGFibGUgYW5kIGRlcGxveWVkIHdpZGVseS4gTm93LCBJIG5lZWQgdG8ga25vdyB3aGF0IHRob3NlIHNwZWNpZmljIGRlZmF1bHRzIGFyZSwgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZW0sIGZvciBhIHRydWx5IG51YW5jZWQgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkyMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjU2LjQ2NjEwMzEyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzQsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNzQ6XFx0c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXFxuIDM3NTpcXHR7XFxuIDM3NjpcXHQjaWZkZWYgQ09ORklHX0VST0ZTX0ZTX1pJUFxcbiAzNzc6XFx0XFx0c2JpLVxcdTAwM2VvcHQuY2FjaGVfc3RyYXRlZ3kgPSBFUk9GU19aSVBfQ0FDSEVfUkVBREFST1VORDtcXG4gMzc4OlxcdFxcdHNiaS1cXHUwMDNlc3luY19kZWNvbXByZXNzID0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE87XFxuIDM3OTpcXHQjZW5kaWZcXG4gMzgwOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXFxuIDM4MTpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XFxuIDM4MjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfUE9TSVhfQUNMKSlcXG4gMzgzOlxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbiAzODQ6XFx0fVxcbiAzODU6XFx0XFxuIDM4NjpcXHRlbnVtIHtcXG4gMzg3OlxcdFxcdE9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSxcXG4gMzg4OlxcdFxcdE9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM0OjU2LjQ2NjIzODgwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjI1Njc2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIG1vc3RseSBhYm91dCBzZXR0aW5nIGZpZWxkcy4gU2luY2UgYHNiaWAgaXMgaW5pdGlhbGl6ZWQgd2l0aCBga3phbGxvY2AsIEkga25vdyB0aGUgcGFkZGluZyBpcyB6ZXJvZWQgb3V0IGJ5IGRlZmF1bHQuIFRoYXQgbWVhbnMgdGhlIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgIGNhbGwgd2lsbCBiZSBjb21wYXJpbmcgemVyb2VkIHBhZGRpbmcgYWdhaW5zdCB6ZXJvZWQgcGFkZGluZywgd2hpY2ggaXMgYSBzYWZlIG9wZXJhdGlvbi5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBvdGhlciBzcG90cyB3aGVyZSBgc2JpLVx1MDAzZW9wdGAgaXMgYmVpbmcgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCAqY291bGQqIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFoLCB5ZXMsIGBzZXRfb3B0YCBhbmQgYGNsZWFyX29wdGAgYWZmZWN0IGBtb3VudF9vcHRgLiBBbmQgdGhlcmUncyBhbHNvIGBzYmktXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gLi4uYCB3aGljaCwgSSBzZWUgbm93LCBpcyBtb2RpZnlpbmcgYGNhY2hlX3N0cmF0ZWd5YC4gSG93ZXZlciwgbm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgdG91Y2ggdGhlIHBhZGRpbmcuIFNvLCB0aGUgcGFkZGluZyByZW1haW5zIHJlbGlhYmx5IHplcm9lZC4gVGhlcmVmb3JlLCB0aGF0IGBtZW1jbXBgIHNob3VsZG4ndCBiZSByZWFkaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHRha2UgYSB3aWRlciBsb29rLiBJcyB0aGVyZSBhbnkgKm90aGVyKiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgbHVya2luZyBpbiB0aGlzIHBhdGNoPyBMZXQncyBzZWUuLi4gQWgsIHRoZSBhZGRpdGlvbiBvZiBgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcmAuXG5gYGBjXG5zdGF0aWMgaW50IGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcblx0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG57XG5cdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7XG5cdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuXG5cdGlmIChzYi1cdTAwM2VzX2lmbGFncyBcdTAwMjYgU0JfSV9SRVRJUkVEKVxuXHRcdHJldHVybiAwO1xuXHRpZiAoIXNiaS1cdTAwM2VkaWYwLmZpbGUgfHwgIW5ld19zYmktXHUwMDNlZGlmMC5maWxlKVxuXHRcdHJldHVybiAwO1xuXHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXHUwMDNlZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktXHUwMDNlZGlmMC5maWxlKSBcdTAwMjZcdTAwMjZcblx0ICAgICAgIHNiaS1cdTAwM2VkaWYwLmZzb2ZmID09IG5ld19zYmktXHUwMDNlZGlmMC5mc29mZiBcdTAwMjZcdTAwMjZcblx0ICAgICAgICFtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSk7XG59XG5gYGBcblxuT2theSwgaXQgbG9va3MgbGlrZSBgc2JpLVx1MDAzZWRpZjBgIGlzIGludm9sdmVkLCBhbmQgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHN0cnVjdHVyZSBpcy4gSXQncyBsaWtlbHkgYSBgc3RydWN0IGVyb2ZzX2ZzY2FjaGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGRpZjBgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTgsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNTowNS42OTE5MTcwN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNTQzMDYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWYwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTcxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWw9NTM9YWxsT2Y6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtOTctICAgICAgICAgICAgLSBjb25zdDogZXNhaTBfdHhfaGZfY2xrXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjk4OiAgICAgICAgICAgIC0gY29uc3Q6IHNwZGlmMF9yeFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC05OS0gICAgICAgICAgICAtIGNvbnN0OiBzYWkwX3J4X2JjbGtcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0xNjAtICAgICAgICAgICAgLSBjb25zdDogZXNhaTFfdHhfaGZfY2xrXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjE2MTogICAgICAgICAgICAtIGNvbnN0OiBzcGRpZjBfcnhcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMTYyLSAgICAgICAgICAgIC0gY29uc3Q6IHNwZGlmMV9yeFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTIwOC0gICAgICAgICAgICAtIGNvbnN0OiBleHRfYXVkX21jbGsxXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjIwOTogICAgICAgICAgICAtIGNvbnN0OiBzcGRpZjBfcnhcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2svZnNsLGlteDgtYWNtLnlhbWwtMjEwLSAgICAgICAgICAgIC0gY29uc3Q6IHNhaTBfcnhfYmNsa1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sPTIxOT1leGFtcGxlczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0yNTUtICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmNsa19lc2FpMF90eF9oZl9jbGtcXHUwMDNlLFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbDoyNTY6ICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmNsa19zcGRpZjBfcnhcXHUwMDNlLFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9mc2wsaW14OC1hY20ueWFtbC0yNTctICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmNsa19zYWkwX3J4X2JjbGtcXHUwMDNlLFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTI3My0gICAgICAgICAgICAgICAgICAgICAgXFxcImVzYWkwX3R4X2hmX2Nsa1xcXCIsXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sOjI3NDogICAgICAgICAgICAgICAgICAgICAgXFxcInNwZGlmMF9yeFxcXCIsXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2ZzbCxpbXg4LWFjbS55YW1sLTI3NS0gICAgICAgICAgICAgICAgICAgICAgXFxcInNhaTBfcnhfYmNsa1xcXCIsXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0cz0yNTQ9XFx0XFx0c291bmQge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3NwZWFyMTM0MC1ldmIuZHRzLTI1NS1cXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInNwZWFyLHNwZWFyLWV2YlxcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHM6MjU2OlxcdFxcdFxcdGF1ZGlvLWNvbnRyb2xsZXJzID0gXFx1MDAzY1xcdTAwMjZzcGRpZjAgXFx1MDAyNnNwZGlmMSBcXHUwMDI2aTJzMCBcXHUwMDI2aTJzMVxcdTAwM2U7XFxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHMtMjU3LVxcdFxcdFxcdGF1ZGlvLWNvZGVjcyA9IFxcdTAwM2NcXHUwMDI2aW5jb2RlYyBcXHUwMDI2b3V0Y29kZWMgXFx1MDAyNnN0YTUyOSBcXHUwMDI2c3RhNTI5XFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3NwZWFyMTM0MC1ldmIuZHRzLTI2NC1cXG5hcmNoL2FybS9ib290L2R0cy9zdC9zcGVhcjEzNDAtZXZiLmR0czoyNjU6XFx0XFx0c3BkaWYwOiBzcGRpZi1pbkBkMDEwMDAwMCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3BlYXIxMzQwLWV2Yi5kdHMtMjY2LVxcdFxcdFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWV2YWwuZHRzaT0xMjc9XFx1MDAyNnNhdGEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtZXZhbC5kdHNpLTEzMS0vKiBBcGFsaXMgU1BESUYxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtZXZhbC5kdHNpOjEzMjpcXHUwMDI2c3BkaWYwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1ldmFsLmR0c2ktMTMzLVxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWl4b3JhLXYxLjEuZHRzaT0yMTY9XFx1MDAyNnNhdGEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMS5kdHNpLTIyMC0vKiBBcGFsaXMgU1BESUYxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMS5kdHNpOjIyMTpcXHUwMDI2c3BkaWYwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4xLmR0c2ktMjIyLVxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLWl4b3JhLXYxLjIuZHRzaT0yNjU9XFx1MDAyNnNhdGEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMi5kdHNpLTI2OS0vKiBBcGFsaXMgU1BESUYxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtaXhvcmEtdjEuMi5kdHNpOjI3MDpcXHUwMDI2c3BkaWYwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy1peG9yYS12MS4yLmR0c2ktMjcxLVxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaT0yMjU9XFx0c291bmQtc3BkaWYge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpLTIyNy1cXHRcXHRtb2RlbCA9IFxcXCJpbXgtc3BkaWZcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaToyMjg6XFx0XFx0c3BkaWYtY29udHJvbGxlciA9IFxcdTAwM2NcXHUwMDI2c3BkaWYwXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMjI5LVxcdFxcdHNwZGlmLWluO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpPTg0Nz1cXHUwMDI2c2FpNSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktODYyLS8qIEFwYWxpcyBTUERJRjEgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k6ODYzOlxcdTAwMjZzcGRpZjAge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaS04NjQtXFx0YXNzaWduZWQtY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZjbGsgSU1YX1NDX1JfQVVESU9fUExMXzAgSU1YX1NDX1BNX0NMS19QTExcXHUwMDNlLFxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpLTg2OC1cXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtYXBhbGlzLXYxLjEuZHRzaTo4Njk6XFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZwaW5jdHJsX3NwZGlmMFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1hcGFsaXMtdjEuMS5kdHNpLTg3MC1cXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k9MTQxNz1cXHRwaW5jdHJsX3NpbTBfZ3Bpb3M6IHNpbTBncGlvc2dycCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMTQyOC1cXHQvKiBBcGFsaXMgU1BESUYgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2k6MTQyOTpcXHRwaW5jdHJsX3NwZGlmMDogc3BkaWYwZ3JwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LWFwYWxpcy12MS4xLmR0c2ktMTQzMC1cXHRcXHRmc2wscGlucyA9IFxcdTAwM2NJTVg4UU1fU1BESUYwX1RYX0FVRF9TUERJRjBfVFhcXHRcXHRcXHQweGM2MDAwMDQwXFx1MDAzZSxcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaT01ND1jbGtfZXNhaTBfdHhfaGZfY2xrOiBjbG9jay1lc2FpMC10eC1oZiB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjAtXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjYxOmNsa19zcGRpZjBfcng6IGNsb2NrLXNwZGlmMC1yeCB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTYyLVxcdGNvbXBhdGlibGUgPSBcXFwiZml4ZWQtY2xvY2tcXFwiO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY0LVxcdGNsb2NrLWZyZXF1ZW5jeSA9IFxcdTAwM2MwXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6NjU6XFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXFxcInNwZGlmMF9yeFxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY2LX07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9MTY3PVxcdGVzYWkwOiBlc2FpQDU5MDEwMDAwIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS0xODEtXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjE4MjpcXHRzcGRpZjA6IHNwZGlmQDU5MDIwMDAwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMTgzLVxcdFxcdGNvbXBhdGlibGUgPSBcXFwiZnNsLGlteDhxbS1zcGRpZlxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMTg2LVxcdFxcdFxcdCAgICAgXFx1MDAzY0dJQ19TUEkgNDU4IElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlOyAvKiB0eCAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaToxODc6XFx0XFx0Y2xvY2tzID0gXFx1MDAzY1xcdTAwMjZzcGRpZjBfbHBjZyBJTVhfTFBDR19DTEtfNFxcdTAwM2UsXFx0LyogY29yZSAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS0xODgtXFx0XFx0XFx0IFxcdTAwM2NcXHUwMDI2Y2xrX2R1bW15XFx1MDAzZSxcXHRcXHRcXHQvKiByeHR4MCAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaToxODk6XFx0XFx0XFx0IFxcdTAwM2NcXHUwMDI2c3BkaWYwX2xwY2cgSU1YX0xQQ0dfQ0xLXzBcXHUwMDNlLFxcdC8qIHJ4dHgxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTE5MC1cXHRcXHRcXHQgXFx1MDAzY1xcdTAwMjZjbGtfZHVtbXlcXHUwMDNlLFxcdFxcdFxcdC8qIHJ4dHgyICovXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9MjcwPVxcdGVkbWEwOiBkbWEtY29udHJvbGxlckA1OTFmMDAwMCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMjgzLVxcdFxcdFxcdCAgICAgXFx1MDAzY0dJQ19TUEkgNDEwIElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlLCAvKiA3ICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjI4NDpcXHRcXHRcXHQgICAgIFxcdTAwM2NHSUNfU1BJIDQ1NyBJUlFfVFlQRV9MRVZFTF9ISUdIXFx1MDAzZSwgLyogOCBzcGRpZjAgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMjg1LVxcdFxcdFxcdCAgICAgXFx1MDAzY0dJQ19TUEkgNDU5IElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlLCAvKiA5ICovXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k9MzM3PVxcdGVzYWkwX2xwY2c6IGNsb2NrLWNvbnRyb2xsZXJANTk0MTAwMDAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTM0OC1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6MzQ5OlxcdHNwZGlmMF9scGNnOiBjbG9jay1jb250cm9sbGVyQDU5NDIwMDAwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzUwLVxcdFxcdGNvbXBhdGlibGUgPSBcXFwiZnNsLGlteDhxeHAtbHBjZ1xcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktMzU1LVxcdFxcdGNsb2NrLWluZGljZXMgPSBcXHUwMDNjSU1YX0xQQ0dfQ0xLXzBcXHUwMDNlLCBcXHUwMDNjSU1YX0xQQ0dfQ0xLXzRcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaTozNTY6XFx0XFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXFxcInNwZGlmMF9scGNnX3R4X2Nsa1xcXCIsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpOjM1NzpcXHRcXHRcXHRcXHQgICAgIFxcXCJzcGRpZjBfbHBjZ19nY2xrd1xcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTM1OC1cXHRcXHRwb3dlci1kb21haW5zID0gXFx1MDAzY1xcdTAwMjZwZCBJTVhfU0NfUl9TUERJRl8wXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaT02Mzc9XFx0YWNtOiBhY21ANTllMDAwMDAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY2Ny1cXHRcXHRcXHQgXFx1MDAzY1xcdTAwMjZjbGtfZXNhaTBfdHhfaGZfY2xrXFx1MDAzZSxcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2k6NjY4OlxcdFxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19zcGRpZjBfcnhcXHUwMDNlLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaS02NjktXFx0XFx0XFx0IFxcdTAwM2NcXHUwMDI2Y2xrX3NhaTBfcnhfYmNsa1xcdTAwM2UsXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLWF1ZGlvLmR0c2ktNjg1LVxcdFxcdFxcdCAgICAgIFxcXCJlc2FpMF90eF9oZl9jbGtcXFwiLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtYXVkaW8uZHRzaTo2ODY6XFx0XFx0XFx0ICAgICAgXFxcInNwZGlmMF9yeFxcXCIsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy1hdWRpby5kdHNpLTY4Ny1cXHRcXHRcXHQgICAgICBcXFwic2FpMF9yeF9iY2xrXFxcIixcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpPTIwPVxcdTAwMjZhY20ge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktNDAtXFx0XFx0IFxcdTAwM2NcXHUwMDI2Y2xrX2V4dF9hdWRfbWNsazFcXHUwMDNlLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpOjQxOlxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19zcGRpZjBfcnhcXHUwMDNlLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTQyLVxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19zYWkwX3J4X2JjbGtcXHUwMDNlLFxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2ktNTMtXFx0XFx0ICAgICAgXFxcImV4dF9hdWRfbWNsazFcXFwiLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpOjU0OlxcdFxcdCAgICAgIFxcXCJzcGRpZjBfcnhcXFwiLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTU1LVxcdFxcdCAgICAgIFxcXCJzYWkwX3J4X2JjbGtcXFwiLFxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k9NzU9XFx1MDAyNmVkbWEwIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTg3LVxcdFxcdFxcdTAwM2NHSUNfU1BJIDAgICBJUlFfVFlQRV9MRVZFTF9ISUdIXFx1MDAzZSxcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4ZHhsLXNzLWFkbWEuZHRzaTo4ODpcXHRcXHRcXHUwMDNjR0lDX1NQSSAzMjcgSVJRX1RZUEVfTEVWRUxfSElHSFxcdTAwM2UsIC8qIHNwZGlmMCAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTg5LVxcdFxcdFxcdTAwM2NHSUNfU1BJIDMyOSBJUlFfVFlQRV9MRVZFTF9ISUdIXFx1MDAzZSxcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpPTI1Mz1cXHUwMDI2c2FpMyB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4ZHhsLXNzLWFkbWEuZHRzaS0yNTYtXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OGR4bC1zcy1hZG1hLmR0c2k6MjU3OlxcdTAwMjZzcGRpZjAge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhkeGwtc3MtYWRtYS5kdHNpLTI1OC1cXHRpbnRlcnJ1cHRzID0gXFx1MDAzY0dJQ19TUEkgMzI2IElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlLCAvKiByeCAqL1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k9MjU0PVxcdGFjbTogYWNtQDU5ZTAwMDAwIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTI5NC1cXHRcXHRcXHQgXFx1MDAzY1xcdTAwMjZjbGtfZXNhaTFfdHhfaGZfY2xrXFx1MDAzZSxcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaToyOTU6XFx0XFx0XFx0IFxcdTAwM2NcXHUwMDI2Y2xrX3NwZGlmMF9yeFxcdTAwM2UsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6Mjk2OlxcdFxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19zcGRpZjBfcnhcXHUwMDNlLFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTI5Ny1cXHRcXHRcXHQgXFx1MDAzY1xcdTAwMjZjbGtfc2FpMF9yeF9iY2xrXFx1MDAzZSxcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTMyMS1cXHRcXHRcXHQgICAgICBcXFwiZXNhaTFfdHhfaGZfY2xrXFxcIixcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaTozMjI6XFx0XFx0XFx0ICAgICAgXFxcInNwZGlmMF9yeFxcXCIsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2ktMzIzLVxcdFxcdFxcdCAgICAgIFxcXCJzcGRpZjFfcnhcXFwiLFxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k9MzQ1PVxcdTAwMjZlZG1hMCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS0zNTYtXFx0XFx0ICAgICBcXHUwMDNjR0lDX1NQSSA0MTAgSVJRX1RZUEVfTEVWRUxfSElHSFxcdTAwM2UsXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6MzU3OlxcdFxcdCAgICAgXFx1MDAzY0dJQ19TUEkgNDU3IElSUV9UWVBFX0xFVkVMX0hJR0hcXHUwMDNlLCAvKiBzcGRpZjAgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS0zNTgtXFx0XFx0ICAgICBcXHUwMDNjR0lDX1NQSSA0NTkgSVJRX1RZUEVfTEVWRUxfSElHSFxcdTAwM2UsXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaT00OTE9XFx1MDAyNnNhaTNfbHBjZyB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS00OTUtXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6NDk2OlxcdTAwMjZzcGRpZjAge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpOjQ5NzpcXHRjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnNwZGlmMF9scGNnIElNWF9MUENHX0NMS180XFx1MDAzZSxcXHQvKiBjb3JlICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2ktNDk4LVxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19kdW1teVxcdTAwM2UsXFx0XFx0XFx0Lyogcnh0eDAgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaTo0OTk6XFx0XFx0IFxcdTAwM2NcXHUwMDI2c3BkaWYwX2xwY2cgSU1YX0xQQ0dfQ0xLXzVcXHUwMDNlLFxcdC8qIHJ4dHgxICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2ktNTAwLVxcdFxcdCBcXHUwMDNjXFx1MDAyNmNsa19kdW1teVxcdTAwM2UsXFx0XFx0XFx0Lyogcnh0eDIgKi9cXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUwOS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaTo1MTA6XFx1MDAyNnNwZGlmMF9scGNnIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4cW0tc3MtYXVkaW8uZHRzaS01MTEtXFx0Y2xvY2staW5kaWNlcyA9IFxcdTAwM2NJTVhfTFBDR19DTEtfNVxcdTAwM2UsIFxcdTAwM2NJTVhfTFBDR19DTEtfNFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHFtLXNzLWF1ZGlvLmR0c2k6NTEyOlxcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFxcXCJzcGRpZjBfbHBjZ190eF9jbGtcXFwiLCBcXFwic3BkaWYwX2xwY2dfZ2Nsa3dcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxbS1zcy1hdWRpby5kdHNpLTUxMy19O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k9MjY3NT1cXHRcXHRzZG1tY19wd3Jlbjogc2RtbWMtcHdyZW4ge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2ktMjY4MS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaToyNjgyOlxcdHNwZGlmMCB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2ktMjY4My1cXHRcXHQvb21pdC1pZi1uby1yZWYvXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k6MjY4NDpcXHRcXHRzcGRpZjBtMF90eDogc3BkaWYwbTAtdHgge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2ODUtXFx0XFx0XFx0cm9ja2NoaXAscGlucyA9XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtYmFzZS1waW5jdHJsLmR0c2k6MjY4NjpcXHRcXHRcXHRcXHQvKiBzcGRpZjBtMF90eCAqL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2ODctXFx0XFx0XFx0XFx0XFx1MDAzYzEgUktfUEI2IDMgXFx1MDAyNnBjZmdfcHVsbF9ub25lXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpLTI2OTAtXFx0XFx0L29taXQtaWYtbm8tcmVmL1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpOjI2OTE6XFx0XFx0c3BkaWYwbTFfdHg6IHNwZGlmMG0xLXR4IHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaS0yNjkyLVxcdFxcdFxcdHJvY2tjaGlwLHBpbnMgPVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UtcGluY3RybC5kdHNpOjI2OTM6XFx0XFx0XFx0XFx0Lyogc3BkaWYwbTFfdHggKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLXBpbmN0cmwuZHRzaS0yNjk0LVxcdFxcdFxcdFxcdFxcdTAwM2M0IFJLX1BCNCA2IFxcdTAwMjZwY2ZnX3B1bGxfbm9uZVxcdTAwM2U7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLmR0c2k9MjU1Mz1cXHRzcGRpZl90eDA6IHNwZGlmLXR4QGZlNGUwMDAwIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWJhc2UuZHRzaS0yNTYyLVxcdFxcdGludGVycnVwdHMgPSBcXHUwMDNjR0lDX1NQSSAxOTMgSVJRX1RZUEVfTEVWRUxfSElHSCAwXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLmR0c2k6MjU2MzpcXHRcXHRwaW5jdHJsLTAgPSBcXHUwMDNjXFx1MDAyNnNwZGlmMG0wX3R4XFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1iYXNlLmR0c2ktMjU2NC1cXHRcXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtaDk2LW1heC12NTguZHRzPTQzNT1cXHUwMDI2c3BkaWZfdHgwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1oOTYtbWF4LXY1OC5kdHMtNDM2LVxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtaDk2LW1heC12NTguZHRzOjQzNzpcXHRwaW5jdHJsLTAgPSBcXHUwMDNjXFx1MDAyNnNwZGlmMG0xX3R4XFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1oOTYtbWF4LXY1OC5kdHMtNDM4LVxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaD0xNTk9dW5pb24gY3ZteF9ucGVpX2Jpc3Rfc3RhdHVzIHtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0yMDQtXFx0XFx0dWludDY0X3QgY3NtMToxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDoyMDU6XFx0XFx0dWludDY0X3QgZGlmMDoxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0yMDYtXFx0XFx0dWludDY0X3QgZGlmMToxO1xcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTIxOC1cXHRcXHR1aW50NjRfdCBkaWYxOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjIxOTpcXHRcXHR1aW50NjRfdCBkaWYwOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTIyMC1cXHRcXHR1aW50NjRfdCBjc20xOjE7XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMzE2LVxcdFxcdHVpbnQ2NF90IGNzbTE6MTtcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6MzE3OlxcdFxcdHVpbnQ2NF90IGRpZjA6MTtcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtMzE4LVxcdFxcdHVpbnQ2NF90IGRpZjE6MTtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0zMzAtXFx0XFx0dWludDY0X3QgZGlmMToxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDozMzE6XFx0XFx0dWludDY0X3QgZGlmMDoxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC0zMzItXFx0XFx0dWludDY0X3QgY3NtMToxO1xcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTQyNi1cXHRcXHR1aW50NjRfdCBjc20xOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjQyNzpcXHRcXHR1aW50NjRfdCBkaWYwOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTQyOC1cXHRcXHR1aW50NjRfdCBkaWYxOjE7XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtNDQwLVxcdFxcdHVpbnQ2NF90IGRpZjE6MTtcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmg6NDQxOlxcdFxcdHVpbnQ2NF90IGRpZjA6MTtcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbnBlaS1kZWZzLmgtNDQyLVxcdFxcdHVpbnQ2NF90IGNzbTE6MTtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC01MzctXFx0XFx0dWludDY0X3QgY3NtMToxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaDo1Mzg6XFx0XFx0dWludDY0X3QgZGlmMDoxO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ucGVpLWRlZnMuaC01MzktXFx0XFx0dWludDY0X3QgZGlmMToxO1xcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTU1MS1cXHRcXHR1aW50NjRfdCBkaWYxOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oOjU1MjpcXHRcXHR1aW50NjRfdCBkaWYwOjE7XFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LW5wZWktZGVmcy5oLTU1My1cXHRcXHR1aW50NjRfdCBjc20xOjE7XFxuLS1cXG5hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYz0xMjU9c3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHtcXG4tLVxcbmFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jLTE2MC1cXHRDTEtERVZfQ09OX0lEKFxcXCJzZGlmMV9mY2tcXFwiLCBcXHUwMDI2bXN0cF9jbGtzW01TVFAwMDVdKSxcXG5hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYzoxNjE6XFx0Q0xLREVWX0NPTl9JRChcXFwic2RpZjBfZmNrXFxcIiwgXFx1MDAyNm1zdHBfY2xrc1tNU1RQMDA0XSksXFxuYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMtMTYyLVxcdENMS0RFVl9DT05fSUQoXFxcImhzcGlfZmNrXFxcIiwgXFx1MDAyNm1zdHBfY2xrc1tNU1RQMDAyXSksXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYz0xMDI9c3RhdGljIGNvbnN0IGNoYXIgKm14NTNfY2tvMl9zZWxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTExNi1cXHRcXFwidHZlX3NlbFxcXCIsIFxcXCJscF9hcG1cXFwiLFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jOjExNzpcXHRcXFwidWFydF9yb290XFxcIiwgXFxcImR1bW15XFxcIi8qIHNwZGlmMF9jbGtfcm9vdCAqLyxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYy0xMTgtXFx0XFxcImR1bW15XFxcIiwgXFxcImR1bW15XFxcIiwgfTtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jPTEyMT1zdGF0aWMgY29uc3QgY2hhciAqc3BkaWZfc2VsW10gPSB7IFxcXCJwbGwxX3N3XFxcIiwgXFxcInBsbDJfc3dcXFwiLCBcXFwicGxsM19zd1xcXCIsIFxcXCJzcGRpZl94dGFsX3NlbFxcXCIsIH07XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MTIyOnN0YXRpYyBjb25zdCBjaGFyICpzcGRpZjBfY29tX3NlbFtdID0geyBcXFwic3BkaWYwX3BvZGZcXFwiLCBcXFwic3NpMV9yb290X2dhdGVcXFwiLCB9O1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTEyMy1zdGF0aWMgY29uc3QgY2hhciAqbXg1MV9zcGRpZjFfY29tX3NlbFtdID0geyBcXFwic3BkaWYxX3BvZGZcXFwiLCBcXFwic3NpMl9yb290X2dhdGVcXFwiLCB9O1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM9MTMxPXN0YXRpYyB2b2lkIF9faW5pdCBteDVfY2xvY2tzX2NvbW1vbl9pbml0KHZvaWQgX19pb21lbSAqY2NtX2Jhc2UpXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYy0yNjItXFx0Y2xrW0lNWDVfQ0xLX1BBVEFfR0FURV1cXHRcXHQ9IGlteF9jbGtfZ2F0ZTIoXFxcInBhdGFfZ2F0ZVxcXCIsIFxcXCJpcGdcXFwiLCBNWENfQ0NNX0NDR1I0LCAwKTtcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoyNjM6XFx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9TRUxdXFx0PSBpbXhfY2xrX211eChcXFwic3BkaWYwX3NlbFxcXCIsIE1YQ19DQ01fQ1NDTVIyLCAwLCAyLCBzcGRpZl9zZWwsIEFSUkFZX1NJWkUoc3BkaWZfc2VsKSk7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY0OlxcdGNsa1tJTVg1X0NMS19TUERJRjBfUFJFRF1cXHQ9IGlteF9jbGtfZGl2aWRlcihcXFwic3BkaWYwX3ByZWRcXFwiLCBcXFwic3BkaWYwX3NlbFxcXCIsIE1YQ19DQ01fQ0RDRFIsIDI1LCAzKTtcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoyNjU6XFx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9QT0RGXVxcdD0gaW14X2Nsa19kaXZpZGVyKFxcXCJzcGRpZjBfcG9kZlxcXCIsIFxcXCJzcGRpZjBfcHJlZFxcXCIsIE1YQ19DQ01fQ0RDRFIsIDE5LCA2KTtcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDUuYzoyNjY6XFx0Y2xrW0lNWDVfQ0xLX1NQRElGMF9DT01fU0VMXVxcdD0gaW14X2Nsa19tdXhfZmxhZ3MoXFxcInNwZGlmMF9jb21fc2VsXFxcIiwgTVhDX0NDTV9DU0NNUjIsIDQsIDEsXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY3OlxcdFxcdFxcdFxcdFxcdFxcdHNwZGlmMF9jb21fc2VsLCBBUlJBWV9TSVpFKHNwZGlmMF9jb21fc2VsKSwgQ0xLX1NFVF9SQVRFX1BBUkVOVCk7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg1LmM6MjY4OlxcdGNsa1tJTVg1X0NMS19TUERJRjBfR0FURV1cXHQ9IGlteF9jbGtfZ2F0ZTIoXFxcInNwZGlmMF9nYXRlXFxcIiwgXFxcInNwZGlmMF9jb21fc2VsXFxcIiwgTVhDX0NDTV9DQ0dSNSwgMjYpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NS5jLTI2OS1cXHRjbGtbSU1YNV9DTEtfU1BESUZfSVBHX0dBVEVdXFx0PSBpbXhfY2xrX2dhdGUyKFxcXCJzcGRpZl9pcGdfZ2F0ZVxcXCIsIFxcXCJpcGdcXFwiLCBNWENfQ0NNX0NDR1I1LCAzMCk7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jPTE4Mj1zdGF0aWMgdm9pZCBfX2luaXQgaW14NnNsX2Nsb2Nrc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2NtX25vZGUpXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jLTMxNi1cXHRod3NbSU1YNlNMX0NMS19FUERDX1BJWF9TRUxdICAgICA9IGlteF9jbGtfaHdfbXV4KFxcXCJlcGRjX3BpeF9zZWxcXFwiLCAgICAgYmFzZSArIDB4MzgsIDE1LCAzLCBlcGRjX3BpeF9zZWxzLCAgICAgQVJSQVlfU0laRShlcGRjX3BpeF9zZWxzKSk7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYzozMTc6XFx0aHdzW0lNWDZTTF9DTEtfU1BESUYwX1NFTF0gICAgICAgPSBpbXhfY2xrX2h3X211eChcXFwic3BkaWYwX3NlbFxcXCIsICAgICAgIGJhc2UgKyAweDMwLCAyMCwgMiwgYXVkaW9fc2VscywgICAgICAgIEFSUkFZX1NJWkUoYXVkaW9fc2VscykpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzE4LVxcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMV9TRUxdICAgICAgID0gaW14X2Nsa19od19tdXgoXFxcInNwZGlmMV9zZWxcXFwiLCAgICAgICBiYXNlICsgMHgzMCwgNywgIDIsIGF1ZGlvX3NlbHMsICAgICAgICBBUlJBWV9TSVpFKGF1ZGlvX3NlbHMpKTtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzUyLVxcdGh3c1tJTVg2U0xfQ0xLX0VQRENfUElYX1BPREZdICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcXFwiZXBkY19waXhfcG9kZlxcXCIsICAgICBcXFwiZXBkY19waXhfcHJlZFxcXCIsICAgICBiYXNlICsgMHgxOCwgMjMsIDMpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmM6MzUzOlxcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMF9QUkVEXSAgICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcXFwic3BkaWYwX3ByZWRcXFwiLCAgICAgICBcXFwic3BkaWYwX3NlbFxcXCIsICAgICAgICBiYXNlICsgMHgzMCwgMjUsIDMpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmM6MzU0OlxcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMF9QT0RGXSAgICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcXFwic3BkaWYwX3BvZGZcXFwiLCAgICAgICBcXFwic3BkaWYwX3ByZWRcXFwiLCAgICAgICBiYXNlICsgMHgzMCwgMjIsIDMpO1xcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14NnNsLmMtMzU1LVxcdGh3c1tJTVg2U0xfQ0xLX1NQRElGMV9QUkVEXSAgICAgICA9IGlteF9jbGtfaHdfZGl2aWRlcihcXFwic3BkaWYxX3ByZWRcXFwiLCAgICAgICBcXFwic3BkaWYxX3NlbFxcXCIsICAgICAgICBiYXNlICsgMHgzMCwgMTIsIDMpO1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYy0zOTctXFx0aHdzW0lNWDZTTF9DTEtfU1BCQV0gICAgICAgICA9IGlteF9jbGtfaHdfZ2F0ZTIoXFxcInNwYmFcXFwiLCAgICAgICAgIFxcXCJpcGdcXFwiLCAgICAgICAgICAgICAgIGJhc2UgKyAweDdjLCAxMik7XFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg2c2wuYzozOTg6XFx0aHdzW0lNWDZTTF9DTEtfU1BESUZdICAgICAgICA9IGlteF9jbGtfaHdfZ2F0ZTJfc2hhcmVkKFxcXCJzcGRpZlxcXCIsICAgICBcXFwic3BkaWYwX3BvZGZcXFwiLCAgIGJhc2UgKyAweDdjLCAxNCwgXFx1MDAyNnNoYXJlX2NvdW50X3NwZGlmKTtcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDZzbC5jLTM5OS1cXHRod3NbSU1YNlNMX0NMS19TUERJRl9HQ0xLXSAgID0gaW14X2Nsa19od19nYXRlMl9zaGFyZWQoXFxcInNwZGlmX2djbGtcXFwiLCAgXFxcImlwZ1xcXCIsICAgICAgICAgYmFzZSArIDB4N2MsIDE0LCBcXHUwMDI2c2hhcmVfY291bnRfc3BkaWYpO1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGlteDhxbV9hdWRfY2xrX3NlbHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy05My1cXHR7IC5md19uYW1lID0gXFxcImVzYWkxX3R4X2hmX2Nsa1xcXCIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6OTQ6XFx0eyAuZndfbmFtZSA9IFxcXCJzcGRpZjBfcnhcXFwiIH0sXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTk1LVxcdHsgLmZ3X25hbWUgPSBcXFwic3BkaWYxX3J4XFxcIiB9LFxcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTEwNT1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19wYXJlbnRfZGF0YSBpbXg4cW1fbWNsa19vdXRfc2Vsc1tdID0ge1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTEwOS1cXHR7IC5md19uYW1lID0gXFxcImhkbWlfcnhfbWNsa1xcXCIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTEwOlxcdHsgLmZ3X25hbWUgPSBcXFwic3BkaWYwX3J4XFxcIiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xMTEtXFx0eyAuZndfbmFtZSA9IFxcXCJzcGRpZjFfcnhcXFwiIH0sXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MTM0PXN0YXRpYyBzdHJ1Y3QgY2xrX2lteDhfYWNtX3NlbCBpbXg4cW1fc2Vsc1tdID0ge1xcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTE0OS1cXHR7IFxcXCJhY21fc2FpN19tY2xrX3NlbFxcXCIsIElNWF9BRE1BX0FDTV9TQUk3X01DTEtfU0VMLCBpbXg4cW1fbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxbV9tY2xrX3NlbHMpLCAweDE1MDAwMCwgMCwgMiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoxNTA6XFx0eyBcXFwiYWNtX3NwZGlmMF9tY2xrX3NlbFxcXCIsIElNWF9BRE1BX0FDTV9TUERJRjBfVFhfQ0xLX1NFTCwgaW14OHFtX21jbGtfc2VscywgQVJSQVlfU0laRShpbXg4cW1fbWNsa19zZWxzKSwgMHgxQTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTUxLVxcdHsgXFxcImFjbV9zcGRpZjFfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fU1BESUYxX1RYX0NMS19TRUwsIGlteDhxbV9tY2xrX3NlbHMsIEFSUkFZX1NJWkUoaW14OHFtX21jbGtfc2VscyksIDB4MUIwMDAwLCAwLCAyIH0sXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM9MTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhIGlteDhxeHBfYXVkX2Nsa19zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTYzLVxcdHsgLmZ3X25hbWUgPSBcXFwiZXNhaTBfdHhfaGZfY2xrXFxcIiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoxNjQ6XFx0eyAuZndfbmFtZSA9IFxcXCJzcGRpZjBfcnhcXFwiIH0sXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTE2NS1cXHR7IC5md19uYW1lID0gXFxcInNhaTBfcnhfYmNsa1xcXCIgfSxcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz0xNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgaW14OHF4cF9tY2xrX291dF9zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMTc3LVxcdHsgLmluZGV4ID0gLTEgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MTc4OlxcdHsgLmZ3X25hbWUgPSBcXFwic3BkaWYwX3J4XFxcIiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0xNzktXFx0eyAuaW5kZXggPSAtMSB9LFxcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTE5MT1zdGF0aWMgc3RydWN0IGNsa19pbXg4X2FjbV9zZWwgaW14OHF4cF9zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjAyLVxcdHsgXFxcImFjbV9zYWk1X21jbGtfc2VsXFxcIiwgSU1YX0FETUFfQUNNX1NBSTVfTUNMS19TRUwsIGlteDhxeHBfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxeHBfbWNsa19zZWxzKSwgMHgxNTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjAzOlxcdHsgXFxcImFjbV9zcGRpZjBfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fU1BESUYwX1RYX0NMS19TRUwsIGlteDhxeHBfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxeHBfbWNsa19zZWxzKSwgMHgxQTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjA0LVxcdHsgXFxcImFjbV9tcXNfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fTVFTX1RYX0NMS19TRUwsIGlteDhxeHBfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhxeHBfbWNsa19zZWxzKSwgMHgxQzAwMDAsIDAsIDIgfSxcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz0yMDc9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgaW14OGR4bF9hdWRfY2xrX3NlbHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0yMTUtXFx0eyAuaW5kZXggPSAtMSB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYzoyMTY6XFx0eyAuZndfbmFtZSA9IFxcXCJzcGRpZjBfcnhcXFwiIH0sXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jLTIxNy1cXHR7IC5md19uYW1lID0gXFxcInNhaTBfcnhfYmNsa1xcXCIgfSxcXG4tLVxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYz0yMjU9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfcGFyZW50X2RhdGEgaW14OGR4bF9tY2xrX291dF9zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjI5LVxcdHsgLmluZGV4ID0gLTEgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjMwOlxcdHsgLmZ3X25hbWUgPSBcXFwic3BkaWYwX3J4XFxcIiB9LFxcbmRyaXZlcnMvY2xrL2lteC9jbGstaW14OC1hY20uYy0yMzEtXFx0eyAuaW5kZXggPSAtMSB9LFxcbi0tXFxuZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4LWFjbS5jPTI0Mz1zdGF0aWMgc3RydWN0IGNsa19pbXg4X2FjbV9zZWwgaW14OGR4bF9zZWxzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjUxLVxcdHsgXFxcImFjbV9zYWkzX21jbGtfc2VsXFxcIiwgSU1YX0FETUFfQUNNX1NBSTNfTUNMS19TRUwsIGlteDhkeGxfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhkeGxfbWNsa19zZWxzKSwgMHgxMTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmM6MjUyOlxcdHsgXFxcImFjbV9zcGRpZjBfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fU1BESUYwX1RYX0NMS19TRUwsIGlteDhkeGxfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhkeGxfbWNsa19zZWxzKSwgMHgxQTAwMDAsIDAsIDIgfSxcXG5kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDgtYWNtLmMtMjUzLVxcdHsgXFxcImFjbV9tcXNfbWNsa19zZWxcXFwiLCBJTVhfQURNQV9BQ01fTVFTX1RYX0NMS19TRUwsIGlteDhkeGxfbWNsa19zZWxzLCBBUlJBWV9TSVpFKGlteDhkeGxfbWNsa19zZWxzKSwgMHgxQzAwMDAsIDAsIDIgfSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YTEtY3BnLW1zc3IuYz0xMjY9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc0YTFfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YTEtY3BnLW1zc3IuYy0xNTMtXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc0QTFfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRhMS1jcGctbXNzci5jOjE1NDpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0IDMxNCxcXHRSOEE3NzRBMV9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGExLWNwZy1tc3NyLmMtMTU1LVxcdERFRl9NT0QoXFxcInBjaWUxXFxcIixcXHRcXHQgMzE4LFxcdFI4QTc3NEExX0NMS19TM0QxKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YjEtY3BnLW1zc3IuYz0xMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc0YjFfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YjEtY3BnLW1zc3IuYy0xNTEtXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc0QjFfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRiMS1jcGctbXNzci5jOjE1MjpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0IDMxNCxcXHRSOEE3NzRCMV9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGIxLWNwZy1tc3NyLmMtMTUzLVxcdERFRl9NT0QoXFxcInBjaWUxXFxcIixcXHRcXHQgMzE4LFxcdFI4QTc3NEIxX0NMS19TM0QxKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YzAtY3BnLW1zc3IuYz0xMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc0YzBfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0YzAtY3BnLW1zc3IuYy0xNTktXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc0QzBfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRjMC1jcGctbXNzci5jOjE2MDpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0IDMxNCxcXHRSOEE3NzRDMF9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGMwLWNwZy1tc3NyLmMtMTYxLVxcdERFRl9NT0QoXFxcInBjaWUwXFxcIixcXHRcXHQgMzE5LFxcdFI4QTc3NEMwX0NMS19TM0QxKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0ZTEtY3BnLW1zc3IuYz0xMjc9c3RhdGljIGNvbnN0IHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc0ZTFfbW9kX2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc0ZTEtY3BnLW1zc3IuYy0xNTgtXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc0RTFfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3NzRlMS1jcGctbXNzci5jOjE1OTpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0IDMxNCxcXHRSOEE3NzRFMV9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3NGUxLWNwZy1tc3NyLmMtMTYwLVxcdERFRl9NT0QoXFxcInBjaWUxXFxcIixcXHRcXHQgMzE4LFxcdFI4QTc3NEUxX0NMS19TM0QxKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5NS1jcGctbXNzci5jPTEzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG1zc3JfbW9kX2NsayByOGE3Nzk1X21vZF9jbGtzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTUtY3BnLW1zc3IuYy0xNjEtXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc5NV9DTEtfU0QxKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTUtY3BnLW1zc3IuYzoxNjI6XFx0REVGX01PRChcXFwic2RpZjBcXFwiLFxcdFxcdCAzMTQsXFx0UjhBNzc5NV9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTUtY3BnLW1zc3IuYy0xNjMtXFx0REVGX01PRChcXFwicGNpZTFcXFwiLFxcdFxcdCAzMTgsXFx0UjhBNzc5NV9DTEtfUzNEMSksXFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYz0xMzM9c3RhdGljIHN0cnVjdCBtc3NyX21vZF9jbGsgcjhhNzc5Nl9tb2RfY2xrc1tdIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYy0xNjItXFx0REVGX01PRChcXFwic2RpZjFcXFwiLFxcdFxcdCAzMTMsXFx0UjhBNzc5Nl9DTEtfU0QxKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYzoxNjM6XFx0REVGX01PRChcXFwic2RpZjBcXFwiLFxcdFxcdCAzMTQsXFx0UjhBNzc5Nl9DTEtfU0QwKSxcXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTYtY3BnLW1zc3IuYy0xNjQtXFx0REVGX01PRChcXFwicGNpZTFcXFwiLFxcdFxcdCAzMTgsXFx0UjhBNzc5Nl9DTEtfUzNEMSksXFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmM9MTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNzcl9tb2RfY2xrIHI4YTc3OTY1X21vZF9jbGtzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTY1LWNwZy1tc3NyLmMtMTU4LVxcdERFRl9NT0QoXFxcInNkaWYxXFxcIixcXHRcXHQzMTMsXFx0UjhBNzc5NjVfQ0xLX1NEMSksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk2NS1jcGctbXNzci5jOjE1OTpcXHRERUZfTU9EKFxcXCJzZGlmMFxcXCIsXFx0XFx0MzE0LFxcdFI4QTc3OTY1X0NMS19TRDApLFxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5NjUtY3BnLW1zc3IuYy0xNjAtXFx0REVGX01PRChcXFwicGNpZTFcXFwiLFxcdFxcdDMxOCxcXHRSOEE3Nzk2NV9DTEtfUzNEMSksXFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTkwLWNwZy1tc3NyLmM9MTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXNzcl9tb2RfY2xrIHI4YTc3OTkwX21vZF9jbGtzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9yZW5lc2FzL3I4YTc3OTkwLWNwZy1tc3NyLmMtMTYxLVxcdERFRl9NT0QoXFxcInNkaWYxXFxcIixcXHRcXHQgMzEzLFxcdFI4QTc3OTkwX0NMS19TRDEpLFxcbmRyaXZlcnMvY2xrL3JlbmVzYXMvcjhhNzc5OTAtY3BnLW1zc3IuYzoxNjI6XFx0REVGX01PRChcXFwic2RpZjBcXFwiLFxcdFxcdCAzMTQsXFx0UjhBNzc5OTBfQ0xLX1NEMCksXFxuZHJpdmVycy9jbGsvcmVuZXNhcy9yOGE3Nzk5MC1jcGctbXNzci5jLTE2My1cXHRERUZfTU9EKFxcXCJwY2llMFxcXCIsXFx0XFx0IDMxOSxcXHRSOEE3Nzk5MF9DTEtfUzNEMSksXFxuLS1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM9NDgzPVBOQU1FKGNsa19pMnMxMF84Y2hfcnhfcClcXHRcXHQ9IHsgXFxcImNsa19pMnMxMF84Y2hfcnhfc3JjXFxcIiwgXFxcImNsa19pMnMxMF84Y2hfcnhfZnJhY1xcXCIsIFxcXCJpMnMxMF9tY2xraW5cXFwiLCBcXFwieGluMTJtXFxcIiB9O1xcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo0ODQ6UE5BTUUoY2xrX3NwZGlmMF9wKVxcdFxcdFxcdD0geyBcXFwiY2xrX3NwZGlmMF9zcmNcXFwiLCBcXFwiY2xrX3NwZGlmMF9mcmFjXFxcIiwgXFxcInhpbjEybVxcXCIgfTtcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtNDg1LVBOQU1FKGNsa19zcGRpZjFfcClcXHRcXHRcXHQ9IHsgXFxcImNsa19zcGRpZjFfc3JjXFxcIiwgXFxcImNsa19zcGRpZjFfZnJhY1xcXCIsIFxcXCJ4aW4xMm1cXFwiIH07XFxuLS1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM9NTc4PXN0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfY2xrX2JyYW5jaCByazM1ODhfaTJzMTBfOGNoX3J4X2ZyYWNtdXggX19pbml0ZGF0YSA9XFxuLS1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtNTgxLVxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYzo1ODI6c3RhdGljIHN0cnVjdCByb2NrY2hpcF9jbGtfYnJhbmNoIHJrMzU4OF9zcGRpZjBfZnJhY211eCBfX2luaXRkYXRhID1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM6NTgzOlxcdE1VWChDTEtfU1BESUYwLCBcXFwiY2xrX3NwZGlmMFxcXCIsIGNsa19zcGRpZjBfcCwgQ0xLX1NFVF9SQVRFX1BBUkVOVCxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtNTg0LVxcdFxcdFxcdFJLMzU4OF9DTEtTRUxfQ09OKDM0KSwgMCwgMiwgTUZMQUdTKTtcXG4tLVxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYz02ODA9c3RhdGljIHN0cnVjdCByb2NrY2hpcF9jbGtfYnJhbmNoIHJrMzU4OF9lYXJseV9jbGtfYnJhbmNoZXNbXSBfX2luaXRkYXRhID0ge1xcbi0tXFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jLTk1Mi1cXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM6OTUzOlxcdEdBVEUoSENMS19TUERJRjAsIFxcXCJoY2xrX3NwZGlmMFxcXCIsIFxcXCJoY2xrX2F1ZGlvX3Jvb3RcXFwiLCAwLFxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTQtXFx0XFx0XFx0UkszNTg4X0NMS0dBVEVfQ09OKDgpLCAxNCwgR0ZMQUdTKSxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM6OTU1OlxcdENPTVBPU0lURShDTEtfU1BESUYwX1NSQywgXFxcImNsa19zcGRpZjBfc3JjXFxcIiwgZ3BsbF9hdXBsbF9wLCAwLFxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTYtXFx0XFx0XFx0UkszNTg4X0NMS1NFTF9DT04oMzIpLCA4LCAxLCBNRkxBR1MsIDMsIDUsIERGTEFHUyxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtOTU3LVxcdFxcdFxcdFJLMzU4OF9DTEtHQVRFX0NPTig4KSwgMTUsIEdGTEFHUyksXFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jOjk1ODpcXHRDT01QT1NJVEVfRlJBQ01VWChDTEtfU1BESUYwX0ZSQUMsIFxcXCJjbGtfc3BkaWYwX2ZyYWNcXFwiLCBcXFwiY2xrX3NwZGlmMF9zcmNcXFwiLFxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NTktXFx0XFx0XFx0Q0xLX1NFVF9SQVRFX1BBUkVOVCxcXG4tLVxcbmRyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazM1ODguYy05NjEtXFx0XFx0XFx0UkszNTg4X0NMS0dBVEVfQ09OKDkpLCAwLCBHRkxBR1MsXFxuZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzU4OC5jOjk2MjpcXHRcXHRcXHRcXHUwMDI2cmszNTg4X3NwZGlmMF9mcmFjbXV4KSxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmM6OTYzOlxcdEdBVEUoTUNMS19TUERJRjAsIFxcXCJtY2xrX3NwZGlmMFxcXCIsIFxcXCJjbGtfc3BkaWYwXFxcIiwgMCxcXG5kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszNTg4LmMtOTY0LVxcdFxcdFxcdFJLMzU4OF9DTEtHQVRFX0NPTig5KSwgMSwgR0ZMQUdTKSxcXG4tLVxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYz03Mzc9UE5BTUUobW91dF9jbXVfY3BfbXBsbF9jbGtfdXNlcl9wYXJlbnRzKVxcdD0geyBcXFwib3NjY2xrXFxcIiB9O1xcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzo3Mzg6UE5BTUUobW91dF9jbXVfYXVkX2F1ZGlmMF9wKVxcdFxcdFxcdD0geyBcXFwiZG91dF9zaGFyZWQwX2RpdjFcXFwiLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy03MzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJkb3V0X3NoYXJlZDFfZGl2MVxcXCIsXFxuLS1cXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM9ODkwPVBOQU1FKG1vdXRfY211X211eF9hbGl2ZV9ub2NfcClcXHRcXHRcXHQ9IHsgXFxcImRvdXRfc2hhcmVkMF9kaXYyXFxcIixcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtODkxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiZG91dF9zaGFyZWQyX2RpdjJcXFwiIH07XFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjg5MjpQTkFNRShtb3V0X2NtdV9tdXhfYXVkX2F1ZGlmMF9wKVxcdFxcdD0geyBcXFwiZG91dF9zaGFyZWQwX2RpdjFcXFwiLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy04OTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJkb3V0X3NoYXJlZDFfZGl2MVxcXCIsXFxuLS1cXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM9MTM1ND1zdGF0aWMgY29uc3Qgc3RydWN0IHNhbXN1bmdfbXV4X2Nsb2NrIHRvcF9tdXhfY2xrc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTEzNjAtXFx0ICAgIDQsIDEpLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxMzYxOlxcdE1VWChDTEtfTU9VVF9DTVVfQVVEX0FVRElGMCwgXFxcIm1vdXRfY211X2F1ZF9hdWRpZjBcXFwiLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxMzYyOlxcdCAgICBtb3V0X2NtdV9hdWRfYXVkaWYwX3AsIENMS19DT05fTVVYX0NMS0NNVV9BVURfQVVESUYwLCAwLCAzKSxcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTM2My1cXHRNVVgoQ0xLX01PVVRfQ01VX0FVRF9BVURJRjEsIFxcXCJtb3V0X2NtdV9hdWRfYXVkaWYxXFxcIixcXG4tLVxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy0xNDExLVxcdCAgICBtb3V0X2NtdV9tdXhfYWxpdmVfbm9jX3AsIENMS19DT05fTVVYX01VWF9DTEtDTVVfQUxJVkVfTk9DLCAwLCAxKSxcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM6MTQxMjpcXHRNVVgoQ0xLX01PVVRfQ01VX01VWF9BVURfQVVESUYwLCBcXFwibW91dF9jbXVfbXV4X2F1ZF9hdWRpZjBcXFwiLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNDEzOlxcdCAgICBtb3V0X2NtdV9tdXhfYXVkX2F1ZGlmMF9wLCBDTEtfQ09OX01VWF9NVVhfQ0xLQ01VX0FVRF9BVURJRjAsXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jLTE0MTQtXFx0ICAgIDAsIDMpLFxcbi0tXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jPTE2MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBzYW1zdW5nX2Rpdl9jbG9jayB0b3BfZGl2X2Nsa3NbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy0xNzEzLVxcdCAgICBcXFwibW91dF9jbXVfbXV4X2NwX3NoYXJlZDFfY2xrXFxcIiwgQ0xLX0NPTl9ESVZfQ1BfU0hBUkVEMV9DTEssIDAsIDMpLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYzoxNzE0OlxcdERJVihDTEtfRE9VVF9DTVVfRElWX0FVRF9BVURJRjAsIFxcXCJkb3V0X2NtdV9kaXZfYXVkX2F1ZGlmMFxcXCIsXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjE3MTU6XFx0ICAgIFxcXCJtb3V0X2NtdV9tdXhfYXVkX2F1ZGlmMFxcXCIsIENMS19DT05fRElWX0RJVl9DTEtDTVVfQVVEX0FVRElGMCxcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmMtMTcxNi1cXHQgICAgMCwgNiksXFxuZHJpdmVycy9jbGsvc2Ftc3VuZy9jbGstZXh5bm9zMjIwMC5jOjE3MTc6XFx0RElWKENMS19ET1VUX0NNVV9ESVZfQVVEX0FVRElGMF9TTSwgXFxcImRvdXRfY211X2Rpdl9hdWRfYXVkaWYwX3NtXFxcIixcXG5kcml2ZXJzL2Nsay9zYW1zdW5nL2Nsay1leHlub3MyMjAwLmM6MTcxODpcXHQgICAgXFxcIm1vdXRfY211X2F1ZF9hdWRpZjBcXFwiLCBDTEtfQ09OX0RJVl9ESVZfQ0xLQ01VX0FVRF9BVURJRjBfU00sIDAsIDYpLFxcbmRyaXZlcnMvY2xrL3NhbXN1bmcvY2xrLWV4eW5vczIyMDAuYy0xNzE5LVxcdERJVihDTEtfRE9VVF9DTVVfRElWX0FVRF9BVURJRjEsIFxcXCJkb3V0X2NtdV9kaXZfYXVkX2F1ZGlmMVxcXCIsXFxuLS1cXG5kcml2ZXJzL3BtZG9tYWluL2lteC9zY3UtcGQuYz0xMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfc2NfcGRfcmFuZ2UgaW14OHF4cF9zY3VfcGRfcmFuZ2VzW10gPSB7XFxuLS1cXG5kcml2ZXJzL3BtZG9tYWluL2lteC9zY3UtcGQuYy0xNTktXFx0eyBcXFwiZXNhaTFcXFwiLCBJTVhfU0NfUl9FU0FJXzEsIDEsIGZhbHNlLCAwIH0sXFxuZHJpdmVycy9wbWRvbWFpbi9pbXgvc2N1LXBkLmM6MTYwOlxcdHsgXFxcInNwZGlmMFxcXCIsIElNWF9TQ19SX1NQRElGXzAsIDEsIGZhbHNlLCAwIH0sXFxuZHJpdmVycy9wbWRvbWFpbi9pbXgvc2N1LXBkLmMtMTYxLVxcdHsgXFxcInNwZGlmMVxcXCIsIElNWF9TQ19SX1NQRElGXzEsIDEsIGZhbHNlLCAwIH0sXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9Njc9aW50IGVyb2ZzX2luaXRfbWV0YWJ1ZihzdHJ1Y3QgZXJvZnNfYnVmICpidWYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmMtNzgtXFx0fVxcbmZzL2Vyb2ZzL2RhdGEuYzo3OTpcXHRidWYtXFx1MDAzZW9mZiA9IHNiaS1cXHUwMDNlZGlmMC5mc29mZjtcXG5mcy9lcm9mcy9kYXRhLmMtODAtXFx0aWYgKGVyb2ZzX2lzX2ZpbGVpb19tb2RlKHNiaSkpIHtcXG5mcy9lcm9mcy9kYXRhLmM6ODE6XFx0XFx0YnVmLVxcdTAwM2VmaWxlID0gc2JpLVxcdTAwM2VkaWYwLmZpbGU7XFx0Lyogc29tZSBmcyBsaWtlIEZVU0UgbmVlZHMgaXQgKi9cXG5mcy9lcm9mcy9kYXRhLmMtODItXFx0XFx0YnVmLVxcdTAwM2VtYXBwaW5nID0gYnVmLVxcdTAwM2VmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9MjA5PWludCBlcm9mc19tYXBfZGV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBlcm9mc19tYXBfZGV2ICptYXApXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmMtMjE1LVxcbmZzL2Vyb2ZzL2RhdGEuYzoyMTY6XFx0ZXJvZnNfZmlsbF9mcm9tX2RldmluZm8obWFwLCBzYiwgXFx1MDAyNkVST0ZTX1NCKHNiKS1cXHUwMDNlZGlmMCk7XFxuZnMvZXJvZnMvZGF0YS5jLTIxNy1cXHRtYXAtXFx1MDAzZW1fYmRldiA9IHNiLVxcdTAwM2VzX2JkZXY7XFx0LyogdXNlIHNfYmRldiBmb3IgdGhlIHByaW1hcnkgZGV2aWNlICovXFxuLS1cXG5mcy9lcm9mcy9pbnRlcm5hbC5oPTg3PXN0cnVjdCBlcm9mc19zYl9pbmZvIHtcXG5mcy9lcm9mcy9pbnRlcm5hbC5oOjg4OlxcdHN0cnVjdCBlcm9mc19kZXZpY2VfaW5mbyBkaWYwO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtODktXFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMgb3B0O1xcdC8qIG9wdGlvbnMgKi9cXG4tLVxcbmZzL2Vyb2ZzL2ludGVybmFsLmg9MTY1PXN0YXRpYyBpbmxpbmUgYm9vbCBlcm9mc19pc19maWxlaW9fbW9kZShzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxcbmZzL2Vyb2ZzL2ludGVybmFsLmgtMTY2LXtcXG5mcy9lcm9mcy9pbnRlcm5hbC5oOjE2NzpcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlZGlmMC5maWxlO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtMTY4LX1cXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9MTgzPXN0YXRpYyBpbnQgZXJvZnNfc2Nhbl9kZXZpY2VzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTE5Mi1cXG5mcy9lcm9mcy9zdXBlci5jOjE5MzpcXHRzYmktXFx1MDAzZXRvdGFsX2Jsb2NrcyA9IHNiaS1cXHUwMDNlZGlmMC5ibG9ja3M7XFxuZnMvZXJvZnMvc3VwZXIuYy0xOTQtXFx0aWYgKCFlcm9mc19zYl9oYXNfZGV2aWNlX3RhYmxlKHNiaSkpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTIwNS1cXG5mcy9lcm9mcy9zdXBlci5jOjIwNjpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSBcXHUwMDI2XFx1MDAyNiAhc2JpLVxcdTAwM2VkaWYwLmRheF9kZXYpIHtcXG5mcy9lcm9mcy9zdXBlci5jLTIwNy1cXHRcXHRlcm9mc19pbmZvKHNiLCBcXFwiREFYIHVuc3VwcG9ydGVkIGJ5IGJsb2NrIGRldmljZS4gVHVybmluZyBvZmYgREFYLlxcXCIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0yNTA9c3RhdGljIGludCBlcm9mc19yZWFkX3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzAxLVxcdH1cXG5mcy9lcm9mcy9zdXBlci5jOjMwMjpcXHRzYmktXFx1MDAzZWRpZjAuYmxvY2tzID0gbGUzMl90b19jcHUoZHNiLVxcdTAwM2VibG9ja3NfbG8pO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMzAzLVxcdHNiaS1cXHUwMDNlbWV0YV9ibGthZGRyID0gbGUzMl90b19jcHUoZHNiLVxcdTAwM2VtZXRhX2Jsa2FkZHIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy0zMjEtXFx0XFx0c2JpLVxcdTAwM2Vyb290X25pZCA9IGxlNjRfdG9fY3B1KGRzYi1cXHUwMDNlcm9vdG5pZF84Yik7XFxuZnMvZXJvZnMvc3VwZXIuYzozMjI6XFx0XFx0c2JpLVxcdTAwM2VkaWYwLmJsb2NrcyA9IHNiaS1cXHUwMDNlZGlmMC5ibG9ja3MgfFxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzIzLVxcdFxcdFxcdFxcdCgodTY0KWxlMTZfdG9fY3B1KGRzYi1cXHUwMDNlcmIuYmxvY2tzX2hpKSBcXHUwMDNjXFx1MDAzYyAzMik7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTQ0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTQ0Ny1cXG5mcy9lcm9mcy9zdXBlci5jOjQ0ODpcXHRpZiAoZmMtXFx1MDAzZXNvdXJjZSB8fCBzYmktXFx1MDAzZWRpZjAuZmlsZSlcXG5mcy9lcm9mcy9zdXBlci5jLTQ0OS1cXHRcXHRyZXR1cm4gaW52YWxmKGZjLCBcXFwiTXVsdGlwbGUgc291cmNlc1xcXCIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy00NjctXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZnMvZXJvZnMvc3VwZXIuYzo0Njg6XFx0XFx0c2JpLVxcdTAwM2VkaWYwLmZpbGUgPSBub19mcmVlX3B0cihwYXJhbS1cXHUwMDNlZmlsZSk7XFxuZnMvZXJvZnMvc3VwZXIuYy00NjktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTQ3Nz1zdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNTowNy4zMTczNTMwMTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MzU2OTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBFUk9GUyBEZXZpY2UgSW5mb3JtYXRpb24qKlxuXG5SaWdodCwgc28gYGRpZjBgIGlzIGRlZmluZWQgYXMgYSBgc3RydWN0IGVyb2ZzX2RldmljZV9pbmZvYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBtZXRhZGF0YSBmb3IgdGhlIEVST0ZTIGRldmljZSBpcyBzdG9yZWQsIGFuZCBpdCdzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZmlsZSBzeXN0ZW0ncyBsYXlvdXQgYW5kIGhvdyBpdCdzIG9wZXJhdGluZy4gTm93LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgc3RydWN0IGVyb2ZzX2RldmljZV9pbmZvYCBpdHNlbGYuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZmllbGRzIHdpdGhpbiBpdDsgdGhlIGNyaXRpY2FsIGNvbXBvbmVudHMgZm9yIGRldmljZSBpZGVudGlmaWNhdGlvbiBhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGJsb2NrIHNpemVzLCBjb21wcmVzc2lvbiBzZXR0aW5ncywgYW5kIHN1cGVyYmxvY2sgaW5mb3JtYXRpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgb24tZGlzayBmb3JtYXQuIEl0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgaW4tZGVwdGggYW5hbHlzaXMgb2YgdGhlIEVST0ZTIGRldmljZSdzIHByb3BlcnRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjM5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzU6MTEuMDEwOTI1NDU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY3Nzg5OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBlcm9mc19kZXZpY2VfaW5mbyBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9pbnRlcm5hbC5oPTQyPXR5cGVkZWYgdTY0IGVyb2ZzX2Jsa190O1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDMtXFxuZnMvZXJvZnMvaW50ZXJuYWwuaDo0NDpzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8ge1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNDUtXFx0Y2hhciAqcGF0aDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzU6MTMuMzc4NzI1NzgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDQ2MDg5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBlcm9mc19kZXZpY2VfaW5mb2AgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGVyb2ZzX2RldmljZV9pbmZvYCBzdHJ1Y3R1cmUgaW5zaWRlIGFuZCBvdXQuIEl0J3MgYSBrZXkgcGllY2UsIGFuZCBJIGNhbid0IGFmZm9yZCBhbnkgZ2FwcyBpbiBteSB1bmRlcnN0YW5kaW5nLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIC0gbm8gc2tpbW1pbmcsIG5vIHNob3J0Y3V0cy4gR290dGEga25vdyB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHM7IGFsbCB0aGUgbWVtYmVycywgdGhlaXIgZGF0YSB0eXBlcywgdGhlaXIgcHVycG9zZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgc3RydWN0dXJlIGludGVyZmFjZXMgd2l0aCB0aGUgYmxvY2sgZGV2aWNlLCBob3cgaXQgbWFuYWdlcyBtZXRhZGF0YSwgYW5kIHdoYXQgb3B0aW1pemF0aW9ucyBpdCBlbmFibGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVsbHkgd2lsbCBhbGxvdyBtZSB0byBtYWtlIGFueSBlbmhhbmNlbWVudHMgb3IgZGVidWcgYW55IGlzc3VlcyBJIGNvbWUgYWNyb3NzIGxhdGVyLiBJ4oCZbSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgdG9vLCBhbmQgd2FudCB0byBldmFsdWF0ZSBpZiBJIGNhbiBzZWUgaWYgdGhlcmUgYXJlIGJldHRlciBtZW1vcnkgYWxpZ25tZW50IG9yIG9yZGVyIGNob2ljZXMgdGhhdCBjb3VsZCBiZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM1OjIxLjc4MzMzNzU3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDExNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvaW50ZXJuYWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0NCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0NDpcXHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8ge1xcbiAgNDU6XFx0XFx0Y2hhciAqcGF0aDtcXG4gIDQ2OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbiAgNDc6XFx0XFx0c3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXY7XFxuICA0ODpcXHRcXHR1NjQgZnNvZmYsIGRheF9wYXJ0X29mZjtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ZXJvZnNfYmxrX3QgYmxvY2tzO1xcbiAgNTE6XFx0XFx0ZXJvZnNfYmxrX3QgdW5pYWRkcjtcXG4gIDUyOlxcdH07XFxuICA1MzpcXHRcXG4gIDU0OlxcdGVudW0ge1xcbiAgNTU6XFx0XFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE8sXFxuICA1NjpcXHRcXHRFUk9GU19TWU5DX0RFQ09NUFJFU1NfRk9SQ0VfT04sXFxuICA1NzpcXHRcXHRFUk9GU19TWU5DX0RFQ09NUFJFU1NfRk9SQ0VfT0ZGXFxuICA1ODpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNToyMS43ODM0NDAwNjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyMDg5Njg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRVJPRlMgU3VwZXJibG9jayBTaGFyaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZXJvZnNfc2Jfc2hhcmVfdGVzdF9zdXBlcmAgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYy4gSXQncyBjb21wYXJpbmcgdHdvIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2Agc3RydWN0dXJlcywgYHNiaWAgYW5kIGBuZXdfc2JpYCwgdG8gc2VlIGlmIHRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIHVuZGVybHlpbmcgZmlsZXN5c3RlbS4gVGhlIGNvbXBhcmlzb24gY2hlY2tzIHNldmVyYWwgYXNwZWN0cywgc3RhcnRpbmcgd2l0aCB0aGUgYGZpbGVgIGFuZCBgZnNvZmZgIG1lbWJlcnMgd2l0aGluIHRoZSBgZGlmMGAgc3RydWN0LCB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBkZXZpY2UgaW5mb3JtYXRpb24uIElmIGVpdGhlciBvZiB0aG9zZSBhcmUgbnVsbCwgaXQgaW1tZWRpYXRlbHkgYmFpbHMgb3V0LlxuXG5UaGUgY29yZSBvZiB0aGUgY29tcGFyaXNvbiBoaW5nZXMgb24gd2hldGhlciB0aGUgaW5vZGVzIG9mIHRob3NlIGZpbGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCB0aGUgb2Zmc2V0cyBhcmUgdGhlIHNhbWUsIGFuZCwgbW9zdCBjcml0aWNhbGx5LCBhIGBtZW1jbXBgIG9mIHRoZSBgc2JpLVx1MDAzZW9wdGAgZmllbGQgYWdhaW5zdCBgbmV3X3NiaS1cdTAwM2VvcHRgIGlzIHBlcmZvcm1lZC4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnN0aXR1dGVzIGEgbWF0Y2ggZm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIDEuXG5cblRoZSB1c2Ugb2YgYG1lbWNtcGAgaGVyZSBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHF1ZXN0aW9uOiBpcyB0aGlzIHRoZSAqb25seSogcGxhY2Ugd2hlcmUgYHNiaS1cdTAwM2VvcHRgIGlzIG1vZGlmaWVkPyBJZiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgd2hlcmUgaXQgZ2V0cyB1cGRhdGVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgdXBkYXRlcyBtaWdodCBhZmZlY3QgdGhpcyBzaGFyaW5nIHRlc3QuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGVyZSBgc2JpLVx1MDAzZW9wdGAgaXMgaW5pdGlhbGl6ZWQgb3IgbW9kaWZpZWQuIEknbGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGVyb2ZzX3NiX3NoYXJlX3Rlc3Rfc3VwZXJgIHRvIHNlZSB3aGVyZSB0aGUgYHNiaS1cdTAwM2VvcHRgIGZpZWxkIGdldHMgaXRzIHZhbHVlcy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIHNpbmNlIHRoZSBmdW5jdGlvbiBzdWdnZXN0cyB3ZSBjYW4gc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDM0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzU6MjguNzA0MzQwNTI4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2NzM2Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyb2ZzX2ZjX3BhcnNlX3BhcmFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL3N1cGVyLmM9NDQzPXN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2Vfc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNDc2LVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NDc3OnN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbmZzL2Vyb2ZzL3N1cGVyLmMtNDc4LVxcdFxcdFxcdFxcdHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz05NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgZXJvZnNfY29udGV4dF9vcHMgPSB7XFxuZnMvZXJvZnMvc3VwZXIuYzo5NDM6XFx0LnBhcnNlX3BhcmFtXFx0PSBlcm9mc19mY19wYXJzZV9wYXJhbSxcXG5mcy9lcm9mcy9zdXBlci5jLTk0NC1cXHQuZ2V0X3RyZWUgICAgICAgPSBlcm9mc19mY19nZXRfdHJlZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MzU6MzAuMzkxMDg1NTEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTQ2NTk4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBlcm9mc19mY19wYXJzZV9wYXJhbWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgZ3V0cyBvZiB0aGlzLiBJJ20gZm9jdXNpbmcgb24gYGVyb2ZzX2ZjX3BhcnNlX3BhcmFtYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhcnNlZC4gV2hhdCdzIHRoZSBzdHJhdGVneT8gQXJlIHRoZXkgdXNpbmcgYSBzdHJhaWdodGZvcndhcmQgdG9rZW5pemF0aW9uIGFwcHJvYWNoLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIHRvIGhhbmRsZSB2YXJpYXRpb25zIGFuZCBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBpbnB1dD8gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3ZlIGFjY291bnRlZCBmb3IgYWxsIHRoZSBlZGdlIGNhc2VzLiBUaGluayBhYm91dCBob3cgdGhlIHBhcmFtZXRlcnMgaW50ZXJhY3Qg4oCTIGFyZSB0aGVyZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBkZWZhdWx0IHZhbHVlcywgYW5kIGhvdyBhcmUgdGhvc2UgaGFuZGxlZCBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcz8gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBtYXliZSBhIHN0YWNrIGJ1ZmZlciwgYW55IHBvc3NpYmlsaXR5IG9mIGFuIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eT8gTW9zdCBpbXBvcnRhbnRseSwgZG9lcyB0aGlzIGNvZGUgaW1wbGVtZW50IHRoZSBwYXJhbWV0ZXJzIGluIGEgc2ltcGxlIHdheT8gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI5OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM1OjM0LjQ0NTc0NzkyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9lcm9mcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3NyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0Nzc6XFx0c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIDQ3ODpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4gNDc5OlxcdHtcXG4gNDgwOlxcdFxcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cXHUwMDNlc19mc19pbmZvO1xcbiA0ODE6XFx0XFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XFxuIDQ4MjpcXHRcXHRzdHJ1Y3QgZXJvZnNfZGV2aWNlX2luZm8gKmRpZjtcXG4gNDgzOlxcdFxcdGludCBvcHQsIHJldDtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0b3B0ID0gZnNfcGFyc2UoZmMsIGVyb2ZzX2ZzX3BhcmFtZXRlcnMsIHBhcmFtLCBcXHUwMDI2cmVzdWx0KTtcXG4gNDg2OlxcdFxcdGlmIChvcHQgXFx1MDAzYyAwKVxcbiA0ODc6XFx0XFx0XFx0cmV0dXJuIG9wdDtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gNDkwOlxcdFxcdGNhc2UgT3B0X3VzZXJfeGF0dHI6XFxuIDQ5MTpcXHRcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSlcXG4gNDkyOlxcdFxcdFxcdFxcdGVycm9yZmMoZmMsIFxcXCJ7LG5vfXVzZXJfeGF0dHIgb3B0aW9ucyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuIDQ5MzpcXHRcXHRcXHRlbHNlIGlmIChyZXN1bHQuYm9vbGVhbilcXG4gNDk0OlxcdFxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcXG4gNDk1OlxcdFxcdFxcdGVsc2VcXG4gNDk2OlxcdFxcdFxcdFxcdGNsZWFyX29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xcbiA0OTc6XFx0XFx0XFx0YnJlYWs7XFxuIDQ5ODpcXHRcXHRjYXNlIE9wdF9hY2w6XFxuIDQ5OTpcXHRcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXFxuIDUwMDpcXHRcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwieyxub31hY2wgb3B0aW9ucyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuIDUwMTpcXHRcXHRcXHRlbHNlIGlmIChyZXN1bHQuYm9vbGVhbilcXG4gNTAyOlxcdFxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbiA1MDM6XFx0XFx0XFx0ZWxzZVxcbiA1MDQ6XFx0XFx0XFx0XFx0Y2xlYXJfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgUE9TSVhfQUNMKTtcXG4gNTA1OlxcdFxcdFxcdGJyZWFrO1xcbiA1MDY6XFx0XFx0Y2FzZSBPcHRfY2FjaGVfc3RyYXRlZ3k6XFxuIDUwNzpcXHRcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkpXFxuIDUwODpcXHRcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCwgY2FjaGVfc3RyYXRlZ3kgaWdub3JlZFxcXCIpO1xcbiA1MDk6XFx0XFx0XFx0ZWxzZVxcbiA1MTA6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VvcHQuY2FjaGVfc3RyYXRlZ3kgPSByZXN1bHQudWludF8zMjtcXG4gNTExOlxcdFxcdFxcdGJyZWFrO1xcbiA1MTI6XFx0XFx0Y2FzZSBPcHRfZGF4OlxcbiA1MTM6XFx0XFx0XFx0aWYgKCFlcm9mc19mY19zZXRfZGF4X21vZGUoZmMsIEVST0ZTX01PVU5UX0RBWF9BTFdBWVMpKVxcbiA1MTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUxNTpcXHRcXHRcXHRicmVhaztcXG4gNTE2OlxcdFxcdGNhc2UgT3B0X2RheF9lbnVtOlxcbiA1MTc6XFx0XFx0XFx0aWYgKCFlcm9mc19mY19zZXRfZGF4X21vZGUoZmMsIHJlc3VsdC51aW50XzMyKSlcXG4gNTE4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTk6XFx0XFx0XFx0YnJlYWs7XFxuIDUyMDpcXHRcXHRjYXNlIE9wdF9kZXZpY2U6XFxuIDUyMTpcXHRcXHRcXHRkaWYgPSBremFsbG9jX29iaigqZGlmKTtcXG4gNTIyOlxcdFxcdFxcdGlmICghZGlmKVxcbiA1MjM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDUyNDpcXHRcXHRcXHRkaWYtXFx1MDAzZXBhdGggPSBrc3RyZHVwKHBhcmFtLVxcdTAwM2VzdHJpbmcsIEdGUF9LRVJORUwpO1xcbiA1MjU6XFx0XFx0XFx0aWYgKCFkaWYtXFx1MDAzZXBhdGgpIHtcXG4gNTI2OlxcdFxcdFxcdFxcdGtmcmVlKGRpZik7XFxuIDUyNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNTI4OlxcdFxcdFxcdH1cXG4gNTI5OlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnNiaS1cXHUwMDNlZGV2cy1cXHUwMDNlcndzZW0pO1xcbiA1MzA6XFx0XFx0XFx0cmV0ID0gaWRyX2FsbG9jKFxcdTAwMjZzYmktXFx1MDAzZWRldnMtXFx1MDAzZXRyZWUsIGRpZiwgMCwgMCwgR0ZQX0tFUk5FTCk7XFxuIDUzMTpcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2c2JpLVxcdTAwM2VkZXZzLVxcdTAwM2Vyd3NlbSk7XFxuIDUzMjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiA1MzM6XFx0XFx0XFx0XFx0a2ZyZWUoZGlmLVxcdTAwM2VwYXRoKTtcXG4gNTM0OlxcdFxcdFxcdFxcdGtmcmVlKGRpZik7XFxuIDUzNTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1MzY6XFx0XFx0XFx0fVxcbiA1Mzc6XFx0XFx0XFx0KytzYmktXFx1MDAzZWRldnMtXFx1MDAzZWV4dHJhX2RldmljZXM7XFxuIDUzODpcXHRcXHRcXHRicmVhaztcXG4gNTM5OlxcdFxcdGNhc2UgT3B0X2RvbWFpbl9pZDpcXG4gNTQwOlxcdFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRSkpIHtcXG4gNTQxOlxcdFxcdFxcdFxcdGVycm9yZmMoZmMsIFxcXCIlcyBvcHRpb24gbm90IHN1cHBvcnRlZFxcXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcXG4gNTQyOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDU0MzpcXHRcXHRcXHRcXHRrZnJlZV9zZW5zaXRpdmUoc2JpLVxcdTAwM2Vkb21haW5faWQpO1xcbiA1NDQ6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2Vkb21haW5faWQgPSBub19mcmVlX3B0cihwYXJhbS1cXHUwMDNlc3RyaW5nKTtcXG4gNTQ1OlxcdFxcdFxcdH1cXG4gNTQ2OlxcdFxcdFxcdGJyZWFrO1xcbiA1NDc6XFx0XFx0Y2FzZSBPcHRfZGlyZWN0aW86XFxuIDU0ODpcXHRcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcXG4gNTQ5OlxcdFxcdFxcdFxcdGVycm9yZmMoZmMsIFxcXCIlcyBvcHRpb24gbm90IHN1cHBvcnRlZFxcXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcXG4gNTUwOlxcdFxcdFxcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxcbiA1NTE6XFx0XFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIERJUkVDVF9JTyk7XFxuIDU1MjpcXHRcXHRcXHRlbHNlXFxuIDU1MzpcXHRcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBESVJFQ1RfSU8pO1xcbiA1NTQ6XFx0XFx0XFx0YnJlYWs7XFxuIDU1NTpcXHRcXHRjYXNlIE9wdF9mc29mZnNldDpcXG4gNTU2OlxcdFxcdFxcdHNiaS1cXHUwMDNlZGlmMC5mc29mZiA9IHJlc3VsdC51aW50XzY0O1xcbiA1NTc6XFx0XFx0XFx0YnJlYWs7XFxuIDU1ODpcXHRcXHRjYXNlIE9wdF9pbm9kZV9zaGFyZTpcXG4gNTU5OlxcdFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRSkpXFxuIDU2MDpcXHRcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcXFwiLCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7XFxuIDU2MTpcXHRcXHRcXHRlbHNlXFxuIDU2MjpcXHRcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xcbiA1NjM6XFx0XFx0XFx0YnJlYWs7XFxuIDU2NDpcXHRcXHRjYXNlIE9wdF9zdXBlcmJsb2NrX3NoYXJlOlxcbiA1NjU6XFx0XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpXFxuIDU2NjpcXHRcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcXFwiLCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7XFxuIDU2NzpcXHRcXHRcXHRlbHNlXFxuIDU2ODpcXHRcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSk7XFxuIDU2OTpcXHRcXHRcXHRicmVhaztcXG4gNTcwOlxcdFxcdGNhc2UgT3B0X3NvdXJjZTpcXG4gNTcxOlxcdFxcdFxcdHJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTtcXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcdHJldHVybiAwO1xcbiA1NzQ6XFx0fVxcbiA1NzU6XFx0XFxuIDU3NjpcXHRzdGF0aWMgaW50IGVyb2ZzX2VuY29kZV9maChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKmZoLCBpbnQgKm1heF9sZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM1OjM0LjQ0NTg2NTIzMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA4MTgxMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzYmktXHUwMDNlb3B0YCBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCdzIGJlaW5nIGhhbmRsZWQuIFdlJ3JlIHNldHRpbmcgYW5kIGNsZWFyaW5nIG9wdGlvbnMgdXNpbmcgYHNldF9vcHRgIGFuZCBgY2xlYXJfb3B0YCwgYW5kIHdlJ3JlIGFsc28gZGlyZWN0bHkgYXNzaWduaW5nIGEgdmFsdWUgdG8gYHNiaS1cdTAwM2VvcHQuY2FjaGVfc3RyYXRlZ3lgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCAqbm9uZSogb2YgdGhlc2Ugb3BlcmF0aW9ucyB0b3VjaCB0aGUgcGFkZGluZyB3aXRoaW4gdGhlIGBzYmktXHUwMDNlb3B0YCBzdHJ1Y3R1cmUuXG5cbk5vdywgYmVjYXVzZSBgc2JpYCBpdHNlbGYgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHRoZSBwYWRkaW5nIHdpdGhpbiBgc2JpLVx1MDAzZW9wdGAgc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhhdCdzIGdvb2QuIFdoaWNoIG1lYW5zIHRoYXQgdGhlIHN1YnNlcXVlbnQgYG1lbWNtcGAgb3BlcmF0aW9uIGlzIGNvbXBhcmluZyB6ZXJvZWQgcGFkZGluZyBhZ2FpbnN0IHplcm9lZCBwYWRkaW5nLiBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLCB3aGljaCBpcyB3aGF0IEkgaW5pdGlhbGx5IHN1c3BlY3RlZC5cblxuQnV0IHdhaXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBjYW4ndCBqdXN0IHN0b3AgYXQgb25lIGluc3RhbmNlLiBNeSBmaWVsZCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdG8gYWx3YXlzIGJlIHZpZ2lsYW50IGZvciBvdGhlciBwb3NzaWJsZSBhcmVhcyBvZiBjb25jZXJuLiBMZXQncyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGdldF90cmVlX3N1cGVyYCBmdW5jdGlvbiB3aXRoaW4gYGZzL3N1cGVyLmNgLiBUaGVyZSBtaWdodCBiZSBhbm90aGVyIHNpbWlsYXIgdnVsbmVyYWJpbGl0eSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNTo0MC42NTQwNDk5MzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM4OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM4OTpcXHRcXHRyZXR1cm4gMTtcXG4xMzkwOlxcdH1cXG4xMzkxOlxcdFxcbjEzOTI6XFx0LyoqXFxuMTM5MzpcXHQgKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmVcXG4xMzk0OlxcdCAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXFxuMTM5NTpcXHQgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTFxcbjEzOTY6XFx0ICogQGZpbGxfc3VwZXI6IEhlbHBlciB0byBpbml0aWFsaXNlIGEgbmV3IHN1cGVyYmxvY2tcXG4xMzk3OlxcdCAqXFxuMTM5ODpcXHQgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXNcXG4xMzk5OlxcdCAqIHJldXNlZDsgb3RoZXJ3aXNlIGEgbmV3IGFub255bW91cyBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpc2VkIHdpdGhcXG4xNDAwOlxcdCAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxcbjE0MDE6XFx0ICovXFxuMTQwMjpcXHRpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbjE0MDM6XFx0XFx0XFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxcbjE0MDQ6XFx0XFx0XFx0aW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4xNDA1OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4xNDA2OlxcdHtcXG4xNDA3OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuMTQwODpcXHRcXHRpbnQgZXJyO1xcbjE0MDk6XFx0XFxuMTQxMDpcXHRcXHRzYiA9IHNnZXRfZmMoZmMsIHRlc3QsIHNldF9hbm9uX3N1cGVyX2ZjKTtcXG4xNDExOlxcdFxcdGlmIChJU19FUlIoc2IpKVxcbjE0MTI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc2IpO1xcbjE0MTM6XFx0XFxuMTQxNDpcXHRcXHRpZiAoIXNiLVxcdTAwM2VzX3Jvb3QpIHtcXG4xNDE1OlxcdFxcdFxcdGVyciA9IGZpbGxfc3VwZXIoc2IsIGZjKTtcXG4xNDE2OlxcdFxcdFxcdGlmIChlcnIpXFxuMTQxNzpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjE0MTg6XFx0XFxuMTQxOTpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9BQ1RJVkU7XFxuMTQyMDpcXHRcXHR9XFxuMTQyMTpcXHRcXG4xNDIyOlxcdFxcdGZjLVxcdTAwM2Vyb290ID0gZGdldChzYi1cXHUwMDNlc19yb290KTtcXG4xNDIzOlxcdFxcdHJldHVybiAwO1xcbjE0MjQ6XFx0XFxuMTQyNTpcXHRlcnJvcjpcXG4xNDI2OlxcdFxcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcXG4xNDI3OlxcdFxcdHJldHVybiBlcnI7XFxuMTQyODpcXHR9XFxuMTQyOTpcXHRFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0aW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4xNDMyOlxcdFxcdFxcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4xNDMzOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxcbjE0MzQ6XFx0e1xcbjE0MzU6XFx0XFx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcXG4xNDM2OlxcdH1cXG4xNDM3OlxcdEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfbm9kZXYpO1xcbjE0Mzg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjM1OjQwLjY1NDIwMzMwNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTg3Mzg1NTczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRVJPRlMgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHJlbmFtZSBhbmQgZXhwb3J0IG9mIGB2ZnNfZ2V0X3N1cGVyYCB0byBgZ2V0X3RyZWVfc3VwZXJgLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd2hpY2ggaXMgd2hlcmUgS01TQU4gY29tZXMgaW50byBwbGF5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgcmlnaHQuXG5cbkxldCdzIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIEtNU0FOIHJ1bGVzIHRvIG1ha2Ugc3VyZTpcbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIC0gTm8sIG5vdGhpbmcgZ29lcyB0byB1c2Vyc3BhY2UuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyAtIE5vcGUsIG5vdCBzZWVpbmcgdGhhdCBoZXJlLlxuMy4gIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBtaWdodCBiZSByZWFkIGxhdGVyIC0gTm8sIGRvZXNuJ3QgbG9vayBsaWtlIGFueSBvZiB0aGF0IGlzIGludHJvZHVjZWQuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBsZXQgc3Vycm91bmRpbmcgY29kZSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIC0gTm8gb2J2aW91cyB2aW9sYXRpb25zIHRoZXJlIGVpdGhlci5cblxuTm93LCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgY29kZSwgdGhlIGNydWNpYWwgcGFydCBpcyB0aGUgYG1lbWNtcGAgY2FsbC4gSXQncyBjb21wYXJpbmcgYHNiaS1cdTAwM2VvcHRgIGFuZCBgbmV3X3NiaS1cdTAwM2VvcHRgIHdoaWNoIGFyZSBib3RoIHBhcnQgb2YgYHN0cnVjdCBlcm9mc19zYl9pbmZvYC4gQW5kIHRoZSBhbGxvY2F0aW9uLCBga3phbGxvY19vYmpgLCBpcyBrZXkgaGVyZS4gVGhhdCB6ZXJvZXMgdGhlIG1lbW9yeS4gU28sIHBhZGRpbmcgd2l0aGluIGBzYmktXHUwMDNlb3B0YCAqc2hvdWxkKiBiZSB6ZXJvZWQsIGFuZCBpdCdzIG5ldmVyIG1vZGlmaWVkLCBzbyBpdCBzdGF5cyB6ZXJvZWQuIFRoZXJlZm9yZSwgdGhhdCBgbWVtY21wYCBjb21wYXJlcyBpbml0aWFsaXplZCBtZW1vcnkuXG5cbkJ1dCwgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUuIElzIHRoZXJlIGFueSB3YXkgYHNiaS1cdTAwM2VvcHRgIGlzIGNvcGllZCBmcm9tIHNvbWV3aGVyZSBlbHNlPyBMZXQncyBjaGVjayB3aGVyZSBgc2JpYCBpcyBhbGxvY2F0ZWQsIHN0YXJ0aW5nIHdpdGggYGVyb2ZzX2luaXRfZnNfY29udGV4dGAuIFJpZ2h0LCBga3phbGxvY19vYmpgISBgc2JpLVx1MDAzZW9wdGAgaXMgYWx3YXlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGFuZCB0aGUgYWxsb2NhdGlvbiBpcyBpbml0aWFsaXplZCB0aGVyZS5cblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIGBzYmlgIGlzIGFsbG9jYXRlZC4gTGV0IG1lIGNoZWNrIGBlcm9mc19mY19yZWNvbmZpZ3VyZWAuIEFoLCBqdXN0IGEgY2hlY2suIE5vIGNoYW5nZXMgdG8gdGhlIGFsbG9jYXRpb24uXG5cbldoZXJlIGVsc2UgaXMgYG1lbWNtcGAgdXNlZD8gTG9va2luZyBhZ2FpbiwgdGhlcmUncyBvbmx5IG9uZSB1c2U6IGBlcm9mc19zYl9zaGFyZV90ZXN0X3N1cGVyYC4gVGhhdCdzIHdoZXJlIHRoZSBjb21wYXJpc29uIGhhcHBlbnMuIEJ1dCwgc2luY2UgYHNiaWAgaXMgYWx3YXlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBga3phbGxvY19vYmpgLCB0aGVyZSdzIG5vIHdheSB0aGUgbWVtb3J5IGNhbiBiZSB1bmluaXRpYWxpemVkLlxuXG5Pa2F5LCBsZXQncyBuYWlsIHRoaXMgZG93bi4gSXMgdGhlcmUgcGFkZGluZz8gQ2hlY2tpbmcgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCwgeWVzLCB0aGVyZSBpcyBwYWRkaW5nIGJldHdlZW4gYGNhY2hlX3N0cmF0ZWd5YCAodW5zaWduZWQgY2hhcikgYW5kIGBtb3VudF9vcHRgICh1bnNpZ25lZCBpbnQpLiBUaGF0IHBhZGRpbmcgaXMgdGhyZWUgYnl0ZXMuIEJ1dCB0aGUgd2hvbGUgYHN0cnVjdCBlcm9mc19zYl9pbmZvYCBpcyB6ZXJvZWQgYnkgdGhlIGFsbG9jYXRpb24sIGFuZCB0aG9zZSBwYWRkaW5nIGJ5dGVzIGFyZSBub3QgbW9kaWZpZWQuIFRoZXkgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIFNvIHdoZW4gdGhhdCBgbWVtY21wYCBnZXRzIGNhbGxlZCwgaXQncyBjb21wYXJpbmcgemVyb2VkIHBhZGRpbmcgd2l0aCB6ZXJvZWQgcGFkZGluZy4gVGhhdCdzICpzYWZlKi5cblxuU28sIG5vLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIHBhdGNoIGp1c3QgYWRkcyBhIG5ldyBgc3VwZXJibG9ja19zaGFyZWAgbW91bnQgb3B0aW9uIGFuZCBhbGxvd3Mgc2hhcmluZyBzdXBlcmJsb2NrcyBpZiB0aGUgYmFja2luZyBmaWxlIGFuZCBvcHRpb25zIGFyZSBjb21wYXRpYmxlLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYXJlIGVub3VnaCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMsIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdXNlLWFmdGVyLWZyZWUuIFdlIGRvbid0IG5lZWQgS01TQU4gaGVyZS5cblxuT2theSwgaGVyZSdzIGhvdyBJIHdvdWxkIHN1bW1hcml6ZSB0aGlzOiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBzdXBlcmJsb2NrX3NoYXJlYCBvcHRpb24sIGFsbG93aW5nIHN1cGVyYmxvY2sgc2hhcmluZyB3aXRoIGlkZW50aWNhbCBiYWNraW5nIGZpbGVzIGFuZCBtb3VudCBvcHRpb25zLiBJdCB1c2VzIGBtZW1jbXBgIHRvIGNvbXBhcmUgb3B0aW9ucywgaW5jbHVkaW5nIHBhZGRpbmcgd2l0aGluIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIEhvd2V2ZXIsIHNpbmNlIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AgaXMgYWx3YXlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGAsIGFsbCBtZW1vcnksIGluY2x1ZGluZyBwYWRkaW5nIHdpdGhpbiBgc2JpLVx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyBvbmx5IGFmZmVjdCBzcGVjaWZpYyBmaWVsZHMsIGxlYXZpbmcgdGhlIHBhZGRpbmcgdW50b3VjaGVkLiBUaHVzLCBgbWVtY21wYCBzYWZlbHkgY29tcGFyZXMgaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50OyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjgyLCJPdXRwdXRUb2tlbnMiOjI5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjozNjowMC41MjgwNjE0NDlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIHNpemVvZihzYmktXFx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXFx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVxcdTAwM2VvcHRgIGZpZWxkcyBkbyBub3QgYWx0ZXIgdGhlIHBhZGRpbmcgYnl0ZXMsIG1lYW5pbmcgdGhleSByZW1haW4gemVyb2VkLiBUaGVyZWZvcmUsIHRoZSBgbWVtY21wYCBvcGVyYXRpb24gc2FmZWx5IGNvbXBhcmVzIGluaXRpYWxpemVkIG1lbW9yeSBhbmQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgYW5kIGFsbG93cyBzaGFyaW5nIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG9wdGlvbnMuIEl0IHVzZXMgYG1lbWNtcChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIHNpemVvZihzYmktXFx1MDAzZW9wdCkpYCB0byBjb21wYXJlIG1vdW50IG9wdGlvbnMuIFdoaWxlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgY29udGFpbnMgcGFkZGluZyBieXRlcyBiZXR3ZWVuIGBjYWNoZV9zdHJhdGVneWAgKHVuc2lnbmVkIGNoYXIpIGFuZCBgbW91bnRfb3B0YCAodW5zaWduZWQgaW50KSwgdGhlIGVuY2xvc2luZyBgc3RydWN0IGVyb2ZzX3NiX2luZm9gIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCAod2hpY2ggemVyb2VzIHRoZSBtZW1vcnkpIGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIGluIGBzYmktXFx1MDAzZW9wdGAsIGlzIHplcm8taW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byBgc2JpLVxcdTAwM2VvcHRgIGZpZWxkcyBkbyBub3QgYWx0ZXIgdGhlIHBhZGRpbmcgYnl0ZXMsIG1lYW5pbmcgdGhleSByZW1haW4gemVyb2VkLiBUaGVyZWZvcmUsIHRoZSBgbWVtY21wYCBvcGVyYXRpb24gc2FmZWx5IGNvbXBhcmVzIGluaXRpYWxpemVkIG1lbW9yeSBhbmQgZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq6b2q[1] Phase: Succeeded StartedAt: 2026-08-12 16:36:12 +0000 UTC FinishedAt: 2026-08-12 16:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 16:36:12 +0000 UTC FinishedAt: 2026-08-12 16:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2] Phase: Succeeded StartedAt: 2026-08-12 16:36:12 +0000 UTC FinishedAt: 2026-08-12 20:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 16:36:12 +0000 UTC FinishedAt: 2026-08-12 20:15:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 16:36:12 +0000 UTC FinishedAt: 2026-08-12 16:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 16:36:12 +0000 UTC FinishedAt: 2026-08-12 16:36:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowq6b2q/series-workflowq6b2q-convert-artifact-2524964389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 16:36:22 +0000 UTC FinishedAt: 2026-08-12 16:52:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 16:36:22 +0000 UTC FinishedAt: 2026-08-12 16:52:56 +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:*d80baa57-ae30-43a9-b7f2-94ddd9af42a9,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-workflowq6b2q/series-workflowq6b2q-convert-artifact-2524964389/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": "0ac04f9a-5193-450b-a61e-b8d6adaefaf4", "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-workflowq6b2q/series-workflowq6b2q-build-action-2257830475/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 16:36:22 +0000 UTC FinishedAt: 2026-08-12 16:52:46 +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:*d80baa57-ae30-43a9-b7f2-94ddd9af42a9,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-workflowq6b2q/series-workflowq6b2q-convert-artifact-2524964389/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": "0ac04f9a-5193-450b-a61e-b8d6adaefaf4", "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-workflowq6b2q/series-workflowq6b2q-build-action-2257830475/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 16:52:56 +0000 UTC FinishedAt: 2026-08-12 16:52:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 16:52:56 +0000 UTC FinishedAt: 2026-08-12 16:52:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 16:52:56 +0000 UTC FinishedAt: 2026-08-12 16:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 16:52:56 +0000 UTC FinishedAt: 2026-08-12 16:53:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowq6b2q/series-workflowq6b2q-convert-artifact-1398432512/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 16:53:06 +0000 UTC FinishedAt: 2026-08-12 16:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 16:53:06 +0000 UTC FinishedAt: 2026-08-12 16:55:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ac04f9a-5193-450b-a61e-b8d6adaefaf4,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-workflowq6b2q/series-workflowq6b2q-build-action-2257830475/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-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 16:55:11 +0000 UTC FinishedAt: 2026-08-12 16:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 16:55:11 +0000 UTC FinishedAt: 2026-08-12 16:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 16:55:11 +0000 UTC FinishedAt: 2026-08-12 17:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 16:55:11 +0000 UTC FinishedAt: 2026-08-12 17:11:26 +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:*d80baa57-ae30-43a9-b7f2-94ddd9af42a9,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-workflowq6b2q/series-workflowq6b2q-convert-artifact-1398432512/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": "e23517ef-9398-46fa-886d-8623e0391b34", "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-workflowq6b2q/series-workflowq6b2q-build-action-3444068540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 16:55:11 +0000 UTC FinishedAt: 2026-08-12 17:11:16 +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:*d80baa57-ae30-43a9-b7f2-94ddd9af42a9,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-workflowq6b2q/series-workflowq6b2q-convert-artifact-1398432512/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": "e23517ef-9398-46fa-886d-8623e0391b34", "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-workflowq6b2q/series-workflowq6b2q-build-action-3444068540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 17:11:26 +0000 UTC FinishedAt: 2026-08-12 17:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 17:11:26 +0000 UTC FinishedAt: 2026-08-12 17:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 17:11:26 +0000 UTC FinishedAt: 2026-08-12 17:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 17:11:26 +0000 UTC FinishedAt: 2026-08-12 17:13:23 +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:*e23517ef-9398-46fa-886d-8623e0391b34,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-workflowq6b2q/series-workflowq6b2q-build-action-3444068540/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-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 17:13:33 +0000 UTC FinishedAt: 2026-08-12 20:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 17:13:33 +0000 UTC FinishedAt: 2026-08-12 20:15:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0ac04f9a-5193-450b-a61e-b8d6adaefaf4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e23517ef-9398-46fa-886d-8623e0391b34,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-workflowq6b2q/series-workflowq6b2q-build-action-2257830475/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-workflowq6b2q/series-workflowq6b2q-build-action-3444068540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 17:13:33 +0000 UTC FinishedAt: 2026-08-12 17:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 17:13:33 +0000 UTC FinishedAt: 2026-08-12 17:13:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq6b2q/series-workflowq6b2q-convert-artifact-3009786457/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 17:13:33 +0000 UTC FinishedAt: 2026-08-12 17:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 17:13:33 +0000 UTC FinishedAt: 2026-08-12 17:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 17:13:34 +0000 UTC FinishedAt: 2026-08-12 17:13:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 17:13:44 +0000 UTC FinishedAt: 2026-08-12 20:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6b2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["get_tree_super","erofs_fc_parse_param","erofs_fc_fill_super","erofs_fc_get_tree","erofs_fc_reconfigure","erofs_sb_share_test_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e6de6a2b522f659defacb1551d0465ba6ce13cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"cd3d43d5-42dd-4f68-b035-fab415cb585b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 17:13:44 +0000 UTC FinishedAt: 2026-08-12 20:15:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ac04f9a-5193-450b-a61e-b8d6adaefaf4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e23517ef-9398-46fa-886d-8623e0391b34,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-workflowq6b2q/series-workflowq6b2q-build-action-2257830475/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-workflowq6b2q/series-workflowq6b2q-build-action-3444068540/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-workflowq6b2q/series-workflowq6b2q-convert-artifact-3009786457/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,}