Name: series-workflowxfj48 Phase: Succeeded StartedAt: 2026-07-22 06:02:52 +0000 UTC FinishedAt: 2026-07-22 07:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[0] Phase: Succeeded StartedAt: 2026-07-22 06:02:52 +0000 UTC FinishedAt: 2026-07-22 06:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 06:02:52 +0000 UTC FinishedAt: 2026-07-22 06:32:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "0e334607-e410-42e9-8546-068808b434ba" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBBUk02NCB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB1c2VyIGFkZHJlc3NlcyBmb3IgQlBGIGFyZW5hLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEpJVCBjb21waWxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBjOWZiNDMyZGVmMWRjMGJlODE5ZGY4MTY2OTgzZDM5ZmU3NTdmYzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAwNjozMDo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBiMDA3NWVjZTRhNmU3Zi4uMGY2MTY2MmI5MDBiZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjg0LDEyICYjNDM7MTI4NCwyNSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XG4gXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcbiBcdFx0aWYgKGluc25faXNfY2FzdF91c2VyKGluc24pKSB7XG4tXHRcdFx0ZW1pdChBNjRfTU9WKDAsIHRtcCwgc3JjKSwgY3R4KTsgLy8gMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHNcbi1cdFx0XHRlbWl0X2E2NF9tb3ZfaSgwLCBkc3QsIGN0eC1cdTAwM2V1c2VyX3ZtX3N0YXJ0IFx1MDAzZVx1MDAzZSAzMiwgY3R4KTtcbi1cdFx0XHRlbWl0KEE2NF9MU0woMSwgZHN0LCBkc3QsIDMyKSwgY3R4KTtcbi1cdFx0XHRlbWl0KEE2NF9DQlooMSwgdG1wLCAyKSwgY3R4KTtcbi1cdFx0XHRlbWl0KEE2NF9PUlIoMSwgdG1wLCBkc3QsIHRtcCksIGN0eCk7XG4tXHRcdFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgdG1wKSwgY3R4KTtcbiYjNDM7XHRcdFx0dTMyIHVwcGVyID0gY3R4LVx1MDAzZXVzZXJfdm1fc3RhcnQgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdFx0XHR1MTYgdXBwZXJfbG93ID0gdXBwZXIgXHUwMDI2IDB4ZmZmZjtcbiYjNDM7XHRcdFx0dTE2IHVwcGVyX2hpZ2ggPSB1cHBlciBcdTAwM2VcdTAwM2UgMTY7XG4mIzQzO1x0XHRcdGludCBucl9tb3ZrID0gISF1cHBlcl9sb3cgJiM0MzsgISF1cHBlcl9oaWdoO1xuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQnVpbGQgdGhlIHVzZXIgYWRkcmVzczogdGhlIGxvdyAzMiBiaXRzIGFyZSB0aGUgYXJlbmFcbiYjNDM7XHRcdFx0ICogb2Zmc2V0LCB0aGUgdXBwZXIgMzIgYml0cyBjb21lIGZyb20gdXNlcl92bV9zdGFydC4gQVxuJiM0MztcdFx0XHQgKiB6ZXJvIG9mZnNldCBtdXN0IHN0YXkgTlVMTCwgc28gYnJhbmNoIG92ZXIgdGhlIE1PVktzXG4mIzQzO1x0XHRcdCAqIHdoZW4gaXQgaXMgemVyby5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGVtaXQoQTY0X01PVigwLCBkc3QsIHNyYyksIGN0eCk7IC8qIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzICovXG4mIzQzO1x0XHRcdGlmIChucl9tb3ZrKSB7XG4mIzQzO1x0XHRcdFx0ZW1pdChBNjRfQ0JaKDAsIGRzdCwgbnJfbW92ayAmIzQzOyAxKSwgY3R4KTtcbiYjNDM7XHRcdFx0XHRpZiAodXBwZXJfbG93KVxuJiM0MztcdFx0XHRcdFx0ZW1pdChBNjRfTU9WSygxLCBkc3QsIHVwcGVyX2xvdywgMzIpLCBjdHgpO1xuJiM0MztcdFx0XHRcdGlmICh1cHBlcl9oaWdoKVxuJiM0MztcdFx0XHRcdFx0ZW1pdChBNjRfTU9WSygxLCBkc3QsIHVwcGVyX2hpZ2gsIDQ4KSwgY3R4KTtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4gXHRcdFx0aWYgKGRzdCAhPSBzcmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBBUk02NCB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB1c2VyIGFkZHJlc3NlcyBmb3IgQlBGIGFyZW5hLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEpJVCBjb21waWxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGM5ZmI0MzJkZWYxZGMwYmU4MTlkZjgxNjY5ODNkMzlmZTc1N2ZjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDA2OjMwOjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBiMDA3NWVjZTRhNmU3Zi4uMGY2MTY2MmI5MDBiZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMjg0LDEyICYjNDM7MTI4NCwyNSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJY2FzZSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YOgogCWNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOgogCQlpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHsKLQkJCWVtaXQoQTY0X01PVigwLCB0bXAsIHNyYyksIGN0eCk7IC8vIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzCi0JCQllbWl0X2E2NF9tb3ZfaSgwLCBkc3QsIGN0eC0mZ3Q7dXNlcl92bV9zdGFydCAmZ3Q7Jmd0OyAzMiwgY3R4KTsKLQkJCWVtaXQoQTY0X0xTTCgxLCBkc3QsIGRzdCwgMzIpLCBjdHgpOwotCQkJZW1pdChBNjRfQ0JaKDEsIHRtcCwgMiksIGN0eCk7Ci0JCQllbWl0KEE2NF9PUlIoMSwgdG1wLCBkc3QsIHRtcCksIGN0eCk7Ci0JCQllbWl0KEE2NF9NT1YoMSwgZHN0LCB0bXApLCBjdHgpOwomIzQzOwkJCXUzMiB1cHBlciA9IGN0eC0mZ3Q7dXNlcl92bV9zdGFydCAmZ3Q7Jmd0OyAzMjsKJiM0MzsJCQl1MTYgdXBwZXJfbG93ID0gdXBwZXIgJmFtcDsgMHhmZmZmOwomIzQzOwkJCXUxNiB1cHBlcl9oaWdoID0gdXBwZXIgJmd0OyZndDsgMTY7CiYjNDM7CQkJaW50IG5yX21vdmsgPSAhIXVwcGVyX2xvdyAmIzQzOyAhIXVwcGVyX2hpZ2g7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCdWlsZCB0aGUgdXNlciBhZGRyZXNzOiB0aGUgbG93IDMyIGJpdHMgYXJlIHRoZSBhcmVuYQomIzQzOwkJCSAqIG9mZnNldCwgdGhlIHVwcGVyIDMyIGJpdHMgY29tZSBmcm9tIHVzZXJfdm1fc3RhcnQuIEEKJiM0MzsJCQkgKiB6ZXJvIG9mZnNldCBtdXN0IHN0YXkgTlVMTCwgc28gYnJhbmNoIG92ZXIgdGhlIE1PVktzCiYjNDM7CQkJICogd2hlbiBpdCBpcyB6ZXJvLgomIzQzOwkJCSAqLwomIzQzOwkJCWVtaXQoQTY0X01PVigwLCBkc3QsIHNyYyksIGN0eCk7IC8qIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzICovCiYjNDM7CQkJaWYgKG5yX21vdmspIHsKJiM0MzsJCQkJZW1pdChBNjRfQ0JaKDAsIGRzdCwgbnJfbW92ayAmIzQzOyAxKSwgY3R4KTsKJiM0MzsJCQkJaWYgKHVwcGVyX2xvdykKJiM0MzsJCQkJCWVtaXQoQTY0X01PVksoMSwgZHN0LCB1cHBlcl9sb3csIDMyKSwgY3R4KTsKJiM0MzsJCQkJaWYgKHVwcGVyX2hpZ2gpCiYjNDM7CQkJCQllbWl0KEE2NF9NT1ZLKDEsIGRzdCwgdXBwZXJfaGlnaCwgNDgpLCBjdHgpOwomIzQzOwkJCX0KIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7CiAJCQlpZiAoZHN0ICE9IHNyYykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSklUIENvbXBpbGVyIFBhdGNoIGZvciBBUk02NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiB0byB0aGUgd2F5IHRoZSB1c2VyIGFkZHJlc3MgaXMgaGFuZGxlZCBpbiBgYnVpbGRfaW5zbigpYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgQlBGIGFyZW5hLiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gd2FzIGEgYml0IGNsdW5reSwgdXNpbmcgYSBzZXJpZXMgb2YgbW92ZXMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyB0byBjb25zdHJ1Y3QgdGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlIHVzZXIgdmlydHVhbCBhZGRyZXNzLiBUaGV5JiMzOTtyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhpcyBieSB1c2luZyBgTU9WS2AgaW5zdHJ1Y3Rpb25zLCB3aGljaCBhcmUgbW9yZSBlZmZpY2llbnQgZm9yIGltbWVkaWF0ZSB2YWx1ZSBsb2FkaW5nIG9uIEFSTTY0LiAKCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBicmVha2luZyBkb3duIHRoZSB1cHBlciAzMiBiaXRzIG9mIGBjdHgtJmd0O3VzZXJfdm1fc3RhcnRgIGludG8gdHdvIDE2LWJpdCBjaHVua3MgYW5kIHVzaW5nIGBNT1ZLYCB0byBsb2FkIHRoZW0uIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIHRlcm1zIG9mIGluc3RydWN0aW9uIGNvdW50LCBhc3N1bWluZyB0aGUgYE1PVktgIGluc3RydWN0aW9ucyBhcmUgdHJ1bHkgbW9yZSBlZmZpY2llbnQgaW4gdGhpcyBzY2VuYXJpbywgYXMgSSB3b3VsZCBleHBlY3QgdGhlbSB0byBiZS4gSSB3b3VsZCBuZWVkIHRvIGJlbmNobWFyayBpdCwgYnV0IG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyBhIGdvb2QgY2hhbmdlLgoKTm93LCBteSBtaW5kIGlzIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBmdXp6IHRoaXMuIFdlIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBhcmVhLiBJdCYjMzk7cyB0aGUgdXNlciBhZGRyZXNzIGNvbnN0cnVjdGlvbiB0aGF0IGlzIG5ldyBhbmQgZGlmZmVyZW50LCBzbyB3ZSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGl0LiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiB0aGlzIGZpbGUuIEFoLCB5ZXMsIGl0IHNlZW1zIGBDT05GSUdfQlBGX0pJVGAgZW5hYmxlcyB0aGlzLiBOb3cgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgaW5jbHVkZWQuLi4gTGV0IG1lIGNoZWNrIHRoZSBgYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVgIG5vdyB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9jb21wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvTWFrZWZpbGUtNC0jXG5hcmNoL2FybTY0L25ldC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQW5hbHl6aW5nIEJQRiBKSVQgYW5kIFVzZXIgU3BhY2UgQ2FzdCBJbnN0cnVjdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvZGUgcmVsYXRlZCB0byBgQ09ORklHX0JQRl9KSVRgLiBUaGF0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXMgYGluc25faXNfY2FzdF91c2VyKGluc24pYC4gQW5kLCBJIGJlbGlldmUgdGhpcyBsaWtlbHkgdGllcyBpbnRvIHRoZSBCUEYgYXJlbmEuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlcmUgYSBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhlIEJQRiBhcmVuYSwgb3IgZG9lcyB0aGUgcHJlc2VuY2Ugb2YgYEJQRl9KSVRgIGltcGxpY2l0bHkgY292ZXIgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBpbiB0aGlzIGNvbnRleHQ/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLiBEb2VzIHRoZSBKSVQgZW5hYmxlbWVudCBhdXRvbWF0aWNhbGx5IGhhbmRsZSB3aGF0ZXZlciBjb25zaWRlcmF0aW9ucyBgaW5zbl9pc19jYXN0X3VzZXJgIG1pZ2h0IGhhdmUgY29uY2VybmluZyBtZW1vcnkgYWNjZXNzIGFuZCBzZWN1cml0eSB3aXRoaW4gdGhlIGFyZW5hPyBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luc25faXNfY2FzdF91c2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNTM9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjg1LVx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjg2Olx0XHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyODctXHRcdFx0dTMyIHVwcGVyID0gY3R4LVx1MDAzZXVzZXJfdm1fc3RhcnQgXHUwMDNlXHUwMDNlIDMyO1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9NzE1PXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTczNi1cdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzo3Mzc6XHRcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKSkge1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy03MzgtXHRcdFx0bW92ZV9yZWcoY3R4LCB0MSwgc3JjKTtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTY3PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI3MC1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjcxOlx0XHRcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihcdTAwMjZpbnNuW2ldKSkge1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNzItXHRcdFx0XHRFTUlUKFBQQ19SQVdfUkxESUNMX0RPVCh0bXAxX3JlZywgc3JjX3JlZywgMCwgMzIpKTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjk9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzODY6XHRcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKSkge1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVx0XHRcdGVtaXRfbXYoUlZfUkVHX1QxLCBycywgY3R4KTtcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTg3Nj1zdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtOTE5LVx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjkyMDpcdFx0aWYgKGluc25faXNfY2FzdF91c2VyKGluc24pKSB7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTkyMS1cdFx0XHRpbnQgcGF0Y2hfYnJjO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjgxPXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTg1My1cdFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTg1NDpcdFx0XHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xODU1LVx0XHRcdFx0aWYgKGRzdF9yZWcgIT0gc3JjX3JlZylcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1Mj1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc196ZXh0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTI1OS0gKi9cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjYwOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTI2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGBpbnNuX2lzX2Nhc3RfdXNlcmAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBgaW5zbl9pc19jYXN0X3VzZXJgIHJlcHJlc2VudHMuIEl0JiMzOTtzIGNydWNpYWwsIG9idmlvdXNseSwgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbmFsIGNvbmNlcHQgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaXRzIGRlZmluaXRpb24gYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlIG9yIGNvbXBpbGVyIGNvbnRleHQgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBpbi4gSXMgaXQgYWJvdXQgdXNlci1kZWZpbmVkIGNhc3RzPyBDb21waWxlci1nZW5lcmF0ZWQgY2FzdHM/IFNwZWNpZmljIHR5cGVzIG9mIGNhc3RzLCBsaWtlIHdpZGVuaW5nIG9yIG5hcnJvd2luZz8gT3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgbnVhbmNlZD8gS25vd2luZyB0aGUgcHJlY2lzZSBzZW1hbnRpYyBkZWZpbml0aW9uIHdpbGwgc3RlZXIgdGhlIHJlc3Qgb2YgbXkgYW5hbHlzaXMuIEkmIzM5O20gZXNzZW50aWFsbHkgbG9va2luZyB0byBpbW1lZGlhdGVseSByZWNvbnN0cnVjdCBhIG1lbnRhbCBtb2RlbCBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLCBpbnB1dHMsIGFuZCBpbnRlbmRlZCBiZWhhdmlvdXIgYmVmb3JlIG1vdmluZyBpbnRvIG1vcmUgYWR2YW5jZWQgcmVhc29uaW5nIGFib3V0IGl0LiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgY2hlY2sgc2hvdWxkIGpvZyBteSBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19jYXN0X3VzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9MjUyPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX3pleHQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjU5LSAqL1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyNjA6c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjYxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBGaWx0ZXJpbmcgTWVjaGFuaXNtKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBvYmplY3RpdmUgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgbG93ZXItbGV2ZWwgc3RydWN0dXJlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJIHJlbWVtYmVyIGl0IGJlaW5nIGNydWNpYWwgZm9yIHRoZSBjb3JlIHBhY2tldCBmaWx0ZXJpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDI2MC4gVGhhdCB1c3VhbGx5IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB0aGUgQlBGIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIHJlZnJlc2ggbXlzZWxmIG9uIGhvdyB0aGUga2VybmVsIGFjdHVhbGx5ICpkZWZpbmVzKiBmaWx0ZXJzLiBIb3BlZnVsbHksIHRoaXMgcmVmcmVzaCB3aWxsIGdpdmUgbWUgd2hhdCBJIG5lZWQgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBzZXQgb2YgcXVlc3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0XHQuaW1tICAgPSAxIH0pXG4gMjUxOlx0XG4gMjUyOlx0c3RhdGljIGlubGluZSBib29sIGluc25faXNfemV4dChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gMjUzOlx0e1xuIDI1NDpcdFx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfWCkgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tID09IDE7XG4gMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdC8qIGFkZHJfc3BhY2VfY2FzdCBmcm9tIGFzKDApIHRvIGFzKDEpIGlzIGZvciBjb252ZXJ0aW5nIGJwZiBhcmVuYSBwb2ludGVyc1xuIDI1ODpcdCAqIHRvIHBvaW50ZXJzIGluIHVzZXIgdm1hLlxuIDI1OTpcdCAqL1xuIDI2MDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gMjYxOlx0e1xuIDI2MjpcdFx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjZcbiAyNjM6XHRcdFx0XHQgICAgICBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9TUEFDRV9DQVNUIFx1MDAyNlx1MDAyNlxuIDI2NDpcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlaW1tID09IDFVIFx1MDAzY1x1MDAzYyAxNjtcbiAyNjU6XHR9XG4gMjY2Olx0XG4gMjY3Olx0LyogQlBGX0xEX0lNTTY0IG1hY3JvIGVuY29kZXMgc2luZ2xlICYjMzk7bG9hZCA2NC1iaXQgaW1tZWRpYXRlJiMzOTsgaW5zbiAqL1xuIDI2ODpcdCNkZWZpbmUgQlBGX0xEX0lNTTY0KERTVCwgSU1NKVx0XHRcdFx0XHRcXFxuIDI2OTpcdFx0QlBGX0xEX0lNTTY0X1JBVyhEU1QsIDAsIElNTSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgYSBCUEYgQXJlbmEgSXNzdWUqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLiBJdCYjMzk7cyBsb29raW5nIGxpa2UgdGhpcyBpc3N1ZSBpcyBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBCUEYgYXJlbmEsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRoZSBwb3RlbnRpYWwgZm9yIHJlc291cmNlIGNvbnRlbnRpb24sIGFsbG9jYXRpb24gcHJvYmxlbXMsIG9yIHBlcmhhcHMgZXZlbiBhIG1lbW9yeSBsZWFrLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWcgc2V0dGluZyB0aGF0IGRpcmVjdGx5IGNvbnRyb2xzIHRoZSBCUEYgYXJlbmEmIzM5O3MgYmVoYXZpb3I/IFRoZXJlICpoYXMqIHRvIGJlLCBhbmQgdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIGdldCB0aGUgY29uZmlnIGFuZCBxdWlja2x5IHJ1bGUgdGhhdCBvdXQsIG9yIG1vcmUgaG9wZWZ1bGx5LCBmaW5kIHRoZSBzbW9raW5nIGd1bi4gSXQgY291bGQgYmUgbGltaXRzLCBzaXppbmcsIG9yIHBlcmhhcHMgZXZlbiBzb21ldGhpbmcgcmVsYXRlZCB0byBpc29sYXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgQlBGIHByb2dyYW1zLCBJJiMzOTttIGtlZXBpbmcgYWxsIHBvc3NpYmlsaXRpZXMgaW4gdGhlIGJhY2sgb2YgbXkgaGVhZC4gTmVlZCB0byBmaW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAyOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgQXJlbmEqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIGNvbnRleHQsIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24gb3IgbWFuYWdlbWVudCBpc3N1ZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgYXJlbmEgYWxsb2NhdG9yLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHBsYWNlIEkgc3RhcnQgd2l0aCB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcywgZXNwZWNpYWxseSB3aGVuIGxvb2tpbmcgYXQgQlBGIGNvZGUuIEnigJltIHplcm9pbmcgaW4gb24gYGtlcm5lbC9icGYvYXJlbmEuY2AsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgQlBGIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyB0aGUgbW9zdCBwbGF1c2libGUgbG9jYXRpb24gZm9yIHRoZSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgaXNzdWUgd2UgYXJlIHNlZWluZywgYW5kIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkZWJ1Z2dpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGZ1cnRoZXIgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIG9yIG5vdCBkb2luZy4gVGhhdCYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBDb21waWxhdGlvbioqCgpPa2F5LCBzbyB0aGUgQlBGIGFyZW5hIGlzIGdldHRpbmcgY29tcGlsZWQsIGJ1dCBvbmx5IHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuIEl0IG5lZWRzIGJvdGggYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCB0byBiZSBzZXQgdG8gJiMzOTt5JiMzOTssIGFuZCBhbHNvIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzZXRzIHRoZSBzdGFnZSBmb3IgY29udGV4dC4KClRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgIGZpbGUuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBidWlsZF9pbnNuYCBmdW5jdGlvbi4gTm93LCB0aGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIHRoaXMuIElzIGl0IGBidWlsZF9pbnNuYCBpdHNlbGYsIG9yIHNob3VsZCBJIGJlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGhpZ2hlciBsZXZlbCBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYD8gSG1tLCB3YWl0IGEgbWludXRlLCBgYnVpbGRfaW5zbmAgaXMgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGxpa2VseSBsaW1pdHMgaXRzIGV4dGVybmFsIHZpc2liaWxpdHkuIE9rYXksIHRoZW4sIGxldCYjMzk7cyB0cmFjZSBpdHMgY2FsbHMgdG8gc2VlIHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjM1PXN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItICovXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjUzOnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjU0LVx0XHQgICAgICBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGV4dHJhX3Bhc3MpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTk5MT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMDktXHRcdGN0eC1cdTAwM2VvZmZzZXRbaV0gPSBjdHgtXHUwMDNlaWR4O1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjAxMDpcdFx0cmV0ID0gYnVpbGRfaW5zbihlbnYsIGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDExLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIHRoZSBSaWdodCBGb2N1cyBmb3IgSklUIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9sIHRvIHVzZSBmb3IgdGhpcyBKSVQgY29tcGlsYXRpb24gYW5hbHlzaXMuIExldCYjMzk7cyBzZWUsIGBidWlsZF9pbnNuYCBpcyBjYWxsZWQgYnkgYGJ1aWxkX2JvZHlgLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgYnkgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBzaG91bGQgSSBmb2N1cyBvbiBgYnVpbGRfaW5zbmA/IEl0JiMzOTtzIHdoZXJlIHRoZSBpbmRpdmlkdWFsIGluc3RydWN0aW9ucyBhcmUgYWN0dWFsbHkgYnVpbHQuIEJ1dCB3YWl0LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgcmVhbGx5IHRoZSBlbnRyeSBwb2ludCwgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgd2hvbGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBlbnRyeS4KCkhtbSwgYGJ1aWxkX2luc25gIGlzIHN0YXRpYy4gVGhhdCAqY291bGQqIGJlIGEgcHJvYmxlbSBmb3IgdG9vbHMgbGlrZSBzeXprYWxsZXIsIGFsdGhvdWdoIGl0IGNhbiBzb21ldGltZXMgd29yayB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBlbmQgdXAgaW4gYGthbGxzeW1zYC4gQnV0IHJlYWxseSwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHRoZSBtb3JlIGxvZ2ljYWwgY2hvaWNlIGZvciB0aGUgaGlnaC1sZXZlbCB2aWV3LiBUaGlua2luZyBhYm91dCBpdCwgYGJ1aWxkX2luc25gIGlzIGp1c3Qgc3VwZXIgc3BlY2lmaWMgdG8gaW5kaXZpZHVhbCBpbnN0cnVjdGlvbnMuCgpSaWdodCwgc28gSSYjMzk7bGwgZ28gd2l0aCBib3RoIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJ1aWxkX2luc25gIGZvciBub3cuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIGJhbGFuY2Ugb2Ygb3ZlcmFsbCBjb250ZXh0IGFuZCB0aGUgbG93ZXItbGV2ZWwgZGV0YWlscy4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25maWcgb3B0aW9ucy4gSXMgYENPTkZJR19CUEZfSklUYCBhbGwgSSBuZWVkPyBZZXMsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHRoZSBrZXkgb25lcy4gU2luY2UgSSYjMzk7bSB0YXJnZXRpbmcgYXJtNjQgc3BlY2lmaWNhbGx5LCBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgdGhlIGFybTY0IGNvbmZpZywgYnV0IHNwZWNpZnlpbmcgYEJQRl9KSVRgIHdvdWxkbiYjMzk7dCBodXJ0LgoKRmluYWxseSwgSSBzaG91bGQganVzdCBxdWlja2x5IHZlcmlmeSB3aGF0IGNhbGxzIGBicGZfaW50X2ppdF9jb21waWxlYCBpbiB0aGUgYXJtNjQgaW1wbGVtZW50YXRpb24ganVzdCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwODY9c3RydWN0IGFybTY0X2ppdF9kYXRhIHtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDkyLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjA5MzpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjA5NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBgYnBmX2ludF9qaXRfY29tcGlsZWAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBKSVQgY29tcGlsYXRpb24gYmVoYXZpb3Igd2hlbiBkZWFsaW5nIHdpdGggdGhvc2UgQUxVIGFuZCBNT1YgaW5zdHJ1Y3Rpb25zIHRoYXQgaW52b2x2ZSB1c2VyIGNhc3RzLCB3aGVyZSBgaW5zbl9pc19jYXN0X3VzZXIoaW5zbilgIGV2YWx1YXRlcyB0byB0cnVlLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGdvb2QgY29kZS4gRGVmaW5pdGVseSBzb21ldGhpbmcgd2UmIzM5O2Qgd2FudCB0byBmdXp6LCBJJiMzOTtkIHNheSBpdCYjMzk7cyBXb3J0aEZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgc2hvdWxkIGJlIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQsIG9mIGNvdXJzZSwgdGhlIGBidWlsZF9pbnNuYCBmdW5jdGlvbiDigJMgdGhvc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gVGhlIHBhdGNoIHNheXMgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSBuZWVkZWQsIGJ1dCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaWYgYENPTkZJR19CUEZfSklUYCBhbG9uZSB3b3VsZCBzdWZmaWNlLgoKSG9sZCBvbi4uLiBgYnVpbGRfaW5zbmAgaXMgYSBwcmV0dHkgZ2VuZXJpYyBuYW1lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFub3RoZXIgZnVuY3Rpb24gdGhhdCBiZWFycyB0aGUgc2FtZSBuYW1lIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidWlsZF9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYz0xNTY2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4tLVxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYy0xNTg4LSAqL1xuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYzoxNTg5OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTE1OTAte1xuLS1cbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM9MjEwNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcbi0tXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTIxMTMtXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jOjIxMTQ6XHRcdHJldCA9IGJ1aWxkX2luc24oaW5zbiwgY3R4KTtcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMjExNS1cbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjM1PXN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItICovXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjUzOnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjU0LVx0XHQgICAgICBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGV4dHJhX3Bhc3MpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTk5MT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMDktXHRcdGN0eC1cdTAwM2VvZmZzZXRbaV0gPSBjdHgtXHUwMDNlaWR4O1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjAxMDpcdFx0cmV0ID0gYnVpbGRfaW5zbihlbnYsIGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDExLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz02NTM9c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtNzE0LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzo3MTU6c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy03MTYte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTQ3ND1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTQ4NS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTQ4NjpcdFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNDg3LVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tLVxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM9MTQzPXN0YXRpYyBpbmxpbmUgdTMyIGJ1aWxkX2ppbW0odTMyIGFyZylcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYy0xNTUtICovXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYzoxNTY6c3RhdGljIHZvaWQgYnVpbGRfaW5zbih1MzIgKipidWYsIGVudW0gb3Bjb2RlIG9wYywgLi4uKVxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmMtMTU3LXtcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmM9MjIwPXN0YXRpYyBpbmxpbmUgdTMyIGJ1aWxkX2ppbW0odTMyIGFyZylcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmMtMjMxLSAqL1xuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jOjIzMjpzdGF0aWMgdm9pZCBidWlsZF9pbnNuKHUzMiAqKmJ1ZiwgZW51bSBvcGNvZGUgb3BjLCAuLi4pXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmMtMjMzLXtcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE0Mz1zdGF0aWMgaW5saW5lIHUzMiBidWlsZF9zZXQodTMyIGFyZylcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE0OS1cbmFyY2gvbWlwcy9tbS91YXNtLmM6MTUwOnN0YXRpYyB2b2lkIGJ1aWxkX2luc24odTMyICoqYnVmLCBlbnVtIG9wY29kZSBvcGMsIC4uLik7XG5hcmNoL21pcHMvbW0vdWFzbS5jLTE1MS1cbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE1Mz1JcF91MXUydTMob3ApXHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTU0LXtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE1NTpcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYSwgYiwgYyk7XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE1Ni19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9MTYwPUlwX3MzczFzMihvcClcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNjEte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTYyOlx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBjLCBhKTtcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTYzLX1cdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC9taXBzL21tL3Vhc20uYz0xNjc9SXBfdTJ1MXUzKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE2OC17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxNjk6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGMpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNzAtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE3ND1JcF91M3UydTEob3ApXHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTc1LXtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE3NjpcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYywgYiwgYSk7XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE3Ny19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9MTgxPUlwX3UzdTF1MihvcClcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xODIte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTgzOlx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBjLCBhKTtcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTg0LX1cdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC9taXBzL21tL3Vhc20uYz0xODg9SXBfdTF1MnMzKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE4OS17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxOTA6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIsIGMpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xOTEtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE5NT1JcF91MnMzdTEob3ApXHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTk2LXtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE5NzpcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYywgYSwgYik7XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE5OC19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9MjAyPUlwX3UydTFzMyhvcClcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMDMte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjA0Olx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjKTtcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjA1LX1cdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC9taXBzL21tL3Vhc20uYz0yMDk9SXBfdTJ1MW1zYnUzKG9wKVx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMTAte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjExOlx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjJiM0MztkLTEsIGMpO1x0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjEyLX1cdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC9taXBzL21tL3Vhc20uYz0yMTY9SXBfdTJ1MW1zYnUzKG9wKVx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMTcte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjE4Olx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjJiM0MztkLTMzLCBjKTtcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIxOS19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9MjIzPUlwX3UydTFtc2J1MyhvcClcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjI0LXtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjIyNTpcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYyYjNDM7ZC0zMywgYy0zMik7XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMjYtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTIzMD1JcF91MnUxbXNidTMob3ApXHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIzMS17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyMzI6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGQtMSwgYyk7XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMzMtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTIzNz1JcF91MXUyKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIzOC17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyMzk6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNDAtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTI0ND1JcF91MXUyKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI0NS17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNDY6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNDctfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTI1MT1JcF91MXMyKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI1Mi17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNTM6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNTQtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTI1OD1JcF91MShvcClcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNTkte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjYwOlx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBhKTtcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNjEtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTI2NT1JcF8wKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI2Ni17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNjc6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3ApO1x0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI2OC19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9Mzk1PXZvaWQgdWFzbV9pX3ByZWYodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiLFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmMtNDAyLVx0XHQgKi9cbmFyY2gvbWlwcy9tbS91YXNtLmM6NDAzOlx0XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbl9wcmVmLCBjLCAyOCwgYik7XG5hcmNoL21pcHMvbW0vdWFzbS5jLTQwNC1cdGVsc2VcbmFyY2gvbWlwcy9tbS91YXNtLmM6NDA1Olx0XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbl9wcmVmLCBjLCBhLCBiKTtcbmFyY2gvbWlwcy9tbS91YXNtLmMtNDA2LX1cbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jPTg1MD1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuYy04NzAtXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jOjg3MTpcdFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgpO1xuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuYy04NzItXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaD0yMjI9dm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgaW50IGRlc3RfcmVnKTtcbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5oLTIzMi0gKi9cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wLmg6MjMzOmludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgpO1xuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaC0yMzQtXG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jPTE0NDQ9dm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgaW50IGRlc3RfcmVnKVxuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNDYyLS8qIEJ1aWxkIG9uZSBlQlBGIGluc3RydWN0aW9uICovXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTQ2MzppbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTE0NjQte1xuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYz02MTk9dm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgaW50IGRlc3RfcmVnKVxuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy02MzQtLyogQnVpbGQgb25lIGVCUEYgaW5zdHJ1Y3Rpb24gKi9cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYzo2MzU6aW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy02MzYte1xuLS1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jPTg1MD1zdGF0aWMgdm9pZCBlbWl0X3RhaWxfY2FsbChzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jLTg5NC1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jOjg5NTpzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzY0LmMtODk2LXtcbi0tXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYz0xNDM4PXN0YXRpYyBpbnQgYnVpbGRfYm9keShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jLTE0NDYtXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYzoxNDQ3Olx0XHRyZXQgPSBidWlsZF9pbnNuKGluc24sIGN0eCk7XG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYy0xNDQ4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ2MQoJCQkJCQkJb3V0cHV0OiAxMDMKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIHRoZSBLZXkgU3ltYm9sIGZvciBKSVQgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBKSVQgY29tcGlsYXRpb24uIGBidWlsZF9pbnNuYCBpcyBhIHByZXR0eSBnZW5lcmljIG5hbWUsIHVzZWQgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMsIHNvIHRoYXQmIzM5O3Mgbm90IHRoZSBiZXN0IGNob2ljZSBmb3IgcGlucG9pbnRpbmcgdGhlIHRhcmdldCBmdW5jdGlvbi4gTGV0JiMzOTtzIGZvY3VzIGluIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBhcyBhIHN0YXJ0aW5nIHBvaW50LCB0aGlua2luZyB0aGF0JiMzOTtzIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBraWNraW5nIG9mZiBKSVQgY29tcGlsYXRpb24uIEhtbSwgYnV0IHdhaXQgYSBtaW51dGUsIHRoYXQgYWxzbyBhcHBlYXJzIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLiBJcyB0aGVyZSBhIG1vcmUgQVJNNjQgc3BlY2lmaWMgZnVuY3Rpb24/IGBidWlsZF9ib2R5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gdGhhdCB3b24mIzM5O3Qgd29yay4KCkFscmlnaHQsIGxldCYjMzk7cyBnbyB3aXRoIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgaXRzIHJlbGF0ZWQgYGJwZl9qaXRfYnVpbGRfYm9keWAgKG9oIHdhaXQsIEFSTTY0IHVzZXMgYGJ1aWxkX2JvZHlgIGJ1dCBsZXQmIzM5O3Mgc2VlLi4uKSBidXQgdGhlbiwgKm9oKiwgc3l6a2FsbGVyJiMzOTtzIGdvaW5nIHRvIG1ha2UgYSBtYXBwaW5nIHRvIHRoZSBBUk02NC1zcGVjaWZpYyBmdW5jdGlvbi4gSWYgaXQmIzM5O3MgZnV6emluZyBhcm02NCwgaXQmIzM5O3MgZ29pbmcgdG8gYXV0b21hdGljYWxseSBwaWNrIHRoZSByaWdodCBvbmUuIE9rYXksIGxldCYjMzk7cyBrZWVwIGl0IHNpbXBsZSBhbmQganVzdCB1c2UgYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKQWN0dWFsbHksIHRoZSBwYXRjaCBleHBsaWNpdGx5IHRhcmdldHMgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCwgc28gSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyByZWFsbHkgdGhlICpvbmx5KiBwZXJ0aW5lbnQgZnVuY3Rpb24uIExldCBtZSBpbmNsdWRlIGBicGZfaml0X2NvbXBpbGVgIG9yIHdoYXRldmVyIGVsc2UgaXMgaW4gdGhhdCBmaWxlLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIGZpcnN0IG9uZTogeWVwLCB0aGUgcmlnaHQgdGhpbmcgdG8gdXNlIGhlcmUgaXMgYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKQW5kIGxldCBtZSBtYWtlIHN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBuZWNlc3NhcnksIEkmIzM5O2xsIG5lZWQgdGhhdCBvbmUuIEFuZCBJIGtub3cgSSBuZWVkIGBDT05GSUdfQlBGX0pJVGAgZm9yIHRoZSBKSVQgaXRzZWxmLiBgQ09ORklHX0FSTTY0YCBpcyBpbXBsaWNpdCwgc28gSSBjYW4gaWdub3JlIHRoYXQuIEkmIzM5O20gZ29vZC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBBUk02NCB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB1c2VyIGFkZHJlc3NlcyBmb3IgQlBGIGFyZW5hLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEpJVCBjb21waWxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIEFSTTY0IHRvIG9wdGltaXplIHRoZSBnZW5lcmF0aW9uIG9mIHVzZXIgYWRkcmVzc2VzIGZvciBCUEYgYXJlbmEuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgSklUIGNvbXBpbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6MDAuMDYyMTI0MjkyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0Njg1NTIxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIEFSTTY0IHRvIG9wdGltaXplIHRoZSBnZW5lcmF0aW9uIG9mIHVzZXIgYWRkcmVzc2VzIGZvciBCUEYgYXJlbmEuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgSklUIGNvbXBpbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMTowMC4wNjIxMzM1MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODU5MzI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBjOWZiNDMyZGVmMWRjMGJlODE5ZGY4MTY2OTgzZDM5ZmU3NTdmYzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMDY6MzA6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IGIwMDc1ZWNlNGE2ZTdmLi4wZjYxNjYyYjkwMGJkMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTEyODQsMTIgKzEyODQsMjUgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxcbiBcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XFxuIFxcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxcbiBcXHRcXHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcXG4tXFx0XFx0XFx0ZW1pdChBNjRfTU9WKDAsIHRtcCwgc3JjKSwgY3R4KTsgLy8gMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHNcXG4tXFx0XFx0XFx0ZW1pdF9hNjRfbW92X2koMCwgZHN0LCBjdHgtXFx1MDAzZXVzZXJfdm1fc3RhcnQgXFx1MDAzZVxcdTAwM2UgMzIsIGN0eCk7XFxuLVxcdFxcdFxcdGVtaXQoQTY0X0xTTCgxLCBkc3QsIGRzdCwgMzIpLCBjdHgpO1xcbi1cXHRcXHRcXHRlbWl0KEE2NF9DQlooMSwgdG1wLCAyKSwgY3R4KTtcXG4tXFx0XFx0XFx0ZW1pdChBNjRfT1JSKDEsIHRtcCwgZHN0LCB0bXApLCBjdHgpO1xcbi1cXHRcXHRcXHRlbWl0KEE2NF9NT1YoMSwgZHN0LCB0bXApLCBjdHgpO1xcbitcXHRcXHRcXHR1MzIgdXBwZXIgPSBjdHgtXFx1MDAzZXVzZXJfdm1fc3RhcnQgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdFxcdFxcdHUxNiB1cHBlcl9sb3cgPSB1cHBlciBcXHUwMDI2IDB4ZmZmZjtcXG4rXFx0XFx0XFx0dTE2IHVwcGVyX2hpZ2ggPSB1cHBlciBcXHUwMDNlXFx1MDAzZSAxNjtcXG4rXFx0XFx0XFx0aW50IG5yX21vdmsgPSAhIXVwcGVyX2xvdyArICEhdXBwZXJfaGlnaDtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEJ1aWxkIHRoZSB1c2VyIGFkZHJlc3M6IHRoZSBsb3cgMzIgYml0cyBhcmUgdGhlIGFyZW5hXFxuK1xcdFxcdFxcdCAqIG9mZnNldCwgdGhlIHVwcGVyIDMyIGJpdHMgY29tZSBmcm9tIHVzZXJfdm1fc3RhcnQuIEFcXG4rXFx0XFx0XFx0ICogemVybyBvZmZzZXQgbXVzdCBzdGF5IE5VTEwsIHNvIGJyYW5jaCBvdmVyIHRoZSBNT1ZLc1xcbitcXHRcXHRcXHQgKiB3aGVuIGl0IGlzIHplcm8uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRlbWl0KEE2NF9NT1YoMCwgZHN0LCBzcmMpLCBjdHgpOyAvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xcbitcXHRcXHRcXHRpZiAobnJfbW92aykge1xcbitcXHRcXHRcXHRcXHRlbWl0KEE2NF9DQlooMCwgZHN0LCBucl9tb3ZrICsgMSksIGN0eCk7XFxuK1xcdFxcdFxcdFxcdGlmICh1cHBlcl9sb3cpXFxuK1xcdFxcdFxcdFxcdFxcdGVtaXQoQTY0X01PVksoMSwgZHN0LCB1cHBlcl9sb3csIDMyKSwgY3R4KTtcXG4rXFx0XFx0XFx0XFx0aWYgKHVwcGVyX2hpZ2gpXFxuK1xcdFxcdFxcdFxcdFxcdGVtaXQoQTY0X01PVksoMSwgZHN0LCB1cHBlcl9oaWdoLCA0OCksIGN0eCk7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG4gXFx0XFx0XFx0aWYgKGRzdCAhPSBzcmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjAwLjgwMTY5MjQ3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2NzI4OTcxNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBBUk02NCB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB1c2VyIGFkZHJlc3NlcyBmb3IgQlBGIGFyZW5hLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEpJVCBjb21waWxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYzlmYjQzMmRlZjFkYzBiZTgxOWRmODE2Njk4M2QzOWZlNzU3ZmM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMDY6MzA6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBiMDA3NWVjZTRhNmU3Zi4uMGY2MTY2MmI5MDBiZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjg0LDEyICsxMjg0LDI1IEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdGNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfWDpcbiBcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxuIFx0XHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcbi1cdFx0XHRlbWl0KEE2NF9NT1YoMCwgdG1wLCBzcmMpLCBjdHgpOyAvLyAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0c1xuLVx0XHRcdGVtaXRfYTY0X21vdl9pKDAsIGRzdCwgY3R4LVx1MDAzZXVzZXJfdm1fc3RhcnQgXHUwMDNlXHUwMDNlIDMyLCBjdHgpO1xuLVx0XHRcdGVtaXQoQTY0X0xTTCgxLCBkc3QsIGRzdCwgMzIpLCBjdHgpO1xuLVx0XHRcdGVtaXQoQTY0X0NCWigxLCB0bXAsIDIpLCBjdHgpO1xuLVx0XHRcdGVtaXQoQTY0X09SUigxLCB0bXAsIGRzdCwgdG1wKSwgY3R4KTtcbi1cdFx0XHRlbWl0KEE2NF9NT1YoMSwgZHN0LCB0bXApLCBjdHgpO1xuK1x0XHRcdHUzMiB1cHBlciA9IGN0eC1cdTAwM2V1c2VyX3ZtX3N0YXJ0IFx1MDAzZVx1MDAzZSAzMjtcbitcdFx0XHR1MTYgdXBwZXJfbG93ID0gdXBwZXIgXHUwMDI2IDB4ZmZmZjtcbitcdFx0XHR1MTYgdXBwZXJfaGlnaCA9IHVwcGVyIFx1MDAzZVx1MDAzZSAxNjtcbitcdFx0XHRpbnQgbnJfbW92ayA9ICEhdXBwZXJfbG93ICsgISF1cHBlcl9oaWdoO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQnVpbGQgdGhlIHVzZXIgYWRkcmVzczogdGhlIGxvdyAzMiBiaXRzIGFyZSB0aGUgYXJlbmFcbitcdFx0XHQgKiBvZmZzZXQsIHRoZSB1cHBlciAzMiBiaXRzIGNvbWUgZnJvbSB1c2VyX3ZtX3N0YXJ0LiBBXG4rXHRcdFx0ICogemVybyBvZmZzZXQgbXVzdCBzdGF5IE5VTEwsIHNvIGJyYW5jaCBvdmVyIHRoZSBNT1ZLc1xuK1x0XHRcdCAqIHdoZW4gaXQgaXMgemVyby5cbitcdFx0XHQgKi9cbitcdFx0XHRlbWl0KEE2NF9NT1YoMCwgZHN0LCBzcmMpLCBjdHgpOyAvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xuK1x0XHRcdGlmIChucl9tb3ZrKSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9DQlooMCwgZHN0LCBucl9tb3ZrICsgMSksIGN0eCk7XG4rXHRcdFx0XHRpZiAodXBwZXJfbG93KVxuK1x0XHRcdFx0XHRlbWl0KEE2NF9NT1ZLKDEsIGRzdCwgdXBwZXJfbG93LCAzMiksIGN0eCk7XG4rXHRcdFx0XHRpZiAodXBwZXJfaGlnaClcbitcdFx0XHRcdFx0ZW1pdChBNjRfTU9WSygxLCBkc3QsIHVwcGVyX2hpZ2gsIDQ4KSwgY3R4KTtcbitcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbiBcdFx0XHRpZiAoZHN0ICE9IHNyYylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjAwLjgwMTY5NTAxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDk1MTE0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEpJVCBDb21waWxlciBQYXRjaCBmb3IgQVJNNjQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCdzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gdG8gdGhlIHdheSB0aGUgdXNlciBhZGRyZXNzIGlzIGhhbmRsZWQgaW4gYGJ1aWxkX2luc24oKWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIEJQRiBhcmVuYS4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHdhcyBhIGJpdCBjbHVua3ksIHVzaW5nIGEgc2VyaWVzIG9mIG1vdmVzIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgdG8gY29uc3RydWN0IHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSB1c2VyIHZpcnR1YWwgYWRkcmVzcy4gVGhleSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhpcyBieSB1c2luZyBgTU9WS2AgaW5zdHJ1Y3Rpb25zLCB3aGljaCBhcmUgbW9yZSBlZmZpY2llbnQgZm9yIGltbWVkaWF0ZSB2YWx1ZSBsb2FkaW5nIG9uIEFSTTY0LiBcblxuRXNzZW50aWFsbHksIHRoZXkncmUgYnJlYWtpbmcgZG93biB0aGUgdXBwZXIgMzIgYml0cyBvZiBgY3R4LVx1MDAzZXVzZXJfdm1fc3RhcnRgIGludG8gdHdvIDE2LWJpdCBjaHVua3MgYW5kIHVzaW5nIGBNT1ZLYCB0byBsb2FkIHRoZW0uIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIHRlcm1zIG9mIGluc3RydWN0aW9uIGNvdW50LCBhc3N1bWluZyB0aGUgYE1PVktgIGluc3RydWN0aW9ucyBhcmUgdHJ1bHkgbW9yZSBlZmZpY2llbnQgaW4gdGhpcyBzY2VuYXJpbywgYXMgSSB3b3VsZCBleHBlY3QgdGhlbSB0byBiZS4gSSB3b3VsZCBuZWVkIHRvIGJlbmNobWFyayBpdCwgYnV0IG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyBhIGdvb2QgY2hhbmdlLlxuXG5Ob3csIG15IG1pbmQgaXMgYWxyZWFkeSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIGZ1enogdGhpcy4gV2UgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuIEl0J3MgdGhlIHVzZXIgYWRkcmVzcyBjb25zdHJ1Y3Rpb24gdGhhdCBpcyBuZXcgYW5kIGRpZmZlcmVudCwgc28gd2UgbmVlZCB0byBjb25jZW50cmF0ZSBvbiBpdC4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgY29udHJvbCB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBmaWxlLiBBaCwgeWVzLCBpdCBzZWVtcyBgQ09ORklHX0JQRl9KSVRgIGVuYWJsZXMgdGhpcy4gTm93IEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgaW5jbHVkZWQuLi4gTGV0IG1lIGNoZWNrIHRoZSBgYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVgIG5vdyB0byBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMTowNy4xNTEyMzQxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDY4ODI5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L01ha2VmaWxlLTQtI1xcbmFyY2gvYXJtNjQvbmV0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjA3Ljg1ODEyMzAxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODg4NzcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyBCUEYgSklUIGFuZCBVc2VyIFNwYWNlIENhc3QgSW5zdHJ1Y3Rpb25zKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgY29kZSByZWxhdGVkIHRvIGBDT05GSUdfQlBGX0pJVGAuIFRoYXQncyBhIGtleSBzdGFydGluZyBwb2ludC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKWAuIEFuZCwgSSBiZWxpZXZlIHRoaXMgbGlrZWx5IHRpZXMgaW50byB0aGUgQlBGIGFyZW5hLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlcmUgYSBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhlIEJQRiBhcmVuYSwgb3IgZG9lcyB0aGUgcHJlc2VuY2Ugb2YgYEJQRl9KSVRgIGltcGxpY2l0bHkgY292ZXIgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBpbiB0aGlzIGNvbnRleHQ/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLiBEb2VzIHRoZSBKSVQgZW5hYmxlbWVudCBhdXRvbWF0aWNhbGx5IGhhbmRsZSB3aGF0ZXZlciBjb25zaWRlcmF0aW9ucyBgaW5zbl9pc19jYXN0X3VzZXJgIG1pZ2h0IGhhdmUgY29uY2VybmluZyBtZW1vcnkgYWNjZXNzIGFuZCBzZWN1cml0eSB3aXRoaW4gdGhlIGFyZW5hPyBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMToxMi4xNDcwMDMwODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4NTUzOTM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnNuX2lzX2Nhc3RfdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTI1Mz1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTI4NS1cXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjg2OlxcdFxcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyODctXFx0XFx0XFx0dTMyIHVwcGVyID0gY3R4LVxcdTAwM2V1c2VyX3ZtX3N0YXJ0IFxcdTAwM2VcXHUwMDNlIDMyO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz03MTU9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy03MzYtXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzo3Mzc6XFx0XFx0aWYgKGluc25faXNfY2FzdF91c2VyKGluc24pKSB7XFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy03MzgtXFx0XFx0XFx0bW92ZV9yZWcoY3R4LCB0MSwgc3JjKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNzAtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNzE6XFx0XFx0XFx0aWYgKGluc25faXNfY2FzdF91c2VyKFxcdTAwMjZpbnNuW2ldKSkge1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjcyLVxcdFxcdFxcdFxcdEVNSVQoUFBDX1JBV19STERJQ0xfRE9UKHRtcDFfcmVnLCBzcmNfcmVnLCAwLCAzMikpO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzY5PWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVxcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcXHRcXHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzODctXFx0XFx0XFx0ZW1pdF9tdihSVl9SRUdfVDEsIHJzLCBjdHgpO1xcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz04NzY9c3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtOTE5LVxcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6OTIwOlxcdFxcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKSkge1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtOTIxLVxcdFxcdFxcdGludCBwYXRjaF9icmM7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTY4MT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTg1My1cXHRcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTg1NDpcXHRcXHRcXHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTg1NS1cXHRcXHRcXHRcXHRpZiAoZHN0X3JlZyAhPSBzcmNfcmVnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNTI9c3RhdGljIGlubGluZSBib29sIGluc25faXNfemV4dChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTI1OS0gKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjI2MDpzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6MTcuOTMyNTQ3NTA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxOTE1NTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gYGluc25faXNfY2FzdF91c2VyYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGV4YWN0bHkgYGluc25faXNfY2FzdF91c2VyYCByZXByZXNlbnRzLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseSwgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbmFsIGNvbmNlcHQgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaXRzIGRlZmluaXRpb24gYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlIG9yIGNvbXBpbGVyIGNvbnRleHQgSSdtIGN1cnJlbnRseSB3b3JraW5nIGluLiBJcyBpdCBhYm91dCB1c2VyLWRlZmluZWQgY2FzdHM/IENvbXBpbGVyLWdlbmVyYXRlZCBjYXN0cz8gU3BlY2lmaWMgdHlwZXMgb2YgY2FzdHMsIGxpa2Ugd2lkZW5pbmcgb3IgbmFycm93aW5nPyBPciBpcyBpdCBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBLbm93aW5nIHRoZSBwcmVjaXNlIHNlbWFudGljIGRlZmluaXRpb24gd2lsbCBzdGVlciB0aGUgcmVzdCBvZiBteSBhbmFseXNpcy4gSSdtIGVzc2VudGlhbGx5IGxvb2tpbmcgdG8gaW1tZWRpYXRlbHkgcmVjb25zdHJ1Y3QgYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBmdW5jdGlvbidzIHNjb3BlLCBpbnB1dHMsIGFuZCBpbnRlbmRlZCBiZWhhdmlvdXIgYmVmb3JlIG1vdmluZyBpbnRvIG1vcmUgYWR2YW5jZWQgcmVhc29uaW5nIGFib3V0IGl0LiBMZXQncyBzZWUuLi4gYSBxdWljayBjaGVjayBzaG91bGQgam9nIG15IG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjIxLjM1MTcwNjM4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODc4NTQwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zbl9pc19jYXN0X3VzZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1Mj1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc196ZXh0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjU5LSAqL1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjYwOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMToyMS45Mzk1NjY0NDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU2MjYwODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBGaWx0ZXJpbmcgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IG9iamVjdGl2ZSBpcyB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJ3MgZmlsdGVyaW5nIGNhcGFiaWxpdGllcy4gSSBrbm93IHRoZSBiYXNpY3MsIGJ1dCBJIHdhbnQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIGxvd2VyLWxldmVsIHN0cnVjdHVyZXMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJIHJlbWVtYmVyIGl0IGJlaW5nIGNydWNpYWwgZm9yIHRoZSBjb3JlIHBhY2tldCBmaWx0ZXJpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW4gYXJvdW5kIGxpbmUgMjYwLiBUaGF0IHVzdWFsbHkgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHRoZSBCUEYgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMuIEl0J3MgdGltZSB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlIGtlcm5lbCBhY3R1YWxseSAqZGVmaW5lcyogZmlsdGVycy4gSG9wZWZ1bGx5LCB0aGlzIHJlZnJlc2ggd2lsbCBnaXZlIG1lIHdoYXQgSSBuZWVkIHRvIG1vdmUgb24gdG8gdGhlIG5leHQgc2V0IG9mIHF1ZXN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjI1LjI5NTgzMDI2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0XFx0LmltbSAgID0gMSB9KVxcbiAyNTE6XFx0XFxuIDI1MjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc196ZXh0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4gMjUzOlxcdHtcXG4gMjU0OlxcdFxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gPT0gMTtcXG4gMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0LyogYWRkcl9zcGFjZV9jYXN0IGZyb20gYXMoMCkgdG8gYXMoMSkgaXMgZm9yIGNvbnZlcnRpbmcgYnBmIGFyZW5hIHBvaW50ZXJzXFxuIDI1ODpcXHQgKiB0byBwb2ludGVycyBpbiB1c2VyIHZtYS5cXG4gMjU5OlxcdCAqL1xcbiAyNjA6XFx0c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4gMjYxOlxcdHtcXG4gMjYyOlxcdFxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2XFxuIDI2MzpcXHRcXHRcXHRcXHQgICAgICBpbnNuLVxcdTAwM2VvZmYgPT0gQlBGX0FERFJfU1BBQ0VfQ0FTVCBcXHUwMDI2XFx1MDAyNlxcbiAyNjQ6XFx0XFx0XFx0XFx0ICAgICAgaW5zbi1cXHUwMDNlaW1tID09IDFVIFxcdTAwM2NcXHUwMDNjIDE2O1xcbiAyNjU6XFx0fVxcbiAyNjY6XFx0XFxuIDI2NzpcXHQvKiBCUEZfTERfSU1NNjQgbWFjcm8gZW5jb2RlcyBzaW5nbGUgJ2xvYWQgNjQtYml0IGltbWVkaWF0ZScgaW5zbiAqL1xcbiAyNjg6XFx0I2RlZmluZSBCUEZfTERfSU1NNjQoRFNULCBJTU0pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyNjk6XFx0XFx0QlBGX0xEX0lNTTY0X1JBVyhEU1QsIDAsIElNTSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6MjUuMjk2MDA0MTIyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTYwMTc0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKkludmVzdGlnYXRpbmcgYSBCUEYgQXJlbmEgSXNzdWUqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcy4gSXQncyBsb29raW5nIGxpa2UgdGhpcyBpc3N1ZSBpcyBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBCUEYgYXJlbmEsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRoZSBwb3RlbnRpYWwgZm9yIHJlc291cmNlIGNvbnRlbnRpb24sIGFsbG9jYXRpb24gcHJvYmxlbXMsIG9yIHBlcmhhcHMgZXZlbiBhIG1lbW9yeSBsZWFrLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWcgc2V0dGluZyB0aGF0IGRpcmVjdGx5IGNvbnRyb2xzIHRoZSBCUEYgYXJlbmEncyBiZWhhdmlvcj8gVGhlcmUgKmhhcyogdG8gYmUsIGFuZCB0aGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIExldCdzIGdldCB0aGUgY29uZmlnIGFuZCBxdWlja2x5IHJ1bGUgdGhhdCBvdXQsIG9yIG1vcmUgaG9wZWZ1bGx5LCBmaW5kIHRoZSBzbW9raW5nIGd1bi4gSXQgY291bGQgYmUgbGltaXRzLCBzaXppbmcsIG9yIHBlcmhhcHMgZXZlbiBzb21ldGhpbmcgcmVsYXRlZCB0byBpc29sYXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgQlBGIHByb2dyYW1zLCBJJ20ga2VlcGluZyBhbGwgcG9zc2liaWxpdGllcyBpbiB0aGUgYmFjayBvZiBteSBoZWFkLiBOZWVkIHRvIGZpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjI4LjgxMjAyNTMzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyOTExMDIxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjI5LjA0NDk0NTMwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcwODc4MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEFyZW5hKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24gb3IgbWFuYWdlbWVudCBpc3N1ZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgYXJlbmEgYWxsb2NhdG9yLiBUaGF0J3MgdXN1YWxseSB0aGUgZmlyc3QgcGxhY2UgSSBzdGFydCB3aXRoIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBlc3BlY2lhbGx5IHdoZW4gbG9va2luZyBhdCBCUEYgY29kZS4gSeKAmW0gemVyb2luZyBpbiBvbiBga2VybmVsL2JwZi9hcmVuYS5jYCwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhciB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZS4gSXQncyB0aGUgbW9zdCBwbGF1c2libGUgbG9jYXRpb24gZm9yIHRoZSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgaXNzdWUgd2UgYXJlIHNlZWluZywgYW5kIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkZWJ1Z2dpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGZ1cnRoZXIgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIG9yIG5vdCBkb2luZy4gVGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDI4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6MzIuNTE1ODI2MjY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5MDAxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMTozMi42NTI3MzIwNzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNDkyNzYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBCUEYgYXJlbmEgaXMgZ2V0dGluZyBjb21waWxlZCwgYnV0IG9ubHkgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4gSXQgbmVlZHMgYm90aCBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIHRvIGJlIHNldCB0byAneScsIGFuZCBhbHNvIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24uIFRoYXQncyBnb29kIHRvIGtub3csIHNldHMgdGhlIHN0YWdlIGZvciBjb250ZXh0LlxuXG5UaGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCBmaWxlLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgYnVpbGRfaW5zbmAgZnVuY3Rpb24uIE5vdywgdGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiBJJ20gYXNzZXNzaW5nIHRoaXMuIElzIGl0IGBidWlsZF9pbnNuYCBpdHNlbGYsIG9yIHNob3VsZCBJIGJlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGhpZ2hlciBsZXZlbCBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYD8gSG1tLCB3YWl0IGEgbWludXRlLCBgYnVpbGRfaW5zbmAgaXMgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGxpa2VseSBsaW1pdHMgaXRzIGV4dGVybmFsIHZpc2liaWxpdHkuIE9rYXksIHRoZW4sIGxldCdzIHRyYWNlIGl0cyBjYWxscyB0byBzZWUgd2hlcmUgaXQgaXMgYmVpbmcgdXNlZC4gVGhhdCdzIHRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzUxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjM2Ljc4NzY2MjQ5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxOTczMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1aWxkX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTIzNT1zdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZV9pbW0oczMyIGltbSwgczE2IGJwZl9vZmYsIGNvbnN0IHU4IHRtcCwgc3RydWN0IGppdF9jdHggKmN0eClcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItICovXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTI1MzpzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTQtXFx0XFx0ICAgICAgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTk5MT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjAwOS1cXHRcXHRjdHgtXFx1MDAzZW9mZnNldFtpXSA9IGN0eC1cXHUwMDNlaWR4O1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIwMTA6XFx0XFx0cmV0ID0gYnVpbGRfaW5zbihlbnYsIGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjAxMS1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMTozNy4wMTk2NjUyNDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3NjkxOTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgdGhlIFJpZ2h0IEZvY3VzIGZvciBKSVQgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9sIHRvIHVzZSBmb3IgdGhpcyBKSVQgY29tcGlsYXRpb24gYW5hbHlzaXMuIExldCdzIHNlZSwgYGJ1aWxkX2luc25gIGlzIGNhbGxlZCBieSBgYnVpbGRfYm9keWAsIGFuZCB0aGF0J3MgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgc2hvdWxkIEkgZm9jdXMgb24gYGJ1aWxkX2luc25gPyBJdCdzIHdoZXJlIHRoZSBpbmRpdmlkdWFsIGluc3RydWN0aW9ucyBhcmUgYWN0dWFsbHkgYnVpbHQuIEJ1dCB3YWl0LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgcmVhbGx5IHRoZSBlbnRyeSBwb2ludCwgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgd2hvbGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEl0J3MgdGhlIHN0YW5kYXJkIGVudHJ5LlxuXG5IbW0sIGBidWlsZF9pbnNuYCBpcyBzdGF0aWMuIFRoYXQgKmNvdWxkKiBiZSBhIHByb2JsZW0gZm9yIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLCBhbHRob3VnaCBpdCBjYW4gc29tZXRpbWVzIHdvcmsgd2l0aCBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgZW5kIHVwIGluIGBrYWxsc3ltc2AuIEJ1dCByZWFsbHksIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgbW9yZSBsb2dpY2FsIGNob2ljZSBmb3IgdGhlIGhpZ2gtbGV2ZWwgdmlldy4gVGhpbmtpbmcgYWJvdXQgaXQsIGBidWlsZF9pbnNuYCBpcyBqdXN0IHN1cGVyIHNwZWNpZmljIHRvIGluZGl2aWR1YWwgaW5zdHJ1Y3Rpb25zLlxuXG5SaWdodCwgc28gSSdsbCBnbyB3aXRoIGJvdGggYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnVpbGRfaW5zbmAgZm9yIG5vdy4gVGhhdCBnaXZlcyBtZSBhIGdvb2QgYmFsYW5jZSBvZiBvdmVyYWxsIGNvbnRleHQgYW5kIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25maWcgb3B0aW9ucy4gSXMgYENPTkZJR19CUEZfSklUYCBhbGwgSSBuZWVkPyBZZXMsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHRoZSBrZXkgb25lcy4gU2luY2UgSSdtIHRhcmdldGluZyBhcm02NCBzcGVjaWZpY2FsbHksIEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IHRoZSBhcm02NCBjb25maWcsIGJ1dCBzcGVjaWZ5aW5nIGBCUEZfSklUYCB3b3VsZG4ndCBodXJ0LlxuXG5GaW5hbGx5LCBJIHNob3VsZCBqdXN0IHF1aWNrbHkgdmVyaWZ5IHdoYXQgY2FsbHMgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGluIHRoZSBhcm02NCBpbXBsZW1lbnRhdGlvbiBqdXN0IHRvIGJlIHN1cmUgSSd2ZSBnb3QgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6NDMuMDk2NTg3NDQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAwNjY1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDg2PXN0cnVjdCBhcm02NF9qaXRfZGF0YSB7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDkyLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIwOTM6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6NDMuMjY2NjYxOTQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDA4NjE1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBKSVQgY29tcGlsYXRpb24gYmVoYXZpb3Igd2hlbiBkZWFsaW5nIHdpdGggdGhvc2UgQUxVIGFuZCBNT1YgaW5zdHJ1Y3Rpb25zIHRoYXQgaW52b2x2ZSB1c2VyIGNhc3RzLCB3aGVyZSBgaW5zbl9pc19jYXN0X3VzZXIoaW5zbilgIGV2YWx1YXRlcyB0byB0cnVlLiBGdW5jdGlvbmFsbHksIGl0J3MgZ29vZCBjb2RlLiBEZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSdkIHdhbnQgdG8gZnV6eiwgSSdkIHNheSBpdCdzIFdvcnRoRnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIHNob3VsZCBiZSBvbiBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kLCBvZiBjb3Vyc2UsIHRoZSBgYnVpbGRfaW5zbmAgZnVuY3Rpb24g4oCTIHRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBlbnN1cmUgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIFRoZSBwYXRjaCBzYXlzIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgbmVlZGVkLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBDT05GSUdfQlBGX0pJVGAgYWxvbmUgd291bGQgc3VmZmljZS5cblxuSG9sZCBvbi4uLiBgYnVpbGRfaW5zbmAgaXMgYSBwcmV0dHkgZ2VuZXJpYyBuYW1lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGJlYXJzIHRoZSBzYW1lIG5hbWUgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6NDguMjY3NTI2MTgxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA1MDEzNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1aWxkX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYz0xNTY2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTE1ODgtICovXFxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYzoxNTg5OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYy0xNTkwLXtcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM9MjEwNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMjExMy1cXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jOjIxMTQ6XFx0XFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgpO1xcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMjExNS1cXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyMzU9c3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjUyLSAqL1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEyNTM6c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjU0LVxcdFxcdCAgICAgIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTE5OTE9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMDktXFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRbaV0gPSBjdHgtXFx1MDAzZWlkeDtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMDEwOlxcdFxcdHJldCA9IGJ1aWxkX2luc24oZW52LCBpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMTEtXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9NjUzPXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtNzE0LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6NzE1OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTcxNi17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE0NzQ9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTQ4NS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE0ODY6XFx0XFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTQ4Ny1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM9MTQzPXN0YXRpYyBpbmxpbmUgdTMyIGJ1aWxkX2ppbW0odTMyIGFyZylcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pY3JvbWlwcy5jLTE1NS0gKi9cXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYzoxNTY6c3RhdGljIHZvaWQgYnVpbGRfaW5zbih1MzIgKipidWYsIGVudW0gb3Bjb2RlIG9wYywgLi4uKVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pY3JvbWlwcy5jLTE1Ny17XFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmM9MjIwPXN0YXRpYyBpbmxpbmUgdTMyIGJ1aWxkX2ppbW0odTMyIGFyZylcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pcHMuYy0yMzEtICovXFxuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jOjIzMjpzdGF0aWMgdm9pZCBidWlsZF9pbnNuKHUzMiAqKmJ1ZiwgZW51bSBvcGNvZGUgb3BjLCAuLi4pXFxuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jLTIzMy17XFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE0Mz1zdGF0aWMgaW5saW5lIHUzMiBidWlsZF9zZXQodTMyIGFyZylcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTQ5LVxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTUwOnN0YXRpYyB2b2lkIGJ1aWxkX2luc24odTMyICoqYnVmLCBlbnVtIG9wY29kZSBvcGMsIC4uLik7XFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNTEtXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE1Mz1JcF91MXUydTMob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTU0LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxNTU6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBhLCBiLCBjKTtcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNTYtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MTYwPUlwX3MzczFzMihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNjEte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE2MjpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGMsIGEpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE2My19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0xNjc9SXBfdTJ1MXUzKG9wKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE2OC17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTY5OlxcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYyk7XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTcwLX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE3ND1JcF91M3UydTEob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTc1LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxNzY6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBjLCBiLCBhKTtcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNzctfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MTgxPUlwX3UzdTF1MihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xODIte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE4MzpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGMsIGEpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE4NC19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0xODg9SXBfdTF1MnMzKG9wKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE4OS17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTkwOlxcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYSwgYiwgYyk7XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTkxLX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE5NT1JcF91MnMzdTEob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTk2LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxOTc6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBjLCBhLCBiKTtcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xOTgtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MjAyPUlwX3UydTFzMyhvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMDMte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjIwNDpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGMpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIwNS19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yMDk9SXBfdTJ1MW1zYnUzKG9wKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIxMC17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjExOlxcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYytkLTEsIGMpO1xcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIxMi19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yMTY9SXBfdTJ1MW1zYnUzKG9wKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIxNy17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjE4OlxcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYytkLTMzLCBjKTtcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMTktfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MjIzPUlwX3UydTFtc2J1MyhvcClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMjQte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjIyNTpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGMrZC0zMywgYy0zMik7XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjI2LX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTIzMD1JcF91MnUxbXNidTMob3ApXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjMxLXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyMzI6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBkLTEsIGMpO1xcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIzMy19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yMzc9SXBfdTF1MihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMzgte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjIzOTpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI0MC19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yNDQ9SXBfdTF1MihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNDUte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjI0NjpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI0Ny19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yNTE9SXBfdTFzMihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNTIte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjI1MzpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI1NC19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yNTg9SXBfdTEob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjU5LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNjA6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBhKTtcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNjEtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MjY1PUlwXzAob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjY2LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNjc6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wKTtcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNjgtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9Mzk1PXZvaWQgdWFzbV9pX3ByZWYodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiLFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYy00MDItXFx0XFx0ICovXFxuYXJjaC9taXBzL21tL3Vhc20uYzo0MDM6XFx0XFx0YnVpbGRfaW5zbihidWYsIGluc25fcHJlZiwgYywgMjgsIGIpO1xcbmFyY2gvbWlwcy9tbS91YXNtLmMtNDA0LVxcdGVsc2VcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjQwNTpcXHRcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbl9wcmVmLCBjLCBhLCBiKTtcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTQwNi19XFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jPTg1MD1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jLTg3MC1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jOjg3MTpcXHRcXHRyZXQgPSBidWlsZF9pbnNuKGluc24sIGN0eCk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuYy04NzItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5oPTIyMj12b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBpbnQgZGVzdF9yZWcpO1xcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaC0yMzItICovXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaDoyMzM6aW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaC0yMzQtXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTQ0ND12b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBpbnQgZGVzdF9yZWcpXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQ2Mi0vKiBCdWlsZCBvbmUgZUJQRiBpbnN0cnVjdGlvbiAqL1xcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNDYzOmludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTE0NjQte1xcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jPTYxOT12b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBpbnQgZGVzdF9yZWcpXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtNjM0LS8qIEJ1aWxkIG9uZSBlQlBGIGluc3RydWN0aW9uICovXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jOjYzNTppbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy02MzYte1xcbi0tXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzY0LmM9ODUwPXN0YXRpYyB2b2lkIGVtaXRfdGFpbF9jYWxsKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYy04OTQtXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzY0LmM6ODk1OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzY0LmMtODk2LXtcXG4tLVxcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jPTE0Mzg9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYy0xNDQ2LVxcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jOjE0NDc6XFx0XFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgpO1xcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jLTE0NDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjQ5LjY3MjU0NjU2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjIxNTI4OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBJZGVudGlmeWluZyB0aGUgS2V5IFN5bWJvbCBmb3IgSklUIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIEpJVCBjb21waWxhdGlvbi4gYGJ1aWxkX2luc25gIGlzIGEgcHJldHR5IGdlbmVyaWMgbmFtZSwgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcywgc28gdGhhdCdzIG5vdCB0aGUgYmVzdCBjaG9pY2UgZm9yIHBpbnBvaW50aW5nIHRoZSB0YXJnZXQgZnVuY3Rpb24uIExldCdzIGZvY3VzIGluIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBhcyBhIHN0YXJ0aW5nIHBvaW50LCB0aGlua2luZyB0aGF0J3MgdGhlIG1haW4gZnVuY3Rpb24gZm9yIGtpY2tpbmcgb2ZmIEpJVCBjb21waWxhdGlvbi4gSG1tLCBidXQgd2FpdCBhIG1pbnV0ZSwgdGhhdCBhbHNvIGFwcGVhcnMgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMuIElzIHRoZXJlIGEgbW9yZSBBUk02NCBzcGVjaWZpYyBmdW5jdGlvbj8gYGJ1aWxkX2JvZHlgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyB0aGF0IHdvbid0IHdvcmsuXG5cbkFscmlnaHQsIGxldCdzIGdvIHdpdGggYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBpdHMgcmVsYXRlZCBgYnBmX2ppdF9idWlsZF9ib2R5YCAob2ggd2FpdCwgQVJNNjQgdXNlcyBgYnVpbGRfYm9keWAgYnV0IGxldCdzIHNlZS4uLikgYnV0IHRoZW4sICpvaCosIHN5emthbGxlcidzIGdvaW5nIHRvIG1ha2UgYSBtYXBwaW5nIHRvIHRoZSBBUk02NC1zcGVjaWZpYyBmdW5jdGlvbi4gSWYgaXQncyBmdXp6aW5nIGFybTY0LCBpdCdzIGdvaW5nIHRvIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgcmlnaHQgb25lLiBPa2F5LCBsZXQncyBrZWVwIGl0IHNpbXBsZSBhbmQganVzdCB1c2UgYGJwZl9pbnRfaml0X2NvbXBpbGVgLlxuXG5BY3R1YWxseSwgdGhlIHBhdGNoIGV4cGxpY2l0bHkgdGFyZ2V0cyBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHJlYWxseSB0aGUgKm9ubHkqIHBlcnRpbmVudCBmdW5jdGlvbi4gTGV0IG1lIGluY2x1ZGUgYGJwZl9qaXRfY29tcGlsZWAgb3Igd2hhdGV2ZXIgZWxzZSBpcyBpbiB0aGF0IGZpbGUsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIGZpcnN0IG9uZTogeWVwLCB0aGUgcmlnaHQgdGhpbmcgdG8gdXNlIGhlcmUgaXMgYGJwZl9pbnRfaml0X2NvbXBpbGVgLlxuXG5BbmQgbGV0IG1lIG1ha2Ugc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIG5lY2Vzc2FyeSwgSSdsbCBuZWVkIHRoYXQgb25lLiBBbmQgSSBrbm93IEkgbmVlZCBgQ09ORklHX0JQRl9KSVRgIGZvciB0aGUgSklUIGl0c2VsZi4gYENPTkZJR19BUk02NGAgaXMgaW1wbGljaXQsIHNvIEkgY2FuIGlnbm9yZSB0aGF0LiBJJ20gZ29vZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2MSwiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6NTcuMjk0MDc4NDM1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTgxMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgQVJNNjQgdG8gb3B0aW1pemUgdGhlIGdlbmVyYXRpb24gb2YgdXNlciBhZGRyZXNzZXMgZm9yIEJQRiBhcmVuYS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBKSVQgY29tcGlsZXIgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIEFSTTY0IHRvIG9wdGltaXplIHRoZSBnZW5lcmF0aW9uIG9mIHVzZXIgYWRkcmVzc2VzIGZvciBCUEYgYXJlbmEuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgSklUIGNvbXBpbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfj48[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 06:02:52 +0000 UTC FinishedAt: 2026-07-22 06:31:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "0e334607-e410-42e9-8546-068808b434ba" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBBUk02NCB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB1c2VyIGFkZHJlc3NlcyBmb3IgQlBGIGFyZW5hLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEpJVCBjb21waWxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBjOWZiNDMyZGVmMWRjMGJlODE5ZGY4MTY2OTgzZDM5ZmU3NTdmYzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAwNjozMDo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBiMDA3NWVjZTRhNmU3Zi4uMGY2MTY2MmI5MDBiZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjg0LDEyICYjNDM7MTI4NCwyNSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XG4gXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcbiBcdFx0aWYgKGluc25faXNfY2FzdF91c2VyKGluc24pKSB7XG4tXHRcdFx0ZW1pdChBNjRfTU9WKDAsIHRtcCwgc3JjKSwgY3R4KTsgLy8gMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHNcbi1cdFx0XHRlbWl0X2E2NF9tb3ZfaSgwLCBkc3QsIGN0eC1cdTAwM2V1c2VyX3ZtX3N0YXJ0IFx1MDAzZVx1MDAzZSAzMiwgY3R4KTtcbi1cdFx0XHRlbWl0KEE2NF9MU0woMSwgZHN0LCBkc3QsIDMyKSwgY3R4KTtcbi1cdFx0XHRlbWl0KEE2NF9DQlooMSwgdG1wLCAyKSwgY3R4KTtcbi1cdFx0XHRlbWl0KEE2NF9PUlIoMSwgdG1wLCBkc3QsIHRtcCksIGN0eCk7XG4tXHRcdFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgdG1wKSwgY3R4KTtcbiYjNDM7XHRcdFx0dTMyIHVwcGVyID0gY3R4LVx1MDAzZXVzZXJfdm1fc3RhcnQgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdFx0XHR1MTYgdXBwZXJfbG93ID0gdXBwZXIgXHUwMDI2IDB4ZmZmZjtcbiYjNDM7XHRcdFx0dTE2IHVwcGVyX2hpZ2ggPSB1cHBlciBcdTAwM2VcdTAwM2UgMTY7XG4mIzQzO1x0XHRcdGludCBucl9tb3ZrID0gISF1cHBlcl9sb3cgJiM0MzsgISF1cHBlcl9oaWdoO1xuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQnVpbGQgdGhlIHVzZXIgYWRkcmVzczogdGhlIGxvdyAzMiBiaXRzIGFyZSB0aGUgYXJlbmFcbiYjNDM7XHRcdFx0ICogb2Zmc2V0LCB0aGUgdXBwZXIgMzIgYml0cyBjb21lIGZyb20gdXNlcl92bV9zdGFydC4gQVxuJiM0MztcdFx0XHQgKiB6ZXJvIG9mZnNldCBtdXN0IHN0YXkgTlVMTCwgc28gYnJhbmNoIG92ZXIgdGhlIE1PVktzXG4mIzQzO1x0XHRcdCAqIHdoZW4gaXQgaXMgemVyby5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGVtaXQoQTY0X01PVigwLCBkc3QsIHNyYyksIGN0eCk7IC8qIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzICovXG4mIzQzO1x0XHRcdGlmIChucl9tb3ZrKSB7XG4mIzQzO1x0XHRcdFx0ZW1pdChBNjRfQ0JaKDAsIGRzdCwgbnJfbW92ayAmIzQzOyAxKSwgY3R4KTtcbiYjNDM7XHRcdFx0XHRpZiAodXBwZXJfbG93KVxuJiM0MztcdFx0XHRcdFx0ZW1pdChBNjRfTU9WSygxLCBkc3QsIHVwcGVyX2xvdywgMzIpLCBjdHgpO1xuJiM0MztcdFx0XHRcdGlmICh1cHBlcl9oaWdoKVxuJiM0MztcdFx0XHRcdFx0ZW1pdChBNjRfTU9WSygxLCBkc3QsIHVwcGVyX2hpZ2gsIDQ4KSwgY3R4KTtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4gXHRcdFx0aWYgKGRzdCAhPSBzcmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBBUk02NCB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB1c2VyIGFkZHJlc3NlcyBmb3IgQlBGIGFyZW5hLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEpJVCBjb21waWxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGM5ZmI0MzJkZWYxZGMwYmU4MTlkZjgxNjY5ODNkMzlmZTc1N2ZjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDA2OjMwOjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBiMDA3NWVjZTRhNmU3Zi4uMGY2MTY2MmI5MDBiZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMjg0LDEyICYjNDM7MTI4NCwyNSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJY2FzZSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YOgogCWNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOgogCQlpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHsKLQkJCWVtaXQoQTY0X01PVigwLCB0bXAsIHNyYyksIGN0eCk7IC8vIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzCi0JCQllbWl0X2E2NF9tb3ZfaSgwLCBkc3QsIGN0eC0mZ3Q7dXNlcl92bV9zdGFydCAmZ3Q7Jmd0OyAzMiwgY3R4KTsKLQkJCWVtaXQoQTY0X0xTTCgxLCBkc3QsIGRzdCwgMzIpLCBjdHgpOwotCQkJZW1pdChBNjRfQ0JaKDEsIHRtcCwgMiksIGN0eCk7Ci0JCQllbWl0KEE2NF9PUlIoMSwgdG1wLCBkc3QsIHRtcCksIGN0eCk7Ci0JCQllbWl0KEE2NF9NT1YoMSwgZHN0LCB0bXApLCBjdHgpOwomIzQzOwkJCXUzMiB1cHBlciA9IGN0eC0mZ3Q7dXNlcl92bV9zdGFydCAmZ3Q7Jmd0OyAzMjsKJiM0MzsJCQl1MTYgdXBwZXJfbG93ID0gdXBwZXIgJmFtcDsgMHhmZmZmOwomIzQzOwkJCXUxNiB1cHBlcl9oaWdoID0gdXBwZXIgJmd0OyZndDsgMTY7CiYjNDM7CQkJaW50IG5yX21vdmsgPSAhIXVwcGVyX2xvdyAmIzQzOyAhIXVwcGVyX2hpZ2g7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCdWlsZCB0aGUgdXNlciBhZGRyZXNzOiB0aGUgbG93IDMyIGJpdHMgYXJlIHRoZSBhcmVuYQomIzQzOwkJCSAqIG9mZnNldCwgdGhlIHVwcGVyIDMyIGJpdHMgY29tZSBmcm9tIHVzZXJfdm1fc3RhcnQuIEEKJiM0MzsJCQkgKiB6ZXJvIG9mZnNldCBtdXN0IHN0YXkgTlVMTCwgc28gYnJhbmNoIG92ZXIgdGhlIE1PVktzCiYjNDM7CQkJICogd2hlbiBpdCBpcyB6ZXJvLgomIzQzOwkJCSAqLwomIzQzOwkJCWVtaXQoQTY0X01PVigwLCBkc3QsIHNyYyksIGN0eCk7IC8qIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzICovCiYjNDM7CQkJaWYgKG5yX21vdmspIHsKJiM0MzsJCQkJZW1pdChBNjRfQ0JaKDAsIGRzdCwgbnJfbW92ayAmIzQzOyAxKSwgY3R4KTsKJiM0MzsJCQkJaWYgKHVwcGVyX2xvdykKJiM0MzsJCQkJCWVtaXQoQTY0X01PVksoMSwgZHN0LCB1cHBlcl9sb3csIDMyKSwgY3R4KTsKJiM0MzsJCQkJaWYgKHVwcGVyX2hpZ2gpCiYjNDM7CQkJCQllbWl0KEE2NF9NT1ZLKDEsIGRzdCwgdXBwZXJfaGlnaCwgNDgpLCBjdHgpOwomIzQzOwkJCX0KIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7CiAJCQlpZiAoZHN0ICE9IHNyYykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSklUIENvbXBpbGVyIFBhdGNoIGZvciBBUk02NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiB0byB0aGUgd2F5IHRoZSB1c2VyIGFkZHJlc3MgaXMgaGFuZGxlZCBpbiBgYnVpbGRfaW5zbigpYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgQlBGIGFyZW5hLiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gd2FzIGEgYml0IGNsdW5reSwgdXNpbmcgYSBzZXJpZXMgb2YgbW92ZXMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyB0byBjb25zdHJ1Y3QgdGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlIHVzZXIgdmlydHVhbCBhZGRyZXNzLiBUaGV5JiMzOTtyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhpcyBieSB1c2luZyBgTU9WS2AgaW5zdHJ1Y3Rpb25zLCB3aGljaCBhcmUgbW9yZSBlZmZpY2llbnQgZm9yIGltbWVkaWF0ZSB2YWx1ZSBsb2FkaW5nIG9uIEFSTTY0LiAKCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBicmVha2luZyBkb3duIHRoZSB1cHBlciAzMiBiaXRzIG9mIGBjdHgtJmd0O3VzZXJfdm1fc3RhcnRgIGludG8gdHdvIDE2LWJpdCBjaHVua3MgYW5kIHVzaW5nIGBNT1ZLYCB0byBsb2FkIHRoZW0uIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIHRlcm1zIG9mIGluc3RydWN0aW9uIGNvdW50LCBhc3N1bWluZyB0aGUgYE1PVktgIGluc3RydWN0aW9ucyBhcmUgdHJ1bHkgbW9yZSBlZmZpY2llbnQgaW4gdGhpcyBzY2VuYXJpbywgYXMgSSB3b3VsZCBleHBlY3QgdGhlbSB0byBiZS4gSSB3b3VsZCBuZWVkIHRvIGJlbmNobWFyayBpdCwgYnV0IG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyBhIGdvb2QgY2hhbmdlLgoKTm93LCBteSBtaW5kIGlzIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBmdXp6IHRoaXMuIFdlIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBhcmVhLiBJdCYjMzk7cyB0aGUgdXNlciBhZGRyZXNzIGNvbnN0cnVjdGlvbiB0aGF0IGlzIG5ldyBhbmQgZGlmZmVyZW50LCBzbyB3ZSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGl0LiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiB0aGlzIGZpbGUuIEFoLCB5ZXMsIGl0IHNlZW1zIGBDT05GSUdfQlBGX0pJVGAgZW5hYmxlcyB0aGlzLiBOb3cgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgaW5jbHVkZWQuLi4gTGV0IG1lIGNoZWNrIHRoZSBgYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVgIG5vdyB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9jb21wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvTWFrZWZpbGUtNC0jXG5hcmNoL2FybTY0L25ldC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQW5hbHl6aW5nIEJQRiBKSVQgYW5kIFVzZXIgU3BhY2UgQ2FzdCBJbnN0cnVjdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvZGUgcmVsYXRlZCB0byBgQ09ORklHX0JQRl9KSVRgLiBUaGF0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXMgYGluc25faXNfY2FzdF91c2VyKGluc24pYC4gQW5kLCBJIGJlbGlldmUgdGhpcyBsaWtlbHkgdGllcyBpbnRvIHRoZSBCUEYgYXJlbmEuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlcmUgYSBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhlIEJQRiBhcmVuYSwgb3IgZG9lcyB0aGUgcHJlc2VuY2Ugb2YgYEJQRl9KSVRgIGltcGxpY2l0bHkgY292ZXIgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBpbiB0aGlzIGNvbnRleHQ/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLiBEb2VzIHRoZSBKSVQgZW5hYmxlbWVudCBhdXRvbWF0aWNhbGx5IGhhbmRsZSB3aGF0ZXZlciBjb25zaWRlcmF0aW9ucyBgaW5zbl9pc19jYXN0X3VzZXJgIG1pZ2h0IGhhdmUgY29uY2VybmluZyBtZW1vcnkgYWNjZXNzIGFuZCBzZWN1cml0eSB3aXRoaW4gdGhlIGFyZW5hPyBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luc25faXNfY2FzdF91c2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNTM9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjg1LVx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjg2Olx0XHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyODctXHRcdFx0dTMyIHVwcGVyID0gY3R4LVx1MDAzZXVzZXJfdm1fc3RhcnQgXHUwMDNlXHUwMDNlIDMyO1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9NzE1PXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTczNi1cdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzo3Mzc6XHRcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKSkge1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy03MzgtXHRcdFx0bW92ZV9yZWcoY3R4LCB0MSwgc3JjKTtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTY3PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI3MC1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjcxOlx0XHRcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihcdTAwMjZpbnNuW2ldKSkge1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNzItXHRcdFx0XHRFTUlUKFBQQ19SQVdfUkxESUNMX0RPVCh0bXAxX3JlZywgc3JjX3JlZywgMCwgMzIpKTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjk9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzODY6XHRcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKSkge1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVx0XHRcdGVtaXRfbXYoUlZfUkVHX1QxLCBycywgY3R4KTtcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTg3Nj1zdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtOTE5LVx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjkyMDpcdFx0aWYgKGluc25faXNfY2FzdF91c2VyKGluc24pKSB7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTkyMS1cdFx0XHRpbnQgcGF0Y2hfYnJjO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjgxPXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTg1My1cdFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTg1NDpcdFx0XHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xODU1LVx0XHRcdFx0aWYgKGRzdF9yZWcgIT0gc3JjX3JlZylcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1Mj1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc196ZXh0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTI1OS0gKi9cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjYwOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTI2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIGBpbnNuX2lzX2Nhc3RfdXNlcmAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBgaW5zbl9pc19jYXN0X3VzZXJgIHJlcHJlc2VudHMuIEl0JiMzOTtzIGNydWNpYWwsIG9idmlvdXNseSwgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbmFsIGNvbmNlcHQgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaXRzIGRlZmluaXRpb24gYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlIG9yIGNvbXBpbGVyIGNvbnRleHQgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBpbi4gSXMgaXQgYWJvdXQgdXNlci1kZWZpbmVkIGNhc3RzPyBDb21waWxlci1nZW5lcmF0ZWQgY2FzdHM/IFNwZWNpZmljIHR5cGVzIG9mIGNhc3RzLCBsaWtlIHdpZGVuaW5nIG9yIG5hcnJvd2luZz8gT3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgbnVhbmNlZD8gS25vd2luZyB0aGUgcHJlY2lzZSBzZW1hbnRpYyBkZWZpbml0aW9uIHdpbGwgc3RlZXIgdGhlIHJlc3Qgb2YgbXkgYW5hbHlzaXMuIEkmIzM5O20gZXNzZW50aWFsbHkgbG9va2luZyB0byBpbW1lZGlhdGVseSByZWNvbnN0cnVjdCBhIG1lbnRhbCBtb2RlbCBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLCBpbnB1dHMsIGFuZCBpbnRlbmRlZCBiZWhhdmlvdXIgYmVmb3JlIG1vdmluZyBpbnRvIG1vcmUgYWR2YW5jZWQgcmVhc29uaW5nIGFib3V0IGl0LiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgY2hlY2sgc2hvdWxkIGpvZyBteSBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19jYXN0X3VzZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9MjUyPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX3pleHQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjU5LSAqL1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyNjA6c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjYxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCBpdDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBGaWx0ZXJpbmcgTWVjaGFuaXNtKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBvYmplY3RpdmUgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgbG93ZXItbGV2ZWwgc3RydWN0dXJlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJIHJlbWVtYmVyIGl0IGJlaW5nIGNydWNpYWwgZm9yIHRoZSBjb3JlIHBhY2tldCBmaWx0ZXJpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDI2MC4gVGhhdCB1c3VhbGx5IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB0aGUgQlBGIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIHJlZnJlc2ggbXlzZWxmIG9uIGhvdyB0aGUga2VybmVsIGFjdHVhbGx5ICpkZWZpbmVzKiBmaWx0ZXJzLiBIb3BlZnVsbHksIHRoaXMgcmVmcmVzaCB3aWxsIGdpdmUgbWUgd2hhdCBJIG5lZWQgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBzZXQgb2YgcXVlc3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0XHQuaW1tICAgPSAxIH0pXG4gMjUxOlx0XG4gMjUyOlx0c3RhdGljIGlubGluZSBib29sIGluc25faXNfemV4dChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gMjUzOlx0e1xuIDI1NDpcdFx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfWCkgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tID09IDE7XG4gMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdC8qIGFkZHJfc3BhY2VfY2FzdCBmcm9tIGFzKDApIHRvIGFzKDEpIGlzIGZvciBjb252ZXJ0aW5nIGJwZiBhcmVuYSBwb2ludGVyc1xuIDI1ODpcdCAqIHRvIHBvaW50ZXJzIGluIHVzZXIgdm1hLlxuIDI1OTpcdCAqL1xuIDI2MDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gMjYxOlx0e1xuIDI2MjpcdFx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjZcbiAyNjM6XHRcdFx0XHQgICAgICBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9TUEFDRV9DQVNUIFx1MDAyNlx1MDAyNlxuIDI2NDpcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlaW1tID09IDFVIFx1MDAzY1x1MDAzYyAxNjtcbiAyNjU6XHR9XG4gMjY2Olx0XG4gMjY3Olx0LyogQlBGX0xEX0lNTTY0IG1hY3JvIGVuY29kZXMgc2luZ2xlICYjMzk7bG9hZCA2NC1iaXQgaW1tZWRpYXRlJiMzOTsgaW5zbiAqL1xuIDI2ODpcdCNkZWZpbmUgQlBGX0xEX0lNTTY0KERTVCwgSU1NKVx0XHRcdFx0XHRcXFxuIDI2OTpcdFx0QlBGX0xEX0lNTTY0X1JBVyhEU1QsIDAsIElNTSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgYSBCUEYgQXJlbmEgSXNzdWUqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLiBJdCYjMzk7cyBsb29raW5nIGxpa2UgdGhpcyBpc3N1ZSBpcyBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBCUEYgYXJlbmEsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRoZSBwb3RlbnRpYWwgZm9yIHJlc291cmNlIGNvbnRlbnRpb24sIGFsbG9jYXRpb24gcHJvYmxlbXMsIG9yIHBlcmhhcHMgZXZlbiBhIG1lbW9yeSBsZWFrLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWcgc2V0dGluZyB0aGF0IGRpcmVjdGx5IGNvbnRyb2xzIHRoZSBCUEYgYXJlbmEmIzM5O3MgYmVoYXZpb3I/IFRoZXJlICpoYXMqIHRvIGJlLCBhbmQgdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIGdldCB0aGUgY29uZmlnIGFuZCBxdWlja2x5IHJ1bGUgdGhhdCBvdXQsIG9yIG1vcmUgaG9wZWZ1bGx5LCBmaW5kIHRoZSBzbW9raW5nIGd1bi4gSXQgY291bGQgYmUgbGltaXRzLCBzaXppbmcsIG9yIHBlcmhhcHMgZXZlbiBzb21ldGhpbmcgcmVsYXRlZCB0byBpc29sYXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgQlBGIHByb2dyYW1zLCBJJiMzOTttIGtlZXBpbmcgYWxsIHBvc3NpYmlsaXRpZXMgaW4gdGhlIGJhY2sgb2YgbXkgaGVhZC4gTmVlZCB0byBmaW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAyOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgQXJlbmEqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIGNvbnRleHQsIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24gb3IgbWFuYWdlbWVudCBpc3N1ZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgYXJlbmEgYWxsb2NhdG9yLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHBsYWNlIEkgc3RhcnQgd2l0aCB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcywgZXNwZWNpYWxseSB3aGVuIGxvb2tpbmcgYXQgQlBGIGNvZGUuIEnigJltIHplcm9pbmcgaW4gb24gYGtlcm5lbC9icGYvYXJlbmEuY2AsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgQlBGIGluZnJhc3RydWN0dXJlLiBJdCYjMzk7cyB0aGUgbW9zdCBwbGF1c2libGUgbG9jYXRpb24gZm9yIHRoZSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgaXNzdWUgd2UgYXJlIHNlZWluZywgYW5kIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkZWJ1Z2dpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGZ1cnRoZXIgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIG9yIG5vdCBkb2luZy4gVGhhdCYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBDb21waWxhdGlvbioqCgpPa2F5LCBzbyB0aGUgQlBGIGFyZW5hIGlzIGdldHRpbmcgY29tcGlsZWQsIGJ1dCBvbmx5IHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuIEl0IG5lZWRzIGJvdGggYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCB0byBiZSBzZXQgdG8gJiMzOTt5JiMzOTssIGFuZCBhbHNvIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBzZXRzIHRoZSBzdGFnZSBmb3IgY29udGV4dC4KClRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgIGZpbGUuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gdGhlIGBidWlsZF9pbnNuYCBmdW5jdGlvbi4gTm93LCB0aGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIHRoaXMuIElzIGl0IGBidWlsZF9pbnNuYCBpdHNlbGYsIG9yIHNob3VsZCBJIGJlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGhpZ2hlciBsZXZlbCBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYD8gSG1tLCB3YWl0IGEgbWludXRlLCBgYnVpbGRfaW5zbmAgaXMgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGxpa2VseSBsaW1pdHMgaXRzIGV4dGVybmFsIHZpc2liaWxpdHkuIE9rYXksIHRoZW4sIGxldCYjMzk7cyB0cmFjZSBpdHMgY2FsbHMgdG8gc2VlIHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjM1PXN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItICovXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjUzOnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjU0LVx0XHQgICAgICBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGV4dHJhX3Bhc3MpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTk5MT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMDktXHRcdGN0eC1cdTAwM2VvZmZzZXRbaV0gPSBjdHgtXHUwMDNlaWR4O1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjAxMDpcdFx0cmV0ID0gYnVpbGRfaW5zbihlbnYsIGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDExLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIHRoZSBSaWdodCBGb2N1cyBmb3IgSklUIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9sIHRvIHVzZSBmb3IgdGhpcyBKSVQgY29tcGlsYXRpb24gYW5hbHlzaXMuIExldCYjMzk7cyBzZWUsIGBidWlsZF9pbnNuYCBpcyBjYWxsZWQgYnkgYGJ1aWxkX2JvZHlgLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgYnkgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBzaG91bGQgSSBmb2N1cyBvbiBgYnVpbGRfaW5zbmA/IEl0JiMzOTtzIHdoZXJlIHRoZSBpbmRpdmlkdWFsIGluc3RydWN0aW9ucyBhcmUgYWN0dWFsbHkgYnVpbHQuIEJ1dCB3YWl0LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgcmVhbGx5IHRoZSBlbnRyeSBwb2ludCwgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgd2hvbGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBlbnRyeS4KCkhtbSwgYGJ1aWxkX2luc25gIGlzIHN0YXRpYy4gVGhhdCAqY291bGQqIGJlIGEgcHJvYmxlbSBmb3IgdG9vbHMgbGlrZSBzeXprYWxsZXIsIGFsdGhvdWdoIGl0IGNhbiBzb21ldGltZXMgd29yayB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBlbmQgdXAgaW4gYGthbGxzeW1zYC4gQnV0IHJlYWxseSwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHRoZSBtb3JlIGxvZ2ljYWwgY2hvaWNlIGZvciB0aGUgaGlnaC1sZXZlbCB2aWV3LiBUaGlua2luZyBhYm91dCBpdCwgYGJ1aWxkX2luc25gIGlzIGp1c3Qgc3VwZXIgc3BlY2lmaWMgdG8gaW5kaXZpZHVhbCBpbnN0cnVjdGlvbnMuCgpSaWdodCwgc28gSSYjMzk7bGwgZ28gd2l0aCBib3RoIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJ1aWxkX2luc25gIGZvciBub3cuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIGJhbGFuY2Ugb2Ygb3ZlcmFsbCBjb250ZXh0IGFuZCB0aGUgbG93ZXItbGV2ZWwgZGV0YWlscy4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25maWcgb3B0aW9ucy4gSXMgYENPTkZJR19CUEZfSklUYCBhbGwgSSBuZWVkPyBZZXMsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHRoZSBrZXkgb25lcy4gU2luY2UgSSYjMzk7bSB0YXJnZXRpbmcgYXJtNjQgc3BlY2lmaWNhbGx5LCBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgdGhlIGFybTY0IGNvbmZpZywgYnV0IHNwZWNpZnlpbmcgYEJQRl9KSVRgIHdvdWxkbiYjMzk7dCBodXJ0LgoKRmluYWxseSwgSSBzaG91bGQganVzdCBxdWlja2x5IHZlcmlmeSB3aGF0IGNhbGxzIGBicGZfaW50X2ppdF9jb21waWxlYCBpbiB0aGUgYXJtNjQgaW1wbGVtZW50YXRpb24ganVzdCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwODY9c3RydWN0IGFybTY0X2ppdF9kYXRhIHtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDkyLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjA5MzpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjA5NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBgYnBmX2ludF9qaXRfY29tcGlsZWAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBKSVQgY29tcGlsYXRpb24gYmVoYXZpb3Igd2hlbiBkZWFsaW5nIHdpdGggdGhvc2UgQUxVIGFuZCBNT1YgaW5zdHJ1Y3Rpb25zIHRoYXQgaW52b2x2ZSB1c2VyIGNhc3RzLCB3aGVyZSBgaW5zbl9pc19jYXN0X3VzZXIoaW5zbilgIGV2YWx1YXRlcyB0byB0cnVlLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGdvb2QgY29kZS4gRGVmaW5pdGVseSBzb21ldGhpbmcgd2UmIzM5O2Qgd2FudCB0byBmdXp6LCBJJiMzOTtkIHNheSBpdCYjMzk7cyBXb3J0aEZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgc2hvdWxkIGJlIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQsIG9mIGNvdXJzZSwgdGhlIGBidWlsZF9pbnNuYCBmdW5jdGlvbiDigJMgdGhvc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gVGhlIHBhdGNoIHNheXMgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSBuZWVkZWQsIGJ1dCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaWYgYENPTkZJR19CUEZfSklUYCBhbG9uZSB3b3VsZCBzdWZmaWNlLgoKSG9sZCBvbi4uLiBgYnVpbGRfaW5zbmAgaXMgYSBwcmV0dHkgZ2VuZXJpYyBuYW1lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFub3RoZXIgZnVuY3Rpb24gdGhhdCBiZWFycyB0aGUgc2FtZSBuYW1lIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidWlsZF9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYz0xNTY2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4tLVxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYy0xNTg4LSAqL1xuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYzoxNTg5OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTE1OTAte1xuLS1cbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM9MjEwNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcbi0tXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTIxMTMtXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jOjIxMTQ6XHRcdHJldCA9IGJ1aWxkX2luc24oaW5zbiwgY3R4KTtcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMjExNS1cbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjM1PXN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItICovXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjUzOnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjU0LVx0XHQgICAgICBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGV4dHJhX3Bhc3MpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTk5MT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMDktXHRcdGN0eC1cdTAwM2VvZmZzZXRbaV0gPSBjdHgtXHUwMDNlaWR4O1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjAxMDpcdFx0cmV0ID0gYnVpbGRfaW5zbihlbnYsIGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDExLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz02NTM9c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtNzE0LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzo3MTU6c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy03MTYte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTQ3ND1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTQ4NS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTQ4NjpcdFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNDg3LVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tLVxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM9MTQzPXN0YXRpYyBpbmxpbmUgdTMyIGJ1aWxkX2ppbW0odTMyIGFyZylcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYy0xNTUtICovXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYzoxNTY6c3RhdGljIHZvaWQgYnVpbGRfaW5zbih1MzIgKipidWYsIGVudW0gb3Bjb2RlIG9wYywgLi4uKVxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmMtMTU3LXtcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmM9MjIwPXN0YXRpYyBpbmxpbmUgdTMyIGJ1aWxkX2ppbW0odTMyIGFyZylcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmMtMjMxLSAqL1xuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jOjIzMjpzdGF0aWMgdm9pZCBidWlsZF9pbnNuKHUzMiAqKmJ1ZiwgZW51bSBvcGNvZGUgb3BjLCAuLi4pXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmMtMjMzLXtcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE0Mz1zdGF0aWMgaW5saW5lIHUzMiBidWlsZF9zZXQodTMyIGFyZylcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE0OS1cbmFyY2gvbWlwcy9tbS91YXNtLmM6MTUwOnN0YXRpYyB2b2lkIGJ1aWxkX2luc24odTMyICoqYnVmLCBlbnVtIG9wY29kZSBvcGMsIC4uLik7XG5hcmNoL21pcHMvbW0vdWFzbS5jLTE1MS1cbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE1Mz1JcF91MXUydTMob3ApXHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTU0LXtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE1NTpcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYSwgYiwgYyk7XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE1Ni19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9MTYwPUlwX3MzczFzMihvcClcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNjEte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTYyOlx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBjLCBhKTtcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTYzLX1cdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC9taXBzL21tL3Vhc20uYz0xNjc9SXBfdTJ1MXUzKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE2OC17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxNjk6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGMpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNzAtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE3ND1JcF91M3UydTEob3ApXHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTc1LXtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE3NjpcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYywgYiwgYSk7XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE3Ny19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9MTgxPUlwX3UzdTF1MihvcClcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xODIte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTgzOlx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBjLCBhKTtcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTg0LX1cdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC9taXBzL21tL3Vhc20uYz0xODg9SXBfdTF1MnMzKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE4OS17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxOTA6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIsIGMpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xOTEtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE5NT1JcF91MnMzdTEob3ApXHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTk2LXtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE5NzpcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYywgYSwgYik7XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE5OC19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9MjAyPUlwX3UydTFzMyhvcClcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMDMte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjA0Olx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjKTtcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjA1LX1cdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC9taXBzL21tL3Vhc20uYz0yMDk9SXBfdTJ1MW1zYnUzKG9wKVx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMTAte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjExOlx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjJiM0MztkLTEsIGMpO1x0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjEyLX1cdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC9taXBzL21tL3Vhc20uYz0yMTY9SXBfdTJ1MW1zYnUzKG9wKVx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMTcte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjE4Olx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjJiM0MztkLTMzLCBjKTtcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIxOS19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9MjIzPUlwX3UydTFtc2J1MyhvcClcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjI0LXtcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjIyNTpcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYyYjNDM7ZC0zMywgYy0zMik7XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMjYtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTIzMD1JcF91MnUxbXNidTMob3ApXHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIzMS17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyMzI6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGQtMSwgYyk7XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMzMtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTIzNz1JcF91MXUyKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIzOC17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyMzk6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNDAtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTI0ND1JcF91MXUyKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI0NS17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNDY6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNDctfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTI1MT1JcF91MXMyKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI1Mi17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNTM6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIpO1x0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNTQtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTI1OD1JcF91MShvcClcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNTkte1x0XHRcdFx0XHRcdFx0XFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjYwOlx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBhKTtcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNjEtfVx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS5jPTI2NT1JcF8wKG9wKVx0XHRcdFx0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI2Ni17XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNjc6XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3ApO1x0XHRcdFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI2OC19XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmM9Mzk1PXZvaWQgdWFzbV9pX3ByZWYodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiLFxuLS1cbmFyY2gvbWlwcy9tbS91YXNtLmMtNDAyLVx0XHQgKi9cbmFyY2gvbWlwcy9tbS91YXNtLmM6NDAzOlx0XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbl9wcmVmLCBjLCAyOCwgYik7XG5hcmNoL21pcHMvbW0vdWFzbS5jLTQwNC1cdGVsc2VcbmFyY2gvbWlwcy9tbS91YXNtLmM6NDA1Olx0XHRidWlsZF9pbnNuKGJ1ZiwgaW5zbl9wcmVmLCBjLCBhLCBiKTtcbmFyY2gvbWlwcy9tbS91YXNtLmMtNDA2LX1cbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jPTg1MD1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuYy04NzAtXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jOjg3MTpcdFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgpO1xuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuYy04NzItXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaD0yMjI9dm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgaW50IGRlc3RfcmVnKTtcbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5oLTIzMi0gKi9cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wLmg6MjMzOmludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgpO1xuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaC0yMzQtXG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jPTE0NDQ9dm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgaW50IGRlc3RfcmVnKVxuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNDYyLS8qIEJ1aWxkIG9uZSBlQlBGIGluc3RydWN0aW9uICovXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTQ2MzppbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTE0NjQte1xuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYz02MTk9dm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgaW50IGRlc3RfcmVnKVxuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy02MzQtLyogQnVpbGQgb25lIGVCUEYgaW5zdHJ1Y3Rpb24gKi9cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYzo2MzU6aW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy02MzYte1xuLS1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jPTg1MD1zdGF0aWMgdm9pZCBlbWl0X3RhaWxfY2FsbChzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jLTg5NC1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jOjg5NTpzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzY0LmMtODk2LXtcbi0tXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYz0xNDM4PXN0YXRpYyBpbnQgYnVpbGRfYm9keShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jLTE0NDYtXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYzoxNDQ3Olx0XHRyZXQgPSBidWlsZF9pbnNuKGluc24sIGN0eCk7XG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYy0xNDQ4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ2MQoJCQkJCQkJb3V0cHV0OiAxMDMKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIHRoZSBLZXkgU3ltYm9sIGZvciBKSVQgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBKSVQgY29tcGlsYXRpb24uIGBidWlsZF9pbnNuYCBpcyBhIHByZXR0eSBnZW5lcmljIG5hbWUsIHVzZWQgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMsIHNvIHRoYXQmIzM5O3Mgbm90IHRoZSBiZXN0IGNob2ljZSBmb3IgcGlucG9pbnRpbmcgdGhlIHRhcmdldCBmdW5jdGlvbi4gTGV0JiMzOTtzIGZvY3VzIGluIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBhcyBhIHN0YXJ0aW5nIHBvaW50LCB0aGlua2luZyB0aGF0JiMzOTtzIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBraWNraW5nIG9mZiBKSVQgY29tcGlsYXRpb24uIEhtbSwgYnV0IHdhaXQgYSBtaW51dGUsIHRoYXQgYWxzbyBhcHBlYXJzIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLiBJcyB0aGVyZSBhIG1vcmUgQVJNNjQgc3BlY2lmaWMgZnVuY3Rpb24/IGBidWlsZF9ib2R5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gdGhhdCB3b24mIzM5O3Qgd29yay4KCkFscmlnaHQsIGxldCYjMzk7cyBnbyB3aXRoIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgaXRzIHJlbGF0ZWQgYGJwZl9qaXRfYnVpbGRfYm9keWAgKG9oIHdhaXQsIEFSTTY0IHVzZXMgYGJ1aWxkX2JvZHlgIGJ1dCBsZXQmIzM5O3Mgc2VlLi4uKSBidXQgdGhlbiwgKm9oKiwgc3l6a2FsbGVyJiMzOTtzIGdvaW5nIHRvIG1ha2UgYSBtYXBwaW5nIHRvIHRoZSBBUk02NC1zcGVjaWZpYyBmdW5jdGlvbi4gSWYgaXQmIzM5O3MgZnV6emluZyBhcm02NCwgaXQmIzM5O3MgZ29pbmcgdG8gYXV0b21hdGljYWxseSBwaWNrIHRoZSByaWdodCBvbmUuIE9rYXksIGxldCYjMzk7cyBrZWVwIGl0IHNpbXBsZSBhbmQganVzdCB1c2UgYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKQWN0dWFsbHksIHRoZSBwYXRjaCBleHBsaWNpdGx5IHRhcmdldHMgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCwgc28gSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyByZWFsbHkgdGhlICpvbmx5KiBwZXJ0aW5lbnQgZnVuY3Rpb24uIExldCBtZSBpbmNsdWRlIGBicGZfaml0X2NvbXBpbGVgIG9yIHdoYXRldmVyIGVsc2UgaXMgaW4gdGhhdCBmaWxlLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIGZpcnN0IG9uZTogeWVwLCB0aGUgcmlnaHQgdGhpbmcgdG8gdXNlIGhlcmUgaXMgYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKQW5kIGxldCBtZSBtYWtlIHN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBuZWNlc3NhcnksIEkmIzM5O2xsIG5lZWQgdGhhdCBvbmUuIEFuZCBJIGtub3cgSSBuZWVkIGBDT05GSUdfQlBGX0pJVGAgZm9yIHRoZSBKSVQgaXRzZWxmLiBgQ09ORklHX0FSTTY0YCBpcyBpbXBsaWNpdCwgc28gSSBjYW4gaWdub3JlIHRoYXQuIEkmIzM5O20gZ29vZC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBBUk02NCB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB1c2VyIGFkZHJlc3NlcyBmb3IgQlBGIGFyZW5hLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEpJVCBjb21waWxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIEFSTTY0IHRvIG9wdGltaXplIHRoZSBnZW5lcmF0aW9uIG9mIHVzZXIgYWRkcmVzc2VzIGZvciBCUEYgYXJlbmEuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgSklUIGNvbXBpbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6MDAuMDYyMTI0MjkyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0Njg1NTIxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIEFSTTY0IHRvIG9wdGltaXplIHRoZSBnZW5lcmF0aW9uIG9mIHVzZXIgYWRkcmVzc2VzIGZvciBCUEYgYXJlbmEuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgSklUIGNvbXBpbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMTowMC4wNjIxMzM1MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODU5MzI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBjOWZiNDMyZGVmMWRjMGJlODE5ZGY4MTY2OTgzZDM5ZmU3NTdmYzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMDY6MzA6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IGIwMDc1ZWNlNGE2ZTdmLi4wZjYxNjYyYjkwMGJkMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTEyODQsMTIgKzEyODQsMjUgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxcbiBcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XFxuIFxcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxcbiBcXHRcXHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcXG4tXFx0XFx0XFx0ZW1pdChBNjRfTU9WKDAsIHRtcCwgc3JjKSwgY3R4KTsgLy8gMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHNcXG4tXFx0XFx0XFx0ZW1pdF9hNjRfbW92X2koMCwgZHN0LCBjdHgtXFx1MDAzZXVzZXJfdm1fc3RhcnQgXFx1MDAzZVxcdTAwM2UgMzIsIGN0eCk7XFxuLVxcdFxcdFxcdGVtaXQoQTY0X0xTTCgxLCBkc3QsIGRzdCwgMzIpLCBjdHgpO1xcbi1cXHRcXHRcXHRlbWl0KEE2NF9DQlooMSwgdG1wLCAyKSwgY3R4KTtcXG4tXFx0XFx0XFx0ZW1pdChBNjRfT1JSKDEsIHRtcCwgZHN0LCB0bXApLCBjdHgpO1xcbi1cXHRcXHRcXHRlbWl0KEE2NF9NT1YoMSwgZHN0LCB0bXApLCBjdHgpO1xcbitcXHRcXHRcXHR1MzIgdXBwZXIgPSBjdHgtXFx1MDAzZXVzZXJfdm1fc3RhcnQgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdFxcdFxcdHUxNiB1cHBlcl9sb3cgPSB1cHBlciBcXHUwMDI2IDB4ZmZmZjtcXG4rXFx0XFx0XFx0dTE2IHVwcGVyX2hpZ2ggPSB1cHBlciBcXHUwMDNlXFx1MDAzZSAxNjtcXG4rXFx0XFx0XFx0aW50IG5yX21vdmsgPSAhIXVwcGVyX2xvdyArICEhdXBwZXJfaGlnaDtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEJ1aWxkIHRoZSB1c2VyIGFkZHJlc3M6IHRoZSBsb3cgMzIgYml0cyBhcmUgdGhlIGFyZW5hXFxuK1xcdFxcdFxcdCAqIG9mZnNldCwgdGhlIHVwcGVyIDMyIGJpdHMgY29tZSBmcm9tIHVzZXJfdm1fc3RhcnQuIEFcXG4rXFx0XFx0XFx0ICogemVybyBvZmZzZXQgbXVzdCBzdGF5IE5VTEwsIHNvIGJyYW5jaCBvdmVyIHRoZSBNT1ZLc1xcbitcXHRcXHRcXHQgKiB3aGVuIGl0IGlzIHplcm8uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRlbWl0KEE2NF9NT1YoMCwgZHN0LCBzcmMpLCBjdHgpOyAvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xcbitcXHRcXHRcXHRpZiAobnJfbW92aykge1xcbitcXHRcXHRcXHRcXHRlbWl0KEE2NF9DQlooMCwgZHN0LCBucl9tb3ZrICsgMSksIGN0eCk7XFxuK1xcdFxcdFxcdFxcdGlmICh1cHBlcl9sb3cpXFxuK1xcdFxcdFxcdFxcdFxcdGVtaXQoQTY0X01PVksoMSwgZHN0LCB1cHBlcl9sb3csIDMyKSwgY3R4KTtcXG4rXFx0XFx0XFx0XFx0aWYgKHVwcGVyX2hpZ2gpXFxuK1xcdFxcdFxcdFxcdFxcdGVtaXQoQTY0X01PVksoMSwgZHN0LCB1cHBlcl9oaWdoLCA0OCksIGN0eCk7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG4gXFx0XFx0XFx0aWYgKGRzdCAhPSBzcmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjAwLjgwMTY5MjQ3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2NzI4OTcxNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBBUk02NCB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB1c2VyIGFkZHJlc3NlcyBmb3IgQlBGIGFyZW5hLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIEpJVCBjb21waWxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYzlmYjQzMmRlZjFkYzBiZTgxOWRmODE2Njk4M2QzOWZlNzU3ZmM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMDY6MzA6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBiMDA3NWVjZTRhNmU3Zi4uMGY2MTY2MmI5MDBiZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjg0LDEyICsxMjg0LDI1IEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdGNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfWDpcbiBcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxuIFx0XHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcbi1cdFx0XHRlbWl0KEE2NF9NT1YoMCwgdG1wLCBzcmMpLCBjdHgpOyAvLyAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0c1xuLVx0XHRcdGVtaXRfYTY0X21vdl9pKDAsIGRzdCwgY3R4LVx1MDAzZXVzZXJfdm1fc3RhcnQgXHUwMDNlXHUwMDNlIDMyLCBjdHgpO1xuLVx0XHRcdGVtaXQoQTY0X0xTTCgxLCBkc3QsIGRzdCwgMzIpLCBjdHgpO1xuLVx0XHRcdGVtaXQoQTY0X0NCWigxLCB0bXAsIDIpLCBjdHgpO1xuLVx0XHRcdGVtaXQoQTY0X09SUigxLCB0bXAsIGRzdCwgdG1wKSwgY3R4KTtcbi1cdFx0XHRlbWl0KEE2NF9NT1YoMSwgZHN0LCB0bXApLCBjdHgpO1xuK1x0XHRcdHUzMiB1cHBlciA9IGN0eC1cdTAwM2V1c2VyX3ZtX3N0YXJ0IFx1MDAzZVx1MDAzZSAzMjtcbitcdFx0XHR1MTYgdXBwZXJfbG93ID0gdXBwZXIgXHUwMDI2IDB4ZmZmZjtcbitcdFx0XHR1MTYgdXBwZXJfaGlnaCA9IHVwcGVyIFx1MDAzZVx1MDAzZSAxNjtcbitcdFx0XHRpbnQgbnJfbW92ayA9ICEhdXBwZXJfbG93ICsgISF1cHBlcl9oaWdoO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQnVpbGQgdGhlIHVzZXIgYWRkcmVzczogdGhlIGxvdyAzMiBiaXRzIGFyZSB0aGUgYXJlbmFcbitcdFx0XHQgKiBvZmZzZXQsIHRoZSB1cHBlciAzMiBiaXRzIGNvbWUgZnJvbSB1c2VyX3ZtX3N0YXJ0LiBBXG4rXHRcdFx0ICogemVybyBvZmZzZXQgbXVzdCBzdGF5IE5VTEwsIHNvIGJyYW5jaCBvdmVyIHRoZSBNT1ZLc1xuK1x0XHRcdCAqIHdoZW4gaXQgaXMgemVyby5cbitcdFx0XHQgKi9cbitcdFx0XHRlbWl0KEE2NF9NT1YoMCwgZHN0LCBzcmMpLCBjdHgpOyAvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xuK1x0XHRcdGlmIChucl9tb3ZrKSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9DQlooMCwgZHN0LCBucl9tb3ZrICsgMSksIGN0eCk7XG4rXHRcdFx0XHRpZiAodXBwZXJfbG93KVxuK1x0XHRcdFx0XHRlbWl0KEE2NF9NT1ZLKDEsIGRzdCwgdXBwZXJfbG93LCAzMiksIGN0eCk7XG4rXHRcdFx0XHRpZiAodXBwZXJfaGlnaClcbitcdFx0XHRcdFx0ZW1pdChBNjRfTU9WSygxLCBkc3QsIHVwcGVyX2hpZ2gsIDQ4KSwgY3R4KTtcbitcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbiBcdFx0XHRpZiAoZHN0ICE9IHNyYylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjAwLjgwMTY5NTAxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDk1MTE0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEpJVCBDb21waWxlciBQYXRjaCBmb3IgQVJNNjQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCdzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gdG8gdGhlIHdheSB0aGUgdXNlciBhZGRyZXNzIGlzIGhhbmRsZWQgaW4gYGJ1aWxkX2luc24oKWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIEJQRiBhcmVuYS4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHdhcyBhIGJpdCBjbHVua3ksIHVzaW5nIGEgc2VyaWVzIG9mIG1vdmVzIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgdG8gY29uc3RydWN0IHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSB1c2VyIHZpcnR1YWwgYWRkcmVzcy4gVGhleSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhpcyBieSB1c2luZyBgTU9WS2AgaW5zdHJ1Y3Rpb25zLCB3aGljaCBhcmUgbW9yZSBlZmZpY2llbnQgZm9yIGltbWVkaWF0ZSB2YWx1ZSBsb2FkaW5nIG9uIEFSTTY0LiBcblxuRXNzZW50aWFsbHksIHRoZXkncmUgYnJlYWtpbmcgZG93biB0aGUgdXBwZXIgMzIgYml0cyBvZiBgY3R4LVx1MDAzZXVzZXJfdm1fc3RhcnRgIGludG8gdHdvIDE2LWJpdCBjaHVua3MgYW5kIHVzaW5nIGBNT1ZLYCB0byBsb2FkIHRoZW0uIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIHRlcm1zIG9mIGluc3RydWN0aW9uIGNvdW50LCBhc3N1bWluZyB0aGUgYE1PVktgIGluc3RydWN0aW9ucyBhcmUgdHJ1bHkgbW9yZSBlZmZpY2llbnQgaW4gdGhpcyBzY2VuYXJpbywgYXMgSSB3b3VsZCBleHBlY3QgdGhlbSB0byBiZS4gSSB3b3VsZCBuZWVkIHRvIGJlbmNobWFyayBpdCwgYnV0IG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyBhIGdvb2QgY2hhbmdlLlxuXG5Ob3csIG15IG1pbmQgaXMgYWxyZWFkeSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIGZ1enogdGhpcy4gV2UgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuIEl0J3MgdGhlIHVzZXIgYWRkcmVzcyBjb25zdHJ1Y3Rpb24gdGhhdCBpcyBuZXcgYW5kIGRpZmZlcmVudCwgc28gd2UgbmVlZCB0byBjb25jZW50cmF0ZSBvbiBpdC4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgY29udHJvbCB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBmaWxlLiBBaCwgeWVzLCBpdCBzZWVtcyBgQ09ORklHX0JQRl9KSVRgIGVuYWJsZXMgdGhpcy4gTm93IEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgaW5jbHVkZWQuLi4gTGV0IG1lIGNoZWNrIHRoZSBgYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVgIG5vdyB0byBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMTowNy4xNTEyMzQxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDY4ODI5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L01ha2VmaWxlLTQtI1xcbmFyY2gvYXJtNjQvbmV0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjA3Ljg1ODEyMzAxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODg4NzcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyBCUEYgSklUIGFuZCBVc2VyIFNwYWNlIENhc3QgSW5zdHJ1Y3Rpb25zKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgY29kZSByZWxhdGVkIHRvIGBDT05GSUdfQlBGX0pJVGAuIFRoYXQncyBhIGtleSBzdGFydGluZyBwb2ludC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKWAuIEFuZCwgSSBiZWxpZXZlIHRoaXMgbGlrZWx5IHRpZXMgaW50byB0aGUgQlBGIGFyZW5hLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhlcmUgYSBtb3JlIGdyYW51bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhlIEJQRiBhcmVuYSwgb3IgZG9lcyB0aGUgcHJlc2VuY2Ugb2YgYEJQRl9KSVRgIGltcGxpY2l0bHkgY292ZXIgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBpbiB0aGlzIGNvbnRleHQ/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLiBEb2VzIHRoZSBKSVQgZW5hYmxlbWVudCBhdXRvbWF0aWNhbGx5IGhhbmRsZSB3aGF0ZXZlciBjb25zaWRlcmF0aW9ucyBgaW5zbl9pc19jYXN0X3VzZXJgIG1pZ2h0IGhhdmUgY29uY2VybmluZyBtZW1vcnkgYWNjZXNzIGFuZCBzZWN1cml0eSB3aXRoaW4gdGhlIGFyZW5hPyBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMToxMi4xNDcwMDMwODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4NTUzOTM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnNuX2lzX2Nhc3RfdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTI1Mz1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTI4NS1cXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjg2OlxcdFxcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyODctXFx0XFx0XFx0dTMyIHVwcGVyID0gY3R4LVxcdTAwM2V1c2VyX3ZtX3N0YXJ0IFxcdTAwM2VcXHUwMDNlIDMyO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz03MTU9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy03MzYtXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6XFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzo3Mzc6XFx0XFx0aWYgKGluc25faXNfY2FzdF91c2VyKGluc24pKSB7XFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy03MzgtXFx0XFx0XFx0bW92ZV9yZWcoY3R4LCB0MSwgc3JjKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNzAtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNzE6XFx0XFx0XFx0aWYgKGluc25faXNfY2FzdF91c2VyKFxcdTAwMjZpbnNuW2ldKSkge1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjcyLVxcdFxcdFxcdFxcdEVNSVQoUFBDX1JBV19STERJQ0xfRE9UKHRtcDFfcmVnLCBzcmNfcmVnLCAwLCAzMikpO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzY5PWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVxcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcXHRcXHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzODctXFx0XFx0XFx0ZW1pdF9tdihSVl9SRUdfVDEsIHJzLCBjdHgpO1xcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz04NzY9c3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtOTE5LVxcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YOlxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6OTIwOlxcdFxcdGlmIChpbnNuX2lzX2Nhc3RfdXNlcihpbnNuKSkge1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtOTIxLVxcdFxcdFxcdGludCBwYXRjaF9icmM7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTY4MT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTg1My1cXHRcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTg1NDpcXHRcXHRcXHRpZiAoaW5zbl9pc19jYXN0X3VzZXIoaW5zbikpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTg1NS1cXHRcXHRcXHRcXHRpZiAoZHN0X3JlZyAhPSBzcmNfcmVnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNTI9c3RhdGljIGlubGluZSBib29sIGluc25faXNfemV4dChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTI1OS0gKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjI2MDpzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6MTcuOTMyNTQ3NTA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxOTE1NTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gYGluc25faXNfY2FzdF91c2VyYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGV4YWN0bHkgYGluc25faXNfY2FzdF91c2VyYCByZXByZXNlbnRzLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseSwgdG8gdW5kZXJzdGFuZCB0aGUgZm91bmRhdGlvbmFsIGNvbmNlcHQgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaXRzIGRlZmluaXRpb24gYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlIG9yIGNvbXBpbGVyIGNvbnRleHQgSSdtIGN1cnJlbnRseSB3b3JraW5nIGluLiBJcyBpdCBhYm91dCB1c2VyLWRlZmluZWQgY2FzdHM/IENvbXBpbGVyLWdlbmVyYXRlZCBjYXN0cz8gU3BlY2lmaWMgdHlwZXMgb2YgY2FzdHMsIGxpa2Ugd2lkZW5pbmcgb3IgbmFycm93aW5nPyBPciBpcyBpdCBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBLbm93aW5nIHRoZSBwcmVjaXNlIHNlbWFudGljIGRlZmluaXRpb24gd2lsbCBzdGVlciB0aGUgcmVzdCBvZiBteSBhbmFseXNpcy4gSSdtIGVzc2VudGlhbGx5IGxvb2tpbmcgdG8gaW1tZWRpYXRlbHkgcmVjb25zdHJ1Y3QgYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBmdW5jdGlvbidzIHNjb3BlLCBpbnB1dHMsIGFuZCBpbnRlbmRlZCBiZWhhdmlvdXIgYmVmb3JlIG1vdmluZyBpbnRvIG1vcmUgYWR2YW5jZWQgcmVhc29uaW5nIGFib3V0IGl0LiBMZXQncyBzZWUuLi4gYSBxdWljayBjaGVjayBzaG91bGQgam9nIG15IG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjIxLjM1MTcwNjM4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODc4NTQwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zbl9pc19jYXN0X3VzZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1Mj1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc196ZXh0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjU5LSAqL1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjYwOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMToyMS45Mzk1NjY0NDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU2MjYwODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBGaWx0ZXJpbmcgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IG9iamVjdGl2ZSBpcyB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsJ3MgZmlsdGVyaW5nIGNhcGFiaWxpdGllcy4gSSBrbm93IHRoZSBiYXNpY3MsIGJ1dCBJIHdhbnQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIGxvd2VyLWxldmVsIHN0cnVjdHVyZXMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJIHJlbWVtYmVyIGl0IGJlaW5nIGNydWNpYWwgZm9yIHRoZSBjb3JlIHBhY2tldCBmaWx0ZXJpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW4gYXJvdW5kIGxpbmUgMjYwLiBUaGF0IHVzdWFsbHkgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHRoZSBCUEYgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMuIEl0J3MgdGltZSB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlIGtlcm5lbCBhY3R1YWxseSAqZGVmaW5lcyogZmlsdGVycy4gSG9wZWZ1bGx5LCB0aGlzIHJlZnJlc2ggd2lsbCBnaXZlIG1lIHdoYXQgSSBuZWVkIHRvIG1vdmUgb24gdG8gdGhlIG5leHQgc2V0IG9mIHF1ZXN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjI1LjI5NTgzMDI2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0XFx0LmltbSAgID0gMSB9KVxcbiAyNTE6XFx0XFxuIDI1MjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc196ZXh0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4gMjUzOlxcdHtcXG4gMjU0OlxcdFxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gPT0gMTtcXG4gMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0LyogYWRkcl9zcGFjZV9jYXN0IGZyb20gYXMoMCkgdG8gYXMoMSkgaXMgZm9yIGNvbnZlcnRpbmcgYnBmIGFyZW5hIHBvaW50ZXJzXFxuIDI1ODpcXHQgKiB0byBwb2ludGVycyBpbiB1c2VyIHZtYS5cXG4gMjU5OlxcdCAqL1xcbiAyNjA6XFx0c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4gMjYxOlxcdHtcXG4gMjYyOlxcdFxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2XFxuIDI2MzpcXHRcXHRcXHRcXHQgICAgICBpbnNuLVxcdTAwM2VvZmYgPT0gQlBGX0FERFJfU1BBQ0VfQ0FTVCBcXHUwMDI2XFx1MDAyNlxcbiAyNjQ6XFx0XFx0XFx0XFx0ICAgICAgaW5zbi1cXHUwMDNlaW1tID09IDFVIFxcdTAwM2NcXHUwMDNjIDE2O1xcbiAyNjU6XFx0fVxcbiAyNjY6XFx0XFxuIDI2NzpcXHQvKiBCUEZfTERfSU1NNjQgbWFjcm8gZW5jb2RlcyBzaW5nbGUgJ2xvYWQgNjQtYml0IGltbWVkaWF0ZScgaW5zbiAqL1xcbiAyNjg6XFx0I2RlZmluZSBCUEZfTERfSU1NNjQoRFNULCBJTU0pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyNjk6XFx0XFx0QlBGX0xEX0lNTTY0X1JBVyhEU1QsIDAsIElNTSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6MjUuMjk2MDA0MTIyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTYwMTc0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKkludmVzdGlnYXRpbmcgYSBCUEYgQXJlbmEgSXNzdWUqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcy4gSXQncyBsb29raW5nIGxpa2UgdGhpcyBpc3N1ZSBpcyBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBCUEYgYXJlbmEsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRoZSBwb3RlbnRpYWwgZm9yIHJlc291cmNlIGNvbnRlbnRpb24sIGFsbG9jYXRpb24gcHJvYmxlbXMsIG9yIHBlcmhhcHMgZXZlbiBhIG1lbW9yeSBsZWFrLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjb25maWcgc2V0dGluZyB0aGF0IGRpcmVjdGx5IGNvbnRyb2xzIHRoZSBCUEYgYXJlbmEncyBiZWhhdmlvcj8gVGhlcmUgKmhhcyogdG8gYmUsIGFuZCB0aGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIExldCdzIGdldCB0aGUgY29uZmlnIGFuZCBxdWlja2x5IHJ1bGUgdGhhdCBvdXQsIG9yIG1vcmUgaG9wZWZ1bGx5LCBmaW5kIHRoZSBzbW9raW5nIGd1bi4gSXQgY291bGQgYmUgbGltaXRzLCBzaXppbmcsIG9yIHBlcmhhcHMgZXZlbiBzb21ldGhpbmcgcmVsYXRlZCB0byBpc29sYXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgQlBGIHByb2dyYW1zLCBJJ20ga2VlcGluZyBhbGwgcG9zc2liaWxpdGllcyBpbiB0aGUgYmFjayBvZiBteSBoZWFkLiBOZWVkIHRvIGZpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjI4LjgxMjAyNTMzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyOTExMDIxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjI5LjA0NDk0NTMwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcwODc4MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEFyZW5hKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24gb3IgbWFuYWdlbWVudCBpc3N1ZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgYXJlbmEgYWxsb2NhdG9yLiBUaGF0J3MgdXN1YWxseSB0aGUgZmlyc3QgcGxhY2UgSSBzdGFydCB3aXRoIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBlc3BlY2lhbGx5IHdoZW4gbG9va2luZyBhdCBCUEYgY29kZS4gSeKAmW0gemVyb2luZyBpbiBvbiBga2VybmVsL2JwZi9hcmVuYS5jYCwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhciB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZS4gSXQncyB0aGUgbW9zdCBwbGF1c2libGUgbG9jYXRpb24gZm9yIHRoZSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIHRoYXQgbWlnaHQgYmUgY2F1c2luZyB0aGUgaXNzdWUgd2UgYXJlIHNlZWluZywgYW5kIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkZWJ1Z2dpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGZ1cnRoZXIgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIG9yIG5vdCBkb2luZy4gVGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDI4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6MzIuNTE1ODI2MjY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5MDAxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMTozMi42NTI3MzIwNzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNDkyNzYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBCUEYgYXJlbmEgaXMgZ2V0dGluZyBjb21waWxlZCwgYnV0IG9ubHkgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4gSXQgbmVlZHMgYm90aCBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIHRvIGJlIHNldCB0byAneScsIGFuZCBhbHNvIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24uIFRoYXQncyBnb29kIHRvIGtub3csIHNldHMgdGhlIHN0YWdlIGZvciBjb250ZXh0LlxuXG5UaGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCBmaWxlLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIHRoZSBgYnVpbGRfaW5zbmAgZnVuY3Rpb24uIE5vdywgdGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiBJJ20gYXNzZXNzaW5nIHRoaXMuIElzIGl0IGBidWlsZF9pbnNuYCBpdHNlbGYsIG9yIHNob3VsZCBJIGJlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGhpZ2hlciBsZXZlbCBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYD8gSG1tLCB3YWl0IGEgbWludXRlLCBgYnVpbGRfaW5zbmAgaXMgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGxpa2VseSBsaW1pdHMgaXRzIGV4dGVybmFsIHZpc2liaWxpdHkuIE9rYXksIHRoZW4sIGxldCdzIHRyYWNlIGl0cyBjYWxscyB0byBzZWUgd2hlcmUgaXQgaXMgYmVpbmcgdXNlZC4gVGhhdCdzIHRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzUxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjM2Ljc4NzY2MjQ5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxOTczMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1aWxkX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTIzNT1zdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZV9pbW0oczMyIGltbSwgczE2IGJwZl9vZmYsIGNvbnN0IHU4IHRtcCwgc3RydWN0IGppdF9jdHggKmN0eClcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItICovXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTI1MzpzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTQtXFx0XFx0ICAgICAgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTk5MT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjAwOS1cXHRcXHRjdHgtXFx1MDAzZW9mZnNldFtpXSA9IGN0eC1cXHUwMDNlaWR4O1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIwMTA6XFx0XFx0cmV0ID0gYnVpbGRfaW5zbihlbnYsIGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjAxMS1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwNjozMTozNy4wMTk2NjUyNDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3NjkxOTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgdGhlIFJpZ2h0IEZvY3VzIGZvciBKSVQgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9sIHRvIHVzZSBmb3IgdGhpcyBKSVQgY29tcGlsYXRpb24gYW5hbHlzaXMuIExldCdzIHNlZSwgYGJ1aWxkX2luc25gIGlzIGNhbGxlZCBieSBgYnVpbGRfYm9keWAsIGFuZCB0aGF0J3MgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgc2hvdWxkIEkgZm9jdXMgb24gYGJ1aWxkX2luc25gPyBJdCdzIHdoZXJlIHRoZSBpbmRpdmlkdWFsIGluc3RydWN0aW9ucyBhcmUgYWN0dWFsbHkgYnVpbHQuIEJ1dCB3YWl0LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgcmVhbGx5IHRoZSBlbnRyeSBwb2ludCwgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgd2hvbGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEl0J3MgdGhlIHN0YW5kYXJkIGVudHJ5LlxuXG5IbW0sIGBidWlsZF9pbnNuYCBpcyBzdGF0aWMuIFRoYXQgKmNvdWxkKiBiZSBhIHByb2JsZW0gZm9yIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLCBhbHRob3VnaCBpdCBjYW4gc29tZXRpbWVzIHdvcmsgd2l0aCBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgZW5kIHVwIGluIGBrYWxsc3ltc2AuIEJ1dCByZWFsbHksIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgbW9yZSBsb2dpY2FsIGNob2ljZSBmb3IgdGhlIGhpZ2gtbGV2ZWwgdmlldy4gVGhpbmtpbmcgYWJvdXQgaXQsIGBidWlsZF9pbnNuYCBpcyBqdXN0IHN1cGVyIHNwZWNpZmljIHRvIGluZGl2aWR1YWwgaW5zdHJ1Y3Rpb25zLlxuXG5SaWdodCwgc28gSSdsbCBnbyB3aXRoIGJvdGggYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnVpbGRfaW5zbmAgZm9yIG5vdy4gVGhhdCBnaXZlcyBtZSBhIGdvb2QgYmFsYW5jZSBvZiBvdmVyYWxsIGNvbnRleHQgYW5kIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25maWcgb3B0aW9ucy4gSXMgYENPTkZJR19CUEZfSklUYCBhbGwgSSBuZWVkPyBZZXMsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHRoZSBrZXkgb25lcy4gU2luY2UgSSdtIHRhcmdldGluZyBhcm02NCBzcGVjaWZpY2FsbHksIEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IHRoZSBhcm02NCBjb25maWcsIGJ1dCBzcGVjaWZ5aW5nIGBCUEZfSklUYCB3b3VsZG4ndCBodXJ0LlxuXG5GaW5hbGx5LCBJIHNob3VsZCBqdXN0IHF1aWNrbHkgdmVyaWZ5IHdoYXQgY2FsbHMgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGluIHRoZSBhcm02NCBpbXBsZW1lbnRhdGlvbiBqdXN0IHRvIGJlIHN1cmUgSSd2ZSBnb3QgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6NDMuMDk2NTg3NDQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAwNjY1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDg2PXN0cnVjdCBhcm02NF9qaXRfZGF0YSB7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDkyLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIwOTM6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6NDMuMjY2NjYxOTQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDA4NjE1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBKSVQgY29tcGlsYXRpb24gYmVoYXZpb3Igd2hlbiBkZWFsaW5nIHdpdGggdGhvc2UgQUxVIGFuZCBNT1YgaW5zdHJ1Y3Rpb25zIHRoYXQgaW52b2x2ZSB1c2VyIGNhc3RzLCB3aGVyZSBgaW5zbl9pc19jYXN0X3VzZXIoaW5zbilgIGV2YWx1YXRlcyB0byB0cnVlLiBGdW5jdGlvbmFsbHksIGl0J3MgZ29vZCBjb2RlLiBEZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSdkIHdhbnQgdG8gZnV6eiwgSSdkIHNheSBpdCdzIFdvcnRoRnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIHNob3VsZCBiZSBvbiBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kLCBvZiBjb3Vyc2UsIHRoZSBgYnVpbGRfaW5zbmAgZnVuY3Rpb24g4oCTIHRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBlbnN1cmUgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIFRoZSBwYXRjaCBzYXlzIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgbmVlZGVkLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGlmIGBDT05GSUdfQlBGX0pJVGAgYWxvbmUgd291bGQgc3VmZmljZS5cblxuSG9sZCBvbi4uLiBgYnVpbGRfaW5zbmAgaXMgYSBwcmV0dHkgZ2VuZXJpYyBuYW1lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGJlYXJzIHRoZSBzYW1lIG5hbWUgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6NDguMjY3NTI2MTgxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA1MDEzNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1aWxkX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYz0xNTY2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTE1ODgtICovXFxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYzoxNTg5OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYy0xNTkwLXtcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM9MjEwNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMjExMy1cXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jOjIxMTQ6XFx0XFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgpO1xcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMjExNS1cXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyMzU9c3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjUyLSAqL1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEyNTM6c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjU0LVxcdFxcdCAgICAgIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTE5OTE9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMDktXFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRbaV0gPSBjdHgtXFx1MDAzZWlkeDtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMDEwOlxcdFxcdHJldCA9IGJ1aWxkX2luc24oZW52LCBpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMTEtXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9NjUzPXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtNzE0LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6NzE1OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTcxNi17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE0NzQ9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTQ4NS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE0ODY6XFx0XFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTQ4Ny1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM9MTQzPXN0YXRpYyBpbmxpbmUgdTMyIGJ1aWxkX2ppbW0odTMyIGFyZylcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pY3JvbWlwcy5jLTE1NS0gKi9cXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYzoxNTY6c3RhdGljIHZvaWQgYnVpbGRfaW5zbih1MzIgKipidWYsIGVudW0gb3Bjb2RlIG9wYywgLi4uKVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pY3JvbWlwcy5jLTE1Ny17XFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmM9MjIwPXN0YXRpYyBpbmxpbmUgdTMyIGJ1aWxkX2ppbW0odTMyIGFyZylcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pcHMuYy0yMzEtICovXFxuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jOjIzMjpzdGF0aWMgdm9pZCBidWlsZF9pbnNuKHUzMiAqKmJ1ZiwgZW51bSBvcGNvZGUgb3BjLCAuLi4pXFxuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jLTIzMy17XFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE0Mz1zdGF0aWMgaW5saW5lIHUzMiBidWlsZF9zZXQodTMyIGFyZylcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTQ5LVxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTUwOnN0YXRpYyB2b2lkIGJ1aWxkX2luc24odTMyICoqYnVmLCBlbnVtIG9wY29kZSBvcGMsIC4uLik7XFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNTEtXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE1Mz1JcF91MXUydTMob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTU0LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxNTU6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBhLCBiLCBjKTtcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNTYtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MTYwPUlwX3MzczFzMihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNjEte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE2MjpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGMsIGEpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE2My19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0xNjc9SXBfdTJ1MXUzKG9wKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE2OC17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTY5OlxcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYyk7XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTcwLX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE3ND1JcF91M3UydTEob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTc1LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxNzY6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBjLCBiLCBhKTtcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xNzctfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MTgxPUlwX3UzdTF1MihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xODIte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjE4MzpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGMsIGEpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE4NC19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0xODg9SXBfdTF1MnMzKG9wKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTE4OS17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MTkwOlxcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYSwgYiwgYyk7XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTkxLX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTE5NT1JcF91MnMzdTEob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMTk2LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoxOTc6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBjLCBhLCBiKTtcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0xOTgtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MjAyPUlwX3UydTFzMyhvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMDMte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjIwNDpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGMpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIwNS19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yMDk9SXBfdTJ1MW1zYnUzKG9wKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIxMC17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjExOlxcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYytkLTEsIGMpO1xcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIxMi19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yMTY9SXBfdTJ1MW1zYnUzKG9wKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIxNy17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmM6MjE4OlxcdGJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYytkLTMzLCBjKTtcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMTktfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MjIzPUlwX3UydTFtc2J1MyhvcClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMjQte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjIyNTpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGMrZC0zMywgYy0zMik7XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjI2LX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS5jPTIzMD1JcF91MnUxbXNidTMob3ApXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjMxLXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyMzI6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBkLTEsIGMpO1xcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTIzMy19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yMzc9SXBfdTF1MihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yMzgte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjIzOTpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI0MC19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yNDQ9SXBfdTF1MihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNDUte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjI0NjpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI0Ny19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yNTE9SXBfdTFzMihvcClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNTIte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjI1MzpcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIpO1xcdFxcdFxcXFxcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTI1NC19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYz0yNTg9SXBfdTEob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjU5LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNjA6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wLCBhKTtcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNjEtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9MjY1PUlwXzAob3ApXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvbWlwcy9tbS91YXNtLmMtMjY2LXtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYzoyNjc6XFx0YnVpbGRfaW5zbihidWYsIGluc24jI29wKTtcXHRcXHRcXHRcXFxcXFxuYXJjaC9taXBzL21tL3Vhc20uYy0yNjgtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLmM9Mzk1PXZvaWQgdWFzbV9pX3ByZWYodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiLFxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20uYy00MDItXFx0XFx0ICovXFxuYXJjaC9taXBzL21tL3Vhc20uYzo0MDM6XFx0XFx0YnVpbGRfaW5zbihidWYsIGluc25fcHJlZiwgYywgMjgsIGIpO1xcbmFyY2gvbWlwcy9tbS91YXNtLmMtNDA0LVxcdGVsc2VcXG5hcmNoL21pcHMvbW0vdWFzbS5jOjQwNTpcXHRcXHRidWlsZF9pbnNuKGJ1ZiwgaW5zbl9wcmVmLCBjLCBhLCBiKTtcXG5hcmNoL21pcHMvbW0vdWFzbS5jLTQwNi19XFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jPTg1MD1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jLTg3MC1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5jOjg3MTpcXHRcXHRyZXQgPSBidWlsZF9pbnNuKGluc24sIGN0eCk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuYy04NzItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcC5oPTIyMj12b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBpbnQgZGVzdF9yZWcpO1xcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaC0yMzItICovXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaDoyMzM6aW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAuaC0yMzQtXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTQ0ND12b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBpbnQgZGVzdF9yZWcpXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQ2Mi0vKiBCdWlsZCBvbmUgZUJQRiBpbnN0cnVjdGlvbiAqL1xcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNDYzOmludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTE0NjQte1xcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jPTYxOT12b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBpbnQgZGVzdF9yZWcpXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtNjM0LS8qIEJ1aWxkIG9uZSBlQlBGIGluc3RydWN0aW9uICovXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jOjYzNTppbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy02MzYte1xcbi0tXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzY0LmM9ODUwPXN0YXRpYyB2b2lkIGVtaXRfdGFpbF9jYWxsKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYy04OTQtXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzY0LmM6ODk1OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzY0LmMtODk2LXtcXG4tLVxcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jPTE0Mzg9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfNjQuYy0xNDQ2LVxcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jOjE0NDc6XFx0XFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgpO1xcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF82NC5jLTE0NDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDA2OjMxOjQ5LjY3MjU0NjU2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjIxNTI4OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBJZGVudGlmeWluZyB0aGUgS2V5IFN5bWJvbCBmb3IgSklUIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIEpJVCBjb21waWxhdGlvbi4gYGJ1aWxkX2luc25gIGlzIGEgcHJldHR5IGdlbmVyaWMgbmFtZSwgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcywgc28gdGhhdCdzIG5vdCB0aGUgYmVzdCBjaG9pY2UgZm9yIHBpbnBvaW50aW5nIHRoZSB0YXJnZXQgZnVuY3Rpb24uIExldCdzIGZvY3VzIGluIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBhcyBhIHN0YXJ0aW5nIHBvaW50LCB0aGlua2luZyB0aGF0J3MgdGhlIG1haW4gZnVuY3Rpb24gZm9yIGtpY2tpbmcgb2ZmIEpJVCBjb21waWxhdGlvbi4gSG1tLCBidXQgd2FpdCBhIG1pbnV0ZSwgdGhhdCBhbHNvIGFwcGVhcnMgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMuIElzIHRoZXJlIGEgbW9yZSBBUk02NCBzcGVjaWZpYyBmdW5jdGlvbj8gYGJ1aWxkX2JvZHlgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyB0aGF0IHdvbid0IHdvcmsuXG5cbkFscmlnaHQsIGxldCdzIGdvIHdpdGggYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBpdHMgcmVsYXRlZCBgYnBmX2ppdF9idWlsZF9ib2R5YCAob2ggd2FpdCwgQVJNNjQgdXNlcyBgYnVpbGRfYm9keWAgYnV0IGxldCdzIHNlZS4uLikgYnV0IHRoZW4sICpvaCosIHN5emthbGxlcidzIGdvaW5nIHRvIG1ha2UgYSBtYXBwaW5nIHRvIHRoZSBBUk02NC1zcGVjaWZpYyBmdW5jdGlvbi4gSWYgaXQncyBmdXp6aW5nIGFybTY0LCBpdCdzIGdvaW5nIHRvIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgcmlnaHQgb25lLiBPa2F5LCBsZXQncyBrZWVwIGl0IHNpbXBsZSBhbmQganVzdCB1c2UgYGJwZl9pbnRfaml0X2NvbXBpbGVgLlxuXG5BY3R1YWxseSwgdGhlIHBhdGNoIGV4cGxpY2l0bHkgdGFyZ2V0cyBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHJlYWxseSB0aGUgKm9ubHkqIHBlcnRpbmVudCBmdW5jdGlvbi4gTGV0IG1lIGluY2x1ZGUgYGJwZl9qaXRfY29tcGlsZWAgb3Igd2hhdGV2ZXIgZWxzZSBpcyBpbiB0aGF0IGZpbGUsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIGZpcnN0IG9uZTogeWVwLCB0aGUgcmlnaHQgdGhpbmcgdG8gdXNlIGhlcmUgaXMgYGJwZl9pbnRfaml0X2NvbXBpbGVgLlxuXG5BbmQgbGV0IG1lIG1ha2Ugc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIG5lY2Vzc2FyeSwgSSdsbCBuZWVkIHRoYXQgb25lLiBBbmQgSSBrbm93IEkgbmVlZCBgQ09ORklHX0JQRl9KSVRgIGZvciB0aGUgSklUIGl0c2VsZi4gYENPTkZJR19BUk02NGAgaXMgaW1wbGljaXQsIHNvIEkgY2FuIGlnbm9yZSB0aGF0LiBJJ20gZ29vZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2MSwiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDY6MzE6NTcuMjk0MDc4NDM1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTgxMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgQVJNNjQgdG8gb3B0aW1pemUgdGhlIGdlbmVyYXRpb24gb2YgdXNlciBhZGRyZXNzZXMgZm9yIEJQRiBhcmVuYS4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBKSVQgY29tcGlsZXIgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIEFSTTY0IHRvIG9wdGltaXplIHRoZSBnZW5lcmF0aW9uIG9mIHVzZXIgYWRkcmVzc2VzIGZvciBCUEYgYXJlbmEuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgSklUIGNvbXBpbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfj48[1] Phase: Succeeded StartedAt: 2026-07-22 06:32:10 +0000 UTC FinishedAt: 2026-07-22 06:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 06:32:10 +0000 UTC FinishedAt: 2026-07-22 06:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2] Phase: Succeeded StartedAt: 2026-07-22 06:32:10 +0000 UTC FinishedAt: 2026-07-22 07:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-22 06:32:10 +0000 UTC FinishedAt: 2026-07-22 07:51:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-22 06:32:10 +0000 UTC FinishedAt: 2026-07-22 06:33:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-22 06:32:10 +0000 UTC FinishedAt: 2026-07-22 06:32:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxfj48/series-workflowxfj48-convert-artifact-3020332646/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-22 06:33:20 +0000 UTC FinishedAt: 2026-07-22 07:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-22 06:33:20 +0000 UTC FinishedAt: 2026-07-22 07:00:39 +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:*f3cd3150-50f5-4aa2-b5f6-01c0266da840,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-workflowxfj48/series-workflowxfj48-convert-artifact-3020332646/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": "3f6effe0-4a48-4c86-b1b4-0bc996432d7f", "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-workflowxfj48/series-workflowxfj48-build-action-2349284860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-22 06:33:20 +0000 UTC FinishedAt: 2026-07-22 07:00:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f3cd3150-50f5-4aa2-b5f6-01c0266da840,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-workflowxfj48/series-workflowxfj48-convert-artifact-3020332646/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": "3f6effe0-4a48-4c86-b1b4-0bc996432d7f", "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-workflowxfj48/series-workflowxfj48-build-action-2349284860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-22 07:00:39 +0000 UTC FinishedAt: 2026-07-22 07:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-22 07:00:39 +0000 UTC FinishedAt: 2026-07-22 07:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-22 07:00:39 +0000 UTC FinishedAt: 2026-07-22 07:00:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-22 07:00:39 +0000 UTC FinishedAt: 2026-07-22 07:00:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxfj48/series-workflowxfj48-convert-artifact-1296421561/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-22 07:00:49 +0000 UTC FinishedAt: 2026-07-22 07:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-22 07:00:49 +0000 UTC FinishedAt: 2026-07-22 07:02:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f6effe0-4a48-4c86-b1b4-0bc996432d7f,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-workflowxfj48/series-workflowxfj48-build-action-2349284860/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-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-22 07:02:48 +0000 UTC FinishedAt: 2026-07-22 07:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-22 07:02:48 +0000 UTC FinishedAt: 2026-07-22 07:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-22 07:02:48 +0000 UTC FinishedAt: 2026-07-22 07:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-22 07:02:48 +0000 UTC FinishedAt: 2026-07-22 07:46:15 +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:*f3cd3150-50f5-4aa2-b5f6-01c0266da840,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-workflowxfj48/series-workflowxfj48-convert-artifact-1296421561/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": "eb6a5fd1-6dad-4b3a-bb84-80cc295f6f99", "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-workflowxfj48/series-workflowxfj48-build-action-302099349/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-22 07:02:48 +0000 UTC FinishedAt: 2026-07-22 07:46:05 +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:*f3cd3150-50f5-4aa2-b5f6-01c0266da840,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-workflowxfj48/series-workflowxfj48-convert-artifact-1296421561/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": "eb6a5fd1-6dad-4b3a-bb84-80cc295f6f99", "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-workflowxfj48/series-workflowxfj48-build-action-302099349/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-22 07:46:15 +0000 UTC FinishedAt: 2026-07-22 07:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-22 07:46:15 +0000 UTC FinishedAt: 2026-07-22 07:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-22 07:46:15 +0000 UTC FinishedAt: 2026-07-22 07:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-22 07:46:15 +0000 UTC FinishedAt: 2026-07-22 07:49:05 +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:*eb6a5fd1-6dad-4b3a-bb84-80cc295f6f99,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-workflowxfj48/series-workflowxfj48-build-action-302099349/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-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-22 07:49:25 +0000 UTC FinishedAt: 2026-07-22 07:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-22 07:49:25 +0000 UTC FinishedAt: 2026-07-22 07:51:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"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:*3f6effe0-4a48-4c86-b1b4-0bc996432d7f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eb6a5fd1-6dad-4b3a-bb84-80cc295f6f99,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-workflowxfj48/series-workflowxfj48-build-action-2349284860/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-workflowxfj48/series-workflowxfj48-build-action-302099349/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-22 07:49:25 +0000 UTC FinishedAt: 2026-07-22 07:49:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-22 07:49:25 +0000 UTC FinishedAt: 2026-07-22 07:49:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"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-workflowxfj48/series-workflowxfj48-convert-artifact-3612752942/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-22 07:49:25 +0000 UTC FinishedAt: 2026-07-22 07:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-22 07:49:25 +0000 UTC FinishedAt: 2026-07-22 07:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-22 07:49:25 +0000 UTC FinishedAt: 2026-07-22 07:49:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-22 07:49:35 +0000 UTC FinishedAt: 2026-07-22 07:51:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfj48[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0bcca2a42cc50b7d64a95c08dffc6b93661a7ea2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"0e334607-e410-42e9-8546-068808b434ba","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-22 07:49:35 +0000 UTC FinishedAt: 2026-07-22 07:51:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f6effe0-4a48-4c86-b1b4-0bc996432d7f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eb6a5fd1-6dad-4b3a-bb84-80cc295f6f99,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-workflowxfj48/series-workflowxfj48-build-action-2349284860/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-workflowxfj48/series-workflowxfj48-build-action-302099349/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-workflowxfj48/series-workflowxfj48-convert-artifact-3612752942/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,}