PGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KPHRpdGxlPlBvbHlnb24gU2V0IFVzYWdlPC90aXRsZT4KPC9oZWFkPgoKPGJvZHk+Cgo8cD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyI+Lyo8YnI+CkNvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uPGJyPgo8YnI+ClVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsPGJyPgpWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdDxicj4KaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS48YnI+CiovPGJyPgojaW5jbHVkZSAmbHQ7Ym9vc3QvcG9seWdvbi9wb2x5Z29uLmhwcCZndDs8YnI+CiNpbmNsdWRlICZsdDtjYXNzZXJ0Jmd0Ozxicj4KbmFtZXNwYWNlIGd0bCA9IGJvb3N0Ojpwb2x5Z29uOzxicj4KdXNpbmcgbmFtZXNwYWNlIGJvb3N0Ojpwb2x5Z29uOjpvcGVyYXRvcnM7PGJyPjxicj4KaW50IG1haW4oKSB7PGJyPiZuYnNwOyAmbmJzcDsgCi8vbGV0cyBkZWNsYXJlIG91cnNlbHZlcyBhIHBvbHlnb24gc2V0PGJyPiZuYnNwOyAmbmJzcDsgCnVzaW5nIG5hbWVzcGFjZSBndGw7IC8vYmVjYXVzZSBvZiBvcGVyYXRvcnM8YnI+Jm5ic3A7ICZuYnNwOyAKdHlwZWRlZiBzdGQ6OnZlY3RvciZsdDtwb2x5Z29uX2RhdGEmbHQ7aW50Jmd0OyAmZ3Q7IFBvbHlnb25TZXQ7PGJyPiZuYnNwOyAmbmJzcDsgClBvbHlnb25TZXQgcHM7PGJyPiZuYnNwOyAmbmJzcDsgCjxicj4mbmJzcDsgJm5ic3A7IAovL2xldHMgcHV0IHNvbWUgZGF0YSBpbjxicj4mbmJzcDsgJm5ic3A7IApwcyArPSByZWN0YW5nbGVfZGF0YSZsdDtpbnQmZ3Q7KDAsIDAsIDEwLCAxMCk7PGJyPiZuYnNwOyAmbmJzcDsgCjxicj4mbmJzcDsgJm5ic3A7IAovL25vdyBsZXRzIGRvIHNvbWV0aGluZyBpbnRlcmVzdGluZzxicj4mbmJzcDsgJm5ic3A7IApQb2x5Z29uU2V0IHBzMjs8YnI+Jm5ic3A7ICZuYnNwOyAKcHMyICs9IHJlY3RhbmdsZV9kYXRhJmx0O2ludCZndDsoNSwgNSwgMTUsIDE1KTs8YnI+Jm5ic3A7ICZuYnNwOyAKUG9seWdvblNldCBwczM7PGJyPiZuYnNwOyAmbmJzcDsgCmFzc2lnbihwczMsIHBzICogcHMyKTsgLy93b2FoLCBJIGp1c3QgZmVsdCB0aGUgcm9vbSBmbGV4IGFyb3VuZCBtZTxicj4mbmJzcDsgJm5ic3A7IApQb2x5Z29uU2V0IHBzNDs8YnI+Jm5ic3A7ICZuYnNwOyAKcHM0ICs9IHBzICsgcHMyOzxicj4mbmJzcDsgJm5ic3A7IAo8YnI+Jm5ic3A7ICZuYnNwOyAKLy9hc3NlcnQgdGhhdCBhcmVhIG9mIHJlc3VsdCBpcyBlcXVhbCB0byBzdW0gb2YgYXJlYXM8YnI+Jm5ic3A7ICZuYnNwOyAKLy9vZiBpbnB1dCBnZW9tZXRyeSBtaW51cyB0aGUgYXJlYSBvZiBvdmVybGFwIGJldHdlZW4gaW5wdXRzPGJyPiZuYnNwOyAmbmJzcDsgCmFzc2VydChhcmVhKHBzNCkgPT0gYXJlYShwcykgKyBhcmVhKHBzMikgLSBhcmVhKHBzMykpOzxicj4mbmJzcDsgJm5ic3A7IAo8YnI+Jm5ic3A7ICZuYnNwOyAKLy9JIGRvbid0IGV2ZW4gc2VlIHRoZSBjb2RlIGFueW1vcmUsIGFsbDxicj4mbmJzcDsgJm5ic3A7IAovL0kgc2VlIGlzIGJvdW5kaW5nIGJveC4uLmludGVydmFsLi4udHJpYW5nbGU8YnI+Jm5ic3A7ICZuYnNwOyAKPGJyPiZuYnNwOyAmbmJzcDsgCi8vbGV0cyB0cnkgdGhhdCBhZ2FpbiBpbiBzbG93IG1vdGlvbiBzaGFsbCB3ZT88YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IAphc3NlcnQoZXF1aXZhbGVuY2UoKHBzICsgcHMyKSAtIChwcyAqIHBzMiksIHBzIF4gcHMyKSk7PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAvL2htbSwgc3VidHJhY3RpbmcgdGhlIGludGVyc2VjdGlvbiBmcm9tIHRoZSB1bmlvbjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IC8vaXMgZXF1aXZhbGVudCB0byB0aGUgeG9yLCBhbGwgdGhpcyBpbiBvbmUgbGluZSBvZiBjb2RlLDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IC8vbm93IHdlJ3JlIHByb2dyYW1taW5nIGluIGJ1bGxldCB0aW1lPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgLy8oYnkgdGhlIHdheSwgeG9yIGlzIGltcGxlbWVudGVkIGFzIG9uZSBwYXNzLCBub3QgCmNvbXBvc2l0aW9uKSZuYnNwOyA8YnI+Jm5ic3A7ICZuYnNwOyAKPGJyPiZuYnNwOyAmbmJzcDsgCi8vanVzdCBmb3IgZnVuPGJyPiZuYnNwOyAmbmJzcDsgCnJlY3RhbmdsZV9kYXRhJmx0O2ludCZndDsgcmVjdDs8YnI+Jm5ic3A7ICZuYnNwOyAKYXNzZXJ0KGV4dGVudHMocmVjdCwgcHMgXiBwczIpKTs8YnI+Jm5ic3A7ICZuYnNwOyAKYXNzZXJ0KGFyZWEocmVjdCkgPT0gMjI1KTs8YnI+Jm5ic3A7ICZuYnNwOyAKYXNzZXJ0KGFyZWEocmVjdCBeIChwcyBeIHBzMikpID09IGFyZWEocmVjdCkgLSBhcmVhKHBzIF4gcHMyKSk7IDxicj4mbmJzcDsgJm5ic3A7IApyZXR1cm4gMDs8YnI+fTxicj4mbmJzcDsgJm5ic3A7IAo8YnI+Ly9Ob3cgeW91IGtub3cgaG93IHRvIHVzZSB0aGUgcG9seWdvbiBzZXQgY29uY2VwdCB3aXRoIGxpYnJhcnkgcG9seWdvbnM8YnI+Jm5ic3A7ICZuYnNwOyAKJm5ic3A7PC9mb250PjwvcD4KCgo8dGFibGUgY2xhc3M9ImRvY2luZm8iIHJ1bGVzPSJub25lIiBmcmFtZT0idm9pZCIgaWQ9InRhYmxlMSI+Cgk8Y29sZ3JvdXA+CgkJPGNvbCBjbGFzcz0iZG9jaW5mby1uYW1lIj48Y29sIGNsYXNzPSJkb2NpbmZvLWNvbnRlbnQiPgoJPC9jb2xncm91cD4KCTx0Ym9keSB2QWxpZ249InRvcCI+CgkJPHRyPgoJCQk8dGggY2xhc3M9ImRvY2luZm8tbmFtZSI+Q29weXJpZ2h0OjwvdGg+CgkJCTx0ZD5Db3B5cmlnaHQgqSBJbnRlbCBDb3Jwb3JhdGlvbiAyMDA4LTIwMTAuPC90ZD4KCQk8L3RyPgoJCTx0ciBjbGFzcz0iZmllbGQiPgoJCQk8dGggY2xhc3M9ImRvY2luZm8tbmFtZSI+TGljZW5zZTo8L3RoPgoJCQk8dGQgY2xhc3M9ImZpZWxkLWJvZHkiPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCAKCQkJVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgPHR0IGNsYXNzPSJsaXRlcmFsIj4KCQkJPHNwYW4gY2xhc3M9InByZSI+TElDRU5TRV8xXzAudHh0PC9zcGFuPjwvdHQ+IG9yIGNvcHkgYXQKCQkJPGEgY2xhc3M9InJlZmVyZW5jZSIgdGFyZ2V0PSJfdG9wIiBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPgoJCQlodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvdGQ+CgkJPC90cj4KPC90YWJsZT4KCjwvYm9keT4KCjwvaHRtbD4K