Ly8gIENvcHlyaWdodCAoYykgMjAwMS0yMDEwIEhhcnRtdXQgS2Fpc2VyCi8vIAovLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyAKLy8gIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQoKLy8gdGhpcyBmaWxlIGludGVudGlvbmFsbHkgY29udGFpbnMgbm9uLWFzY2lpIGNoYXJhY3RlcnMKLy8gYm9vc3RpbnNwZWN0Om5vYXNjaWkKCiNpbmNsdWRlIDxib29zdC9jb25maWcvd2FybmluZ19kaXNhYmxlLmhwcD4KI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KCiNpbmNsdWRlIDxib29zdC9zcGlyaXQvaW5jbHVkZS9rYXJtYV9jaGFyLmhwcD4KI2luY2x1ZGUgPGJvb3N0L3NwaXJpdC9pbmNsdWRlL2thcm1hX2dlbmVyYXRlLmhwcD4KI2luY2x1ZGUgPGJvb3N0L3NwaXJpdC9pbmNsdWRlL2thcm1hX2RpcmVjdGl2ZS5ocHA+CgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aXRlcmF0b3I+CgojaW5jbHVkZSAidGVzdC5ocHAiCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmludCBtYWluKCkKewogICAgdXNpbmcgbmFtZXNwYWNlIHNwaXJpdF90ZXN0OwogICAgdXNpbmcgbmFtZXNwYWNlIGJvb3N0OjpzcGlyaXQ7CgogICAgewogICAgICAgIHVzaW5nIG5hbWVzcGFjZSBib29zdDo6c3Bpcml0Ojphc2NpaTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImEiLCBhbHBoYSwgJ2EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgYWxwaGEsICcxJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiICIsIGJsYW5rLCAnICcpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCBibGFuaywgJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIxIiwgZGlnaXQsICcxJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIGRpZ2l0LCAneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImEiLCBsb3dlciwgJ2EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgbG93ZXIsICdBJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiISIsIHB1bmN0LCAnIScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCBwdW5jdCwgJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIgIiwgc3BhY2UpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIiAiLCBzcGFjZSwgJyAnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgc3BhY2UsICdcbicpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlxyIiwgc3BhY2UsICdccicpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlx0Iiwgc3BhY2UsICdcdCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkEiLCB1cHBlciwgJ0EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgdXBwZXIsICdhJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQSIsIHhkaWdpdCwgJ0EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIwIiwgeGRpZ2l0LCAnMCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImYiLCB4ZGlnaXQsICdmJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIHhkaWdpdCwgJ2cnKSk7CiAgICB9CgogICAgewogICAgICAgIHVzaW5nIG5hbWVzcGFjZSBib29zdDo6c3Bpcml0Ojphc2NpaTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCB+YWxwaGEsICdhJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiMSIsIH5hbHBoYSwgJzEnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfmJsYW5rLCAnICcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIngiLCB+YmxhbmssICd4JykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIH5kaWdpdCwgJzEnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgfmRpZ2l0LCAneCcpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCB+bG93ZXIsICdhJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQSIsIH5sb3dlciwgJ0EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfnB1bmN0LCAnIScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIngiLCB+cHVuY3QsICd4JykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIH5zcGFjZSkpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIH5zcGFjZSwgJyAnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfnNwYWNlLCAnXHInKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfnNwYWNlLCAnXHQnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfnVwcGVyLCAnQScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImEiLCB+dXBwZXIsICdhJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIH54ZGlnaXQsICdBJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIH54ZGlnaXQsICcwJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIH54ZGlnaXQsICdmJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiZyIsIH54ZGlnaXQsICdnJykpOwogICAgfQoKICAgIHsKICAgICAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnNwaXJpdDo6YXNjaWk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhIiwgfn5hbHBoYSwgJ2EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfn5hbHBoYSwgJzEnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIgIiwgfn5ibGFuaywgJyAnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfn5ibGFuaywgJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIxIiwgfn5kaWdpdCwgJzEnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfn5kaWdpdCwgJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhIiwgfn5sb3dlciwgJ2EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfn5sb3dlciwgJ0EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIhIiwgfn5wdW5jdCwgJyEnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfn5wdW5jdCwgJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIgIiwgfn5zcGFjZSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiICIsIH5+c3BhY2UsICcgJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIH5+c3BhY2UsICdcbicpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlxyIiwgfn5zcGFjZSwgJ1xyJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiXHQiLCB+fnNwYWNlLCAnXHQnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBIiwgfn51cHBlciwgJ0EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfn51cHBlciwgJ2EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBIiwgfn54ZGlnaXQsICdBJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiMCIsIH5+eGRpZ2l0LCAnMCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImYiLCB+fnhkaWdpdCwgJ2YnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgfn54ZGlnaXQsICdnJykpOwogICAgfQoKICAgIHsKICAgICAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnNwaXJpdDo6YXNjaWk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhIiwgbG93ZXJbYWxwaGFdLCAnYScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCBsb3dlclthbHBoYV0sICdBJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIGxvd2VyW2FscGhhXSwgJzEnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhIiwgbG93ZXJbYWxudW1dLCAnYScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCBsb3dlclthbG51bV0sICdBJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiMSIsIGxvd2VyW2FsbnVtXSwgJzEnKSk7CgogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIHVwcGVyW2FscGhhXSwgJ2EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBIiwgdXBwZXJbYWxwaGFdLCAnQScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCB1cHBlclthbHBoYV0sICcxJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIHVwcGVyW2FsbnVtXSwgJ2EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBIiwgdXBwZXJbYWxudW1dLCAnQScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIjEiLCB1cHBlclthbG51bV0sICcxJykpOwogICAgfQoKICAgIHsKICAgICAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnNwaXJpdDo6aXNvODg1OV8xOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYSIsIGFscGhhLCAnYScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCBhbHBoYSwgJzEnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIgIiwgYmxhbmssICcgJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIGJsYW5rLCAneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIjEiLCBkaWdpdCwgJzEnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgZGlnaXQsICd4JykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYSIsIGxvd2VyLCAnYScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCBsb3dlciwgJ0EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIhIiwgcHVuY3QsICchJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIHB1bmN0LCAneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIiAiLCBzcGFjZSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiICIsIHNwYWNlLCAnICcpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCBzcGFjZSwgJ1xuJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiXHIiLCBzcGFjZSwgJ1xyJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiXHQiLCBzcGFjZSwgJ1x0JykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQSIsIHVwcGVyLCAnQScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCB1cHBlciwgJ2EnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBIiwgeGRpZ2l0LCAnQScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIjAiLCB4ZGlnaXQsICcwJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiZiIsIHhkaWdpdCwgJ2YnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgeGRpZ2l0LCAnZycpKTsKCgovLyBuZWVkZWQgZm9yIFZDNy4xIG9ubHkKI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgQk9PU1RfVEVTVEVEX0FUKDEzMTApKQojcHJhZ21hIHNldGxvY2FsZSgiZ2VybWFuIikKI2VuZGlmCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCLpIiwgYWxwaGEsICfpJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgi6SIsIGxvd2VyLCAn6ScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCB1cHBlciwgJ+knKSk7CiNpZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIEJPT1NUX1RFU1RFRF9BVCgxMzEwKSkKI3ByYWdtYSBzZXRsb2NhbGUoIiIpCiNlbmRpZgogICAgfQoKICAgIHsKICAgICAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnNwaXJpdDo6c3RhbmRhcmQ7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhIiwgYWxwaGEsICdhJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIGFscGhhLCAnMScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIiAiLCBibGFuaywgJyAnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgYmxhbmssICd4JykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiMSIsIGRpZ2l0LCAnMScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCBkaWdpdCwgJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhIiwgbG93ZXIsICdhJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIGxvd2VyLCAnQScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIiEiLCBwdW5jdCwgJyEnKSk7CiAgICAgICAgQk9PU1RfVEVTVCghdGVzdCgiIiwgcHVuY3QsICd4JykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiICIsIHNwYWNlKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIgIiwgc3BhY2UsICcgJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIHNwYWNlLCAnXG4nKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJcciIsIHNwYWNlLCAnXHInKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJcdCIsIHNwYWNlLCAnXHQnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBIiwgdXBwZXIsICdBJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoIiIsIHVwcGVyLCAnYScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkEiLCB4ZGlnaXQsICdBJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiMCIsIHhkaWdpdCwgJzAnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJmIiwgeGRpZ2l0LCAnZicpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCIiLCB4ZGlnaXQsICdnJykpOwogICAgfQoKICAgIHsKICAgICAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnNwaXJpdDo6c3RhbmRhcmRfd2lkZTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJhIiwgYWxwaGEsIEwnYScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KEwiIiwgYWxwaGEsIEwnMScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCIgIiwgYmxhbmssIEwnICcpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KEwiIiwgYmxhbmssIEwneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCIxIiwgZGlnaXQsIEwnMScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KEwiIiwgZGlnaXQsIEwneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJhIiwgbG93ZXIsIEwnYScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KEwiIiwgbG93ZXIsIEwnQScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCIhIiwgcHVuY3QsIEwnIScpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KEwiIiwgcHVuY3QsIEwneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCIgIiwgc3BhY2UpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCIgIiwgc3BhY2UsIEwnICcpKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KEwiIiwgc3BhY2UsIEwnXG4nKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiXHIiLCBzcGFjZSwgTCdccicpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJcdCIsIHNwYWNlLCBMJ1x0JykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIkEiLCB1cHBlciwgTCdBJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoTCIiLCB1cHBlciwgTCdhJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIkEiLCB4ZGlnaXQsIEwnQScpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCIwIiwgeGRpZ2l0LCBMJzAnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiZiIsIHhkaWdpdCwgTCdmJykpOwogICAgICAgIEJPT1NUX1RFU1QoIXRlc3QoTCIiLCB4ZGlnaXQsIEwnZycpKTsKICAgIH0KCiAgICByZXR1cm4gYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKfQo=