REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 146.00 KB
Close
/proc/thread-self/root/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/sql/__pycache__/elements.cpython-37.pyc
Text
Base64
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cHlyEwAAACQAAABzAgAAAAABchMAAABjAwAAAAAAAAADAAAABgAAAEMAAABzFAAAAHQAoAF8AGQBfAJ8AWYCFgChAlMAKQJOesYuLiB3YXJuaW5nOjogVGhlICVzIGFyZ3VtZW50IHRvICVzIGNhbiBiZSBwYXNzZWQgYXMgYSBQeXRob24gc3RyaW5nIGFyZ3VtZW50LCB3aGljaCB3aWxsIGJlIHRyZWF0ZWQgYXMgKip0cnVzdGVkIFNRTCB0ZXh0KiogYW5kIHJlbmRlcmVkIGFzIGdpdmVuLiAgKipETyBOT1QgUEFTUyBVTlRSVVNURUQgSU5QVVQgVE8gVEhJUyBQQVJBTUVURVIqKi4pAnISAAAAWhJhZGRfcGFyYW1ldGVyX3RleHQpA1oJcGFyYW1uYW1lWghtZXRoX3JzdFoJcGFyYW1fcnN0chYAAAByFgAAAHIXAAAA2hdfZG9jdW1lbnRfdGV4dF9jb2VyY2lvbigAAABzCAAAAAABBAECAgIGchgAAABjAgAAAAAAAAADAAAABgAAAEMAAABzIAAAAHQAfACDAX0CdAF8AnQCfAGDAXQDagR8AmoFZAGNBFMAKQJhkgEAAFJldHVybiB0aGUgY2xhdXNlIGBgZXhwcmVzc2lvbiBDT0xMQVRFIGNvbGxhdGlvbmBgLgoKICAgIGUuZy46OgoKICAgICAgICBjb2xsYXRlKG15Y29sdW1uLCAndXRmOF9iaW4nKQoKICAgIHByb2R1Y2VzOjoKCiAgICAgICAgbXljb2x1bW4gQ09MTEFURSB1dGY4X2JpbgoKICAgIFRoZSBjb2xsYXRpb24gZXhwcmVzc2lvbiBpcyBhbHNvIHF1b3RlZCBpZiBpdCBpcyBhIGNhc2Ugc2Vuc2l0aXZlCiAgICBpZGVudGlmaWVyLCBlLmcuIGNvbnRhaW5zIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4yIHF1b3RpbmcgaXMgYXV0b21hdGljYWxseSBhcHBsaWVkIHRvIENPTExBVEUKICAgICAgIGV4cHJlc3Npb25zIGlmIHRoZXkgYXJlIGNhc2Ugc2Vuc2l0aXZlLgoKICAgICkB2gV0eXBlXykG2hFfbGl0ZXJhbF9hc19iaW5kc9oQQmluYXJ5RXhwcmVzc2lvbtoPQ29sbGF0aW9uQ2xhdXNlcgQAAADaB2NvbGxhdGXaBHR5cGUpA9oKZXhwcmVzc2lvbtoJY29sbGF0aW9u2gRleHBychYAAAByFgAAAHIXAAAAch0AAAA2AAAAcwYAAAAAEwgBAgFyHQAAAEZjBAAAAAAAAAAEAAAABQAAAEMAAABzGAAAAHQAfACDAX0AfABqAXwBfAJ8A2QBjQNTACkCYUUGAABQcm9kdWNlIGEgYGBCRVRXRUVOYGAgcHJlZGljYXRlIGNsYXVzZS4KCiAgICBFLmcuOjoKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBiZXR3ZWVuCiAgICAgICAgc3RtdCA9IHNlbGVjdChbdXNlcnNfdGFibGVdKS53aGVyZShiZXR3ZWVuKHVzZXJzX3RhYmxlLmMuaWQsIDUsIDcpKQoKICAgIFdvdWxkIHByb2R1Y2UgU1FMIHJlc2VtYmxpbmc6OgoKICAgICAgICBTRUxFQ1QgaWQsIG5hbWUgRlJPTSB1c2VyIFdIRVJFIGlkIEJFVFdFRU4gOmlkXzEgQU5EIDppZF8yCgogICAgVGhlIDpmdW5jOmAuYmV0d2VlbmAgZnVuY3Rpb24gaXMgYSBzdGFuZGFsb25lIHZlcnNpb24gb2YgdGhlCiAgICA6bWV0aDpgLkNvbHVtbkVsZW1lbnQuYmV0d2VlbmAgbWV0aG9kIGF2YWlsYWJsZSBvbiBhbGwKICAgIFNRTCBleHByZXNzaW9ucywgYXMgaW46OgoKICAgICAgICBzdG10ID0gc2VsZWN0KFt1c2Vyc190YWJsZV0pLndoZXJlKHVzZXJzX3RhYmxlLmMuaWQuYmV0d2Vlbig1LCA3KSkKCiAgICBBbGwgYXJndW1lbnRzIHBhc3NlZCB0byA6ZnVuYzpgLmJldHdlZW5gLCBpbmNsdWRpbmcgdGhlIGxlZnQgc2lkZQogICAgY29sdW1uIGV4cHJlc3Npb24sIGFyZSBjb2VyY2VkIGZyb20gUHl0aG9uIHNjYWxhciB2YWx1ZXMgaWYgYQogICAgdGhlIHZhbHVlIGlzIG5vdCBhIDpjbGFzczpgLkNvbHVtbkVsZW1lbnRgIHN1YmNsYXNzLiAgIEZvciBleGFtcGxlLAogICAgdGhyZWUgZml4ZWQgdmFsdWVzIGNhbiBiZSBjb21wYXJlZCBhcyBpbjo6CgogICAgICAgIHByaW50KGJldHdlZW4oNSwgMywgNykpCgogICAgV2hpY2ggd291bGQgcHJvZHVjZTo6CgogICAgICAgIDpwYXJhbV8xIEJFVFdFRU4gOnBhcmFtXzIgQU5EIDpwYXJhbV8zCgogICAgOnBhcmFtIGV4cHI6IGEgY29sdW1uIGV4cHJlc3Npb24sIHR5cGljYWxseSBhIDpjbGFzczpgLkNvbHVtbkVsZW1lbnRgCiAgICAgaW5zdGFuY2Ugb3IgYWx0ZXJuYXRpdmVseSBhIFB5dGhvbiBzY2FsYXIgZXhwcmVzc2lvbiB0byBiZSBjb2VyY2VkCiAgICAgaW50byBhIGNvbHVtbiBleHByZXNzaW9uLCBzZXJ2aW5nIGFzIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGBgQkVUV0VFTmBgCiAgICAgZXhwcmVzc2lvbi4KCiAgICA6cGFyYW0gbG93ZXJfYm91bmQ6IGEgY29sdW1uIG9yIFB5dGhvbiBzY2FsYXIgZXhwcmVzc2lvbiBzZXJ2aW5nIGFzIHRoZQogICAgIGxvd2VyIGJvdW5kIG9mIHRoZSByaWdodCBzaWRlIG9mIHRoZSBgYEJFVFdFRU5gYCBleHByZXNzaW9uLgoKICAgIDpwYXJhbSB1cHBlcl9ib3VuZDogYSBjb2x1bW4gb3IgUHl0aG9uIHNjYWxhciBleHByZXNzaW9uIHNlcnZpbmcgYXMgdGhlCiAgICAgdXBwZXIgYm91bmQgb2YgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGBgQkVUV0VFTmBgIGV4cHJlc3Npb24uCgogICAgOnBhcmFtIHN5bW1ldHJpYzogaWYgVHJ1ZSwgd2lsbCByZW5kZXIgIiBCRVRXRUVOIFNZTU1FVFJJQyAiLiBOb3RlCiAgICAgdGhhdCBub3QgYWxsIGRhdGFiYXNlcyBzdXBwb3J0IHRoaXMgc3ludGF4LgoKICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuNQoKICAgIC4uIHNlZWFsc286OgoKICAgICAgICA6bWV0aDpgLkNvbHVtbkVsZW1lbnQuYmV0d2VlbmAKCiAgICApAdoJc3ltbWV0cmljKQJyGgAAANoHYmV0d2VlbikEciEAAABaC2xvd2VyX2JvdW5kWgt1cHBlcl9ib3VuZHIiAAAAchYAAAByFgAAAHIXAAAAciMAAABPAAAAcwQAAAAAMggBciMAAABjAgAAAAAAAAACAAAABgAAAEMAAABzEAAAAHQAZAF8AHwBZAJkA40EUwApBGH/AgAAUmV0dXJuIGEgbGl0ZXJhbCBjbGF1c2UsIGJvdW5kIHRvIGEgYmluZCBwYXJhbWV0ZXIuCgogICAgTGl0ZXJhbCBjbGF1c2VzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBub24tCiAgICA6Y2xhc3M6YC5DbGF1c2VFbGVtZW50YCBvYmplY3RzIChzdWNoIGFzIHN0cmluZ3MsIGludHMsIGRhdGVzLCBldGMuKSBhcmUKICAgIHVzZWQgaW4gYSBjb21wYXJpc29uIG9wZXJhdGlvbiB3aXRoIGEgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAgc3ViY2xhc3MsCiAgICBzdWNoIGFzIGEgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uYCBvYmplY3QuICBVc2UgdGhpcyBmdW5jdGlvbgogICAgdG8gZm9yY2UgdGhlIGdlbmVyYXRpb24gb2YgYSBsaXRlcmFsIGNsYXVzZSwgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGFzIGEKICAgIDpjbGFzczpgQmluZFBhcmFtZXRlcmAgd2l0aCBhIGJvdW5kIHZhbHVlLgoKICAgIDpwYXJhbSB2YWx1ZTogdGhlIHZhbHVlIHRvIGJlIGJvdW5kLiBDYW4gYmUgYW55IFB5dGhvbiBvYmplY3Qgc3VwcG9ydGVkIGJ5CiAgICAgICAgdGhlIHVuZGVybHlpbmcgREItQVBJLCBvciBpcyB0cmFuc2xhdGFibGUgdmlhIHRoZSBnaXZlbiB0eXBlIGFyZ3VtZW50LgoKICAgIDpwYXJhbSB0eXBlXF86IGFuIG9wdGlvbmFsIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuVHlwZUVuZ2luZWAgd2hpY2gKICAgICAgICB3aWxsIHByb3ZpZGUgYmluZC1wYXJhbWV0ZXIgdHJhbnNsYXRpb24gZm9yIHRoaXMgbGl0ZXJhbC4KCiAg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AADaBWNsb25lchYAAAByFgAAAHIXAAAA2gtfZGVhbm5vdGF0ZQwBAABzBgAAAAAIBAMIBHoZQ2xhdXNlRWxlbWVudC5fZGVhbm5vdGF0ZWMEAAAAAAAAAAQAAAAFAAAAQwAAAHMiAAAAfABqAHIUfAGgAXwAfAJ8A6EDUwB0AqADfAChAYIBZABTACkBTikE2hJzdXBwb3J0c19leGVjdXRpb25aFl9leGVjdXRlX2NsYXVzZWVsZW1lbnRyEAAAAFoYT2JqZWN0Tm90RXhlY3V0YWJsZUVycm9yKQRyOAAAAFoKY29ubmVjdGlvbloLbXVsdGlwYXJhbXPaBnBhcmFtc3IWAAAAchYAAAByFwAAANoWX2V4ZWN1dGVfb25fY29ubmVjdGlvbh0BAABzBgAAAAABBgEOAnokQ2xhdXNlRWxlbWVudC5fZXhlY3V0ZV9vbl9jb25uZWN0aW9uYwEAAAAAAAAAAwAAAAUAAABPAAAAcw4AAAB8AKAAZAF8AXwCoQNTACkCet9SZXR1cm4gYSBjb3B5IHdpdGggOmZ1bmM6YGJpbmRwYXJhbSgpYCBlbGVtZW50cyByZXBsYWNlZC4KCiAgICAgICAgU2FtZSBmdW5jdGlvbmFsaXR5IGFzIGBgcGFyYW1zKClgYCwgZXhjZXB0IGFkZHMgYHVuaXF1ZT1UcnVlYAogICAgICAgIHRvIGFmZmVjdGVkIGJpbmQgcGFyYW1ldGVycyBzbyB0aGF0IG11bHRpcGxlIHN0YXRlbWVudHMgY2FuIGJlCiAgICAgICAgdXNlZC4KCiAgICAgICAgVCkB2gdfcGFyYW1zKQNyOAAAANoMb3B0aW9uYWxkaWN02gZrd2FyZ3NyFgAAAHIWAAAAchcAAADaDXVuaXF1ZV9wYXJhbXMjAQAAcwIAAAAACHobQ2xhdXNlRWxlbWVudC51bmlxdWVfcGFyYW1zYwEAAAAAAAAAAwAAAAUAAABPAAAAcw4AAAB8AKAAZAF8AXwCoQNTACkCYZ4BAABSZXR1cm4gYSBjb3B5IHdpdGggOmZ1bmM6YGJpbmRwYXJhbSgpYCBlbGVtZW50cyByZXBsYWNlZC4KCiAgICAgICAgUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBDbGF1c2VFbGVtZW50IHdpdGggOmZ1bmM6YGJpbmRwYXJhbSgpYAogICAgICAgIGVsZW1lbnRzIHJlcGxhY2VkIHdpdGggdmFsdWVzIHRha2VuIGZyb20gdGhlIGdpdmVuIGRpY3Rpb25hcnk6OgoKICAgICAgICAgID4+PiBjbGF1c2UgPSBjb2x1bW4oJ3gnKSArIGJpbmRwYXJhbSgnZm9vJykKICAgICAgICAgID4+PiBwcmludCBjbGF1c2UuY29tcGlsZSgpLnBhcmFtcwogICAgICAgICAgeydmb28nOk5vbmV9CiAgICAgICAgICA+Pj4gcHJpbnQgY2xhdXNlLnBhcmFtcyh7J2Zvbyc6N30pLmNvbXBpbGUoKS5wYXJhbXMKICAgICAgICAgIHsnZm9vJzo3fQoKICAgICAgICBGKQFySgAAACkDcjgAAABySwAAAHJMAAAAchYAAAByFgAAAHIXAAAAckgAAAAtAQAAcwIAAAAADXoUQ2xhdXNlRWxlbWVudC5wYXJhbXNjBAAAAAAAAAAFAAAABQAAAAMAAABzUAAAAHQAfAKDAWQBawJyHIgAoAF8AmQCGQChAQEAbhZ0AHwCgwFkAWsEcjJ0AqADZAOhAYIBhwCHAWYCZARkBYQIfQR0BHwAaQBkBnwEaQGDA1MAKQdOcgMAAAByAQAAAHo5cGFyYW1zKCkgdGFrZXMgemVybyBvciBvbmUgcG9zaXRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50YwEAAAAAAAAAAQAAAAIAAAATAAAAcywAAAB8AGoAiABrBnIciAB8AGoAGQB8AF8BZAF8AF8CiAFyKHwAoAOhAAEAZABTACkCTkYpBHIpAAAAciYAAADaCHJlcXVpcmVk2hJfY29udmVydF90b191bmlxdWUpAdoEYmluZCkCckwAAAByJAAAAHIWAAAAchcAAADaD3Zpc2l0X2JpbmRwYXJhbUQBAABzCgAAAAABCgEMAQYBBAF6LkNsYXVzZUVsZW1lbnQuX3BhcmFtcy48bG9jYWxzPi52aXNpdF9iaW5kcGFyYW3aCWJpbmRwYXJhbSkF2gNsZW7aBnVwZGF0ZXIQAAAA2g1Bcmd1bWVudEVycm9ycgwAAAApBXI4AAAAciQAAABySwAAAHJMAAAAclEAAAByFgAAACkCckwAAAByJAAAAHIXAAAAckoAAAA8AQAAcw4AAAAAAQwBEAEMAQQBBgMOB3oVQ2xhdXNlRWxlbWVudC5fcGFyYW1zYwIAAAAAAAAAAwAAAAIAAABLAAAAcwgAAAB8AHwBawhTACkBYVQBAABDb21wYXJlIHRoaXMgQ2xhdXNlRWxlbWVudCB0byB0aGUgZ2l2ZW4gQ2xhdXNlRWxlbWVudC4KCiAgICAgICAgU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHdoaWNoIGlzIGEKICAgICAgICBzdHJhaWdodCBpZGVudGl0eSBjb21wYXJpc29uLgoKICAgICAgICBcKiprdyBhcmUgYXJndW1lbnRzIGNvbnN1bWVkIGJ5IHN1YmNsYXNzIGNvbXBhcmUoKSBtZXRob2RzIGFuZAogICAgICAgIG1heSBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgY3JpdGVyaWEgZm9yIGNvbXBhcmlzb24uCiAgICAgICAgKHNlZSA6Y2xhc3M6YC5Db2x1bW5FbGVtZW50YCkKCiAgICAgICAgchYAAAApA3I4AAAA2gVvdGhlcnIVAAAAchYAAAByFgAAAHIXAAAA2gdjb21wYXJlTQEAAHMCAAAAAAt6FUNsYXVzZUVsZW1lbnQuY29tcGFyZWMCAAAAAAAAAAMAAAABAAAASwAAAHMEAAAAZAFTACkCYXQBAABSZWFzc2lnbiBpbnRlcm5hbCBlbGVtZW50cyB0byBiZSBjbG9uZXMgb2YgdGhlbXNlbHZlcy4KCiAgICAgICAgQ2FsbGVkIGR1cmluZyBhIGNvcHktYW5kLXRyYXZlcnNlIG9wZXJhdGlvbiBvbiBuZXdseQogICAgICAgIHNoYWxsb3ctY29waWVkIGVsZW1lbnRzIHRvIGNyZWF0ZSBhIGRlZXAgY29weS4KCiAgICAgICAgVGhlIGdpdmVuIGNsb25lIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLCB3aGljaCBtYXkgYmUgYXBwbHlpbmcKICAgICAgICBhZGRpdGlvbmFsIHRyYW5zZm9ybWF0aW9ucyB0byB0aGUgZWxlbWVudCAoaS5lLiByZXBsYWNlbWVudAogICAgICAgIHRyYXZlcnNhbCwgY2xvbmVkIHRyYXZlcnNhbCwgYW5ub3RhdGlvbnMpLgoKICAgICAgICBOchYAAAApA3I4AAAAckUAAAByFQAAAHIWAAAAchYAAAByFwAAANoPX2NvcHlfaW50ZXJuYWxzWgEAAHMCAAAAAAt6HUNsYXVzZUVsZW1lbnQuX2NvcHlfaW50ZXJuYWxzYwEAAAAAAAAAAgAAAAEAAABLAAAAcwQAAABnAFMAKQFhqAEAAFJldHVybiBpbW1lZGlhdGUgY2hpbGQgZWxlbWVudHMgb2YgdGhpcyA6Y2xhc3M6YC5DbGF1c2VFbGVtZW50YC4KCiAgICAgICAgVGhpcyBpcyB1c2VkIGZvciB2aXNpdCB0cmF2ZXJzYWwuCgogICAgICAgIFwqKmt3YXJncyBtYXkgY29udGFpbiBmbGFncyB0aGF0IGNoYW5nZSB0aGUgY29sbGVjdGlvbiB0aGF0IGlzCiAgICAgICAgcmV0dXJuZWQsIGZvciBleGFtcGxlIHRvIHJldHVybiBhIHN1YnNldCBvZiBpdGVtcyBpbiBvcmRlciB0bwogICAgICAgIGN1dCBkb3duIG9uIGxhcmdlciB0cmF2ZXJzYWxzLCBvciB0byByZXR1cm4gY2hpbGQgaXRlbXMgZnJvbSBhCiAgICAgICAgZGlmZmVyZW50IGNvbnRleHQgKHN1Y2ggYXMgc2NoZW1hLWxldmVsIGNvbGxlY3Rpb25zIGluc3RlYWQgb2YKICAgICAgICBjbGF1c2UtbGV2ZWwpLgoKICAgICAgICByFgAAACkCcjgAAAByTAAAAHIWAAAAchYAAAByFwAAANoMZ2V0X2NoaWxkcmVuZwEAAHMCAAAAAAx6GkNsYXVzZUVsZW1lbnQuZ2V0X2NoaWxkcmVuYwIAAAAAAAAAAgAAAAEAAABDAAAAcwQAAAB8AFMAKQFhYQQAAEFwcGx5IGEgJ2dyb3VwaW5nJyB0byB0aGlzIDpjbGFzczpgLkNsYXVzZUVsZW1lbnRgLgoKICAgICAgICBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgdG8gcmV0dXJuIGEKICAgICAgICAiZ3JvdXBpbmciIGNvbnN0cnVjdCwgaS5lLiBwYXJlbnRoZXNpcy4gICBJbiBwYXJ0aWN1bGFyCiAgICAgICAgaXQncyB1c2VkIGJ5ICJiaW5hcnkiIGV4cHJlc3Npb25zIHRvIHByb3ZpZGUgYSBncm91cGluZwogICAgICAgIGFyb3VuZCB0aGVtc2VsdmVzIHdoZW4gcGxhY2VkIGludG8gYSBsYXJnZXIgZXhwcmVzc2lvbiwKICAgICAgICBhcyB3ZWxsIGFzIGJ5IDpmdW5jOmAuc2VsZWN0YCBjb25zdHJ1Y3RzIHdoZW4gcGxhY2VkIGludG8KICAgICAgICB0aGUgRlJPTSBjbGF1c2Ugb2YgYW5vdGhlciA6ZnVuYzpgLnNlbGVjdGAuICAoTm90ZSB0aGF0CiAgICAgICAgc3VicXVlcmllcyBzaG91bGQgYmUgbm9ybWFsbHkgY3JlYXRlZCB1c2luZyB0aGUKICAgICAgICA6bWV0aDpgLlNlbGVjdC5hbGlhc2AgbWV0aG9kLCBhcyBtYW55IHBsYXRmb3JtcyByZXF1aXJlCiAgICAgICAgbmVzdGVkIFNFTEVDVCBzdGF0ZW1lbnRzIHRvIGJlIG5hbWVkKS4KCiAgICAgICAgQXMgZXhwcmVzc2lvbnMgYXJlIGNvbXBvc2VkIHRvZ2V0aGVyLCB0aGUgYXBwbGljYXRpb24gb2YKICAgICAgICA6bWV0aDpgc2VsZl9ncm91cGAgaXMgYXV0b21hdGljIC0gZW5kLXVzZXIgY29kZSBzaG91bGQgbmV2ZXIKICAgICAgICBuZWVkIHRvIHVzZSB0aGlzIG1ldGhvZCBkaXJlY3RseS4gIE5vdGUgdGhhdCBTUUxBbGNoZW15J3MKICAgICAgICBjbGF1c2UgY29uc3RydWN0cyB0YWtlIG9wZXJhdG9yIHByZWNlZGVuY2UgaW50byBhY2NvdW50IC0KICAgICAgICBzbyBwYXJlbnRoZXNpcyBtaWdodCBub3QgYmUgbmVlZGVkLCBmb3IgZXhhbXBsZSwgaW4KICAgICAgICBhbiBleHByZXNzaW9uIGxpa2UgYGB4IE9SICh5IEFORCB6KWBgIC0gQU5EIHRha2VzIHByZWNlZGVuY2UKICAgICAgICBvdmVyIE9SLgoKICAgICAgICBUaGUgYmFzZSA6bWV0aDpgc2VsZl9ncm91cGAgbWV0aG9kIG9mIDpjbGFzczpgLkNsYXVzZUVsZW1lbnRgCiAgICAgICAganVzdCByZXR1cm5zIHNlbGYuCiAgICAgICAgchYAAAApAnI4AAAA2gdhZ2FpbnN0chYAAAByFgAAAHIXAAAA2gpzZWxmX2dyb3VwdQEAAHMCAAAAABh6GENsYXVzZUVsZW1lbnQuc2VsZl9ncm91cHoZc3FsYWxjaGVteS5lbmdpbmUuZGVmYXVsdGMEAAAAAAAAAAUAAAAEAAAASwAAAHNEAAAAfANzLnwCchB8AmoAfQNuHnwAagFyJnwAagFqAH0DfABqAX0Cbgh8AaACoQB9A3wAagN8A2YBZAF8AmkBfASXAo4BUwApAmEHCQAAQ29tcGlsZSB0aGlzIFNRTCBleHByZXNzaW9uLgoKICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgOmNsYXNzOmB+LkNvbXBpbGVkYCBvYmplY3QuCiAgICAgICAgQ2FsbGluZyBgYHN0cigpYGAgb3IgYGB1bmljb2RlKClgYCBvbiB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCB5aWVsZCBhCiAgICAgICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXN1bHQuIFRoZQogICAgICAgIDpjbGFzczpgfi5Db21waWxlZGAgb2JqZWN0IGFsc28gY2FuIHJldHVybiBhCiAgICAgICAgZGljdGlvbmFyeSBvZiBiaW5kIHBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzCiAgICAgICAgdXNpbmcgdGhlIGBgcGFyYW1zYGAgYWNjZXNzb3IuCgogICAgICAgIDpwYXJhbSBiaW5kOiBBbiBgYEVuZ2luZWBgIG9yIGBgQ29ubmVjdGlvbmBgIGZyb20gd2hpY2ggYQogICAgICAgICAgICBgYENvbXBpbGVkYGAgd2lsbCBiZSBhY3F1aXJlZC4gVGhpcyBhcmd1bWVudCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKICAgICAgICAgICAgdGhpcyA6Y2xhc3M6YC5DbGF1c2VFbGVtZW50YCdzIGJvdW5kIGVuZ2luZSwgaWYgYW55LgoKICAgICAgICA6cGFyYW0gY29sdW1uX2tleXM6IFVzZWQgZm9yIElOU0VSVCBhbmQgVVBEQVRFIHN0YXRlbWVudHMsIGEgbGlzdCBvZgogICAgICAgICAgICBjb2x1bW4gbmFtZXMgd2hpY2ggc2hvdWxkIGJlIHByZXNlbnQgaW4gdGhlIFZBTFVFUyBjbGF1c2Ugb2YgdGhlCiAgICAgICAgICAgIGNvbXBpbGVkIHN0YXRlbWVudC4gSWYgYGBOb25lYGAsIGFsbCBjb2x1bW5zIGZyb20gdGhlIHRhcmdldCB0YWJsZQogICAgICAgICAgICBvYmplY3QgYXJlIHJlbmRlcmVkLgoKICAgICAgICA6cGFyYW0gZGlhbGVjdDogQSBgYERpYWxlY3RgYCBpbnN0YW5jZSBmcm9tIHdoaWNoIGEgYGBDb21waWxlZGBgCiAgICAgICAgICAgIHdpbGwgYmUgYWNxdWlyZWQuIFRoaXMgYXJndW1lbnQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBgYmluZGAKICAgICAgICAgICAgYXJndW1lbnQgYXMgd2VsbCBhcyB0aGlzIDpjbGFzczpgLkNsYXVzZUVsZW1lbnRgJ3MgYm91bmQgZW5naW5lLAogICAgICAgICAgICBpZiBhbnkuCgogICAgICAgIDpwYXJhbSBpbmxpbmU6IFVzZWQgZm9yIElOU0VSVCBzdGF0ZW1lbnRzLCBmb3IgYSBkaWFsZWN0IHdoaWNoIGRvZXMKICAgICAgICAgICAgbm90IHN1cHBvcnQgaW5saW5lIHJldHJpZXZhbCBvZiBuZXdseSBnZW5lcmF0ZWQgcHJpbWFyeSBrZXkKICAgICAgICAgICAgY29sdW1ucywgd2lsbCBmb3JjZSB0aGUgZXhwcmVzc2lvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbmV3IHByaW1hcnkKICAgICAgICAgICAga2V5IHZhbHVlIHRvIGJlIHJlbmRlcmVkIGlubGluZSB3aXRoaW4gdGhlIElOU0VSVCBzdGF0ZW1lbnQncwogICAgICAgICAgICBWQUxVRVMgY2xhdXNlLiBUaGlzIHR5cGljYWxseSByZWZlcnMgdG8gU2VxdWVuY2UgZXhlY3V0aW9uIGJ1dCBtYXkKICAgICAgICAgICAgYWxzbyByZWZlciB0byBhbnkgc2VydmVyLXNpZGUgZGVmYXVsdCBnZW5lcmF0aW9uIGZ1bmN0aW9uCiAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIHByaW1hcnkga2V5IGBDb2x1bW5gLgoKICAgICAgICA6cGFyYW0gY29tcGlsZV9rd2FyZ3M6IG9wdGlvbmFsIGRpY3Rpb25hcnkgb2YgYWRkaXRpb25hbCBwYXJhbWV0ZXJzCiAgICAgICAgICAgIHRoYXQgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgY29tcGlsZXIgd2l0aGluIGFsbCAidmlzaXQiCiAgICAgICAgICAgIG1ldGhvZHMuICBUaGlzIGFsbG93cyBhbnkgY3VzdG9tIGZsYWcgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8KICAgICAgICAgICAgYSBjdXN0b20gY29tcGlsYXRpb24gY29uc3RydWN0LCBmb3IgZXhhbXBsZS4gIEl0IGlzIGFsc28gdXNlZAogICAgICAgICAgICBmb3IgdGhlIGNhc2Ugb2YgcGFzc2luZyB0aGUgYGBsaXRlcmFsX2JpbmRzYGAgZmxhZyB0aHJvdWdoOjoKCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkuc3FsIGltcG9ydCB0YWJsZSwgY29sdW1uLCBzZWxlY3QKCiAgICAgICAgICAgICAgICB0ID0gdGFibGUoJ3QnLCBjb2x1bW4oJ3gnKSkKCiAgICAgICAgICAgICAgICBzID0gc2VsZWN0KFt0XSkud2hlcmUodC5jLnggPT0gNSkKCiAgICAgICAgICAgICAgICBwcmludCBzLmNvbXBpbGUoY29tcGlsZV9rd2FyZ3M9eyJsaXRlcmFsX2JpbmRzIjogVHJ1ZX0pCgogICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuMAoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpyZWY6YGZhcV9zcWxfZXhwcmVzc2lvbl9zdHJpbmdgCgogICAgICAgIHJQAAAAKQTaB2RpYWxlY3RyUAAAAFoRU3RyQ29tcGlsZURpYWxlY3TaCV9jb21waWxlcikFcjgAAADaB2RlZmF1bHRyUAAAAHJcAAAAchUAAAByFgAAAHIWAAAAchcAAADaB2NvbXBpbGWPAQAAcxAAAAAANwQBBAEIAQYBCAEIAggBehVDbGF1c2VFbGVtZW50LmNvbXBpbGVjAgAAAAAAAAADAAAAAwAAAEsAAABzEAAAAHwBagB8AXwAZgJ8Ao4BUwApAXpOUmV0dXJuIGEgY29tcGlsZXIgYXBwcm9wcmlhdGUgZm9yIHRoaXMgQ2xhdXNlRWxlbWVudCwgZ2l2ZW4gYQogICAgICAgIERpYWxlY3QuKQFaEnN0YXRlbWVudF9jb21waWxlcikDcjgAAAByXAAAAHIVAAAAchYAAAByFgAAAHIXAAAAcl0AAADQAQAAcwIAAAAABHoXQ2xhdXNlRWxlbWVudC5fY29tcGlsZXJjAQAAAAAAAAABAAAABAAAAEMAAABzKgAAAHQAagFyEnQCfACgA6EAgwFTAHQEfACgA6EAgwGgBWQBZAKhAlMAZABTACkDTtoFYXNjaWnaEGJhY2tzbGFzaHJlcGxhY2UpBnISAAAA2gRweTNr2gNzdHJyXwAAANoHdW5pY29kZdoGZW5jb2RlKQFyOAAAAHIWAAAAchYAAAByFwAAANoHX19zdHJfX9YBAABzCAAAAAABBgEMAgwBehVDbGF1c2VFbGVtZW50Ll9fc3RyX196AzAuOXrRVGhlIDptZXRoOmAuQ2xhdXNlRWxlbWVudC5fX2FuZF9fYCBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuICAgQ29uanVuY3Rpb25zIHNob3VsZCBvbmx5IGJlIHVzZWQgZnJvbSBhIDpjbGFzczpgLkNvbHVtbkVsZW1lbnRgIHN1YmNsYXNzLCBlLmcuIDptZXRoOmAuQ29sdW1uRWxlbWVudC5fX2FuZF9fYC5jAgAAAAAAAAACAAAAAwAAAEMAAABzCgAAAHQAfAB8AYMCUwApAXoqJ2FuZCcgYXQgdGhlIENsYXVzZUVsZW1lbnQgbGV2ZWwuCiAgICAgICAgKQHaBGFuZF8pAnI4AAAAclYAAAByFgAAAHIWAAAAchcAAADaB19fYW5kX1/eAQAAcwIAAAAACnoVQ2xhdXNlRWxlbWVudC5fX2FuZF9fes9UaGUgOm1ldGg6YC5DbGF1c2VFbGVtZW50Ll9fb3JfX2AgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiAgIENvbmp1bmN0aW9ucyBzaG91bGQg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WiRkK2QshABaJWUSahNkLWQuhACDAVomhwAEAFonUwApM3I1AAAAYVsPAABSZXByZXNlbnQgYSBjb2x1bW4tb3JpZW50ZWQgU1FMIGV4cHJlc3Npb24gc3VpdGFibGUgZm9yIHVzYWdlIGluIHRoZQogICAgImNvbHVtbnMiIGNsYXVzZSwgV0hFUkUgY2xhdXNlIGV0Yy4gb2YgYSBzdGF0ZW1lbnQuCgogICAgV2hpbGUgdGhlIG1vc3QgZmFtaWxpYXIga2luZCBvZiA6Y2xhc3M6YC5Db2x1bW5FbGVtZW50YCBpcyB0aGUKICAgIDpjbGFzczpgLkNvbHVtbmAgb2JqZWN0LCA6Y2xhc3M6YC5Db2x1bW5FbGVtZW50YCBzZXJ2ZXMgYXMgdGhlIGJhc2lzCiAgICBmb3IgYW55IHVuaXQgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiBhIFNRTCBleHByZXNzaW9uLCBpbmNsdWRpbmcKICAgIHRoZSBleHByZXNzaW9ucyB0aGVtc2VsdmVzLCBTUUwgZnVuY3Rpb25zLCBib3VuZCBwYXJhbWV0ZXJzLAogICAgbGl0ZXJhbCBleHByZXNzaW9ucywga2V5d29yZHMgc3VjaCBhcyBgYE5VTExgYCwgZXRjLgogICAgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAgaXMgdGhlIHVsdGltYXRlIGJhc2UgY2xhc3MgZm9yIGFsbCBzdWNoIGVsZW1lbnRzLgoKICAgIEEgd2lkZSB2YXJpZXR5IG9mIFNRTEFsY2hlbXkgQ29yZSBmdW5jdGlvbnMgd29yayBhdCB0aGUgU1FMIGV4cHJlc3Npb24KICAgIGxldmVsLCBhbmQgYXJlIGludGVuZGVkIHRvIGFjY2VwdCBpbnN0YW5jZXMgb2YgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAgYXMKICAgIGFyZ3VtZW50cy4gIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHR5cGljYWxseSBkb2N1bWVudCB0aGF0IHRoZXkgYWNjZXB0IGEKICAgICJTUUwgZXhwcmVzc2lvbiIgYXMgYW4gYXJndW1lbnQuICBXaGF0IHRoaXMgbWVhbnMgaW4gdGVybXMgb2YgU1FMQWxjaGVteQogICAgdXN1YWxseSByZWZlcnMgdG8gYW4gaW5wdXQgd2hpY2ggaXMgZWl0aGVyIGFscmVhZHkgaW4gdGhlIGZvcm0gb2YgYQogICAgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAgb2JqZWN0LCBvciBhIHZhbHVlIHdoaWNoIGNhbiBiZSAqKmNvZXJjZWQqKiBpbnRvCiAgICBvbmUuICBUaGUgY29lcmNpb24gcnVsZXMgZm9sbG93ZWQgYnkgbW9zdCwgYnV0IG5vdCBhbGwsIFNRTEFsY2hlbXkgQ29yZQogICAgZnVuY3Rpb25zIHdpdGggcmVnYXJkcyB0byBTUUwgZXhwcmVzc2lvbnMgYXJlIGFzIGZvbGxvd3M6CgogICAgICAgICogYSBsaXRlcmFsIFB5dGhvbiB2YWx1ZSwgc3VjaCBhcyBhIHN0cmluZywgaW50ZWdlciBvciBmbG9hdGluZwogICAgICAgICAgcG9pbnQgdmFsdWUsIGJvb2xlYW4sIGRhdGV0aW1lLCBgYERlY2ltYWxgYCBvYmplY3QsIG9yIHZpcnR1YWxseQogICAgICAgICAgYW55IG90aGVyIFB5dGhvbiBvYmplY3QsIHdpbGwgYmUgY29lcmNlZCBpbnRvIGEgImxpdGVyYWwgYm91bmQKICAgICAgICAgIHZhbHVlIi4gIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgYSA6ZnVuYzpgLmJpbmRwYXJhbWAgd2lsbCBiZQogICAgICAgICAgcHJvZHVjZWQgZmVhdHVyaW5nIHRoZSBnaXZlbiB2YWx1ZSBlbWJlZGRlZCBpbnRvIHRoZSBjb25zdHJ1Y3Q7IHRoZQogICAgICAgICAgcmVzdWx0aW5nIDpjbGFzczpgLkJpbmRQYXJhbWV0ZXJgIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZgogICAgICAgICAgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAuICBUaGUgUHl0aG9uIHZhbHVlIHdpbGwgdWx0aW1hdGVseSBiZSBzZW50CiAgICAgICAgICB0byB0aGUgREJBUEkgYXQgZXhlY3V0aW9uIHRpbWUgYXMgYSBwYXJhbWV0ZXJpemVkIGFyZ3VtZW50IHRvIHRoZQogICAgICAgICAgYGBleGVjdXRlKClgYCBvciBgYGV4ZWN1dGVtYW55KClgYCBtZXRob2RzLCBhZnRlciBTUUxBbGNoZW15CiAgICAgICAgICB0eXBlLXNwZWNpZmljIGNvbnZlcnRlcnMgKGUuZy4gdGhvc2UgcHJvdmlkZWQgYnkgYW55IGFzc29jaWF0ZWQKICAgICAgICAgIDpjbGFzczpgLlR5cGVFbmdpbmVgIG9iamVjdHMpIGFyZSBhcHBsaWVkIHRvIHRoZSB2YWx1ZS4KCiAgICAgICAgKiBhbnkgc3BlY2lhbCBvYmplY3QgdmFsdWUsIHR5cGljYWxseSBPUk0tbGV2ZWwgY29uc3RydWN0cywgd2hpY2gKICAgICAgICAgIGZlYXR1cmUgYSBtZXRob2QgY2FsbGVkIGBgX19jbGF1c2VfZWxlbWVudF9fKClgYC4gIFRoZSBDb3JlCiAgICAgICAgICBleHByZXNzaW9uIHN5c3RlbSBsb29rcyBmb3IgdGhpcyBtZXRob2Qgd2hlbiBhbiBvYmplY3Qgb2Ygb3RoZXJ3aXNlCiAgICAgICAgICB1bmtub3duIHR5cGUgaXMgcGFzc2VkIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBsb29raW5nIHRvIGNvZXJjZSB0aGUKICAgICAgICAgIGFyZ3VtZW50IGludG8gYSA6Y2xhc3M6YC5Db2x1bW5FbGVtZW50YCBleHByZXNzaW9uLiAgVGhlCiAgICAgICAgICBgYF9fY2xhdXNlX2VsZW1lbnRfXygpYGAgbWV0aG9kLCBpZiBwcmVzZW50LCBzaG91bGQgcmV0dXJuIGEKICAgICAgICAgIDpjbGFzczpgLkNvbHVtbkVsZW1lbnRgIGluc3RhbmNlLiAgVGhlIHByaW1hcnkgdXNlIG9mCiAgICAgICAgICBgYF9fY2xhdXNlX2VsZW1lbnRfXygpYGAgd2l0aGluIFNRTEFsY2hlbXkgaXMgdGhhdCBvZiBjbGFzcy1ib3VuZAogICAgICAgICAgYXR0cmlidXRlcyBvbiBPUk0tbWFwcGVkIGNsYXNzZXM7IGEgYGBVc2VyYGAgY2xhc3Mgd2hpY2ggY29udGFpbnMgYQogICAgICAgICAgbWFwcGVkIGF0dHJpYnV0ZSBuYW1lZCBgYC5uYW1lYGAgd2lsbCBoYXZlIGEgbWV0aG9kCiAgICAgICAgICBgYFVzZXIubmFtZS5fX2NsYXVzZV9lbGVtZW50X18oKWBgIHdoaWNoIHdoZW4gaW52b2tlZCByZXR1cm5zIHRoZQogICAgICAgICAgOmNsYXNzOmAuQ29sdW1uYCBjYWxsZWQgYGBuYW1lYGAgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXBwZWQgdGFibGUuCgogICAgICAgICogVGhlIFB5dGhvbiBgYE5vbmVgYCB2YWx1ZSBpcyB0eXBpY2FsbHkgaW50ZXJwcmV0ZWQgYXMgYGBOVUxMYGAsCiAgICAgICAgICB3aGljaCBpbiBTUUxBbGNoZW15IENvcmUgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgOmZ1bmM6YC5udWxsYC4KCiAgICBBIDpjbGFzczpgLkNvbHVtbkVsZW1lbnRgIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGdlbmVyYXRlIG5ldwogICAgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAKICAgIG9iamVjdHMgdXNpbmcgUHl0aG9uIGV4cHJlc3Npb25zLiAgVGhpcyBtZWFucyB0aGF0IFB5dGhvbiBvcGVyYXRvcnMKICAgIHN1Y2ggYXMgYGA9PWBgLCBgYCE9YGAgYW5kIGBgPGBgIGFyZSBvdmVybG9hZGVkIHRvIG1pbWljIFNRTCBvcGVyYXRpb25zLAogICAgYW5kIGFsbG93IHRoZSBpbnN0YW50aWF0aW9uIG9mIGZ1cnRoZXIgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAgaW5zdGFuY2VzCiAgICB3aGljaCBhcmUgY29tcG9zZWQgZnJvbSBvdGhlciwgbW9yZSBmdW5kYW1lbnRhbCA6Y2xhc3M6YC5Db2x1bW5FbGVtZW50YAogICAgb2JqZWN0cy4gIEZvciBleGFtcGxlLCB0d28gOmNsYXNzOmAuQ29sdW1uQ2xhdXNlYCBvYmplY3RzIGNhbiBiZSBhZGRlZAogICAgdG9nZXRoZXIgd2l0aCB0aGUgYWRkaXRpb24gb3BlcmF0b3IgYGArYGAgdG8gcHJvZHVjZQogICAgYSA6Y2xhc3M6YC5CaW5hcnlFeHByZXNzaW9uYC4KICAgIEJvdGggOmNsYXNzOmAuQ29sdW1uQ2xhdXNlYCBhbmQgOmNs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AVMAKQVhBAIAAHByb3ZpZGVzIGEgY29uc3RhbnQgJ2Fub255bW91cyBsYWJlbCcgZm9yIHRoaXMgQ29sdW1uRWxlbWVudC4KCiAgICAgICAgVGhpcyBpcyBhIGxhYmVsKCkgZXhwcmVzc2lvbiB3aGljaCB3aWxsIGJlIG5hbWVkIGF0IGNvbXBpbGUgdGltZS4KICAgICAgICBUaGUgc2FtZSBsYWJlbCgpIGlzIHJldHVybmVkIGVhY2ggdGltZSBhbm9uX2xhYmVsIGlzIGNhbGxlZCBzbwogICAgICAgIHRoYXQgZXhwcmVzc2lvbnMgY2FuIHJlZmVyZW5jZSBhbm9uX2xhYmVsIG11bHRpcGxlIHRpbWVzLCBwcm9kdWNpbmcKICAgICAgICB0aGUgc2FtZSBsYWJlbCBuYW1lIGF0IGNvbXBpbGUgdGltZS4KCiAgICAgICAgdGhlIGNvbXBpbGVyIHVzZXMgdGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IGF0IGNvbXBpbGUgdGltZQogICAgICAgIGZvciBleHByZXNzaW9ucyB0aGF0IGFyZSBrbm93biB0byBiZSAndW5uYW1lZCcgbGlrZSBiaW5hcnkKICAgICAgICBleHByZXNzaW9ucyBhbmQgZnVuY3Rpb24gY2FsbHMuCgogICAgICAgIE56CiUlKCVkICVzKXNypQAAANoEYW5vbikEcjcAAADaEF9hbm9ueW1vdXNfbGFiZWxyeQAAAHKSAAAAKQFyOAAAAHIWAAAAchYAAAByFwAAAHKoAAAAbwMAAHMIAAAAAA4MAQoCAgF6GENvbHVtbkVsZW1lbnQuYW5vbl9sYWJlbCkBTikBTikCTkYpAkZOKShyeAAAAHJ3AAAAcnoAAAByewAAAHJ8AAAA2gtwcmltYXJ5X2tledoMZm9yZWlnbl9rZXlzcpwAAADaBl9sYWJlbHIpAAAA2gpfa2V5X2xhYmVs2h9fcmVuZGVyX2xhYmVsX2luX2NvbHVtbnNfY2xhdXNl2g5fcmVzb2x2ZV9sYWJlbNoUX2FsbG93X2xhYmVsX3Jlc29sdmXaFl9pc19pbXBsaWNpdGx5X2Jvb2xlYW5aCl9hbHRfbmFtZXNyWwAAAHJtAAAAchIAAABygQAAAHIeAAAAcjYAAABykwAAAHKVAAAAcpYAAABymgAAAHKAAAAAch8AAABymwAAAHKgAAAAcp8AAAByoQAAAHKkAAAAcqYAAABysQAAAHJXAAAAcrUAAABytwAAAHKoAAAA2g1fX2NsYXNzY2VsbF9fchYAAAByFgAAACkBci8AAAByFwAAAHI1AAAAFQIAAHNCAAAACEgEAgQBBAEEAQQCBA8ECgQOBAoEDQQEBAIEAgoLDAYOBA4MCAkIAwgDCgoMCQwEDgQOBwgMCAYICwoeChwIEggKcjUAAABjAAAAAAAAAAAAAAAACgAAAEAAAABzfgAAAGUAWgFkAFoCZAFaA2QCWgRkA1oFZARaBmUHZAVkA2UHZAVkBWQDZANkBWQFZgpkBmQHhAFaCGQIZAmEAFoJZApkC4QAWgplC2QMZA2EAIMBWgxkDmQPhABaDWQQZBGEAFoOZBJkE4QAWg9kFGQVhABaEGQWZBeEAFoRZAVTACkYciUAAABhsAEAAFJlcHJlc2VudCBhICJib3VuZCBleHByZXNzaW9uIi4KCiAgICA6Y2xhc3M6YC5CaW5kUGFyYW1ldGVyYCBpcyBpbnZva2VkIGV4cGxpY2l0bHkgdXNpbmcgdGhlCiAgICA6ZnVuYzpgLmJpbmRwYXJhbWAgZnVuY3Rpb24sIGFzIGluOjoKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBiaW5kcGFyYW0KCiAgICAgICAgc3RtdCA9IHNlbGVjdChbdXNlcnNfdGFibGVdKS5cCiAgICAgICAgICAgICAgICAgICAgd2hlcmUodXNlcnNfdGFibGUuYy5uYW1lID09IGJpbmRwYXJhbSgndXNlcm5hbWUnKSkKCiAgICBEZXRhaWxlZCBkaXNjdXNzaW9uIG9mIGhvdyA6Y2xhc3M6YC5CaW5kUGFyYW1ldGVyYCBpcyB1c2VkIGlzCiAgICBhdCA6ZnVuYzpgLmJpbmRwYXJhbWAuCgogICAgLi4gc2VlYWxzbzo6CgogICAgICAgIDpmdW5jOmAuYmluZHBhcmFtYAoKICAgIHJSAAAARnIWAAAATmMMAAAAAAAAAAwAAAAEAAAAQwAAAHMEAQAAdAB8AXQBgwJyFnwBagJ9A3wBagN9AXwFdARrCHIufAJ0BGsIbyx8B2QBawh9BXwCdARrCHI6ZAF9AnwGZAFrCXJMdAV8AXwGgwJ9AXwEcmx0BmQCdAd8AIMBfAFwYGQDZgIWAIMBfABfA24WfAFwfnQGZAR0B3wAgwEWAIMBfABfA3wAagN8AF8IfAFwkGQDfABfCXwEfABfCnwCfABfC3wHfABfDHwJfABfDXwFfABfDnwIfABfD3wDZAFrCHLmfAtkAWsJcth8C6AQfAp8AqECfABfAm4MdBGgEnwCoQF8AF8Cbhp0AHwDdAKDAnL6fAODAHwAXwJuBnwDfABfAmQBUwApBWE8JAAAUHJvZHVjZSBhICJib3VuZCBleHByZXNzaW9uIi4KCiAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YC5CaW5kUGFyYW1ldGVyYDsgdGhpcwogICAgICAgIGlzIGEgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAgc3ViY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyBhIHNvLWNhbGxlZAogICAgICAgICJwbGFjZWhvbGRlciIgdmFsdWUgaW4gYSBTUUwgZXhwcmVzc2lvbiwgdGhlIHZhbHVlIG9mIHdoaWNoIGlzCiAgICAgICAgc3VwcGxpZWQgYXQgdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBzdGF0ZW1lbnQgaW4gZXhlY3V0ZWQgYWdhaW5zdCBhCiAgICAgICAgZGF0YWJhc2UgY29ubmVjdGlvbi4KCiAgICAgICAgSW4gU1FMQWxjaGVteSwgdGhlIDpmdW5jOmAuYmluZHBhcmFtYCBjb25zdHJ1Y3QgaGFzCiAgICAgICAgdGhlIGFiaWxpdHkgdG8gY2FycnkgYWxvbmcgdGhlIGFjdHVhbCB2YWx1ZSB0aGF0IHdpbGwgYmUgdWx0aW1hdGVseQogICAgICAgIHVzZWQgYXQgZXhwcmVzc2lvbiB0aW1lLiAgSW4gdGhpcyB3YXksIGl0IHNlcnZlcyBub3QganVzdCBhcwogICAgICAgIGEgInBsYWNlaG9sZGVyIiBmb3IgZXZlbnR1YWwgcG9wdWxhdGlvbiwgYnV0IGFsc28gYXMgYSBtZWFucyBvZgogICAgICAgIHJlcHJlc2VudGluZyBzby1jYWxsZWQgInVuc2FmZSIgdmFsdWVzIHdoaWNoIHNob3VsZCBub3QgYmUgcmVuZGVyZWQKICAgICAgICBkaXJlY3RseSBpbiBhIFNRTCBzdGF0ZW1lbnQsIGJ1dCByYXRoZXIgc2hvdWxkIGJlIHBhc3NlZCBhbG9uZwogICAgICAgIHRvIHRoZSA6dGVybTpgREJBUElgIGFzIHZhbHVlcyB3aGljaCBuZWVkIHRvIGJlIGNvcnJlY3RseSBlc2NhcGVkCiAgICAgICAgYW5kIHBvdGVudGlhbGx5IGhhbmRsZWQgZm9yIHR5cGUtc2FmZXR5LgoKICAgICAgICBXaGVuIHVzaW5nIDpmdW5jOmAuYmluZHBhcmFtYCBleHBsaWNpdGx5LCB0aGUgdXNlIGNhc2UgaXMgdHlwaWNhbGx5CiAgICAgICAgb25lIG9mIHRyYWRpdGlvbmFsIGRlZmVybWVudCBvZiBwYXJhbWV0ZXJzOyB0aGUgOmZ1bmM6YC5iaW5kcGFyYW1gCiAgICAgICAgY29uc3RydWN0IGFjY2VwdHMgYSBuYW1lIHdoaWNoIGNhbiB0aGVuIGJlIHJlZmVycmVkIHRvIGF0IGV4ZWN1dGlvbgogICAgICAgIHRpbWU6OgoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBiaW5kcGFyYW0KCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW3VzZXJzX3RhYmxlXSkuXAogICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSh1c2Vyc190YWJsZS5jLm5hbWUgPT0gYmluZHBhcmFtKCd1c2VybmFtZScpKQoKICAgICAgICBUaGUgYWJvdmUgc3RhdGVtZW50LCB3aGVuIHJlbmRlcmVkLCB3aWxsIHByb2R1Y2UgU1FMIHNpbWlsYXIgdG86OgoKICAgICAgICAgICAgU0VMRUNUIGlkLCBuYW1lIEZST00gdXNlciBXSEVSRSBuYW1lID0gOnVzZXJuYW1lCgogICAgICAgIEluIG9yZGVyIHRvIHBvcHVsYXRlIHRoZSB2YWx1ZSBvZiBgYDp1c2VybmFtZWBgIGFib3ZlLCB0aGUgdmFsdWUKICAgICAgICB3b3VsZCB0eXBpY2FsbHkgYmUgYXBwbGllZCBhdCBleGVjdXRpb24gdGltZSB0byBhIG1ldGhvZAogICAgICAgIGxpa2UgOm1ldGg6YC5Db25uZWN0aW9uLmV4ZWN1dGVgOjoKCiAgICAgICAgICAgIHJlc3VsdCA9IGNvbm5lY3Rpb24uZXhlY3V0ZShzdG10LCB1c2VybmFtZT0nd2VuZHknKQoKICAgICAgICBFeHBsaWNpdCB1c2Ugb2YgOmZ1bmM6YC5iaW5kcGFyYW1gIGlzIGFsc28gY29tbW9uIHdoZW4gcHJvZHVjaW5nCiAgICAgICAgVVBEQVRFIG9yIERFTEVURSBzdGF0ZW1lbnRzIHRoYXQgYXJlIHRvIGJlIGludm9rZWQgbXVsdGlwbGUgdGltZXMsCiAgICAgICAgd2hlcmUgdGhlIFdIRVJFIGNyaXRlcmlvbiBvZiB0aGUgc3RhdGVtZW50IGlzIHRvIGNoYW5nZSBvbiBlYWNoCiAgICAgICAgaW52b2NhdGlvbiwgc3VjaCBhczo6CgogICAgICAgICAgICBzdG10ID0gKHVzZXJzX3RhYmxlLnVwZGF0ZSgpLgogICAgICAgICAgICAgICAgICAgIHdoZXJlKHVzZXJfdGFibGUuYy5uYW1lID09IGJpbmRwYXJhbSgndXNlcm5hbWUnKSkuCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzKGZ1bGxuYW1lPWJpbmRwYXJhbSgnZnVsbG5hbWUnKSkKICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBjb25uZWN0aW9uLmV4ZWN1dGUoCiAgICAgICAgICAgICAgICBzdG10LCBbeyJ1c2VybmFtZSI6ICJ3ZW5keSIsICJmdWxsbmFtZSI6ICJXZW5keSBTbWl0aCJ9LAogICAgICAgICAgICAgICAgICAgICAgIHsidXNlcm5hbWUiOiAiamFjayIsICJmdWxsbmFtZSI6ICJKYWNrIEpvbmVzIn0sCiAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICApCgogICAgICAgIFNRTEFsY2hlbXkncyBDb3JlIGV4cHJlc3Npb24gc3lzdGVtIG1ha2VzIHdpZGUgdXNlIG9mCiAgICAgICAgOmZ1bmM6YC5iaW5kcGFyYW1gIGluIGFuIGltcGxpY2l0IHNlbnNlLiAgIEl0IGlzIHR5cGljYWwgdGhhdCBQeXRob24KICAgICAgICBsaXRlcmFsIHZhbHVlcyBwYXNzZWQgdG8gdmlydHVhbGx5IGFsbCBTUUwgZXhwcmVzc2lvbiBmdW5jdGlvbnMgYXJlCiAgICAgICAgY29lcmNlZCBpbnRvIGZpeGVkIDpmdW5jOmAuYmluZHBhcmFtYCBjb25zdHJ1Y3RzLiAgRm9yIGV4YW1wbGUsIGdpdmVuCiAgICAgICAgYSBjb21wYXJpc29uIG9wZXJhdGlvbiBzdWNoIGFzOjoKCiAgICAgICAgICAgIGV4cHIgPSB1c2Vyc190YWJsZS5jLm5hbWUgPT0gJ1dlbmR5JwoKICAgICAgICBUaGUgYWJvdmUgZXhwcmVzc2lvbiB3aWxsIHByb2R1Y2UgYSA6Y2xhc3M6YC5CaW5hcnlFeHByZXNzaW9uYAogICAgICAgIGNvbnN0cnVjdCwgd2hlcmUgdGhlIGxlZnQgc2lkZSBpcyB0aGUgOmNsYXNzOmAuQ29sdW1uYCBvYmplY3QKICAgICAgICByZXByZXNlbnRpbmcgdGhlIGBgbmFtZWBgIGNvbHVtbiwgYW5kIHRoZSByaWdodCBzaWRlIGlzIGEKICAgICAgICA6Y2xhc3M6YC5CaW5kUGFyYW1ldGVyYCByZXByZXNlbnRpbmcgdGhlIGxpdGVyYWwgdmFsdWU6OgoKICAgICAgICAgICAgcHJpbnQocmVwcihleHByLnJpZ2h0KSkKICAgICAgICAgICAgQmluZFBhcmFtZXRlcignJSg0MzI3NzcxMDg4IG5hbWUpcycsICdXZW5keScsIHR5cGVfPVN0cmluZygpKQoKICAgICAgICBUaGUgZXhwcmVzc2lvbiBhYm92ZSB3aWxsIHJlbmRlciBTUUwgc3VjaCBhczo6CgogICAgICAgICAgICB1c2VyLm5hbWUgPSA6bmFtZV8xCgogICAgICAgIFdoZXJlIHRoZSBgYDpuYW1lXzFgYCBwYXJhbWV0ZXIgbmFtZSBpcyBhbiBhbm9ueW1vdXMgbmFtZS4gIFRoZQogICAgICAgIGFjdHVhbCBzdHJpbmcgYGBXZW5keWBgIGlzIG5vdCBpbiB0aGUgcmVuZGVyZWQgc3RyaW5nLCBidXQgaXMgY2FycmllZAogICAgICAgIGFsb25nIHdoZXJlIGl0IGlzIGxhdGVyIHVzZWQgd2l0aGluIHN0YXRlbWVudCBleGVjdXRpb24uICBJZiB3ZQogICAgICAgIGludm9rZSBhIHN0YXRlbWVudCBsaWtlIHRoZSBmb2xsb3dpbmc6OgoKICAgICAgICAgICAgc3RtdCA9IHNlbGVjdChbdXNlcnNfdGFibGVdKS53aGVyZSh1c2Vyc190YWJsZS5jLm5hbWUgPT0gJ1dlbmR5JykKICAgICAgICAgICAgcmVzdWx0ID0gY29ubmVjdGlvbi5leGVjdXRlKHN0bXQpCgogICAgICAgIFdlIHdvdWxkIHNlZSBTUUwgbG9nZ2luZyBvdXRwdXQgYXM6OgoKICAgICAgICAgICAgU0VMRUNUICJ1c2VyIi5pZCwgInVzZXIiLm5hbWUKICAgICAgICAgICAgRlJPTSAidXNlciIKICAgICAgICAgICAgV0hFUkUgInVzZXIiLm5hbWUgPSAlKG5hbWVfMSlzCiAgICAgICAgICAgIHsnbmFtZV8xJzogJ1dlbmR5J30KCiAgICAgICAgQWJvdmUsIHdlIHNlZSB0aGF0IGBgV2VuZHlgYCBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gdGhlIGRhdGFiYXNlLAogICAgICAgIHdoaWxlIHRoZSBwbGFjZWhvbGRlciBgYDpuYW1lXzFgYCBpcyByZW5kZXJlZCBpbiB0aGUgYXBwcm9wcmlhdGUgZm9ybQogICAgICAgIGZvciB0aGUgdGFyZ2V0IGRhdGFiYXNlLCBpbiB0aGlzIGNhc2UgdGhlIFBvc3RncmVTUUwgZGF0YWJhc2UuCgogICAgICAgIFNpbWlsYXJseSwgOmZ1bmM6YC5iaW5kcGFyYW1gIGlzIGludm9rZWQgYXV0b21hdGljYWxseQogICAgICAgIHdoZW4gd29ya2luZyB3aXRoIDp0ZXJtOmBDUlVEYCBzdGF0ZW1lbnRzIGFzIGZhciBhcyB0aGUgIlZBTFVFUyIKICAgICAgICBwb3J0aW9uIGlzIGNvbmNlcm5lZC4gICBUaGUgOmZ1bmM6YC5pbnNlcnRgIGNvbnN0cnVjdCBwcm9kdWNlcyBhbgogICAgICAgIGBgSU5TRVJUYGAgZXhwcmVzc2lvbiB3aGljaCB3aWxsLCBhdCBzdGF0ZW1lbnQgZXhlY3V0aW9uIHRpbWUsCiAgICAgICAgZ2VuZXJhdGUgYm91bmQgcGxhY2Vob2xkZXJzIGJhc2VkIG9uIHRoZSBhcmd1bWVudHMgcGFzc2VkLCBhcyBpbjo6CgogICAgICAgICAgICBzdG10ID0gdXNlcnNfdGFibGUuaW5zZXJ0KCkKICAgICAgICAgICAgcmVzdWx0ID0gY29ubmVjdGlvbi5leGVjdXRlKHN0bXQsIG5hbWU9J1dlbmR5JykKCiAgICAgICAgVGhlIGFib3ZlIHdpbGwgcHJvZHVjZSBTUUwgb3V0cHV0IGFzOjoKCiAgICAgICAgICAgIElOU0VSVCBJTlRPICJ1c2VyIiAobmFtZSkgVkFMVUVTICglKG5hbWUpcykKICAgICAgICAgICAgeyduYW1lJzogJ1dlbmR5J30KCiAgICAgICAgVGhlIDpjbGFzczpgLkluc2VydGAgY29uc3RydWN0LCBhdCBjb21waWxhdGlvbi9leGVjdXRpb24gdGltZSwKICAgICAgICByZW5kZXJlZCBhIHNpbmdsZSA6ZnVuYzpgLmJpbmRwYXJhbWAgbWlycm9yaW5nIHRoZSBjb2x1bW4KICAgICAgICBuYW1lIGBgbmFtZWBgIGFzIGEgcmVzdWx0IG9mIHRoZSBzaW5nbGUgYGBuYW1lYGAgcGFyYW1ldGVyCiAgICAgICAgd2UgcGFzc2VkIHRvIHRoZSA6bWV0aDpgLkNvbm5lY3Rpb24uZXhlY3V0ZWAgbWV0aG9kLgoKICAgICAgICA6cGFyYW0ga2V5OgogICAgICAgICAgdGhlIGtleSAoZS5nLiB0aGUgbmFtZSkgZm9yIHRoaXMgYmluZCBwYXJhbS4KICAgICAgICAgIFdpbGwgYmUgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkCiAgICAgICAgICBTUUwgc3RhdGVtZW50IGZvciBkaWFsZWN0cyB0aGF0IHVzZSBuYW1lZCBwYXJhbWV0ZXJzLiAgVGhpcwogICAgICAgICAgdmFsdWUgbWF5IGJlIG1vZGlmaWVkIHdoZW4gcGFydCBvZiBhIGNvbXBpbGF0aW9uIG9wZXJhdGlvbiwKICAgICAgICAgIGlmIG90aGVyIDpjbGFzczpgQmluZFBhcmFtZXRlcmAgb2JqZWN0cyBleGlzdCB3aXRoIHRoZSBzYW1lCiAgICAgICAgICBrZXksIG9yIGlmIGl0cyBsZW5ndGggaXMgdG9vIGxvbmcgYW5kIHRydW5jYXRpb24gaXMKICAgICAgICAgIHJlcXVpcmVkLgoKICAgICAgICA6cGFyYW0gdmFsdWU6CiAgICAgICAgICBJbml0aWFsIHZhbHVlIGZvciB0aGlzIGJpbmQgcGFyYW0uICBXaWxsIGJlIHVzZWQgYXQgc3RhdGVtZW50CiAgICAgICAgICBleGVjdXRpb24gdGltZSBhcyB0aGUgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUKICAgICAgICAgIERCQVBJLCBpZiBubyBvdGhlciB2YWx1ZSBpcyBpbmRpY2F0ZWQgdG8gdGhlIHN0YXRlbWVudCBleGVjdXRpb24KICAgICAgICAgIG1ldGhvZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBhcmFtZXRlciBuYW1lLiAgRGVmYXVsdHMgdG8gYGBOb25lYGAuCgogICAgICAgIDpwYXJhbSBjYWxsYWJsZVxfOgogICAgICAgICAgQSBjYWxsYWJsZSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBwbGFjZSBvZiAidmFsdWUiLiAgVGhlIGZ1bmN0aW9uCiAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBhdCBzdGF0ZW1lbnQgZXhlY3V0aW9uIHRpbWUgdG8gZGV0ZXJtaW5lIHRoZQogICAgICAgICAgdWx0aW1hdGUgdmFsdWUuICAgVXNlZCBmb3Igc2NlbmFyaW9zIHdoZXJlIHRoZSBhY3R1YWwgYmluZAogICAgICAgICAgdmFsdWUgY2Fubm90IGJlIGRldGVybWluZWQgYXQgdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBjbGF1c2UKICAgICAgICAgIGNvbnN0cnVjdCBpcyBjcmVhdGVkLCBidXQgZW1iZWRkZWQgYmluZCB2YWx1ZXMgYXJlIHN0aWxsIGRlc2lyYWJsZS4KCiAgICAgICAgOnBhcmFtIHR5cGVcXzoKICAgICAgICAgIEEgOmNsYXNzOmAuVHlwZUVuZ2luZWAgY2xhc3Mgb3IgaW5zdGFuY2UgcmVwcmVzZW50aW5nIGFuIG9wdGlvbmFsCiAgICAgICAgICBkYXRhdHlwZSBmb3IgdGhpcyA6ZnVuYzpgLmJpbmRwYXJhbWAuICBJZiBub3QgcGFzc2VkLCBhIHR5cGUKICAgICAgICAgIG1heSBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgZm9yIHRoZSBiaW5kLCBiYXNlZCBvbiB0aGUgZ2l2ZW4KICAgICAgICAgIHZhbHVlOyBmb3IgZXhhbXBsZSwgdHJpdmlhbCBQeXRob24gdHlwZXMgc3VjaCBhcyBgYHN0cmBgLAogICAgICAgICAgYGBpbnRgYCwgYGBib29sYGAKICAgICAgICAgIG1heSByZXN1bHQgaW4gdGhlIDpjbGFzczpgLlN0cmluZ2AsIDpjbGFzczpgLkludGVnZXJgIG9yCiAgICAgICAgICA6Y2xhc3M6YC5Cb29sZWFuYCB0eXBlcyBiZWluZyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkLgoKICAgICAgICAgIFRoZSB0eXBlIG9mIGEgOmZ1bmM6YC5iaW5kcGFyYW1gIGlzIHNpZ25pZmljYW50IGVzcGVjaWFsbHkgaW4gdGhhdAogICAgICAgICAgdGhlIHR5cGUgd2lsbCBhcHBseSBwcmUtcHJvY2Vzc2luZyB0byB0aGUgdmFsdWUgYmVmb3JlIGl0IGlzCiAgICAgICAgICBwYXNzZWQgdG8gdGhlIGRhdGFiYXNlLiAgRm9yIGV4YW1wbGUsIGEgOmZ1bmM6YC5iaW5kcGFyYW1gIHdoaWNoCiAgICAgICAgICByZWZlcnMgdG8gYSBkYXRldGltZSB2YWx1ZSwgYW5kIGlzIHNwZWNpZmllZCBhcyBob2xkaW5nIHRoZQogICAgICAgICAgOmNsYXNzOmAuRGF0ZVRpbWVgIHR5cGUsIG1heSBhcHBseSBjb252ZXJzaW9uIG5lZWRlZCB0byB0aGUKICAgICAgICAgIHZhbHVlIChzdWNoIGFzIHN0cmluZ2lmaWNhdGlvbiBvbiBTUUxpdGUpIGJlZm9yZSBwYXNzaW5nIHRoZSB2YWx1ZQogICAgICAgICAgdG8gdGhlIGRhdGFiYXNlLgoKICAgICAgICA6cGFyYW0gdW5pcXVlOgogICAgICAgICAgaWYgVHJ1ZSwgdGhlIGtleSBuYW1lIG9mIHRoaXMgOmNsYXNzOmAuQmluZFBhcmFtZXRlcmAgd2lsbCBiZQogICAgICAgICAgbW9kaWZpZWQgaWYgYW5vdGhlciA6Y2xhc3M6YC5CaW5kUGFyYW1ldGVyYCBvZiB0aGUgc2FtZSBuYW1lCiAgICAgICAgICBhbHJlYWR5IGhhcyBiZWVuIGxvY2F0ZWQgd2l0aGluIHRoZSBjb250YWluaW5nCiAgICAgICAgICBleHByZXNzaW9uLiAgVGhpcyBmbGFnIGlzIHVzZWQgZ2VuZXJhbGx5IGJ5IHRoZSBpbnRlcm5hbHMKICAgICAgICAgIHdoZW4gcHJvZHVjaW5nIHNvLWNhbGxlZCAiYW5vbnltb3VzIiBib3VuZCBleHByZXNzaW9ucywgaXQKICAgICAgICAgIGlzbid0IGdlbmVyYWxseSBhcHBsaWNhYmxlIHRvIGV4cGxpY2l0bHktbmFtZWQgOmZ1bmM6YC5iaW5kcGFyYW1gCiAgICAgICAgICBjb25zdHJ1Y3RzLgoKICAgICAgICA6cGFyYW0gcmVxdWlyZWQ6CiAgICAgICAgICBJZiBgYFRydWVgYCwgYSB2YWx1ZSBpcyByZXF1aXJlZCBhdCBleGVjdXRpb24gdGltZS4gIElmIG5vdCBwYXNzZWQsCiAgICAgICAgICBpdCBkZWZhdWx0cyB0byBgYFRydWVgYCBpZiBuZWl0aGVyIDpwYXJhbXJlZjpgLmJpbmRwYXJhbS52YWx1ZWAKICAgICAgICAgIG9yIDpwYXJhbXJlZjpgLmJpbmRwYXJhbS5jYWxsYWJsZWAgd2VyZSBwYXNzZWQuICBJZiBlaXRoZXIgb2YgdGhlc2UKICAgICAgICAgIHBhcmFtZXRlcnMgYXJlIHByZXNlbnQsIHRoZW4gOnBhcmFtcmVmOmAuYmluZHBhcmFtLnJlcXVpcmVkYAogICAgICAgICAgZGVmYXVsdHMgdG8gYGBGYWxzZWBgLgoKICAgICAgICA6cGFyYW0gcXVvdGU6CiAgICAgICAgICBUcnVlIGlmIHRoaXMgcGFyYW1ldGVyIG5hbWUgcmVxdWlyZXMgcXVvdGluZyBhbmQgaXMgbm90CiAgICAgICAgICBjdXJyZW50bHkga25vd24gYXMgYSBTUUxBbGNoZW15IHJlc2VydmVkIHdvcmQ7IHRoaXMgY3VycmVudGx5CiAgICAgICAgICBvbmx5IGFwcGxpZXMgdG8gdGhlIE9yYWNsZSBiYWNrZW5kLCB3aGVyZSBib3VuZCBuYW1lcyBtdXN0CiAgICAgICAgICBzb21ldGltZXMgYmUgcXVvdGVkLgoKICAgICAgICA6cGFyYW0gaXNvdXRwYXJhbToKICAgICAgICAgIGlmIFRydWUsIHRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSBhIHN0b3JlZCBwcm9jZWR1cmUKICAgICAgICAgICJPVVQiIHBhcmFtZXRlci4gIFRoaXMgYXBwbGllcyB0byBiYWNrZW5kcyBzdWNoIGFzIE9yYWNsZSB3aGljaAogICAgICAgICAgc3VwcG9ydCBPVVQgcGFyYW1ldGVycy4KCiAgICAgICAgOnBhcmFtIGV4cGFuZGluZzoKICAgICAgICAgIGlmIFRydWUsIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgdHJlYXRlZCBhcyBhbiAiZXhwYW5kaW5nIiBwYXJhbWV0ZXIKICAgICAgICAgIGF0IGV4ZWN1dGlvbiB0aW1lOyB0aGUgcGFyYW1ldGVyIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIGEgc2VxdWVuY2UsCiAgICAgICAgICByYXRoZXIgdGhhbiBhIHNjYWxhciB2YWx1ZSwgYW5kIHRoZSBzdHJpbmcgU1FMIHN0YXRlbWVudCB3aWxsCiAgICAgICAgICBiZSB0cmFuc2Zvcm1lZCBvbiBhIHBlci1leGVjdXRpb24gYmFzaXMgdG8gYWNjb21tb2RhdGUgdGhlIHNlcXVlbmNlCiAgICAgICAgICB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIHBhcmFtZXRlciBzbG90cyBwYXNzZWQgdG8gdGhlIERCQVBJLgogICAgICAgICAgVGhpcyBpcyB0byBhbGxvdyBzdGF0ZW1lbnQgY2FjaGluZyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKICAgICAgICAgIGFuIElOIGNsYXVzZS4KCiAgICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmAuQ29sdW1uT3BlcmF0b3Jz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cmVsZWFzZS4gIFBsZWFzZSByZWZlciB0byB0aGUgOm1ldGg6YC5UZXh0Q2xhdXNlLmNvbHVtbnNgIG1ldGhvZC4pA3LWAAAA2gpiaW5kcGFyYW1z2gd0eXBlbWFwct4AAAB6DTpmdW5jOmAudGV4dGB6FjpwYXJhbXJlZjpgLnRleHQudGV4dGBjBgAAAAAAAAAHAAAABAAAAEMAAABzQgAAAHQAfAF8AmQBjQJ9BnwDchp8BmoBfAOOAH0GfARyKnwGagJmAHwEjgF9BnwFZAJrCXI+fAZqA3wFZAONAX0GfAZTACkEYUQRAABDb25zdHJ1Y3QgYSBuZXcgOmNsYXNzOmAuVGV4dENsYXVzZWAgY2xhdXNlLCByZXByZXNlbnRpbmcKICAgICAgICBhIHRleHR1YWwgU1FMIHN0cmluZyBkaXJlY3RseS4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IHRleHQKCiAgICAgICAgICAgIHQgPSB0ZXh0KCJTRUxFQ1QgKiBGUk9NIHVzZXJzIikKICAgICAgICAgICAgcmVzdWx0ID0gY29ubmVjdGlvbi5leGVjdXRlKHQpCgogICAgICAgIFRoZSBhZHZhbnRhZ2VzIDpmdW5jOmAudGV4dGAgcHJvdmlkZXMgb3ZlciBhIHBsYWluIHN0cmluZyBhcmUKICAgICAgICBiYWNrZW5kLW5ldXRyYWwgc3VwcG9ydCBmb3IgYmluZCBwYXJhbWV0ZXJzLCBwZXItc3RhdGVtZW50CiAgICAgICAgZXhlY3V0aW9uIG9wdGlvbnMsIGFzIHdlbGwgYXMKICAgICAgICBiaW5kIHBhcmFtZXRlciBhbmQgcmVzdWx0LWNvbHVtbiB0eXBpbmcgYmVoYXZpb3IsIGFsbG93aW5nCiAgICAgICAgU1FMQWxjaGVteSB0eXBlIGNvbnN0cnVjdHMgdG8gcGxheSBhIHJvbGUgd2hlbiBleGVjdXRpbmcKICAgICAgICBhIHN0YXRlbWVudCB0aGF0IGlzIHNwZWNpZmllZCBsaXRlcmFsbHkuICBUaGUgY29uc3RydWN0IGNhbiBhbHNvCiAgICAgICAgYmUgcHJvdmlkZWQgd2l0aCBhIGBgLmNgYCBjb2xsZWN0aW9uIG9mIGNvbHVtbiBlbGVtZW50cywgYWxsb3dpbmcKICAgICAgICBpdCB0byBiZSBlbWJlZGRlZCBpbiBvdGhlciBTUUwgZXhwcmVzc2lvbiBjb25zdHJ1Y3RzIGFzIGEgc3VicXVlcnkuCgogICAgICAgIEJpbmQgcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkIGJ5IG5hbWUsIHVzaW5nIHRoZSBmb3JtYXQgYGA6bmFtZWBgLgogICAgICAgIEUuZy46OgoKICAgICAgICAgICAgdCA9IHRleHQoIlNFTEVDVCAqIEZST00gdXNlcnMgV0hFUkUgaWQ9OnVzZXJfaWQiKQogICAgICAgICAgICByZXN1bHQgPSBjb25uZWN0aW9uLmV4ZWN1dGUodCwgdXNlcl9pZD0xMikKCiAgICAgICAgRm9yIFNRTCBzdGF0ZW1lbnRzIHdoZXJlIGEgY29sb24gaXMgcmVxdWlyZWQgdmVyYmF0aW0sIGFzIHdpdGhpbgogICAgICAgIGFuIGlubGluZSBzdHJpbmcsIHVzZSBhIGJhY2tzbGFzaCB0byBlc2NhcGU6OgoKICAgICAgICAgICAgdCA9IHRleHQoIlNFTEVDVCAqIEZST00gdXNlcnMgV0hFUkUgbmFtZT0nXDp1c2VybmFtZSciKQoKICAgICAgICBUaGUgOmNsYXNzOmAuVGV4dENsYXVzZWAgY29uc3RydWN0IGluY2x1ZGVzIG1ldGhvZHMgd2hpY2ggY2FuCiAgICAgICAgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYm91bmQgcGFyYW1ldGVycyBhcyB3ZWxsIGFzIHRoZSBjb2x1bW4KICAgICAgICB2YWx1ZXMgd2hpY2ggd291bGQgYmUgcmV0dXJuZWQgZnJvbSB0aGUgdGV4dHVhbCBzdGF0ZW1lbnQsIGFzc3VtaW5nCiAgICAgICAgaXQncyBhbiBleGVjdXRhYmxlIFNFTEVDVCB0eXBlIG9mIHN0YXRlbWVudC4gIFRoZQogICAgICAgIDptZXRoOmAuVGV4dENsYXVzZS5iaW5kcGFyYW1zYCBtZXRob2QgaXMgdXNlZCB0byBwcm92aWRlIGJvdW5kCiAgICAgICAgcGFyYW1ldGVyIGRldGFpbCwgYW5kIDptZXRoOmAuVGV4dENsYXVzZS5jb2x1bW5zYCBtZXRob2QgYWxsb3dzCiAgICAgICAgc3BlY2lmaWNhdGlvbiBvZiByZXR1cm4gY29sdW1ucyBpbmNsdWRpbmcgbmFtZXMgYW5kIHR5cGVzOjoKCiAgICAgICAgICAgIHQgPSB0ZXh0KCJTRUxFQ1QgKiBGUk9NIHVzZXJzIFdIRVJFIGlkPTp1c2VyX2lkIikuXAogICAgICAgICAgICAgICAgICAgIGJpbmRwYXJhbXModXNlcl9pZD03KS5cCiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyhpZD1JbnRlZ2VyLCBuYW1lPVN0cmluZykKCiAgICAgICAgICAgIGZvciBpZCwgbmFtZSBpbiBjb25uZWN0aW9uLmV4ZWN1dGUodCk6CiAgICAgICAgICAgICAgICBwcmludChpZCwgbmFtZSkKCiAgICAgICAgVGhlIDpmdW5jOmAudGV4dGAgY29uc3RydWN0IGlzIHVzZWQgaW4gY2FzZXMgd2hlbgogICAgICAgIGEgbGl0ZXJhbCBzdHJpbmcgU1FMIGZyYWdtZW50IGlzIHNwZWNpZmllZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHF1ZXJ5LAogICAgICAgIHN1Y2ggYXMgZm9yIHRoZSBXSEVSRSBjbGF1c2Ugb2YgYSBTRUxFQ1Qgc3RhdGVtZW50OjoKCiAgICAgICAgICAgIHMgPSBzZWxlY3QoW3VzZXJzLmMuaWQsIHVzZXJzLmMubmFtZV0pLndoZXJlKHRleHQoImlkPTp1c2VyX2lkIikpCiAgICAgICAgICAgIHJlc3VsdCA9IGNvbm5lY3Rpb24uZXhlY3V0ZShzLCB1c2VyX2lkPTEyKQoKICAgICAgICA6ZnVuYzpgLnRleHRgIGlzIGFsc28gdXNlZCBmb3IgdGhlIGNvbnN0cnVjdGlvbgogICAgICAgIG9mIGEgZnVsbCwgc3RhbmRhbG9uZSBzdGF0ZW1lbnQgdXNpbmcgcGxhaW4gdGV4dC4KICAgICAgICBBcyBzdWNoLCBTUUxBbGNoZW15IHJlZmVycwogICAgICAgIHRvIGl0IGFzIGFuIDpjbGFzczpgLkV4ZWN1dGFibGVgIG9iamVjdCwgYW5kIGl0IHN1cHBvcnRzCiAgICAgICAgdGhlIDptZXRoOmBFeGVjdXRhYmxlLmV4ZWN1dGlvbl9vcHRpb25zYCBtZXRob2QuICBGb3IgZXhhbXBsZSwKICAgICAgICBhIDpmdW5jOmAudGV4dGAgY29uc3RydWN0IHRoYXQgc2hvdWxkIGJlIHN1YmplY3QgdG8gImF1dG9jb21taXQiCiAgICAgICAgY2FuIGJlIHNldCBleHBsaWNpdGx5IHNvIHVzaW5nIHRoZQogICAgICAgIDpwYXJhbXJlZjpgLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnMuYXV0b2NvbW1pdGAgb3B0aW9uOjoKCiAgICAgICAgICAgIHQgPSB0ZXh0KCJFWEVDIG15X3Byb2NlZHVyYWxfdGhpbmcoKSIpLlwKICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25fb3B0aW9ucyhhdXRvY29tbWl0PVRydWUpCgogICAgICAgIE5vdGUgdGhhdCBTUUxBbGNoZW15J3MgdXN1YWwgImF1dG9jb21taXQiIGJlaGF2aW9yIGFwcGxpZXMgdG8KICAgICAgICA6ZnVuYzpgLnRleHRgIGNvbnN0cnVjdHMgaW1wbGljaXRseSAtIHRoYXQgaXMsIHN0YXRlbWVudHMgd2hpY2ggYmVnaW4KICAgICAgICB3aXRoIGEgcGhyYXNlIHN1Y2ggYXMgYGBJTlNFUlRgYCwgYGBVUERBVEVgYCwgYGBERUxFVEVgYCwKICAgICAgICBvciBhIHZhcmlldHkgb2Ygb3RoZXIgcGhyYXNlcyBzcGVjaWZpYyB0byBjZXJ0YWluIGJhY2tlbmRzLCB3aWxsCiAgICAgICAgYmUgZWxpZ2libGUgZm9yIGF1dG9jb21taXQgaWYgbm8gdHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MuCgogICAgICAgIDpwYXJhbSB0ZXh0OgogICAgICAgICAgdGhlIHRleHQgb2YgdGhlIFNRTCBzdGF0ZW1lbnQgdG8gYmUgY3JlYXRlZC4gIHVzZSBgYDo8cGFyYW0+YGAKICAgICAgICAgIHRvIHNwZWNpZnkgYmluZCBwYXJhbWV0ZXJzOyB0aGV5IHdpbGwgYmUgY29tcGlsZWQgdG8gdGhlaXIKICAgICAgICAgIGVuZ2luZS1zcGVjaWZpYyBmb3JtYXQuCgogICAgICAgIDpwYXJhbSBhdXRvY29tbWl0OiB3aGV0aGVyIG9yIG5vdCB0byBzZXQgdGhlICJhdXRvY29tbWl0IiBleGVjdXRpb24KICAgICAgICAgIG9wdGlvbiBmb3IgdGhpcyA6Y2xhc3M6YC5UZXh0Q2xhdXNlYCBvYmplY3QuCgogICAgICAgIDpwYXJhbSBiaW5kOgogICAgICAgICAgYW4gb3B0aW9uYWwgY29ubmVjdGlvbiBvciBlbmdpbmUgdG8gYmUgdXNlZCBmb3IgdGhpcyB0ZXh0IHF1ZXJ5LgoKICAgICAgICA6cGFyYW0gYmluZHBhcmFtczoKICAgICAgICAgIEEgbGlzdCBvZiA6ZnVuYzpgLmJpbmRwYXJhbWAgaW5zdGFuY2VzIHVzZWQgdG8KICAgICAgICAgIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgcGFyYW1ldGVycyBlbWJlZGRlZCBpbiB0aGUgc3RhdGVtZW50LgoKICAgICAgICAgIEUuZy46OgoKICAgICAgICAgICAgICBzdG10ID0gdGV4dCgiU0VMRUNUICogRlJPTSB0YWJsZSBXSEVSRSBpZD06aWQiLAogICAgICAgICAgICAgICAgICAgICAgICBiaW5kcGFyYW1zPVtiaW5kcGFyYW0oJ2lkJywgdmFsdWU9NSwgdHlwZV89SW50ZWdlcildKQoKICAgICAgICA6cGFyYW0gdHlwZW1hcDoKICAgICAgICAgIEEgZGljdGlvbmFyeSBtYXBwaW5nIHRoZSBuYW1lcyBvZiBjb2x1bW5zIHJlcHJlc2VudGVkIGluIHRoZSBjb2x1bW5zCiAgICAgICAgICBjbGF1c2Ugb2YgYSBgYFNFTEVDVGBgIHN0YXRlbWVudCB0byB0eXBlIG9iamVjdHMuCgogICAgICAgICAgRS5nLjo6CgogICAgICAgICAgICAgIHN0bXQgPSB0ZXh0KCJTRUxFQ1QgKiBGUk9NIHRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVtYXA9eydpZCc6IEludGVnZXIsICduYW1lJzogU3RyaW5nfSwKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpyZWY6YHNxbGV4cHJlc3Npb25fdGV4dGAgLSBpbiB0aGUgQ29yZSB0dXRvcmlhbAoKICAgICAgICAgICAgOnJlZjpgb3JtX3R1dG9yaWFsX2xpdGVyYWxfc3FsYCAtIGluIHRoZSBPUk0gdHV0b3JpYWwKCiAgICAgICAgKQFyUAAAAE4pAXLWAAAAKQRy1QAAAHLfAAAAcqsAAABaEWV4ZWN1dGlvbl9vcHRpb25zKQdyOAAAAHLeAAAAclAAAABy3wAAAHLgAAAActYAAADaBHN0bXRyFgAAAHIWAAAAchcAAADaDF9jcmVhdGVfdGV4dEgFAABzEgAAAAB/AAcMAQQBCgEEAQwBCAEMAnoXVGV4dENsYXVzZS5fY3JlYXRlX3RleHRjAQAAAAAAAAAIAAAACQAAAE8AAABztAAAAHwAagCgAaEABAB8AF8AfQN4SnwBRABdQn0EeQ58A3wEagIZAH0FVwBuJAQAdANrCnJMAQABAAEAdASgBWQBfARqAhYAoQGCAVkAcRZYAHwEfAN8BWoCPABxFlcAeFJ8AqAGoQBEAF1GXAJ9Bn0HeQx8A3wGGQB9BVcAbiIEAHQDawpynAEAAQABAHQEoAVkAXwGFgChAYIBWQBxZlgAfAWgB3wHoQF8A3wGPABxZlcAZAJTACkDYa8KAABFc3RhYmxpc2ggdGhlIHZhbHVlcyBhbmQvb3IgdHlwZXMgb2YgYm91bmQgcGFyYW1ldGVycyB3aXRoaW4KICAgICAgICB0aGlzIDpjbGFzczpgLlRleHRDbGF1c2VgIGNvbnN0cnVjdC4KCiAgICAgICAgR2l2ZW4gYSB0ZXh0IGNvbnN0cnVjdCBzdWNoIGFzOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgdGV4dAogICAgICAgICAgICBzdG10ID0gdGV4dCgiU0VMRUNUIGlkLCBuYW1lIEZST00gdXNlciBXSEVSRSBuYW1lPTpuYW1lICIKICAgICAgICAgICAgICAgICAgICAgICAgIkFORCB0aW1lc3RhbXA9OnRpbWVzdGFtcCIpCgogICAgICAgIHRoZSA6bWV0aDpgLlRleHRDbGF1c2UuYmluZHBhcmFtc2AgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGVzdGFibGlzaAogICAgICAgIHRoZSBpbml0aWFsIHZhbHVlIG9mIGBgOm5hbWVgYCBhbmQgYGA6dGltZXN0YW1wYGAsCiAgICAgICAgdXNpbmcgc2ltcGxlIGtleXdvcmQgYXJndW1lbnRzOjoKCiAgICAgICAgICAgIHN0bXQgPSBzdG10LmJpbmRwYXJhbXMobmFtZT0namFjaycsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1kYXRldGltZS5kYXRldGltZSgyMDEyLCAxMCwgOCwgMTUsIDEyLCA1KSkKCiAgICAgICAgV2hlcmUgYWJvdmUsIG5ldyA6Y2xhc3M6YC5CaW5kUGFyYW1ldGVyYCBvYmplY3RzCiAgICAgICAgd2lsbCBiZSBnZW5lcmF0ZWQgd2l0aCB0aGUgbmFtZXMgYGBuYW1lYGAgYW5kIGBgdGltZXN0YW1wYGAsIGFuZAogICAgICAgIHZhbHVlcyBvZiBgYGphY2tgYCBhbmQgYGBkYXRldGltZS5kYXRldGltZSgyMDEyLCAxMCwgOCwgMTUsIDEyLCA1KWBgLAogICAgICAgIHJlc3BlY3RpdmVseS4gIFRoZSB0eXBlcyB3aWxsIGJlCiAgICAgICAgaW5mZXJyZWQgZnJvbSB0aGUgdmFsdWVzIGdpdmVuLCBpbiB0aGlzIGNhc2UgOmNsYXNzOmAuU3RyaW5nYCBhbmQKICAgICAgICA6Y2xhc3M6YC5EYXRlVGltZWAuCgogICAgICAgIFdoZW4gc3BlY2lmaWMgdHlwaW5nIGJlaGF2aW9yIGlzIG5lZWRlZCwgdGhlIHBvc2l0aW9uYWwgYGAqYmluZHNgYAogICAgICAgIGFyZ3VtZW50IGNhbiBiZSB1c2VkIGluIHdoaWNoIHRvIHNwZWNpZnkgOmZ1bmM6YC5iaW5kcGFyYW1gIGNvbnN0cnVjdHMKICAgICAgICBkaXJlY3RseS4gIFRoZXNlIGNvbnN0cnVjdHMgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IHRoZSBgYGtleWBgCiAgICAgICAgYXJndW1lbnQsIHRoZW4gYW4gb3B0aW9uYWwgdmFsdWUgYW5kIHR5cGU6OgoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBiaW5kcGFyYW0KICAgICAgICAgICAgc3RtdCA9IHN0bXQuYmluZHBhcmFtcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRwYXJhbSgnbmFtZScsIHZhbHVlPSdqYWNrJywgdHlwZV89U3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRwYXJhbSgndGltZXN0YW1wJywgdHlwZV89RGF0ZVRpbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgQWJvdmUsIHdlIHNwZWNpZmllZCB0aGUgdHlwZSBvZiA6Y2xhc3M6YC5EYXRlVGltZWAgZm9yIHRoZQogICAgICAgIGBgdGltZXN0YW1wYGAgYmluZCwgYW5kIHRoZSB0eXBlIG9mIDpjbGFzczpgLlN0cmluZ2AgZm9yIHRoZSBgYG5hbWVgYAogICAgICAgIGJpbmQuICBJbiB0aGUgY2FzZSBvZiBgYG5hbWVgYCB3ZSBhbHNvIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZgogICAgICAgIGBgImphY2siYGAuCgogICAgICAgIEFkZGl0aW9uYWwgYm91bmQgcGFyYW1ldGVycyBjYW4gYmUgc3VwcGxpZWQgYXQgc3RhdGVtZW50IGV4ZWN1dGlvbgogICAgICAgIHRpbWUsIGUuZy46OgoKICAgICAgICAgICAgcmVzdWx0ID0gY29ubmVjdGlvbi5leGVjdXRlKHN0bXQsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1kYXRldGltZS5kYXRldGltZSgyMDEyLCAxMCwgOCwgMTUsIDEyLCA1KSkKCiAgICAgICAgVGhlIDptZXRoOmAuVGV4dENsYXVzZS5iaW5kcGFyYW1zYCBtZXRob2QgY2FuIGJlIGNhbGxlZCByZXBlYXRlZGx5LAogICAgICAgIHdoZXJlIGl0IHdpbGwgcmUtdXNlIGV4aXN0aW5nIDpjbGFzczpgLkJpbmRQYXJhbWV0ZXJgIG9iamVjdHMgdG8gYWRkCiAgICAgICAgbmV3IGluZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsIHdlIGNhbiBjYWxsCiAgICAgICAgOm1ldGg6YC5UZXh0Q2xhdXNlLmJpbmRwYXJhbXNgIGZpcnN0IHdpdGggdHlwaW5nIGluZm9ybWF0aW9uLCBhbmQgYQogICAgICAgIHNlY29uZCB0aW1lIHdpdGggdmFsdWUgaW5mb3JtYXRpb24sIGFuZCBpdCB3aWxsIGJlIGNvbWJpbmVkOjoKCiAgICAgICAgICAgIHN0bXQgPSB0ZXh0KCJTRUxFQ1QgaWQsIG5hbWUgRlJPTSB1c2VyIFdIRVJFIG5hbWU9Om5hbWUgIgogICAgICAgICAgICAgICAgICAgICAgICAiQU5EIHRpbWVzdGFtcD06dGltZXN0YW1wIikKICAgICAgICAgICAgc3RtdCA9IHN0bXQuYmluZHBhcmFtcygKICAgICAgICAgICAgICAgIGJpbmRwYXJhbSgnbmFtZScsIHR5cGVfPVN0cmluZyksCiAgICAgICAgICAgICAgICBiaW5kcGFyYW0oJ3RpbWVzdGFtcCcsIHR5cGVfPURhdGVUaW1lKQogICAgICAgICAgICApCiAgICAgICAgICAgIHN0bXQgPSBzdG10LmJpbmRwYXJhbXMoCiAgICAgICAgICAgICAgICBuYW1lPSdqYWNrJywKICAgICAgICAgICAgICAgIHRpbWVzdGFtcD1kYXRldGltZS5kYXRldGltZSgyMDEyLCAxMCwgOCwgMTUsIDEyLCA1KQogICAgICAgICAgICApCgogICAgICAgIHo/VGhpcyB0ZXh0KCkgY29uc3RydWN0IGRvZXNuJ3QgZGVmaW5lIGEgYm91bmQgcGFyYW1ldGVyIG5hbWVkICVyTikIctgAAAByMgAAAHIpAAAA2ghLZXlFcnJvcnIQAAAAclUAAADaBWl0ZW1zctAAAAApCHI4AAAAWgViaW5kc1oPbmFtZXNfdG9fdmFsdWVz2gpuZXdfcGFyYW1zclAAAADaCGV4aXN0aW5ncikAAAByJgAAAHIWAAAAchYAAAByFwAAAHLfAAAA2AUAAHMiAAAAAEEQAgoBAgEOAQ4BBAECARADDgISAQIBDAEOAQQBAgEOA3oVVGV4dENsYXVzZS5iaW5kcGFyYW1zehlzcWxhbGNoZW15LnNxbC5zZWxlY3RhYmxlYwIAAAAAAAAABgAAAAUAAAAPAAAAc0IAAACHAGYBZAFkAoQIfAJEAIMBfQRkA2QChACIAKAAoQBEAIMBfQV8AWoBfAB8BHwFFwB0AnwEgwFvPHwFDABkBI0DUwApBWHMDwAAVHVybiB0aGlzIDpjbGFzczpgLlRleHRDbGF1c2VgIG9iamVjdCBpbnRvIGEgOmNsYXNzOmAuVGV4dEFzRnJvbWAKICAgICAgICBvYmplY3QgdGhhdCBjYW4gYmUgZW1iZWRkZWQgaW50byBhbm90aGVyIHN0YXRlbWVudC4KCiAgICAgICAgVGhpcyBmdW5jdGlvbiBlc3NlbnRpYWxseSBicmlkZ2VzIHRoZSBnYXAgYmV0d2VlbiBhbiBlbnRpcmVseQogICAgICAgIHRleHR1YWwgU0VMRUNUIHN0YXRlbWVudCBhbmQgdGhlIFNRTCBleHByZXNzaW9uIGxhbmd1YWdlIGNvbmNlcHQKICAgICAgICBvZiBhICJzZWxlY3RhYmxlIjo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkuc3FsIGltcG9ydCBjb2x1bW4sIHRleHQKCiAgICAgICAgICAgIHN0bXQgPSB0ZXh0KCJTRUxFQ1QgaWQsIG5hbWUgRlJPTSBzb21lX3RhYmxlIikKICAgICAgICAgICAgc3RtdCA9IHN0bXQuY29sdW1ucyhjb2x1bW4oJ2lkJyksIGNvbHVtbignbmFtZScpKS5hbGlhcygnc3QnKQoKICAgICAgICAgICAgc3RtdCA9IHNlbGVjdChbbXl0YWJsZV0pLiAgICAgICAgICAgICAgICAgICAgc2VsZWN0X2Zyb20oCiAgICAgICAgICAgICAgICAgICAgICAgIG15dGFibGUuam9pbihzdG10LCBteXRhYmxlLmMubmFtZSA9PSBzdG10LmMubmFtZSkKICAgICAgICAgICAgICAgICAgICApLndoZXJlKHN0bXQuYy5pZCA+IDUpCgogICAgICAgIEFib3ZlLCB3ZSBwYXNzIGEgc2VyaWVzIG9mIDpmdW5jOmAuY29sdW1uYCBlbGVtZW50cyB0byB0aGUKICAgICAgICA6bWV0aDpgLlRleHRDbGF1c2UuY29sdW1uc2AgbWV0aG9kIHBvc2l0aW9uYWxseS4gIFRoZXNlIDpmdW5jOmAuY29sdW1uYAogICAgICAgIGVsZW1lbnRzIG5vdyBiZWNvbWUgZmlyc3QgY2xhc3MgZWxlbWVudHMgdXBvbiB0aGUgOmF0dHI6YC5UZXh0QXNGcm9tLmNgCiAgICAgICAgY29sdW1uIGNvbGxlY3Rpb24sIGp1c3QgbGlrZSBhbnkgb3RoZXIgc2VsZWN0YWJsZS4KCiAgICAgICAgVGhlIGNvbHVtbiBleHByZXNzaW9ucyB3ZSBwYXNzIHRvIDptZXRoOmAuVGV4dENsYXVzZS5jb2x1bW5zYCBtYXkKICAgICAgICBhbHNvIGJlIHR5cGVkOyB3aGVuIHdlIGRvIHNvLCB0aGVzZSA6Y2xhc3M6YC5UeXBlRW5naW5lYCBvYmplY3RzIGJlY29tZQogICAgICAgIHRoZSBlZmZlY3RpdmUgcmV0dXJuIHR5cGUgb2YgdGhlIGNvbHVtbiwgc28gdGhhdCBTUUxBbGNoZW15J3MKICAgICAgICByZXN1bHQtc2V0LXByb2Nlc3Npbmcgc3lzdGVtcyBtYXkgYmUgdXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlcy4KICAgICAgICBUaGlzIGlzIG9mdGVuIG5lZWRlZCBmb3IgdHlwZXMgc3VjaCBhcyBkYXRlIG9yIGJvb2xlYW4gdHlwZXMsIGFzIHdlbGwKICAgICAgICBhcyBmb3IgdW5pY29kZSBwcm9jZXNzaW5nIG9uIHNvbWUgZGlhbGVjdCBjb25maWd1cmF0aW9uczo6CgogICAgICAgICAgICBzdG10ID0gdGV4dCgiU0VMRUNUIGlkLCBuYW1lLCB0aW1lc3RhbXAgRlJPTSBzb21lX3RhYmxlIikKICAgICAgICAgICAgc3RtdCA9IHN0bXQuY29sdW1ucygKICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uKCdpZCcsIEludGVnZXIpLAogICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4oJ25hbWUnLCBVbmljb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uKCd0aW1lc3RhbXAnLCBEYXRlVGltZSkKICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBmb3IgaWQsIG5hbWUsIHRpbWVzdGFtcCBpbiBjb25uZWN0aW9uLmV4ZWN1dGUoc3RtdCk6CiAgICAgICAgICAgICAgICBwcmludChpZCwgbmFtZSwgdGltZXN0YW1wKQoKICAgICAgICBBcyBhIHNob3J0Y3V0IHRvIHRoZSBhYm92ZSBzeW50YXgsIGtleXdvcmQgYXJndW1lbnRzIHJlZmVycmluZyB0bwogICAgICAgIHR5cGVzIGFsb25lIG1heSBiZSB1c2VkLCBpZiBvbmx5IHR5cGUgY29udmVyc2lvbiBpcyBuZWVkZWQ6OgoKICAgICAgICAgICAgc3RtdCA9IHRleHQoIlNFTEVDVCBpZCwgbmFtZSwgdGltZXN0YW1wIEZST00gc29tZV90YWJsZSIpCiAgICAgICAgICAgIHN0bXQgPSBzdG10LmNvbHVtbnMoCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPUludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9VW5pY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPURhdGVUaW1lCiAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgZm9yIGlkLCBuYW1lLCB0aW1lc3RhbXAgaW4gY29ubmVjdGlvbi5leGVjdXRlKHN0bXQpOgogICAgICAgICAgICAgICAgcHJpbnQoaWQsIG5hbWUsIHRpbWVzdGFtcCkKCiAgICAgICAgVGhlIHBvc2l0aW9uYWwgZm9ybSBvZiA6bWV0aDpgLlRleHRDbGF1c2UuY29sdW1uc2AgYWxzbyBwcm92aWRlcyB0aGUKICAgICAgICB1bmlxdWUgZmVhdHVyZSBvZiAqKnBvc2l0aW9uYWwgY29sdW1uIHRhcmdldGluZyoqLCB3aGljaCBpcwogICAgICAgIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiB1c2luZyB0aGUgT1JNIHdpdGggY29tcGxleCB0ZXh0dWFsIHF1ZXJpZXMuIElmCiAgICAgICAgd2Ugc3BlY2lmeSB0aGUgY29sdW1ucyBmcm9tIG91ciBtb2RlbCB0byA6bWV0aDpgLlRleHRDbGF1c2UuY29sdW1uc2AsCiAgICAgICAgdGhlIHJlc3VsdCBzZXQgd2lsbCBtYXRjaCB0byB0aG9zZSBjb2x1bW5zIHBvc2l0aW9uYWxseSwgbWVhbmluZyB0aGUKICAgICAgICBuYW1lIG9yIG9yaWdpbiBvZiB0aGUgY29sdW1uIGluIHRoZSB0ZXh0dWFsIFNRTCBkb2Vzbid0IG1hdHRlcjo6CgogICAgICAgICAgICBzdG10ID0gdGV4dCgiU0VMRUNUIHVzZXJzLmlkLCBhZGRyZXNzZXMuaWQsIHVzZXJzLmlkLCAiCiAgICAgICAgICAgICAgICAgInVzZXJzLm5hbWUsIGFkZHJlc3Nlcy5lbWFpbF9hZGRyZXNzIEFTIGVtYWlsICIKICAgICAgICAgICAgICAgICAiRlJPTSB1c2VycyBKT0lOIGFkZHJlc3NlcyBPTiB1c2Vycy5pZD1hZGRyZXNzZXMudXNlcl9pZCAiCiAgICAgICAgICAgICAgICAgIldIRVJFIHVzZXJzLmlkID0gMSIpLmNvbHVtbnMoCiAgICAgICAgICAgICAgICAgICAgVXNlci5pZCwKICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLmlkLAogICAgICAgICAgICAgICAgICAgIEFkZHJlc3MudXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICBVc2VyLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgQWRkcmVzcy5lbWFpbF9hZGRyZXNzCiAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgcXVlcnkgPSBzZXNzaW9uLnF1ZXJ5KFVzZXIpLmZyb21fc3RhdGVtZW50KHN0bXQpLm9wdGlvbnMoCiAgICAgICAgICAgICAgICBjb250YWluc19lYWdlcihVc2VyLmFkZHJlc3NlcykpCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMSB0aGUgOm1ldGg6YC5UZXh0Q2xhdXNlLmNvbHVtbnNgIG1ldGhvZCBub3cKICAgICAgICAgICBvZmZlcnMgcG9zaXRpb25hbCBjb2x1bW4gdGFyZ2V0aW5nIGluIHRoZSByZXN1bHQgc2V0IHdoZW4KICAgICAgICAgICB0aGUgY29sdW1uIGV4cHJlc3Npb25zIGFyZSBwYXNzZWQgcHVyZWx5IHBvc2l0aW9uYWxseS4KCiAgICAgICAgVGhlIDptZXRo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KFt0LmMueF0pLndoZXJlKGZhbHNlKCkpCiAgICAgICAgICAgIFNFTEVDVCB4IEZST00gdCBXSEVSRSBmYWxzZQoKICAgICAgICBBIGJhY2tlbmQgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCB0cnVlL2ZhbHNlIGNvbnN0YW50cyB3aWxsIHJlbmRlciBhcwogICAgICAgIGFuIGV4cHJlc3Npb24gYWdhaW5zdCAxIG9yIDA6OgoKICAgICAgICAgICAgPj4+IHByaW50IHNlbGVjdChbdC5jLnhdKS53aGVyZShmYWxzZSgpKQogICAgICAgICAgICBTRUxFQ1QgeCBGUk9NIHQgV0hFUkUgMCA9IDEKCiAgICAgICAgVGhlIDpmdW5jOmAudHJ1ZWAgYW5kIDpmdW5jOmAuZmFsc2VgIGNvbnN0YW50cyBhbHNvIGZlYXR1cmUKICAgICAgICAic2hvcnQgY2lyY3VpdCIgb3BlcmF0aW9uIHdpdGhpbiBhbiA6ZnVuYzpgLmFuZF9gIG9yIDpmdW5jOmAub3JfYAogICAgICAgIGNvbmp1bmN0aW9uOjoKCiAgICAgICAgICAgID4+PiBwcmludCBzZWxlY3QoW3QuYy54XSkud2hlcmUob3JfKHQuYy54ID4gNSwgdHJ1ZSgpKSkKICAgICAgICAgICAgU0VMRUNUIHggRlJPTSB0IFdIRVJFIHRydWUKCiAgICAgICAgICAgID4+PiBwcmludCBzZWxlY3QoW3QuYy54XSkud2hlcmUoYW5kXyh0LmMueCA+IDUsIGZhbHNlKCkpKQogICAgICAgICAgICBTRUxFQ1QgeCBGUk9NIHQgV0hFUkUgZmFsc2UKCiAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAwLjkgOmZ1bmM6YC50cnVlYCBhbmQgOmZ1bmM6YC5mYWxzZWAgZmVhdHVyZQogICAgICAgICAgIGJldHRlciBpbnRlZ3JhdGVkIGJlaGF2aW9yIHdpdGhpbiBjb25qdW5jdGlvbnMgYW5kIG9uIGRpYWxlY3RzCiAgICAgICAgICAgdGhhdCBkb24ndCBzdXBwb3J0IHRydWUvZmFsc2UgY29uc3RhbnRzLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpmdW5j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WgAAACkBclsAAAApAnKdAAAAcjkAAAApAXJvAAAAchYAAAByFwAAAHLoAAAAzAcAAHMCAAAABgBUKRFyEgAAAFoUY29lcmNlX2dlbmVyYXRvcl9hcmdyxAAAAHJbAAAAcgQAAAByhQAAAHIHAQAAclMAAAByMAAAAHICAQAActcAAABybwAAAHL9AAAAcgUAAAByhwAAAHIeAAAAcsEAAAApCXL0AAAAcm8AAABaC2NvbnRpbnVlX29uWgdza2lwX29ucgIBAAByFQAAAFoPY29udmVydF9jbGF1c2VzciwAAAByOAAAAHIWAAAAKQFybwAAAHIXAAAA2gpfY29uc3RydWN0tQcAAHMsAAAAAAIEAwYBDgIKAgoBBAEKAQ4CDgIMARIBCAESAxIDCgEGAQYBBgEGAQgBBgF6HEJvb2xlYW5DbGF1c2VMaXN0Ll9jb25zdHJ1Y3RjAQAAAAAAAAACAAAABAAAAEcAAABzFgAAAHwAagB0AWoCdAN0BGYDfAGeAo4AUwApAWEcBQAAUHJvZHVjZSBhIGNvbmp1bmN0aW9uIG9mIGV4cHJlc3Npb25zIGpvaW5lZCBieSBgYEFORGBgLgoKICAgICAgICBFLmcuOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgYW5kXwoKICAgICAgICAgICAgc3RtdCA9IHNlbGVjdChbdXNlcnNfdGFibGVdKS53aGVyZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZF8oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnNfdGFibGUuYy5uYW1lID09ICd3ZW5keScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnNfdGFibGUuYy5lbnJvbGxlZCA9PSBUcnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgVGhlIDpmdW5jOmAuYW5kX2AgY29uanVuY3Rpb24gaXMgYWxzbyBhdmFpbGFibGUgdXNpbmcgdGhlCiAgICAgICAgUHl0aG9uIGBgJmBgIG9wZXJhdG9yICh0aG91Z2ggbm90ZSB0aGF0IGNvbXBvdW5kIGV4cHJlc3Npb25zCiAgICAgICAgbmVlZCB0byBiZSBwYXJlbnRoZXNpemVkIGluIG9yZGVyIHRvIGZ1bmN0aW9uIHdpdGggUHl0aG9uCiAgICAgICAgb3BlcmF0b3IgcHJlY2VkZW5jZSBiZWhhdmlvcik6OgoKICAgICAgICAgICAgc3RtdCA9IHNlbGVjdChbdXNlcnNfdGFibGVdKS53aGVyZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2Vyc190YWJsZS5jLm5hbWUgPT0gJ3dlbmR5JykgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXJzX3RhYmxlLmMuZW5yb2xsZWQgPT0gVHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICBUaGUgOmZ1bmM6YC5hbmRfYCBvcGVyYXRpb24gaXMgYWxzbyBpbXBsaWNpdCBpbiBzb21lIGNhc2VzOwogICAgICAgIHRoZSA6bWV0aDpgLlNlbGVjdC53aGVyZWAgbWV0aG9kIGZvciBleGFtcGxlIGNhbiBiZSBpbnZva2VkIG11bHRpcGxlCiAgICAgICAgdGltZXMgYWdhaW5zdCBhIHN0YXRlbWVudCwgd2hpY2ggd2lsbCBoYXZlIHRoZSBlZmZlY3Qgb2YgZWFjaAogICAgICAgIGNsYXVzZSBiZWluZyBjb21iaW5lZCB1c2luZyA6ZnVuYzpgLmFuZF9gOjoKCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW3VzZXJzX3RhYmxlXSkuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUodXNlcnNfdGFibGUuYy5uYW1lID09ICd3ZW5keScpLiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlKHVzZXJzX3RhYmxlLmMuZW5yb2xsZWQgPT0gVHJ1ZSkKCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6ZnVuYzpgLm9yX2AKCiAgICAgICAgKQVyEgEAAHIEAAAAcmcAAABy+AAAAHL2AAAAKQJy9AAAAHICAQAAchYAAAByFgAAAHIXAAAAcmcAAADYBwAAcwIAAAAAJ3oWQm9vbGVhbkNsYXVzZUxpc3QuYW5kX2MBAAAAAAAAAAIAAAAEAAAARwAAAHMWAAAAfABqAHQBagJ0A3QEZgN8AZ4CjgBTACkBYWQDAABQcm9kdWNlIGEgY29uanVuY3Rpb24gb2YgZXhwcmVzc2lvbnMgam9pbmVkIGJ5IGBgT1JgYC4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IG9yXwoKICAgICAgICAgICAgc3RtdCA9IHNlbGVjdChbdXNlcnNfdGFibGVdKS53aGVyZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yXygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vyc190YWJsZS5jLm5hbWUgPT0gJ3dlbmR5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vyc190YWJsZS5jLm5hbWUgPT0gJ2phY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgVGhlIDpmdW5jOmAub3JfYCBjb25qdW5jdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSB1c2luZyB0aGUKICAgICAgICBQeXRob24gYGB8YGAgb3BlcmF0b3IgKHRob3VnaCBub3RlIHRoYXQgY29tcG91bmQgZXhwcmVzc2lvbnMKICAgICAgICBuZWVkIHRvIGJlIHBhcmVudGhlc2l6ZWQgaW4gb3JkZXIgdG8gZnVuY3Rpb24gd2l0aCBQeXRob24KICAgICAgICBvcGVyYXRvciBwcmVjZWRlbmNlIGJlaGF2aW9yKTo6CgogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFt1c2Vyc190YWJsZV0pLndoZXJlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXJzX3RhYmxlLmMubmFtZSA9PSAnd2VuZHknKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlcnNfdGFibGUuYy5uYW1lID09ICdqYWNrJykKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAg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ICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGNhc2UKCiAgICAgICAgc3RtdCA9IHNlbGVjdChbdXNlcnNfdGFibGVdKS4gICAgICAgICAgICAgICAgICAgIHdoZXJlKAogICAgICAgICAgICAgICAgICAgICAgICBjYXNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2Vyc190YWJsZS5jLm5hbWUgPT0gJ3dlbmR5JywgJ1cnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlcnNfdGFibGUuYy5uYW1lID09ICdqYWNrJywgJ0onKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VfPSdFJwogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKQoKICAgIERldGFpbHMgb24gOmNsYXNzOmAuQ2FzZWAgdXNhZ2UgaXMgYXQgOmZ1bmM6YC5jYXNlYC4KCiAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgOmZ1bmM6YC5jYXNlYAoKICAgINoEY2FzZU5jBAAAAAAAAAAGAAAACAAAAEMAAABzqgAAAHkOdACgAXwBoQF9AVcAbhQEAHQCawpyIgEAAQABAFkAbgJYAHwCZAFrCXI8ZAJkA4QAfAFEAIMBfQRuDmQEZAOEAHwBRACDAX0EfARyYnQDfARkBRkAgwFkBRkAagR9BW4EZAF9BXwCZAFrCHJ2ZAF8AF8Fbgp0BnwCgwF8AF8FfAV8AF8EfAR8AF8HfANkAWsJcqB0BnwDgwF8AF8IbgZkAXwAXwhkAVMAKQZhfxIAAFByb2R1Y2UgYSBgYENBU0VgYCBleHByZXNzaW9uLgoKICAgICAgICBUaGUgYGBDQVNFYGAgY29uc3RydWN0IGluIFNRTCBpcyBhIGNvbmRpdGlvbmFsIG9iamVjdCB0aGF0CiAgICAgICAgYWN0cyBzb21ld2hhdCBhbmFsb2dvdXNseSB0byBhbiAiaWYvdGhlbiIgY29uc3RydWN0IGluIG90aGVyCiAgICAgICAgbGFuZ3VhZ2VzLiAgSXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YC5DYXNlYC4KCiAgICAgICAgOmZ1bmM6YC5jYXNlYCBpbiBpdHMgdXN1YWwgZm9ybSBpcyBwYXNzZWQgYSBsaXN0IG9mICJ3aGVuIgogICAgICAgIGNvbnN0cnVjdHMsIHRoYXQgaXMsIGEgbGlzdCBvZiBjb25kaXRpb25zIGFuZCByZXN1bHRzIGFzIHR1cGxlczo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGNhc2UKCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW3VzZXJzX3RhYmxlXSkuXAogICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlcnNfdGFibGUuYy5uYW1lID09ICd3ZW5keScsICdXJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2Vyc190YWJsZS5jLm5hbWUgPT0gJ2phY2snLCAnSicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXz0nRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICBUaGUgYWJvdmUgc3RhdGVtZW50IHdpbGwgcHJvZHVjZSBTUUwgcmVzZW1ibGluZzo6CgogICAgICAgICAgICBTRUxFQ1QgaWQsIG5hbWUgRlJPTSB1c2VyCiAgICAgICAgICAgIFdIRVJFIENBU0UKICAgICAgICAgICAgICAgIFdIRU4gKG5hbWUgPSA6bmFtZV8xKSBUSEVOIDpwYXJhbV8xCiAgICAgICAgICAgICAgICBXSEVOIChuYW1lID0gOm5hbWVfMikgVEhFTiA6cGFyYW1fMgogICAgICAgICAgICAgICAgRUxTRSA6cGFyYW1fMwogICAgICAgICAgICBFTkQKCiAgICAgICAgV2hlbiBzaW1wbGUgZXF1YWxpdHkgZXhwcmVzc2lvbnMgb2Ygc2V2ZXJhbCB2YWx1ZXMgYWdhaW5zdCBhIHNpbmdsZQogICAgICAgIHBhcmVudCBjb2x1bW4gYXJlIG5lZWRlZCwgOmZ1bmM6YC5jYXNlYCBhbHNvIGhhcyBhICJzaG9ydGhhbmQiIGZvcm1hdAogICAgICAgIHVzZWQgdmlhIHRoZQogICAgICAgIDpwYXJhbXJlZjpgLmNhc2UudmFsdWVgIHBhcmFtZXRlciwgd2hpY2ggaXMgcGFzc2VkIGEgY29sdW1uCiAgICAgICAgZXhwcmVzc2lvbiB0byBiZSBjb21wYXJlZC4gIEluIHRoaXMgZm9ybSwgdGhlIDpwYXJhbXJlZjpgLmNhc2Uud2hlbnNgCiAgICAgICAgcGFyYW1ldGVyIGlzIHBhc3NlZCBhcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBleHByZXNzaW9ucyB0byBiZQogICAgICAgIGNvbXBhcmVkIGFnYWluc3Qga2V5ZWQgdG8gcmVzdWx0IGV4cHJlc3Npb25zLiAgVGhlIHN0YXRlbWVudCBiZWxvdyBpcwogICAgICAgIGVxdWl2YWxlbnQgdG8gdGhlIHByZWNlZGluZyBzdGF0ZW1lbnQ6OgoKICAgICAgICAgICAgc3RtdCA9IHNlbGVjdChbdXNlcnNfdGFibGVdKS5cCiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IndlbmR5IjogIlciLCAiamFjayI6ICJKIn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9dXNlcnNfdGFibGUuYy5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VfPSdFJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgIFRoZSB2YWx1ZXMgd2hpY2ggYXJlIGFjY2VwdGVkIGFzIHJlc3VsdCB2YWx1ZXMgaW4KICAgICAgICA6cGFyYW1yZWY6YC5jYXNlLndoZW5zYCBhcyB3ZWxsIGFzIHdpdGggOnBhcmFtcmVmOmAuY2FzZS5lbHNlX2AgYXJlCiAgICAgICAgY29lcmNlZCBmcm9tIFB5dGhvbiBsaXRlcmFscyBpbnRvIDpmdW5jOmAuYmluZHBhcmFtYCBjb25zdHJ1Y3RzLgogICAgICAgIFNRTCBleHByZXNzaW9ucywgZS5nLiA6Y2xhc3M6YC5Db2x1bW5FbGVtZW50YCBjb25zdHJ1Y3RzLCBhcmUgYWNjZXB0ZWQKICAgICAgICBhcyB3ZWxsLiAgVG8gY29lcmNlIGEgbGl0ZXJhbCBzdHJpbmcgZXhwcmVzc2lvbiBpbnRvIGEgY29uc3RhbnQKICAgICAgICBleHByZXNzaW9uIHJlbmRlcmVkIGlubGluZSwgdXNlIHRoZSA6ZnVuYzpgLmxpdGVyYWxfY29sdW1uYCBjb25zdHJ1Y3QsCiAgICAgICAgYXMgaW46OgoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBjYXNlLCBsaXRlcmFsX2NvbHVtbgoKICAgICAgICAgICAgY2FzZSgKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVybGluZS5jLnF0eSA+IDEwMCwKICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbF9jb2x1bW4oIidncmVhdGVydGhhbjEwMCciKQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmxpbmUuYy5xdHkgPiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbF9jb2x1bW4oIidncmVhdGVydGhhbjEwJyIpCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIGVsc2VfPWxpdGVyYWxfY29sdW1uKCInbGVzc3RoYW4xMCciKQogICAgICAgICAgICApCgogICAgICAgIFRoZSBhYm92ZSB3aWxsIHJlbmRlciB0aGUgZ2l2ZW4gY29uc3RhbnRzIHdpdGhvdXQgdXNpbmcgYm91bmQKICAgICAgICBwYXJhbWV0ZXJzIGZvciB0aGUgcmVzdWx0IHZhbHVlcyAoYnV0IHN0aWxsIGZvciB0aGUgY29tcGFyaXNvbgogICAgICAgIHZhbHVlcyksIGFzIGluOjoKCiAgICAgICAgICAgIENBU0UKICAgICAgICAgICAgICAgIFdIRU4gKG9yZGVybGluZS5xdHkgPiA6cXR5XzEpIFRIRU4gJ2dyZWF0ZXJ0aGFuMTAwJwogICAgICAgICAgICAgICAgV0hFTiAob3JkZXJsaW5lLnF0eSA+IDpxdHlfMikgVEhFTiAnZ3JlYXRlcnRoYW4xMCcKICAgICAgICAgICAgICAgIEVMU0UgJ2xlc3N0aGFuMTAnCiAgICAgICAgICAgIEVORAoKICAgICAgICA6cGFyYW0gd2hlbnM6IFRoZSBjcml0ZXJpYSB0byBiZSBjb21wYXJlZCBhZ2FpbnN0LAogICAgICAgICA6cGFyYW1yZWY6YC5jYXNlLndoZW5zYCBhY2NlcHRzIHR3byBkaWZmZXJlbnQgZm9ybXMsIGJhc2VkIG9uCiAgICAgICAgIHdoZXRoZXIgb3Igbm90IDpwYXJhbXJlZjpgLmNhc2UudmFsdWVgIGlzIHVzZWQuCgogICAgICAgICBJbiB0aGUgZmlyc3QgZm9ybSwgaXQgYWNjZXB0cyBhIGxpc3Qgb2YgMi10dXBsZXM7IGVhY2ggMi10dXBsZQogICAgICAgICBjb25zaXN0cyBvZiBgYCg8c3FsIGV4cHJlc3Npb24+LCA8dmFsdWU+KWBgLCB3aGVyZSB0aGUgU1FMCiAgICAgICAgIGV4cHJlc3Npb24gaXMgYSBib29sZWFuIGV4cHJlc3Npb24gYW5kICJ2YWx1ZSIgaXMgYSByZXN1bHRpbmcgdmFsdWUsCiAgICAgICAgIGUuZy46OgoKICAgICAgICAgICAgY2FzZShbCiAgICAgICAgICAgICAgICAodXNlcnNfdGFibGUuYy5uYW1lID09ICd3ZW5keScsICdXJyksCiAgICAgICAgICAgICAgICAodXNlcnNfdGFibGUuYy5uYW1lID09ICdqYWNrJywgJ0onKQogICAgICAgICAgICBdKQoKICAgICAgICAgSW4gdGhlIHNlY29uZCBmb3JtLCBpdCBhY2NlcHRzIGEgUHl0aG9uIGRpY3Rpb25hcnkgb2YgY29tcGFyaXNvbgogICAgICAgICB2YWx1ZXMgbWFwcGVkIHRvIGEgcmVzdWx0aW5nIHZhbHVlOyB0aGlzIGZvcm0gcmVxdWlyZXMKICAgICAgICAgOnBhcmFtcmVmOmAuY2FzZS52YWx1ZWAgdG8gYmUgcHJlc2VudCwgYW5kIHZhbHVlcyB3aWxsIGJlIGNvbXBhcmVkCiAgICAgICAgIHVzaW5nIHRoZSBgYD09YGAgb3BlcmF0b3IsIGUuZy46OgoKICAgICAgICAgICAgY2FzZSgKICAgICAgICAgICAgICAgIHsid2VuZHkiOiAiVyIsICJqYWNrIjogIkoifSwKICAgICAgICAgICAgICAgIHZhbHVlPXVzZXJzX3RhYmxlLmMubmFtZQogICAgICAgICAgICApCgogICAgICAgIDpwYXJhbSB2YWx1ZTogQW4gb3B0aW9uYWwgU1FMIGV4cHJlc3Npb24gd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEKICAgICAgICAgIGZpeGVkICJjb21wYXJpc29uIHBvaW50IiBmb3IgY2FuZGlkYXRlIHZhbHVlcyB3aXRoaW4gYSBkaWN0aW9uYXJ5CiAgICAgICAgICBwYXNzZWQgdG8gOnBhcmFtcmVmOmAuY2FzZS53aGVuc2AuCgogICAgICAgIDpwYXJhbSBlbHNlXF86IEFuIG9wdGlvbmFsIFNRTCBleHByZXNzaW9uIHdoaWNoIHdpbGwgYmUgdGhlIGV2YWx1YXRlZAogICAgICAgICAgcmVzdWx0IG9mIHRoZSBgYENBU0VgYCBjb25zdHJ1Y3QgaWYgYWxsIGV4cHJlc3Npb25zIHdpdGhpbgogICAgICAgICAgOnBhcmFtcmVmOmAuY2FzZS53aGVuc2AgZXZhbHVhdGUgdG8gZmFsc2UuICBXaGVuIG9taXR0ZWQsIG1vc3QKICAgICAgICAgIGRhdGFiYXNlcyB3aWxsIHByb2R1Y2UgYSByZXN1bHQgb2YgTlVMTCBpZiBub25l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IiBjb2x1bW4gZXhwcmVzc2lvbiB0aGF0IHJlbmRlcnMKICAgIGV4YWN0bHkgYXMgc3RhdGVkOyB3aGlsZSA6ZnVuYzpgLmNvbHVtbmAgc3RvcmVzIGEgc3RyaW5nIG5hbWUgdGhhdAogICAgd2lsbCBiZSBhc3N1bWVkIHRvIGJlIHBhcnQgb2YgYSB0YWJsZSBhbmQgbWF5IGJlIHF1b3RlZCBhcyBzdWNoLAogICAgOmZ1bmM6YC5saXRlcmFsX2NvbHVtbmAgY2FuIGJlIHRoYXQsIG9yIGFueSBvdGhlciBhcmJpdHJhcnkgY29sdW1uLW9yaWVudGVkCiAgICBleHByZXNzaW9uLgoKICAgIDpwYXJhbSB0ZXh0OiB0aGUgdGV4dCBvZiB0aGUgZXhwcmVzc2lvbjsgY2FuIGJlIGFueSBTUUwgZXhwcmVzc2lvbi4KICAgICAgUXVvdGluZyBydWxlcyB3aWxsIG5vdCBiZSBhcHBsaWVkLiBUbyBzcGVjaWZ5IGEgY29sdW1uLW5hbWUgZXhwcmVzc2lvbgogICAgICB3aGljaCBzaG91bGQgYmUgc3ViamVjdCB0byBxdW90aW5nIHJ1bGVzLCB1c2UgdGhlIDpmdW5jOmBjb2x1bW5gCiAgICAgIGZ1bmN0aW9uLgoKICAgIDpwYXJhbSB0eXBlXF86IGFuIG9wdGlvbmFsIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuVHlwZUVuZ2luZWAKICAgICAgb2JqZWN0IHdoaWNoIHdpbGwKICAgICAgcHJvdmlkZSByZXN1bHQtc2V0IHRyYW5zbGF0aW9uIGFuZCBhZGRpdGlvbmFsIGV4cHJlc3Npb24gc2VtYW50aWNzIGZvcgogICAgICB0aGlzIGNvbHVtbi4gSWYgbGVmdCBhcyBOb25lIHRoZSB0eXBlIHdpbGwgYmUgTnVsbFR5cGUuCgogICAgLi4gc2VlYWxzbzo6CgogICAgICAgIDpmdW5jOmAuY29sdW1uYAoKICAgICAgICA6ZnVuYzpgLnRleHRgCgogICAgICAgIDpyZWY6YHNxbGV4cHJlc3Npb25fbGl0ZXJhbF9jb2x1bW5gCgogICAgVCkCchkAAADaCmlzX2xpdGVyYWwpAXKpAAAAKQJy3gAAAHIZAAAAchYAAAByFgAAAHIXAAAA2g5saXRlcmFsX2NvbHVtbjgJAABzAgAAAAAeciEBAABjAAAAAAAAAAAAAAAAAwAAAEAAAABzPAAAAGUAWgFkAFoCZAFaA2QCWgRkA2QEhABaBWUGZgFkBWQGhAFaB2QHZAiEAFoIZQlkCWQKhACDAVoKZAtTACkMcrQAAABhYAIAAFJlcHJlc2VudCBhIGBgQ0FTVGBgIGV4cHJlc3Npb24uCgogICAgOmNsYXNzOmAuQ2FzdGAgaXMgcHJvZHVjZWQgdXNpbmcgdGhlIDpmdW5jOmAuY2FzdGAgZmFjdG9yeSBmdW5jdGlvbiwKICAgIGFzIGluOjoKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBjYXN0LCBOdW1lcmljCgogICAgICAgIHN0bXQgPSBzZWxlY3QoWwogICAgICAgICAgICAgICAgICAgIGNhc3QocHJvZHVjdF90YWJsZS5jLnVuaXRfcHJpY2UsIE51bWVyaWMoMTAsIDQpKQogICAgICAgICAgICAgICAgXSkKCiAgICBEZXRhaWxzIG9uIDpjbGFzczpgLkNhc3RgIHVzYWdlIGlzIGF0IDpmdW5jOmAuY2FzdGAuCgogICAgLi4gc2VlYWxzbzo6CgogICAgICAgIDpyZWY6YGNvcmV0dXRvcmlhbF9jYXN0c2AKCiAgICAgICAgOmZ1bmM6YC5jYXN0YAoKICAgICAgICA6ZnVuYzpgLnR5cGVfY29lcmNlYCAtIGFuIGFsdGVybmF0aXZlIHRvIENBU1QgdGhhdCBjb2VyY2VzIHRoZSB0eXBlCiAgICAgICAgb24gdGhlIFB5dGhvbiBzaWRlIG9ubHksIHdoaWNoIGlzIG9mdGVuIHN1ZmZpY2llbnQgdG8gZ2VuZXJhdGUgdGhlCiAgICAgICAgY29ycmVjdCBTUUwgYW5kIGRhdGEgY29lcmNpb24uCgogICAgcrUAAABjAwAAAAAAAAADAAAABAAAAEMAAABzLAAAAHQAoAF8AqEBfABfAnQDfAF8AGoCZAGNAnwAXwR0BXwAagKDAXwAXwZkAlMAKQNhFAgAAFByb2R1Y2UgYSBgYENBU1RgYCBleHByZXNzaW9uLgoKICAgICAgICA6ZnVuYzpgLmNhc3RgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmAuQ2FzdGAuCgogICAgICAgIEUuZy46OgoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBjYXN0LCBOdW1lcmljCgogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzdChwcm9kdWN0X3RhYmxlLmMudW5pdF9wcmljZSwgTnVtZXJpYygxMCwgNCkpCiAgICAgICAgICAgICAgICAgICAgXSkKCiAgICAgICAgVGhlIGFib3ZlIHN0YXRlbWVudCB3aWxsIHByb2R1Y2UgU1FMIHJlc2VtYmxpbmc6OgoKICAgICAgICAgICAgU0VMRUNUIENBU1QodW5pdF9wcmljZSBBUyBOVU1FUklDKDEwLCA0KSkgRlJPTSBwcm9kdWN0CgogICAgICAgIFRoZSA6ZnVuYzpgLmNhc3RgIGZ1bmN0aW9uIHBlcmZvcm1zIHR3byBkaXN0aW5jdCBmdW5jdGlvbnMgd2hlbgogICAgICAgIHVzZWQuICBUaGUgZmlyc3QgaXMgdGhhdCBpdCByZW5kZXJzIHRoZSBgYENBU1RgYCBleHByZXNzaW9uIHdpdGhpbgogICAgICAgIHRoZSByZXN1bHRpbmcgU1FMIHN0cmluZy4gIFRoZSBzZWNvbmQgaXMgdGhhdCBpdCBhc3NvY2lhdGVzIHRoZSBnaXZlbgogICAgICAgIHR5cGUgKGUuZy4gOmNsYXNzOmAuVHlwZUVuZ2luZWAgY2xhc3Mgb3IgaW5zdGFuY2UpIHdpdGggdGhlIGNvbHVtbgogICAgICAgIGV4cHJlc3Npb24gb24gdGhlIFB5dGhvbiBzaWRlLCB3aGljaCBtZWFucyB0aGUgZXhwcmVzc2lvbiB3aWxsIHRha2UKICAgICAgICBvbiB0aGUgZXhwcmVzc2lvbiBvcGVyYXRvciBiZWhhdmlvciBhc3NvY2lhdGVkIHdpdGggdGhhdCB0eXBlLAogICAgICAgIGFzIHdlbGwgYXMgdGhlIGJvdW5kLXZhbHVlIGhhbmRsaW5nIGFuZCByZXN1bHQtcm93LWhhbmRsaW5nIGJlaGF2aW9yCiAgICAgICAgb2YgdGhlIHR5cGUuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMC45LjAgOmZ1bmM6YC5jYXN0YCBub3cgYXBwbGllcyB0aGUgZ2l2ZW4gdHlwZQogICAgICAgICAgIHRvIHRoZSBleHByZXNzaW9uIHN1Y2ggdGhhdCBpdCB0YWtlcyBlZmZlY3Qgb24gdGhlIGJvdW5kLXZhbHVlLAogICAgICAgICAgIGUuZy4gdGhlIFB5dGhvbi10by1kYXRhYmFzZSBkaXJlY3Rpb24sIGluIGFkZGl0aW9uIHRvIHRoZQogICAgICAgICAgIHJlc3VsdCBoYW5kbGluZywgZS5nLiBkYXRhYmFzZS10by1QeXRob24sIGRpcmVjdGlvbi4KCiAgICAgICAgQW4gYWx0ZXJuYXRpdmUgdG8gOmZ1bmM6YC5jYXN0YCBpcyB0aGUgOmZ1bmM6YC50eXBlX2NvZXJjZWAgZnVuY3Rpb24uCiAgICAgICAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgc2Vjb25kIHRhc2sgb2YgYXNzb2NpYXRpbmcgYW4gZXhwcmVzc2lvbgogICAgICAgIHdpdGggYSBzcGVjaWZpYyB0eXBlLCBidXQgZG9lcyBub3QgcmVuZGVyIHRoZSBgYENBU1RgYCBleHByZXNzaW9uCiAgICAgICAgaW4gU1FMLgoKICAgICAgICA6cGFyYW0gZXhwcmVzc2lvbjogQSBTUUwgZXhwcmVzc2lvbiwgc3VjaCBhcyBhIDpjbGFzczpgLkNvbHVtbkVsZW1lbnRgCiAgICAgICAgIGV4cHJlc3Npb24gb3IgYSBQeXRob24gc3RyaW5nIHdoaWNoIHdpbGwgYmUgY29lcmNlZCBpbnRvIGEgYm91bmQKICAgICAgICAgbGl0ZXJhbCB2YWx1ZS4KCiAgICAgICAgOnBhcmFtIHR5cGVcXzogQSA6Y2xhc3M6YC5UeXBlRW5naW5lYCBjbGFzcyBvciBpbnN0YW5jZSBpbmRpY2F0aW5nCiAgICAgICAgIHRoZSB0eXBlIHRvIHdoaWNoIHRoZSBgYENBU1RgYCBzaG91bGQgYXBwbHkuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgY29yZXR1dG9yaWFsX2Nhc3RzYAoKICAgICAgICAgICAgOmZ1bmM6YC50eXBlX2NvZXJjZWAgLSBhbiBhbHRlcm5hdGl2ZSB0byBDQVNUIHRoYXQgY29lcmNlcyB0aGUgdHlwZQogICAgICAgICAgICBvbiB0aGUgUHl0aG9uIHNpZGUgb25seSwgd2hpY2ggaXMgb2Z0ZW4gc3VmZmljaWVudCB0byBnZW5lcmF0ZSB0aGUKICAgICAgICAgICAgY29ycmVjdCBTUUwgYW5kIGRhdGEgY29lcmNpb24uCgoKICAgICAgICApAXIZAAAATikHcgUAAADaC3RvX2luc3RhbmNlch4AAAByGgAAAHIsAAAActMAAABy1AAAACkDcjgAAAByHwAAAHIZAAAAchYAAAByFgAAAHIXAAAAcssAAAB1CQAAcwYAAAAANQwBEAF6DUNhc3QuX19pbml0X19jAgAAAAAAAAADAAAAAwAAAEsAAABzJAAAAHwBfABqAGYBfAKOAXwAXwB8AXwAagFmAXwCjgF8AF8BZABTACkBTikCciwAAABy1AAAACkDcjgAAAByRQAAAHIVAAAAchYAAAByFgAAAHIXAAAAclgAAACuCQAAcwQAAAAAARABehRDYXN0Ll9jb3B5X2ludGVybmFsc2MBAAAAAAAAAAIAAAACAAAASwAAAHMMAAAAfABqAHwAagFmAlMAKQFOKQJyLAAAAHLUAAAAKQJyOAAAAHJMAAAAchYAAAByFgAAAHIXAAAAclkAAACyCQAAcwIAAAAAAXoRQ2FzdC5nZXRfY2hpbGRyZW5jAQAAAAAAAAABAAAAAQAAAEMAAABzCAAAAHwAagBqAVMAKQFOKQJyLAAAAHJ9AAAAKQFyOAAAAHIWAAAAchYAAAByFwAAAHJ9AAAAtQkAAHMCAAAAAAJ6EkNhc3QuX2Zyb21fb2JqZWN0c04pC3J4AAAAcncAAAByegAAAHJ7AAAAcnwAAAByywAAAHITAAAAclgAAAByWQAAAHKAAAAAcn0AAAByFgAAAHIWAAAAchYAAAByFwAAAHK0AAAAWQkAAHMMAAAACBgEAgQCCDkMBAgDcrQAAABjAAAAAAAAAAAAAAAAAwAAAEAAAABzSgAAAGUAWgFkAFoCZAFaA2QCWgRkA2QEhABaBWUGZgFkBWQGhAFaB2QHZAiEAFoIZQlkCWQKhACDAVoKZQtqDGQLZAyEAIMBWg1kDVMAKQ7aClR5cGVDb2VyY2VhvgEAAFJlcHJlc2VudCBhIFB5dGhvbi1zaWRlIHR5cGUtY29lcmNpb24gd3JhcHBlci4KCiAgICA6Y2xhc3M6YC5UeXBlQ29lcmNlYCBzdXBwbGllcyB0aGUgOmZ1bmM6YC5leHByZXNzaW9uLnR5cGVfY29lcmNlYAogICAgZnVuY3Rpb247IHNlZSB0aGF0IGZ1bmN0aW9uIGZvciB1c2FnZSBkZXRhaWxzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4xIFRoZSA6ZnVuYzpgLnR5cGVfY29lcmNlYCBmdW5jdGlvbiBub3cgcHJvZHVjZXMKICAgICAgIGEgcGVyc2lzdGVudCA6Y2xhc3M6YC5UeXBlQ29lcmNlYCB3cmFwcGVyIG9iamVjdCByYXRoZXIgdGhhbgogICAgICAgdHJhbnNsYXRpbmcgdGhlIGdpdmVuIG9iamVjdCBpbiBwbGFjZS4KCiAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgOmZ1bmM6YC5leHByZXNzaW9uLnR5cGVfY29lcmNlYAoKICAgICAgICA6ZnVuYzpgLmNhc3RgCgogICAgWgt0eXBlX2NvZXJjZWMDAAAAAAAAAAMAAAAEAAAAQwAAAHMgAAAAdACgAXwCoQF8AF8CdAN8AXwAagJkAY0CfABfBGQCUwApA2FMCQAAQXNzb2NpYXRlIGEgU1FMIGV4cHJlc3Npb24gd2l0aCBhIHBhcnRpY3VsYXIgdHlwZSwgd2l0aG91dCByZW5kZXJpbmcKICAgICAgICBgYENBU1RgYC4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IHR5cGVfY29lcmNlCgogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFsKICAgICAgICAgICAgICAgIHR5cGVfY29lcmNlKGxvZ190YWJsZS5kYXRlX3N0cmluZywgU3RyaW5nRGF0ZVRpbWUoKSkKICAgICAgICAgICAgXSkKCiAgICAgICAgVGhlIGFib3ZlIGNvbnN0cnVjdCB3aWxsIHByb2R1Y2UgYSA6Y2xhc3M6YC5UeXBlQ29lcmNlYCBvYmplY3QsIHdoaWNoCiAgICAgICAgcmVuZGVycyBTUUwgdGhhdCBsYWJlbHMgdGhlIGV4cHJlc3Npb24sIGJ1dCBvdGhlcndpc2UgZG9lcyBub3QKICAgICAgICBtb2RpZnkgaXRzIHZhbHVlIG9uIHRoZSBTUUwgc2lkZTo6CgogICAgICAgICAgICBTRUxFQ1QgZGF0ZV9zdHJpbmcgQVMgYW5vbl8xIEZST00gbG9nCgogICAgICAgIFdoZW4gcmVzdWx0IHJvd3MgYXJlIGZldGNoZWQsIHRoZSBgYFN0cmluZ0RhdGVUaW1lYGAgdHlwZQogICAgICAgIHdpbGwgYmUgYXBwbGllZCB0byByZXN1bHQgcm93cyBvbiBiZWhhbGYgb2YgdGhlIGBgZGF0ZV9zdHJpbmdgYCBjb2x1bW4uCiAgICAgICAgVGhlIHJhdGlvbmFsZSBmb3IgdGhlICJhbm9uXzEiIGxhYmVsIGlzIHNvIHRoYXQgdGhlIHR5cGUtY29lcmNlZAogICAgICAgIGNvbHVtbiByZW1haW5zIHNlcGFyYXRlIGluIHRoZSBsaXN0IG9mIHJlc3VsdCBjb2x1bW5zIHZzLiBvdGhlcgogICAgICAgIHR5cGUtY29lcmNlZCBvciBkaXJlY3QgdmFsdWVzIG9mIHRoZSB0YXJnZXQgY29sdW1uLiAgSW4gb3JkZXIgdG8KICAgICAgICBwcm92aWRlIGEgbmFtZWQgbGFiZWwgZm9yIHRoZSBleHByZXNzaW9uLCB1c2UKICAgICAgICA6bWV0aDpgLkNvbHVtbkVsZW1lbnQubGFiZWxgOjoKCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoWwogICAgICAgICAgICAgICAgdHlwZV9jb2VyY2UoCiAgICAgICAgICAgICAgICAgICAgbG9nX3RhYmxlLmRhdGVfc3RyaW5nLCBTdHJpbmdEYXRlVGltZSgpKS5sYWJlbCgnZGF0ZScpCiAgICAgICAgICAgIF0pCgoKICAgICAgICBBIHR5cGUgdGhhdCBmZWF0dXJlcyBib3VuZC12YWx1ZSBoYW5kbGluZyB3aWxsIGFsc28gaGF2ZSB0aGF0IGJlaGF2aW9yCiAgICAgICAgdGFrZSBlZmZlY3Qgd2hlbiBsaXRlcmFsIHZhbHVlcyBvciA6ZnVuYzpgLmJpbmRwYXJhbWAgY29uc3RydWN0cyBhcmUKICAgICAgICBwYXNzZWQgdG8gOmZ1bmM6YC50eXBlX2NvZXJjZWAgYXMgdGFyZ2V0cy4KICAgICAgICBGb3IgZXhhbXBsZSwgaWYgYSB0eXBlIGltcGxlbWVudHMgdGhlCiAgICAgICAgOm1ldGg6YC5UeXBlRW5naW5lLmJpbmRfZXhwcmVzc2lvbmAKICAgICAgICBtZXRob2Qgb3IgOm1ldGg6YC5UeXBlRW5naW5lLmJpbmRfcHJvY2Vzc29yYCBtZXRob2Qgb3IgZXF1aXZhbGVudCwKICAgICAgICB0aGVzZSBmdW5jdGlvbnMgd2lsbCB0YWtlIGVmZmVjdCBhdCBzdGF0ZW1lbnQgY29tcGlsYXRpb24vZXhlY3V0aW9uCiAgICAgICAgdGltZSB3aGVuIGEgbGl0ZXJhbCB2YWx1ZSBpcyBwYXNzZWQsIGFzIGluOjoKCiAgICAgICAgICAgICMgYm91bmQtdmFsdWUgaGFuZGxpbmcgb2YgTXlTdHJpbmdUeXBlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUKICAgICAgICAgICAgIyBsaXRlcmFsIHZhbHVlICJzb21lIHN0cmluZyIKICAgICAgICAgICAgc3RtdCA9IHNlbGVjdChbdHlwZV9jb2VyY2UoInNvbWUgc3RyaW5nIiwgTXlTdHJpbmdUeXBlKV0pCgogICAgICAgIDpmdW5jOmAudHlwZV9jb2VyY2VgIGlzIHNpbWlsYXIgdG8gdGhlIDpmdW5jOmAuY2FzdGAgZnVuY3Rpb24sCiAgICAgICAgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgcmVuZGVyIHRoZSBgYENBU1RgYCBleHByZXNzaW9uIGluIHRoZSByZXN1bHRpbmcKICAgICAgICBzdGF0ZW1lbnQuCgogICAgICAgIDpwYXJhbSBleHByZXNzaW9uOiBBIFNRTCBleHByZXNzaW9uLCBzdWNoIGFzIGEgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAKICAgICAgICAgZXhwcmVzc2lvbiBvciBhIFB5dGhvbiBzdHJpbmcgd2hpY2ggd2lsbCBiZSBjb2VyY2VkIGludG8gYSBib3VuZAogICAgICAgICBsaXRlcmFsIHZhbHVlLgoKICAgICAg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cxQAAAB0AHQBfAGDAXQCagNkAWQCjQNTACkDYVoEAABQcm9kdWNlIHRoZSBgYE5VTExTIEZJUlNUYGAgbW9kaWZpZXIgZm9yIGFuIGBgT1JERVIgQllgYCBleHByZXNzaW9uLgoKICAgICAgICA6ZnVuYzpgLm51bGxzZmlyc3RgIGlzIGludGVuZGVkIHRvIG1vZGlmeSB0aGUgZXhwcmVzc2lvbiBwcm9kdWNlZAogICAgICAgIGJ5IDpmdW5jOmAuYXNjYCBvciA6ZnVuYzpgLmRlc2NgLCBhbmQgaW5kaWNhdGVzIGhvdyBOVUxMIHZhbHVlcwogICAgICAgIHNob3VsZCBiZSBoYW5kbGVkIHdoZW4gdGhleSBhcmUgZW5jb3VudGVyZWQgZHVyaW5nIG9yZGVyaW5nOjoKCgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGRlc2MsIG51bGxzZmlyc3QKCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW3VzZXJzX3RhYmxlXSkuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJfYnkobnVsbHNmaXJzdChkZXNjKHVzZXJzX3RhYmxlLmMubmFtZSkpKQoKICAgICAgICBUaGUgU1FMIGV4cHJlc3Npb24gZnJvbSB0aGUgYWJvdmUgd291bGQgcmVzZW1ibGU6OgoKICAgICAgICAgICAgU0VMRUNUIGlkLCBuYW1lIEZST00gdXNlciBPUkRFUiBCWSBuYW1lIERFU0MgTlVMTFMgRklSU1QKCiAgICAgICAgTGlrZSA6ZnVuYzpgLmFzY2AgYW5kIDpmdW5jOmAuZGVzY2AsIDpmdW5jOmAubnVsbHNmaXJzdGAgaXMgdHlwaWNhbGx5CiAgICAgICAgaW52b2tlZCBmcm9tIHRoZSBjb2x1bW4gZXhwcmVzc2lvbiBpdHNlbGYgdXNpbmcKICAgICAgICA6bWV0aDpgLkNvbHVtbkVsZW1lbnQubnVsbHNmaXJzdGAsIHJhdGhlciB0aGFuIGFzIGl0cyBzdGFuZGFsb25lCiAgICAgICAgZnVuY3Rpb24gdmVyc2lvbiwgYXMgaW46OgoKICAgICAgICAgICAgc3RtdCA9IChzZWxlY3QoW3VzZXJzX3RhYmxlXSku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AAByFwAAANoLX2NyZWF0ZV9hc2MICwAAcwgAAAAAIgIBBgEEAXobVW5hcnlFeHByZXNzaW9uLl9jcmVhdGVfYXNjYwIAAAAAAAAAAgAAAAYAAABDAAAAcxwAAAB0AHwBgwF9AXQBfAF0AmoDfAFqBGQBZAKNBFMAKQNhcwQAAFByb2R1Y2UgYW4gY29sdW1uLWV4cHJlc3Npb24tbGV2ZWwgdW5hcnkgYGBESVNUSU5DVGBgIGNsYXVzZS4KCiAgICAgICAgVGhpcyBhcHBsaWVzIHRoZSBgYERJU1RJTkNUYGAga2V5d29yZCB0byBhbiBpbmRpdmlkdWFsIGNvbHVtbgogICAgICAgIGV4cHJlc3Npb24sIGFuZCBpcyB0eXBpY2FsbHkgY29udGFpbmVkIHdpdGhpbiBhbiBhZ2dyZWdhdGUgZnVuY3Rpb24sCiAgICAgICAgYXMgaW46OgoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBkaXN0aW5jdCwgZnVuYwogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFtmdW5jLmNvdW50KGRpc3RpbmN0KHVzZXJzX3RhYmxlLmMubmFtZSkpXSkKCiAgICAgICAgVGhlIGFib3ZlIHdvdWxkIHByb2R1Y2UgYW4gZXhwcmVzc2lvbiByZXNlbWJsaW5nOjoKCiAgICAgICAgICAgIFNFTEVDVCBDT1VOVChESVNUSU5DVCBuYW1lKSBGUk9NIHVzZXIKCiAgICAgICAgVGhlIDpmdW5jOmAuZGlzdGluY3RgIGZ1bmN0aW9uIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgY29sdW1uLWxldmVsCiAgICAgICAgbWV0aG9kLCBlLmcuIDptZXRoOmAuQ29sdW1uRWxlbWVudC5kaXN0aW5jdGAsIGFzIGluOjoKCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW2Z1bmMuY291bnQodXNlcnNfdGFibGUuYy5uYW1lLmRpc3RpbmN0KCkpXSkKCiAgICAgICAgVGhlIDpmdW5jOmAuZGlzdGluY3RgIG9wZXJhdG9yIGlzIGRpZmZlcmVudCBmcm9tIHRoZQogICAgICAgIDptZXRoOmAuU2VsZWN0LmRpc3RpbmN0YCBtZXRob2Qgb2Yg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T1dfTlVNQkVSKCkgT1ZFUihPUkRFUiBCWSBzb21lX2NvbHVtbikKCiAgICAgICAgUmFuZ2VzIGFyZSBhbHNvIHBvc3NpYmxlIHVzaW5nIHRoZSA6cGFyYW1yZWY6YC5leHByZXNzaW9uLm92ZXIucmFuZ2VfYAogICAgICAgIGFuZCA6cGFyYW1yZWY6YC5leHByZXNzaW9uLm92ZXIucm93c2AgcGFyYW1ldGVycy4gIFRoZXNlCiAgICAgICAgbXV0dWFsbHktZXhjbHVzaXZlIHBhcmFtZXRlcnMgZWFjaCBhY2NlcHQgYSAyLXR1cGxlLCB3aGljaCBjb250YWlucwogICAgICAgIGEgY29tYmluYXRpb24gb2YgaW50ZWdlcnMgYW5kIE5vbmU6OgoKICAgICAgICAgICAgZnVuYy5yb3dfbnVtYmVyKCkub3ZlcigKICAgICAgICAgICAgICAgIG9yZGVyX2J5PW15X3RhYmxlLmMuc29tZV9jb2x1bW4sIHJhbmdlXz0oTm9uZSwgMCkpCgogICAgICAgIFRoZSBhYm92ZSB3b3VsZCBwcm9kdWNlOjoKCiAgICAgICAgICAgIFJPV19OVU1CRVIoKSBPVkVSKE9SREVSIEJZIHNvbWVfY29sdW1uCiAgICAgICAgICAgIFJBTkdFIEJFVFdFRU4gVU5CT1VOREVEIFBSRUNFRElORyBBTkQgQ1VSUkVOVCBST1cpCgogICAgICAgIEEgdmFsdWUgb2YgTm9uZSBpbmRpY2F0ZXMgInVuYm91bmRlZCIsIGEKICAgICAgICB2YWx1ZSBvZiB6ZXJvIGluZGljYXRlcyAiY3VycmVudCByb3ciLCBhbmQgbmVnYXRpdmUgLyBwb3NpdGl2ZQogICAgICAgIGludGVnZXJzIGluZGljYXRlICJwcmVjZWRpbmciIGFuZCAiZm9sbG93aW5nIjoKCiAgICAgICAgKiBSQU5HRSBCRVRXRUVOIDUgUFJFQ0VESU5HIEFORCAxMCBGT0xMT1dJTkc6OgoKICAgICAgICAgICAgZnVuYy5yb3dfbnVtYmVyKCkub3ZlcihvcmRlcl9ieT0neCcsIHJhbmdlXz0oLTUsIDEwKSkKCiAgICAgICAgKiBST1dTIEJFVFdFRU4gVU5CT1VOREVEIFBSRUNFRElORyBBTkQgQ1VSUkVOVCBST1c6OgoKICAgICAgICAgICAgZnVuYy5yb3dfbnVtYmVyKCkub3ZlcihvcmRlcl9ieT0neCcsIHJvd3M9KE5vbmUsIDApKQoKICAgICAgICAqIFJBTkdFIEJFVFdFRU4gMiBQUkVDRURJTkcgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkc6OgoKICAgICAgICAgICAgZnVuYy5yb3dfbnVtYmVyKCkub3ZlcihvcmRlcl9ieT0neCcsIHJhbmdlXz0oLTIsIE5vbmUpKQoKICAgICAgICAqIFJBTkdFIEJFVFdFRU4gMSBGT0xMT1dJTkcgQU5EIDMgRk9MTE9XSU5HOjoKCiAgICAgICAgICAgIGZ1bmMucm93X251bWJlcigpLm92ZXIob3JkZXJfYnk9J3gnLCByYW5nZV89KDEsIDMpKQoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEgc3VwcG9ydCBmb3IgUkFOR0UgLyBST1dTIHdpdGhpbiBhIHdpbmRvdwoKCiAgICAgICAgOnBhcmFtIGVsZW1lbnQ6IGEgOmNsYXNzOmAuRnVuY3Rpb25FbGVtZW50YCwgOmNsYXNzOmAuV2l0aGluR3JvdXBgLAogICAgICAgICBvciBvdGhlciBjb21wYXRpYmxlIGNvbnN0cnVjdC4KICAgICAgICA6cGFyYW0gcGFydGl0aW9uX2J5OiBhIGNvbHVtbiBlbGVtZW50IG9yIHN0cmluZywgb3IgYSBsaXN0CiAgICAgICAgIG9mIHN1Y2gsIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBQQVJUSVRJT04gQlkgY2xhdXNlCiAgICAgICAgIG9mIHRoZSBPVkVSIGNvbnN0cnVjdC4KICAgICAgICA6cGFyYW0gb3JkZXJfYnk6IGEgY29sdW1uIGVsZW1lbnQgb3Igc3RyaW5nLCBvciBhIGxpc3QKICAgICAgICAgb2Ygc3VjaCwgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIE9SREVSIEJZIGNsYXVzZQogICAgICAgICBvZiB0aGUgT1ZFUiBjb25zdHJ1Y3QuCiAgICAgICAgOnBhcmFtIHJhbmdlXF86IG9wdGlvbmFsIHJhbmdlIGNsYXVzZSBmb3IgdGhlIHdpbmRvdy4gIFRoaXMgaXMgYQogICAgICAgICB0dXBsZSB2YWx1ZSB3aGljaCBjYW4gY29udGFpbiBpbnRlZ2VyIHZhbHVlcyBvciBOb25lLCBhbmQgd2lsbAogICAgICAgICByZW5kZXIgYSBSQU5HRSBCRVRXRUVOIFBSRUNFRElORyAvIEZPTExPV0lORyBjbGF1c2UKCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMQoKICAgICAgICA6cGFyYW0gcm93czogb3B0aW9uYWwgcm93cyBjbGF1c2UgZm9yIHRoZSB3aW5kb3cuICBUaGlzIGlzIGEgdHVwbGUKICAgICAgICAgdmFsdWUgd2hpY2ggY2FuIGNvbnRhaW4gaW50ZWdlciB2YWx1ZXMgb3IgTm9uZSwgYW5kIHdpbGwgcmVuZGVyCiAgICAgICAgIGEgUk9XUyBCRVRXRUVOIFBSRUNFRElORyAvIEZPTExPV0lORyBjbGF1c2UuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEKCiAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBmcm9tIHRoZSA6ZGF0YTpgfi5leHByZXNzaW9uLmZ1bmNgCiAgICAgICAgY29uc3RydWN0IGl0c2VsZiB2aWEgdGhlIDptZXRoOmAuRnVuY3Rpb25FbGVtZW50Lm92ZXJgIG1ldGhvZC4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6ZGF0YTpgLmV4cHJlc3Npb24uZnVuY2AKCiAgICAgICAgICAgIDpmdW5jOmAuZXhwcmVzc2lvbi53aXRoaW5fZ3JvdXBgCgogICAgICAgIE5y/wAAAHoqJ3JhbmdlXycgYW5kICdyb3dzJyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlKQxyFAAAAHL7AAAAchIAAADaB3RvX2xpc3RyLQEAANoIb3JkZXJfYnnaDHBhcnRpdGlvbl9iedoQX2ludGVycHJldF9yYW5nZdoGcmFuZ2VfchAAAAByVQAAANoEcm93cykGcjgAAAByFAAAAHJWAQAAclUBAAByWAEAAHJZAQAAchYAAAByFgAAAHIXAAAAcssAAADTDAAAcyYAAAAAUwYBCAECAQoBCgII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bGFzczpgLldpdGhpbkdyb3VwYCBvYmplY3QgYWdhaW5zdCBhIGZ1bmN0aW9uLgoKICAgICAgICBVc2VkIGFnYWluc3Qgc28tY2FsbGVkICJvcmRlcmVkIHNldCBhZ2dyZWdhdGUiIGFuZCAiaHlwb3RoZXRpY2FsCiAgICAgICAgc2V0IGFnZ3JlZ2F0ZSIgZnVuY3Rpb25zLCBpbmNsdWRpbmcgOmNsYXNzOmAucGVyY2VudGlsZV9jb250YCwKICAgICAgICA6Y2xhc3M6YC5yYW5rYCwgOmNsYXNzOmAuZGVuc2VfcmFua2AsIGV0Yy4KCiAgICAgICAgOmZ1bmM6YH4uZXhwcmVzc2lvbi53aXRoaW5fZ3JvdXBgIGlzIHVzdWFsbHkgY2FsbGVkIHVzaW5nCiAgICAgICAgdGhlIDptZXRoOmAuRnVuY3Rpb25FbGVtZW50LndpdGhpbl9ncm91cGAgbWV0aG9kLCBlLmcuOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgd2l0aGluX2dyb3VwCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoWwogICAgICAgICAgICAgICAgZGVwYXJ0bWVudC5jLmlkLAogICAgICAgICAgICAgICAgZnVuYy5wZXJjZW50aWxlX2NvbnQoMC41KS53aXRoaW5fZ3JvdXAoCiAgICAgICAgICAgICAgICAgICAgZGVwYXJ0bWVudC5jLnNhbGFyeS5kZXNjKCkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgXSkKCiAgICAgICAgVGhlIGFib3ZlIHN0YXRlbWVudCB3b3VsZCBwcm9kdWNlIFNRTCBzaW1pbGFyIHRvCiAgICAgICAgYGBTRUxFQ1QgZGVwYXJ0bWVudC5pZCwgcGVyY2VudGlsZV9jb250KDAuNSkKICAgICAgICBXSVRISU4gR1JPVVAgKE9SREVSIEJZIGRlcGFydG1lbnQuc2FsYXJ5IERFU0MpYGAuCgogICAgICAgIDpwYXJhbSBlbGVtZW50OiBhIDpjbGFzczpgLkZ1bmN0aW9uRWxlbWVudGAgY29uc3RydWN0LCB0eXBpY2FsbHkKICAgICAgICAgZ2VuZXJhdGVkIGJ5IDpkYXRhOmB+LmV4cHJl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YXNzOmAuQ29sdW1uYCBvYmplY3QuICBXaGlsZSB0aGUgOmNsYXNzOmAuQ29sdW1uYCBjbGFzcyBoYXMgYWxsIHRoZQogICAgc2FtZSBjYXBhYmlsaXRpZXMgYXMgOmNsYXNzOmAuQ29sdW1uQ2xhdXNlYCwgdGhlIDpjbGFzczpgLkNvbHVtbkNsYXVzZWAKICAgIGNsYXNzIGlzIHVzYWJsZSBieSBpdHNlbGYgaW4gdGhvc2UgY2FzZXMgd2hlcmUgYmVoYXZpb3JhbCByZXF1aXJlbWVudHMKICAgIGFyZSBsaW1pdGVkIHRvIHNpbXBsZSBTUUwgZXhwcmVzc2lvbiBnZW5lcmF0aW9uLiAgVGhlIG9iamVjdCBoYXMgbm9uZSBvZgogICAgdGhlIGFzc29jaWF0aW9ucyB3aXRoIHNjaGVtYS1sZXZlbCBtZXRhZGF0YSBvciB3aXRoIGV4ZWN1dGlvbi10aW1lCiAgICBiZWhhdmlvciB0aGF0IDpjbGFzczpgLkNvbHVtbmAgZG9lcywgc28gaW4gdGhhdCBzZW5zZSBpcyBhICJsaWdodHdlaWdodCIKICAgIHZlcnNpb24gb2YgOmNsYXNzOmAuQ29sdW1uYC4KCiAgICBGdWxsIGRldGFpbHMgb24gOmNsYXNzOmAuQ29sdW1uQ2xhdXNlYCB1c2FnZSBpcyBhdCA6ZnVuYzpgLmNvbHVtbmAuCgogICAgLi4gc2VlYWxzbzo6CgogICAgICAgIDpmdW5jOmAuY29sdW1uYAoKICAgICAgICA6Y2xhc3M6YC5Db2x1bW5gCgogICAgci4BAABORmMFAAAAAAAAAAUAAAADAAAAQwAAAHMoAAAAfAEEAHwAXwB8AF8BfAR8AF8CdAOgBHwCoQF8AF8FfAN8AF8GZAFTACkCYUMMAABQcm9kdWNlIGEgOmNsYXNzOmAuQ29sdW1uQ2xhdXNlYCBvYmplY3QuCgogICAgICAgIFRoZSA6Y2xhc3M6YC5Db2x1bW5DbGF1c2VgIGlzIGEgbGlnaHR3ZWlnaHQgYW5hbG9ndWUgdG8gdGhlCiAgICAgICAgOmNsYXNzOmAuQ29sdW1uYCBjbGFzcy4gIFRoZSA6ZnVuYzpgLmNvbHVtbmAgZnVuY3Rpb24gY2FuCiAgICAgICAgYmUgaW52b2tlZCB3aXRoIGp1c3QgYSBuYW1lIGFsb25lLCBhcyBpbjo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGNvbHVtbgoKICAgICAgICAgICAgaWQsIG5hbWUgPSBjb2x1bW4oImlkIiksIGNvbHVtbigibmFtZSIpCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW2lkLCBuYW1lXSkuc2VsZWN0X2Zyb20oInVzZXIiKQoKICAgICAgICBUaGUgYWJvdmUgc3RhdGVtZW50IHdvdWxkIHByb2R1Y2UgU1FMIGxpa2U6OgoKICAgICAgICAgICAgU0VMRUNUIGlkLCBuYW1lIEZST00gdXNlcgoKICAgICAgICBPbmNlIGNvbnN0cnVjdGVkLCA6ZnVuYzpgLmNvbHVtbmAgbWF5IGJlIHVzZWQgbGlrZSBhbnkgb3RoZXIgU1FMCiAgICAgICAgZXhwcmVzc2lvbiBlbGVtZW50IHN1Y2ggYXMgd2l0aGluIDpmdW5jOmAuc2VsZWN0YCBjb25zdHJ1Y3RzOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteS5zcWwgaW1wb3J0IGNvbHVtbgoKICAgICAgICAgICAgaWQsIG5hbWUgPSBjb2x1bW4oImlkIiksIGNvbHVtbigibmFtZSIpCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW2lkLCBuYW1lXSkuc2VsZWN0X2Zyb20oInVzZXIiKQoKICAgICAgICBUaGUgdGV4dCBoYW5kbGVkIGJ5IDpmdW5jOmAuY29sdW1uYCBpcyBhc3N1bWVkIHRvIGJlIGhhbmRsZWQKICAgICAgICBsaWtlIHRoZSBuYW1lIG9mIGEgZGF0YWJhc2UgY29sdW1uOyBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG1peGVkIGNhc2UsCiAgICAgICAgc3BlY2lhbCBjaGFyYWN0ZXJzLCBvciBtYXRjaGVzIGEga25vd24gcmVzZXJ2ZWQgd29yZCBvbiB0aGUgdGFyZ2V0CiAgICAgICAgYmFja2VuZCwgdGhlIGNvbHVtbiBleHByZXNzaW9uIHdpbGwgcmVuZGVyIHVzaW5nIHRoZSBxdW90aW5nCiAgICAgICAgYmVoYXZpb3IgZGV0ZXJtaW5lZCBieSB0aGUgYmFja2VuZC4gIFRvIHByb2R1Y2UgYSB0ZXh0dWFsIFNRTAogICAgICAgIGV4cHJlc3Npb24gdGhhdCBpcyByZW5kZXJlZCBleGFjdGx5IHdpdGhvdXQgYW55IHF1b3RpbmcsCiAgICAgICAgdXNlIDpmdW5jOmAubGl0ZXJhbF9jb2x1bW5gIGluc3RlYWQsIG9yIHBhc3MgYGBUcnVlYGAgYXMgdGhlCiAgICAgICAgdmFsdWUgb2YgOnBhcmFtcmVmOmAuY29sdW1uLmlzX2xpdGVyYWxgLiAgIEFkZGl0aW9uYWxseSwgZnVsbCBTUUwKICAgICAgICBzdGF0ZW1lbnRzIGFyZSBiZXN0IGhhbmRsZWQgdXNpbmcgdGhlIDpmdW5jOmAudGV4dGAgY29uc3RydWN0LgoKICAgICAgICA6ZnVuYzpgLmNvbHVtbmAgY2FuIGJlIHVzZWQgaW4gYSB0YWJsZS1saWtlCiAgICAgICAgZmFzaGlvbiBieSBjb21iaW5pbmcgaXQgd2l0aCB0aGUgOmZ1bmM6YC50YWJsZWAgZnVuY3Rpb24KICAgICAgICAod2hpY2ggaXMgdGhlIGxpZ2h0d2VpZ2h0IGFuYWxvZ3VlIHRvIDpjbGFzczpgLlRhYmxlYCkgdG8gcHJvZHVjZQogICAgICAgIGEgd29ya2luZyB0YWJsZSBjb25zdHJ1Y3Qgd2l0aCBtaW5pbWFsIGJvaWxlcnBsYXRlOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgdGFibGUsIGNvbHVtbiwgc2VsZWN0CgogICAgICAgICAgICB1c2VyID0gdGFibGUoInVzZXIiLAogICAgICAgICAgICAgICAgICAgIGNvbHVtbigiaWQiKSwKICAgICAgICAgICAgICAgICAgICBjb2x1bW4oIm5hbWUiKSwKICAgICAgICAgICAgICAgICAgICBjb2x1bW4oImRlc2NyaXB0aW9uIiksCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW3VzZXIuYy5kZXNjcmlwdGlvbl0pLndoZXJlKHVzZXIuYy5uYW1lID09ICd3ZW5keScpCgogICAgICAgIEEgOmZ1bmM6YC5jb2x1bW5gIC8gOmZ1bmM6YC50YWJsZWAgY29uc3RydWN0IGxpa2UgdGhhdCBpbGx1c3RyYXRlZAogICAgICAgIGFib3ZlIGNhbiBiZSBjcmVhdGVkIGluIGFuCiAgICAgICAgYWQtaG9jIGZhc2hpb24gYW5kIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55CiAgICAgICAgOmNsYXNzOmAuc2NoZW1hLk1ldGFEYXRhYCwgRERMLCBvciBldmVudHMsIHVubGlrZSBpdHMKICAgICAgICA6Y2xhc3M6YC5UYWJsZWAgY291bnRlcnBhcnQuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4wLjAgOmZ1bmM6YC5leHByZXNzaW9uLmNvbHVtbmAgY2FuIG5vdwogICAgICAgICAgIGJlIGltcG9ydGVkIGZyb20gdGhlIHBsYWluIGBgc3FsYWxjaGVteWBgIG5hbWVzcGFjZSBsaWtlIGFueQogICAgICAgICAgIG90aGVyIFNRTCBlbGVtZW50LgoKICAgICAgICA6cGFyYW0gdGV4dDogdGhlIHRleHQgb2YgdGhlIGVsZW1lbnQuCgogICAgICAgIDpwYXJhbSB0eXBlOiA6Y2xhc3M6YC50eXBlcy5UeXBlRW5naW5lYCBvYmplY3Qgd2hpY2ggY2FuIGFzc29jaWF0ZQogICAgICAgICAgdGhpcyA6Y2xhc3M6YC5Db2x1bW5DbGF1c2VgIHdpdGggYSB0eXBlLgoKICAgICAgICA6cGFyYW0gaXNfbGl0ZXJhbDogaWYgVHJ1ZSwgdGhlIDpjbGFzczpgLkNvbHVtbkNsYXVzZWAgaXMgYXNzdW1lZCB0bwogICAgICAgICAgYmUgYW4gZXhhY3QgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZSBvdXRwdXQgd2l0aCBubwogICAgICAgICAgcXVvdGluZyBydWxlcyBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgY2FzZSBzZW5zaXRpdmUgc2V0dGluZ3MuIHRoZQogICAgICAgICAgOmZ1bmM6YC5saXRlcmFsX2NvbHVtbigpYCBmdW5jdGlvbiBlc3NlbnRpYWxseSBpbnZva2VzCiAgICAgICAgICA6ZnVuYzpgLmNv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ZWBgIG9yIGBgRmFsc2VgYCwgb3ZlcnJpZGVzIGF1dG9tYXRpYyBxdW90aW5nIGJlaGF2aW9yCiAgICBmb3IgdGhpcyBpZGVudGlmaWVyIGluIG9yZGVyIHRvIGVpdGhlciB1bmNvbmRpdGlvbmFsbHkgcXVvdGUKICAgIG9yIHRvIG5vdCBxdW90ZSB0aGUgbmFtZS4gIElmIGxlZnQgYXQgaXRzIGRlZmF1bHQgb2YgYGBOb25lYGAsCiAgICBxdW90aW5nIGJlaGF2aW9yIGlzIGFwcGxpZWQgdG8gdGhlIGlkZW50aWZpZXIgb24gYSBwZXItYmFja2VuZCBiYXNpcwogICAgYmFzZWQgb24gYW4gZXhhbWluYXRpb24gb2YgdGhlIHRva2VuIGl0c2VsZi4KCiAgICBBIDpjbGFzczpgLnF1b3RlZF9uYW1lYCBvYmplY3Qgd2l0aCBgYHF1b3RlPVRydWVgYCBpcyBhbHNvCiAgICBwcmV2ZW50ZWQgZnJvbSBiZWluZyBtb2RpZmllZCBpbiB0aGUgY2FzZSBvZiBhIHNvLWNhbGxlZAogICAgIm5hbWUgbm9ybWFsaXplIiBvcHRpb24uICBDZXJ0YWluIGRhdGFiYXNlIGJhY2tlbmRzLCBzdWNoIGFzCiAgICBPcmFjbGUsIEZpcmViaXJkLCBhbmQgREIyICJub3JtYWxpemUiIGNhc2UtaW5zZW5zaXRpdmUgbmFtZXMKICAgIGFzIHVwcGVyY2FzZS4gIFRoZSBTUUxBbGNoZW15IGRpYWxlY3RzIGZvciB0aGVzZSBiYWNrZW5kcwogICAgY29udmVydCBmcm9tIFNRTEFsY2hlbXkncyBsb3dlci1jYXNlLW1lYW5zLWluc2Vuc2l0aXZlIGNvbnZlbnRpb24KICAgIHRvIHRoZSB1cHBlci1jYXNlLW1lYW5zLWluc2Vuc2l0aXZlIGNvbnZlbnRpb25zIG9mIHRob3NlIGJhY2tlbmRzLgogICAgVGhlIGBgcXVvdGU9VHJ1ZWBgIGZsYWcgaGVyZSB3aWxsIHByZXZlbnQgdGhpcyBjb252ZXJzaW9uIGZyb20gb2NjdXJyaW5nCiAgICB0byBzdXBwb3J0IGFuIGlkZW50aWZpZXIgdGhhdCdzIHF1b3RlZCBhcyBhbGwgbG93ZXIgY2FzZSBhZ2FpbnN0CiAgICBzdWNoIGEgYmFja2VuZC4KCiAgICBUaGUgOmNsYXNzOmAucXVvdGVkX25hbWVgIG9iamVjdCBpcyBub3JtYWxseSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkKICAgIHdoZW4gc3BlY2lmeWluZyB0aGUgbmFtZSBmb3Iga2V5IHNjaGVtYSBjb25zdHJ1Y3RzIHN1Y2ggYXMKICAgIDpjbGFzczpgLlRhYmxlYCwgOmNsYXNzOmAuQ29sdW1uYCwgYW5kIG90aGVycy4gIFRoZSBjbGFzcyBjYW4gYWxzbyBiZQogICAgcGFzc2VkIGV4cGxpY2l0bHkgYXMgdGhlIG5hbWUgdG8gYW55IGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYSBuYW1lIHdoaWNoCiAgICBjYW4gYmUgcXVvdGVkLiAgU3VjaCBhcyB0byB1c2UgdGhlIDptZXRoOmAuRW5naW5lLmhhc190YWJsZWAgbWV0aG9kIHdpdGgKICAgIGFuIHVuY29uZGl0aW9uYWxseSBxdW90ZWQgbmFtZTo6CgogICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgY3JlYXRlX2VuZ2luZQogICAgICAgIGZyb20gc3FsYWxjaGVteS5zcWwgaW1wb3J0IHF1b3RlZF9uYW1lCgogICAgICAgIGVuZ2luZSA9IGNyZWF0ZV9lbmdpbmUoIm9yYWNsZStjeF9vcmFjbGU6Ly9zb21lX2RzbiIpCiAgICAgICAgZW5naW5lLmhhc190YWJsZShxdW90ZWRfbmFtZSgic29tZV90YWJsZSIsIFRydWUpKQoKICAgIFRoZSBhYm92ZSBsb2dpYyB3aWxsIHJ1biB0aGUgImhhcyB0YWJsZSIgbG9naWMgYWdhaW5zdCB0aGUgT3JhY2xlIGJhY2tlbmQsCiAgICBwYXNzaW5nIHRoZSBuYW1lIGV4YWN0bHkgYXMgYGAic29tZV90YWJsZSJgYCB3aXRob3V0IGNvbnZlcnRpbmcgdG8KICAgIHVwcGVyIGNhc2UuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMC45LjAKCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDEuMiBUaGUgOmNsYXNzOmAucXVvdGVkX25hbWVgIGNv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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 19
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
annotation.cpython-37.pyc
5.57 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
base.cpython-37.pyc
23.16 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
compiler.cpython-37.pyc
93.70 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
crud.cpython-37.pyc
15.01 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ddl.cpython-37.pyc
36.50 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
default_comparator.cpython-37.pyc
7.21 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
dml.cpython-37.pyc
31.66 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
elements.cpython-37.pyc
146.00 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
expression.cpython-37.pyc
6.47 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
functions.cpython-37.pyc
32.50 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
naming.cpython-37.pyc
4.67 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
operators.cpython-37.pyc
45.37 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
schema.cpython-37.pyc
142.91 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
selectable.cpython-37.pyc
122.08 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
sqltypes.cpython-37.pyc
86.91 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
type_api.cpython-37.pyc
47.55 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
util.cpython-37.pyc
23.63 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
visitors.cpython-37.pyc
10.00 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
3.02 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).