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IElmCiAgICBgYGNvbWJpbmVgYCBpcyBzZXQgdG8gYGBUcnVlYGAsIHRoZSBtYXRjaGluZyB0b2tlbnMgYXJlCiAgICByZXR1cm5lZCBhcyBhIHNpbmdsZSB0b2tlbiBzdHJpbmcsIHdpdGggdGhlIGRlbGltaXRlcnMgaW5jbHVkZWQ7CiAgICBvdGhlcndpc2UsIHRoZSBtYXRjaGluZyB0b2tlbnMgYXJlIHJldHVybmVkIGFzIGEgbGlzdCBvZiB0b2tlbnMsCiAgICB3aXRoIHRoZSBkZWxpbWl0ZXJzIHN1cHByZXNzZWQuCgogICAgSWYgYGBhbGxvd190cmFpbGluZ19kZWxpbWBgIGlzIHNldCB0byBUcnVlLCB0aGVuIHRoZSBsaXN0IG1heSBlbmQgd2l0aAogICAgYSBkZWxpbWl0ZXIuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGRlbGltaXRlZF9saXN0KFdvcmQoYWxwaGFzKSkucGFyc2Vfc3RyaW5nKCJhYSxiYixjYyIpICMgLT4gWydhYScsICdiYicsICdjYyddCiAgICAgICAgZGVsaW1pdGVkX2xpc3QoV29yZChoZXhudW1zKSwgZGVsaW09JzonLCBjb21iaW5lPVRydWUpLnBhcnNlX3N0cmluZygiQUE6QkI6Q0M6REQ6RUUiKSAjIC0+IFsnQUE6QkI6Q0M6REQ6RUUnXQogICAgeh97ZXhwcn0gW3tkZWxpbX0ge2V4cHJ9XS4uLntlbmR9egUgW3t9XdoAKQNyCgAAAHILAAAA2gNlbmROcgIAAAB6Gm1pbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAweiltYXggbXVzdCBiZSBncmVhdGVyIHRoYW4sIG9yIGVxdWFsIHRvIG1pbikN2gppc2luc3RhbmNl2ghzdHJfdHlwZdoNUGFyc2VyRWxlbWVudNoTX2xpdGVyYWxTdHJpbmdDbGFzc9oGZm9ybWF02gNzdHLaBGNvcHnaCnN0cmVhbWxpbmXaCFN1cHByZXNz2gpWYWx1ZUVycm9y2gNPcHTaB0NvbWJpbmXaCHNldF9uYW1lKQhyCgAAAHILAAAAcgwAAAByDQAAAHIOAAAAcgkAAADaBmRsTmFtZdoTZGVsaW1pdGVkX2xpc3RfZXhwcqkAciEAAAD6ZC9ob21lL3Bpb3Ryby9jYXJhdmVsX3VzZXJfcHJvamVjdC92ZW52L2xpYi9weXRob24zLjEwL3NpdGUtcGFja2FnZXMvcGlwL192ZW5kb3IvcHlwYXJzaW5nL2hlbHBlcnMucHnaDmRlbGltaXRlZF9saXN0DgAAAHMuAAAAChoKAQQCDgEGARQBBv0EBggBCAIIAQgBCAEIARABCAEIARQBBAIMAQQCDgEKAnIjAAAAKQHaB2ludEV4cHLaCGludF9leHByciQAAABjAgAAAAAAAAABAAAABAAAAAUAAAADAAAAc3IAAAB8AnADfAF9AnQAgwCJAIcAhwFmAmQBZAKECH0DfAJkA3UAchx0AXQCgwGgA2QEZAWEAKEBfQJuBHwCoAShAH0CfAKgBWQGoQEBAHwCagZ8A2QHZAiNAgEAfAKIABcAoAVkCXQHiAGDARcAZAoXAKEBUwApC2F+BQAASGVscGVyIHRvIGRlZmluZSBhIGNvdW50ZWQgbGlzdCBvZiBleHByZXNzaW9ucy4KCiAgICBUaGlzIGhlbHBlciBkZWZpbmVzIGEgcGF0dGVybiBvZiB0aGUgZm9ybTo6CgogICAgICAgIGludGVnZXIgZXhwciBleHByIGV4cHIuLi4KCiAgICB3aGVyZSB0aGUgbGVhZGluZyBpbnRlZ2VyIHRlbGxzIGhvdyBtYW55IGV4cHIgZXhwcmVzc2lvbnMgZm9sbG93LgogICAgVGhlIG1hdGNoZWQgdG9rZW5zIHJldHVybnMgdGhlIGFycmF5IG9mIGV4cHIgdG9rZW5zIGFzIGEgbGlzdCAtIHRoZQogICAgbGVhZGluZyBjb3VudCB0b2tlbiBpcyBzdXBwcmVzc2VkLgoKICAgIElmIGBgaW50X2V4cHJgYCBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBiZSBhIHB5cGFyc2luZyBleHByZXNzaW9uCiAgICB0aGF0IHByb2R1Y2VzIGFuIGludGVnZXIgdmFsdWUuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGNvdW50ZWRfYXJyYXkoV29yZChhbHBoYXMpKS5wYXJzZV9zdHJpbmcoJzIgYWIgY2QgZWYnKSAgIyAtPiBbJ2FiJywgJ2NkJ10KCiAgICAgICAgIyBpbiB0aGlzIHBhcnNlciwgdGhlIGxlYWRpbmcgaW50ZWdlciB2YWx1ZSBpcyBnaXZlbiBpbiBiaW5hcnksCiAgICAgICAgIyAnMTAnIGluZGljYXRpbmcgdGhhdCAyIHZhbHVlcyBhcmUgaW4gdGhlIGFycmF5CiAgICAgICAgYmluYXJ5X2NvbnN0YW50ID0gV29yZCgnMDEnKS5zZXRfcGFyc2VfYWN0aW9uKGxhbWJkYSB0OiBpbnQodFswXSwgMikpCiAgICAgICAgY291bnRlZF9hcnJheShXb3JkKGFscGhhcyksIGludF9leHByPWJpbmFyeV9jb25zdGFudCkucGFyc2Vfc3RyaW5nKCcxMCBhYiBjZCBlZicpICAjIC0+IFsnYWInLCAnY2QnXQoKICAgICAgICAjIGlmIG90aGVyIGZpZWxkcyBtdXN0IGJlIHBhcnNlZCBhZnRlciB0aGUgY291bnQgYnV0IGJlZm9yZSB0aGUKICAgICAgICAjIGxpc3QgaXRlbXMsIGdpdmUgdGhlIGZpZWxkcyByZXN1bHRzIG5hbWVzIGFuZCB0aGV5IHdpbGwKICAgICAgICAjIGJlIHByZXNlcnZlZCBpbiB0aGUgcmV0dXJuZWQgUGFyc2VSZXN1bHRzOgogICAgICAgIGNvdW50X3dpdGhfbWV0YWRhdGEgPSBpbnRlZ2VyICsgV29yZChhbHBoYXMpKCJ0eXBlIikKICAgICAgICB0eXBlZF9hcnJheSA9IGNvdW50ZWRfYXJyYXkoV29yZChhbHBoYW51bXMpLCBpbnRfZXhwcj1jb3VudF93aXRoX21ldGFkYXRhKSgiaXRlbXMiKQogICAgICAgIHJlc3VsdCA9IHR5cGVkX2FycmF5LnBhcnNlX3N0cmluZygiMyBib29sIFRydWUgVHJ1ZSBGYWxzZSIpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKCiAgICAgICAgIyBwcmludHMKICAgICAgICAjIFsnVHJ1ZScsICdUcnVlJywgJ0ZhbHNlJ10KICAgICAgICAjIC0gaXRlbXM6IFsnVHJ1ZScsICdUcnVlJywgJ0ZhbHNlJ10KICAgICAgICAjIC0gdHlwZTogJ2Jvb2wnCiAgICBjAwAAAAAAAAAAAAAABAAAAAMAAAATAAAAcywAAAB8AmQBGQB9A4gAfANy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AHwBFwCDAYMBgwFTACkBYfgFAABIZWxwZXIgdG8gZWFzaWx5IGFuZCBjbGVhcmx5IGRlZmluZSBhIGRpY3Rpb25hcnkgYnkgc3BlY2lmeWluZwogICAgdGhlIHJlc3BlY3RpdmUgcGF0dGVybnMgZm9yIHRoZSBrZXkgYW5kIHZhbHVlLiAgVGFrZXMgY2FyZSBvZgogICAgZGVmaW5pbmcgdGhlIDpjbGFzczpgRGljdGAsIDpjbGFzczpgWmVyb09yTW9yZWAsIGFuZAogICAgOmNsYXNzOmBHcm91cGAgdG9rZW5zIGluIHRoZSBwcm9wZXIgb3JkZXIuICBUaGUga2V5IHBhdHRlcm4KICAgIGNhbiBpbmNsdWRlIGRlbGltaXRpbmcgbWFya2VycyBvciBwdW5jdHVhdGlvbiwgYXMgbG9uZyBhcyB0aGV5IGFyZQogICAgc3VwcHJlc3NlZCwgdGhlcmVieSBsZWF2aW5nIHRoZSBzaWduaWZpY2FudCBrZXkgdGV4dC4gIFRoZSB2YWx1ZQogICAgcGF0dGVybiBjYW4gaW5jbHVkZSBuYW1lZCByZXN1bHRzLCBzbyB0aGF0IHRoZSA6Y2xhc3M6YERpY3RgIHJlc3VsdHMKICAgIGNhbiBpbmNsdWRlIG5hbWVkIHRva2VuIGZpZWxkcy4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wX29uPWxhYmVsKS5zZXRfcGFyc2VfYWN0aW9uKCcgJy5qb2luKSkKICAgICAgICBwcmludChhdHRyX2V4cHJbMSwgLi4uXS5wYXJzZV9zdHJpbmcodGV4dCkuZHVtcCgpKQoKICAgICAgICBhdHRyX2xhYmVsID0gbGFiZWwKICAgICAgICBhdHRyX3ZhbHVlID0gU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQsIHN0b3Bfb249bGFiZWwpLnNldF9wYXJzZV9hY3Rpb24oJyAnLmpvaW4pCgogICAgICAgICMgc2ltaWxhciB0byBEaWN0LCBidXQgc2ltcGxlciBjYWxsIGZvcm1hdAogICAgICAgIHJlc3VsdCA9IGRpY3Rfb2YoYXR0cl9sYWJlbCwgYXR0cl92YWx1ZSkucGFyc2Vfc3RyaW5nKHRleHQpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKICAgICAgICBwcmludChyZXN1bHRbJ3NoYXBlJ10pCiAgICAgICAgcHJpbnQocmVzdWx0LnNoYXBlKSAgIyBvYmplY3QgYXR0cmlidXRlIGFjY2VzcyB3b3JrcyB0b28KICAgICAgICBwcmludChyZXN1bHQuYXNfZGljdCgpKQoKICAgIHByaW50czo6CgogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBbJ2NvbG9yJywgJ2xpZ2h0IGJsdWUnXSwgWyd0ZXh0dXJlJywgJ2J1cmxhcCddXQogICAgICAgIC0gY29sb3I6ICdsaWdodCBibHVlJwogICAgICAgIC0gcG9zbjogJ3VwcGVyIGxlZnQnCiAgICAgICAgLSBzaGFwZTogJ1NRVUFSRScKICAgICAgICAtIHRleHR1cmU6ICdidXJsYXAnCiAgICAgICAgU1FVQVJFCiAgICAgICAgU1FVQVJFCiAgICAgICAgeydjb2xvcic6ICdsaWdodCBibHVlJywgJ3NoYXBlJzogJ1NRVUFSRScsICdwb3NuJzogJ3VwcGVyIGxlZnQnLCAndGV4dHVyZSc6ICdidXJsYXAnfQogICAgKQPaBERpY3TaCU9uZU9yTW9yZdoFR3JvdXApAnKSAAAAcpMAAAByIQAAAHIhAAAAciIAAADaB2RpY3Rfb2ZHAQAAcwIAAAAUJXKXAAAAKQHaCGFzU3RyaW5n2glhc19zdHJpbmdymAAAAGMCAAAAAAAAAAEAAAAHAAAABAAAAEMAAABzcgAAAHwCbwN8AX0CdACDAKABZAFkAoQAoQF9A3wDoAKhAH0EZAN8BF8DfANkBIMBfAAXAHwEZAWDARcAfQV8AnIkZAZkAoQAfQZuBGQHZAiEAH0GfAWgAXwGoQEBAHwAagR8BV8EfAWgBXQGagehAQEAfAVTACkJYRQFAABIZWxwZXIgdG8gcmV0dXJuIHRoZSBvcmlnaW5hbCwgdW50b2tlbml6ZWQgdGV4dCBmb3IgYSBnaXZlbgogICAgZXhwcmVzc2lvbi4gIFVzZWZ1bCB0byByZXN0b3JlIHRoZSBwYXJzZWQgZmllbGRzIG9mIGFuIEhUTUwgc3RhcnQKICAgIHRhZyBpbnRvIHRoZSByYXcgdGFnIHRleHQgaXRzZWxmLCBvciB0byByZXZlcnQgc2VwYXJhdGUgdG9rZW5zIHdpdGgKICAgIGludGVydmVuaW5nIHdoaXRlc3BhY2UgYmFjayB0byB0aGUgb3JpZ2luYWwgbWF0Y2hpbmcgaW5wdXQgdGV4dC4gQnkKICAgIGRlZmF1bHQsIHJldHVybnMgYXN0cmluZyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBwYXJzZWQgdGV4dC4KCiAgICBJZiB0aGUgb3B0aW9uYWwgYGBhc19zdHJpbmdgYCBhcmd1bWVudCBpcyBwYXNzZWQgYXMKICAgIGBgRmFsc2VgYCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzCiAgICBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBjb250YWluaW5nIGFueSByZXN1bHRzIG5hbWVzIHRoYXQKICAgIHdlcmUgb3JpZ2luYWxseSBtYXRjaGVkLCBhbmQgYSBzaW5nbGUgdG9rZW4gY29udGFpbmluZyB0aGUgb3JpZ2luYWwKICAgIG1hdGNoZWQgdGV4dCBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuICBTbyBpZiB0aGUgZXhwcmVzc2lvbiBwYXNzZWQgdG8KICAgIDpjbGFzczpgb3JpZ2luYWxfdGV4dF9mb3JgIGNvbnRhaW5zIGV4cHJlc3Npb25zIHdpdGggZGVmaW5lZAogICAgcmVzdWx0cyBuYW1lcywgeW91IG11c3Qgc2V0IGBgYXNfc3RyaW5nYGAgdG8gYGBGYWxzZWBgIGlmIHlvdQogICAgd2FudCB0byBwcmVzZXJ2ZSB0aG9zZSByZXN1bHRzIG5hbWUgdmFsdWVzLgoKICAgIFRoZSBgYGFzU3RyaW5nYGAgcHJlLVBFUDggYXJndW1lbnQgaXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHksCiAg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aXRlcnMKICAgICAgKGRlZmF1bHQ9IDpjbGFzczpgcXVvdGVkX3N0cmluZ2ApCiAgICAtIGBgaWdub3JlRXhwcmBgIC0gdGhpcyBwcmUtUEVQOCBhcmd1bWVudCBpcyByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eQogICAgICBidXQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UKCiAgICBJZiBhbiBleHByZXNzaW9uIGlzIG5vdCBwcm92aWRlZCBmb3IgdGhlIGNvbnRlbnQgYXJndW1lbnQsIHRoZQogICAgbmVzdGVkIGV4cHJlc3Npb24gd2lsbCBjYXB0dXJlIGFsbCB3aGl0ZXNwYWNlLWRlbGltaXRlZCBjb250ZW50CiAgICBiZXR3ZWVuIGRlbGltaXRlcnMgYXMgYSBsaXN0IG9mIHNlcGFyYXRlIHZhbHVlcy4KCiAgICBVc2UgdGhlIGBgaWdub3JlX2V4cHJgYCBhcmd1bWVudCB0byBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBtYXkKICAgIGNvbnRhaW4gb3BlbmluZyBvciBjbG9zaW5nIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMKICAgIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIGZvciBuZXN0aW5nLCBzdWNoIGFzIHF1b3RlZF9zdHJpbmcgb3IKICAgIGEgY29tbWVudCBleHByZXNzaW9uLiAgU3BlY2lmeSBtdWx0aXBsZSBleHByZXNzaW9ucyB1c2luZyBhbgogICAgOmNsYXNzOmBPcmAgb3IgOmNsYXNzOmBNYXRjaEZpcnN0YC4gVGhlIGRlZmF1bHQgaXMKICAgIDpjbGFzczpgcXVvdGVkX3N0cmluZ2AsIGJ1dCBpZiBubyBleHByZXNzaW9ucyBhcmUgdG8gYmUgaWdub3JlZCwgdGhlbgogICAgcGFzcyBgYE5vbmVgYCBmb3IgdGhpcyBhcmd1bWVudC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YV90eXBlID0gb25lX29mKCJ2b2lkIGludCBzaG9ydCBsb25nIGNoYXIgZmxvYXQgZG91YmxlIikKICAgICAgICBkZWNsX2RhdGFfdHlwZSA9IENvbWJpbmUoZGF0YV90eXBlICsgT3B0KFdvcmQoJyonKSkpCiAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcysnXycsIGFscGhhbnVtcysnXycpCiAgICAgICAgbnVtYmVyID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIKICAgICAgICBhcmcgPSBHcm91cChkZWNsX2RhdGFfdHlwZSArIGlkZW50KQogICAgICAgIExQQVIsIFJQQVIgPSBtYXAoU3VwcHJlc3MsICIoKSIpCgogICAgICAgIGNvZGVfYm9keSA9IG5lc3RlZF9leHByKCd7JywgJ30nLCBpZ25vcmVfZXhwcj0ocXVvdGVkX3N0cmluZyB8IGNfc3R5bGVfY29tbWVudCkpCgogICAgICAgIGNfZnVuY3Rpb24gPSAoZGVjbF9kYXRhX3R5cGUoInR5cGUiKQogICAgICAgICAgICAgICAgICAgICAgKyBpZGVudCgibmFtZSIpCiAgICAgICAgICAgICAgICAgICAgICArIExQQVIgKyBPcHQoZGVsaW1pdGVkX2xpc3QoYXJnKSwgW10pKCJhcmdzIikgKyBSUEFSCiAgICAgICAgICAgICAgICAgICAgICArIGNvZGVfYm9keSgiYm9keSIpKQogICAgICAgIGNfZnVuY3Rpb24uaWdub3JlKGNfc3R5bGVfY29tbWVudCkKCiAgICAgICAgc291cmNlX2NvZGUgPSAnJycKICAgICAgICAgICAgaW50IGlzX29kZChpbnQgeCkgewogICAgICAgICAgICAgICAgcmV0dXJuICh4JTIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnQgZGVjX3RvX2hleChjaGFyIGhjaGFyKSB7CiAgICAgICAgICAgICAgICBpZiAoaGNoYXIgPj0gJzAnICYmIGhjaGFyIDw9ICc5JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAob3JkKGhjaGFyKS1vcmQoJzAnKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoMTArb3JkKGhjaGFyKS1vcmQoJ0EnKSk7CiAgICAgICAgICAgICAgICB9CiAg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bmQgY2xvc2luZyB0YWcgZXhwcmVzc2lvbnMgZm9yIEhUTUwsCiAgICBnaXZlbiBhIHRhZyBuYW1lLiBNYXRjaGVzIHRhZ3MgaW4gZWl0aGVyIHVwcGVyIG9yIGxvd2VyIGNhc2UsCiAgICBhdHRyaWJ1dGVzIHdpdGggbmFtZXNwYWNlcyBhbmQgd2l0aCBxdW90ZWQgb3IgdW5xdW90ZWQgdmFsdWVzLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICB0ZXh0ID0gJzx0ZD5Nb3JlIGluZm8gYXQgdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9weXBhcnNpbmcvcHlwYXJzaW5nL3dpa2kiPnB5cGFyc2luZzwvYT4gd2lraSBwYWdlPC90ZD4nCiAgICAgICAgIyBtYWtlX2h0bWxfdGFncyByZXR1cm5zIHB5cGFyc2luZyBleHByZXNzaW9ucyBmb3IgdGhlIG9wZW5pbmcgYW5kCiAgICAgICAgIyBjbG9zaW5nIHRhZ3MgYXMgYSAyLXR1cGxlCiAgICAgICAgYSwgYV9lbmQgPSBtYWtlX2h0bWxfdGFncygiQSIpCiAgICAgICAgbGlua19leHByID0gYSArIFNraXBUbyhhX2VuZCkoImxpbmtfdGV4dCIpICsgYV9lbmQKCiAgICAgICAgZm9yIGxpbmsgaW4gbGlua19leHByLnNlYXJjaF9zdHJpbmcodGV4dCk6CiAgICAgICAgICAgICMgYXR0cmlidXRlcyBpbiB0aGUgPEE+IHRhZyAobGlrZSAiaHJlZiIgc2hvd24gaGVyZSkgYXJlCiAgICAgICAgICAgICMgYWxzbyBhY2Nlc3NpYmxlIGFzIG5hbWVkIHJlc3VsdHMKICAgICAgICAgICAgcHJpbnQobGluay5saW5rX3RleHQsICctPicsIGxpbmsuaHJlZikKCiAgICBwcmludHM6OgoKICAgICAgICBweXBhcnNpbmcgLT4gaHR0cHM6Ly9naXRodWIuY29tL3B5cGFyc2luZy9weXBhcnNpbmcvd2lraQogICAgRqkBcucAAACpAXLoAAAAciEAAAByIQAAAHIiAAAA2g5tYWtlX2h0bWxfdGFnc4gCAABzAgAAAAoYcuwAAABjAQAAAAAAAAAAAAAAAQAAAAMA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IHVwIG9mCiAgICBvcGVyYXRvcnMgd29ya2luZyBpbiBhIHByZWNlZGVuY2UgaGllcmFyY2h5LiAgT3BlcmF0b3JzIG1heSBiZSB1bmFyeQogICAgb3IgYmluYXJ5LCBsZWZ0LSBvciByaWdodC1hc3NvY2lhdGl2ZS4gIFBhcnNlIGFjdGlvbnMgY2FuIGFsc28gYmUKICAgIGF0dGFjaGVkIHRvIG9wZXJhdG9yIGV4cHJlc3Npb25zLiBUaGUgZ2VuZXJhdGVkIHBhcnNlciB3aWxsIGFsc28KICAgIHJlY29nbml6ZSB0aGUgdXNlIG9mIHBhcmVudGhlc2VzIHRvIG92ZXJyaWRlIG9wZXJhdG9yIHByZWNlZGVuY2VzCiAgICAoc2VlIGV4YW1wbGUgYmVsb3cpLgoKICAgIE5vdGU6IGlmIHlvdSBkZWZpbmUgYSBkZWVwIG9wZXJhdG9yIGxpc3QsIHlvdSBtYXkgc2VlIHBlcmZvcm1hbmNlCiAgICBpc3N1ZXMgd2hlbiB1c2luZyBpbmZpeF9ub3RhdGlvbi4gU2VlCiAgICA6Y2xhc3M6YFBhcnNlckVsZW1lbnQuZW5hYmxlX3BhY2tyYXRgIGZvciBhIG1lY2hhbmlzbSB0byBwb3RlbnRpYWxseQogICAgaW1wcm92ZSB5b3VyIHBhcnNlciBwZXJmb3JtYW5jZS4KCiAgICBQYXJhbWV0ZXJzOgogICAgLSBgYGJhc2VfZXhwcmBgIC0gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIG1vc3QgYmFzaWMgb3BlcmFuZCB0bwogICAgICBiZSB1c2VkIGluIHRoZSBleHByZXNzaW9uCiAgICAtIGBgb3BfbGlzdGBgIC0gbGlzdCBvZiB0dXBsZXMsIG9uZSBmb3IgZWFjaCBvcGVyYXRvciBwcmVjZWRlbmNlIGxldmVsCiAgICAgIGluIHRoZSBleHByZXNzaW9uIGdyYW1tYXI7IGVhY2ggdHVwbGUgaXMgb2YgdGhlIGZvcm0gYGAob3BfZXhwciwKICAgICAgbnVtX29wZXJhbmRzLCByaWdodF9sZWZ0X2Fzc29jLCAob3B0aW9uYWwpcGFyc2VfYWN0aW9uKWBgLCB3aGVyZToKCiAgICAgIC0gYGBvcF9leHByYGAgaXMgdGhlIHB5cGFyc2luZyBleHByZXNzaW9uIGZvciB0aGUgb3BlcmF0b3I7IG1heSBhbHNvCiAgICAgICAgYmUgYSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgTGl0ZXJhbDsgaWYgYGBudW1fb3BlcmFuZHNgYAogICAgICAgIGlzIDMsIGBgb3BfZXhwcmBgIGlzIGEgdHVwbGUgb2YgdHdvIGV4cHJlc3Npb25zLCBmb3IgdGhlIHR3bwogICAgICAgIG9wZXJhdG9ycyBzZXBhcmF0aW5nIHRoZSAzIHRlcm1zCiAgICAgIC0gYGBudW1fb3BlcmFuZHNgYCBpcyB0aGUgbnVtYmVyIG9mIHRlcm1zIGZvciB0aGlzIG9wZXJhdG9yIChtdXN0IGJlIDEsCiAgICAgICAgMiwgb3IgMykKICAgICAgLSBgYHJpZ2h0X2xlZnRfYXNzb2NgYCBpcyB0aGUgaW5kaWNhdG9yIHdoZXRoZXIgdGhlIG9wZXJhdG9yIGlzIHJpZ2h0CiAgICAgICAgb3IgbGVmdCBhc3NvY2lhdGl2ZSwgdXNpbmcgdGhlIHB5cGFyc2luZy1kZWZpbmVkIGNvbnN0YW50cwogICAgICAgIGBgT3BBc3NvYy5SSUdIVGBgIGFuZCBgYE9wQXNzb2MuTEVGVGBgLgogICAgICAtIGBgcGFyc2VfYWN0aW9uYGAgaXMgdGhlIHBhcnNlIGFjdGlvbiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKICAgICAgICBleHByZXNzaW9ucyBtYXRjaGluZyB0aGlzIG9wZXJhdG9yIGV4cHJlc3Npb24gKHRoZSBwYXJzZSBhY3Rpb24KICAgICAgICB0dXBsZSBtZW1iZXIgbWF5IGJlIG9taXR0ZWQpOyBpZiB0aGUgcGFyc2UgYWN0aW9uIGlzIHBhc3NlZAogICAgICAgIGEgdHVwbGUgb3IgbGlzdCBvZiBmdW5jdGlvbnMsIHRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCiAgICAgICAgYGBzZXRfcGFyc2VfYWN0aW9uKCpmbilgYAogICAgICAgICg6Y2xhc3M6YFBhcnNlckVsZW1lbnQuc2V0X3BhcnNlX2FjdGlvbmApCiAgICAtIGBgbHBhcmBgIC0gZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVmdC1wYXJlbnRoZXNlczsgaWYgcGFzc2VkIGFzIGEKICAgICAgc3RyLCB0aGVuIHdpbGwgYmUgcGFyc2VkIGFzIFN1cHByZXNzKGxwYXIpLiBJZiBscGFyIGlzIHBhc3NlZCBhcwogICAgICBhbiBleHByZXNzaW9uIChzdWNoIGFzIGBgTGl0ZXJhbCgnKCcpYGApLCB0aGVuIGl0IHdpbGwgYmUga2VwdCBpbgogICAgICB0aGUgcGFyc2VkIHJlc3VsdHMsIGFuZCBncm91cGVkIHdpdGggdGhlbS4gKGRlZmF1bHQ9IGBgU3VwcHJlc3MoJygnKWBgKQogICAgLSBgYHJwYXJgYCAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIHJpZ2h0LXBhcmVudGhlc2VzOyBpZiBwYXNzZWQgYXMgYQogICAgICBzdHIsIHRoZW4gd2lsbCBiZSBwYXJzZWQgYXMgU3VwcHJlc3MocnBhcikuIElmIHJwYXIgaXMgcGFzc2VkIGFzCiAgICAgIGFuIGV4cHJlc3Npb24gKHN1Y2ggYXMgYGBMaXRlcmFsKCcpJylgYCksIHRoZW4gaXQgd2lsbCBiZSBrZXB0IGluCiAgICAgIHRoZSBwYXJzZWQgcmVzdWx0cywgYW5kIGdyb3VwZWQgd2l0aCB0aGVtLiAoZGVmYXVsdD0gYGBTdXBwcmVzcygnKScpYGApCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgc2ltcGxlIGV4YW1wbGUgb2YgZm91ci1mdW5jdGlvbiBhcml0aG1ldGljIHdpdGggaW50cyBhbmQKICAgICAgICAjIHZhcmlhYmxlIG5hbWVzCiAgICAgICAgaW50ZWdlciA9IHB5cGFyc2luZ19jb21tb24uc2lnbmVkX2ludGVnZXIKICAgICAgICB2YXJuYW1lID0gcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyCgogICAgICAgIGFyaXRoX2V4cHIgPSBpbmZpeF9ub3RhdGlvbihpbnRlZ2VyIHwgdmFybmFtZSwKICAgICAgICAgICAgWwogICAgICAgICAgICAoJy0nLCAxLCBPcEFzc29jLlJJR0hUKSwKICAgICAgICAgICAg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dXNlIEluZGVudGVkQmxvY2sgY2xhc3MgaW5zdGVhZCkKICAgIEhlbHBlciBtZXRob2QgZm9yIGRlZmluaW5nIHNwYWNlLWRlbGltaXRlZCBpbmRlbnRhdGlvbiBibG9ja3MsCiAgICBzdWNoIGFzIHRob3NlIHVzZWQgdG8gZGVmaW5lIGJsb2NrIHN0YXRlbWVudHMgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLgoKICAgIFBhcmFtZXRlcnM6CgogICAgLSBgYGJsb2NrU3RhdGVtZW50RXhwcmBgIC0gZXhwcmVzc2lvbiBkZWZpbmluZyBzeW50YXggb2Ygc3RhdGVtZW50IHRoYXQKICAgICAgaXMgcmVwZWF0ZWQgd2l0aGluIHRoZSBpbmRlbnRlZCBibG9jawogICAgLSBgYGluZGVudFN0YWNrYGAgLSBsaXN0IGNyZWF0ZWQgYnkgY2FsbGVyIHRvIG1hbmFnZSBpbmRlbnRhdGlvbiBzdGFjawogICAgICAobXVsdGlwbGUgYGBzdGF0ZW1lbnRXaXRoSW5kZW50ZWRCbG9ja2BgIGV4cHJlc3Npb25zIHdpdGhpbiBhIHNpbmdsZQogICAgICBncmFtbWFyIHNob3VsZCBzaGFyZSBhIGNvbW1vbiBgYGluZGVudFN0YWNrYGApCiAgICAtIGBgaW5kZW50YGAgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBibG9jayBtdXN0IGJlIGluZGVudGVkIGJleW9uZAogICAgICB0aGUgY3VycmVudCBsZXZlbDsgc2V0IHRvIGBgRmFsc2VgYCBmb3IgYmxvY2sgb2YgbGVmdC1tb3N0IHN0YXRlbWVudHMKICAgICAgKGRlZmF1bHQ9IGBgVHJ1ZWBgKQoKICAgIEEgdmFsaWQgYmxvY2sgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBgYGJsb2NrU3RhdGVtZW50YGAuCgogICAgKE5vdGUgdGhhdCBpbmRlbnRlZEJsb2NrIHVzZXMgaW50ZXJuYWwgcGFyc2UgYWN0aW9ucyB3aGljaCBtYWtlIGl0CiAgICBpbmNvbXBhdGlibGUgd2l0aCBwYWNrcmF0IHBhcnNpbmcuKQoKICAgIEV4YW1wbGU6OgoKICAgICAgICBkYXRhID0gJycnCiAgICAgICAgZGVmIEEoeik6CiAgICAgICAgICBBMQogICAgICAgICAgQiA9IDEwMAogICAgICAgICAgRyA9IEEyCiAgICAgICAgICBBMgogICAgICAgICAgQTMKICAgICAgICBCCiAgICAgICAgZGVmIEJCKGEsYixjKToKICAgICAgICAgIEJCMQogICAgICAgICAgZGVmIEJCQSgpOgogICAgICAgICAgICBiYmExCiAgICAgICAgICAgIGJiYTIKICAgICAgICAgICAgYmJhMwogICAgICAgIEMKICAgICAgICBECiAgICAgICAgZGVmIHNwYW0oeCx5KToKICAgICAgICAgICAgIGRlZiBlZ2dzKHopOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAnJycKCgogICAgICAgIGluZGVudFN0YWNrID0gWzFdCiAgICAgICAgc3RtdCA9IEZvcndhcmQoKQoKICAgICAgICBpZGVudGlmaWVyID0gV29yZChhbHBoYXMsIGFscGhhbnVtcykKICAgICAgICBmdW5jRGVjbCA9ICgiZGVmIiArIGlkZW50aWZpZXIgKyBHcm91cCgiKCIgKyBPcHQoZGVsaW1pdGVkTGlzdChpZGVudGlmaWVyKSkgKyAiKSIpICsgIjoiKQogICAgICAgIGZ1bmNfYm9keSA9IGluZGVudGVkQmxvY2soc3RtdCwgaW5kZW50U3RhY2spCiAgICAgICAgZnVuY0RlZiA9IEdyb3VwKGZ1bmNEZWNsICsgZnVuY19ib2R5KQoKICAgICAgICBydmFsdWUgPSBGb3J3YXJkKCkKICAgICAgICBmdW5jQ2FsbCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiKCIgKyBPcHQoZGVsaW1pdGVkTGlzdChydmFsdWUpKSArICIpIikKICAgICAgICBydmFsdWUgPDwgKGZ1bmNDYWxsIHwgaWRlbnRpZmllciB8IFdvcmQobnVtcykpCiAgICAgICAgYXNzaWdubWVudCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiPSIgKyBydmFsdWUpCiAgICAgICAgc3RtdCA8PCAoZnVuY0RlZiB8IGFzc2lnbm1lbnQgfCBpZGVudGlmaWVyKQoKICAgICAgICBtb2R1bGVfYm9keSA9IHN0bXRbMSwgLi4uXQoKICAgICAgICBwYXJzZVRyZWUgPSBtb2R1bGVfYm9keS5wYXJzZVN0cmluZyhkYXRhKQogICAgICAgIHBhcnNlVHJlZS5wcHJpbnQoKQoKICAgIHByaW50czo6CgogICAgICAgIFtbJ2RlZicsCiAgICAgICAgICAnQScsCiAgICAgICAgICBbJygnLCAneicsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydBMSddLCBbWydCJywgJz0nLCAnMTAwJ11dLCBbWydHJywgJz0nLCAnQTInXV0sIFsnQTInXSwgWydBMyddXV0sCiAgICAgICAgICdCJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ0JCJywKICAgICAgICAgIFsnKCcsICdhJywgJ2InLCAnYycsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydCQjEnXSwgW1snZGVmJywgJ0JCQScsIFsnKCcsICcpJ10sICc6JywgW1snYmJhMSddLCBbJ2JiYTInXSwgWydiYmEzJ11dXV1dXSwKICAgICAgICAgJ0MnLAogICAgICAgICAnRCcsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdzcGFtJywKICAgICAgICAgIFsnKCcsICd4JywgJ3knLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAgW1tbJ2RlZicsICdlZ2dzJywgWycoJywgJ3onLCAnKSddLCAnOicsIFtbJ3Bhc3MnXV1dXV1dXQogICAgTmMAAAAAAAAAAAAAAAAAAAAABAAAABMAAABzFAAAAIgAZAEZAIgBZABkAIUCPABkAFMAqQJO6f////9yIQAAAHIhAAAAKQLaDWJhY2t1cF9zdGFja3PaC2luZGVudFN0YWNrciEAAAByIgAAANoLcmVzZXRfc3RhY2vTAwAAcwIAAAAUAXoiaW5kZW50ZWRCbG9jay48bG9jYWxzPi5yZXNldF9zdGFja2MDAAAAAAAAAAAAAAAEAAAABAAAABMAAABzTgAAAHwBdAB8AIMBawVyCGQAUwB0AXwBfACDAn0DfAOIAGQBGQBrA3IlfAOIAGQBGQBrBHIfdAJ8AHwBZAKDA4IBdAJ8AHwBZAOD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dGF0aW9uc19fcjYAAABy2AAAAHLZAAAAch4AAABy7gAAAHLvAAAA2ghlbnRpdGllc9oFaHRtbDXaBWl0ZW1zcvQAAAByhAAAAHKDAAAA2hJjb21tb25faHRtbF9lbnRpdHly9wAAANoERW51bXL4AAAA2hxJbmZpeE5vdGF0aW9uT3BlcmF0b3JBcmdUeXBl2gtQYXJzZUFjdGlvbtoZSW5maXhOb3RhdGlvbk9wZXJhdG9yU3BlY9oETGlzdHIYAQAAcjUBAAByHQAAANoPY19zdHlsZV9jb21tZW502gxodG1sX2NvbW1lbnTaEGxlYXZlX3doaXRlc3BhY2XaDHJlc3Rfb2ZfbGluZdoRZGJsX3NsYXNoX2NvbW1lbnTaEWNwcF9zdHlsZV9jb21tZW502hJqYXZhX3N0eWxlX2NvbW1lbnTaFHB5dGhvbl9zdHlsZV9jb21tZW502gR2YXJz2gZ2YWx1ZXNyNwEAANoNZGVsaW1pdGVkTGlzdNoMY291bnRlZEFycmF52hRtYXRjaFByZXZpb3VzTGl0ZXJhbNoRbWF0Y2hQcmV2aW91c0V4cHLaBW9uZU9m2gZkaWN0T2baD29yaWdpbmFsVGV4dEZvctoKbmVzdGVkRXhwctoMbWFrZUhUTUxUYWdz2gttYWtlWE1MVGFnc9oKYW55T3BlblRhZ9oLYW55Q2xvc2VUYWfaEGNvbW1vbkhUTUxFbnRpdHnaEXJlcGxhY2VIVE1MRW50aXR52gdvcEFzc29j2g1pbmZpeE5vdGF0aW9u2g1jU3R5bGVDb21tZW502gtodG1sQ29tbWVudNoKcmVzdE9mTGluZdoPZGJsU2xhc2hDb21tZW502g9jcHBTdHlsZUNvbW1lbnTaEGphdmFTdHlsZUNvbW1lbnTaEnB5dGhvblN0eWxlQ29tbWVudHIhAAAAciEAAAByIQAAAHIiAAAA2gg8bW9kdWxlPgEAAABzjAEAAAoBCAEIAQwCCAEUAQIIAgECAQIBAvsCBwb5CgEC/woCAv4CAwL9CAQC/AgFAvsCBwL5AggK+AI7Av4CBAb8AgEC/wgCAv4IBAL8AgUK+xI8EiECJgIBAgEC/AIGAgEG+RABAv8CAgL+AgMC/QIEAvwCBgL6AgcC+QIICvgWfwIpAv8CAQb/AgEC/wIBAv8CAQL/AgIK/hI1EgcCJAIBAgEEAQL8BAYG+goBAv8KAgL+CAMC/QIEAvwCBgL6AgcK+QB/FgECOgoBAv8KAgr+AhsKAQL/CgIK/ggLCAECARIBCP8WBBYBAgEE/wgFEAUCBSABBP8CAwIBAgECAQIBCAEC/QL/AgYCAQIBAgEC/gL/AvoE/wYSBgEE/AIBAv8GAgL+CgMC/QoEAvwCBQr7AH8OJgB/EBECAQT/AgMOAgIBEgIOAQIBAgIOAQL/BgIC/gIDBAICAQ4CAgEGBQgBEv8EBgQBBAEEAQQBBAEEAQQBBAEEAQoBBAEEAQQBBAEEAQQBBAEEAQQBBAEIAQ==