Ly8vIENvcHlyaWdodCAoYykgMjAwOSBNaWNyb3NvZnQgQ29ycG9yYXRpb24gCi8vLyAKLy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQKLy8vIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6IAovLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZAovLy8gICAgICB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAovLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCAKLy8vICAgICAgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAgCi8vLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTWljcm9zb2Z0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bwovLy8gICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi8vLyAKLy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IKLy8vIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQovLy8gRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi8vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLy8vIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAovLy8gT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgovLy8gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAoKLyoKVGhpcyB0ZXN0IHNob3VsZCBiZSBydW4gd2l0aG91dCBhbnkgYnVpbHQtaW5zIGJlaW5nIGFkZGVkL2F1Z21lbnRlZC4KVGhlIG5hbWUgSlNPTiBtdXN0IGJlIGJvdW5kIHRvIGFuIG9iamVjdC4KClNlY3Rpb24gMTUgc2F5cyB0aGF0IGV2ZXJ5IGJ1aWx0LWluIEZ1bmN0aW9uIG9iamVjdCBkZXNjcmliZWQgaW4gdGhpcwpzZWN0aW9uIJcgd2hldGhlciBhcyBhIGNvbnN0cnVjdG9yLCBhbiBvcmRpbmFyeSBmdW5jdGlvbiwgb3IgYm90aCCXIGhhcwphIGxlbmd0aCBwcm9wZXJ0eSB3aG9zZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwKdGhpcyB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgbmFtZWQgYXJndW1lbnRzIHNob3duIGluCnRoZSBzZWN0aW9uIGhlYWRpbmdzIGZvciB0aGUgZnVuY3Rpb24gZGVzY3JpcHRpb24sIGluY2x1ZGluZyBvcHRpb25hbApwYXJhbWV0ZXJzLgoKVGhpcyBkZWZhdWx0IGFwcGxpZXMgdG8gSlNPTi5wYXJzZSwgYW5kIGl0IG11c3QgZXhpc3QgYXMgYSBmdW5jdGlvbgp0YWtpbmcgMiBwYXJhbWV0ZXJzLgoqLwoKCkVTNUhhcm5lc3MucmVnaXN0ZXJUZXN0KCB7CmlkOiAiMTUuMTIuMi0wLTEiLAoKcGF0aDogIlRlc3RDYXNlcy9jaGFwdGVyMTUvMTUuMTIvMTUuMTIuMi8xNS4xMi4yLTAtMS5qcyIsCgpkZXNjcmlwdGlvbjogIkpTT04ucGFyc2UgbXVzdCBleGlzdCBhcyBhIGZ1bmN0aW9uIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHZhciBmID0gSlNPTi5wYXJzZTsKCiAgaWYgKHR5cGVvZihmKSA9PT0gImZ1bmN0aW9uIikgewogICAgcmV0dXJuIHRydWU7CiAgfQogfSwKCiBwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXEgKCkgewogIHJldHVybiBKU09OICE9PSB1bmRlZmluZWQ7CiAgfQoKfSk7Cg==