LyoKICogQ29weXJpZ2h0IDIwMDEtMjAwNSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqIAogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICogCiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqIAogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8gCgpwYWNrYWdlIG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5sYW5ndWFnZTsKCmltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CgppbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvZGVjLkVuY29kZXJFeGNlcHRpb247CmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuU3RyaW5nRW5jb2RlcjsKaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5TdHJpbmdFbmNvZGVyQWJzdHJhY3RUZXN0OwoKLyoqCiAqIFRlc3RzIHtAbGluayBEb3VibGVNZXRhcGhvbmV9LgogKiAKICogQHNlZSAiaHR0cDovL3d3dy5jdWouY29tL2RvY3VtZW50cy9zPTgwMzgvY3VqMDAwNnBoaWxpcHMvIgogKiBAYXV0aG9yIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAqIEB2ZXJzaW9uICRJZCQKICovCnB1YmxpYyBjbGFzcyBEb3VibGVNZXRhcGhvbmVUZXN0IGV4dGVuZHMgU3RyaW5nRW5jb2RlckFic3RyYWN0VGVzdCB7CgogICAgLyoqCgkgKiBUZXN0IGRhdGEgZnJvbSBodHRwOi8vYXNwZWxsLnNvdXJjZWZvcmdlLm5ldC90ZXN0L2JhdGNoMC50YWIuCgkgKiAKCSAqICJDb3B5cmlnaHQgKEMpIDIwMDIgS2V2aW4gQXRraW5zb24gKGtldmluYUBnbnUub3JnKS4gVmVyYmF0aW0gY29weWluZwoJICogYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGVudGlyZSBhcnRpY2xlIGlzIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtLAoJICogcHJvdmlkZWQgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLiIKICAgICAqIAogICAgICogTWFzc2FnZWQgdGhlIHRlc3QgZGF0YSBpbiB0aGUgYXJyYXkgYmVsb3cuCgkgKi8KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gRklYVFVSRSA9IHsgeyAiQWNjb3Npbmx5IiwgIk9jY2FzaW9uYWxseSIgfSwgewogICAgICAgICAgICAiQ2ljdWxlciIsICJDaXJjbGVyIiB9LCB7CiAgICAgICAgICAgICJDaXJjdWUiLCAiQ2lyY2xlIiB9LCB7CiAgICAgICAgICAgICJNYWRkbmVzcyIsICJNYWRuZXNzIiB9LCB7CiAgICAgICAgICAgICJPY2N1c2lvbmFseSIsICJPY2Nhc2lvbmFsbHkiIH0sIHsKICAgICAgICAgICAgIlN0ZWZmZW4iLCAiU3RlcGhlbiIgfSwgewogICAgICAgICAgICAiVGh3IiwgIlRoZSIgfSwgewogICAgICAgICAgICAiVW5mb3JtYW5sbHkiLCAiVW5mb3J0dW5hdGVseSIgfSwgewogICAgICAgICAgICAiVW5mb3J0YWxseSIsICJVbmZvcnR1bmF0ZWx5IiB9LCB7CiAgICAgICAgICAgICJhYmlsaXRleSIsICJhYmlsaXR5IiB9LCB7CiAgICAgICAgICAgICJhYm91eSIsICJhYm91dCIgfSwgewogICAgICAgICAgICAiYWJzb3JidGlvbiIsICJhYnNvcnB0aW9uIiB9LCB7CiAgICAgICAgICAgICJhY2NpZGVudGx5IiwgImFjY2lkZW50YWxseSIgfSwgewogICAgICAgICAgICAiYWNjb21vZGF0ZSIsICJhY2NvbW1vZGF0ZSIgfSwgewogICAgICAgICAgICAiYWNvbW1hZGF0ZSIsICJhY2NvbW1vZGF0ZSIgfSwgewogICAgICAgICAgICAiYWNvcmQiLCAiYWNjb3JkIiB9LCB7CiAgICAgICAgICAgICJhZHVsdHJ5IiwgImFkdWx0ZXJ5IiB9LCB7CiAgICAgICAgICAgICJhZ2dyZXNpdmUiLCAiYWdncmVzc2l2ZSIgfSwgewogICAgICAgICAgICAiYWxjaG9ob2wiLCAiYWxjb2hvbCIgfSwgewogICAgICAgICAgICAiYWxjaG9ob2xpYyIsICJhbGNvaG9saWMiIH0sIHsKICAgICAgICAgICAgImFsbGlldmUiLCAiYWxpdmUiIH0sIHsKICAgICAgICAgICAgImFsb3QiLCAiYSBsb3QiIH0sIHsKICAgICAgICAgICAgImFscmlnaHQiLCAiYWxsIHJpZ2h0IiB9LCB7CiAgICAgICAgICAgICJhbWF0dXJlIiwgImFtYXRldXIiIH0sIHsKICAgICAgICAgICAgImFtYml2aWxhbnQiLCAiYW1iaXZhbGVudCIgfSwgewogICAgICAgICAgICAiYW1pZmljYXRpb24iLCAiYW1wbGlmaWNhdGlvbiIgfSwgewogICAgICAgICAgICAiYW1vdXJmb3VzIiwgImFtb3JwaG91cyIgfSwgewogICAgICAgICAgICAiYW5ub2ludCIsICJhbm9pbnQiIH0sIHsKICAgICAgICAgICAgImFubm9uc21lbnQiLCAiYW5ub3VuY2VtZW50IiB9LCB7CiAgICAgICAgICAgICJhbm5veXRpbmciLCAiYW50aW5nIiB9LCB7CiAgICAgICAgICAgICJhbm51bmNpbyIsICJhbm5vdW5jZSIgfSwgewogICAgICAgICAgICAiYW5vbm9teSIsICJhbmF0b215IiB9LCB7CiAgICAgICAgICAgICJhbm90b215IiwgImFuYXRvbXkiIH0sIHsKICAgICAgICAgICAgImFudGlkZXNlc3RhYmxpc2htZW50YXJpYW5pc20iLCAiYW50aWRpc2VzdGFibGlzaG1lbnRhcmlhbmlzbSIgfSwgewogICAgICAgICAgICAiYW50aWRpc2VzdGFibGlzaG1lbnRhcmlzbSIsICJhbnRpZGlzZXN0YWJsaXNobWVudGFyaWFuaXNtIiB9LCB7CiAgICAgICAgICAgICJhbnlub21vdXMiLCAiYW5vbnltb3VzIiB9LCB7CiAgICAgICAgICAgICJhcHBlbGV0IiwgImFwcGxldCIgfSwgewogICAgICAgICAgICAiYXBwcmVjZWlhdGVkIiwgImFwcHJlY2lhdGVkIiB9LCB7CiAgICAgICAgICAgICJhcHByZXN0ZWF0ZSIsICJhcHByZWNpYXRlIiB9LCB7CiAgICAgICAgICAgICJhcXVhbnRhbmNlIiwgImFjcXVhaW50YW5jZSIgfSwgewogICAgICAgICAgICAiYXJhdGljdGF0dXJlIiwgImFyY2hpdGVjdHVyZSIgfSwgewogICAgICAgICAgICAiYXJjaGV5cGUiLCAiYXJjaGV0eXBlIiB9LCB7CiAgICAgICAgICAgICJhcmljdGljdXJlIiwgImFyY2hpdGVjdHVyZSIgfSwgewogICAgICAgICAgICAiYXJ0aWMiLCAiYXJjdGljIiB9LCB7CiAgICAgICAgICAgICJhc2VudG90ZSIsICJhc3ltcHRvdGUiIH0sIHsKICAgICAgICAgICAgImFzdCIsICJhdCIgfSwgewogICAgICAgICAgICAiYXN0ZXJpY2siLCAiYXN0ZXJpc2siIH0sIHsKICAgICAgICAgICAgImFzeW1ldHJpYyIsICJhc3ltbWV0cmljIiB9LCB7CiAgICAgICAgICAgICJhdGVudGl2ZWx5IiwgImF0dGVudGl2ZWx5IiB9LCB7CiAgICAgICAgICAgICJhdXRvYW1sbHkiLCAiYXV0b21hdGljYWxseSIgfSwgewogICAgICAgICAgICAiYmFua3JvdCIsICJiYW5rcnVwdCIgfSwgewogICAgICAgICAgICAiYmFzaWNseSIsICJiYXNpY2FsbHkiIH0sIHsKICAgICAgICAgICAgImJhdGFsbGlvbiIsICJiYXR0YWxpb24iIH0sIHsKICAgICAgICAgICAgImJicm9zZSIsICJicm93c2UiIH0sIHsKICAgICAgICAgICAgImJlYXVybyIsICJidXJlYXUiIH0sIHsKICAgICAgICAgICAgImJlYXVyb2NyYWN5IiwgImJ1cmVhdWNyYWN5IiB9LCB7CiAgICAgICAgICAgICJiZWdnaW5pbmciLCAiYmVnaW5uaW5nIiB9LCB7CiAgICAgICAgICAgICJiZWdpbmciLCAiYmVnaW5uaW5nIiB9LCB7CiAgICAgICAgICAgICJiZWhhdmlvdXIiLCAiYmVoYXZpb3IiIH0sIHsKICAgICAgICAgICAgImJlbGVpdmUiLCAiYmVsaWV2ZSIgfSwgewogICAgICAgICAgICAiYmVsaXZlIiwgImJlbGlldmUiIH0sIHsKICAgICAgICAgICAgImJlbmlkaWZzIiwgImJlbmVmaXRzIiB9LCB7CiAgICAgICAgICAgICJiaWdnaW5naW5nIiwgImJlZ2lubmluZyIgfSwgewogICAgICAgICAgICAiYmxhaXQiLCAiYmxlYXQiIH0sIHsKICAgICAgICAgICAgImJvdXlhbnQiLCAiYnVveWFudCIgfSwgewogICAgICAgICAgICAiYm95Z290IiwgImJveWNvdHQiIH0sIHsKICAgICAgICAgICAgImJyb2NvbGxpIiwgImJyb2Njb2xpIiB9LCB7CiAgICAgICAgICAgICJidWNoIiwgImJ1c2giIH0sIHsKICAgICAgICAgICAgImJ1ZGVyIiwgImJ1dHRlciIgfSwgewogICAgICAgICAgICAiYnVkciIsICJidXR0ZXIiIH0sIHsKICAgICAgICAgICAgImJ1ZHRlciIsICJidXR0ZXIiIH0sIHsKICAgICAgICAgICAgImJ1cmFjcmFjeSIsICJidXJlYXVjcmFjeSIgfSwgewogICAgICAgICAgICAiYnVycmFjcmFjeSIsICJidXJlYXVjcmFjeSIgfSwgewogICAgICAgICAgICAiYnV0b24iLCAiYnV0dG9uIiB9LCB7CiAgICAgICAgICAgICJieWJ5IiwgImJ5IGJ5IiB9LCB7CiAgICAgICAgICAgICJjYXVsZXIiLCAiY2FsbGVyIiB9LCB7CiAgICAgICAgICAgICJjZWFzYXIiLCAiY2Flc2FyIiB9LCB7CiAgICAgICAgICAgICJjZW1ldGFyeSIsICJjZW1ldGVyeSIgfSwgewogICAgICAgICAgICAiY2hhbmdlaW5nIiwgImNoYW5naW5nIiB9LCB7CiAgICAgICAgICAgICJjaGVldCIsICJjaGVhdCIgfSwgewogICAgICAgICAgICAiY2ljbGUiLCAiY2lyY2xlIiB9LCB7CiAgICAgICAgICAgICJjaW1wbGljaXR5IiwgInNpbXBsaWNpdHkiIH0sIHsKICAgICAgICAgICAgImNpcmN1bXN0YWNlcyIsICJjaXJjdW1zdGFuY2VzIiB9LCB7CiAgICAgICAgICAgICJjbG9iIiwgImNsdWIiIH0sIHsKICAgICAgICAgICAgImNvYWxuIiwgImNvbG9uIiB9LCB7CiAgICAgICAgICAgICJjb2NhbWVuYSIsICJjb2NrYW1hbWllIiB9LCB7CiAgICAgICAgICAgICJjb2xsZWFxdWUiLCAiY29sbGVhZ3VlIiB9LCB7CiAgICAgICAgICAgICJjb2xsb3F1aWxpc20iLCAiY29sbG9xdWlhbGlzbSIgfSwgewogICAgICAgICAgICAiY29sdW1uZSIsICJjb2x1bW4iIH0sIHsKICAgICAgICAgICAgImNvbWlsZXIiLCAiY29tcGlsZXIiIH0sIHsKICAgICAgICAgICAgImNvbWl0bW1lbnQiLCAiY29tbWl0bWVudCIgfSwgewogICAgICAgICAgICAiY29taXR0ZSIsICJjb21taXR0ZWUiIH0sIHsKICAgICAgICAgICAgImNvbWl0dG1lbiIsICJjb21taXRtZW50IiB9LCB7CiAgICAgICAgICAgICJjb21pdHRtZW5kIiwgImNvbW1pdG1lbnQiIH0sIHsKICAgICAgICAgICAgImNvbW1lcmNpYXNsIiwgImNvbW1lcmNpYWxzIiB9LCB7CiAgICAgICAgICAgICJjb21taXRlZCIsICJjb21taXR0ZWQiIH0sIHsKICAgICAgICAgICAgImNvbW1pdGVlIiwgImNvbW1pdHRlZSIgfSwgewogICAgICAgICAgICAiY29tcGFueXMiLCAiY29tcGFuaWVzIiB9LCB7CiAgICAgICAgICAgICJjb21waWNhdGVkIiwgImNvbXBsaWNhdGVkIiB9LCB7CiAgICAgICAgICAgICJjb211cHRlciIsICJjb21wdXRlciIgfSwgewogICAgICAgICAgICAiY29uY2Vuc3VzIiwgImNvbnNlbnN1cyIgfSwgewogICAgICAgICAgICAiY29uZnVzaW9uaXNtIiwgImNvbmZ1Y2lhbmlzbSIgfSwgewogICAgICAgICAgICAiY29uZ3JhZHVsYXRpb25zIiwgImNvbmdyYXR1bGF0aW9ucyIgfSwgewogICAgICAgICAgICAiY29uaWJhdGlvbiIsICJjb250cmlidXRpb24iIH0sIHsKICAgICAgICAgICAgImNvbnNpZGVudCIsICJjb25zaXN0ZW50IiB9LCB7CiAgICAgICAgICAgICJjb25zaWRlbnQiLCAiY29uc29uYW50IiB9LCB7CiAgICAgICAgICAgICJjb250YXN0IiwgImNvbnN0YW50IiB9LCB7CiAgICAgICAgICAgICJjb250YXN0YW50IiwgImNvbnN0YW50IiB9LCB7CiAgICAgICAgICAgICJjb250dW5pZSIsICJjb250aW51ZSIgfSwgewogICAgICAgICAgICAiY29vbHkiLCAiY29vbGx5IiB9LCB7CiAgICAgICAgICAgICJjb3BwaW5nIiwgImNvcGluZyIgfSwgewogICAgICAgICAgICAiY29zbW9wbHl0b24iLCAiY29zbW9wb2xpdGFuIiB9LCB7CiAgICAgICAgICAgICJjb3Vyc3QiLCAiY291cnQiIH0sIHsKICAgICAgICAgICAgImNyYXN5IiwgImNyYXp5IiB9LCB7CiAgICAgICAgICAgICJjcmF2ZXRzIiwgImNhdmVhdHMiIH0sIHsKICAgICAgICAgICAgImNyZWRldGFiaWxpdHkiLCAiY3JlZGliaWxpdHkiIH0sIHsKICAgICAgICAgICAgImNyaXFpdHVlIiwgImNyaXRpcXVlIiB9LCB7CiAgICAgICAgICAgICJjcm9rZSIsICJjcm9hayIgfSwgewogICAgICAgICAgICAiY3J1Y2lmaWN0aW9uIiwgImNydWNpZml4aW9uIiB9LCB7CiAgICAgICAgICAgICJjcnVzaWZlZCIsICJjcnVjaWZpZWQiIH0sIHsKICAgICAgICAgICAgImN0aXRpcXVlIiwgImNyaXRpcXVlIiB9LCB7CiAgICAgICAgICAgICJjdW1iYSIsICJjb21ibyIgfSwgewogICAgICAgICAgICAiY3VzdGFtaXNhdGlvbiIsICJjdXN0b21pemF0aW9uIiB9LCB7CiAgICAgICAgICAgICJkYWciLCAiZG9nIiB9LCB7CiAgICAgICAgICAgICJkYWx5IiwgImRhaWx5IiB9LCB7CiAgICAgICAgICAgICJkYW5ndWFnZXMiLCAiZGFuZ2Vyb3VzIiB9LCB7CiAgICAgICAgICAgICJkZWFmdCIsICJkcmFmdCIgfSwgewogICAgICAgICAgICAiZGVmZW5jZSIsICJkZWZlbnNlIiB9LCB7CiAgICAgICAgICAgICJkZWZlbmx5IiwgImRlZmlhbnRseSIgfSwgewogICAgICAgICAgICAiZGVmaW5hdGUiLCAiZGVmaW5pdGUiIH0sIHsKICAgICAgICAgICAgImRlZmluYXRlbHkiLCAiZGVmaW5pdGVseSIgfSwgewogICAgICAgICAgICAiZGVwZW5kZWJsZSIsICJkZXBlbmRhYmxlIiB9LCB7CiAgICAgICAgICAgICJkZXNjcnB0aW9uIiwgImRlc2NyaXB0aW9uIiB9LCB7CiAgICAgICAgICAgICJkZXNjcnB0biIsICJkZXNjcmlwdGlvbiIgfSwgewogICAgICAgICAgICAiZGVzcGFyYXRlIiwgImRlc3BlcmF0ZSIgfSwgewogICAgICAgICAgICAiZGVzc2ljYXRlIiwgImRlc2ljY2F0ZSIgfSwgewogICAgICAgICAgICAiZGVzdGludCIsICJkaXN0YW50IiB9LCB7CiAgICAgICAgICAgICJkZXZlbGVwbWVudCIsICJkZXZlbG9wbWVudHMiIH0sIHsKICAgICAgICAgICAgImRldmVsb3BlbWVudCIsICJkZXZlbG9wbWVudCIgfSwgewogICAgICAgICAgICAiZGV2ZWxwb25kIiwgImRldmVsb3BtZW50IiB9LCB7CiAgICAgICAgICAgICJkZXZ1bGdlIiwgImRpdnVsZ2UiIH0sIHsKICAgICAgICAgICAgImRpYWdyZWUiLCAiZGlzYWdyZWUiIH0sIHsKICAgICAgICAgICAgImRpZXRpZXMiLCAiZGVpdGllcyIgfSwgewogICAgICAgICAgICAiZGluYXNhdXIiLCAiZGlub3NhdXIiIH0sIHsKICAgICAgICAgICAgImRpbmFzb3VyIiwgImRpbm9zYXVyIiB9LCB7CiAgICAgICAgICAgICJkaXJlY3lseSIsICJkaXJlY3RseSIgfSwgewogICAgICAgICAgICAiZGlzY3Vlc3MiLCAiZGlzY3VzcyIgfSwgewogICAgICAgICAgICAiZGlzZWN0IiwgImRpc3NlY3QiIH0sIHsKICAgICAgICAgICAgImRpc2lwcGF0ZSIsICJkaXNzaXBhdGUiIH0sIHsKICAgICAgICAgICAgImRpc2l0aW9uIiwgImRlY2lzaW9uIiB9LCB7CiAgICAgICAgICAgICJkaXNwYWlyIiwgImRlc3BhaXIiIH0sIHsKICAgICAgICAgICAgImRpc3NzaWNpb24iLCAiZGlzY3Vzc2lvbiIgfSwgewogICAgICAgICAgICAiZGlzdGFyY3QiLCAiZGlzdHJhY3QiIH0sIHsKICAgICAgICAgICAgImRpc3RhcnQiLCAiZGlzdG9ydCIgfSwgewogICAgICAgICAgICAiZGlzdHJveSIsICJkZXN0cm95IiB9LCB7CiAgICAgICAgICAgICJkb2N1bXRhdGlvbnMiLCAiZG9jdW1lbnRhdGlvbiIgfSwgewogICAgICAgICAgICAiZG9lbmxvYWQiLCAiZG93bmxvYWQiIH0sIHsKICAgICAgICAgICAgImRvbmdsZSIsICJkYW5nbGUiIH0sIHsKICAgICAgICAgICAgImRvb2ciLCAiZG9nIiB9LCB7CiAgICAgICAgICAgICJkcmFtYXRpY2x5IiwgImRyYW1hdGljYWxseSIgfSwgewogICAgICAgICAgICAiZHJ1bmtlbmVzcyIsICJkcnVua2VubmVzcyIgfSwgewogICAgICAgICAgICAiZHVjdGlvbmVlcnkiLCAiZGljdGlvbmFyeSIgfSwgewogICAgICAgICAgICAiZHVyIiwgImR1ZSIgfSwgewogICAgICAgICAgICAiZHVyZW4iLCAiZHVyaW5nIiB9LCB7CiAgICAgICAgICAgICJkeW1hdGljIiwgImR5bmFtaWMiIH0sIHsKICAgICAgICAgICAgImR5bmFpYyIsICJkeW5hbWljIiB9LCB7CiAgICAgICAgICAgICJlY3N0YWN5IiwgImVjc3Rhc3kiIH0sIHsKICAgICAgICAgICAgImVmZmljYXQiLCAiZWZmaWNpZW50IiB9LCB7CiAgICAgICAgICAgICJlZmZpY2l0eSIsICJlZmZpY2FjeSIgfSwgewogICAgICAgICAgICAiZWZmb3RzIiwgImVmZm9ydHMiIH0sIHsKICAgICAgICAgICAgImVnc2lzdGVuY2UiLCAiZXhpc3RlbmNlIiB9LCB7CiAgICAgICAgICAgICJlaXRpb2xvZ3kiLCAiZXRpb2xvZ3kiIH0sIHsKICAgICAgICAgICAgImVsYWdlbnQiLCAiZWxlZ2FudCIgfSwgewogICAgICAgICAgICAiZWxsaWdpdCIsICJlbGVnYW50IiB9LCB7CiAgICAgICAgICAgICJlbWJhcmFzcyIsICJlbWJhcnJhc3MiIH0sIHsKICAgICAgICAgICAgImVtYmFyYXNzbWVudCIsICJlbWJhcnJhc3NtZW50IiB9LCB7CiAgICAgICAgICAgICJlbWJhcmVzcyIsICJlbWJhcnJhc3MiIH0sIHsKICAgICAgICAgICAgImVuY2Fwc3VhbHRpb24iLCAiZW5jYXBzdWxhdGlvbiIgfSwgewogICAgICAgICAgICAiZW5jeWNsYXBpZGlhIiwgImVuY3ljbG9wZWRpYSIgfSwgewogICAgICAgICAgICAiZW5jeWNsb3BpYSIsICJlbmN5Y2xvcGVkaWEiIH0sIHsKICAgICAgICAgICAgImVuZ2lucyIsICJlbmdpbmUiIH0sIHsKICAgICAgICAgICAgImVuaGVuY2UiLCAiZW5oYW5jZSIgfSwgewogICAgICAgICAgICAiZW5saWd0bWVudCIsICJFbmxpZ2h0ZW5tZW50IiB9LCB7CiAgICAgICAgICAgICJlbm51dWkiLCAiZW5udWkiIH0sIHsKICAgICAgICAgICAgImVub3VnaHQiLCAiZW5vdWdoIiB9LCB7CiAgICAgICAgICAgICJlbnZlbnRpb25zIiwgImludmVudGlvbnMiIH0sIHsKICAgICAgICAgICAgImVudmlyZW1pbmFrbCIsICJlbnZpcm9ubWVudGFsIiB9LCB7CiAgICAgICAgICAgICJlbnZpcm9tZW50IiwgImVudmlyb25tZW50IiB9LCB7CiAgICAgICAgICAgICJlcGl0b215IiwgImVwaXRvbWUiIH0sIHsKICAgICAgICAgICAgImVxdWlyZSIsICJhY3F1aXJlIiB9LCB7CiAgICAgICAgICAgICJlcnJhcmEiLCAiZXJyb3IiIH0sIHsKICAgICAgICAgICAgImVycm8iLCAiZXJyb3IiIH0sIHsKICAgICAgICAgICAgImV2YXVhbHRpb24iLCAiZXZhbHVhdGlvbiIgfSwgewogICAgICAgICAgICAiZXZldGhpbmciLCAiZXZlcnl0aGluZyIgfSwgewogICAgICAgICAgICAiZXZ0dWFsbHkiLCAiZXZlbnR1YWxseSIgfSwgewogICAgICAgICAgICAiZXhjZWRlIiwgImV4Y2VlZCIgfSwgewogICAgICAgICAgICAiZXhjZXJjaXNlIiwgImV4ZXJjaXNlIiB9LCB7CiAgICAgICAgICAgICJleGNwdCIsICJleGNlcHQiIH0sIHsKICAgICAgICAgICAgImV4Y3V0aW9uIiwgImV4ZWN1dGlvbiIgfSwgewogICAgICAgICAgICAiZXhoaWxlcmF0aW9uIiwgImV4aGlsYXJhdGlvbiIgfSwgewogICAgICAgICAgICAiZXhpc3RhbmNlIiwgImV4aXN0ZW5jZSIgfSwgewogICAgICAgICAgICAiZXhwbGV5bHkiLCAiZXhwbGljaXRseSIgfSwgewogICAgICAgICAgICAiZXhwbGl0eSIsICJleHBsaWNpdGx5IiB9LCB7CiAgICAgICAgICAgICJleHByZXNzbyIsICJlc3ByZXNzbyIgfSwgewogICAgICAgICAgICAiZXhzcGlkaWVudCIsICJleHBlZGllbnQiIH0sIHsKICAgICAgICAgICAgImV4dGlvbnMiLCAiZXh0ZW5zaW9ucyIgfSwgewogICAgICAgICAgICAiZmFjdG9udGlvbiIsICJmYWN0b3JpemF0aW9uIiB9LCB7CiAgICAgICAgICAgICJmYWlsZXIiLCAiZmFpbHVyZSIgfSwgewogICAgICAgICAgICAiZmFtZGFzeSIsICJmYW50YXN5IiB9LCB7CiAgICAgICAgICAgICJmYXZlciIsICJmYXZvciIgfSwgewogICAgICAgICAgICAiZmF4ZSIsICJmYXgiIH0sIHsKICAgICAgICAgICAgImZlYnVhcnkiLCAiZmVicnVhcnkiIH0sIHsKICAgICAgICAgICAgImZpcmV5IiwgImZpZXJ5IiB9LCB7CiAgICAgICAgICAgICJmaXN0aXZhbCIsICJmZXN0aXZhbCIgfSwgewogICAgICAgICAgICAiZmxhdHRlcnJpbmciLCAiZmxhdHRlcmluZyIgfSwgewogICAgICAgICAgICAiZmx1ayIsICJmbHV4IiB9LCB7CiAgICAgICAgICAgICJmbHVrc2UiLCAiZmx1eCIgfSwgewogICAgICAgICAgICAiZm9uZSIsICJwaG9uZSIgfSwgewogICAgICAgICAgICAiZm9yc2VlIiwgImZvcmVzZWUiIH0sIHsKICAgICAgICAgICAgImZydXN0YXJ0YWlvbiIsICJmcnVzdHJhdGluZyIgfSwgewogICAgICAgICAgICAiZnVjdGlvbiIsICJmdW5jdGlvbiIgfSwgewogICAgICAgICAgICAiZnVuZXRpayIsICJwaG9uZXRpYyIgfSwgewogICAgICAgICAgICAiZnV0cyIsICJndXRzIiB9LCB7CiAgICAgICAgICAgICJnYW1uZSIsICJjYW1lIiB9LCB7CiAgICAgICAgICAgICJnYXVyZCIsICJndWFyZCIgfSwgewogICAgICAgICAgICAiZ2VuZXJseSIsICJnZW5lcmFsbHkiIH0sIHsKICAgICAgICAgICAgImdoYW5kaSIsICJnYW5kaGkiIH0sIHsKICAgICAgICAgICAgImdvYmVybWVudCIsICJnb3Zlcm5tZW50IiB9LCB7CiAgICAgICAgICAgICJnb2Jlcm5lbWVudCIsICJnb3Zlcm5tZW50IiB9LCB7CiAgICAgICAgICAgICJnb2Jlcm5tZW50IiwgImdvdmVybm1lbnQiIH0sIHsKICAgICAgICAgICAgImdvdHRvbiIsICJnb3R0ZW4iIH0sIHsKICAgICAgICAgICAgImdyYWNlZnVsbCIsICJncmFjZWZ1bCIgfSwgewogICAgICAgICAgICAiZ3JhZHVhbHkiLCAiZ3JhZHVhbGx5IiB9LCB7CiAgICAgICAgICAgICJncmFtbWVyIiwgImdyYW1tYXIiIH0sIHsKICAgICAgICAgICAgImhhbGxvIiwgImhlbGxvIiB9LCB7CiAgICAgICAgICAgICJoYXBpbHkiLCAiaGFwcGlseSIgfSwgewogICAgICAgICAgICAiaGFycmFzcyIsICJoYXJhc3MiIH0sIHsKICAgICAgICAgICAgImhhdm5lIiwgImhhdmUiIH0sIHsKICAgICAgICAgICAgImhlZWxscCIsICJoZWxwIiB9LCB7CiAgICAgICAgICAgICJoZWlnaHRoIiwgImhlaWdodCIgfSwgewogICAgICAgICAgICAiaGVsbHAiLCAiaGVscCIgfSwgewogICAgICAgICAgICAiaGVsbyIsICJoZWxsbyIgfSwgewogICAgICAgICAgICAiaGVybG8iLCAiaGVsbG8iIH0sIHsKICAgICAgICAgICAgImhpZmluIiwgImh5cGhlbiIgfSwgewogICAgICAgICAgICAiaGlmaW5lIiwgImh5cGhlbiIgfSwgewogICAgICAgICAgICAiaGlnZXIiLCAiaGlnaGVyIiB9LCB7CiAgICAgICAgICAgICJoaXBoaW5lIiwgImh5cGhlbiIgfSwgewogICAgICAgICAgICAiaGlwcGllIiwgImhpcHB5IiB9LCB7CiAgICAgICAgICAgICJoaXBwb3BvdGFtb3VzIiwgImhpcHBvcG90YW11cyIgfSwgewogICAgICAgICAgICAiaGxwIiwgImhlbHAiIH0sIHsKICAgICAgICAgICAgImhvdXJzZSIsICJob3JzZSIgfSwgewogICAgICAgICAgICAiaG91c3NpbmciLCAiaG91c2luZyIgfSwgewogICAgICAgICAgICAiaG93YXZlciIsICJob3dldmVyIiB9LCB7CiAgICAgICAgICAgICJob3d2ZXIiLCAiaG93ZXZlciIgfSwgewogICAgICAgICAgICAiaHVtYW5pdGkiLCAiaHVtYW5pdHkiIH0sIHsKICAgICAgICAgICAgImh5ZmluIiwgImh5cGhlbiIgfSwgewogICAgICAgICAgICAiaHlwb3RhdGhlcyIsICJoeXBvdGhlc2lzIiB9LCB7CiAgICAgICAgICAgICJoeXBvdGF0aGVzZSIsICJoeXBvdGhlc2lzIiB9LCB7CiAgICAgICAgICAgICJoeXN0cmljYWwiLCAiaHlzdGVyaWNhbCIgfSwgewogICAgICAgICAgICAiaWRlbnQiLCAiaW5kZW50IiB9LCB7CiAgICAgICAgICAgICJpbGxlZ2l0YW1lbnQiLCAiaWxsZWdpdGltYXRlIiB9LCB7CiAgICAgICAgICAgICJpbWJlZCIsICJlbWJlZCIgfSwgewogICAgICAgICAgICAiaW1lZGlhZXRseSIsICJpbW1lZGlhdGVseSIgfSwgewogICAgICAgICAgICAiaW1mYW15IiwgImluZmFteSIgfSwgewogICAgICAgICAgICAiaW1tZW5hbnQiLCAiaW1tYW5lbnQiIH0sIHsKICAgICAgICAgICAgImltcGxlbXRlcyIsICJpbXBsZW1lbnRzIiB9LCB7CiAgICAgICAgICAgICJpbmFkdmVydGFudCIsICJpbmFkdmVydGVudCIgfSwgewogICAgICAgICAgICAiaW5jYXNlIiwgImluIGNhc2UiIH0sIHsKICAgICAgICAgICAgImluY2VkaW91cyIsICJpbnNpZGlvdXMiIH0sIHsKICAgICAgICAgICAgImluY29tcGxlZXQiLCAiaW5jb21wbGV0ZSIgfSwgewogICAgICAgICAgICAiaW5jb21wbG90IiwgImluY29tcGxldGUiIH0sIHsKICAgICAgICAgICAgImluY29udmVuYW50IiwgImluY29udmVuaWVudCIgfSwgewogICAgICAgICAgICAiaW5jb252aWVuY2UiLCAiaW5jb252ZW5pZW5jZSIgfSwgewogICAgICAgICAgICAiaW5kZXBlbmRhbnQiLCAiaW5kZXBlbmRlbnQiIH0sIHsKICAgICAgICAgICAgImluZGVwZW5kZW5lbnQiLCAiaW5kZXBlbmRlbnQiIH0sIHsKICAgICAgICAgICAgImluZGVwbmVuZHMiLCAiaW5kZXBlbmRlbnQiIH0sIHsKICAgICAgICAgICAgImluZGVwdGgiLCAiaW4gZGVwdGgiIH0sIHsKICAgICAgICAgICAgImluZGlzcGVuc2libGUiLCAiaW5kaXNwZW5zYWJsZSIgfSwgewogICAgICAgICAgICAiaW5lZmZpY2l0ZSIsICJpbmVmZmljaWVudCIgfSwgewogICAgICAgICAgICAiaW5lcmZhY2UiLCAiaW50ZXJmYWNlIiB9LCB7CiAgICAgICAgICAgICJpbmZhY3QiLCAiaW4gZmFjdCIgfSwgewogICAgICAgICAgICAiaW5mbHVlbmNpYWwiLCAiaW5mbHVlbnRpYWwiIH0sIHsKICAgICAgICAgICAgImluaXRhbCIsICJpbml0aWFsIiB9LCB7CiAgICAgICAgICAgICJpbml0aW5pemVkIiwgImluaXRpYWxpemVkIiB9LCB7CiAgICAgICAgICAgICJpbml0aXplZCIsICJpbml0aWFsaXplZCIgfSwgewogICAgICAgICAgICAiaW5ub2N1bGF0ZSIsICJpbm9jdWxhdGUiIH0sIHsKICAgICAgICAgICAgImluc2lzdGFudCIsICJpbnNpc3RlbnQiIH0sIHsKICAgICAgICAgICAgImluc2lzdGVuZXQiLCAiaW5zaXN0ZW50IiB9LCB7CiAgICAgICAgICAgICJpbnN0dWxhdGlvbiIsICJpbnN0YWxsYXRpb24iIH0sIHsKICAgICAgICAgICAgImludGVhbGlnbnQiLCAiaW50ZWxsaWdlbnQiIH0sIHsKICAgICAgICAgICAgImludGVqaWxlbnQiLCAiaW50ZWxsaWdlbnQiIH0sIHsKICAgICAgICAgICAgImludGVsZWdlbnQiLCAiaW50ZWxsaWdlbnQiIH0sIHsKICAgICAgICAgICAgImludGVsZWduZW50IiwgImludGVsbGlnZW50IiB9LCB7CiAgICAgICAgICAgICJpbnRlbGVqZW50IiwgImludGVsbGlnZW50IiB9LCB7CiAgICAgICAgICAgICJpbnRlbGlnZW50IiwgImludGVsbGlnZW50IiB9LCB7CiAgICAgICAgICAgICJpbnRlbGlnbnQiLCAiaW50ZWxsaWdlbnQiIH0sIHsKICAgICAgICAgICAgImludGVsbGFnYW50IiwgImludGVsbGlnZW50IiB9LCB7CiAgICAgICAgICAgICJpbnRlbGxlZ2VudCIsICJpbnRlbGxpZ2VudCIgfSwgewogICAgICAgICAgICAiaW50ZWxsZWdpbnQiLCAiaW50ZWxsaWdlbnQiIH0sIHsKICAgICAgICAgICAgImludGVsbGdudCIsICJpbnRlbGxpZ2VudCIgfSwgewogICAgICAgICAgICAiaW50ZW5zaW9uYWxpdHkiLCAiaW50ZW5zaW9uYWxseSIgfSwgewogICAgICAgICAgICAiaW50ZXJhdGUiLCAiaXRlcmF0ZSIgfSwgewogICAgICAgICAgICAiaW50ZXJuYXRpb24iLCAiaW50ZXJuYXRpb25hbCIgfSwgewogICAgICAgICAgICAiaW50ZXJwcmV0YXRlIiwgImludGVycHJldCIgfSwgewogICAgICAgICAgICAiaW50ZXJwcmV0dGVyIiwgImludGVycHJldGVyIiB9LCB7CiAgICAgICAgICAgICJpbnRlcnRlcyIsICJpbnRlcmVzdGVkIiB9LCB7CiAgICAgICAgICAgICJpbnRlcnRlc2QiLCAiaW50ZXJlc3RlZCIgfSwgewogICAgICAgICAgICAiaW52ZXJtZWFudGlhbCIsICJlbnZpcm9ubWVudGFsIiB9LCB7CiAgICAgICAgICAgICJpcnJlZ2FyZGxlc3MiLCAicmVnYXJkbGVzcyIgfSwgewogICAgICAgICAgICAiaXJyZXNpc3RhYmxlIiwgImlycmVzaXN0aWJsZSIgfSwgewogICAgICAgICAgICAiaXJyaXRpYmxlIiwgImlycml0YWJsZSIgfSwgewogICAgICAgICAgICAiaXNsYW1zIiwgIm11c2xpbXMiIH0sIHsKICAgICAgICAgICAgImlzb3Ryb3AiLCAiaXNvdG9wZSIgfSwgewogICAgICAgICAgICAiaXNyZWFsIiwgImlzcmFlbCIgfSwgewogICAgICAgICAgICAiam9oaG4iLCAiam9obiIgfSwgewogICAgICAgICAgICAianVkZ2VtZW50IiwgImp1ZGdtZW50IiB9LCB7CiAgICAgICAgICAgICJraXBwdXIiLCAia2lwcGVyIiB9LCB7CiAgICAgICAgICAgICJrbmF3aW5nIiwgImtub3dpbmciIH0sIHsKICAgICAgICAgICAgImxhdGV4dCIsICJsYXRlc3QiIH0sIHsKICAgICAgICAgICAgImxlYXN2ZSIsICJsZWF2ZSIgfSwgewogICAgICAgICAgICAibGVzdXJlIiwgImxlaXN1cmUiIH0sIHsKICAgICAgICAgICAgImxpYXNpb24iLCAibGVzaW9uIiB9LCB7CiAgICAgICAgICAgICJsaWFzb24iLCAibGlhaXNvbiIgfSwgewogICAgICAgICAgICAibGliYXJ5IiwgImxpYnJhcnkiIH0sIHsKICAgICAgICAgICAgImxpa2x5IiwgImxpa2VseSIgfSwgewogICAgICAgICAgICAibGlsb21ldGVyIiwgImtpbG9tZXRlciIgfSwgewogICAgICAgICAgICAibGlxdWlmeSIsICJsaXF1ZWZ5IiB9LCB7CiAgICAgICAgICAgICJsbG95ZXIiLCAibGF5ZXIiIH0sIHsKICAgICAgICAgICAgImxvc3NpbmciLCAibG9zaW5nIiB9LCB7CiAgICAgICAgICAgICJsdXNlciIsICJsYXNlciIgfSwgewogICAgICAgICAgICAibWFpbnRhbmVuY2UiLCAibWFpbnRlbmFuY2UiIH0sIHsKICAgICAgICAgICAgIm1hamFlcmx5IiwgIm1ham9yaXR5IiB9LCB7CiAgICAgICAgICAgICJtYWpvcmFseSIsICJtYWpvcml0eSIgfSwgewogICAgICAgICAgICAibWFrcyIsICJtYXNrcyIgfSwgewogICAgICAgICAgICAibWFuZGVsYnJvdCIsICJNYW5kZWxicm90IiB9LCB7CiAgICAgICAgICAgICJtYW50IiwgIndhbnQiIH0sIHsKICAgICAgICAgICAgIm1hcnNoYWxsIiwgIm1hcnNoYWwiIH0sIHsKICAgICAgICAgICAgIm1heGl1bSIsICJtYXhpbXVtIiB9LCB7CiAgICAgICAgICAgICJtZW9yeSIsICJtZW1vcnkiIH0sIHsKICAgICAgICAgICAgIm1ldHRlciIsICJiZXR0ZXIiIH0sIHsKICAgICAgICAgICAgIm1pYyIsICJtaWtlIiB9LCB7CiAgICAgICAgICAgICJtaWRpYSIsICJtZWRpYSIgfSwgewogICAgICAgICAgICAibWlsbGVuaXVtIiwgIm1pbGxlbm5pdW0iIH0sIHsKICAgICAgICAgICAgIm1pbmlzY3VsZSIsICJtaW51c2N1bGUiIH0sIHsKICAgICAgICAgICAgIm1pbmtheSIsICJtb25rZXkiIH0sIHsKICAgICAgICAgICAgIm1pbnVtIiwgIm1pbmltdW0iIH0sIHsKICAgICAgICAgICAgIm1pc2NoaWV2aW91cyIsICJtaXNjaGlldm91cyIgfSwgewogICAgICAgICAgICAibWlzaWxvdXMiLCAibWlzY2VsbGFuZW91cyIgfSwgewogICAgICAgICAgICAibW9tZW50byIsICJtZW1lbnRvIiB9LCB7CiAgICAgICAgICAgICJtb25rYXkiLCAibW9ua2V5IiB9LCB7CiAgICAgICAgICAgICJtb3NhaWsiLCAibW9zYWljIiB9LCB7CiAgICAgICAgICAgICJtb3N0bGlrZWx5IiwgIm1vc3QgbGlrZWx5IiB9LCB7CiAgICAgICAgICAgICJtb3VzciIsICJtb3VzZXIiIH0sIHsKICAgICAgICAgICAgIm1yb2UiLCAibW9yZSIgfSwgewogICAgICAgICAgICAibmVjY2Vzc2FyeSIsICJuZWNlc3NhcnkiIH0sIHsKICAgICAgICAgICAgIm5lY2VzYXJ5IiwgIm5lY2Vzc2FyeSIgfSwgewogICAgICAgICAgICAibmVjZXNzZXIiLCAibmVjZXNzYXJ5IiB9LCB7CiAgICAgICAgICAgICJuZWljZSIsICJuaWVjZSIgfSwgewogICAgICAgICAgICAibmVpZ2hib3VyIiwgIm5laWdoYm9yIiB9LCB7CiAgICAgICAgICAgICJuZW1vbmljIiwgInBuZXVtb25pYyIgfSwgewogICAgICAgICAgICAibmV2YWRlIiwgIk5ldmFkYSIgfSwgewogICAgICAgICAgICAibmlja2xlb2Rlb24iLCAibmlja2Vsb2Rlb24iIH0sIHsKICAgICAgICAgICAgIm5pZXZlIiwgIm5haXZlIiB9LCB7CiAgICAgICAgICAgICJub29uZSIsICJubyBvbmUiIH0sIHsKICAgICAgICAgICAgIm5vdGljYWJseSIsICJub3RpY2VhYmx5IiB9LCB7CiAgICAgICAgICAgICJub3RpbiIsICJub3QgaW4iIH0sIHsKICAgICAgICAgICAgIm5vemxlZCIsICJudXp6bGVkIiB9LCB7CiAgICAgICAgICAgICJvYmplY3RzaW9uIiwgIm9iamVjdHMiIH0sIHsKICAgICAgICAgICAgIm9ic2Z1c2NhdGUiLCAib2JmdXNjYXRlIiB9LCB7CiAgICAgICAgICAgICJvY2Fzc2lvbiIsICJvY2Nhc2lvbiIgfSwgewogICAgICAgICAgICAib2NjdXBwaWVkIiwgIm9jY3VwaWVkIiB9LCB7CiAgICAgICAgICAgICJvY2N1cmVuY2UiLCAib2NjdXJyZW5jZSIgfSwgewogICAgICAgICAgICAib2N0YWdlbmFyaWFuIiwgIm9jdG9nZW5hcmlhbiIgfSwgewogICAgICAgICAgICAib2xmIiwgIm9sZCIgfSwgewogICAgICAgICAgICAib3Bwb3NpbSIsICJvcG9zc3VtIiB9LCB7CiAgICAgICAgICAgICJvcmdhbmlzZSIsICJvcmdhbml6ZSIgfSwgewogICAgICAgICAgICAib3JnYW5peiIsICJvcmdhbml6ZSIgfSwgewogICAgICAgICAgICAib3JpZW50YXRlIiwgIm9yaWVudCIgfSwgewogICAgICAgICAgICAib3NjaWxhc2NvcGUiLCAib3NjaWxsb3Njb3BlIiB9LCB7CiAgICAgICAgICAgICJvdmluZyIsICJtb3ZpbmciIH0sIHsKICAgICAgICAgICAgInBhcmFtZXJzIiwgInBhcmFtZXRlcnMiIH0sIHsKICAgICAgICAgICAgInBhcmFtZXRpYyIsICJwYXJhbWV0ZXIiIH0sIHsKICAgICAgICAgICAgInBhcmFuZXRzIiwgInBhcmFtZXRlcnMiIH0sIHsKICAgICAgICAgICAgInBhcnRydWNhbCIsICJwYXJ0aWN1bGFyIiB9LCB7CiAgICAgICAgICAgICJwYXRhcGh5c2ljYWwiLCAibWV0YXBoeXNpY2FsIiB9LCB7CiAgICAgICAgICAgICJwYXR0ZW4iLCAicGF0dGVybiIgfSwgewogICAgICAgICAgICAicGVybWlzc2FibGUiLCAicGVybWlzc2libGUiIH0sIHsKICAgICAgICAgICAgInBlcm1pdGlvbiIsICJwZXJtaXNzaW9uIiB9LCB7CiAgICAgICAgICAgICJwZXJtbWFzaXZpZSIsICJwZXJtaXNzaXZlIiB9LCB7CiAgICAgICAgICAgICJwZXJvZ2F0aXZlIiwgInByZXJvZ2F0aXZlIiB9LCB7CiAgICAgICAgICAgICJwZXJzdWUiLCAicHVyc3VlIiB9LCB7CiAgICAgICAgICAgICJwaGFudGFzaWEiLCAiZmFudGFzaWEiIH0sIHsKICAgICAgICAgICAgInBoZW5vbWluYWwiLCAicGhlbm9tZW5hbCIgfSwgewogICAgICAgICAgICAicGljYXJlc3F1ZSIsICJwaWN0dXJlc3F1ZSIgfSwgewogICAgICAgICAgICAicGxheXdyaXRlIiwgInBsYXl3cmlnaHQiIH0sIHsKICAgICAgICAgICAgInBvZXNlcyIsICJwb2VzaWVzIiB9LCB7CiAgICAgICAgICAgICJwb2xhdGlvbiIsICJwb2xpdGljaWFuIiB9LCB7CiAgICAgICAgICAgICJwb2xpZ2FteSIsICJwb2x5Z2FteSIgfSwgewogICAgICAgICAgICAicG9saXRpY3QiLCAicG9saXRpYyIgfSwgewogICAgICAgICAgICAicG9sbGljZSIsICJwb2xpY2UiIH0sIHsKICAgICAgICAgICAgInBvbHlwcm9wYWxlbmUiLCAicG9seXByb3B5bGVuZSIgfSwgewogICAgICAgICAgICAicG9tcG9tIiwgInBvbXBvbiIgfSwgewogICAgICAgICAgICAicG9zc2FibGUiLCAicG9zc2libGUiIH0sIHsKICAgICAgICAgICAgInByYWN0aWNsZSIsICJwcmFjdGljYWwiIH0sIHsKICAgICAgICAgICAgInByYWdtYXRpY2lzbSIsICJwcmFnbWF0aXNtIiB9LCB7CiAgICAgICAgICAgICJwcmVjZWVkaW5nIiwgInByZWNlZGluZyIgfSwgewogICAgICAgICAgICAicHJlY2lvbiIsICJwcmVjaXNpb24iIH0sIHsKICAgICAgICAgICAgInByZWNpb3MiLCAicHJlY2lzaW9uIiB9LCB7CiAgICAgICAgICAgICJwcmVlbXB0b3J5IiwgInBlcmVtcHRvcnkiIH0sIHsKICAgICAgICAgICAgInByZWZpY2VzIiwgInByZWZpeGVzIiB9LCB7CiAgICAgICAgICAgICJwcmVmaXh0IiwgInByZWZpeGVkIiB9LCB7CiAgICAgICAgICAgICJwcmVzYnl0ZXJpYW4iLCAiUHJlc2J5dGVyaWFuIiB9LCB7CiAgICAgICAgICAgICJwcmVzdWUiLCAicHVyc3VlIiB9LCB7CiAgICAgICAgICAgICJwcmVzdWVkIiwgInB1cnN1ZWQiIH0sIHsKICAgICAgICAgICAgInByaXZpZWxhZ2UiLCAicHJpdmlsZWdlIiB9LCB7CiAgICAgICAgICAgICJwcml2aWxlZGdlIiwgInByaXZpbGVnZSIgfSwgewogICAgICAgICAgICAicHJvY2VlZHVyZXMiLCAicHJvY2VkdXJlcyIgfSwgewogICAgICAgICAgICAicHJvbmVuc2lhdGlvbiIsICJwcm9udW5jaWF0aW9uIiB9LCB7CiAgICAgICAgICAgICJwcm9uaXNhdGlvbiIsICJwcm9udW5jaWF0aW9uIiB9LCB7CiAgICAgICAgICAgICJwcm9ub3VuY2lhdGlvbiIsICJwcm9udW5jaWF0aW9uIiB9LCB7CiAgICAgICAgICAgICJwcm9wZXJhbGx5IiwgInByb3Blcmx5IiB9LCB7CiAgICAgICAgICAgICJwcm9wbGVtYXRpYyIsICJwcm9ibGVtYXRpYyIgfSwgewogICAgICAgICAgICAicHJvdHJheSIsICJwb3J0cmF5IiB9LCB7CiAgICAgICAgICAgICJwc2NvbGdzdCIsICJwc3ljaG9sb2dpc3QiIH0sIHsKICAgICAgICAgICAgInBzaWNvbGFnZXN0IiwgInBzeWNob2xvZ2lzdCIgfSwgewogICAgICAgICAgICAicHN5Y29sYWdlc3QiLCAicHN5Y2hvbG9naXN0IiB9LCB7CiAgICAgICAgICAgICJxdW96IiwgInF1aXoiIH0sIHsKICAgICAgICAgICAgInJhZGlvdXMiLCAicmFkaXVzIiB9LCB7CiAgICAgICAgICAgICJyYW1wbGlseSIsICJyYW1wYW50bHkiIH0sIHsKICAgICAgICAgICAgInJlY2NvbWVuZCIsICJyZWNvbW1lbmQiIH0sIHsKICAgICAgICAgICAgInJlY2NvbmEiLCAicmFjY29vbiIgfSwgewogICAgICAgICAgICAicmVjaWV2ZSIsICJyZWNlaXZlIiB9LCB7CiAgICAgICAgICAgICJyZWNvbmlzZSIsICJyZWNvZ25pemUiIH0sIHsKICAgICAgICAgICAgInJlY3RhbmdlbGVzIiwgInJlY3RhbmdsZSIgfSwgewogICAgICAgICAgICAicmVkaWduIiwgInJlZGVzaWduIiB9LCB7CiAgICAgICAgICAgICJyZW9jY3VycmluZyIsICJyZWN1cnJpbmciIH0sIHsKICAgICAgICAgICAgInJlcGl0aXRpb24iLCAicmVwZXRpdGlvbiIgfSwgewogICAgICAgICAgICAicmVwbGFzbWVudHMiLCAicmVwbGFjZW1lbnQiIH0sIHsKICAgICAgICAgICAgInJlcG9zYWJsZSIsICJyZXNwb25zaWJsZSIgfSwgewogICAgICAgICAgICAicmVzZWJsZW5jZSIsICJyZXNlbWJsYW5jZSIgfSwgewogICAgICAgICAgICAicmVzcGN0IiwgInJlc3BlY3QiIH0sIHsKICAgICAgICAgICAgInJlc3BlY2FsbHkiLCAicmVzcGVjdGZ1bGx5IiB9LCB7CiAgICAgICAgICAgICJyb29uIiwgInJvb20iIH0sIHsKICAgICAgICAgICAgInJvdWdodCIsICJyb3VnaGx5IiB9LCB7CiAgICAgICAgICAgICJyc3giLCAiUlNYIiB9LCB7CiAgICAgICAgICAgICJydWRlbXRyeSIsICJydWRpbWVudGFyeSIgfSwgewogICAgICAgICAgICAicnVubnVuZyIsICJydW5uaW5nIiB9LCB7CiAgICAgICAgICAgICJzYWNyZWxpZ2lvdXMiLCAic2FjcmlsZWdpb3VzIiB9LCB7CiAgICAgICAgICAgICJzYWZ0bHkiLCAic2FmZWx5IiB9LCB7CiAgICAgICAgICAgICJzYWx1dCIsICJzYWx1dGUiIH0sIHsKICAgICAgICAgICAgInNhdGlmbHkiLCAic2F0aXNmeSIgfSwgewogICAgICAgICAgICAic2NyYWJkbGUiLCAic2NyYWJibGUiIH0sIHsKICAgICAgICAgICAgInNlYXJjaGVhYmxlIiwgInNlYXJjaGFibGUiIH0sIHsKICAgICAgICAgICAgInNlY2lvbiIsICJzZWN0aW9uIiB9LCB7CiAgICAgICAgICAgICJzZWZlcmFsIiwgInNldmVyYWwiIH0sIHsKICAgICAgICAgICAgInNlZ2VtZW50cyIsICJzZWdtZW50cyIgfSwgewogICAgICAgICAgICAic2VuY2UiLCAic2Vuc2UiIH0sIHsKICAgICAgICAgICAgInNlcGVyYXRlIiwgInNlcGFyYXRlIiB9LCB7CiAgICAgICAgICAgICJzaGVyYmVydCIsICJzaGVyYmV0IiB9LCB7CiAgICAgICAgICAgICJzaWNvbGFnZXN0IiwgInBzeWNob2xvZ2lzdCIgfSwgewogICAgICAgICAgICAic2llemUiLCAic2VpemUiIH0sIHsKICAgICAgICAgICAgInNpbXBmaWx0eSIsICJzaW1wbGljaXR5IiB9LCB7CiAgICAgICAgICAgICJzaW1wbHllIiwgInNpbXBseSIgfSwgewogICAgICAgICAgICAic2luZ2FsIiwgInNpZ25hbCIgfSwgewogICAgICAgICAgICAic2l0dGUiLCAic2l0ZSIgfSwgewogICAgICAgICAgICAic2l0dXJhdGlvbiIsICJzaXR1YXRpb24iIH0sIHsKICAgICAgICAgICAgInNseXBoIiwgInN5bHBoIiB9LCB7CiAgICAgICAgICAgICJzbWlsIiwgInNtaWxlIiB9LCB7CiAgICAgICAgICAgICJzbnVjayIsICJzbmVha2VkIiB9LCB7CiAgICAgICAgICAgICJzb21ldG1lcyIsICJzb21ldGltZXMiIH0sIHsKICAgICAgICAgICAgInNvb25lYyIsICJzb25pYyIgfSwgewogICAgICAgICAgICAic3BlY2lmaWNpYWx5IiwgInNwZWNpZmljYWxseSIgfSwgewogICAgICAgICAgICAic3BlbCIsICJzcGVsbCIgfSwgewogICAgICAgICAgICAic3BvYWsiLCAic3Bva2UiIH0sIHsKICAgICAgICAgICAgInNwb25zZXJlZCIsICJzcG9uc29yZWQiIH0sIHsKICAgICAgICAgICAgInN0ZXJpbmciLCAic3RlZXJpbmciIH0sIHsKICAgICAgICAgICAgInN0cmFpZ2h0amFja2V0IiwgInN0cmFpdGphY2tldCIgfSwgewogICAgICAgICAgICAic3R1bWFjaCIsICJzdG9tYWNoIiB9LCB7CiAgICAgICAgICAgICJzdHV0ZW50IiwgInN0dWRlbnQiIH0sIHsKICAgICAgICAgICAgInN0eWxlZ3VpZGUiLCAic3R5bGUgZ3VpZGUiIH0sIHsKICAgICAgICAgICAgInN1YmlzaXRpb25zIiwgInN1YnN0aXR1dGlvbnMiIH0sIHsKICAgICAgICAgICAgInN1YmplY3JpYmVkIiwgInN1YnNjcmliZWQiIH0sIHsKICAgICAgICAgICAgInN1YnBlbmEiLCAic3VicG9lbmEiIH0sIHsKICAgICAgICAgICAgInN1YnN0YXRpb25zIiwgInN1YnN0aXR1dGlvbnMiIH0sIHsKICAgICAgICAgICAgInN1Z2VyIiwgInN1Z2FyIiB9LCB7CiAgICAgICAgICAgICJzdXBlcmNlZGUiLCAic3VwZXJzZWRlIiB9LCB7CiAgICAgICAgICAgICJzdXBlcmZ1bG91cyIsICJzdXBlcmZsdW91cyIgfSwgewogICAgICAgICAgICAic3VzYW4iLCAiU3VzYW4iIH0sIHsKICAgICAgICAgICAgInN3aW13ZWFyIiwgInN3aW0gd2VhciIgfSwgewogICAgICAgICAgICAic3luY29yaXphdGlvbiIsICJzeW5jaHJvbml6YXRpb24iIH0sIHsKICAgICAgICAgICAgInRhZmYiLCAidG91Z2giIH0sIHsKICAgICAgICAgICAgInRhaHQiLCAidGhhdCIgfSwgewogICAgICAgICAgICAidGF0dG9zIiwgInRhdHRvb3MiIH0sIHsKICAgICAgICAgICAgInRlY2huaXF1ZWx5IiwgInRlY2huaWNhbGx5IiB9LCB7CiAgICAgICAgICAgICJ0ZWgiLCAidGhlIiB9LCB7CiAgICAgICAgICAgICJ0ZW0iLCAidGVhbSIgfSwgewogICAgICAgICAgICAidGVvIiwgInR3byIgfSwgewogICAgICAgICAgICAidGVyaWRpY2FsIiwgInRoZW9yZXRpY2FsIiB9LCB7CiAgICAgICAgICAgICJ0ZXNzdCIsICJ0ZXN0IiB9LCB7CiAgICAgICAgICAgICJ0ZXRzIiwgInRlc3RzIiB9LCB7CiAgICAgICAgICAgICJ0aGFub3QiLCAidGhhbiBvciIgfSwgewogICAgICAgICAgICAidGhlaXJzZWx2ZXMiLCAidGhlbXNlbHZlcyIgfSwgewogICAgICAgICAgICAidGhlcmlkaWNhbGx5IiwgInRoZW9yZXRpY2FsIiB9LCB7CiAgICAgICAgICAgICJ0aHJlZGljYWxseSIsICJ0aGVvcmV0aWNhbGx5IiB9LCB7CiAgICAgICAgICAgICJ0aHJ1b3V0IiwgInRocm91Z2hvdXQiIH0sIHsKICAgICAgICAgICAgInRocyIsICJ0aGlzIiB9LCB7CiAgICAgICAgICAgICJ0aXRhbGF0ZSIsICJ0aXRpbGxhdGUiIH0sIHsKICAgICAgICAgICAgInRvYmFnYW4iLCAidG9iYWdnb24iIH0sIHsKICAgICAgICAgICAgInRvbW1vcnJvdyIsICJ0b21vcnJvdyIgfSwgewogICAgICAgICAgICAidG9tb3JvdyIsICJ0b21vcnJvdyIgfSwgewogICAgICAgICAgICAidHJhZGVneSIsICJ0cmFnZWR5IiB9LCB7CiAgICAgICAgICAgICJ0cnViYmVsIiwgInRyb3VibGUiIH0sIHsKICAgICAgICAgICAgInR0ZXN0IiwgInRlc3QiIH0sIHsKICAgICAgICAgICAgInR1bm5lbGxpa2UiLCAidHVubmVsIGxpa2UiIH0sIHsKICAgICAgICAgICAgInR1cmVkIiwgInR1cm5lZCIgfSwgewogICAgICAgICAgICAidHlycmFueSIsICJ0eXJhbm55IiB9LCB7CiAgICAgICAgICAgICJ1bmF0b3VycmFsIiwgInVubmF0dXJhbCIgfSwgewogICAgICAgICAgICAidW5hdHVycmFsIiwgInVubmF0dXJhbCIgfSwgewogICAgICAgICAgICAidW5jb25pc2l0aW9uYWwiLCAidW5jb25zdGl0dXRpb25hbCIgfSwgewogICAgICAgICAgICAidW5jb25zY2llbmNlIiwgInVuY29uc2Npb3VzIiB9LCB7CiAgICAgICAgICAgICJ1bmRlcmxhZGRlciIsICJ1bmRlciBsYWRkZXIiIH0sIHsKICAgICAgICAgICAgInVuZW50ZWxlZ2libGUiLCAidW5pbnRlbGxpZ2libGUiIH0sIHsKICAgICAgICAgICAgInVuZm9ydHVuZW50bHkiLCAidW5mb3J0dW5hdGVseSIgfSwgewogICAgICAgICAgICAidW5uYXR1cnJhbCIsICJ1bm5hdHVyYWwiIH0sIHsKICAgICAgICAgICAgInVwY2FzdCIsICJ1cCBjYXN0IiB9LCB7CiAgICAgICAgICAgICJ1cG1vc3QiLCAidXRtb3N0IiB9LCB7CiAgICAgICAgICAgICJ1cmFuaXNpdW0iLCAidXJhbml1bSIgfSwgewogICAgICAgICAgICAidmVyaXNvbiIsICJ2ZXJzaW9uIiB9LCB7CiAgICAgICAgICAgICJ2aW5hZ2FyZXR0ZSIsICJ2aW5haWdyZXR0ZSIgfSwgewogICAgICAgICAgICAidm9sdW1wdHVvdXMiLCAidm9sdXB0dW91cyIgfSwgewogICAgICAgICAgICAidm9sdW50ZWVyaXNtIiwgInZvbHVudGFyaXNtIiB9LCB7CiAgICAgICAgICAgICJ2b2x5ZSIsICJ2b2xsZXkiIH0sIHsKICAgICAgICAgICAgIndhZHRpbmciLCAid2FzdGluZyIgfSwgewogICAgICAgICAgICAid2FpdGUiLCAid2FpdCIgfSwgewogICAgICAgICAgICAid2FuJ3QiLCAid29uJ3QiIH0sIHsKICAgICAgICAgICAgIndhcmxvb3JkIiwgIndhcmxvcmQiIH0sIHsKICAgICAgICAgICAgIndoYWFhdCIsICJ3aGF0IiB9LCB7CiAgICAgICAgICAgICJ3aGFyZCIsICJ3YXJkIiB9LCB7CiAgICAgICAgICAgICJ3aGltcCIsICJ3aW1wIiB9LCB7CiAgICAgICAgICAgICJ3aWNrZW4iLCAid2Vha2VuIiB9LCB7CiAgICAgICAgICAgICJ3aWVyZCIsICJ3ZWlyZCIgfSwgewogICAgICAgICAgICAid3JhbmsiLCAicmFuayIgfSwgewogICAgICAgICAgICAid3JpdGVlbiIsICJyaWdodGVuIiB9LCB7CiAgICAgICAgICAgICJ3cml0dGluZyIsICJ3cml0aW5nIiB9LCB7CiAgICAgICAgICAgICJ3dW5kZWV3cyIsICJ3aW5kb3dzIiB9LCB7CiAgICAgICAgICAgICJ5ZWlsZCIsICJ5aWVsZCIgfSwgewogICAgICAgICAgICAieW91ZSIsICJ5b3VyIiB9CiAgICB9OwoKICAgIC8qKgoJICogQSBzdWJzZXQgb2YgRklYVFVSRSBnZW5lcmF0ZWQgYnkgdGhpcyB0ZXN0LgoJICovCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIE1BVENIRVMgPSB7IHsgIkFjY29zaW5seSIsICJPY2Nhc2lvbmFsbHkiIH0sIHsKICAgICAgICAgICAgIk1hZGRuZXNzIiwgIk1hZG5lc3MiIH0sIHsKICAgICAgICAgICAgIk9jY3VzaW9uYWx5IiwgIk9jY2FzaW9uYWxseSIgfSwgewogICAgICAgICAgICAiU3RlZmZlbiIsICJTdGVwaGVuIiB9LCB7CiAgICAgICAgICAgICJUaHciLCAiVGhlIiB9LCB7CiAgICAgICAgICAgICJVbmZvcm1hbmxseSIsICJVbmZvcnR1bmF0ZWx5IiB9LCB7CiAgICAgICAgICAgICJVbmZvcnRhbGx5IiwgIlVuZm9ydHVuYXRlbHkiIH0sIHsKICAgICAgICAgICAgImFiaWxpdGV5IiwgImFiaWxpdHkiIH0sIHsKICAgICAgICAgICAgImFic29yYnRpb24iLCAiYWJzb3JwdGlvbiIgfSwgewogICAgICAgICAgICAiYWNjaWRlbnRseSIsICJhY2NpZGVudGFsbHkiIH0sIHsKICAgICAgICAgICAgImFjY29tb2RhdGUiLCAiYWNjb21tb2RhdGUiIH0sIHsKICAgICAgICAgICAgImFjb21tYWRhdGUiLCAiYWNjb21tb2RhdGUiIH0sIHsKICAgICAgICAgICAgImFjb3JkIiwgImFjY29yZCIgfSwgewogICAgICAgICAgICAiYWR1bHRyeSIsICJhZHVsdGVyeSIgfSwgewogICAgICAgICAgICAiYWdncmVzaXZlIiwgImFnZ3Jlc3NpdmUiIH0sIHsKICAgICAgICAgICAgImFsY2hvaG9sIiwgImFsY29ob2wiIH0sIHsKICAgICAgICAgICAgImFsY2hvaG9saWMiLCAiYWxjb2hvbGljIiB9LCB7CiAgICAgICAgICAgICJhbGxpZXZlIiwgImFsaXZlIiB9LCB7CiAgICAgICAgICAgICJhbG90IiwgImEgbG90IiB9LCB7CiAgICAgICAgICAgICJhbHJpZ2h0IiwgImFsbCByaWdodCIgfSwgewogICAgICAgICAgICAiYW1hdHVyZSIsICJhbWF0ZXVyIiB9LCB7CiAgICAgICAgICAgICJhbWJpdmlsYW50IiwgImFtYml2YWxlbnQiIH0sIHsKICAgICAgICAgICAgImFtb3VyZm91cyIsICJhbW9ycGhvdXMiIH0sIHsKICAgICAgICAgICAgImFubm9pbnQiLCAiYW5vaW50IiB9LCB7CiAgICAgICAgICAgICJhbm5vbnNtZW50IiwgImFubm91bmNlbWVudCIgfSwgewogICAgICAgICAgICAiYW5ub3l0aW5nIiwgImFudGluZyIgfSwgewogICAgICAgICAgICAiYW5udW5jaW8iLCAiYW5ub3VuY2UiIH0sIHsKICAgICAgICAgICAgImFub3RvbXkiLCAiYW5hdG9teSIgfSwgewogICAgICAgICAgICAiYW50aWRlc2VzdGFibGlzaG1lbnRhcmlhbmlzbSIsICJhbnRpZGlzZXN0YWJsaXNobWVudGFyaWFuaXNtIiB9LCB7CiAgICAgICAgICAgICJhbnRpZGlzZXN0YWJsaXNobWVudGFyaXNtIiwgImFudGlkaXNlc3RhYmxpc2htZW50YXJpYW5pc20iIH0sIHsKICAgICAgICAgICAgImFueW5vbW91cyIsICJhbm9ueW1vdXMiIH0sIHsKICAgICAgICAgICAgImFwcGVsZXQiLCAiYXBwbGV0IiB9LCB7CiAgICAgICAgICAgICJhcHByZWNlaWF0ZWQiLCAiYXBwcmVjaWF0ZWQiIH0sIHsKICAgICAgICAgICAgImFwcHJlc3RlYXRlIiwgImFwcHJlY2lhdGUiIH0sIHsKICAgICAgICAgICAgImFxdWFudGFuY2UiLCAiYWNxdWFpbnRhbmNlIiB9LCB7CiAgICAgICAgICAgICJhcmljdGljdXJlIiwgImFyY2hpdGVjdHVyZSIgfSwgewogICAgICAgICAgICAiYXN0ZXJpY2siLCAiYXN0ZXJpc2siIH0sIHsKICAgICAgICAgICAgImFzeW1ldHJpYyIsICJhc3ltbWV0cmljIiB9LCB7CiAgICAgICAgICAgICJhdGVudGl2ZWx5IiwgImF0dGVudGl2ZWx5IiB9LCB7CiAgICAgICAgICAgICJiYW5rcm90IiwgImJhbmtydXB0IiB9LCB7CiAgICAgICAgICAgICJiYXNpY2x5IiwgImJhc2ljYWxseSIgfSwgewogICAgICAgICAgICAiYmF0YWxsaW9uIiwgImJhdHRhbGlvbiIgfSwgewogICAgICAgICAgICAiYmJyb3NlIiwgImJyb3dzZSIgfSwgewogICAgICAgICAgICAiYmVhdXJvIiwgImJ1cmVhdSIgfSwgewogICAgICAgICAgICAiYmVhdXJvY3JhY3kiLCAiYnVyZWF1Y3JhY3kiIH0sIHsKICAgICAgICAgICAgImJlZ2dpbmluZyIsICJiZWdpbm5pbmciIH0sIHsKICAgICAgICAgICAgImJlaGF2aW91ciIsICJiZWhhdmlvciIgfSwgewogICAgICAgICAgICAiYmVsZWl2ZSIsICJiZWxpZXZlIiB9LCB7CiAgICAgICAgICAgICJiZWxpdmUiLCAiYmVsaWV2ZSIgfSwgewogICAgICAgICAgICAiYmxhaXQiLCAiYmxlYXQiIH0sIHsKICAgICAgICAgICAgImJvdXlhbnQiLCAiYnVveWFudCIgfSwgewogICAgICAgICAgICAiYm95Z290IiwgImJveWNvdHQiIH0sIHsKICAgICAgICAgICAgImJyb2NvbGxpIiwgImJyb2Njb2xpIiB9LCB7CiAgICAgICAgICAgICJidWRlciIsICJidXR0ZXIiIH0sIHsKICAgICAgICAgICAgImJ1ZHIiLCAiYnV0dGVyIiB9LCB7CiAgICAgICAgICAgICJidWR0ZXIiLCAiYnV0dGVyIiB9LCB7CiAgICAgICAgICAgICJidXJhY3JhY3kiLCAiYnVyZWF1Y3JhY3kiIH0sIHsKICAgICAgICAgICAgImJ1cnJhY3JhY3kiLCAiYnVyZWF1Y3JhY3kiIH0sIHsKICAgICAgICAgICAgImJ1dG9uIiwgImJ1dHRvbiIgfSwgewogICAgICAgICAgICAiYnlieSIsICJieSBieSIgfSwgewogICAgICAgICAgICAiY2F1bGVyIiwgImNhbGxlciIgfSwgewogICAgICAgICAgICAiY2Vhc2FyIiwgImNhZXNhciIgfSwgewogICAgICAgICAgICAiY2VtZXRhcnkiLCAiY2VtZXRlcnkiIH0sIHsKICAgICAgICAgICAgImNoYW5nZWluZyIsICJjaGFuZ2luZyIgfSwgewogICAgICAgICAgICAiY2hlZXQiLCAiY2hlYXQiIH0sIHsKICAgICAgICAgICAgImNpbXBsaWNpdHkiLCAic2ltcGxpY2l0eSIgfSwgewogICAgICAgICAgICAiY2lyY3Vtc3RhY2VzIiwgImNpcmN1bXN0YW5jZXMiIH0sIHsKICAgICAgICAgICAgImNsb2IiLCAiY2x1YiIgfSwgewogICAgICAgICAgICAiY29hbG4iLCAiY29sb24iIH0sIHsKICAgICAgICAgICAgImNvbGxlYXF1ZSIsICJjb2xsZWFndWUiIH0sIHsKICAgICAgICAgICAgImNvbGxvcXVpbGlzbSIsICJjb2xsb3F1aWFsaXNtIiB9LCB7CiAgICAgICAgICAgICJjb2x1bW5lIiwgImNvbHVtbiIgfSwgewogICAgICAgICAgICAiY29taXRtbWVudCIsICJjb21taXRtZW50IiB9LCB7CiAgICAgICAgICAgICJjb21pdHRlIiwgImNvbW1pdHRlZSIgfSwgewogICAgICAgICAgICAiY29taXR0bWVuIiwgImNvbW1pdG1lbnQiIH0sIHsKICAgICAgICAgICAgImNvbWl0dG1lbmQiLCAiY29tbWl0bWVudCIgfSwgewogICAgICAgICAgICAiY29tbWVyY2lhc2wiLCAiY29tbWVyY2lhbHMiIH0sIHsKICAgICAgICAgICAgImNvbW1pdGVkIiwgImNvbW1pdHRlZCIgfSwgewogICAgICAgICAgICAiY29tbWl0ZWUiLCAiY29tbWl0dGVlIiB9LCB7CiAgICAgICAgICAgICJjb21wYW55cyIsICJjb21wYW5pZXMiIH0sIHsKICAgICAgICAgICAgImNvbXVwdGVyIiwgImNvbXB1dGVyIiB9LCB7CiAgICAgICAgICAgICJjb25jZW5zdXMiLCAiY29uc2Vuc3VzIiB9LCB7CiAgICAgICAgICAgICJjb25mdXNpb25pc20iLCAiY29uZnVjaWFuaXNtIiB9LCB7CiAgICAgICAgICAgICJjb25ncmFkdWxhdGlvbnMiLCAiY29uZ3JhdHVsYXRpb25zIiB9LCB7CiAgICAgICAgICAgICJjb250dW5pZSIsICJjb250aW51ZSIgfSwgewogICAgICAgICAgICAiY29vbHkiLCAiY29vbGx5IiB9LCB7CiAgICAgICAgICAgICJjb3BwaW5nIiwgImNvcGluZyIgfSwgewogICAgICAgICAgICAiY29zbW9wbHl0b24iLCAiY29zbW9wb2xpdGFuIiB9LCB7CiAgICAgICAgICAgICJjcmFzeSIsICJjcmF6eSIgfSwgewogICAgICAgICAgICAiY3Jva2UiLCAiY3JvYWsiIH0sIHsKICAgICAgICAgICAgImNydWNpZmljdGlvbiIsICJjcnVjaWZpeGlvbiIgfSwgewogICAgICAgICAgICAiY3J1c2lmZWQiLCAiY3J1Y2lmaWVkIiB9LCB7CiAgICAgICAgICAgICJjdW1iYSIsICJjb21ibyIgfSwgewogICAgICAgICAgICAiY3VzdGFtaXNhdGlvbiIsICJjdXN0b21pemF0aW9uIiB9LCB7CiAgICAgICAgICAgICJkYWciLCAiZG9nIiB9LCB7CiAgICAgICAgICAgICJkYWx5IiwgImRhaWx5IiB9LCB7CiAgICAgICAgICAgICJkZWZlbmNlIiwgImRlZmVuc2UiIH0sIHsKICAgICAgICAgICAgImRlZmluYXRlIiwgImRlZmluaXRlIiB9LCB7CiAgICAgICAgICAgICJkZWZpbmF0ZWx5IiwgImRlZmluaXRlbHkiIH0sIHsKICAgICAgICAgICAgImRlcGVuZGVibGUiLCAiZGVwZW5kYWJsZSIgfSwgewogICAgICAgICAgICAiZGVzY3JwdGlvbiIsICJkZXNjcmlwdGlvbiIgfSwgewogICAgICAgICAgICAiZGVzY3JwdG4iLCAiZGVzY3JpcHRpb24iIH0sIHsKICAgICAgICAgICAgImRlc3BhcmF0ZSIsICJkZXNwZXJhdGUiIH0sIHsKICAgICAgICAgICAgImRlc3NpY2F0ZSIsICJkZXNpY2NhdGUiIH0sIHsKICAgICAgICAgICAgImRlc3RpbnQiLCAiZGlzdGFudCIgfSwgewogICAgICAgICAgICAiZGV2ZWxlcG1lbnQiLCAiZGV2ZWxvcG1lbnRzIiB9LCB7CiAgICAgICAgICAgICJkZXZlbG9wZW1lbnQiLCAiZGV2ZWxvcG1lbnQiIH0sIHsKICAgICAgICAgICAgImRldmVscG9uZCIsICJkZXZlbG9wbWVudCIgfSwgewogICAgICAgICAgICAiZGV2dWxnZSIsICJkaXZ1bGdlIiB9LCB7CiAgICAgICAgICAgICJkaWV0aWVzIiwgImRlaXRpZXMiIH0sIHsKICAgICAgICAgICAgImRpbmFzYXVyIiwgImRpbm9zYXVyIiB9LCB7CiAgICAgICAgICAgICJkaW5hc291ciIsICJkaW5vc2F1ciIgfSwgewogICAgICAgICAgICAiZGlzY3Vlc3MiLCAiZGlzY3VzcyIgfSwgewogICAgICAgICAgICAiZGlzZWN0IiwgImRpc3NlY3QiIH0sIHsKICAgICAgICAgICAgImRpc2lwcGF0ZSIsICJkaXNzaXBhdGUiIH0sIHsKICAgICAgICAgICAgImRpc2l0aW9uIiwgImRlY2lzaW9uIiB9LCB7CiAgICAgICAgICAgICJkaXNwYWlyIiwgImRlc3BhaXIiIH0sIHsKICAgICAgICAgICAgImRpc3RhcmN0IiwgImRpc3RyYWN0IiB9LCB7CiAgICAgICAgICAgICJkaXN0YXJ0IiwgImRpc3RvcnQiIH0sIHsKICAgICAgICAgICAgImRpc3Ryb3kiLCAiZGVzdHJveSIgfSwgewogICAgICAgICAgICAiZG9lbmxvYWQiLCAiZG93bmxvYWQiIH0sIHsKICAgICAgICAgICAgImRvbmdsZSIsICJkYW5nbGUiIH0sIHsKICAgICAgICAgICAgImRvb2ciLCAiZG9nIiB9LCB7CiAgICAgICAgICAgICJkcmFtYXRpY2x5IiwgImRyYW1hdGljYWxseSIgfSwgewogICAgICAgICAgICAiZHJ1bmtlbmVzcyIsICJkcnVua2VubmVzcyIgfSwgewogICAgICAgICAgICAiZHVjdGlvbmVlcnkiLCAiZGljdGlvbmFyeSIgfSwgewogICAgICAgICAgICAiZWNzdGFjeSIsICJlY3N0YXN5IiB9LCB7CiAgICAgICAgICAgICJlZ3Npc3RlbmNlIiwgImV4aXN0ZW5jZSIgfSwgewogICAgICAgICAgICAiZWl0aW9sb2d5IiwgImV0aW9sb2d5IiB9LCB7CiAgICAgICAgICAgICJlbGFnZW50IiwgImVsZWdhbnQiIH0sIHsKICAgICAgICAgICAgImVtYmFyYXNzIiwgImVtYmFycmFzcyIgfSwgewogICAgICAgICAgICAiZW1iYXJhc3NtZW50IiwgImVtYmFycmFzc21lbnQiIH0sIHsKICAgICAgICAgICAgImVtYmFyZXNzIiwgImVtYmFycmFzcyIgfSwgewogICAgICAgICAgICAiZW5jYXBzdWFsdGlvbiIsICJlbmNhcHN1bGF0aW9uIiB9LCB7CiAgICAgICAgICAgICJlbmN5Y2xhcGlkaWEiLCAiZW5jeWNsb3BlZGlhIiB9LCB7CiAgICAgICAgICAgICJlbmN5Y2xvcGlhIiwgImVuY3ljbG9wZWRpYSIgfSwgewogICAgICAgICAgICAiZW5naW5zIiwgImVuZ2luZSIgfSwgewogICAgICAgICAgICAiZW5oZW5jZSIsICJlbmhhbmNlIiB9LCB7CiAgICAgICAgICAgICJlbm51dWkiLCAiZW5udWkiIH0sIHsKICAgICAgICAgICAgImVudmVudGlvbnMiLCAiaW52ZW50aW9ucyIgfSwgewogICAgICAgICAgICAiZW52aXJlbWluYWtsIiwgImVudmlyb25tZW50YWwiIH0sIHsKICAgICAgICAgICAgImVudmlyb21lbnQiLCAiZW52aXJvbm1lbnQiIH0sIHsKICAgICAgICAgICAgImVwaXRvbXkiLCAiZXBpdG9tZSIgfSwgewogICAgICAgICAgICAiZXF1aXJlIiwgImFjcXVpcmUiIH0sIHsKICAgICAgICAgICAgImVycmFyYSIsICJlcnJvciIgfSwgewogICAgICAgICAgICAiZXZhdWFsdGlvbiIsICJldmFsdWF0aW9uIiB9LCB7CiAgICAgICAgICAgICJleGNlZGUiLCAiZXhjZWVkIiB9LCB7CiAgICAgICAgICAgICJleGNlcmNpc2UiLCAiZXhlcmNpc2UiIH0sIHsKICAgICAgICAgICAgImV4Y3B0IiwgImV4Y2VwdCIgfSwgewogICAgICAgICAgICAiZXhoaWxlcmF0aW9uIiwgImV4aGlsYXJhdGlvbiIgfSwgewogICAgICAgICAgICAiZXhpc3RhbmNlIiwgImV4aXN0ZW5jZSIgfSwgewogICAgICAgICAgICAiZXhwbGV5bHkiLCAiZXhwbGljaXRseSIgfSwgewogICAgICAgICAgICAiZXhwbGl0eSIsICJleHBsaWNpdGx5IiB9LCB7CiAgICAgICAgICAgICJmYWlsZXIiLCAiZmFpbHVyZSIgfSwgewogICAgICAgICAgICAiZmF2ZXIiLCAiZmF2b3IiIH0sIHsKICAgICAgICAgICAgImZheGUiLCAiZmF4IiB9LCB7CiAgICAgICAgICAgICJmaXJleSIsICJmaWVyeSIgfSwgewogICAgICAgICAgICAiZmlzdGl2YWwiLCAiZmVzdGl2YWwiIH0sIHsKICAgICAgICAgICAgImZsYXR0ZXJyaW5nIiwgImZsYXR0ZXJpbmciIH0sIHsKICAgICAgICAgICAgImZsdWtzZSIsICJmbHV4IiB9LCB7CiAgICAgICAgICAgICJmb25lIiwgInBob25lIiB9LCB7CiAgICAgICAgICAgICJmb3JzZWUiLCAiZm9yZXNlZSIgfSwgewogICAgICAgICAgICAiZnJ1c3RhcnRhaW9uIiwgImZydXN0cmF0aW5nIiB9LCB7CiAgICAgICAgICAgICJmdW5ldGlrIiwgInBob25ldGljIiB9LCB7CiAgICAgICAgICAgICJnYXVyZCIsICJndWFyZCIgfSwgewogICAgICAgICAgICAiZ2VuZXJseSIsICJnZW5lcmFsbHkiIH0sIHsKICAgICAgICAgICAgImdoYW5kaSIsICJnYW5kaGkiIH0sIHsKICAgICAgICAgICAgImdvdHRvbiIsICJnb3R0ZW4iIH0sIHsKICAgICAgICAgICAgImdyYWNlZnVsbCIsICJncmFjZWZ1bCIgfSwgewogICAgICAgICAgICAiZ3JhZHVhbHkiLCAiZ3JhZHVhbGx5IiB9LCB7CiAgICAgICAgICAgICJncmFtbWVyIiwgImdyYW1tYXIiIH0sIHsKICAgICAgICAgICAgImhhbGxvIiwgImhlbGxvIiB9LCB7CiAgICAgICAgICAgICJoYXBpbHkiLCAiaGFwcGlseSIgfSwgewogICAgICAgICAgICAiaGFycmFzcyIsICJoYXJhc3MiIH0sIHsKICAgICAgICAgICAgImhlZWxscCIsICJoZWxwIiB9LCB7CiAgICAgICAgICAgICJoZWlnaHRoIiwgImhlaWdodCIgfSwgewogICAgICAgICAgICAiaGVsbHAiLCAiaGVscCIgfSwgewogICAgICAgICAgICAiaGVsbyIsICJoZWxsbyIgfSwgewogICAgICAgICAgICAiaGlmaW4iLCAiaHlwaGVuIiB9LCB7CiAgICAgICAgICAgICJoaWZpbmUiLCAiaHlwaGVuIiB9LCB7CiAgICAgICAgICAgICJoaXBoaW5lIiwgImh5cGhlbiIgfSwgewogICAgICAgICAgICAiaGlwcGllIiwgImhpcHB5IiB9LCB7CiAgICAgICAgICAgICJoaXBwb3BvdGFtb3VzIiwgImhpcHBvcG90YW11cyIgfSwgewogICAgICAgICAgICAiaG91cnNlIiwgImhvcnNlIiB9LCB7CiAgICAgICAgICAgICJob3Vzc2luZyIsICJob3VzaW5nIiB9LCB7CiAgICAgICAgICAgICJob3dhdmVyIiwgImhvd2V2ZXIiIH0sIHsKICAgICAgICAgICAgImhvd3ZlciIsICJob3dldmVyIiB9LCB7CiAgICAgICAgICAgICJodW1hbml0aSIsICJodW1hbml0eSIgfSwgewogICAgICAgICAgICAiaHlmaW4iLCAiaHlwaGVuIiB9LCB7CiAgICAgICAgICAgICJoeXN0cmljYWwiLCAiaHlzdGVyaWNhbCIgfSwgewogICAgICAgICAgICAiaWxsZWdpdGFtZW50IiwgImlsbGVnaXRpbWF0ZSIgfSwgewogICAgICAgICAgICAiaW1iZWQiLCAiZW1iZWQiIH0sIHsKICAgICAgICAgICAgImltZWRpYWV0bHkiLCAiaW1tZWRpYXRlbHkiIH0sIHsKICAgICAgICAgICAgImltbWVuYW50IiwgImltbWFuZW50IiB9LCB7CiAgICAgICAgICAgICJpbXBsZW10ZXMiLCAiaW1wbGVtZW50cyIgfSwgewogICAgICAgICAgICAiaW5hZHZlcnRhbnQiLCAiaW5hZHZlcnRlbnQiIH0sIHsKICAgICAgICAgICAgImluY2FzZSIsICJpbiBjYXNlIiB9LCB7CiAgICAgICAgICAgICJpbmNlZGlvdXMiLCAiaW5zaWRpb3VzIiB9LCB7CiAgICAgICAgICAgICJpbmNvbXBsZWV0IiwgImluY29tcGxldGUiIH0sIHsKICAgICAgICAgICAgImluY29tcGxvdCIsICJpbmNvbXBsZXRlIiB9LCB7CiAgICAgICAgICAgICJpbmNvbnZlbmFudCIsICJpbmNvbnZlbmllbnQiIH0sIHsKICAgICAgICAgICAgImluY29udmllbmNlIiwgImluY29udmVuaWVuY2UiIH0sIHsKICAgICAgICAgICAgImluZGVwZW5kYW50IiwgImluZGVwZW5kZW50IiB9LCB7CiAgICAgICAgICAgICJpbmRlcGVuZGVuZW50IiwgImluZGVwZW5kZW50IiB9LCB7CiAgICAgICAgICAgICJpbmRlcG5lbmRzIiwgImluZGVwZW5kZW50IiB9LCB7CiAgICAgICAgICAgICJpbmRlcHRoIiwgImluIGRlcHRoIiB9LCB7CiAgICAgICAgICAgICJpbmRpc3BlbnNpYmxlIiwgImluZGlzcGVuc2FibGUiIH0sIHsKICAgICAgICAgICAgImluZWZmaWNpdGUiLCAiaW5lZmZpY2llbnQiIH0sIHsKICAgICAgICAgICAgImluZmFjdCIsICJpbiBmYWN0IiB9LCB7CiAgICAgICAgICAgICJpbmZsdWVuY2lhbCIsICJpbmZsdWVudGlhbCIgfSwgewogICAgICAgICAgICAiaW5ub2N1bGF0ZSIsICJpbm9jdWxhdGUiIH0sIHsKICAgICAgICAgICAgImluc2lzdGFudCIsICJpbnNpc3RlbnQiIH0sIHsKICAgICAgICAgICAgImluc2lzdGVuZXQiLCAiaW5zaXN0ZW50IiB9LCB7CiAgICAgICAgICAgICJpbnN0dWxhdGlvbiIsICJpbnN0YWxsYXRpb24iIH0sIHsKICAgICAgICAgICAgImludGVhbGlnbnQiLCAiaW50ZWxsaWdlbnQiIH0sIHsKICAgICAgICAgICAgImludGVsZWdlbnQiLCAiaW50ZWxsaWdlbnQiIH0sIHsKICAgICAgICAgICAgImludGVsZWduZW50IiwgImludGVsbGlnZW50IiB9LCB7CiAgICAgICAgICAgICJpbnRlbGVqZW50IiwgImludGVsbGlnZW50IiB9LCB7CiAgICAgICAgICAgICJpbnRlbGlnZW50IiwgImludGVsbGlnZW50IiB9LCB7CiAgICAgICAgICAgICJpbnRlbGlnbnQiLCAiaW50ZWxsaWdlbnQiIH0sIHsKICAgICAgICAgICAgImludGVsbGFnYW50IiwgImludGVsbGlnZW50IiB9LCB7CiAgICAgICAgICAgICJpbnRlbGxlZ2VudCIsICJpbnRlbGxpZ2VudCIgfSwgewogICAgICAgICAgICAiaW50ZWxsZWdpbnQiLCAiaW50ZWxsaWdlbnQiIH0sIHsKICAgICAgICAgICAgImludGVsbGdudCIsICJpbnRlbGxpZ2VudCIgfSwgewogICAgICAgICAgICAiaW50ZW5zaW9uYWxpdHkiLCAiaW50ZW5zaW9uYWxseSIgfSwgewogICAgICAgICAgICAiaW50ZXJuYXRpb24iLCAiaW50ZXJuYXRpb25hbCIgfSwgewogICAgICAgICAgICAiaW50ZXJwcmV0YXRlIiwgImludGVycHJldCIgfSwgewogICAgICAgICAgICAiaW50ZXJwcmV0dGVyIiwgImludGVycHJldGVyIiB9LCB7CiAgICAgICAgICAgICJpbnRlcnRlcyIsICJpbnRlcmVzdGVkIiB9LCB7CiAgICAgICAgICAgICJpbnRlcnRlc2QiLCAiaW50ZXJlc3RlZCIgfSwgewogICAgICAgICAgICAiaW52ZXJtZWFudGlhbCIsICJlbnZpcm9ubWVudGFsIiB9LCB7CiAgICAgICAgICAgICJpcnJlc2lzdGFibGUiLCAiaXJyZXNpc3RpYmxlIiB9LCB7CiAgICAgICAgICAgICJpcnJpdGlibGUiLCAiaXJyaXRhYmxlIiB9LCB7CiAgICAgICAgICAgICJpc3JlYWwiLCAiaXNyYWVsIiB9LCB7CiAgICAgICAgICAgICJqb2hobiIsICJqb2huIiB9LCB7CiAgICAgICAgICAgICJraXBwdXIiLCAia2lwcGVyIiB9LCB7CiAgICAgICAgICAgICJrbmF3aW5nIiwgImtub3dpbmciIH0sIHsKICAgICAgICAgICAgImxlc3VyZSIsICJsZWlzdXJlIiB9LCB7CiAgICAgICAgICAgICJsaWFzaW9uIiwgImxlc2lvbiIgfSwgewogICAgICAgICAgICAibGlhc29uIiwgImxpYWlzb24iIH0sIHsKICAgICAgICAgICAgImxpa2x5IiwgImxpa2VseSIgfSwgewogICAgICAgICAgICAibGlxdWlmeSIsICJsaXF1ZWZ5IiB9LCB7CiAgICAgICAgICAgICJsbG95ZXIiLCAibGF5ZXIiIH0sIHsKICAgICAgICAgICAgImxvc3NpbmciLCAibG9zaW5nIiB9LCB7CiAgICAgICAgICAgICJsdXNlciIsICJsYXNlciIgfSwgewogICAgICAgICAgICAibWFpbnRhbmVuY2UiLCAibWFpbnRlbmFuY2UiIH0sIHsKICAgICAgICAgICAgIm1hbmRlbGJyb3QiLCAiTWFuZGVsYnJvdCIgfSwgewogICAgICAgICAgICAibWFyc2hhbGwiLCAibWFyc2hhbCIgfSwgewogICAgICAgICAgICAibWF4aXVtIiwgIm1heGltdW0iIH0sIHsKICAgICAgICAgICAgIm1pYyIsICJtaWtlIiB9LCB7CiAgICAgICAgICAgICJtaWRpYSIsICJtZWRpYSIgfSwgewogICAgICAgICAgICAibWlsbGVuaXVtIiwgIm1pbGxlbm5pdW0iIH0sIHsKICAgICAgICAgICAgIm1pbmlzY3VsZSIsICJtaW51c2N1bGUiIH0sIHsKICAgICAgICAgICAgIm1pbmtheSIsICJtb25rZXkiIH0sIHsKICAgICAgICAgICAgIm1pc2NoaWV2aW91cyIsICJtaXNjaGlldm91cyIgfSwgewogICAgICAgICAgICAibW9tZW50byIsICJtZW1lbnRvIiB9LCB7CiAgICAgICAgICAgICJtb25rYXkiLCAibW9ua2V5IiB9LCB7CiAgICAgICAgICAgICJtb3NhaWsiLCAibW9zYWljIiB9LCB7CiAgICAgICAgICAgICJtb3N0bGlrZWx5IiwgIm1vc3QgbGlrZWx5IiB9LCB7CiAgICAgICAgICAgICJtb3VzciIsICJtb3VzZXIiIH0sIHsKICAgICAgICAgICAgIm1yb2UiLCAibW9yZSIgfSwgewogICAgICAgICAgICAibmVjZXNhcnkiLCAibmVjZXNzYXJ5IiB9LCB7CiAgICAgICAgICAgICJuZWNlc3NlciIsICJuZWNlc3NhcnkiIH0sIHsKICAgICAgICAgICAgIm5laWNlIiwgIm5pZWNlIiB9LCB7CiAgICAgICAgICAgICJuZWlnaGJvdXIiLCAibmVpZ2hib3IiIH0sIHsKICAgICAgICAgICAgIm5lbW9uaWMiLCAicG5ldW1vbmljIiB9LCB7CiAgICAgICAgICAgICJuZXZhZGUiLCAiTmV2YWRhIiB9LCB7CiAgICAgICAgICAgICJuaWNrbGVvZGVvbiIsICJuaWNrZWxvZGVvbiIgfSwgewogICAgICAgICAgICAibmlldmUiLCAibmFpdmUiIH0sIHsKICAgICAgICAgICAgIm5vb25lIiwgIm5vIG9uZSIgfSwgewogICAgICAgICAgICAibm90aW4iLCAibm90IGluIiB9LCB7CiAgICAgICAgICAgICJub3psZWQiLCAibnV6emxlZCIgfSwgewogICAgICAgICAgICAib2JqZWN0c2lvbiIsICJvYmplY3RzIiB9LCB7CiAgICAgICAgICAgICJvY2Fzc2lvbiIsICJvY2Nhc2lvbiIgfSwgewogICAgICAgICAgICAib2NjdXBwaWVkIiwgIm9jY3VwaWVkIiB9LCB7CiAgICAgICAgICAgICJvY2N1cmVuY2UiLCAib2NjdXJyZW5jZSIgfSwgewogICAgICAgICAgICAib2N0YWdlbmFyaWFuIiwgIm9jdG9nZW5hcmlhbiIgfSwgewogICAgICAgICAgICAib3Bwb3NpbSIsICJvcG9zc3VtIiB9LCB7CiAgICAgICAgICAgICJvcmdhbmlzZSIsICJvcmdhbml6ZSIgfSwgewogICAgICAgICAgICAib3JnYW5peiIsICJvcmdhbml6ZSIgfSwgewogICAgICAgICAgICAib3JpZW50YXRlIiwgIm9yaWVudCIgfSwgewogICAgICAgICAgICAib3NjaWxhc2NvcGUiLCAib3NjaWxsb3Njb3BlIiB9LCB7CiAgICAgICAgICAgICJwYXJhbWV0aWMiLCAicGFyYW1ldGVyIiB9LCB7CiAgICAgICAgICAgICJwZXJtaXNzYWJsZSIsICJwZXJtaXNzaWJsZSIgfSwgewogICAgICAgICAgICAicGVybW1hc2l2aWUiLCAicGVybWlzc2l2ZSIgfSwgewogICAgICAgICAgICAicGVyc3VlIiwgInB1cnN1ZSIgfSwgewogICAgICAgICAgICAicGhhbnRhc2lhIiwgImZhbnRhc2lhIiB9LCB7CiAgICAgICAgICAgICJwaGVub21pbmFsIiwgInBoZW5vbWVuYWwiIH0sIHsKICAgICAgICAgICAgInBsYXl3cml0ZSIsICJwbGF5d3JpZ2h0IiB9LCB7CiAgICAgICAgICAgICJwb2VzZXMiLCAicG9lc2llcyIgfSwgewogICAgICAgICAgICAicG9saWdhbXkiLCAicG9seWdhbXkiIH0sIHsKICAgICAgICAgICAgInBvbGl0aWN0IiwgInBvbGl0aWMiIH0sIHsKICAgICAgICAgICAgInBvbGxpY2UiLCAicG9saWNlIiB9LCB7CiAgICAgICAgICAgICJwb2x5cHJvcGFsZW5lIiwgInBvbHlwcm9weWxlbmUiIH0sIHsKICAgICAgICAgICAgInBvc3NhYmxlIiwgInBvc3NpYmxlIiB9LCB7CiAgICAgICAgICAgICJwcmFjdGljbGUiLCAicHJhY3RpY2FsIiB9LCB7CiAgICAgICAgICAgICJwcmFnbWF0aWNpc20iLCAicHJhZ21hdGlzbSIgfSwgewogICAgICAgICAgICAicHJlY2VlZGluZyIsICJwcmVjZWRpbmciIH0sIHsKICAgICAgICAgICAgInByZWNpb3MiLCAicHJlY2lzaW9uIiB9LCB7CiAgICAgICAgICAgICJwcmVlbXB0b3J5IiwgInBlcmVtcHRvcnkiIH0sIHsKICAgICAgICAgICAgInByZWZpeHQiLCAicHJlZml4ZWQiIH0sIHsKICAgICAgICAgICAgInByZXNieXRlcmlhbiIsICJQcmVzYnl0ZXJpYW4iIH0sIHsKICAgICAgICAgICAgInByZXN1ZSIsICJwdXJzdWUiIH0sIHsKICAgICAgICAgICAgInByZXN1ZWQiLCAicHVyc3VlZCIgfSwgewogICAgICAgICAgICAicHJpdmllbGFnZSIsICJwcml2aWxlZ2UiIH0sIHsKICAgICAgICAgICAgInByaXZpbGVkZ2UiLCAicHJpdmlsZWdlIiB9LCB7CiAgICAgICAgICAgICJwcm9jZWVkdXJlcyIsICJwcm9jZWR1cmVzIiB9LCB7CiAgICAgICAgICAgICJwcm9uZW5zaWF0aW9uIiwgInByb251bmNpYXRpb24iIH0sIHsKICAgICAgICAgICAgInByb25vdW5jaWF0aW9uIiwgInByb251bmNpYXRpb24iIH0sIHsKICAgICAgICAgICAgInByb3BlcmFsbHkiLCAicHJvcGVybHkiIH0sIHsKICAgICAgICAgICAgInByb3BsZW1hdGljIiwgInByb2JsZW1hdGljIiB9LCB7CiAgICAgICAgICAgICJwcm90cmF5IiwgInBvcnRyYXkiIH0sIHsKICAgICAgICAgICAgInBzY29sZ3N0IiwgInBzeWNob2xvZ2lzdCIgfSwgewogICAgICAgICAgICAicHNpY29sYWdlc3QiLCAicHN5Y2hvbG9naXN0IiB9LCB7CiAgICAgICAgICAgICJwc3ljb2xhZ2VzdCIsICJwc3ljaG9sb2dpc3QiIH0sIHsKICAgICAgICAgICAgInF1b3oiLCAicXVpeiIgfSwgewogICAgICAgICAgICAicmFkaW91cyIsICJyYWRpdXMiIH0sIHsKICAgICAgICAgICAgInJlY2NvbWVuZCIsICJyZWNvbW1lbmQiIH0sIHsKICAgICAgICAgICAgInJlY2NvbmEiLCAicmFjY29vbiIgfSwgewogICAgICAgICAgICAicmVjaWV2ZSIsICJyZWNlaXZlIiB9LCB7CiAgICAgICAgICAgICJyZWNvbmlzZSIsICJyZWNvZ25pemUiIH0sIHsKICAgICAgICAgICAgInJlY3RhbmdlbGVzIiwgInJlY3RhbmdsZSIgfSwgewogICAgICAgICAgICAicmVvY2N1cnJpbmciLCAicmVjdXJyaW5nIiB9LCB7CiAgICAgICAgICAgICJyZXBpdGl0aW9uIiwgInJlcGV0aXRpb24iIH0sIHsKICAgICAgICAgICAgInJlcGxhc21lbnRzIiwgInJlcGxhY2VtZW50IiB9LCB7CiAgICAgICAgICAgICJyZXNwY3QiLCAicmVzcGVjdCIgfSwgewogICAgICAgICAgICAicmVzcGVjYWxseSIsICJyZXNwZWN0ZnVsbHkiIH0sIHsKICAgICAgICAgICAgInJzeCIsICJSU1giIH0sIHsKICAgICAgICAgICAgInJ1bm51bmciLCAicnVubmluZyIgfSwgewogICAgICAgICAgICAic2FjcmVsaWdpb3VzIiwgInNhY3JpbGVnaW91cyIgfSwgewogICAgICAgICAgICAic2FsdXQiLCAic2FsdXRlIiB9LCB7CiAgICAgICAgICAgICJzZWFyY2hlYWJsZSIsICJzZWFyY2hhYmxlIiB9LCB7CiAgICAgICAgICAgICJzZWZlcmFsIiwgInNldmVyYWwiIH0sIHsKICAgICAgICAgICAgInNlZ2VtZW50cyIsICJzZWdtZW50cyIgfSwgewogICAgICAgICAgICAic2VuY2UiLCAic2Vuc2UiIH0sIHsKICAgICAgICAgICAgInNlcGVyYXRlIiwgInNlcGFyYXRlIiB9LCB7CiAgICAgICAgICAgICJzaWNvbGFnZXN0IiwgInBzeWNob2xvZ2lzdCIgfSwgewogICAgICAgICAgICAic2llemUiLCAic2VpemUiIH0sIHsKICAgICAgICAgICAgInNpbXBseWUiLCAic2ltcGx5IiB9LCB7CiAgICAgICAgICAgICJzaXR0ZSIsICJzaXRlIiB9LCB7CiAgICAgICAgICAgICJzbHlwaCIsICJzeWxwaCIgfSwgewogICAgICAgICAgICAic21pbCIsICJzbWlsZSIgfSwgewogICAgICAgICAgICAic29tZXRtZXMiLCAic29tZXRpbWVzIiB9LCB7CiAgICAgICAgICAgICJzb29uZWMiLCAic29uaWMiIH0sIHsKICAgICAgICAgICAgInNwZWNpZmljaWFseSIsICJzcGVjaWZpY2FsbHkiIH0sIHsKICAgICAgICAgICAgInNwZWwiLCAic3BlbGwiIH0sIHsKICAgICAgICAgICAgInNwb2FrIiwgInNwb2tlIiB9LCB7CiAgICAgICAgICAgICJzcG9uc2VyZWQiLCAic3BvbnNvcmVkIiB9LCB7CiAgICAgICAgICAgICJzdGVyaW5nIiwgInN0ZWVyaW5nIiB9LCB7CiAgICAgICAgICAgICJzdHJhaWdodGphY2tldCIsICJzdHJhaXRqYWNrZXQiIH0sIHsKICAgICAgICAgICAgInN0dW1hY2giLCAic3RvbWFjaCIgfSwgewogICAgICAgICAgICAic3R1dGVudCIsICJzdHVkZW50IiB9LCB7CiAgICAgICAgICAgICJzdHlsZWd1aWRlIiwgInN0eWxlIGd1aWRlIiB9LCB7CiAgICAgICAgICAgICJzdWJwZW5hIiwgInN1YnBvZW5hIiB9LCB7CiAgICAgICAgICAgICJzdWJzdGF0aW9ucyIsICJzdWJzdGl0dXRpb25zIiB9LCB7CiAgICAgICAgICAgICJzdXBlcmNlZGUiLCAic3VwZXJzZWRlIiB9LCB7CiAgICAgICAgICAgICJzdXBlcmZ1bG91cyIsICJzdXBlcmZsdW91cyIgfSwgewogICAgICAgICAgICAic3VzYW4iLCAiU3VzYW4iIH0sIHsKICAgICAgICAgICAgInN3aW13ZWFyIiwgInN3aW0gd2VhciIgfSwgewogICAgICAgICAgICAic3luY29yaXphdGlvbiIsICJzeW5jaHJvbml6YXRpb24iIH0sIHsKICAgICAgICAgICAgInRhZmYiLCAidG91Z2giIH0sIHsKICAgICAgICAgICAgInRhaHQiLCAidGhhdCIgfSwgewogICAgICAgICAgICAidGF0dG9zIiwgInRhdHRvb3MiIH0sIHsKICAgICAgICAgICAgInRlY2huaXF1ZWx5IiwgInRlY2huaWNhbGx5IiB9LCB7CiAgICAgICAgICAgICJ0ZWgiLCAidGhlIiB9LCB7CiAgICAgICAgICAgICJ0ZW0iLCAidGVhbSIgfSwgewogICAgICAgICAgICAidGVvIiwgInR3byIgfSwgewogICAgICAgICAgICAidGVyaWRpY2FsIiwgInRoZW9yZXRpY2FsIiB9LCB7CiAgICAgICAgICAgICJ0ZXNzdCIsICJ0ZXN0IiB9LCB7CiAgICAgICAgICAgICJ0aGVyaWRpY2FsbHkiLCAidGhlb3JldGljYWwiIH0sIHsKICAgICAgICAgICAgInRocmVkaWNhbGx5IiwgInRoZW9yZXRpY2FsbHkiIH0sIHsKICAgICAgICAgICAgInRocnVvdXQiLCAidGhyb3VnaG91dCIgfSwgewogICAgICAgICAgICAidGhzIiwgInRoaXMiIH0sIHsKICAgICAgICAgICAgInRpdGFsYXRlIiwgInRpdGlsbGF0ZSIgfSwgewogICAgICAgICAgICAidG9iYWdhbiIsICJ0b2JhZ2dvbiIgfSwgewogICAgICAgICAgICAidG9tbW9ycm93IiwgInRvbW9ycm93IiB9LCB7CiAgICAgICAgICAgICJ0b21vcm93IiwgInRvbW9ycm93IiB9LCB7CiAgICAgICAgICAgICJ0cnViYmVsIiwgInRyb3VibGUiIH0sIHsKICAgICAgICAgICAgInR0ZXN0IiwgInRlc3QiIH0sIHsKICAgICAgICAgICAgInR5cnJhbnkiLCAidHlyYW5ueSIgfSwgewogICAgICAgICAgICAidW5hdG91cnJhbCIsICJ1bm5hdHVyYWwiIH0sIHsKICAgICAgICAgICAgInVuYXR1cnJhbCIsICJ1bm5hdHVyYWwiIH0sIHsKICAgICAgICAgICAgInVuY29uaXNpdGlvbmFsIiwgInVuY29uc3RpdHV0aW9uYWwiIH0sIHsKICAgICAgICAgICAgInVuY29uc2NpZW5jZSIsICJ1bmNvbnNjaW91cyIgfSwgewogICAgICAgICAgICAidW5kZXJsYWRkZXIiLCAidW5kZXIgbGFkZGVyIiB9LCB7CiAgICAgICAgICAgICJ1bmVudGVsZWdpYmxlIiwgInVuaW50ZWxsaWdpYmxlIiB9LCB7CiAgICAgICAgICAgICJ1bmZvcnR1bmVudGx5IiwgInVuZm9ydHVuYXRlbHkiIH0sIHsKICAgICAgICAgICAgInVubmF0dXJyYWwiLCAidW5uYXR1cmFsIiB9LCB7CiAgICAgICAgICAgICJ1cGNhc3QiLCAidXAgY2FzdCIgfSwgewogICAgICAgICAgICAidmVyaXNvbiIsICJ2ZXJzaW9uIiB9LCB7CiAgICAgICAgICAgICJ2aW5hZ2FyZXR0ZSIsICJ2aW5haWdyZXR0ZSIgfSwgewogICAgICAgICAgICAidm9sdW50ZWVyaXNtIiwgInZvbHVudGFyaXNtIiB9LCB7CiAgICAgICAgICAgICJ2b2x5ZSIsICJ2b2xsZXkiIH0sIHsKICAgICAgICAgICAgIndhaXRlIiwgIndhaXQiIH0sIHsKICAgICAgICAgICAgIndhbid0IiwgIndvbid0IiB9LCB7CiAgICAgICAgICAgICJ3YXJsb29yZCIsICJ3YXJsb3JkIiB9LCB7CiAgICAgICAgICAgICJ3aGFhYXQiLCAid2hhdCIgfSwgewogICAgICAgICAgICAid2hhcmQiLCAid2FyZCIgfSwgewogICAgICAgICAgICAid2hpbXAiLCAid2ltcCIgfSwgewogICAgICAgICAgICAid2lja2VuIiwgIndlYWtlbiIgfSwgewogICAgICAgICAgICAid2llcmQiLCAid2VpcmQiIH0sIHsKICAgICAgICAgICAgIndyYW5rIiwgInJhbmsiIH0sIHsKICAgICAgICAgICAgIndyaXRlZW4iLCAicmlnaHRlbiIgfSwgewogICAgICAgICAgICAid3JpdHRpbmciLCAid3JpdGluZyIgfSwgewogICAgICAgICAgICAid3VuZGVld3MiLCAid2luZG93cyIgfSwgewogICAgICAgICAgICAieWVpbGQiLCAieWllbGQiIH0sIH07CgogICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewogICAgICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKERvdWJsZU1ldGFwaG9uZVRlc3QuY2xhc3MpOwogICAgfQoKICAgIHByaXZhdGUgRG91YmxlTWV0YXBob25lIGRvdWJsZU1ldGFwaG9uZSA9IG51bGw7CgogICAgcHVibGljIERvdWJsZU1ldGFwaG9uZVRlc3QoU3RyaW5nIG5hbWUpIHsKICAgICAgICBzdXBlcihuYW1lKTsKICAgIH0KCiAgICAvKioKCSAqIFRlc3RzIGVuY29kaW5nIEFQSXMgaW4gb25lIHBsYWNlLgoJICovCiAgICBwcml2YXRlIHZvaWQgYXNzZXJ0RG91YmxlTWV0YXBob25lKFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIHNvdXJjZSkgewogICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgdGhpcy5nZXREb3VibGVNZXRhcGhvbmUoKS5lbmNvZGUoc291cmNlKSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmVuY29kZSgoT2JqZWN0KSBzb3VyY2UpKTsKICAgICAgICB9IGNhdGNoIChFbmNvZGVyRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgZmFpbCgiVW5leHBlY3RlZCBleHBlY3Rpb246ICIgKyBlKTsKICAgICAgICB9CiAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmRvdWJsZU1ldGFwaG9uZShzb3VyY2UpKTsKICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHRoaXMuZ2V0RG91YmxlTWV0YXBob25lKCkuZG91YmxlTWV0YXBob25lKHNvdXJjZSwgZmFsc2UpKTsKICAgIH0KCiAgICAvKioKCSAqIFRlc3RzIGVuY29kaW5nIEFQSXMgaW4gb25lIHBsYWNlLgoJICovCiAgICBwdWJsaWMgdm9pZCBhc3NlcnREb3VibGVNZXRhcGhvbmVBbHQoU3RyaW5nIGV4cGVjdGVkLCBTdHJpbmcgc291cmNlKSB7CiAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmRvdWJsZU1ldGFwaG9uZShzb3VyY2UsIHRydWUpKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBkb3VibGVNZXRhcGhvbmVFcXVhbFRlc3QoU3RyaW5nW11bXSBwYWlycywgYm9vbGVhbiB1c2VBbHRlcm5hdGUpIHsKICAgICAgICB0aGlzLnZhbGlkYXRlRml4dHVyZShwYWlycyk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBTdHJpbmcgbmFtZTAgPSBwYWlyc1tpXVswXTsKICAgICAgICAgICAgU3RyaW5nIG5hbWUxID0gcGFpcnNbaV1bMV07CiAgICAgICAgICAgIFN0cmluZyBmYWlsTXNnID0gIkV4cGVjdGVkIG1hdGNoIGJldHdlZW4gIiArIG5hbWUwICsgIiBhbmQgIiArIG5hbWUxICsgIiAodXNlIGFsdGVybmF0ZTogIiArIHVzZUFsdGVybmF0ZSArICIpIjsKICAgICAgICAgICAgYXNzZXJ0VHJ1ZShmYWlsTXNnLCB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmlzRG91YmxlTWV0YXBob25lRXF1YWwobmFtZTAsIG5hbWUxLCB1c2VBbHRlcm5hdGUpKTsKICAgICAgICAgICAgYXNzZXJ0VHJ1ZShmYWlsTXNnLCB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmlzRG91YmxlTWV0YXBob25lRXF1YWwobmFtZTEsIG5hbWUwLCB1c2VBbHRlcm5hdGUpKTsKICAgICAgICAgICAgaWYgKCF1c2VBbHRlcm5hdGUpIHsKICAgICAgICAgICAgICAgIGFzc2VydFRydWUoZmFpbE1zZywgdGhpcy5nZXREb3VibGVNZXRhcGhvbmUoKS5pc0RvdWJsZU1ldGFwaG9uZUVxdWFsKG5hbWUwLCBuYW1lMSkpOwogICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShmYWlsTXNnLCB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmlzRG91YmxlTWV0YXBob25lRXF1YWwobmFtZTEsIG5hbWUwKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHZvaWQgZG91YmxlTWV0YXBob25lTm90RXF1YWxUZXN0KGJvb2xlYW4gYWx0ZXJuYXRlKSB7CiAgICAgICAgYXNzZXJ0RmFsc2UodGhpcy5nZXREb3VibGVNZXRhcGhvbmUoKS5pc0RvdWJsZU1ldGFwaG9uZUVxdWFsKCJCcmFpbiIsICJCYW5kIiwgYWx0ZXJuYXRlKSk7CiAgICAgICAgYXNzZXJ0RmFsc2UodGhpcy5nZXREb3VibGVNZXRhcGhvbmUoKS5pc0RvdWJsZU1ldGFwaG9uZUVxdWFsKCJCYW5kIiwgIkJyYWluIiwgYWx0ZXJuYXRlKSk7CgogICAgICAgIGlmICghYWx0ZXJuYXRlKSB7CiAgICAgICAgICAgIGFzc2VydEZhbHNlKHRoaXMuZ2V0RG91YmxlTWV0YXBob25lKCkuaXNEb3VibGVNZXRhcGhvbmVFcXVhbCgiQnJhaW4iLCAiQmFuZCIpKTsKICAgICAgICAgICAgYXNzZXJ0RmFsc2UodGhpcy5nZXREb3VibGVNZXRhcGhvbmUoKS5pc0RvdWJsZU1ldGFwaG9uZUVxdWFsKCJCYW5kIiwgIkJyYWluIikpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIERvdWJsZU1ldGFwaG9uZSBnZXREb3VibGVNZXRhcGhvbmUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG91YmxlTWV0YXBob25lOwogICAgfQoKICAgIHByb3RlY3RlZCBTdHJpbmdFbmNvZGVyIG1ha2VFbmNvZGVyKCkgewogICAgICAgIHJldHVybiBuZXcgTWV0YXBob25lKCk7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIHNldERvdWJsZU1ldGFwaG9uZShEb3VibGVNZXRhcGhvbmUgZG91YmxlTWV0YXBob25lKSB7CiAgICAgICAgdGhpcy5kb3VibGVNZXRhcGhvbmUgPSBkb3VibGVNZXRhcGhvbmU7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBzdXBlci5zZXRVcCgpOwogICAgICAgIHRoaXMuc2V0RG91YmxlTWV0YXBob25lKG5ldyBEb3VibGVNZXRhcGhvbmUoKSk7CiAgICB9CgogICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBzdXBlci50ZWFyRG93bigpOwogICAgICAgIHRoaXMuc2V0RG91YmxlTWV0YXBob25lKG51bGwpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHRlc3REb3VibGVNZXRhcGhvbmUoKSB7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lKCJUU1ROIiwgInRlc3RpbmciKTsKICAgICAgICBhc3NlcnREb3VibGVNZXRhcGhvbmUoIjAiLCAiVGhlIik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lKCJLSyIsICJxdWljayIpOwogICAgICAgIGFzc2VydERvdWJsZU1ldGFwaG9uZSgiUFJOIiwgImJyb3duIik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lKCJGS1MiLCAiZm94Iik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lKCJKTVBUIiwgImp1bXBlZCIpOwogICAgICAgIGFzc2VydERvdWJsZU1ldGFwaG9uZSgiQUZSIiwgIm92ZXIiKTsKICAgICAgICBhc3NlcnREb3VibGVNZXRhcGhvbmUoIjAiLCAidGhlIik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lKCJMUyIsICJsYXp5Iik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lKCJUS1MiLCAiZG9ncyIpOwogICAgICAgIGFzc2VydERvdWJsZU1ldGFwaG9uZSgiTUtGUiIsICJNYWNDYWZmZXJleSIpOwogICAgICAgIGFzc2VydERvdWJsZU1ldGFwaG9uZSgiU1RGTiIsICJTdGVwaGFuIik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lKCJLU1NLIiwgIkt1Y3pld3NraSIpOwoKICAgICAgICBhc3NlcnREb3VibGVNZXRhcGhvbmVBbHQoIlRTVE4iLCAidGVzdGluZyIpOwogICAgICAgIGFzc2VydERvdWJsZU1ldGFwaG9uZUFsdCgiVCIsICJUaGUiKTsKICAgICAgICBhc3NlcnREb3VibGVNZXRhcGhvbmVBbHQoIktLIiwgInF1aWNrIik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lQWx0KCJQUk4iLCAiYnJvd24iKTsKICAgICAgICBhc3NlcnREb3VibGVNZXRhcGhvbmVBbHQoIkZLUyIsICJmb3giKTsKICAgICAgICBhc3NlcnREb3VibGVNZXRhcGhvbmVBbHQoIkFNUFQiLCAianVtcGVkIik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lQWx0KCJBRlIiLCAib3ZlciIpOwogICAgICAgIGFzc2VydERvdWJsZU1ldGFwaG9uZUFsdCgiVCIsICJ0aGUiKTsKICAgICAgICBhc3NlcnREb3VibGVNZXRhcGhvbmVBbHQoIkxTIiwgImxhenkiKTsKICAgICAgICBhc3NlcnREb3VibGVNZXRhcGhvbmVBbHQoIlRLUyIsICJkb2dzIik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lQWx0KCJNS0ZSIiwgIk1hY0NhZmZlcmV5Iik7CiAgICAgICAgYXNzZXJ0RG91YmxlTWV0YXBob25lQWx0KCJTVEZOIiwgIlN0ZXBoYW4iKTsKICAgICAgICBhc3NlcnREb3VibGVNZXRhcGhvbmVBbHQoIktYRlMiLCAiS3V0Y2hlZnNraSIpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpIHsKICAgICAgICBhc3NlcnRFcXVhbHMobnVsbCwgdGhpcy5nZXREb3VibGVNZXRhcGhvbmUoKS5kb3VibGVNZXRhcGhvbmUobnVsbCkpOwogICAgICAgIGFzc2VydEVxdWFscyhudWxsLCB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmRvdWJsZU1ldGFwaG9uZSgiIikpOwogICAgICAgIGFzc2VydEVxdWFscyhudWxsLCB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmRvdWJsZU1ldGFwaG9uZSgiICIpKTsKICAgICAgICBhc3NlcnRFcXVhbHMobnVsbCwgdGhpcy5nZXREb3VibGVNZXRhcGhvbmUoKS5kb3VibGVNZXRhcGhvbmUoIlx0XG5cciAiKSk7CiAgICB9CgogICAgcHVibGljIHZvaWQgdGVzdElzRG91YmxlTWV0YXBob25lRXF1YWxCYXNpYygpIHsKICAgICAgICBTdHJpbmdbXVtdIHRlc3RGaXh0dXJlID0gbmV3IFN0cmluZ1tdW10geyB7ICJDYXNlIiwgImNhc2UiIH0sIHsKICAgICAgICAgICAgICAgICJDQVNFIiwgIkNhc2UiIH0sIHsKICAgICAgICAgICAgICAgICJjYVNlIiwgImNBc0UiIH0sIHsKICAgICAgICAgICAgICAgICJjb29raWUiLCAicXVpY2siIH0sIHsKICAgICAgICAgICAgICAgICJxdWljayIsICJjb29raWUiIH0sIHsKICAgICAgICAgICAgICAgICJCcmlhbiIsICJCcnlhbiIgfSwgewogICAgICAgICAgICAgICAgIkF1dG8iLCAiT3R0byIgfSwgewogICAgICAgICAgICAgICAgIlN0ZXZlbiIsICJTdGVmYW4iIH0sIHsKICAgICAgICAgICAgICAgICJQaGlsaXBvd2l0eiIsICJGaWxpcG93aWN6IiB9CiAgICAgICAgfTsKICAgICAgICBkb3VibGVNZXRhcGhvbmVFcXVhbFRlc3QodGVzdEZpeHR1cmUsIGZhbHNlKTsKICAgICAgICBkb3VibGVNZXRhcGhvbmVFcXVhbFRlc3QodGVzdEZpeHR1cmUsIHRydWUpOwogICAgfQoKICAgIC8qKgoJICogRXhhbXBsZSBpbiB0aGUgb3JpZ2luYWwgYXJ0aWNsZSBidXQgZmFpbHVyZXMgaW4gdGhpcyBKYXZhIGltcGw6CgkgKi8KICAgIHB1YmxpYyB2b2lkIHRlc3RJc0RvdWJsZU1ldGFwaG9uZUVxdWFsRXh0ZW5kZWQxKCkgewogICAgICAgIC8vICAgICAgICBTdHJpbmdbXVtdIHRlc3RGaXh0dXJlID0gbmV3IFN0cmluZ1tdW10geyB7ICJTbWl0aCIsICJTY2htaWR0IiB9CiAgICAgICAgLy8gICAgICAgIH07CiAgICAgICAgLy8gICAgICAgIGRvdWJsZU1ldGFwaG9uZUVxdWFsVGVzdCh0ZXN0Rml4dHVyZSwgZmFsc2UpOwogICAgICAgIC8vICAgICAgICBkb3VibGVNZXRhcGhvbmVFcXVhbFRlc3QodGVzdEZpeHR1cmUsIHRydWUpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIHRlc3RJc0RvdWJsZU1ldGFwaG9uZUVxdWFsRXh0ZW5kZWQyKCkgewogICAgICAgIFN0cmluZ1tdW10gdGVzdEZpeHR1cmUgPSBuZXcgU3RyaW5nW11bXSB7IHsgIkphYmxvbnNraSIsICJZYWJsb25za3kiIH0KICAgICAgICB9OwogICAgICAgIC8vZG91YmxlTWV0YXBob25lRXF1YWxUZXN0KHRlc3RGaXh0dXJlLCBmYWxzZSk7CiAgICAgICAgZG91YmxlTWV0YXBob25lRXF1YWxUZXN0KHRlc3RGaXh0dXJlLCB0cnVlKTsKICAgIH0KCiAgICAvKioKCSAqIFVzZWQgdG8gZ2VuZXJhdGUgdGhlIE1BVENIRVMgYXJyYXkgYW5kIHRlc3QgcG9zc2libGUgbWF0Y2hlcyBmcm9tIHRoZQoJICogRklYVFVSRSBhcnJhcnkuCgkgKi8KICAgIHB1YmxpYyB2b2lkIHRlc3RJc0RvdWJsZU1ldGFwaG9uZUVxdWFsRXh0ZW5kZWQzKCkgewogICAgICAgIHRoaXMudmFsaWRhdGVGaXh0dXJlKEZJWFRVUkUpOwogICAgICAgIFN0cmluZ0J1ZmZlciBmYWlsdXJlcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBTdHJpbmdCdWZmZXIgbWF0Y2hlcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBTdHJpbmcgY3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7CiAgICAgICAgbWF0Y2hlcy5hcHBlbmQoInByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gTUFUQ0hFUyA9IHsiICsgY3IpOwogICAgICAgIGludCBmYWlsQ291bnQgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRklYVFVSRS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBTdHJpbmcgbmFtZTAgPSBGSVhUVVJFW2ldWzBdOwogICAgICAgICAgICBTdHJpbmcgbmFtZTEgPSBGSVhUVVJFW2ldWzFdOwogICAgICAgICAgICBib29sZWFuIG1hdGNoMSA9IHRoaXMuZ2V0RG91YmxlTWV0YXBob25lKCkuaXNEb3VibGVNZXRhcGhvbmVFcXVhbChuYW1lMCwgbmFtZTEsIGZhbHNlKTsKICAgICAgICAgICAgYm9vbGVhbiBtYXRjaDIgPSB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmlzRG91YmxlTWV0YXBob25lRXF1YWwobmFtZTAsIG5hbWUxLCB0cnVlKTsKICAgICAgICAgICAgaWYgKG1hdGNoMSA9PSBmYWxzZSAmJiBtYXRjaDIgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIFN0cmluZyBmYWlsTXNnID0gIlsiICsgaSArICJdICIgKyBuYW1lMCArICIgYW5kICIgKyBuYW1lMSArIGNyOwogICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGZhaWxNc2cpOwogICAgICAgICAgICAgICAgZmFpbENvdW50Kys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZCgie1wiIiArIG5hbWUwICsgIlwiLCBcIiIgKyBuYW1lMSArICJcIn0sIiArIGNyKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBTdHJpbmcgbXNnID0gZmFpbHVyZXMudG9TdHJpbmcoKTsKICAgICAgICBtYXRjaGVzLmFwcGVuZCgifTsiKTsKICAgICAgICAvLyBUdXJuIG9uIHRvIHByaW50IGEgbmV3IE1BVENIIGFycmF5CiAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4obWF0Y2hlcy50b1N0cmluZygpKTsKICAgICAgICBpZiAobXNnLmxlbmd0aCgpID4gMCkgewogICAgICAgICAgICAvLyBUdXJuIG9uIHRvIHNlZSB3aGljaCBwYWlycyBkbyBOT1QgbWF0Y2guCiAgICAgICAgICAgIC8vZmFpbChmYWlsQ291bnQgKyAiIGZhaWx1cmVzIG91dCBvZiAiICsgRklYVFVSRS5sZW5ndGggKyAiLiBUaGUKICAgICAgICAgICAgLy8gZm9sbG93aW5nIGNvdWxkIGJlIG1hZGUgdG8gbWF0Y2g6ICIgKyBjciArIG1zZyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyB2b2lkIHRlc3RJc0RvdWJsZU1ldGFwaG9uZUVxdWFsV2l0aE1BVENIRVMoKSB7CiAgICAgICAgdGhpcy52YWxpZGF0ZUZpeHR1cmUoTUFUQ0hFUyk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVRDSEVTLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIFN0cmluZyBuYW1lMCA9IE1BVENIRVNbaV1bMF07CiAgICAgICAgICAgIFN0cmluZyBuYW1lMSA9IE1BVENIRVNbaV1bMV07CiAgICAgICAgICAgIGJvb2xlYW4gbWF0Y2gxID0gdGhpcy5nZXREb3VibGVNZXRhcGhvbmUoKS5pc0RvdWJsZU1ldGFwaG9uZUVxdWFsKG5hbWUwLCBuYW1lMSwgZmFsc2UpOwogICAgICAgICAgICBib29sZWFuIG1hdGNoMiA9IHRoaXMuZ2V0RG91YmxlTWV0YXBob25lKCkuaXNEb3VibGVNZXRhcGhvbmVFcXVhbChuYW1lMCwgbmFtZTEsIHRydWUpOwogICAgICAgICAgICBpZiAobWF0Y2gxID09IGZhbHNlICYmIG1hdGNoMiA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgbWF0Y2ggWyIgKyBpICsgIl0gIiArIG5hbWUwICsgIiBhbmQgIiArIG5hbWUxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgdm9pZCB0ZXN0SXNEb3VibGVNZXRhcGhvbmVOb3RFcXVhbCgpIHsKICAgICAgICBkb3VibGVNZXRhcGhvbmVOb3RFcXVhbFRlc3QoZmFsc2UpOwogICAgICAgIGRvdWJsZU1ldGFwaG9uZU5vdEVxdWFsVGVzdCh0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCB0ZXN0Q0NlZGlsbGEoKSB7CiAgICAgICAgdGhpcy5nZXREb3VibGVNZXRhcGhvbmUoKS5pc0RvdWJsZU1ldGFwaG9uZUVxdWFsKCLnIiwgIlMiKTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgdGVzdE5UaWxkZSgpIHsKICAgICAgICB0aGlzLmdldERvdWJsZU1ldGFwaG9uZSgpLmlzRG91YmxlTWV0YXBob25lRXF1YWwoIvEiLCAiTiIpOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZUZpeHR1cmUoU3RyaW5nW11bXSBwYWlycykgewogICAgICAgIGlmIChwYWlycy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICBmYWlsKCJUZXN0IGZpeHR1cmUgaXMgZW1wdHkiKTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocGFpcnNbaV0ubGVuZ3RoICE9IDIpIHsKICAgICAgICAgICAgICAgIGZhaWwoIkVycm9yIGluIHRlc3QgZml4dHVyZSBpbiB0aGUgZGF0YSBhcnJheSBhdCBpbmRleCAiICsgaSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K