IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgTWFyY2gsIEp1bmUgMjAxMAojCiMgVGhlIG1vZHVsZSBpbXBsZW1lbnRzICI0LWJpdCIgR0NNIEdIQVNIIGZ1bmN0aW9uIGFuZCB1bmRlcmx5aW5nCiMgc2luZ2xlIG11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbiBpbiBHRigyXjEyOCkuICI0LWJpdCIgbWVhbnMgdGhhdAojIGl0IHVzZXMgMjU2IGJ5dGVzIHBlci1rZXkgdGFibGUgWysxMjggYnl0ZXMgc2hhcmVkIHRhYmxlXS4gR0hBU0gKIyBmdW5jdGlvbiBmZWF0dXJlcyBzbyBjYWxsZWQgIjUyOEIiIHZhcmlhbnQgdXRpbGl6aW5nIGFkZGl0aW9uYWwKIyAyNTYrMTYgYnl0ZXMgb2YgcGVyLWtleSBzdG9yYWdlIFsrNTEyIGJ5dGVzIHNoYXJlZCB0YWJsZV0uCiMgUGVyZm9ybWFuY2UgcmVzdWx0cyBhcmUgZm9yIHRoaXMgc3RyZWFtZWQgR0hBU0ggc3Vicm91dGluZSBhbmQgYXJlCiMgZXhwcmVzc2VkIGluIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUsIGxlc3MgaXMgYmV0dGVyOgojCiMJCWdjYyAzLjQueCgqKQlhc3NlbWJsZXIKIwojIFA0CQkyOC42CQkxNC4wCQkrMTAwJQojIE9wdGVyb24JMTkuMwkJNy43CQkrMTUwJQojIENvcmUyCQkxNy44CQk4LjEoKiopCQkrMTIwJQojIEF0b20JCTMxLjYJCTE2LjgJCSs4OCUKIyBWSUEgTmFubwkyMS44CQkxMC4xCQkrMTE1JQojCiMgKCopCWNvbXBhcmlzb24gaXMgbm90IGNvbXBsZXRlbHkgZmFpciwgYmVjYXVzZSBDIHJlc3VsdHMgYXJlCiMJZm9yIHZhbmlsbGEgIjI1NkIiIGltcGxlbWVudGF0aW9uLCB3aGlsZSBhc3NlbWJsZXIgcmVzdWx0cwojCWFyZSBmb3IgIjUyOEIiOy0pCiMgKCoqKQlpdCdzIG15c3RlcnkgW3RvIG1lXSB3aHkgQ29yZTIgcmVzdWx0IGlzIG5vdCBzYW1lIGFzIGZvcgojCU9wdGVyb247CgojIE1heSAyMDEwCiMKIyBBZGQgUENMTVVMUURRIHZlcnNpb24gcGVyZm9ybWluZyBhdCAyLjAyIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUuCiMgU2VlIGdoYXNoLXg4Ni5wbCBmb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhbmQgZGV0YWlscyBhYm91dCBjb2RpbmcKIyB0ZWNobmlxdWVzLgojCiMgU3BlY2lhbCB0aGFua3MgdG8gRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBmb3IKIyBwcm92aWRpbmcgYWNjZXNzIHRvIGEgV2VzdG1lcmUtYmFzZWQgc3lzdGVtIG9uIGJlaGFsZiBvZiBJbnRlbAojIE9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudHJlLgoKIyBEZWNlbWJlciAyMDEyCiMKIyBPdmVyaGF1bDogYWdncmVnYXRlIEthcmF0c3ViYSBwb3N0LXByb2Nlc3NpbmcsIGltcHJvdmUgSUxQIGluCiMgcmVkdWN0aW9uX2FsZzksIGluY3JlYXNlIHJlZHVjdGlvbiBhZ2dyZWdhdGUgZmFjdG9yIHRvIDR4LiBBcyBmb3IKIyB0aGUgbGF0dGVyLiBnaGFzaC14ODYucGwgZGlzY3Vzc2VzIHRoYXQgaXQgbWFrZXMgbGVzc2VyIHNlbnNlIHRvCiMgaW5jcmVhc2UgYWdncmVnYXRlIGZhY3Rvci4gVGhlbiB3aHkgaW5jcmVhc2UgaGVyZT8gQ3JpdGljYWwgcGF0aAojIGNvbnNpc3RzIG9mIDMgaW5kZXBlbmRlbnQgcGNsbXVscWRxIGluc3RydWN0aW9ucywgS2FyYXRzdWJhIHBvc3QtCiMgcHJvY2Vzc2luZyBhbmQgcmVkdWN0aW9uLiAiT24gdG9wIiBvZiB0aGlzIHdlIGxheSBkb3duIGFnZ3JlZ2F0ZWQKIyBtdWx0aXBsaWNhdGlvbiBvcGVyYXRpb25zLCB0cmlwbGV0cyBvZiBpbmRlcGVuZGVudCBwY2xtdWxxZHEncy4gQXMKIyBpc3N1ZSByYXRlIGZvciBwY2xtdWxxZHEgaXMgbGltaXRlZCwgaXQgbWFrZXMgbGVzc2VyIHNlbnNlIHRvCiMgYWdncmVnYXRlIG1vcmUgbXVsdGlwbGljYXRpb25zIHRoYW4gaXQgdGFrZXMgdG8gcGVyZm9ybSByZW1haW5pbmcKIyBub24tbXVsdGlwbGljYXRpb24gb3BlcmF0aW9ucy4gMnggaXMgbmVhci1vcHRpbWFsIGNvZWZmaWNpZW50IGZvcgojIGNvbnRlbXBvcmFyeSBJbnRlbCBDUFVzICh0aGVyZWZvcmUgbW9kZXN0IGltcHJvdmVtZW50IGNvZWZmaWNpZW50KSwKIyBidXQgbm90IGZvciBCdWxsZG96ZXIuIExhdHRlciBpcyBiZWNhdXNlIGxvZ2ljYWwgU0lNRCBvcGVyYXRpb25zCiMgYXJlIHR3aWNlIGFzIHNsb3cgaW4gY29tcGFyaXNvbiB0byBJbnRlbCwgc28gdGhhdCBjcml0aWNhbCBwYXRoIGlzCiMgbG9uZ2VyLiBBIENQVSB3aXRoIGhpZ2hlciBwY2xtdWxxZHEgaXNzdWUgcmF0ZSB3b3VsZCBhbHNvIGJlbmVmaXQKIyBmcm9tIGhpZ2hlciBhZ2dyZWdhdGUgZmFjdG9yLi4uCiMKIyBXZXN0bWVyZQkxLjc4KCsxMyUpCiMgU2FuZHkgQnJpZGdlCTEuODAoKzglKQojIEl2eSBCcmlkZ2UJMS44MCgrNyUpCiMgSGFzd2VsbAkwLjU1KCs5MyUpIChpZiBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IEFWWCkKIyBCcm9hZHdlbGwJMC40NSgrMTEwJSkoaWYgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBBVlgpCiMgQnVsbGRvemVyCTEuNDkoKzI3JSkKIyBTaWx2ZXJtb250CTIuODgoKzEzJSkKCiMgTWFyY2ggMjAxMwojCiMgLi4uIDh4IGFnZ3JlZ2F0ZSBmYWN0b3IgQVZYIGNvZGUgcGF0aCBpcyB1c2luZyByZWR1Y3Rpb24gYWxnb3JpdGhtCiMgc3VnZ2VzdGVkIGJ5IFNoYXkgR3Vlcm9uWzFdLiBFdmVuIHRob3VnaCBjb250ZW1wb3JhcnkgQVZYLWNhcGFibGUKIyBDUFVzIHN1Y2ggYXMgU2FuZHkgYW5kIEl2eSBCcmlkZ2UgY2FuIGV4ZWN1dGUgaXQsIHRoZSBjb2RlIHBlcmZvcm1zCiMgc3ViLW9wdGltYWxseSBpbiBjb21wYXJpc29uIHRvIGFib3ZlIG1lbnRpb25lZCB2ZXJzaW9uLiBCdXQgdGhhbmtzCiMgdG8gSWx5YSBBbGJyZWtodCBhbmQgTWF4IExvY2t0eXVraGluIG9mIEludGVsIENvcnAuIHdlIGtuZXcgdGhhdAojIGl0IHBlcmZvcm1zIGluIDAuNDEgY3ljbGVzIHBlciBieXRlIG9uIEhhc3dlbGwgcHJvY2Vzc29yLCBhbmQgaW4KIyAwLjI5IG9uIEJyb2Fkd2VsbC4KIwojIFsxXSBodHRwOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0yOTAwJnVzZXI9Z3Vlc3QmcGFzcz1ndWVzdAoKJGZsYXZvdXIgPSBzaGlmdDsKJG91dHB1dCAgPSBzaGlmdDsKaWYgKCRmbGF2b3VyID1+IC9cLi8pIHsgJG91dHB1dCA9ICRmbGF2b3VyOyB1bmRlZiAkZmxhdm91cjsgfQoKJHdpbjY0PTA7ICR3aW42ND0xIGlmICgkZmxhdm91ciA9fiAvW25tXWFzbXxtaW5ndzY0LyB8fCAkb3V0cHV0ID1+IC9cLmFzbSQvKTsKCiQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CiggJHhsYXRlPSIke2Rpcn14ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgooICR4bGF0ZT0iJHtkaXJ9Li4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCmRpZSAiY2FuJ3QgbG9jYXRlIHg4Nl82NC14bGF0ZS5wbCI7CgppZiAoYCRFTlZ7Q0N9IC1XYSwtdiAtYyAtbyAvZGV2L251bGwgLXggYXNzZW1ibGVyIC9kZXYvbnVsbCAyPiYxYAoJCT1+IC9HTlUgYXNzZW1ibGVyIHZlcnNpb24gKFsyLTldXC5bMC05XSspLykgewoJJGF2eCA9ICgkMT49Mi4xOSkgKyAoJDE+PTIuMjIpOwp9CgppZiAoISRhdnggJiYgJHdpbjY0ICYmICgkZmxhdm91ciA9fiAvbmFzbS8gfHwgJEVOVntBU019ID1+IC9uYXNtLykgJiYKCSAgICBgbmFzbSAtdiAyPiYxYCA9fiAvTkFTTSB2ZXJzaW9uIChbMi05XVwuWzAtOV0rKS8pIHsKCSRhdnggPSAoJDE+PTIuMDkpICsgKCQxPj0yLjEwKTsKfQoKaWYgKCEkYXZ4ICYmICR3aW42NCAmJiAoJGZsYXZvdXIgPX4gL21hc20vIHx8ICRFTlZ7QVNNfSA9fiAvbWw2NC8pICYmCgkgICAgYG1sNjQgMj4mMWAgPX4gL1ZlcnNpb24gKFswLTldKylcLi8pIHsKCSRhdnggPSAoJDE+PTEwKSArICgkMT49MTEpOwp9CgppZiAoISRhdnggJiYgYCRFTlZ7Q0N9IC12IDI+JjFgID1+IC8oXmNsYW5nIHZlcnNpb258YmFzZWQgb24gTExWTSkgKFszLTldXC5bMC05XSspLykgewoJJGF2eCA9ICgkMj49My4wKSArICgkMj4zLjApOwp9CgpvcGVuIE9VVCwifCBcIiReWFwiICR4bGF0ZSAkZmxhdm91ciAkb3V0cHV0IjsKKlNURE9VVD0qT1VUOwoKJGRvNHhhZ2dyPTE7CgojIGNvbW1vbiByZWdpc3RlciBsYXlvdXQKJG5sbz0iJXJheCI7CiRuaGk9IiVyYngiOwokWmxvPSIlcjgiOwokWmhpPSIlcjkiOwokdG1wPSIlcjEwIjsKJHJlbV80Yml0ID0gIiVyMTEiOwoKJFhpPSIlcmRpIjsKJEh0Ymw9IiVyc2kiOwoKIyBwZXItZnVuY3Rpb24gcmVnaXN0ZXIgbGF5b3V0CiRjbnQ9IiVyY3giOwokcmVtPSIlcmR4IjsKCnN1YiBMQigpIHsgbXkgJHI9c2hpZnQ7ICRyID1+IHMvJVtlcl0oW2EtZF0peC8lXDFsLwlvcgoJCQkkciA9fiBzLyVbZXJdKFtzZF1pKS8lXDFsLwlvcgoJCQkkciA9fiBzLyVbZXJdKGJwKS8lXDFsLwkJb3IKCQkJJHIgPX4gcy8lKHJbMC05XSspW2RdPy8lXDFiLzsgICAkcjsgfQoKc3ViIEFVVE9MT0FEKCkJCSMgdGh1bmsgW3NpbXBsaWZpZWRdIDMyLWJpdCBzdHlsZSBwZXJsYXNtCnsgbXkgJG9wY29kZSA9ICRBVVRPTE9BRDsgJG9wY29kZSA9fiBzLy4qOjovLzsKICBteSAkYXJnID0gcG9wOwogICAgJGFyZyA9ICJcJCRhcmciIGlmICgkYXJnKjEgZXEgJGFyZyk7CiAgICAkY29kZSAuPSAiXHQkb3Bjb2RlXHQiLmpvaW4oJywnLCRhcmcscmV2ZXJzZSBAXykuIlxuIjsKfQoMCnsgbXkgJE47CiAgc3ViIGxvb3AoKSB7CiAgbXkgJGlucCA9IHNoaWZ0OwoKCSROKys7CiRjb2RlLj08PF9fXzsKCXhvcgkkbmxvLCRubG8KCXhvcgkkbmhpLCRuaGkKCW1vdglgJkxCKCIkWmxvIilgLGAmTEIoIiRubG8iKWAKCW1vdglgJkxCKCIkWmxvIilgLGAmTEIoIiRuaGkiKWAKCXNobAlcJDQsYCZMQigiJG5sbyIpYAoJbW92CVwkMTQsJGNudAoJbW92CTgoJEh0YmwsJG5sbyksJFpsbwoJbW92CSgkSHRibCwkbmxvKSwkWmhpCglhbmQJXCQweGYwLGAmTEIoIiRuaGkiKWAKCW1vdgkkWmxvLCRyZW0KCWptcAkuTG9vcCROCgouYWxpZ24JMTYKLkxvb3AkTjoKCXNocglcJDQsJFpsbwoJYW5kCVwkMHhmLCRyZW0KCW1vdgkkWmhpLCR0bXAKCW1vdgkoJGlucCwkY250KSxgJkxCKCIkbmxvIilgCglzaHIJXCQ0LCRaaGkKCXhvcgk4KCRIdGJsLCRuaGkpLCRabG8KCXNobAlcJDYwLCR0bXAKCXhvcgkoJEh0YmwsJG5oaSksJFpoaQoJbW92CWAmTEIoIiRubG8iKWAsYCZMQigiJG5oaSIpYAoJeG9yCSgkcmVtXzRiaXQsJHJlbSw4KSwkWmhpCgltb3YJJFpsbywkcmVtCglzaGwJXCQ0LGAmTEIoIiRubG8iKWAKCXhvcgkkdG1wLCRabG8KCWRlYwkkY250CglqcwkuTGJyZWFrJE4KCglzaHIJXCQ0LCRabG8KCWFuZAlcJDB4ZiwkcmVtCgltb3YJJFpoaSwkdG1wCglzaHIJXCQ0LCRaaGkKCXhvcgk4KCRIdGJsLCRubG8pLCRabG8KCXNobAlcJDYwLCR0bXAKCXhvcgkoJEh0YmwsJG5sbyksJFpoaQoJYW5kCVwkMHhmMCxgJkxCKCIkbmhpIilgCgl4b3IJKCRyZW1fNGJpdCwkcmVtLDgpLCRaaGkKCW1vdgkkWmxvLCRyZW0KCXhvcgkkdG1wLCRabG8KCWptcAkuTG9vcCROCgouYWxpZ24JMTYKLkxicmVhayROOgoJc2hyCVwkNCwkWmxvCglhbmQJXCQweGYsJHJlbQoJbW92CSRaaGksJHRtcAoJc2hyCVwkNCwkWmhpCgl4b3IJOCgkSHRibCwkbmxvKSwkWmxvCglzaGwJXCQ2MCwkdG1wCgl4b3IJKCRIdGJsLCRubG8pLCRaaGkKCWFuZAlcJDB4ZjAsYCZMQigiJG5oaSIpYAoJeG9yCSgkcmVtXzRiaXQsJHJlbSw4KSwkWmhpCgltb3YJJFpsbywkcmVtCgl4b3IJJHRtcCwkWmxvCgoJc2hyCVwkNCwkWmxvCglhbmQJXCQweGYsJHJlbQoJbW92CSRaaGksJHRtcAoJc2hyCVwkNCwkWmhpCgl4b3IJOCgkSHRibCwkbmhpKSwkWmxvCglzaGwJXCQ2MCwkdG1wCgl4b3IJKCRIdGJsLCRuaGkpLCRaaGkKCXhvcgkkdG1wLCRabG8KCXhvcgkoJHJlbV80Yml0LCRyZW0sOCksJFpoaQoKCWJzd2FwCSRabG8KCWJzd2FwCSRaaGkKX19fCn19CgokY29kZT08PF9fXzsKLnRleHQKLmV4dGVybglPUEVOU1NMX2lhMzJjYXBfUAoKLmdsb2JsCWdjbV9nbXVsdF80Yml0Ci50eXBlCWdjbV9nbXVsdF80Yml0LFxAZnVuY3Rpb24sMgouaGlkZGVuCWdjbV9nbXVsdF80Yml0Ci5hbGlnbgkxNgpnY21fZ211bHRfNGJpdDoKCXB1c2gJJXJieAoJcHVzaAklcmJwCQkjICVyYnAgYW5kICVyMTIgYXJlIHB1c2hlZCBleGNsdXNpdmVseSBpbgoJcHVzaAklcjEyCQkjIG9yZGVyIHRvIHJldXNlIFdpbjY0IGV4Y2VwdGlvbiBoYW5kbGVyLi4uCi5MZ211bHRfcHJvbG9ndWU6CgoJbW92emIJMTUoJFhpKSwkWmxvCglsZWEJLkxyZW1fNGJpdCglcmlwKSwkcmVtXzRiaXQKX19fCgkmbG9vcAkoJFhpKTsKJGNvZGUuPTw8X19fOwoJbW92CSRabG8sOCgkWGkpCgltb3YJJFpoaSwoJFhpKQoKCW1vdgkxNiglcnNwKSwlcmJ4CglsZWEJMjQoJXJzcCksJXJzcAouTGdtdWx0X2VwaWxvZ3VlOgoJcmV0Ci5zaXplCWdjbV9nbXVsdF80Yml0LC4tZ2NtX2dtdWx0XzRiaXQKX19fCgwKIyBwZXItZnVuY3Rpb24gcmVnaXN0ZXIgbGF5b3V0CiRpbnA9IiVyZHgiOwokbGVuPSIlcmN4IjsKJHJlbV84Yml0PSRyZW1fNGJpdDsKCiRjb2RlLj08PF9fXzsKLmdsb2JsCWdjbV9naGFzaF80Yml0Ci50eXBlCWdjbV9naGFzaF80Yml0LFxAZnVuY3Rpb24sNAouaGlkZGVuCWdjbV9naGFzaF80Yml0Ci5hbGlnbgkxNgpnY21fZ2hhc2hfNGJpdDoKCXB1c2gJJXJieAoJcHVzaAklcmJwCglwdXNoCSVyMTIKCXB1c2gJJXIxMwoJcHVzaAklcjE0CglwdXNoCSVyMTUKCXN1YglcJDI4MCwlcnNwCi5MZ2hhc2hfcHJvbG9ndWU6Cgltb3YJJGlucCwlcjE0CQkjIHJlYXNzaWduIGNvdXBsZSBvZiBhcmdzCgltb3YJJGxlbiwlcjE1Cl9fXwp7IG15ICRpbnA9IiVyMTQiOwogIG15ICRkYXQ9IiVlZHgiOwogIG15ICRsZW49IiVyMTUiOwogIG15IEBuaGk9KCIlZWJ4IiwiJWVjeCIpOwogIG15IEByZW09KCIlcjEyIiwiJXIxMyIpOwogIG15ICRIc2hyND0iJXJicCI7CgoJJnN1YgkoJEh0YmwsLTEyOCk7CQkjIHNpemUgb3B0aW1pemF0aW9uCgkmbGVhCSgkSHNocjQsIjE2KzEyOCglcnNwKSIpOwoJeyBteSBAbG8gPSgkbmxvLCRuaGkpOwogICAgICAgICAgbXkgQGhpID0oJFpsbywkWmhpKTsKCgkgICZ4b3IJKCRkYXQsJGRhdCk7CgkgIGZvciAoJGk9MCwkaj0tMjskaTwxODskaSsrLCRqKyspIHsKCSAgICAmbW92CSgiJGooJXJzcCkiLCZMQigkZGF0KSkJCWlmICgkaT4xKTsKCSAgICAmb3IJCSgkbG9bMF0sJHRtcCkJCQlpZiAoJGk+MSk7CgkgICAgJm1vdgkoJkxCKCRkYXQpLCZMQigkbG9bMV0pKQkJaWYgKCRpPjAgJiYgJGk8MTcpOwoJICAgICZzaHIJKCRsb1sxXSw0KQkJCWlmICgkaT4wICYmICRpPDE3KTsKCSAgICAmbW92CSgkdG1wLCRoaVsxXSkJCQlpZiAoJGk+MCAmJiAkaTwxNyk7CgkgICAgJnNocgkoJGhpWzFdLDQpCQkJaWYgKCRpPjAgJiYgJGk8MTcpOwoJICAgICZtb3YJKCI4KiRqKCRIc2hyNCkiLCRoaVswXSkJCWlmICgkaT4xKTsKCSAgICAmbW92CSgkaGlbMF0sIjE2KiRpKzAtMTI4KCRIdGJsKSIpCWlmICgkaTwxNik7CgkgICAgJnNobAkoJkxCKCRkYXQpLDQpCQkJaWYgKCRpPjAgJiYgJGk8MTcpOwoJICAgICZtb3YJKCI4KiRqLTEyOCgkSHNocjQpIiwkbG9bMF0pCWlmICgkaT4xKTsKCSAgICAmbW92CSgkbG9bMF0sIjE2KiRpKzgtMTI4KCRIdGJsKSIpCWlmICgkaTwxNik7CgkgICAgJnNobAkoJHRtcCw2MCkJCQlpZiAoJGk+MCAmJiAkaTwxNyk7CgoJICAgIHB1c2gJKEBsbyxzaGlmdChAbG8pKTsKCSAgICBwdXNoCShAaGksc2hpZnQoQGhpKSk7CgkgIH0KCX0KCSZhZGQJKCRIdGJsLC0xMjgpOwoJJm1vdgkoJFpsbywiOCgkWGkpIik7CgkmbW92CSgkWmhpLCIwKCRYaSkiKTsKCSZhZGQJKCRsZW4sJGlucCk7CQkjIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiBkYXRhCgkmbGVhCSgkcmVtXzhiaXQsIi5McmVtXzhiaXQoJXJpcCkiKTsKCSZqbXAJKCIuTG91dGVyX2xvb3AiKTsKCiRjb2RlLj0iLmFsaWduCTE2XG4uTG91dGVyX2xvb3A6XG4iOwoJJnhvcgkoJFpoaSwiKCRpbnApIik7CgkmbW92CSgiJXJkeCIsIjgoJGlucCkiKTsKCSZsZWEJKCRpbnAsIjE2KCRpbnApIik7CgkmeG9yCSgiJXJkeCIsJFpsbyk7CgkmbW92CSgiKCRYaSkiLCRaaGkpOwoJJm1vdgkoIjgoJFhpKSIsIiVyZHgiKTsKCSZzaHIJKCIlcmR4IiwzMik7CgoJJnhvcgkoJG5sbywkbmxvKTsKCSZyb2wJKCRkYXQsOCk7CgkmbW92CSgmTEIoJG5sbyksJkxCKCRkYXQpKTsKCSZtb3Z6CSgkbmhpWzBdLCZMQigkZGF0KSk7Cgkmc2hsCSgmTEIoJG5sbyksNCk7Cgkmc2hyCSgkbmhpWzBdLDQpOwoKCWZvciAoJGo9MTEsJGk9MDskaTwxNTskaSsrKSB7CgkgICAgJnJvbAkoJGRhdCw4KTsKCSAgICAmeG9yCSgkWmxvLCI4KCRIdGJsLCRubG8pIikJCQlpZiAoJGk+MCk7CgkgICAgJnhvcgkoJFpoaSwiKCRIdGJsLCRubG8pIikJCQlpZiAoJGk+MCk7CgkgICAgJm1vdgkoJFpsbywiOCgkSHRibCwkbmxvKSIpCQkJaWYgKCRpPT0wKTsKCSAgICAmbW92CSgkWmhpLCIoJEh0YmwsJG5sbykiKQkJCWlmICgkaT09MCk7CgoJICAgICZtb3YJKCZMQigkbmxvKSwmTEIoJGRhdCkpOwoJICAgICZ4b3IJKCRabG8sJHRtcCkJCQkJaWYgKCRpPjApOwoJICAgICZtb3Z6dwkoJHJlbVsxXSwiKCRyZW1fOGJpdCwkcmVtWzFdLDIpIikJaWYgKCRpPjApOwoKCSAgICAmbW92egkoJG5oaVsxXSwmTEIoJGRhdCkpOwoJICAgICZzaGwJKCZMQigkbmxvKSw0KTsKCSAgICAmbW92emIJKCRyZW1bMF0sIiglcnNwLCRuaGlbMF0pIik7CgoJICAgICZzaHIJKCRuaGlbMV0sNCkJCQkJaWYgKCRpPDE0KTsKCSAgICAmYW5kCSgkbmhpWzFdLDB4ZjApCQkJCWlmICgkaT09MTQpOwoJICAgICZzaGwJKCRyZW1bMV0sNDgpCQkJCWlmICgkaT4wKTsKCSAgICAmeG9yCSgkcmVtWzBdLCRabG8pOwoKCSAgICAmbW92CSgkdG1wLCRaaGkpOwoJICAgICZ4b3IJKCRaaGksJHJlbVsxXSkJCQkJaWYgKCRpPjApOwoJICAgICZzaHIJKCRabG8sOCk7CgoJICAgICZtb3Z6CSgkcmVtWzBdLCZMQigkcmVtWzBdKSk7CgkgICAgJm1vdgkoJGRhdCwiJGooJFhpKSIpCQkJaWYgKC0tJGolND09MCk7CgkgICAgJnNocgkoJFpoaSw4KTsKCgkgICAgJnhvcgkoJFpsbywiLTEyOCgkSHNocjQsJG5oaVswXSw4KSIpOwoJICAgICZzaGwJKCR0bXAsNTYpOwoJICAgICZ4b3IJKCRaaGksIigkSHNocjQsJG5oaVswXSw4KSIpOwoKCSAgICB1bnNoaWZ0CShAbmhpLHBvcChAbmhpKSk7CQkjICJyb3RhdGUiIHJlZ2lzdGVycwoJICAgIHVuc2hpZnQJKEByZW0scG9wKEByZW0pKTsKCX0KCSZtb3Z6dwkoJHJlbVsxXSwiKCRyZW1fOGJpdCwkcmVtWzFdLDIpIik7CgkmeG9yCSgkWmxvLCI4KCRIdGJsLCRubG8pIik7CgkmeG9yCSgkWmhpLCIoJEh0YmwsJG5sbykiKTsKCgkmc2hsCSgkcmVtWzFdLDQ4KTsKCSZ4b3IJKCRabG8sJHRtcCk7CgoJJnhvcgkoJFpoaSwkcmVtWzFdKTsKCSZtb3Z6CSgkcmVtWzBdLCZMQigkWmxvKSk7Cgkmc2hyCSgkWmxvLDQpOwoKCSZtb3YJKCR0bXAsJFpoaSk7Cgkmc2hsCSgmTEIoJHJlbVswXSksNCk7Cgkmc2hyCSgkWmhpLDQpOwoKCSZ4b3IJKCRabG8sIjgoJEh0YmwsJG5oaVswXSkiKTsKCSZtb3Z6dwkoJHJlbVswXSwiKCRyZW1fOGJpdCwkcmVtWzBdLDIpIik7Cgkmc2hsCSgkdG1wLDYwKTsKCgkmeG9yCSgkWmhpLCIoJEh0YmwsJG5oaVswXSkiKTsKCSZ4b3IJKCRabG8sJHRtcCk7Cgkmc2hsCSgkcmVtWzBdLDQ4KTsKCgkmYnN3YXAJKCRabG8pOwoJJnhvcgkoJFpoaSwkcmVtWzBdKTsKCgkmYnN3YXAJKCRaaGkpOwoJJmNtcAkoJGlucCwkbGVuKTsKCSZqYgkoIi5Mb3V0ZXJfbG9vcCIpOwp9CiRjb2RlLj08PF9fXzsKCW1vdgkkWmxvLDgoJFhpKQoJbW92CSRaaGksKCRYaSkKCglsZWEJMjgwKCVyc3ApLCVyc2kKCW1vdgkwKCVyc2kpLCVyMTUKCW1vdgk4KCVyc2kpLCVyMTQKCW1vdgkxNiglcnNpKSwlcjEzCgltb3YJMjQoJXJzaSksJXIxMgoJbW92CTMyKCVyc2kpLCVyYnAKCW1vdgk0MCglcnNpKSwlcmJ4CglsZWEJNDgoJXJzaSksJXJzcAouTGdoYXNoX2VwaWxvZ3VlOgoJcmV0Ci5zaXplCWdjbV9naGFzaF80Yml0LC4tZ2NtX2doYXNoXzRiaXQKX19fCgwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFBDTE1VTFFEUSB2ZXJzaW9uLgoKQF80YXJncz0kd2luNjQ/CSgiJXJjeCIsIiVyZHgiLCIlcjgiLCAiJXI5IikgOgkjIFdpbjY0IG9yZGVyCgkJKCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4Iik7CSMgVW5peCBvcmRlcgoKKCRYaSwkWGhpKT0oIiV4bW0wIiwiJXhtbTEiKTsJJEhrZXk9IiV4bW0yIjsKKCRUMSwkVDIsJFQzKT0oIiV4bW0zIiwiJXhtbTQiLCIleG1tNSIpOwoKc3ViIGNsbXVsNjR4NjRfVDIgewkjIG1pbmltYWwgcmVnaXN0ZXIgcHJlc3N1cmUKbXkgKCRYaGksJFhpLCRIa2V5LCRISyk9QF87CgppZiAoIWRlZmluZWQoJEhLKSkgewkkSEsgPSAkVDI7CiRjb2RlLj08PF9fXzsKCW1vdmRxYQkJJFhpLCRYaGkJCSMKCXBzaHVmZAkJXCQwYjAxMDAxMTEwLCRYaSwkVDEKCXBzaHVmZAkJXCQwYjAxMDAxMTEwLCRIa2V5LCRUMgoJcHhvcgkJJFhpLCRUMQkJCSMKCXB4b3IJCSRIa2V5LCRUMgpfX18KfSBlbHNlIHsKJGNvZGUuPTw8X19fOwoJbW92ZHFhCQkkWGksJFhoaQkJIwoJcHNodWZkCQlcJDBiMDEwMDExMTAsJFhpLCRUMQoJcHhvcgkJJFhpLCRUMQkJCSMKX19fCn0KJGNvZGUuPTw8X19fOwoJcGNsbXVscWRxCVwkMHgwMCwkSGtleSwkWGkJIyMjIyMjIwoJcGNsbXVscWRxCVwkMHgxMSwkSGtleSwkWGhpCSMjIyMjIyMKCXBjbG11bHFkcQlcJDB4MDAsJEhLLCRUMQkJIyMjIyMjIwoJcHhvcgkJJFhpLCRUMQkJCSMKCXB4b3IJCSRYaGksJFQxCQkjCgoJbW92ZHFhCQkkVDEsJFQyCQkJIwoJcHNybGRxCQlcJDgsJFQxCglwc2xsZHEJCVwkOCwkVDIJCQkjCglweG9yCQkkVDEsJFhoaQoJcHhvcgkJJFQyLCRYaQkJCSMKX19fCn0KCnN1YiByZWR1Y3Rpb25fYWxnOSB7CSMgMTcvMTEgdGltZXMgZmFzdGVyIHRoYW4gSW50ZWwgdmVyc2lvbgpteSAoJFhoaSwkWGkpID0gQF87CgokY29kZS49PDxfX187CgkjIDFzdCBwaGFzZQoJbW92ZHFhCQkkWGksJFQyCQkJIwoJbW92ZHFhCQkkWGksJFQxCglwc2xscQkJXCQ1LCRYaQoJcHhvcgkJJFhpLCRUMQkJCSMKCXBzbGxxCQlcJDEsJFhpCglweG9yCQkkVDEsJFhpCQkJIwoJcHNsbHEJCVwkNTcsJFhpCQkjCgltb3ZkcWEJCSRYaSwkVDEJCQkjCglwc2xsZHEJCVwkOCwkWGkKCXBzcmxkcQkJXCQ4LCRUMQkJCSMJCglweG9yCQkkVDIsJFhpCglweG9yCQkkVDEsJFhoaQkJIwoKCSMgMm5kIHBoYXNlCgltb3ZkcWEJCSRYaSwkVDIKCXBzcmxxCQlcJDEsJFhpCglweG9yCQkkVDIsJFhoaQkJIwoJcHhvcgkJJFhpLCRUMgoJcHNybHEJCVwkNSwkWGkKCXB4b3IJCSRUMiwkWGkJCQkjCglwc3JscQkJXCQxLCRYaQkJCSMKCXB4b3IJCSRYaGksJFhpCQkjCl9fXwp9CgwKeyBteSAoJEh0YmwsJFhpcCk9QF80YXJnczsKICBteSAkSEs9IiV4bW02IjsKCiRjb2RlLj08PF9fXzsKLmdsb2JsCWdjbV9pbml0X2NsbXVsCi50eXBlCWdjbV9pbml0X2NsbXVsLFxAYWJpLW9tbmlwb3RlbnQKLmhpZGRlbglnY21faW5pdF9jbG11bAouYWxpZ24JMTYKZ2NtX2luaXRfY2xtdWw6Ci5MX2luaXRfY2xtdWw6Cl9fXwokY29kZS49PDxfX18gaWYgKCR3aW42NCk7Ci5MU0VIX2JlZ2luX2djbV9pbml0X2NsbXVsOgoJIyBJIGNhbid0IHRydXN0IGFzc2VtYmxlciB0byB1c2Ugc3BlY2lmaWMgZW5jb2Rpbmc6LSgKCS5ieXRlCTB4NDgsMHg4MywweGVjLDB4MTgJCSNzdWIJJDB4MTgsJXJzcAoJLmJ5dGUJMHgwZiwweDI5LDB4MzQsMHgyNAkJI21vdmFwcwkleG1tNiwoJXJzcCkKX19fCiRjb2RlLj08PF9fXzsKCW1vdmRxdQkJKCRYaXApLCRIa2V5Cglwc2h1ZmQJCVwkMGIwMTAwMTExMCwkSGtleSwkSGtleQkjIGR3b3JkIHN3YXAKCgkjIDw8MSB0d2lzdAoJcHNodWZkCQlcJDBiMTExMTExMTEsJEhrZXksJFQyCSMgYnJvYWRjYXN0IHVwcGVybW9zdCBkd29yZAoJbW92ZHFhCQkkSGtleSwkVDEKCXBzbGxxCQlcJDEsJEhrZXkKCXB4b3IJCSRUMywkVDMJCQkjCglwc3JscQkJXCQ2MywkVDEKCXBjbXBndGQJCSRUMiwkVDMJCQkjIGJyb2FkY2FzdCBjYXJyeSBiaXQKCXBzbGxkcQkJXCQ4LCRUMQoJcG9yCQkkVDEsJEhrZXkJCSMgSDw8PTEKCgkjIG1hZ2ljIHJlZHVjdGlvbgoJcGFuZAkJLkwweDFjMl9wb2x5bm9taWFsKCVyaXApLCRUMwoJcHhvcgkJJFQzLCRIa2V5CQkjIGlmKGNhcnJ5KSBIXj0weDFjMl9wb2x5bm9taWFsCgoJIyBjYWxjdWxhdGUgSF4yCglwc2h1ZmQJCVwkMGIwMTAwMTExMCwkSGtleSwkSEsKCW1vdmRxYQkJJEhrZXksJFhpCglweG9yCQkkSGtleSwkSEsKX19fCgkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXksJEhLKTsKCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOwokY29kZS49PDxfX187Cglwc2h1ZmQJCVwkMGIwMTAwMTExMCwkSGtleSwkVDEKCXBzaHVmZAkJXCQwYjAxMDAxMTEwLCRYaSwkVDIKCXB4b3IJCSRIa2V5LCRUMQkJIyBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKCW1vdmRxdQkJJEhrZXksMHgwMCgkSHRibCkJIyBzYXZlIEgKCXB4b3IJCSRYaSwkVDIJCQkjIEthcmF0c3ViYSBwcmUtcHJvY2Vzc2luZwoJbW92ZHF1CQkkWGksMHgxMCgkSHRibCkJCSMgc2F2ZSBIXjIKCXBhbGlnbnIJCVwkOCwkVDEsJFQyCQkjIGxvdyBwYXJ0IGlzIEgubG9eSC5oaS4uLgoJbW92ZHF1CQkkVDIsMHgyMCgkSHRibCkJCSMgc2F2ZSBLYXJhdHN1YmEgInNhbHQiCl9fXwppZiAoJGRvNHhhZ2dyKSB7CgkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXksJEhLKTsJIyBIXjMKCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOwokY29kZS49PDxfX187Cgltb3ZkcWEJCSRYaSwkVDMKX19fCgkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXksJEhLKTsJIyBIXjQKCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOwokY29kZS49PDxfX187Cglwc2h1ZmQJCVwkMGIwMTAwMTExMCwkVDMsJFQxCglwc2h1ZmQJCVwkMGIwMTAwMTExMCwkWGksJFQyCglweG9yCQkkVDMsJFQxCQkJIyBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKCW1vdmRxdQkJJFQzLDB4MzAoJEh0YmwpCQkjIHNhdmUgSF4zCglweG9yCQkkWGksJFQyCQkJIyBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKCW1vdmRxdQkJJFhpLDB4NDAoJEh0YmwpCQkjIHNhdmUgSF40CglwYWxpZ25yCQlcJDgsJFQxLCRUMgkJIyBsb3cgcGFydCBpcyBIXjMubG9eSF4zLmhpLi4uCgltb3ZkcXUJCSRUMiwweDUwKCRIdGJsKQkJIyBzYXZlIEthcmF0c3ViYSAic2FsdCIKX19fCn0KJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOwoJbW92YXBzCSglcnNwKSwleG1tNgoJbGVhCTB4MTgoJXJzcCksJXJzcAouTFNFSF9lbmRfZ2NtX2luaXRfY2xtdWw6Cl9fXwokY29kZS49PDxfX187CglyZXQKLnNpemUJZ2NtX2luaXRfY2xtdWwsLi1nY21faW5pdF9jbG11bApfX18KfQoKeyBteSAoJFhpcCwkSHRibCk9QF80YXJnczsKCiRjb2RlLj08PF9fXzsKLmdsb2JsCWdjbV9nbXVsdF9jbG11bAoudHlwZQlnY21fZ211bHRfY2xtdWwsXEBhYmktb21uaXBvdGVudAouaGlkZGVuCWdjbV9nbXVsdF9jbG11bAouYWxpZ24JMTYKZ2NtX2dtdWx0X2NsbXVsOgouTF9nbXVsdF9jbG11bDoKCW1vdmRxdQkJKCRYaXApLCRYaQoJbW92ZHFhCQkuTGJzd2FwX21hc2soJXJpcCksJFQzCgltb3ZkcXUJCSgkSHRibCksJEhrZXkKCW1vdmRxdQkJMHgyMCgkSHRibCksJFQyCglwc2h1ZmIJCSRUMywkWGkKX19fCgkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXksJFQyKTsKJGNvZGUuPTw8X19fIGlmICgwIHx8ICgmcmVkdWN0aW9uX2FsZzkoJFhoaSwkWGkpJiYwKSk7CgkjIGV4cGVyaW1lbnRhbCBhbHRlcm5hdGl2ZS4gc3BlY2lhbCB0aGluZyBhYm91dCBpcyB0aGF0IHRoZXJlCgkjIG5vIGRlcGVuZGVuY3kgYmV0d2VlbiB0aGUgdHdvIG11bHRpcGxpY2F0aW9ucy4uLiAKCW1vdgkJXCRgMHhFMTw8MWAsJWVheAoJbW92CQlcJDB4QTA0MDYwODAyMEMwRTAwMCwlcjEwCSMgKCg3Li4wKbcweEUwKSYweGZmCgltb3YJCVwkMHgwNywlcjExZAoJbW92cQkJJXJheCwkVDEKCW1vdnEJCSVyMTAsJFQyCgltb3ZxCQklcjExLCRUMwkJIyBib3Jyb3cgJFQzCglwYW5kCQkkWGksJFQzCglwc2h1ZmIJCSRUMywkVDIJCQkjICgkWGkmNym3MHhFMAoJbW92cQkJJXJheCwkVDMKCXBjbG11bHFkcQlcJDB4MDAsJFhpLCRUMQkJIyC3KDB4RTE8PDEpCglweG9yCQkkWGksJFQyCglwc2xsZHEJCVwkMTUsJFQyCglwYWRkZAkJJFQyLCRUMgkJCSMgPDwoNjQrNTYrMSkKCXB4b3IJCSRUMiwkWGkKCXBjbG11bHFkcQlcJDB4MDEsJFQzLCRYaQoJbW92ZHFhCQkuTGJzd2FwX21hc2soJXJpcCksJFQzCSMgcmVsb2FkICRUMwoJcHNybGRxCQlcJDEsJFQxCglweG9yCQkkVDEsJFhoaQoJcHNsbGRxCQlcJDcsJFhpCglweG9yCQkkWGhpLCRYaQpfX18KJGNvZGUuPTw8X19fOwoJcHNodWZiCQkkVDMsJFhpCgltb3ZkcXUJCSRYaSwoJFhpcCkKCXJldAouc2l6ZQlnY21fZ211bHRfY2xtdWwsLi1nY21fZ211bHRfY2xtdWwKX19fCn0KDAp7IG15ICgkWGlwLCRIdGJsLCRpbnAsJGxlbik9QF80YXJnczsKICBteSAoJFhsbiwkWG1uLCRYaG4sJEhrZXkyLCRISykgPSBtYXAoIiV4bW0kXyIsKDMuLjcpKTsKICBteSAoJFQxLCRUMiwkVDMpPW1hcCgiJXhtbSRfIiwoOC4uMTApKTsKCiRjb2RlLj08PF9fXzsKLmdsb2JsCWdjbV9naGFzaF9jbG11bAoudHlwZQlnY21fZ2hhc2hfY2xtdWwsXEBhYmktb21uaXBvdGVudAouaGlkZGVuCWdjbV9naGFzaF9jbG11bAouYWxpZ24JMzIKZ2NtX2doYXNoX2NsbXVsOgouTF9naGFzaF9jbG11bDoKX19fCiRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKCWxlYQktMHg4OCglcnNwKSwlcmF4Ci5MU0VIX2JlZ2luX2djbV9naGFzaF9jbG11bDoKCSMgSSBjYW4ndCB0cnVzdCBhc3NlbWJsZXIgdG8gdXNlIHNwZWNpZmljIGVuY29kaW5nOi0oCgkuYnl0ZQkweDQ4LDB4OGQsMHg2MCwweGUwCQkjbGVhCS0weDIwKCVyYXgpLCVyc3AKCS5ieXRlCTB4MGYsMHgyOSwweDcwLDB4ZTAJCSNtb3ZhcHMJJXhtbTYsLTB4MjAoJXJheCkKCS5ieXRlCTB4MGYsMHgyOSwweDc4LDB4ZjAJCSNtb3ZhcHMJJXhtbTcsLTB4MTAoJXJheCkKCS5ieXRlCTB4NDQsMHgwZiwweDI5LDB4MDAJCSNtb3ZhcHMJJXhtbTgsMCglcmF4KQoJLmJ5dGUJMHg0NCwweDBmLDB4MjksMHg0OCwweDEwCSNtb3ZhcHMJJXhtbTksMHgxMCglcmF4KQoJLmJ5dGUJMHg0NCwweDBmLDB4MjksMHg1MCwweDIwCSNtb3ZhcHMJJXhtbTEwLDB4MjAoJXJheCkKCS5ieXRlCTB4NDQsMHgwZiwweDI5LDB4NTgsMHgzMAkjbW92YXBzCSV4bW0xMSwweDMwKCVyYXgpCgkuYnl0ZQkweDQ0LDB4MGYsMHgyOSwweDYwLDB4NDAJI21vdmFwcwkleG1tMTIsMHg0MCglcmF4KQoJLmJ5dGUJMHg0NCwweDBmLDB4MjksMHg2OCwweDUwCSNtb3ZhcHMJJXhtbTEzLDB4NTAoJXJheCkKCS5ieXRlCTB4NDQsMHgwZiwweDI5LDB4NzAsMHg2MAkjbW92YXBzCSV4bW0xNCwweDYwKCVyYXgpCgkuYnl0ZQkweDQ0LDB4MGYsMHgyOSwweDc4LDB4NzAJI21vdmFwcwkleG1tMTUsMHg3MCglcmF4KQpfX18KJGNvZGUuPTw8X19fOwoJbW92ZHFhCQkuTGJzd2FwX21hc2soJXJpcCksJFQzCgoJbW92ZHF1CQkoJFhpcCksJFhpCgltb3ZkcXUJCSgkSHRibCksJEhrZXkKCW1vdmRxdQkJMHgyMCgkSHRibCksJEhLCglwc2h1ZmIJCSRUMywkWGkKCglzdWIJCVwkMHgxMCwkbGVuCglqegkJLkxvZGRfdGFpbAoKCW1vdmRxdQkJMHgxMCgkSHRibCksJEhrZXkyCl9fXwppZiAoJGRvNHhhZ2dyKSB7Cm15ICgkWGwsJFhtLCRYaCwkSGtleTMsJEhrZXk0KT1tYXAoIiV4bW0kXyIsKDExLi4xNSkpOwoKJGNvZGUuPTw8X19fOwoJbW92CQlPUEVOU1NMX2lhMzJjYXBfUCs0KCVyaXApLCVlYXgKCWNtcAkJXCQweDMwLCRsZW4KCWpiCQkuTHNraXA0eAoKCWFuZAkJXCRgMTw8MjZ8MTw8MjJgLCVlYXgJIyBpc29sYXRlIE1PVkJFK1hTQVZFCgljbXAJCVwkYDE8PDIyYCwlZWF4CQkjIGNoZWNrIGZvciBNT1ZCRSB3aXRob3V0IFhTQVZFCglqZQkJLkxza2lwNHgKCglzdWIJCVwkMHgzMCwkbGVuCgltb3YJCVwkMHhBMDQwNjA4MDIwQzBFMDAwLCVyYXgJIyAoKDcuLjAptzB4RTApJjB4ZmYKCW1vdmRxdQkJMHgzMCgkSHRibCksJEhrZXkzCgltb3ZkcXUJCTB4NDAoJEh0YmwpLCRIa2V5NAoKCSMjIyMjIyMKCSMgWGkrNCA9WyhIKklpKzMpICsgKEheMipJaSsyKSArIChIXjMqSWkrMSkgKyBIXjQqKElpK1hpKV0gbW9kIFAKCSMKCW1vdmRxdQkJMHgzMCgkaW5wKSwkWGxuCgkgbW92ZHF1CQkweDIwKCRpbnApLCRYbAoJcHNodWZiCQkkVDMsJFhsbgoJIHBzaHVmYgkJJFQzLCRYbAoJbW92ZHFhCQkkWGxuLCRYaG4KCXBzaHVmZAkJXCQwYjAxMDAxMTEwLCRYbG4sJFhtbgoJcHhvcgkJJFhsbiwkWG1uCglwY2xtdWxxZHEJXCQweDAwLCRIa2V5LCRYbG4KCXBjbG11bHFkcQlcJDB4MTEsJEhrZXksJFhobgoJcGNsbXVscWRxCVwkMHgwMCwkSEssJFhtbgoKCW1vdmRxYQkJJFhsLCRYaAoJcHNodWZkCQlcJDBiMDEwMDExMTAsJFhsLCRYbQoJcHhvcgkJJFhsLCRYbQoJcGNsbXVscWRxCVwkMHgwMCwkSGtleTIsJFhsCglwY2xtdWxxZHEJXCQweDExLCRIa2V5MiwkWGgKCXBjbG11bHFkcQlcJDB4MTAsJEhLLCRYbQoJeG9ycHMJCSRYbCwkWGxuCgl4b3JwcwkJJFhoLCRYaG4KCW1vdnVwcwkJMHg1MCgkSHRibCksJEhLCgl4b3JwcwkJJFhtLCRYbW4KCgltb3ZkcXUJCTB4MTAoJGlucCksJFhsCgkgbW92ZHF1CQkwKCRpbnApLCRUMQoJcHNodWZiCQkkVDMsJFhsCgkgcHNodWZiCQkkVDMsJFQxCgltb3ZkcWEJCSRYbCwkWGgKCXBzaHVmZAkJXCQwYjAxMDAxMTEwLCRYbCwkWG0KCSBweG9yCQkkVDEsJFhpCglweG9yCQkkWGwsJFhtCglwY2xtdWxxZHEJXCQweDAwLCRIa2V5MywkWGwKCSBtb3ZkcWEJCSRYaSwkWGhpCgkgcHNodWZkCQlcJDBiMDEwMDExMTAsJFhpLCRUMQoJIHB4b3IJCSRYaSwkVDEKCXBjbG11bHFkcQlcJDB4MTEsJEhrZXkzLCRYaAoJcGNsbXVscWRxCVwkMHgwMCwkSEssJFhtCgl4b3JwcwkJJFhsLCRYbG4KCXhvcnBzCQkkWGgsJFhobgoKCWxlYQkweDQwKCRpbnApLCRpbnAKCXN1YglcJDB4NDAsJGxlbgoJamMJLkx0YWlsNHgKCglqbXAJLkxtb2Q0X2xvb3AKLmFsaWduCTMyCi5MbW9kNF9sb29wOgoJcGNsbXVscWRxCVwkMHgwMCwkSGtleTQsJFhpCgl4b3JwcwkJJFhtLCRYbW4KCSBtb3ZkcXUJCTB4MzAoJGlucCksJFhsCgkgcHNodWZiCQkkVDMsJFhsCglwY2xtdWxxZHEJXCQweDExLCRIa2V5NCwkWGhpCgl4b3JwcwkJJFhsbiwkWGkKCSBtb3ZkcXUJCTB4MjAoJGlucCksJFhsbgoJIG1vdmRxYQkJJFhsLCRYaAoJcGNsbXVscWRxCVwkMHgxMCwkSEssJFQxCgkgcHNodWZkCQlcJDBiMDEwMDExMTAsJFhsLCRYbQoJeG9ycHMJCSRYaG4sJFhoaQoJIHB4b3IJCSRYbCwkWG0KCSBwc2h1ZmIJCSRUMywkWGxuCgltb3Z1cHMJCTB4MjAoJEh0YmwpLCRISwoJeG9ycHMJCSRYbW4sJFQxCgkgcGNsbXVscWRxCVwkMHgwMCwkSGtleSwkWGwKCSBwc2h1ZmQJCVwkMGIwMTAwMTExMCwkWGxuLCRYbW4KCglweG9yCQkkWGksJFQxCQkJIyBhZ2dyZWdhdGVkIEthcmF0c3ViYSBwb3N0LXByb2Nlc3NpbmcKCSBtb3ZkcWEJCSRYbG4sJFhobgoJcHhvcgkJJFhoaSwkVDEJCSMKCSBweG9yCQkkWGxuLCRYbW4KCW1vdmRxYQkJJFQxLCRUMgkJCSMKCSBwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRYaAoJcHNsbGRxCQlcJDgsJFQxCglwc3JsZHEJCVwkOCwkVDIJCQkjCglweG9yCQkkVDEsJFhpCgltb3ZkcWEJCS5MN19tYXNrKCVyaXApLCRUMQoJcHhvcgkJJFQyLCRYaGkJCSMKCW1vdnEJCSVyYXgsJFQyCgoJcGFuZAkJJFhpLCRUMQkJCSMgMXN0IHBoYXNlCglwc2h1ZmIJCSRUMSwkVDIJCQkjCglweG9yCQkkWGksJFQyCQkJIwoJIHBjbG11bHFkcQlcJDB4MDAsJEhLLCRYbQoJcHNsbHEJCVwkNTcsJFQyCQkjCgltb3ZkcWEJCSRUMiwkVDEJCQkjCglwc2xsZHEJCVwkOCwkVDIKCSBwY2xtdWxxZHEJXCQweDAwLCRIa2V5MiwkWGxuCglwc3JsZHEJCVwkOCwkVDEJCQkjCQoJcHhvcgkJJFQyLCRYaQoJcHhvcgkJJFQxLCRYaGkJCSMKCW1vdmRxdQkJMCgkaW5wKSwkVDEKCgltb3ZkcWEJCSRYaSwkVDIJCQkjIDJuZCBwaGFzZQoJcHNybHEJCVwkMSwkWGkKCSBwY2xtdWxxZHEJXCQweDExLCRIa2V5MiwkWGhuCgkgeG9ycHMJCSRYbCwkWGxuCgkgbW92ZHF1CQkweDEwKCRpbnApLCRYbAoJIHBzaHVmYgkJJFQzLCRYbAoJIHBjbG11bHFkcQlcJDB4MTAsJEhLLCRYbW4KCSB4b3JwcwkJJFhoLCRYaG4KCSBtb3Z1cHMJCTB4NTAoJEh0YmwpLCRISwoJcHNodWZiCQkkVDMsJFQxCglweG9yCQkkVDIsJFhoaQkJIwoJcHhvcgkJJFhpLCRUMgoJcHNybHEJCVwkNSwkWGkKCgkgbW92ZHFhCQkkWGwsJFhoCgkgcHhvcgkJJFhtLCRYbW4KCSBwc2h1ZmQJCVwkMGIwMTAwMTExMCwkWGwsJFhtCglweG9yCQkkVDIsJFhpCQkJIwoJcHhvcgkJJFQxLCRYaGkKCSBweG9yCQkkWGwsJFhtCgkgcGNsbXVscWRxCVwkMHgwMCwkSGtleTMsJFhsCglwc3JscQkJXCQxLCRYaQkJCSMKCXB4b3IJCSRYaGksJFhpCQkjCgltb3ZkcWEJCSRYaSwkWGhpCgkgcGNsbXVscWRxCVwkMHgxMSwkSGtleTMsJFhoCgkgeG9ycHMJCSRYbCwkWGxuCglwc2h1ZmQJCVwkMGIwMTAwMTExMCwkWGksJFQxCglweG9yCQkkWGksJFQxCgoJIHBjbG11bHFkcQlcJDB4MDAsJEhLLCRYbQoJIHhvcnBzCQkkWGgsJFhobgoKCWxlYQkweDQwKCRpbnApLCRpbnAKCXN1YglcJDB4NDAsJGxlbgoJam5jCS5MbW9kNF9sb29wCgouTHRhaWw0eDoKCXBjbG11bHFkcQlcJDB4MDAsJEhrZXk0LCRYaQoJcGNsbXVscWRxCVwkMHgxMSwkSGtleTQsJFhoaQoJcGNsbXVscWRxCVwkMHgxMCwkSEssJFQxCgl4b3JwcwkJJFhtLCRYbW4KCXhvcnBzCQkkWGxuLCRYaQoJeG9ycHMJCSRYaG4sJFhoaQoJcHhvcgkJJFhpLCRYaGkJCSMgYWdncmVnYXRlZCBLYXJhdHN1YmEgcG9zdC1wcm9jZXNzaW5nCglweG9yCQkkWG1uLCRUMQoKCXB4b3IJCSRYaGksJFQxCQkjCglweG9yCQkkWGksJFhoaQoKCW1vdmRxYQkJJFQxLCRUMgkJCSMKCXBzcmxkcQkJXCQ4LCRUMQoJcHNsbGRxCQlcJDgsJFQyCQkJIwoJcHhvcgkJJFQxLCRYaGkKCXB4b3IJCSRUMiwkWGkJCQkjCl9fXwoJJnJlZHVjdGlvbl9hbGc5KCRYaGksJFhpKTsKJGNvZGUuPTw8X19fOwoJYWRkCVwkMHg0MCwkbGVuCglqegkuTGRvbmUKCW1vdmRxdQkweDIwKCRIdGJsKSwkSEsKCXN1YglcJDB4MTAsJGxlbgoJanoJLkxvZGRfdGFpbAouTHNraXA0eDoKX19fCn0KJGNvZGUuPTw8X19fOwoJIyMjIyMjIwoJIyBYaSsyID1bSCooSWkrMSArIFhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIChIKlhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIEheMiooSWkrWGkpXSBtb2QgUAoJIwoJbW92ZHF1CQkoJGlucCksJFQxCQkjIElpCgltb3ZkcXUJCTE2KCRpbnApLCRYbG4JCSMgSWkrMQoJcHNodWZiCQkkVDMsJFQxCglwc2h1ZmIJCSRUMywkWGxuCglweG9yCQkkVDEsJFhpCQkJIyBJaStYaQoKCW1vdmRxYQkJJFhsbiwkWGhuCglwc2h1ZmQJCVwkMGIwMTAwMTExMCwkWGxuLCRYbW4KCXB4b3IJCSRYbG4sJFhtbgoJcGNsbXVscWRxCVwkMHgwMCwkSGtleSwkWGxuCglwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRYaG4KCXBjbG11bHFkcQlcJDB4MDAsJEhLLCRYbW4KCglsZWEJCTMyKCRpbnApLCRpbnAJCSMgaSs9MgoJbm9wCglzdWIJCVwkMHgyMCwkbGVuCglqYmUJCS5MZXZlbl90YWlsCglub3AKCWptcAkJLkxtb2RfbG9vcAoKLmFsaWduCTMyCi5MbW9kX2xvb3A6Cgltb3ZkcWEJCSRYaSwkWGhpCgltb3ZkcWEJCSRYbW4sJFQxCglwc2h1ZmQJCVwkMGIwMTAwMTExMCwkWGksJFhtbgkjCglweG9yCQkkWGksJFhtbgkJIwoKCXBjbG11bHFkcQlcJDB4MDAsJEhrZXkyLCRYaQoJcGNsbXVscWRxCVwkMHgxMSwkSGtleTIsJFhoaQoJcGNsbXVscWRxCVwkMHgxMCwkSEssJFhtbgoKCXB4b3IJCSRYbG4sJFhpCQkjIChIKklpKzEpICsgSF4yKihJaStYaSkKCXB4b3IJCSRYaG4sJFhoaQoJICBtb3ZkcXUJKCRpbnApLCRUMgkJIyBJaQoJcHhvcgkJJFhpLCRUMQkJCSMgYWdncmVnYXRlZCBLYXJhdHN1YmEgcG9zdC1wcm9jZXNzaW5nCgkgIHBzaHVmYgkkVDMsJFQyCgkgIG1vdmRxdQkxNigkaW5wKSwkWGxuCQkjIElpKzEKCglweG9yCQkkWGhpLCRUMQoJICBweG9yCQkkVDIsJFhoaQkJIyAiSWkrWGkiLCBjb25zdW1lIGVhcmx5CglweG9yCQkkVDEsJFhtbgoJIHBzaHVmYgkJJFQzLCRYbG4KCW1vdmRxYQkJJFhtbiwkVDEJCSMKCXBzcmxkcQkJXCQ4LCRUMQoJcHNsbGRxCQlcJDgsJFhtbgkJIwoJcHhvcgkJJFQxLCRYaGkKCXB4b3IJCSRYbW4sJFhpCQkjCgoJbW92ZHFhCQkkWGxuLCRYaG4JCSMKCgkgIG1vdmRxYQkkWGksJFQyCQkJIyAxc3QgcGhhc2UKCSAgbW92ZHFhCSRYaSwkVDEKCSAgcHNsbHEJCVwkNSwkWGkKCSAgcHhvcgkJJFhpLCRUMQkJCSMKCXBjbG11bHFkcQlcJDB4MDAsJEhrZXksJFhsbgkjIyMjIyMjCgkgIHBzbGxxCQlcJDEsJFhpCgkgIHB4b3IJCSRUMSwkWGkJCQkjCgkgIHBzbGxxCQlcJDU3LCRYaQkJIwoJICBtb3ZkcWEJJFhpLCRUMQkJCSMKCSAgcHNsbGRxCVwkOCwkWGkKCSAgcHNybGRxCVwkOCwkVDEJCQkjCQoJICBweG9yCQkkVDIsJFhpCglwc2h1ZmQJCVwkMGIwMTAwMTExMCwkWGhuLCRYbW4KCSAgcHhvcgkJJFQxLCRYaGkJCSMKCXB4b3IJCSRYaG4sJFhtbgkJIwoKCSAgbW92ZHFhCSRYaSwkVDIJCQkjIDJuZCBwaGFzZQoJICBwc3JscQkJXCQxLCRYaQoJcGNsbXVscWRxCVwkMHgxMSwkSGtleSwkWGhuCSMjIyMjIyMKCSAgcHhvcgkJJFQyLCRYaGkJCSMKCSAgcHhvcgkJJFhpLCRUMgoJICBwc3JscQkJXCQ1LCRYaQoJICBweG9yCQkkVDIsJFhpCQkJIwoJbGVhCQkzMigkaW5wKSwkaW5wCgkgIHBzcmxxCQlcJDEsJFhpCQkJIwoJcGNsbXVscWRxCVwkMHgwMCwkSEssJFhtbgkJIyMjIyMjIwoJICBweG9yCQkkWGhpLCRYaQkJIwoKCXN1YgkJXCQweDIwLCRsZW4KCWphCQkuTG1vZF9sb29wCgouTGV2ZW5fdGFpbDoKCSBtb3ZkcWEJCSRYaSwkWGhpCgkgbW92ZHFhCQkkWG1uLCRUMQoJIHBzaHVmZAkJXCQwYjAxMDAxMTEwLCRYaSwkWG1uCSMKCSBweG9yCQkkWGksJFhtbgkJIwoKCXBjbG11bHFkcQlcJDB4MDAsJEhrZXkyLCRYaQoJcGNsbXVscWRxCVwkMHgxMSwkSGtleTIsJFhoaQoJcGNsbXVscWRxCVwkMHgxMCwkSEssJFhtbgoKCXB4b3IJCSRYbG4sJFhpCQkjIChIKklpKzEpICsgSF4yKihJaStYaSkKCXB4b3IJCSRYaG4sJFhoaQoJcHhvcgkJJFhpLCRUMQoJcHhvcgkJJFhoaSwkVDEKCXB4b3IJCSRUMSwkWG1uCgltb3ZkcWEJCSRYbW4sJFQxCQkjCglwc3JsZHEJCVwkOCwkVDEKCXBzbGxkcQkJXCQ4LCRYbW4JCSMKCXB4b3IJCSRUMSwkWGhpCglweG9yCQkkWG1uLCRYaQkJIwpfX18KCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOwokY29kZS49PDxfX187Cgl0ZXN0CQkkbGVuLCRsZW4KCWpuegkJLkxkb25lCgouTG9kZF90YWlsOgoJbW92ZHF1CQkoJGlucCksJFQxCQkjIElpCglwc2h1ZmIJCSRUMywkVDEKCXB4b3IJCSRUMSwkWGkJCQkjIElpK1hpCl9fXwoJJmNsbXVsNjR4NjRfVDIJKCRYaGksJFhpLCRIa2V5LCRISyk7CSMgSCooSWkrWGkpCgkmcmVkdWN0aW9uX2FsZzkJKCRYaGksJFhpKTsKJGNvZGUuPTw8X19fOwouTGRvbmU6Cglwc2h1ZmIJCSRUMywkWGkKCW1vdmRxdQkJJFhpLCgkWGlwKQpfX18KJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOwoJbW92YXBzCSglcnNwKSwleG1tNgoJbW92YXBzCTB4MTAoJXJzcCksJXhtbTcKCW1vdmFwcwkweDIwKCVyc3ApLCV4bW04Cgltb3ZhcHMJMHgzMCglcnNwKSwleG1tOQoJbW92YXBzCTB4NDAoJXJzcCksJXhtbTEwCgltb3ZhcHMJMHg1MCglcnNwKSwleG1tMTEKCW1vdmFwcwkweDYwKCVyc3ApLCV4bW0xMgoJbW92YXBzCTB4NzAoJXJzcCksJXhtbTEzCgltb3ZhcHMJMHg4MCglcnNwKSwleG1tMTQKCW1vdmFwcwkweDkwKCVyc3ApLCV4bW0xNQoJbGVhCTB4YTgoJXJzcCksJXJzcAouTFNFSF9lbmRfZ2NtX2doYXNoX2NsbXVsOgpfX18KJGNvZGUuPTw8X19fOwoJcmV0Ci5zaXplCWdjbV9naGFzaF9jbG11bCwuLWdjbV9naGFzaF9jbG11bApfX18KfQoMCiRjb2RlLj08PF9fXzsKLmdsb2JsCWdjbV9pbml0X2F2eAoudHlwZQlnY21faW5pdF9hdngsXEBhYmktb21uaXBvdGVudAouaGlkZGVuCWdjbV9pbml0X2F2eAouYWxpZ24JMzIKZ2NtX2luaXRfYXZ4OgpfX18KaWYgKCRhdngpIHsKbXkgKCRIdGJsLCRYaXApPUBfNGFyZ3M7Cm15ICRISz0iJXhtbTYiOwoKJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOwouTFNFSF9iZWdpbl9nY21faW5pdF9hdng6CgkjIEkgY2FuJ3QgdHJ1c3QgYXNzZW1ibGVyIHRvIHVzZSBzcGVjaWZpYyBlbmNvZGluZzotKAoJLmJ5dGUJMHg0OCwweDgzLDB4ZWMsMHgxOAkJI3N1YgkkMHgxOCwlcnNwCgkuYnl0ZQkweDBmLDB4MjksMHgzNCwweDI0CQkjbW92YXBzCSV4bW02LCglcnNwKQpfX18KJGNvZGUuPTw8X19fOwoJdnplcm91cHBlcgoKCXZtb3ZkcXUJCSgkWGlwKSwkSGtleQoJdnBzaHVmZAkJXCQwYjAxMDAxMTEwLCRIa2V5LCRIa2V5CSMgZHdvcmQgc3dhcAoKCSMgPDwxIHR3aXN0Cgl2cHNodWZkCQlcJDBiMTExMTExMTEsJEhrZXksJFQyCSMgYnJvYWRjYXN0IHVwcGVybW9zdCBkd29yZAoJdnBzcmxxCQlcJDYzLCRIa2V5LCRUMQoJdnBzbGxxCQlcJDEsJEhrZXksJEhrZXkKCXZweG9yCQkkVDMsJFQzLCRUMwkJIwoJdnBjbXBndGQJJFQyLCRUMywkVDMJCSMgYnJvYWRjYXN0IGNhcnJ5IGJpdAoJdnBzbGxkcQkJXCQ4LCRUMSwkVDEKCXZwb3IJCSRUMSwkSGtleSwkSGtleQkJIyBIPDw9MQoKCSMgbWFnaWMgcmVkdWN0aW9uCgl2cGFuZAkJLkwweDFjMl9wb2x5bm9taWFsKCVyaXApLCRUMywkVDMKCXZweG9yCQkkVDMsJEhrZXksJEhrZXkJCSMgaWYoY2FycnkpIEhePTB4MWMyX3BvbHlub21pYWwKCgl2cHVucGNraHFkcQkkSGtleSwkSGtleSwkSEsKCXZtb3ZkcWEJCSRIa2V5LCRYaQoJdnB4b3IJCSRIa2V5LCRISywkSEsKCW1vdgkJXCQ0LCVyMTAJCSMgdXAgdG8gSF44CglqbXAJCS5MaW5pdF9zdGFydF9hdngKX19fCgpzdWIgY2xtdWw2NHg2NF9hdnggewpteSAoJFhoaSwkWGksJEhrZXksJEhLKT1AXzsKCmlmICghZGVmaW5lZCgkSEspKSB7CSRISyA9ICRUMjsKJGNvZGUuPTw8X19fOwoJdnB1bnBja2hxZHEJJFhpLCRYaSwkVDEKCXZwdW5wY2tocWRxCSRIa2V5LCRIa2V5LCRUMgoJdnB4b3IJCSRYaSwkVDEsJFQxCQkjCgl2cHhvcgkJJEhrZXksJFQyLCRUMgpfX18KfSBlbHNlIHsKJGNvZGUuPTw8X19fOwoJdnB1bnBja2hxZHEJJFhpLCRYaSwkVDEKCXZweG9yCQkkWGksJFQxLCRUMQkJIwpfX18KfQokY29kZS49PDxfX187Cgl2cGNsbXVscWRxCVwkMHgxMSwkSGtleSwkWGksJFhoaQkjIyMjIyMjCgl2cGNsbXVscWRxCVwkMHgwMCwkSGtleSwkWGksJFhpCSMjIyMjIyMKCXZwY2xtdWxxZHEJXCQweDAwLCRISywkVDEsJFQxCSMjIyMjIyMKCXZweG9yCQkkWGksJFhoaSwkVDIJCSMKCXZweG9yCQkkVDIsJFQxLCRUMQkJIwoKCXZwc2xsZHEJCVwkOCwkVDEsJFQyCQkjCgl2cHNybGRxCQlcJDgsJFQxLCRUMQoJdnB4b3IJCSRUMiwkWGksJFhpCQkjCgl2cHhvcgkJJFQxLCRYaGksJFhoaQpfX18KfQoKc3ViIHJlZHVjdGlvbl9hdnggewpteSAoJFhoaSwkWGkpID0gQF87CgokY29kZS49PDxfX187Cgl2cHNsbHEJCVwkNTcsJFhpLCRUMQkJIyAxc3QgcGhhc2UKCXZwc2xscQkJXCQ2MiwkWGksJFQyCgl2cHhvcgkJJFQxLCRUMiwkVDIJCSMKCXZwc2xscQkJXCQ2MywkWGksJFQxCgl2cHhvcgkJJFQxLCRUMiwkVDIJCSMKCXZwc2xsZHEJCVwkOCwkVDIsJFQxCQkjCgl2cHNybGRxCQlcJDgsJFQyLCRUMgoJdnB4b3IJCSRUMSwkWGksJFhpCQkjCgl2cHhvcgkJJFQyLCRYaGksJFhoaQoKCXZwc3JscQkJXCQxLCRYaSwkVDIJCSMgMm5kIHBoYXNlCgl2cHhvcgkJJFhpLCRYaGksJFhoaQoJdnB4b3IJCSRUMiwkWGksJFhpCQkjCgl2cHNybHEJCVwkNSwkVDIsJFQyCgl2cHhvcgkJJFQyLCRYaSwkWGkJCSMKCXZwc3JscQkJXCQxLCRYaSwkWGkJCSMKCXZweG9yCQkkWGhpLCRYaSwkWGkJCSMKX19fCn0KCiRjb2RlLj08PF9fXzsKLmFsaWduCTMyCi5MaW5pdF9sb29wX2F2eDoKCXZwYWxpZ25yCVwkOCwkVDEsJFQyLCRUMwkJIyBsb3cgcGFydCBpcyBILmxvXkguaGkuLi4KCXZtb3ZkcXUJCSRUMywtMHgxMCgkSHRibCkJIyBzYXZlIEthcmF0c3ViYSAic2FsdCIKX19fCgkmY2xtdWw2NHg2NF9hdngJKCRYaGksJFhpLCRIa2V5LCRISyk7CSMgY2FsY3VsYXRlIEheMyw1LDcKCSZyZWR1Y3Rpb25fYXZ4CSgkWGhpLCRYaSk7CiRjb2RlLj08PF9fXzsKLkxpbml0X3N0YXJ0X2F2eDoKCXZtb3ZkcWEJCSRYaSwkVDMKX19fCgkmY2xtdWw2NHg2NF9hdngJKCRYaGksJFhpLCRIa2V5LCRISyk7CSMgY2FsY3VsYXRlIEheMiw0LDYsOAoJJnJlZHVjdGlvbl9hdngJKCRYaGksJFhpKTsKJGNvZGUuPTw8X19fOwoJdnBzaHVmZAkJXCQwYjAxMDAxMTEwLCRUMywkVDEKCXZwc2h1ZmQJCVwkMGIwMTAwMTExMCwkWGksJFQyCgl2cHhvcgkJJFQzLCRUMSwkVDEJCSMgS2FyYXRzdWJhIHByZS1wcm9jZXNzaW5nCgl2bW92ZHF1CQkkVDMsMHgwMCgkSHRibCkJCSMgc2F2ZSBIXjEsMyw1LDcKCXZweG9yCQkkWGksJFQyLCRUMgkJIyBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKCXZtb3ZkcXUJCSRYaSwweDEwKCRIdGJsKQkJIyBzYXZlIEheMiw0LDYsOAoJbGVhCQkweDMwKCRIdGJsKSwkSHRibAoJc3ViCQlcJDEsJXIxMAoJam56CQkuTGluaXRfbG9vcF9hdngKCgl2cGFsaWducglcJDgsJFQyLCRUMSwkVDMJCSMgbGFzdCAic2FsdCIgaXMgZmxpcHBlZAoJdm1vdmRxdQkJJFQzLC0weDEwKCRIdGJsKQoKCXZ6ZXJvdXBwZXIKX19fCiRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKCW1vdmFwcwkoJXJzcCksJXhtbTYKCWxlYQkweDE4KCVyc3ApLCVyc3AKLkxTRUhfZW5kX2djbV9pbml0X2F2eDoKX19fCiRjb2RlLj08PF9fXzsKCXJldAouc2l6ZQlnY21faW5pdF9hdngsLi1nY21faW5pdF9hdngKX19fCn0gZWxzZSB7CiRjb2RlLj08PF9fXzsKCWptcAkuTF9pbml0X2NsbXVsCi5zaXplCWdjbV9pbml0X2F2eCwuLWdjbV9pbml0X2F2eApfX18KfQoKJGNvZGUuPTw8X19fOwouZ2xvYmwJZ2NtX2dtdWx0X2F2eAoudHlwZQlnY21fZ211bHRfYXZ4LFxAYWJpLW9tbmlwb3RlbnQKLmhpZGRlbglnY21fZ211bHRfYXZ4Ci5hbGlnbgkzMgpnY21fZ211bHRfYXZ4OgoJam1wCS5MX2dtdWx0X2NsbXVsCi5zaXplCWdjbV9nbXVsdF9hdngsLi1nY21fZ211bHRfYXZ4Cl9fXwoMCiRjb2RlLj08PF9fXzsKLmdsb2JsCWdjbV9naGFzaF9hdngKLnR5cGUJZ2NtX2doYXNoX2F2eCxcQGFiaS1vbW5pcG90ZW50Ci5oaWRkZW4JZ2NtX2doYXNoX2F2eAouYWxpZ24JMzIKZ2NtX2doYXNoX2F2eDoKX19fCmlmICgkYXZ4KSB7Cm15ICgkWGlwLCRIdGJsLCRpbnAsJGxlbik9QF80YXJnczsKbXkgKCRYbG8sJFhoaSwkWG1pLAogICAgJFpsbywkWmhpLCRabWksCiAgICAkSGtleSwkSEssJFQxLCRUMiwKICAgICRYaSwkWG8sJFRyZWQsJGJzd2FwLCRJaSwkSWopID0gbWFwKCIleG1tJF8iLCgwLi4xNSkpOwoKJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOwoJbGVhCS0weDg4KCVyc3ApLCVyYXgKLkxTRUhfYmVnaW5fZ2NtX2doYXNoX2F2eDoKCSMgSSBjYW4ndCB0cnVzdCBhc3NlbWJsZXIgdG8gdXNlIHNwZWNpZmljIGVuY29kaW5nOi0oCgkuYnl0ZQkweDQ4LDB4OGQsMHg2MCwweGUwCQkjbGVhCS0weDIwKCVyYXgpLCVyc3AKCS5ieXRlCTB4MGYsMHgyOSwweDcwLDB4ZTAJCSNtb3ZhcHMJJXhtbTYsLTB4MjAoJXJheCkKCS5ieXRlCTB4MGYsMHgyOSwweDc4LDB4ZjAJCSNtb3ZhcHMJJXhtbTcsLTB4MTAoJXJheCkKCS5ieXRlCTB4NDQsMHgwZiwweDI5LDB4MDAJCSNtb3ZhcHMJJXhtbTgsMCglcmF4KQoJLmJ5dGUJMHg0NCwweDBmLDB4MjksMHg0OCwweDEwCSNtb3ZhcHMJJXhtbTksMHgxMCglcmF4KQoJLmJ5dGUJMHg0NCwweDBmLDB4MjksMHg1MCwweDIwCSNtb3ZhcHMJJXhtbTEwLDB4MjAoJXJheCkKCS5ieXRlCTB4NDQsMHgwZiwweDI5LDB4NTgsMHgzMAkjbW92YXBzCSV4bW0xMSwweDMwKCVyYXgpCgkuYnl0ZQkweDQ0LDB4MGYsMHgyOSwweDYwLDB4NDAJI21vdmFwcwkleG1tMTIsMHg0MCglcmF4KQoJLmJ5dGUJMHg0NCwweDBmLDB4MjksMHg2OCwweDUwCSNtb3ZhcHMJJXhtbTEzLDB4NTAoJXJheCkKCS5ieXRlCTB4NDQsMHgwZiwweDI5LDB4NzAsMHg2MAkjbW92YXBzCSV4bW0xNCwweDYwKCVyYXgpCgkuYnl0ZQkweDQ0LDB4MGYsMHgyOSwweDc4LDB4NzAJI21vdmFwcwkleG1tMTUsMHg3MCglcmF4KQpfX18KJGNvZGUuPTw8X19fOwoJdnplcm91cHBlcgoKCXZtb3ZkcXUJCSgkWGlwKSwkWGkJCSMgbG9hZCAkWGkKCWxlYQkJLkwweDFjMl9wb2x5bm9taWFsKCVyaXApLCVyMTAKCWxlYQkJMHg0MCgkSHRibCksJEh0YmwJIyBzaXplIG9wdGltaXphdGlvbgoJdm1vdmRxdQkJLkxic3dhcF9tYXNrKCVyaXApLCRic3dhcAoJdnBzaHVmYgkJJGJzd2FwLCRYaSwkWGkKCWNtcAkJXCQweDgwLCRsZW4KCWpiCQkuTHNob3J0X2F2eAoJc3ViCQlcJDB4ODAsJGxlbgoKCXZtb3ZkcXUJCTB4NzAoJGlucCksJElpCQkjIElbN10KCXZtb3ZkcXUJCTB4MDAtMHg0MCgkSHRibCksJEhrZXkJIyAkSGtleV4xCgl2cHNodWZiCQkkYnN3YXAsJElpLCRJaQoJdm1vdmRxdQkJMHgyMC0weDQwKCRIdGJsKSwkSEsKCgl2cHVucGNraHFkcQkkSWksJElpLCRUMgoJIHZtb3ZkcXUJMHg2MCgkaW5wKSwkSWoJCSMgSVs2XQoJdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElpLCRYbG8KCXZweG9yCQkkSWksJFQyLCRUMgoJIHZwc2h1ZmIJJGJzd2FwLCRJaiwkSWoKCXZwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRJaSwkWGhpCgkgdm1vdmRxdQkweDEwLTB4NDAoJEh0YmwpLCRIa2V5CSMgJEhrZXleMgoJIHZwdW5wY2tocWRxCSRJaiwkSWosJFQxCgkgdm1vdmRxdQkweDUwKCRpbnApLCRJaQkJIyBJWzVdCgl2cGNsbXVscWRxCVwkMHgwMCwkSEssJFQyLCRYbWkKCSB2cHhvcgkJJElqLCRUMSwkVDEKCgkgdnBzaHVmYgkkYnN3YXAsJElpLCRJaQoJdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElqLCRabG8KCSB2cHVucGNraHFkcQkkSWksJElpLCRUMgoJdnBjbG11bHFkcQlcJDB4MTEsJEhrZXksJElqLCRaaGkKCSB2bW92ZHF1CTB4MzAtMHg0MCgkSHRibCksJEhrZXkJIyAkSGtleV4zCgkgdnB4b3IJCSRJaSwkVDIsJFQyCgkgdm1vdmRxdQkweDQwKCRpbnApLCRJagkJIyBJWzRdCgl2cGNsbXVscWRxCVwkMHgxMCwkSEssJFQxLCRabWkKCSB2bW92ZHF1CTB4NTAtMHg0MCgkSHRibCksJEhLCgoJIHZwc2h1ZmIJJGJzd2FwLCRJaiwkSWoKCXZweG9yCQkkWGxvLCRabG8sJFpsbwoJdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElpLCRYbG8KCXZweG9yCQkkWGhpLCRaaGksJFpoaQoJIHZwdW5wY2tocWRxCSRJaiwkSWosJFQxCgl2cGNsbXVscWRxCVwkMHgxMSwkSGtleSwkSWksJFhoaQoJIHZtb3ZkcXUJMHg0MC0weDQwKCRIdGJsKSwkSGtleQkjICRIa2V5XjQKCXZweG9yCQkkWG1pLCRabWksJFptaQoJdnBjbG11bHFkcQlcJDB4MDAsJEhLLCRUMiwkWG1pCgkgdnB4b3IJCSRJaiwkVDEsJFQxCgoJIHZtb3ZkcXUJMHgzMCgkaW5wKSwkSWkJCSMgSVszXQoJdnB4b3IJCSRabG8sJFhsbywkWGxvCgl2cGNsbXVscWRxCVwkMHgwMCwkSGtleSwkSWosJFpsbwoJdnB4b3IJCSRaaGksJFhoaSwkWGhpCgkgdnBzaHVmYgkkYnN3YXAsJElpLCRJaQoJdnBjbG11bHFkcQlcJDB4MTEsJEhrZXksJElqLCRaaGkKCSB2bW92ZHF1CTB4NjAtMHg0MCgkSHRibCksJEhrZXkJIyAkSGtleV41Cgl2cHhvcgkJJFptaSwkWG1pLCRYbWkKCSB2cHVucGNraHFkcQkkSWksJElpLCRUMgoJdnBjbG11bHFkcQlcJDB4MTAsJEhLLCRUMSwkWm1pCgkgdm1vdmRxdQkweDgwLTB4NDAoJEh0YmwpLCRISwoJIHZweG9yCQkkSWksJFQyLCRUMgoKCSB2bW92ZHF1CTB4MjAoJGlucCksJElqCQkjIElbMl0KCXZweG9yCQkkWGxvLCRabG8sJFpsbwoJdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElpLCRYbG8KCXZweG9yCQkkWGhpLCRaaGksJFpoaQoJIHZwc2h1ZmIJJGJzd2FwLCRJaiwkSWoKCXZwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRJaSwkWGhpCgkgdm1vdmRxdQkweDcwLTB4NDAoJEh0YmwpLCRIa2V5CSMgJEhrZXleNgoJdnB4b3IJCSRYbWksJFptaSwkWm1pCgkgdnB1bnBja2hxZHEJJElqLCRJaiwkVDEKCXZwY2xtdWxxZHEJXCQweDAwLCRISywkVDIsJFhtaQoJIHZweG9yCQkkSWosJFQxLCRUMQoKCSB2bW92ZHF1CTB4MTAoJGlucCksJElpCQkjIElbMV0KCXZweG9yCQkkWmxvLCRYbG8sJFhsbwoJdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElqLCRabG8KCXZweG9yCQkkWmhpLCRYaGksJFhoaQoJIHZwc2h1ZmIJJGJzd2FwLCRJaSwkSWkKCXZwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRJaiwkWmhpCgkgdm1vdmRxdQkweDkwLTB4NDAoJEh0YmwpLCRIa2V5CSMgJEhrZXleNwoJdnB4b3IJCSRabWksJFhtaSwkWG1pCgkgdnB1bnBja2hxZHEJJElpLCRJaSwkVDIKCXZwY2xtdWxxZHEJXCQweDEwLCRISywkVDEsJFptaQoJIHZtb3ZkcXUJMHhiMC0weDQwKCRIdGJsKSwkSEsKCSB2cHhvcgkJJElpLCRUMiwkVDIKCgkgdm1vdmRxdQkoJGlucCksJElqCQkjIElbMF0KCXZweG9yCQkkWGxvLCRabG8sJFpsbwoJdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElpLCRYbG8KCXZweG9yCQkkWGhpLCRaaGksJFpoaQoJIHZwc2h1ZmIJJGJzd2FwLCRJaiwkSWoKCXZwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRJaSwkWGhpCgkgdm1vdmRxdQkweGEwLTB4NDAoJEh0YmwpLCRIa2V5CSMgJEhrZXleOAoJdnB4b3IJCSRYbWksJFptaSwkWm1pCgl2cGNsbXVscWRxCVwkMHgxMCwkSEssJFQyLCRYbWkKCglsZWEJCTB4ODAoJGlucCksJGlucAoJY21wCQlcJDB4ODAsJGxlbgoJamIJCS5MdGFpbF9hdngKCgl2cHhvcgkJJFhpLCRJaiwkSWoJCSMgYWNjdW11bGF0ZSAkWGkKCXN1YgkJXCQweDgwLCRsZW4KCWptcAkJLkxvb3A4eF9hdngKCi5hbGlnbgkzMgouTG9vcDh4X2F2eDoKCXZwdW5wY2tocWRxCSRJaiwkSWosJFQxCgkgdm1vdmRxdQkweDcwKCRpbnApLCRJaQkJIyBJWzddCgl2cHhvcgkJJFhsbywkWmxvLCRabG8KCXZweG9yCQkkSWosJFQxLCRUMQoJdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElqLCRYaQoJIHZwc2h1ZmIJJGJzd2FwLCRJaSwkSWkKCXZweG9yCQkkWGhpLCRaaGksJFpoaQoJdnBjbG11bHFkcQlcJDB4MTEsJEhrZXksJElqLCRYbwoJIHZtb3ZkcXUJMHgwMC0weDQwKCRIdGJsKSwkSGtleQkjICRIa2V5XjEKCSB2cHVucGNraHFkcQkkSWksJElpLCRUMgoJdnB4b3IJCSRYbWksJFptaSwkWm1pCgl2cGNsbXVscWRxCVwkMHgwMCwkSEssJFQxLCRUcmVkCgkgdm1vdmRxdQkweDIwLTB4NDAoJEh0YmwpLCRISwoJIHZweG9yCQkkSWksJFQyLCRUMgoKCSAgdm1vdmRxdQkweDYwKCRpbnApLCRJagkJIyBJWzZdCgkgdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElpLCRYbG8KCXZweG9yCQkkWmxvLCRYaSwkWGkJCSMgY29sbGVjdCByZXN1bHQKCSAgdnBzaHVmYgkkYnN3YXAsJElqLCRJagoJIHZwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRJaSwkWGhpCgl2eG9ycHMJCSRaaGksJFhvLCRYbwoJICB2bW92ZHF1CTB4MTAtMHg0MCgkSHRibCksJEhrZXkJIyAkSGtleV4yCgkgdnB1bnBja2hxZHEJJElqLCRJaiwkVDEKCSB2cGNsbXVscWRxCVwkMHgwMCwkSEssICAkVDIsJFhtaQoJdnB4b3IJCSRabWksJFRyZWQsJFRyZWQKCSB2eG9ycHMJCSRJaiwkVDEsJFQxCgoJICB2bW92ZHF1CTB4NTAoJGlucCksJElpCQkjIElbNV0KCXZweG9yCQkkWGksJFRyZWQsJFRyZWQJCSMgYWdncmVnYXRlZCBLYXJhdHN1YmEgcG9zdC1wcm9jZXNzaW5nCgkgdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElqLCRabG8KCXZweG9yCQkkWG8sJFRyZWQsJFRyZWQKCXZwc2xsZHEJCVwkOCwkVHJlZCwkVDIKCSB2cHhvcgkJJFhsbywkWmxvLCRabG8KCSB2cGNsbXVscWRxCVwkMHgxMSwkSGtleSwkSWosJFpoaQoJdnBzcmxkcQkJXCQ4LCRUcmVkLCRUcmVkCgl2cHhvcgkJJFQyLCAkWGksICRYaQoJICB2bW92ZHF1CTB4MzAtMHg0MCgkSHRibCksJEhrZXkJIyAkSGtleV4zCgkgIHZwc2h1ZmIJJGJzd2FwLCRJaSwkSWkKCXZ4b3JwcwkJJFRyZWQsJFhvLCAkWG8KCSB2cHhvcgkJJFhoaSwkWmhpLCRaaGkKCSB2cHVucGNraHFkcQkkSWksJElpLCRUMgoJIHZwY2xtdWxxZHEJXCQweDEwLCRISywgICRUMSwkWm1pCgkgIHZtb3ZkcXUJMHg1MC0weDQwKCRIdGJsKSwkSEsKCSB2cHhvcgkJJElpLCRUMiwkVDIKCSB2cHhvcgkJJFhtaSwkWm1pLCRabWkKCgkgIHZtb3ZkcXUJMHg0MCgkaW5wKSwkSWoJCSMgSVs0XQoJdnBhbGlnbnIJXCQ4LCRYaSwkWGksJFRyZWQJIyAxc3QgcGhhc2UKCSB2cGNsbXVscWRxCVwkMHgwMCwkSGtleSwkSWksJFhsbwoJICB2cHNodWZiCSRic3dhcCwkSWosJElqCgkgdnB4b3IJCSRabG8sJFhsbywkWGxvCgkgdnBjbG11bHFkcQlcJDB4MTEsJEhrZXksJElpLCRYaGkKCSAgdm1vdmRxdQkweDQwLTB4NDAoJEh0YmwpLCRIa2V5CSMgJEhrZXleNAoJIHZwdW5wY2tocWRxCSRJaiwkSWosJFQxCgkgdnB4b3IJCSRaaGksJFhoaSwkWGhpCgkgdnBjbG11bHFkcQlcJDB4MDAsJEhLLCAgJFQyLCRYbWkKCSB2eG9ycHMJCSRJaiwkVDEsJFQxCgkgdnB4b3IJCSRabWksJFhtaSwkWG1pCgoJICB2bW92ZHF1CTB4MzAoJGlucCksJElpCQkjIElbM10KCXZwY2xtdWxxZHEJXCQweDEwLCglcjEwKSwkWGksJFhpCgkgdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElqLCRabG8KCSAgdnBzaHVmYgkkYnN3YXAsJElpLCRJaQoJIHZweG9yCQkkWGxvLCRabG8sJFpsbwoJIHZwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRJaiwkWmhpCgkgIHZtb3ZkcXUJMHg2MC0weDQwKCRIdGJsKSwkSGtleQkjICRIa2V5XjUKCSB2cHVucGNraHFkcQkkSWksJElpLCRUMgoJIHZweG9yCQkkWGhpLCRaaGksJFpoaQoJIHZwY2xtdWxxZHEJXCQweDEwLCRISywgICRUMSwkWm1pCgkgIHZtb3ZkcXUJMHg4MC0weDQwKCRIdGJsKSwkSEsKCSB2cHhvcgkJJElpLCRUMiwkVDIKCSB2cHhvcgkJJFhtaSwkWm1pLCRabWkKCgkgIHZtb3ZkcXUJMHgyMCgkaW5wKSwkSWoJCSMgSVsyXQoJIHZwY2xtdWxxZHEJXCQweDAwLCRIa2V5LCRJaSwkWGxvCgkgIHZwc2h1ZmIJJGJzd2FwLCRJaiwkSWoKCSB2cHhvcgkJJFpsbywkWGxvLCRYbG8KCSB2cGNsbXVscWRxCVwkMHgxMSwkSGtleSwkSWksJFhoaQoJICB2bW92ZHF1CTB4NzAtMHg0MCgkSHRibCksJEhrZXkJIyAkSGtleV42CgkgdnB1bnBja2hxZHEJJElqLCRJaiwkVDEKCSB2cHhvcgkJJFpoaSwkWGhpLCRYaGkKCSB2cGNsbXVscWRxCVwkMHgwMCwkSEssICAkVDIsJFhtaQoJIHZweG9yCQkkSWosJFQxLCRUMQoJIHZweG9yCQkkWm1pLCRYbWksJFhtaQoJdnhvcnBzCQkkVHJlZCwkWGksJFhpCgoJICB2bW92ZHF1CTB4MTAoJGlucCksJElpCQkjIElbMV0KCXZwYWxpZ25yCVwkOCwkWGksJFhpLCRUcmVkCSMgMm5kIHBoYXNlCgkgdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElqLCRabG8KCSAgdnBzaHVmYgkkYnN3YXAsJElpLCRJaQoJIHZweG9yCQkkWGxvLCRabG8sJFpsbwoJIHZwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRJaiwkWmhpCgkgIHZtb3ZkcXUJMHg5MC0weDQwKCRIdGJsKSwkSGtleQkjICRIa2V5XjcKCXZwY2xtdWxxZHEJXCQweDEwLCglcjEwKSwkWGksJFhpCgl2eG9ycHMJCSRYbywkVHJlZCwkVHJlZAoJIHZwdW5wY2tocWRxCSRJaSwkSWksJFQyCgkgdnB4b3IJCSRYaGksJFpoaSwkWmhpCgkgdnBjbG11bHFkcQlcJDB4MTAsJEhLLCAgJFQxLCRabWkKCSAgdm1vdmRxdQkweGIwLTB4NDAoJEh0YmwpLCRISwoJIHZweG9yCQkkSWksJFQyLCRUMgoJIHZweG9yCQkkWG1pLCRabWksJFptaQoKCSAgdm1vdmRxdQkoJGlucCksJElqCQkjIElbMF0KCSB2cGNsbXVscWRxCVwkMHgwMCwkSGtleSwkSWksJFhsbwoJICB2cHNodWZiCSRic3dhcCwkSWosJElqCgkgdnBjbG11bHFkcQlcJDB4MTEsJEhrZXksJElpLCRYaGkKCSAgdm1vdmRxdQkweGEwLTB4NDAoJEh0YmwpLCRIa2V5CSMgJEhrZXleOAoJdnB4b3IJCSRUcmVkLCRJaiwkSWoKCSB2cGNsbXVscWRxCVwkMHgxMCwkSEssICAkVDIsJFhtaQoJdnB4b3IJCSRYaSwkSWosJElqCQkjIGFjY3VtdWxhdGUgJFhpCgoJbGVhCQkweDgwKCRpbnApLCRpbnAKCXN1YgkJXCQweDgwLCRsZW4KCWpuYwkJLkxvb3A4eF9hdngKCglhZGQJCVwkMHg4MCwkbGVuCglqbXAJCS5MdGFpbF9ub194b3JfYXZ4CgouYWxpZ24JMzIKLkxzaG9ydF9hdng6Cgl2bW92ZHF1CQktMHgxMCgkaW5wLCRsZW4pLCRJaQkjIHZlcnkgbGFzdCB3b3JkCglsZWEJCSgkaW5wLCRsZW4pLCRpbnAKCXZtb3ZkcXUJCTB4MDAtMHg0MCgkSHRibCksJEhrZXkJIyAkSGtleV4xCgl2bW92ZHF1CQkweDIwLTB4NDAoJEh0YmwpLCRISwoJdnBzaHVmYgkJJGJzd2FwLCRJaSwkSWoKCgl2bW92ZHFhCQkkWGxvLCRabG8JCSMgc3VidGxlIHdheSB0byB6ZXJvICRabG8sCgl2bW92ZHFhCQkkWGhpLCRaaGkJCSMgJFpoaSBhbmQKCXZtb3ZkcWEJCSRYbWksJFptaQkJIyAkWm1pCglzdWIJCVwkMHgxMCwkbGVuCglqegkJLkx0YWlsX2F2eAoKCXZwdW5wY2tocWRxCSRJaiwkSWosJFQxCgl2cHhvcgkJJFhsbywkWmxvLCRabG8KCXZwY2xtdWxxZHEJXCQweDAwLCRIa2V5LCRJaiwkWGxvCgl2cHhvcgkJJElqLCRUMSwkVDEKCSB2bW92ZHF1CS0weDIwKCRpbnApLCRJaQoJdnB4b3IJCSRYaGksJFpoaSwkWmhpCgl2cGNsbXVscWRxCVwkMHgxMSwkSGtleSwkSWosJFhoaQoJdm1vdmRxdQkJMHgxMC0weDQwKCRIdGJsKSwkSGtleQkjICRIa2V5XjIKCSB2cHNodWZiCSRic3dhcCwkSWksJElqCgl2cHhvcgkJJFhtaSwkWm1pLCRabWkKCXZwY2xtdWxxZHEJXCQweDAwLCRISywkVDEsJFhtaQoJdnBzcmxkcQkJXCQ4LCRISywkSEsKCXN1YgkJXCQweDEwLCRsZW4KCWp6CQkuTHRhaWxfYXZ4CgoJdnB1bnBja2hxZHEJJElqLCRJaiwkVDEKCXZweG9yCQkkWGxvLCRabG8sJFpsbwoJdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElqLCRYbG8KCXZweG9yCQkkSWosJFQxLCRUMQoJIHZtb3ZkcXUJLTB4MzAoJGlucCksJElpCgl2cHhvcgkJJFhoaSwkWmhpLCRaaGkKCXZwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRJaiwkWGhpCgl2bW92ZHF1CQkweDMwLTB4NDAoJEh0YmwpLCRIa2V5CSMgJEhrZXleMwoJIHZwc2h1ZmIJJGJzd2FwLCRJaSwkSWoKCXZweG9yCQkkWG1pLCRabWksJFptaQoJdnBjbG11bHFkcQlcJDB4MDAsJEhLLCRUMSwkWG1pCgl2bW92ZHF1CQkweDUwLTB4NDAoJEh0YmwpLCRISwoJc3ViCQlcJDB4MTAsJGxlbgoJanoJCS5MdGFpbF9hdngKCgl2cHVucGNraHFkcQkkSWosJElqLCRUMQoJdnB4b3IJCSRYbG8sJFpsbywkWmxvCgl2cGNsbXVscWRxCVwkMHgwMCwkSGtleSwkSWosJFhsbwoJdnB4b3IJCSRJaiwkVDEsJFQxCgkgdm1vdmRxdQktMHg0MCgkaW5wKSwkSWkKCXZweG9yCQkkWGhpLCRaaGksJFpoaQoJdnBjbG11bHFkcQlcJDB4MTEsJEhrZXksJElqLCRYaGkKCXZtb3ZkcXUJCTB4NDAtMHg0MCgkSHRibCksJEhrZXkJIyAkSGtleV40CgkgdnBzaHVmYgkkYnN3YXAsJElpLCRJagoJdnB4b3IJCSRYbWksJFptaSwkWm1pCgl2cGNsbXVscWRxCVwkMHgwMCwkSEssJFQxLCRYbWkKCXZwc3JsZHEJCVwkOCwkSEssJEhLCglzdWIJCVwkMHgxMCwkbGVuCglqegkJLkx0YWlsX2F2eAoKCXZwdW5wY2tocWRxCSRJaiwkSWosJFQxCgl2cHhvcgkJJFhsbywkWmxvLCRabG8KCXZwY2xtdWxxZHEJXCQweDAwLCRIa2V5LCRJaiwkWGxvCgl2cHhvcgkJJElqLCRUMSwkVDEKCSB2bW92ZHF1CS0weDUwKCRpbnApLCRJaQoJdnB4b3IJCSRYaGksJFpoaSwkWmhpCgl2cGNsbXVscWRxCVwkMHgxMSwkSGtleSwkSWosJFhoaQoJdm1vdmRxdQkJMHg2MC0weDQwKCRIdGJsKSwkSGtleQkjICRIa2V5XjUKCSB2cHNodWZiCSRic3dhcCwkSWksJElqCgl2cHhvcgkJJFhtaSwkWm1pLCRabWkKCXZwY2xtdWxxZHEJXCQweDAwLCRISywkVDEsJFhtaQoJdm1vdmRxdQkJMHg4MC0weDQwKCRIdGJsKSwkSEsKCXN1YgkJXCQweDEwLCRsZW4KCWp6CQkuTHRhaWxfYXZ4CgoJdnB1bnBja2hxZHEJJElqLCRJaiwkVDEKCXZweG9yCQkkWGxvLCRabG8sJFpsbwoJdnBjbG11bHFkcQlcJDB4MDAsJEhrZXksJElqLCRYbG8KCXZweG9yCQkkSWosJFQxLCRUMQoJIHZtb3ZkcXUJLTB4NjAoJGlucCksJElpCgl2cHhvcgkJJFhoaSwkWmhpLCRaaGkKCXZwY2xtdWxxZHEJXCQweDExLCRIa2V5LCRJaiwkWGhpCgl2bW92ZHF1CQkweDcwLTB4NDAoJEh0YmwpLCRIa2V5CSMgJEhrZXleNgoJIHZwc2h1ZmIJJGJzd2FwLCRJaSwkSWoKCXZweG9yCQkkWG1pLCRabWksJFptaQoJdnBjbG11bHFkcQlcJDB4MDAsJEhLLCRUMSwkWG1pCgl2cHNybGRxCQlcJDgsJEhLLCRISwoJc3ViCQlcJDB4MTAsJGxlbgoJanoJCS5MdGFpbF9hdngKCgl2cHVucGNraHFkcQkkSWosJElqLCRUMQoJdnB4b3IJCSRYbG8sJFpsbywkWmxvCgl2cGNsbXVscWRxCVwkMHgwMCwkSGtleSwkSWosJFhsbwoJdnB4b3IJCSRJaiwkVDEsJFQxCgkgdm1vdmRxdQktMHg3MCgkaW5wKSwkSWkKCXZweG9yCQkkWGhpLCRaaGksJFpoaQoJdnBjbG11bHFkcQlcJDB4MTEsJEhrZXksJElqLCRYaGkKCXZtb3ZkcXUJCTB4OTAtMHg0MCgkSHRibCksJEhrZXkJIyAkSGtleV43CgkgdnBzaHVmYgkkYnN3YXAsJElpLCRJagoJdnB4b3IJCSRYbWksJFptaSwkWm1pCgl2cGNsbXVscWRxCVwkMHgwMCwkSEssJFQxLCRYbWkKCXZtb3ZxCQkweGI4LTB4NDAoJEh0YmwpLCRISwoJc3ViCQlcJDB4MTAsJGxlbgoJam1wCQkuTHRhaWxfYXZ4CgouYWxpZ24JMzIKLkx0YWlsX2F2eDoKCXZweG9yCQkkWGksJElqLCRJagkJIyBhY2N1bXVsYXRlICRYaQouTHRhaWxfbm9feG9yX2F2eDoKCXZwdW5wY2tocWRxCSRJaiwkSWosJFQxCgl2cHhvcgkJJFhsbywkWmxvLCRabG8KCXZwY2xtdWxxZHEJXCQweDAwLCRIa2V5LCRJaiwkWGxvCgl2cHhvcgkJJElqLCRUMSwkVDEKCXZweG9yCQkkWGhpLCRaaGksJFpoaQoJdnBjbG11bHFkcQlcJDB4MTEsJEhrZXksJElqLCRYaGkKCXZweG9yCQkkWG1pLCRabWksJFptaQoJdnBjbG11bHFkcQlcJDB4MDAsJEhLLCRUMSwkWG1pCgoJdm1vdmRxdQkJKCVyMTApLCRUcmVkCgoJdnB4b3IJCSRYbG8sJFpsbywkWGkKCXZweG9yCQkkWGhpLCRaaGksJFhvCgl2cHhvcgkJJFhtaSwkWm1pLCRabWkKCgl2cHhvcgkJJFhpLCAkWm1pLCRabWkJCSMgYWdncmVnYXRlZCBLYXJhdHN1YmEgcG9zdC1wcm9jZXNzaW5nCgl2cHhvcgkJJFhvLCAkWm1pLCRabWkKCXZwc2xsZHEJCVwkOCwgJFptaSwkVDIKCXZwc3JsZHEJCVwkOCwgJFptaSwkWm1pCgl2cHhvcgkJJFQyLCAkWGksICRYaQoJdnB4b3IJCSRabWksJFhvLCAkWG8KCgl2cGNsbXVscWRxCVwkMHgxMCwkVHJlZCwkWGksJFQyCSMgMXN0IHBoYXNlCgl2cGFsaWducglcJDgsJFhpLCRYaSwkWGkKCXZweG9yCQkkVDIsJFhpLCRYaQoKCXZwY2xtdWxxZHEJXCQweDEwLCRUcmVkLCRYaSwkVDIJIyAybmQgcGhhc2UKCXZwYWxpZ25yCVwkOCwkWGksJFhpLCRYaQoJdnB4b3IJCSRYbywkWGksJFhpCgl2cHhvcgkJJFQyLCRYaSwkWGkKCgljbXAJCVwkMCwkbGVuCglqbmUJCS5Mc2hvcnRfYXZ4CgoJdnBzaHVmYgkJJGJzd2FwLCRYaSwkWGkKCXZtb3ZkcXUJCSRYaSwoJFhpcCkKCXZ6ZXJvdXBwZXIKX19fCiRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKCW1vdmFwcwkoJXJzcCksJXhtbTYKCW1vdmFwcwkweDEwKCVyc3ApLCV4bW03Cgltb3ZhcHMJMHgyMCglcnNwKSwleG1tOAoJbW92YXBzCTB4MzAoJXJzcCksJXhtbTkKCW1vdmFwcwkweDQwKCVyc3ApLCV4bW0xMAoJbW92YXBzCTB4NTAoJXJzcCksJXhtbTExCgltb3ZhcHMJMHg2MCglcnNwKSwleG1tMTIKCW1vdmFwcwkweDcwKCVyc3ApLCV4bW0xMwoJbW92YXBzCTB4ODAoJXJzcCksJXhtbTE0Cgltb3ZhcHMJMHg5MCglcnNwKSwleG1tMTUKCWxlYQkweGE4KCVyc3ApLCVyc3AKLkxTRUhfZW5kX2djbV9naGFzaF9hdng6Cl9fXwokY29kZS49PDxfX187CglyZXQKLnNpemUJZ2NtX2doYXNoX2F2eCwuLWdjbV9naGFzaF9hdngKX19fCn0gZWxzZSB7CiRjb2RlLj08PF9fXzsKCWptcAkuTF9naGFzaF9jbG11bAouc2l6ZQlnY21fZ2hhc2hfYXZ4LC4tZ2NtX2doYXNoX2F2eApfX18KfQoMCiRjb2RlLj08PF9fXzsKLmFsaWduCTY0Ci5MYnN3YXBfbWFzazoKCS5ieXRlCTE1LDE0LDEzLDEyLDExLDEwLDksOCw3LDYsNSw0LDMsMiwxLDAKLkwweDFjMl9wb2x5bm9taWFsOgoJLmJ5dGUJMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMHhjMgouTDdfbWFzazoKCS5sb25nCTcsMCw3LDAKLkw3X21hc2tfcG9seToKCS5sb25nCTcsMCxgMHhFMTw8MWAsMAouYWxpZ24JNjQKLnR5cGUJLkxyZW1fNGJpdCxcQG9iamVjdAouTHJlbV80Yml0OgoJLmxvbmcJMCxgMHgwMDAwPDwxNmAsMCxgMHgxQzIwPDwxNmAsMCxgMHgzODQwPDwxNmAsMCxgMHgyNDYwPDwxNmAKCS5sb25nCTAsYDB4NzA4MDw8MTZgLDAsYDB4NkNBMDw8MTZgLDAsYDB4NDhDMDw8MTZgLDAsYDB4NTRFMDw8MTZgCgkubG9uZwkwLGAweEUxMDA8PDE2YCwwLGAweEZEMjA8PDE2YCwwLGAweEQ5NDA8PDE2YCwwLGAweEM1NjA8PDE2YAoJLmxvbmcJMCxgMHg5MTgwPDwxNmAsMCxgMHg4REEwPDwxNmAsMCxgMHhBOUMwPDwxNmAsMCxgMHhCNUUwPDwxNmAKLnR5cGUJLkxyZW1fOGJpdCxcQG9iamVjdAouTHJlbV84Yml0OgoJLnZhbHVlCTB4MDAwMCwweDAxQzIsMHgwMzg0LDB4MDI0NiwweDA3MDgsMHgwNkNBLDB4MDQ4QywweDA1NEUKCS52YWx1ZQkweDBFMTAsMHgwRkQyLDB4MEQ5NCwweDBDNTYsMHgwOTE4LDB4MDhEQSwweDBBOUMsMHgwQjVFCgkudmFsdWUJMHgxQzIwLDB4MURFMiwweDFGQTQsMHgxRTY2LDB4MUIyOCwweDFBRUEsMHgxOEFDLDB4MTk2RQoJLnZhbHVlCTB4MTIzMCwweDEzRjIsMHgxMUI0LDB4MTA3NiwweDE1MzgsMHgxNEZBLDB4MTZCQywweDE3N0UKCS52YWx1ZQkweDM4NDAsMHgzOTgyLDB4M0JDNCwweDNBMDYsMHgzRjQ4LDB4M0U4QSwweDNDQ0MsMHgzRDBFCgkudmFsdWUJMHgzNjUwLDB4Mzc5MiwweDM1RDQsMHgzNDE2LDB4MzE1OCwweDMwOUEsMHgzMkRDLDB4MzMxRQoJLnZhbHVlCTB4MjQ2MCwweDI1QTIsMHgyN0U0LDB4MjYyNiwweDIzNjgsMHgyMkFBLDB4MjBFQywweDIxMkUKCS52YWx1ZQkweDJBNzAsMHgyQkIyLDB4MjlGNCwweDI4MzYsMHgyRDc4LDB4MkNCQSwweDJFRkMsMHgyRjNFCgkudmFsdWUJMHg3MDgwLDB4NzE0MiwweDczMDQsMHg3MkM2LDB4Nzc4OCwweDc2NEEsMHg3NDBDLDB4NzVDRQoJLnZhbHVlCTB4N0U5MCwweDdGNTIsMHg3RDE0LDB4N0NENiwweDc5OTgsMHg3ODVBLDB4N0ExQywweDdCREUKCS52YWx1ZQkweDZDQTAsMHg2RDYyLDB4NkYyNCwweDZFRTYsMHg2QkE4LDB4NkE2QSwweDY4MkMsMHg2OUVFCgkudmFsdWUJMHg2MkIwLDB4NjM3MiwweDYxMzQsMHg2MEY2LDB4NjVCOCwweDY0N0EsMHg2NjNDLDB4NjdGRQoJLnZhbHVlCTB4NDhDMCwweDQ5MDIsMHg0QjQ0LDB4NEE4NiwweDRGQzgsMHg0RTBBLDB4NEM0QywweDREOEUKCS52YWx1ZQkweDQ2RDAsMHg0NzEyLDB4NDU1NCwweDQ0OTYsMHg0MUQ4LDB4NDAxQSwweDQyNUMsMHg0MzlFCgkudmFsdWUJMHg1NEUwLDB4NTUyMiwweDU3NjQsMHg1NkE2LDB4NTNFOCwweDUyMkEsMHg1MDZDLDB4NTFBRQoJLnZhbHVlCTB4NUFGMCwweDVCMzIsMHg1OTc0LDB4NThCNiwweDVERjgsMHg1QzNBLDB4NUU3QywweDVGQkUKCS52YWx1ZQkweEUxMDAsMHhFMEMyLDB4RTI4NCwweEUzNDYsMHhFNjA4LDB4RTdDQSwweEU1OEMsMHhFNDRFCgkudmFsdWUJMHhFRjEwLDB4RUVEMiwweEVDOTQsMHhFRDU2LDB4RTgxOCwweEU5REEsMHhFQjlDLDB4RUE1RQoJLnZhbHVlCTB4RkQyMCwweEZDRTIsMHhGRUE0LDB4RkY2NiwweEZBMjgsMHhGQkVBLDB4RjlBQywweEY4NkUKCS52YWx1ZQkweEYzMzAsMHhGMkYyLDB4RjBCNCwweEYxNzYsMHhGNDM4LDB4RjVGQSwweEY3QkMsMHhGNjdFCgkudmFsdWUJMHhEOTQwLDB4RDg4MiwweERBQzQsMHhEQjA2LDB4REU0OCwweERGOEEsMHhERENDLDB4REMwRQoJLnZhbHVlCTB4RDc1MCwweEQ2OTIsMHhENEQ0LDB4RDUxNiwweEQwNTgsMHhEMTlBLDB4RDNEQywweEQyMUUKCS52YWx1ZQkweEM1NjAsMHhDNEEyLDB4QzZFNCwweEM3MjYsMHhDMjY4LDB4QzNBQSwweEMxRUMsMHhDMDJFCgkudmFsdWUJMHhDQjcwLDB4Q0FCMiwweEM4RjQsMHhDOTM2LDB4Q0M3OCwweENEQkEsMHhDRkZDLDB4Q0UzRQoJLnZhbHVlCTB4OTE4MCwweDkwNDIsMHg5MjA0LDB4OTNDNiwweDk2ODgsMHg5NzRBLDB4OTUwQywweDk0Q0UKCS52YWx1ZQkweDlGOTAsMHg5RTUyLDB4OUMxNCwweDlERDYsMHg5ODk4LDB4OTk1QSwweDlCMUMsMHg5QURFCgkudmFsdWUJMHg4REEwLDB4OEM2MiwweDhFMjQsMHg4RkU2LDB4OEFBOCwweDhCNkEsMHg4OTJDLDB4ODhFRQoJLnZhbHVlCTB4ODNCMCwweDgyNzIsMHg4MDM0LDB4ODFGNiwweDg0QjgsMHg4NTdBLDB4ODczQywweDg2RkUKCS52YWx1ZQkweEE5QzAsMHhBODAyLDB4QUE0NCwweEFCODYsMHhBRUM4LDB4QUYwQSwweEFENEMsMHhBQzhFCgkudmFsdWUJMHhBN0QwLDB4QTYxMiwweEE0NTQsMHhBNTk2LDB4QTBEOCwweEExMUEsMHhBMzVDLDB4QTI5RQoJLnZhbHVlCTB4QjVFMCwweEI0MjIsMHhCNjY0LDB4QjdBNiwweEIyRTgsMHhCMzJBLDB4QjE2QywweEIwQUUKCS52YWx1ZQkweEJCRjAsMHhCQTMyLDB4Qjg3NCwweEI5QjYsMHhCQ0Y4LDB4QkQzQSwweEJGN0MsMHhCRUJFCgouYXNjaXoJIkdIQVNIIGZvciB4ODZfNjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCi5hbGlnbgk2NApfX18KDAojIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVyIChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKIwkJQ09OVEVYVCAqY29udGV4dCxESVNQQVRDSEVSX0NPTlRFWFQgKmRpc3ApCmlmICgkd2luNjQpIHsKJHJlYz0iJXJjeCI7CiRmcmFtZT0iJXJkeCI7CiRjb250ZXh0PSIlcjgiOwokZGlzcD0iJXI5IjsKCiRjb2RlLj08PF9fXzsKLmV4dGVybglfX2ltcF9SdGxWaXJ0dWFsVW53aW5kCi50eXBlCXNlX2hhbmRsZXIsXEBhYmktb21uaXBvdGVudAouYWxpZ24JMTYKc2VfaGFuZGxlcjoKCXB1c2gJJXJzaQoJcHVzaAklcmRpCglwdXNoCSVyYngKCXB1c2gJJXJicAoJcHVzaAklcjEyCglwdXNoCSVyMTMKCXB1c2gJJXIxNAoJcHVzaAklcjE1CglwdXNoZnEKCXN1YglcJDY0LCVyc3AKCgltb3YJMTIwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYXgKCW1vdgkyNDgoJGNvbnRleHQpLCVyYngJIyBwdWxsIGNvbnRleHQtPlJpcAoKCW1vdgk4KCRkaXNwKSwlcnNpCQkjIGRpc3AtPkltYWdlQmFzZQoJbW92CTU2KCRkaXNwKSwlcjExCQkjIGRpc3AtPkhhbmRsZXJEYXRhCgoJbW92CTAoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMF0KCWxlYQkoJXJzaSwlcjEwKSwlcjEwCSMgcHJvbG9ndWUgbGFiZWwKCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPHByb2xvZ3VlIGxhYmVsCglqYgkuTGluX3Byb2xvZ3VlCgoJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCgoJbW92CTQoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMV0KCWxlYQkoJXJzaSwlcjEwKSwlcjEwCSMgZXBpbG9ndWUgbGFiZWwKCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj1lcGlsb2d1ZSBsYWJlbAoJamFlCS5MaW5fcHJvbG9ndWUKCglsZWEJMjQoJXJheCksJXJheAkJIyBhZGp1c3QgInJzcCIKCgltb3YJLTgoJXJheCksJXJieAoJbW92CS0xNiglcmF4KSwlcmJwCgltb3YJLTI0KCVyYXgpLCVyMTIKCW1vdgklcmJ4LDE0NCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJieAoJbW92CSVyYnAsMTYwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJwCgltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKCi5MaW5fcHJvbG9ndWU6Cgltb3YJOCglcmF4KSwlcmRpCgltb3YJMTYoJXJheCksJXJzaQoJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCgltb3YJJXJzaSwxNjgoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5Sc2kKCW1vdgklcmRpLDE3NigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJkaQoKCW1vdgk0MCgkZGlzcCksJXJkaQkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCgltb3YJJGNvbnRleHQsJXJzaQkJIyBjb250ZXh0Cgltb3YJXCRgMTIzMi84YCwlZWN4CQkjIHNpemVvZihDT05URVhUKQoJLmxvbmcJMHhhNTQ4ZjNmYwkJIyBjbGQ7IHJlcCBtb3ZzcQoKCW1vdgkkZGlzcCwlcnNpCgl4b3IJJXJjeCwlcmN4CQkjIGFyZzEsIFVOV19GTEFHX05IQU5ETEVSCgltb3YJOCglcnNpKSwlcmR4CQkjIGFyZzIsIGRpc3AtPkltYWdlQmFzZQoJbW92CTAoJXJzaSksJXI4CQkjIGFyZzMsIGRpc3AtPkNvbnRyb2xQYwoJbW92CTE2KCVyc2kpLCVyOQkJIyBhcmc0LCBkaXNwLT5GdW5jdGlvbkVudHJ5Cgltb3YJNDAoJXJzaSksJXIxMAkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCglsZWEJNTYoJXJzaSksJXIxMQkJIyAmZGlzcC0+SGFuZGxlckRhdGEKCWxlYQkyNCglcnNpKSwlcjEyCQkjICZkaXNwLT5Fc3RhYmxpc2hlckZyYW1lCgltb3YJJXIxMCwzMiglcnNwKQkJIyBhcmc1Cgltb3YJJXIxMSw0MCglcnNwKQkJIyBhcmc2Cgltb3YJJXIxMiw0OCglcnNwKQkJIyBhcmc3Cgltb3YJJXJjeCw1NiglcnNwKQkJIyBhcmc4LCAoTlVMTCkKCWNhbGwJKl9faW1wX1J0bFZpcnR1YWxVbndpbmQoJXJpcCkKCgltb3YJXCQxLCVlYXgJCSMgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKCWFkZAlcJDY0LCVyc3AKCXBvcGZxCglwb3AJJXIxNQoJcG9wCSVyMTQKCXBvcAklcjEzCglwb3AJJXIxMgoJcG9wCSVyYnAKCXBvcAklcmJ4Cglwb3AJJXJkaQoJcG9wCSVyc2kKCXJldAouc2l6ZQlzZV9oYW5kbGVyLC4tc2VfaGFuZGxlcgoKLnNlY3Rpb24JLnBkYXRhCi5hbGlnbgk0CgkucnZhCS5MU0VIX2JlZ2luX2djbV9nbXVsdF80Yml0CgkucnZhCS5MU0VIX2VuZF9nY21fZ211bHRfNGJpdAoJLnJ2YQkuTFNFSF9pbmZvX2djbV9nbXVsdF80Yml0CgoJLnJ2YQkuTFNFSF9iZWdpbl9nY21fZ2hhc2hfNGJpdAoJLnJ2YQkuTFNFSF9lbmRfZ2NtX2doYXNoXzRiaXQKCS5ydmEJLkxTRUhfaW5mb19nY21fZ2hhc2hfNGJpdAoKCS5ydmEJLkxTRUhfYmVnaW5fZ2NtX2luaXRfY2xtdWwKCS5ydmEJLkxTRUhfZW5kX2djbV9pbml0X2NsbXVsCgkucnZhCS5MU0VIX2luZm9fZ2NtX2luaXRfY2xtdWwKCgkucnZhCS5MU0VIX2JlZ2luX2djbV9naGFzaF9jbG11bAoJLnJ2YQkuTFNFSF9lbmRfZ2NtX2doYXNoX2NsbXVsCgkucnZhCS5MU0VIX2luZm9fZ2NtX2doYXNoX2NsbXVsCl9fXwokY29kZS49PDxfX18JaWYgKCRhdngpOwoJLnJ2YQkuTFNFSF9iZWdpbl9nY21faW5pdF9hdngKCS5ydmEJLkxTRUhfZW5kX2djbV9pbml0X2F2eAoJLnJ2YQkuTFNFSF9pbmZvX2djbV9pbml0X2NsbXVsCgoJLnJ2YQkuTFNFSF9iZWdpbl9nY21fZ2hhc2hfYXZ4CgkucnZhCS5MU0VIX2VuZF9nY21fZ2hhc2hfYXZ4CgkucnZhCS5MU0VIX2luZm9fZ2NtX2doYXNoX2NsbXVsCl9fXwokY29kZS49PDxfX187Ci5zZWN0aW9uCS54ZGF0YQouYWxpZ24JOAouTFNFSF9pbmZvX2djbV9nbXVsdF80Yml0OgoJLmJ5dGUJOSwwLDAsMAoJLnJ2YQlzZV9oYW5kbGVyCgkucnZhCS5MZ211bHRfcHJvbG9ndWUsLkxnbXVsdF9lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhCi5MU0VIX2luZm9fZ2NtX2doYXNoXzRiaXQ6CgkuYnl0ZQk5LDAsMCwwCgkucnZhCXNlX2hhbmRsZXIKCS5ydmEJLkxnaGFzaF9wcm9sb2d1ZSwuTGdoYXNoX2VwaWxvZ3VlCSMgSGFuZGxlckRhdGEKLkxTRUhfaW5mb19nY21faW5pdF9jbG11bDoKCS5ieXRlCTB4MDEsMHgwOCwweDAzLDB4MDAKCS5ieXRlCTB4MDgsMHg2OCwweDAwLDB4MDAJI21vdmFwcwkweDAwKHJzcCkseG1tNgoJLmJ5dGUJMHgwNCwweDIyLDB4MDAsMHgwMAkjc3ViCXJzcCwweDE4Ci5MU0VIX2luZm9fZ2NtX2doYXNoX2NsbXVsOgoJLmJ5dGUJMHgwMSwweDMzLDB4MTYsMHgwMAoJLmJ5dGUJMHgzMywweGY4LDB4MDksMHgwMAkjbW92YXBzIDB4OTAocnNwKSx4bW0xNQoJLmJ5dGUJMHgyZSwweGU4LDB4MDgsMHgwMAkjbW92YXBzIDB4ODAocnNwKSx4bW0xNAoJLmJ5dGUJMHgyOSwweGQ4LDB4MDcsMHgwMAkjbW92YXBzIDB4NzAocnNwKSx4bW0xMwoJLmJ5dGUJMHgyNCwweGM4LDB4MDYsMHgwMAkjbW92YXBzIDB4NjAocnNwKSx4bW0xMgoJLmJ5dGUJMHgxZiwweGI4LDB4MDUsMHgwMAkjbW92YXBzIDB4NTAocnNwKSx4bW0xMQoJLmJ5dGUJMHgxYSwweGE4LDB4MDQsMHgwMAkjbW92YXBzIDB4NDAocnNwKSx4bW0xMAoJLmJ5dGUJMHgxNSwweDk4LDB4MDMsMHgwMAkjbW92YXBzIDB4MzAocnNwKSx4bW05CgkuYnl0ZQkweDEwLDB4ODgsMHgwMiwweDAwCSNtb3ZhcHMgMHgyMChyc3ApLHhtbTgKCS5ieXRlCTB4MGMsMHg3OCwweDAxLDB4MDAJI21vdmFwcyAweDEwKHJzcCkseG1tNwoJLmJ5dGUJMHgwOCwweDY4LDB4MDAsMHgwMAkjbW92YXBzIDB4MDAocnNwKSx4bW02CgkuYnl0ZQkweDA0LDB4MDEsMHgxNSwweDAwCSNzdWIJcnNwLDB4YTgKX19fCn0KDAokY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsKCQxKS9nZW07CgpwcmludCAkY29kZTsKCmNsb3NlIFNURE9VVDsK