1688054433
waR3U4bTeM%3A20921cd4521b3b6cb4f67d409a189aa9-27e4cb06a56890f507148ff29b311a5c
s:275480:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MTk6IlRva2VuaXplcyBQSFAgY29kZS4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mzp7aTowO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvciI6NDp7czo3OiIAKgBuYW1lIjtzOjY6ImF1dGhvciI7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEF1dGhvcgBhdXRob3JOYW1lIjtzOjEzOiJHcmVnIFNoZXJ3b29kIjtzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvckVtYWlsIjtzOjE5OiJnc2hlcndvb2RAc3F1aXoubmV0IjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo5OiJjb3B5cmlnaHQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjQ0OiIyMDA2LTIwMTUgU3F1aXogUHR5IEx0ZCAoQUJOIDc3IDA4NCA2NzAgNjAwKSI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MjtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xHZW5lcmljIjoyOntzOjc6IgAqAG5hbWUiO3M6NzoibGljZW5zZSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6ODA6Imh0dHBzOi8vZ2l0aHViLmNvbS9zcXVpemxhYnMvUEhQX0NvZGVTbmlmZmVyL2Jsb2IvbWFzdGVyL2xpY2VuY2UudHh0IEJTRCBMaWNlbmNlIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6MDoiIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQAbmFtZXNwYWNlQWxpYXNlcyI7YTowOnt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBoYXNoIjtzOjMyOiIyN2U0Y2IwNmE1Njg5MGY1MDcxNDhmZjI5YjMxMWE1YyI7czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lIjtzOjc6IlBIUC5waHAiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czo1NToidmVuZG9yL3NxdWl6bGFicy9waHBfY29kZXNuaWZmZXIvc3JjL1Rva2VuaXplcnMvUEhQLnBocCI7czo0MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBzb3VyY2UiO3M6MTQ0OTgzOiI8P3BocAovKioKICogVG9rZW5pemVzIFBIUCBjb2RlLgogKgogKiBAYXV0aG9yICAgIEdyZWcgU2hlcndvb2QgPGdzaGVyd29vZEBzcXVpei5uZXQ+CiAqIEBjb3B5cmlnaHQgMjAwNi0yMDE1IFNxdWl6IFB0eSBMdGQgKEFCTiA3NyAwODQgNjcwIDYwMCkKICogQGxpY2Vuc2UgICBodHRwczovL2dpdGh1Yi5jb20vc3F1aXpsYWJzL1BIUF9Db2RlU25pZmZlci9ibG9iL21hc3Rlci9saWNlbmNlLnR4dCBCU0QgTGljZW5jZQogKi8KCm5hbWVzcGFjZSBQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyczsKCnVzZSBQSFBfQ29kZVNuaWZmZXJcVXRpbDsKCmNsYXNzIFBIUCBleHRlbmRzIFRva2VuaXplcgp7CgogICAgLyoqCiAgICAgKiBBIGxpc3Qgb2YgdG9rZW5zIHRoYXQgYXJlIGFsbG93ZWQgdG8gb3BlbiBhIHNjb3BlLgogICAgICoKICAgICAqIFRoaXMgYXJyYXkgYWxzbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGtpbmQgb2YgdG9rZW4gdGhlIHNjb3BlCiAgICAgKiBvcGVuZXIgdXNlcyB0byBvcGVuIGFuZCBjbG9zZSB0aGUgc2NvcGUsIGlmIHRoZSB0b2tlbiBzdHJpY3RseSByZXF1aXJlcwogICAgICogYW4gb3BlbmVyLCBpZiB0aGUgdG9rZW4gY2FuIHNoYXJlIGEgc2NvcGUgY2xvc2VyLCBhbmQgd2hvIGl0IGNhbiBiZSBzaGFyZWQKICAgICAqIHdpdGguIEFuIGV4YW1wbGUgb2YgYSB0b2tlbiB0aGF0IHNoYXJlcyBhIHNjb3BlIGNsb3NlciBpcyBhIENBU0Ugc2NvcGUuCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgJHNjb3BlT3BlbmVycyA9IFsKICAgICAgICBUX0lGICAgICAgICAgICAgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbCiAgICAgICAgICAgICAgICBUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVCwKICAgICAgICAgICAgICAgIFRfQ09MT04gICAgICAgICAgICAgID0+IFRfQ09MT04sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdlbmQnICAgID0+IFsKICAgICAgICAgICAgICAgIFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgICAgICAgICBUX0VORElGICAgICAgICAgICAgICAgPT4gVF9FTkRJRiwKICAgICAgICAgICAgICAgIFRfRUxTRSAgICAgICAgICAgICAgICA9PiBUX0VMU0UsCiAgICAgICAgICAgICAgICBUX0VMU0VJRiAgICAgICAgICAgICAgPT4gVF9FTFNFSUYsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdzdHJpY3QnID0+IGZhbHNlLAogICAgICAgICAgICAnc2hhcmVkJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3dpdGgnICAgPT4gWwogICAgICAgICAgICAgICAgVF9FTFNFICAgPT4gVF9FTFNFLAogICAgICAgICAgICAgICAgVF9FTFNFSUYgPT4gVF9FTFNFSUYsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgICAgICBUX1RSWSAgICAgICAgICAgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVRdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVF0sCiAgICAgICAgICAgICdzdHJpY3QnID0+IHRydWUsCiAgICAgICAgICAgICdzaGFyZWQnID0+IGZhbHNlLAogICAgICAgICAgICAnd2l0aCcgICA9PiBbXSwKICAgICAgICBdLAogICAgICAgIFRfQ0FUQ0ggICAgICAgICA9PiBbCiAgICAgICAgICAgICdzdGFydCcgID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVF0sCiAgICAgICAgICAgICdlbmQnICAgID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VUXSwKICAgICAgICAgICAgJ3N0cmljdCcgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3NoYXJlZCcgPT4gZmFsc2UsCiAgICAgICAgICAgICd3aXRoJyAgID0+IFtdLAogICAgICAgIF0sCiAgICAgICAgVF9GSU5BTExZICAgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gW1RfT1BFTl9DVVJMWV9CUkFDS0VUID0+IFRfT1BFTl9DVVJMWV9CUkFDS0VUXSwKICAgICAgICAgICAgJ2VuZCcgICAgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVRdLAogICAgICAgICAgICAnc3RyaWN0JyA9PiB0cnVlLAogICAgICAgICAgICAnc2hhcmVkJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3dpdGgnICAgPT4gW10sCiAgICAgICAgXSwKICAgICAgICBUX0VMU0UgICAgICAgICAgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbCiAgICAgICAgICAgICAgICBUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVCwKICAgICAgICAgICAgICAgIFRfQ09MT04gICAgICAgICAgICAgID0+IFRfQ09MT04sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdlbmQnICAgID0+IFsKICAgICAgICAgICAgICAgIFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgICAgICAgICBUX0VORElGICAgICAgICAgICAgICAgPT4gVF9FTkRJRiwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ3N0cmljdCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdzaGFyZWQnID0+IGZhbHNlLAogICAgICAgICAgICAnd2l0aCcgICA9PiBbCiAgICAgICAgICAgICAgICBUX0lGICAgICA9PiBUX0lGLAogICAgICAgICAgICAgICAgVF9FTFNFSUYgPT4gVF9FTFNFSUYsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgICAgICBUX0VMU0VJRiAgICAgICAgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbCiAgICAgICAgICAgICAgICBUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVCwKICAgICAgICAgICAgICAgIFRfQ09MT04gICAgICAgICAgICAgID0+IFRfQ09MT04sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdlbmQnICAgID0+IFsKICAgICAgICAgICAgICAgIFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgICAgICAgICBUX0VORElGICAgICAgICAgICAgICAgPT4gVF9FTkRJRiwKICAgICAgICAgICAgICAgIFRfRUxTRSAgICAgICAgICAgICAgICA9PiBUX0VMU0UsCiAgICAgICAgICAgICAgICBUX0VMU0VJRiAgICAgICAgICAgICAgPT4gVF9FTFNFSUYsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdzdHJpY3QnID0+IGZhbHNlLAogICAgICAgICAgICAnc2hhcmVkJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3dpdGgnICAgPT4gWwogICAgICAgICAgICAgICAgVF9JRiAgID0+IFRfSUYsCiAgICAgICAgICAgICAgICBUX0VMU0UgPT4gVF9FTFNFLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICAgICAgVF9GT1IgICAgICAgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gWwogICAgICAgICAgICAgICAgVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgICAgICAgICBUX0NPTE9OICAgICAgICAgICAgICA9PiBUX0NPTE9OLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbCiAgICAgICAgICAgICAgICBUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULAogICAgICAgICAgICAgICAgVF9FTkRGT1IgICAgICAgICAgICAgID0+IFRfRU5ERk9SLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnc3RyaWN0JyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3NoYXJlZCcgPT4gZmFsc2UsCiAgICAgICAgICAgICd3aXRoJyAgID0+IFtdLAogICAgICAgIF0sCiAgICAgICAgVF9GT1JFQUNIICAgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gWwogICAgICAgICAgICAgICAgVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgICAgICAgICBUX0NPTE9OICAgICAgICAgICAgICA9PiBUX0NPTE9OLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbCiAgICAgICAgICAgICAgICBUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULAogICAgICAgICAgICAgICAgVF9FTkRGT1JFQUNIICAgICAgICAgID0+IFRfRU5ERk9SRUFDSCwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ3N0cmljdCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdzaGFyZWQnID0+IGZhbHNlLAogICAgICAgICAgICAnd2l0aCcgICA9PiBbXSwKICAgICAgICBdLAogICAgICAgIFRfSU5URVJGQUNFICAgICA9PiBbCiAgICAgICAgICAgICdzdGFydCcgID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVF0sCiAgICAgICAgICAgICdlbmQnICAgID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VUXSwKICAgICAgICAgICAgJ3N0cmljdCcgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3NoYXJlZCcgPT4gZmFsc2UsCiAgICAgICAgICAgICd3aXRoJyAgID0+IFtdLAogICAgICAgIF0sCiAgICAgICAgVF9GVU5DVElPTiAgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gW1RfT1BFTl9DVVJMWV9CUkFDS0VUID0+IFRfT1BFTl9DVVJMWV9CUkFDS0VUXSwKICAgICAgICAgICAgJ2VuZCcgICAgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVRdLAogICAgICAgICAgICAnc3RyaWN0JyA9PiB0cnVlLAogICAgICAgICAgICAnc2hhcmVkJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3dpdGgnICAgPT4gW10sCiAgICAgICAgXSwKICAgICAgICBUX0NMQVNTICAgICAgICAgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVRdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVF0sCiAgICAgICAgICAgICdzdHJpY3QnID0+IHRydWUsCiAgICAgICAgICAgICdzaGFyZWQnID0+IGZhbHNlLAogICAgICAgICAgICAnd2l0aCcgICA9PiBbXSwKICAgICAgICBdLAogICAgICAgIFRfVFJBSVQgICAgICAgICA9PiBbCiAgICAgICAgICAgICdzdGFydCcgID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVF0sCiAgICAgICAgICAgICdlbmQnICAgID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VUXSwKICAgICAgICAgICAgJ3N0cmljdCcgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3NoYXJlZCcgPT4gZmFsc2UsCiAgICAgICAgICAgICd3aXRoJyAgID0+IFtdLAogICAgICAgIF0sCiAgICAgICAgVF9FTlVNICAgICAgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gW1RfT1BFTl9DVVJMWV9CUkFDS0VUID0+IFRfT1BFTl9DVVJMWV9CUkFDS0VUXSwKICAgICAgICAgICAgJ2VuZCcgICAgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVRdLAogICAgICAgICAgICAnc3RyaWN0JyA9PiB0cnVlLAogICAgICAgICAgICAnc2hhcmVkJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3dpdGgnICAgPT4gW10sCiAgICAgICAgXSwKICAgICAgICBUX1VTRSAgICAgICAgICAgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVRdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVF0sCiAgICAgICAgICAgICdzdHJpY3QnID0+IGZhbHNlLAogICAgICAgICAgICAnc2hhcmVkJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3dpdGgnICAgPT4gW10sCiAgICAgICAgXSwKICAgICAgICBUX0RFQ0xBUkUgICAgICAgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbCiAgICAgICAgICAgICAgICBUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVCwKICAgICAgICAgICAgICAgIFRfQ09MT04gICAgICAgICAgICAgID0+IFRfQ09MT04sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdlbmQnICAgID0+IFsKICAgICAgICAgICAgICAgIFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgICAgICAgICBUX0VORERFQ0xBUkUgICAgICAgICAgPT4gVF9FTkRERUNMQVJFLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnc3RyaWN0JyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3NoYXJlZCcgPT4gZmFsc2UsCiAgICAgICAgICAgICd3aXRoJyAgID0+IFtdLAogICAgICAgIF0sCiAgICAgICAgVF9OQU1FU1BBQ0UgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gW1RfT1BFTl9DVVJMWV9CUkFDS0VUID0+IFRfT1BFTl9DVVJMWV9CUkFDS0VUXSwKICAgICAgICAgICAgJ2VuZCcgICAgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVRdLAogICAgICAgICAgICAnc3RyaWN0JyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3NoYXJlZCcgPT4gZmFsc2UsCiAgICAgICAgICAgICd3aXRoJyAgID0+IFtdLAogICAgICAgIF0sCiAgICAgICAgVF9XSElMRSAgICAgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gWwogICAgICAgICAgICAgICAgVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgICAgICAgICBUX0NPTE9OICAgICAgICAgICAgICA9PiBUX0NPTE9OLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbCiAgICAgICAgICAgICAgICBUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULAogICAgICAgICAgICAgICAgVF9FTkRXSElMRSAgICAgICAgICAgID0+IFRfRU5EV0hJTEUsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdzdHJpY3QnID0+IGZhbHNlLAogICAgICAgICAgICAnc2hhcmVkJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3dpdGgnICAgPT4gW10sCiAgICAgICAgXSwKICAgICAgICBUX0RPICAgICAgICAgICAgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVRdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVF0sCiAgICAgICAgICAgICdzdHJpY3QnID0+IHRydWUsCiAgICAgICAgICAgICdzaGFyZWQnID0+IGZhbHNlLAogICAgICAgICAgICAnd2l0aCcgICA9PiBbXSwKICAgICAgICBdLAogICAgICAgIFRfU1dJVENIICAgICAgICA9PiBbCiAgICAgICAgICAgICdzdGFydCcgID0+IFsKICAgICAgICAgICAgICAgIFRfT1BFTl9DVVJMWV9CUkFDS0VUID0+IFRfT1BFTl9DVVJMWV9CUkFDS0VULAogICAgICAgICAgICAgICAgVF9DT0xPTiAgICAgICAgICAgICAgPT4gVF9DT0xPTiwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ2VuZCcgICAgPT4gWwogICAgICAgICAgICAgICAgVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCwKICAgICAgICAgICAgICAgIFRfRU5EU1dJVENIICAgICAgICAgICA9PiBUX0VORFNXSVRDSCwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ3N0cmljdCcgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3NoYXJlZCcgPT4gZmFsc2UsCiAgICAgICAgICAgICd3aXRoJyAgID0+IFtdLAogICAgICAgIF0sCiAgICAgICAgVF9DQVNFICAgICAgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gWwogICAgICAgICAgICAgICAgVF9DT0xPTiAgICAgPT4gVF9DT0xPTiwKICAgICAgICAgICAgICAgIFRfU0VNSUNPTE9OID0+IFRfU0VNSUNPTE9OLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbCiAgICAgICAgICAgICAgICBUX0JSRUFLICAgID0+IFRfQlJFQUssCiAgICAgICAgICAgICAgICBUX1JFVFVSTiAgID0+IFRfUkVUVVJOLAogICAgICAgICAgICAgICAgVF9DT05USU5VRSA9PiBUX0NPTlRJTlVFLAogICAgICAgICAgICAgICAgVF9USFJPVyAgICA9PiBUX1RIUk9XLAogICAgICAgICAgICAgICAgVF9FWElUICAgICA9PiBUX0VYSVQsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdzdHJpY3QnID0+IHRydWUsCiAgICAgICAgICAgICdzaGFyZWQnID0+IHRydWUsCiAgICAgICAgICAgICd3aXRoJyAgID0+IFsKICAgICAgICAgICAgICAgIFRfREVGQVVMVCA9PiBUX0RFRkFVTFQsCiAgICAgICAgICAgICAgICBUX0NBU0UgICAgPT4gVF9DQVNFLAogICAgICAgICAgICAgICAgVF9TV0lUQ0ggID0+IFRfU1dJVENILAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICAgICAgVF9ERUZBVUxUICAgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gWwogICAgICAgICAgICAgICAgVF9DT0xPTiAgICAgPT4gVF9DT0xPTiwKICAgICAgICAgICAgICAgIFRfU0VNSUNPTE9OID0+IFRfU0VNSUNPTE9OLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbCiAgICAgICAgICAgICAgICBUX0JSRUFLICAgID0+IFRfQlJFQUssCiAgICAgICAgICAgICAgICBUX1JFVFVSTiAgID0+IFRfUkVUVVJOLAogICAgICAgICAgICAgICAgVF9DT05USU5VRSA9PiBUX0NPTlRJTlVFLAogICAgICAgICAgICAgICAgVF9USFJPVyAgICA9PiBUX1RIUk9XLAogICAgICAgICAgICAgICAgVF9FWElUICAgICA9PiBUX0VYSVQsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdzdHJpY3QnID0+IHRydWUsCiAgICAgICAgICAgICdzaGFyZWQnID0+IHRydWUsCiAgICAgICAgICAgICd3aXRoJyAgID0+IFsKICAgICAgICAgICAgICAgIFRfQ0FTRSAgID0+IFRfQ0FTRSwKICAgICAgICAgICAgICAgIFRfU1dJVENIID0+IFRfU1dJVENILAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICAgICAgVF9NQVRDSCAgICAgICAgID0+IFsKICAgICAgICAgICAgJ3N0YXJ0JyAgPT4gW1RfT1BFTl9DVVJMWV9CUkFDS0VUID0+IFRfT1BFTl9DVVJMWV9CUkFDS0VUXSwKICAgICAgICAgICAgJ2VuZCcgICAgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVRdLAogICAgICAgICAgICAnc3RyaWN0JyA9PiB0cnVlLAogICAgICAgICAgICAnc2hhcmVkJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3dpdGgnICAgPT4gW10sCiAgICAgICAgXSwKICAgICAgICBUX1NUQVJUX0hFUkVET0MgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbVF9TVEFSVF9IRVJFRE9DID0+IFRfU1RBUlRfSEVSRURPQ10sCiAgICAgICAgICAgICdlbmQnICAgID0+IFtUX0VORF9IRVJFRE9DID0+IFRfRU5EX0hFUkVET0NdLAogICAgICAgICAgICAnc3RyaWN0JyA9PiB0cnVlLAogICAgICAgICAgICAnc2hhcmVkJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3dpdGgnICAgPT4gW10sCiAgICAgICAgXSwKICAgICAgICBUX1NUQVJUX05PV0RPQyAgPT4gWwogICAgICAgICAgICAnc3RhcnQnICA9PiBbVF9TVEFSVF9OT1dET0MgPT4gVF9TVEFSVF9OT1dET0NdLAogICAgICAgICAgICAnZW5kJyAgICA9PiBbVF9FTkRfTk9XRE9DID0+IFRfRU5EX05PV0RPQ10sCiAgICAgICAgICAgICdzdHJpY3QnID0+IHRydWUsCiAgICAgICAgICAgICdzaGFyZWQnID0+IGZhbHNlLAogICAgICAgICAgICAnd2l0aCcgICA9PiBbXSwKICAgICAgICBdLAogICAgXTsKCiAgICAvKioKICAgICAqIEEgbGlzdCBvZiB0b2tlbnMgdGhhdCBlbmQgdGhlIHNjb3BlLgogICAgICoKICAgICAqIFRoaXMgYXJyYXkgaXMganVzdCBhIHVuaXF1ZSBjb2xsZWN0aW9uIG9mIHRoZSBlbmQgdG9rZW5zCiAgICAgKiBmcm9tIHRoZSBzY29wZU9wZW5lcnMgYXJyYXkuIFRoZSBkYXRhIGlzIGR1cGxpY2F0ZWQgaGVyZSB0bwogICAgICogc2F2ZSB0aW1lIGR1cmluZyBwYXJzaW5nIG9mIHRoZSBmaWxlLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHVibGljICRlbmRTY29wZVRva2VucyA9IFsKICAgICAgICBUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULAogICAgICAgIFRfRU5ESUYgICAgICAgICAgICAgICA9PiBUX0VORElGLAogICAgICAgIFRfRU5ERk9SICAgICAgICAgICAgICA9PiBUX0VOREZPUiwKICAgICAgICBUX0VOREZPUkVBQ0ggICAgICAgICAgPT4gVF9FTkRGT1JFQUNILAogICAgICAgIFRfRU5EV0hJTEUgICAgICAgICAgICA9PiBUX0VORFdISUxFLAogICAgICAgIFRfRU5EU1dJVENIICAgICAgICAgICA9PiBUX0VORFNXSVRDSCwKICAgICAgICBUX0VORERFQ0xBUkUgICAgICAgICAgPT4gVF9FTkRERUNMQVJFLAogICAgICAgIFRfQlJFQUsgICAgICAgICAgICAgICA9PiBUX0JSRUFLLAogICAgICAgIFRfRU5EX0hFUkVET0MgICAgICAgICA9PiBUX0VORF9IRVJFRE9DLAogICAgICAgIFRfRU5EX05PV0RPQyAgICAgICAgICA9PiBUX0VORF9OT1dET0MsCiAgICBdOwoKICAgIC8qKgogICAgICogS25vd24gbGVuZ3RocyBvZiB0b2tlbnMuCiAgICAgKgogICAgICogQHZhciBhcnJheTxpbnQsIGludD4KICAgICAqLwogICAgcHVibGljICRrbm93bkxlbmd0aHMgPSBbCiAgICAgICAgVF9BQlNUUkFDVCAgICAgICAgICAgICAgICAgPT4gOCwKICAgICAgICBUX0FORF9FUVVBTCAgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfQVJSQVkgICAgICAgICAgICAgICAgICAgID0+IDUsCiAgICAgICAgVF9BUyAgICAgICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX0JPT0xFQU5fQU5EICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfQk9PTEVBTl9PUiAgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgVF9CUkVBSyAgICAgICAgICAgICAgICAgICAgPT4gNSwKICAgICAgICBUX0NBTExBQkxFICAgICAgICAgICAgICAgICA9PiA4LAogICAgICAgIFRfQ0FTRSAgICAgICAgICAgICAgICAgICAgID0+IDQsCiAgICAgICAgVF9DQVRDSCAgICAgICAgICAgICAgICAgICAgPT4gNSwKICAgICAgICBUX0NMQVNTICAgICAgICAgICAgICAgICAgICA9PiA1LAogICAgICAgIFRfQ0xBU1NfQyAgICAgICAgICAgICAgICAgID0+IDksCiAgICAgICAgVF9DTE9ORSAgICAgICAgICAgICAgICAgICAgPT4gNSwKICAgICAgICBUX0NPTkNBVF9FUVVBTCAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfQ09OU1QgICAgICAgICAgICAgICAgICAgID0+IDUsCiAgICAgICAgVF9DT05USU5VRSAgICAgICAgICAgICAgICAgPT4gOCwKICAgICAgICBUX0NVUkxZX09QRU4gICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfREVDICAgICAgICAgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgVF9ERUNMQVJFICAgICAgICAgICAgICAgICAgPT4gNywKICAgICAgICBUX0RFRkFVTFQgICAgICAgICAgICAgICAgICA9PiA3LAogICAgICAgIFRfRElSICAgICAgICAgICAgICAgICAgICAgID0+IDcsCiAgICAgICAgVF9ESVZfRVFVQUwgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX0RPICAgICAgICAgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfRE9MTEFSX09QRU5fQ1VSTFlfQlJBQ0VTID0+IDIsCiAgICAgICAgVF9ET1VCTEVfQVJST1cgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX0RPVUJMRV9DT0xPTiAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfRUNITyAgICAgICAgICAgICAgICAgICAgID0+IDQsCiAgICAgICAgVF9FTExJUFNJUyAgICAgICAgICAgICAgICAgPT4gMywKICAgICAgICBUX0VMU0UgICAgICAgICAgICAgICAgICAgICA9PiA0LAogICAgICAgIFRfRUxTRUlGICAgICAgICAgICAgICAgICAgID0+IDYsCiAgICAgICAgVF9FTVBUWSAgICAgICAgICAgICAgICAgICAgPT4gNSwKICAgICAgICBUX0VORERFQ0xBUkUgICAgICAgICAgICAgICA9PiAxMCwKICAgICAgICBUX0VOREZPUiAgICAgICAgICAgICAgICAgICA9PiA2LAogICAgICAgIFRfRU5ERk9SRUFDSCAgICAgICAgICAgICAgID0+IDEwLAogICAgICAgIFRfRU5ESUYgICAgICAgICAgICAgICAgICAgID0+IDUsCiAgICAgICAgVF9FTkRTV0lUQ0ggICAgICAgICAgICAgICAgPT4gOSwKICAgICAgICBUX0VORFdISUxFICAgICAgICAgICAgICAgICA9PiA4LAogICAgICAgIFRfRU5VTSAgICAgICAgICAgICAgICAgICAgID0+IDQsCiAgICAgICAgVF9FTlVNX0NBU0UgICAgICAgICAgICAgICAgPT4gNCwKICAgICAgICBUX0VWQUwgICAgICAgICAgICAgICAgICAgICA9PiA0LAogICAgICAgIFRfRVhURU5EUyAgICAgICAgICAgICAgICAgID0+IDcsCiAgICAgICAgVF9GSUxFICAgICAgICAgICAgICAgICAgICAgPT4gOCwKICAgICAgICBUX0ZJTkFMICAgICAgICAgICAgICAgICAgICA9PiA1LAogICAgICAgIFRfRklOQUxMWSAgICAgICAgICAgICAgICAgID0+IDcsCiAgICAgICAgVF9GTiAgICAgICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX0ZPUiAgICAgICAgICAgICAgICAgICAgICA9PiAzLAogICAgICAgIFRfRk9SRUFDSCAgICAgICAgICAgICAgICAgID0+IDcsCiAgICAgICAgVF9GVU5DVElPTiAgICAgICAgICAgICAgICAgPT4gOCwKICAgICAgICBUX0ZVTkNfQyAgICAgICAgICAgICAgICAgICA9PiAxMiwKICAgICAgICBUX0dMT0JBTCAgICAgICAgICAgICAgICAgICA9PiA2LAogICAgICAgIFRfR09UTyAgICAgICAgICAgICAgICAgICAgID0+IDQsCiAgICAgICAgVF9IQUxUX0NPTVBJTEVSICAgICAgICAgICAgPT4gMTUsCiAgICAgICAgVF9JRiAgICAgICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX0lNUExFTUVOVFMgICAgICAgICAgICAgICA9PiAxMCwKICAgICAgICBUX0lOQyAgICAgICAgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfSU5DTFVERSAgICAgICAgICAgICAgICAgID0+IDcsCiAgICAgICAgVF9JTkNMVURFX09OQ0UgICAgICAgICAgICAgPT4gMTIsCiAgICAgICAgVF9JTlNUQU5DRU9GICAgICAgICAgICAgICAgPT4gMTAsCiAgICAgICAgVF9JTlNURUFET0YgICAgICAgICAgICAgICAgPT4gOSwKICAgICAgICBUX0lOVEVSRkFDRSAgICAgICAgICAgICAgICA9PiA5LAogICAgICAgIFRfSVNTRVQgICAgICAgICAgICAgICAgICAgID0+IDUsCiAgICAgICAgVF9JU19FUVVBTCAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX0lTX0dSRUFURVJfT1JfRVFVQUwgICAgICA9PiAyLAogICAgICAgIFRfSVNfSURFTlRJQ0FMICAgICAgICAgICAgID0+IDMsCiAgICAgICAgVF9JU19OT1RfRVFVQUwgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX0lTX05PVF9JREVOVElDQUwgICAgICAgICA9PiAzLAogICAgICAgIFRfSVNfU01BTExFUl9PUl9FUVVBTCAgICAgID0+IDIsCiAgICAgICAgVF9MSU5FICAgICAgICAgICAgICAgICAgICAgPT4gOCwKICAgICAgICBUX0xJU1QgICAgICAgICAgICAgICAgICAgICA9PiA0LAogICAgICAgIFRfTE9HSUNBTF9BTkQgICAgICAgICAgICAgID0+IDMsCiAgICAgICAgVF9MT0dJQ0FMX09SICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX0xPR0lDQUxfWE9SICAgICAgICAgICAgICA9PiAzLAogICAgICAgIFRfTUFUQ0ggICAgICAgICAgICAgICAgICAgID0+IDUsCiAgICAgICAgVF9NQVRDSF9BUlJPVyAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX01BVENIX0RFRkFVTFQgICAgICAgICAgICA9PiA3LAogICAgICAgIFRfTUVUSE9EX0MgICAgICAgICAgICAgICAgID0+IDEwLAogICAgICAgIFRfTUlOVVNfRVFVQUwgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgVF9QT1dfRVFVQUwgICAgICAgICAgICAgICAgPT4gMywKICAgICAgICBUX01PRF9FUVVBTCAgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfTVVMX0VRVUFMICAgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgVF9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgPT4gOSwKICAgICAgICBUX05TX0MgICAgICAgICAgICAgICAgICAgICA9PiAxMywKICAgICAgICBUX05TX1NFUEFSQVRPUiAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfTkVXICAgICAgICAgICAgICAgICAgICAgID0+IDMsCiAgICAgICAgVF9OVUxMU0FGRV9PQkpFQ1RfT1BFUkFUT1IgPT4gMywKICAgICAgICBUX09CSkVDVF9PUEVSQVRPUiAgICAgICAgICA9PiAyLAogICAgICAgIFRfT1BFTl9UQUdfV0lUSF9FQ0hPICAgICAgID0+IDMsCiAgICAgICAgVF9PUl9FUVVBTCAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX1BMVVNfRVFVQUwgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfUFJJTlQgICAgICAgICAgICAgICAgICAgID0+IDUsCiAgICAgICAgVF9QUklWQVRFICAgICAgICAgICAgICAgICAgPT4gNywKICAgICAgICBUX1BVQkxJQyAgICAgICAgICAgICAgICAgICA9PiA2LAogICAgICAgIFRfUFJPVEVDVEVEICAgICAgICAgICAgICAgID0+IDksCiAgICAgICAgVF9SRUFET05MWSAgICAgICAgICAgICAgICAgPT4gOCwKICAgICAgICBUX1JFUVVJUkUgICAgICAgICAgICAgICAgICA9PiA3LAogICAgICAgIFRfUkVRVUlSRV9PTkNFICAgICAgICAgICAgID0+IDEyLAogICAgICAgIFRfUkVUVVJOICAgICAgICAgICAgICAgICAgID0+IDYsCiAgICAgICAgVF9TVEFUSUMgICAgICAgICAgICAgICAgICAgPT4gNiwKICAgICAgICBUX1NXSVRDSCAgICAgICAgICAgICAgICAgICA9PiA2LAogICAgICAgIFRfVEhST1cgICAgICAgICAgICAgICAgICAgID0+IDUsCiAgICAgICAgVF9UUkFJVCAgICAgICAgICAgICAgICAgICAgPT4gNSwKICAgICAgICBUX1RSQUlUX0MgICAgICAgICAgICAgICAgICA9PiA5LAogICAgICAgIFRfVFJZICAgICAgICAgICAgICAgICAgICAgID0+IDMsCiAgICAgICAgVF9VTlNFVCAgICAgICAgICAgICAgICAgICAgPT4gNSwKICAgICAgICBUX1VTRSAgICAgICAgICAgICAgICAgICAgICA9PiAzLAogICAgICAgIFRfVkFSICAgICAgICAgICAgICAgICAgICAgID0+IDMsCiAgICAgICAgVF9XSElMRSAgICAgICAgICAgICAgICAgICAgPT4gNSwKICAgICAgICBUX1hPUl9FUVVBTCAgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfWUlFTEQgICAgICAgICAgICAgICAgICAgID0+IDUsCiAgICAgICAgVF9PUEVOX0NVUkxZX0JSQUNLRVQgICAgICAgPT4gMSwKICAgICAgICBUX0NMT1NFX0NVUkxZX0JSQUNLRVQgICAgICA9PiAxLAogICAgICAgIFRfT1BFTl9TUVVBUkVfQlJBQ0tFVCAgICAgID0+IDEsCiAgICAgICAgVF9DTE9TRV9TUVVBUkVfQlJBQ0tFVCAgICAgPT4gMSwKICAgICAgICBUX09QRU5fUEFSRU5USEVTSVMgICAgICAgICA9PiAxLAogICAgICAgIFRfQ0xPU0VfUEFSRU5USEVTSVMgICAgICAgID0+IDEsCiAgICAgICAgVF9DT0xPTiAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBUX1NUUklOR19DT05DQVQgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfSU5MSU5FX1RIRU4gICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVF9JTkxJTkVfRUxTRSAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBUX05VTExBQkxFICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfTlVMTCAgICAgICAgICAgICAgICAgICAgID0+IDQsCiAgICAgICAgVF9GQUxTRSAgICAgICAgICAgICAgICAgICAgPT4gNSwKICAgICAgICBUX1RSVUUgICAgICAgICAgICAgICAgICAgICA9PiA0LAogICAgICAgIFRfU0VNSUNPTE9OICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVF9FUVVBTCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBUX01VTFRJUExZICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfRElWSURFICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVF9QTFVTICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBUX01JTlVTICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfTU9EVUxVUyAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVF9QT1cgICAgICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBUX1NQQUNFU0hJUCAgICAgICAgICAgICAgICA9PiAzLAogICAgICAgIFRfQ09BTEVTQ0UgICAgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgVF9DT0FMRVNDRV9FUVVBTCAgICAgICAgICAgPT4gMywKICAgICAgICBUX0JJVFdJU0VfQU5EICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfQklUV0lTRV9PUiAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVF9CSVRXSVNFX1hPUiAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBUX1NMICAgICAgICAgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFRfU1IgICAgICAgICAgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgVF9TTF9FUVVBTCAgICAgICAgICAgICAgICAgPT4gMywKICAgICAgICBUX1NSX0VRVUFMICAgICAgICAgICAgICAgICA9PiAzLAogICAgICAgIFRfR1JFQVRFUl9USEFOICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVF9MRVNTX1RIQU4gICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBUX0JPT0xFQU5fTk9UICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfU0VMRiAgICAgICAgICAgICAgICAgICAgID0+IDQsCiAgICAgICAgVF9QQVJFTlQgICAgICAgICAgICAgICAgICAgPT4gNiwKICAgICAgICBUX0NPTU1BICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfVEhJUyAgICAgICAgICAgICAgICAgICAgID0+IDQsCiAgICAgICAgVF9DTE9TVVJFICAgICAgICAgICAgICAgICAgPT4gOCwKICAgICAgICBUX0JBQ0tUSUNLICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfT1BFTl9TSE9SVF9BUlJBWSAgICAgICAgID0+IDEsCiAgICAgICAgVF9DTE9TRV9TSE9SVF9BUlJBWSAgICAgICAgPT4gMSwKICAgICAgICBUX1RZUEVfVU5JT04gICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRfVFlQRV9JTlRFUlNFQ1RJT04gICAgICAgID0+IDEsCiAgICBdOwoKICAgIC8qKgogICAgICogQ29udGV4dHMgaW4gd2hpY2gga2V5d29yZHMgc2hvdWxkIGFsd2F5cyBiZSB0b2tlbml6ZWQgYXMgVF9TVFJJTkcuCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJHRzdHJpbmdDb250ZXh0cyA9IFsKICAgICAgICBUX09CSkVDVF9PUEVSQVRPUiAgICAgICAgICA9PiB0cnVlLAogICAgICAgIFRfTlVMTFNBRkVfT0JKRUNUX09QRVJBVE9SID0+IHRydWUsCiAgICAgICAgVF9GVU5DVElPTiAgICAgICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICBUX0NMQVNTICAgICAgICAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgIFRfSU5URVJGQUNFICAgICAgICAgICAgICAgID0+IHRydWUsCiAgICAgICAgVF9UUkFJVCAgICAgICAgICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICBUX0VOVU0gICAgICAgICAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgIFRfRU5VTV9DQVNFICAgICAgICAgICAgICAgID0+IHRydWUsCiAgICAgICAgVF9FWFRFTkRTICAgICAgICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICBUX0lNUExFTUVOVFMgICAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgIFRfQVRUUklCVVRFICAgICAgICAgICAgICAgID0+IHRydWUsCiAgICAgICAgVF9ORVcgICAgICAgICAgICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICBUX0NPTlNUICAgICAgICAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgIFRfTlNfU0VQQVJBVE9SICAgICAgICAgICAgID0+IHRydWUsCiAgICAgICAgVF9VU0UgICAgICAgICAgICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICBUX05BTUVTUEFDRSAgICAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgIFRfUEFBTUFZSU1fTkVLVURPVEFZSU0gICAgID0+IHRydWUsCiAgICBdOwoKICAgIC8qKgogICAgICogQSBjYWNoZSBvZiBkaWZmZXJlbnQgdG9rZW4gdHlwZXMsIHJlc29sdmVkIGludG8gYXJyYXlzLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqIEBzZWUgc3RhbmRhcmRpc2VUb2tlbigpCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRyZXNvbHZlVG9rZW5DYWNoZSA9IFtdOwoKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdG9rZW5zIHdoZW4gZ2l2ZW4gc29tZSBQSFAgY29kZS4KICAgICAqCiAgICAgKiBTdGFydHMgYnkgdXNpbmcgdG9rZW5fZ2V0X2FsbCgpIGJ1dCBkb2VzIGEgbG90IG9mIGV4dHJhIHByb2Nlc3NpbmcKICAgICAqIHRvIGluc2VydCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBvZiB0aGUgdG9rZW4uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFRoZSBzdHJpbmcgdG8gdG9rZW5pemUuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gdG9rZW5pemUoJHN0cmluZykKICAgIHsKICAgICAgICBpZiAoUEhQX0NPREVTTklGRkVSX1ZFUkJPU0lUWSA+IDEpIHsKICAgICAgICAgICAgZWNobyAiXHQqKiogU1RBUlQgUEhQIFRPS0VOSVpJTkcgKioqIi5QSFBfRU9MOwogICAgICAgICAgICAkaXNXaW4gPSBmYWxzZTsKICAgICAgICAgICAgaWYgKHN0cmlwb3MoUEhQX09TLCAnV0lOJykgPT09IDApIHsKICAgICAgICAgICAgICAgICRpc1dpbiA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0b2tlbnMgICAgICA9IEB0b2tlbl9nZXRfYWxsKCRzdHJpbmcpOwogICAgICAgICRmaW5hbFRva2VucyA9IFtdOwoKICAgICAgICAkbmV3U3RhY2tQdHIgICAgICAgPSAwOwogICAgICAgICRudW1Ub2tlbnMgICAgICAgICA9IGNvdW50KCR0b2tlbnMpOwogICAgICAgICRsYXN0Tm90RW1wdHlUb2tlbiA9IDA7CgogICAgICAgICRpbnNpZGVJbmxpbmVJZiA9IFtdOwogICAgICAgICRpbnNpZGVVc2VHcm91cCA9IGZhbHNlOwoKICAgICAgICAkY29tbWVudFRva2VuaXplciA9IG5ldyBDb21tZW50KCk7CgogICAgICAgIGZvciAoJHN0YWNrUHRyID0gMDsgJHN0YWNrUHRyIDwgJG51bVRva2VuczsgJHN0YWNrUHRyKyspIHsKICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciB0b2tlbnMgd2UgaGF2ZSBuZWVkZWQgdG8gYmxhbmsgb3V0LgogICAgICAgICAgICBpZiAoJHRva2Vuc1skc3RhY2tQdHJdID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRva2VuICAgICAgICA9IChhcnJheSkgJHRva2Vuc1skc3RhY2tQdHJdOwogICAgICAgICAgICAkdG9rZW5Jc0FycmF5ID0gaXNzZXQoJHRva2VuWzFdKTsKCiAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgaWYgKCR0b2tlbklzQXJyYXkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkdHlwZSAgICA9IFV0aWxcVG9rZW5zOjp0b2tlbk5hbWUoJHRva2VuWzBdKTsKICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IFV0aWxcQ29tbW9uOjpwcmVwYXJlRm9yT3V0cHV0KCR0b2tlblsxXSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlbiA9IHNlbGY6OnJlc29sdmVTaW1wbGVUb2tlbigkdG9rZW5bMF0pOwogICAgICAgICAgICAgICAgICAgICR0eXBlICAgICA9ICRuZXdUb2tlblsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICRjb250ZW50ICA9IFV0aWxcQ29tbW9uOjpwcmVwYXJlRm9yT3V0cHV0KCR0b2tlblswXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWNobyAiXHRQcm9jZXNzIHRva2VuICI7CiAgICAgICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gIlskc3RhY2tQdHJdIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiICRzdGFja1B0ciAiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVjaG8gIjogJHR5cGUgPT4gJGNvbnRlbnQiOwogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIGlmICgkbmV3U3RhY2tQdHIgPiAwCiAgICAgICAgICAgICAgICAmJiBpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyRmaW5hbFRva2Vuc1soJG5ld1N0YWNrUHRyIC0gMSldWydjb2RlJ11dKSA9PT0gZmFsc2UKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkbGFzdE5vdEVtcHR5VG9rZW4gPSAoJG5ld1N0YWNrUHRyIC0gMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBJZiB3ZSBhcmUgdXNpbmcgXHJcbiBuZXdsaW5lIGNoYXJhY3RlcnMsIHRoZSBcciBhbmQgXG4gYXJlIHNvbWV0aW1lcwogICAgICAgICAgICAgICAgc3BsaXQgb3ZlciB0d28gdG9rZW5zLiBUaGlzIG5vcm1hbGx5IG9jY3VycyBhZnRlciBjb21tZW50cy4gV2UgbmVlZAogICAgICAgICAgICAgICAgdG8gbWVyZ2UgdGhlc2UgdHdvIGNoYXJhY3RlcnMgdG9nZXRoZXIgc28gdGhhdCBvdXIgbGluZSBlbmRpbmdzIGFyZQogICAgICAgICAgICAgICAgY29uc2lzdGVudCBmb3IgYWxsIGxpbmVzLgogICAgICAgICAgICAqLwoKICAgICAgICAgICAgaWYgKCR0b2tlbklzQXJyYXkgPT09IHRydWUgJiYgc3Vic3RyKCR0b2tlblsxXSwgLTEpID09PSAiXHIiKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRva2Vuc1soJHN0YWNrUHRyICsgMSldKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICYmIGlzX2FycmF5KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV1bMV1bMF0gPT09ICJcbiIKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICR0b2tlblsxXSAuPSAiXG4iOwogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzV2luID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdcbic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcMDMzWzMwOzFtXFxuXDAzM1swbSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV1bMV0gPT09ICJcbiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0b2tlbidzIGNvbnRlbnQgaGFzIGJlZW4gbWVyZ2VkIGludG8gdGhlIHByZXZpb3VzLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBjYW4gc2tpcCBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgJHRva2Vuc1soJHN0YWNrUHRyICsgMSldID0gJyc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRva2Vuc1soJHN0YWNrUHRyICsgMSldWzFdID0gc3Vic3RyKCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVsxXSwgMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgZWNobyBQSFBfRU9MOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgVG9rZW5pemUgY29udGV4dCBzZW5zaXRpdmUga2V5d29yZCBhcyBzdHJpbmcgd2hlbiBpdCBzaG91bGQgYmUgc3RyaW5nLgogICAgICAgICAgICAqLwoKICAgICAgICAgICAgaWYgKCR0b2tlbklzQXJyYXkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmIGlzc2V0KFV0aWxcVG9rZW5zOjokY29udGV4dFNlbnNpdGl2ZUtleXdvcmRzWyR0b2tlblswXV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAoaXNzZXQoJHRoaXMtPnRzdHJpbmdDb250ZXh0c1skZmluYWxUb2tlbnNbJGxhc3ROb3RFbXB0eVRva2VuXVsnY29kZSddXSkgPT09IHRydWUKICAgICAgICAgICAgICAgIHx8ICRmaW5hbFRva2Vuc1skbGFzdE5vdEVtcHR5VG9rZW5dWydjb250ZW50J10gPT09ICcmJykKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRzdHJpbmdDb250ZXh0c1skZmluYWxUb2tlbnNbJGxhc3ROb3RFbXB0eVRva2VuXVsnY29kZSddXSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkcHJlc2VydmVLZXl3b3JkID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgIC8vIGBuZXcgY2xhc3NgLCBhbmQgYG5ldyBzdGF0aWNgIHNob3VsZCBiZSBwcmVzZXJ2ZWQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmaW5hbFRva2Vuc1skbGFzdE5vdEVtcHR5VG9rZW5dWydjb2RlJ10gPT09IFRfTkVXCiAgICAgICAgICAgICAgICAgICAgICAgICYmICgkdG9rZW5bMF0gPT09IFRfQ0xBU1MKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRva2VuWzBdID09PSBUX1NUQVRJQykKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHByZXNlcnZlS2V5d29yZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBgbmV3IGNsYXNzIGV4dGVuZHNgIGBuZXcgY2xhc3MgaW1wbGVtZW50c2Agc2hvdWxkIGJlIHByZXNlcnZlZAogICAgICAgICAgICAgICAgICAgIGlmICgoJHRva2VuWzBdID09PSBUX0VYVEVORFMgfHwgJHRva2VuWzBdID09PSBUX0lNUExFTUVOVFMpCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRmaW5hbFRva2Vuc1skbGFzdE5vdEVtcHR5VG9rZW5dWydjb2RlJ10gPT09IFRfQ0xBU1MKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHByZXNlcnZlS2V5d29yZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBgbmFtZXNwYWNlXGAgc2hvdWxkIGJlIHByZXNlcnZlZAogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5bMF0gPT09IFRfTkFNRVNQQUNFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAoJHN0YWNrUHRyICsgMSk7ICRpIDwgJG51bVRva2VuczsgJGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoVXRpbFxUb2tlbnM6OiRlbXB0eVRva2Vuc1skdG9rZW5zWyRpXVswXV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldWzBdID09PSBUX05TX1NFUEFSQVRPUikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmVzZXJ2ZUtleXdvcmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAgICAgaWYgKCRmaW5hbFRva2Vuc1skbGFzdE5vdEVtcHR5VG9rZW5dWydjb250ZW50J10gPT09ICcmJykgewogICAgICAgICAgICAgICAgICAgICRwcmVzZXJ2ZUtleXdvcmQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gKCRsYXN0Tm90RW1wdHlUb2tlbiAtIDEpOyAkaSA+PSAwOyAkaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyRmaW5hbFRva2Vuc1skaV1bJ2NvZGUnXV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmaW5hbFRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9GVU5DVElPTikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByZXNlcnZlS2V5d29yZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRwcmVzZXJ2ZUtleXdvcmQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gVXRpbFxUb2tlbnM6OnRva2VuTmFtZSgkdG9rZW5bMF0pOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgY2hhbmdlZCBmcm9tICR0eXBlIHRvIFRfU1RSSU5HIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlJyAgICA9PiBUX1NUUklORywKICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnICAgID0+ICdUX1NUUklORycsCiAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50JyA9PiAkdG9rZW5bMV0sCiAgICAgICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIFBhcnNlIGRvYyBibG9ja3MgaW50byBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWFzaWx5IGl0ZXJhdGVkIG92ZXIuCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgKCR0b2tlblswXSA9PT0gVF9ET0NfQ09NTUVOVAogICAgICAgICAgICAgICAgfHwgKCR0b2tlblswXSA9PT0gVF9DT01NRU5UICYmIHN0cnBvcygkdG9rZW5bMV0sICcvKionKSA9PT0gMCkpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGNvbW1lbnRUb2tlbnMgPSAkY29tbWVudFRva2VuaXplci0+dG9rZW5pemVTdHJpbmcoJHRva2VuWzFdLCAkdGhpcy0+ZW9sQ2hhciwgJG5ld1N0YWNrUHRyKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb21tZW50VG9rZW5zIGFzICRjb21tZW50VG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRjb21tZW50VG9rZW47CiAgICAgICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBQSFAgOCB0b2tlbml6ZXMgYSBuZXcgbGluZSBhZnRlciBhIHNsYXNoIGFuZCBoYXNoIGNvbW1lbnQgdG8gdGhlIG5leHQgd2hpdGVzcGFjZSB0b2tlbi4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmIChQSFBfVkVSU0lPTl9JRCA+PSA4MDAwMAogICAgICAgICAgICAgICAgJiYgJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgKCR0b2tlblswXSA9PT0gVF9DT01NRU5UICYmIChzdHJwb3MoJHRva2VuWzFdLCAnLy8nKSA9PT0gMCB8fCBzdHJwb3MoJHRva2VuWzFdLCAnIycpID09PSAwKSkKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmIGlzX2FycmF5KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVswXSA9PT0gVF9XSElURVNQQUNFCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJG5leHRUb2tlbiA9ICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXTsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIHNpbmdsZSBuZXcgbGluZSwgbWVyZ2UgaXQgaW50byB0aGUgY29tbWVudCB0b2tlbgogICAgICAgICAgICAgICAgLy8gYW5kIHNldCB0byBpdCB1cCB0byBiZSBza2lwcGVkLgogICAgICAgICAgICAgICAgaWYgKCRuZXh0VG9rZW5bMV0gPT09ICJcbiIgfHwgJG5leHRUb2tlblsxXSA9PT0gIlxyXG4iIHx8ICRuZXh0VG9rZW5bMV0gPT09ICJcblxyIikgewogICAgICAgICAgICAgICAgICAgICR0b2tlblsxXSAuPSAkbmV4dFRva2VuWzFdOwogICAgICAgICAgICAgICAgICAgICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiBtZXJnZWQgbmV3bGluZSBhZnRlciBjb21tZW50IGludG8gY29tbWVudCB0b2tlbiAkc3RhY2tQdHIiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSBiZSBhIHdoaXRlc3BhY2UgdG9rZW4gY29uc2lzdGluZyBvZiBtdWx0aXBsZSBuZXcgbGluZXMuCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkbmV4dFRva2VuWzFdLCAiXHJcbiIpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlblsxXSAuPSAiXHJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVsxXSA9IHN1YnN0cigkbmV4dFRva2VuWzFdLCAyKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cnBvcygkbmV4dFRva2VuWzFdLCAiXG5cciIpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlblsxXSAuPSAiXG5cciI7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVsxXSA9IHN1YnN0cigkbmV4dFRva2VuWzFdLCAyKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cnBvcygkbmV4dFRva2VuWzFdLCAiXG4iKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG9rZW5bMV0gLj0gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgJHRva2Vuc1soJHN0YWNrUHRyICsgMSldWzFdID0gc3Vic3RyKCRuZXh0VG9rZW5bMV0sIDEpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHN0cmlwcGVkIGZpcnN0IG5ld2xpbmUgYWZ0ZXIgY29tbWVudCBhbmQgYWRkZWQgaXQgdG8gY29tbWVudCB0b2tlbiAkc3RhY2tQdHIiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIEZvciBFeHBsaWNpdCBPY3RhbCBOb3RhdGlvbiBwcmlvciB0byBQSFAgOC4xIHdlIG5lZWQgdG8gY29tYmluZSB0aGUKICAgICAgICAgICAgICAgIFRfTE5VTUJFUiBhbmQgVF9TVFJJTkcgdG9rZW4gdmFsdWVzIGludG8gYSBzaW5nbGUgdG9rZW4gdmFsdWUsIGFuZAogICAgICAgICAgICAgICAgdGhlbiBpZ25vcmUgdGhlIFRfU1RSSU5HIHRva2VuLgogICAgICAgICAgICAqLwoKICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAxMDAKICAgICAgICAgICAgICAgICYmICR0b2tlbklzQXJyYXkgPT09IHRydWUgJiYgJHRva2VuWzFdID09PSAnMCcKICAgICAgICAgICAgICAgICYmIChpc3NldCgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiBpc19hcnJheSgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV1bMF0gPT09IFRfU1RSSU5HCiAgICAgICAgICAgICAgICAmJiBzdHJ0b2xvd2VyKCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVsxXVswXSkgPT09ICdvJwogICAgICAgICAgICAgICAgJiYgJHRva2Vuc1soJHN0YWNrUHRyICsgMSldWzFdWzFdICE9PSAnXycpCiAgICAgICAgICAgICAgICAmJiBwcmVnX21hdGNoKCdgXihvWzAtN10rKD86X1swLTddKyk/KShbMC05X10qKSRgaScsICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVsxXSwgJG1hdGNoZXMpID09PSAxCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSBbCiAgICAgICAgICAgICAgICAgICAgJ2NvZGUnICAgID0+IFRfTE5VTUJFUiwKICAgICAgICAgICAgICAgICAgICAndHlwZScgICAgPT4gJ1RfTE5VTUJFUicsCiAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQnID0+ICR0b2tlblsxXSAuPSAkbWF0Y2hlc1sxXSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJG1hdGNoZXNbMl0pID09PSB0cnVlICYmICRtYXRjaGVzWzJdICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ1RfTE5VTUJFUic7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXRjaGVzWzJdWzBdID09PSAnXycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnVF9TVFJJTkcnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlJyAgICA9PiBjb25zdGFudCgkdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyAgICA9PiAkdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQnID0+ICRtYXRjaGVzWzJdLAogICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHN0YWNrUHRyKys7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgUEhQIDguMSBpbnRyb2R1Y2VkIHR3byBkZWRpY2F0ZWQgdG9rZW5zIGZvciB0aGUgJiBjaGFyYWN0ZXIuCiAgICAgICAgICAgICAgICBSZXRva2VuaXppbmcgYm90aCBvZiB0aGVzZSB0byBUX0JJVFdJU0VfQU5ELCB3aGljaCBpcyB0aGUKICAgICAgICAgICAgICAgIHRva2VuIFBIUENTIGFscmVhZHkgdG9rZW5pemVkIHRoZW0gYXMuCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgKCR0b2tlblswXSA9PT0gVF9BTVBFUlNBTkRfRk9MTE9XRURfQllfVkFSX09SX1ZBUkFSRwogICAgICAgICAgICAgICAgfHwgJHRva2VuWzBdID09PSBUX0FNUEVSU0FORF9OT1RfRk9MTE9XRURfQllfVkFSX09SX1ZBUkFSRykKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9IFsKICAgICAgICAgICAgICAgICAgICAnY29kZScgICAgPT4gVF9CSVRXSVNFX0FORCwKICAgICAgICAgICAgICAgICAgICAndHlwZScgICAgPT4gJ1RfQklUV0lTRV9BTkQnLAogICAgICAgICAgICAgICAgICAgICdjb250ZW50JyA9PiAkdG9rZW5bMV0sCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgYSBkb3VibGUgcXVvdGVkIHN0cmluZywgUEhQIHdpbGwgdG9rZW5pemUgdGhlIHdob2xlCiAgICAgICAgICAgICAgICB0aGluZyB3aGljaCBjYXVzZXMgcHJvYmxlbXMgd2l0aCB0aGUgc2NvcGUgbWFwIHdoZW4gYnJhY2VzIGFyZQogICAgICAgICAgICAgICAgd2l0aGluIHRoZSBzdHJpbmcuIFNvIHdlIG5lZWQgdG8gbWVyZ2UgdGhlIHRva2VucyB0b2dldGhlciB0bwogICAgICAgICAgICAgICAgcHJvdmlkZSBhIHNpbmdsZSBzdHJpbmcuCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gZmFsc2UgJiYgKCR0b2tlblswXSA9PT0gJyInIHx8ICR0b2tlblswXSA9PT0gJ2IiJykpIHsKICAgICAgICAgICAgICAgIC8vIEJpbmFyeSBjYXN0cyBuZWVkIGEgc3BlY2lhbCB0b2tlbi4KICAgICAgICAgICAgICAgIGlmICgkdG9rZW5bMF0gPT09ICdiIicpIHsKICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUnICAgID0+IFRfQklOQVJZX0NBU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyAgICA9PiAnVF9CSU5BUllfQ0FTVCcsCiAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50JyA9PiAnYicsCiAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdG9rZW5Db250ZW50ID0gJyInOwogICAgICAgICAgICAgICAgJG5lc3RlZFZhcnMgICA9IFtdOwogICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgKyAxKTsgJGkgPCAkbnVtVG9rZW5zOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgJHN1YlRva2VuICAgICAgICA9IChhcnJheSkgJHRva2Vuc1skaV07CiAgICAgICAgICAgICAgICAgICAgJHN1YlRva2VuSXNBcnJheSA9IGlzc2V0KCRzdWJUb2tlblsxXSk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkc3ViVG9rZW5Jc0FycmF5ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbkNvbnRlbnQgLj0gJHN1YlRva2VuWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCRzdWJUb2tlblsxXSA9PT0gJ3snCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkc3ViVG9rZW5bMV0gPT09ICckeycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkc3ViVG9rZW5bMF0gIT09IFRfRU5DQVBTRURfQU5EX1dISVRFU1BBQ0UKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmVzdGVkVmFyc1tdID0gJGk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkdG9rZW5Db250ZW50IC49ICRzdWJUb2tlblswXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdWJUb2tlblswXSA9PT0gJ30nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3AoJG5lc3RlZFZhcnMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHN1YlRva2VuSXNBcnJheSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHN1YlRva2VuWzBdID09PSAnIicKICAgICAgICAgICAgICAgICAgICAgICAgJiYgZW1wdHkoJG5lc3RlZFZhcnMpID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGZvdW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGRvdWJsZSBxdW90ZWQgc3RyaW5nLgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Ly9lbmQgZm9yCgogICAgICAgICAgICAgICAgJHN0YWNrUHRyID0gJGk7CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBlYWNoIGxpbmUgd2l0aGluIHRoZSBkb3VibGUgcXVvdGVkIHN0cmluZyB0byBhCiAgICAgICAgICAgICAgICAvLyBuZXcgdG9rZW4sIHNvIGl0IGNvbmZvcm1zIHdpdGggb3RoZXIgbXVsdGlwbGUgbGluZSB0b2tlbnMuCiAgICAgICAgICAgICAgICAkdG9rZW5MaW5lcyA9IGV4cGxvZGUoJHRoaXMtPmVvbENoYXIsICR0b2tlbkNvbnRlbnQpOwogICAgICAgICAgICAgICAgJG51bUxpbmVzICAgPSBjb3VudCgkdG9rZW5MaW5lcyk7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICA9IFtdOwoKICAgICAgICAgICAgICAgIGZvciAoJGogPSAwOyAkaiA8ICRudW1MaW5lczsgJGorKykgewogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJHRva2VuTGluZXNbJGpdOwogICAgICAgICAgICAgICAgICAgIGlmICgkaiA9PT0gKCRudW1MaW5lcyAtIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5MaW5lc1skal0gPT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddIC49ICR0aGlzLT5lb2xDaGFyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgICAgICAgPSBUX0RPVUJMRV9RVU9URURfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgICAgICAgID0gJ1RfRE9VQkxFX1FVT1RFRF9TVFJJTkcnOwogICAgICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdID0gJG5ld1Rva2VuOwogICAgICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnRpbnVlLCBhcyB3ZSdyZSBkb25lIHdpdGggdGhpcyB0b2tlbi4KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBEZXRlY3QgYmluYXJ5IGNhc3RpbmcgYW5kIGFzc2lnbiB0aGUgY2FzdHMgdGhlaXIgb3duIHRva2VuLgogICAgICAgICAgICAqLwoKICAgICAgICAgICAgaWYgKCR0b2tlbklzQXJyYXkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlblswXSA9PT0gVF9DT05TVEFOVF9FTkNBUFNFRF9TVFJJTkcKICAgICAgICAgICAgICAgICYmIChzdWJzdHIoJHRva2VuWzFdLCAwLCAyKSA9PT0gJ2IiJwogICAgICAgICAgICAgICAgfHwgc3Vic3RyKCR0b2tlblsxXSwgMCwgMikgPT09ICJiJyIpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSBbCiAgICAgICAgICAgICAgICAgICAgJ2NvZGUnICAgID0+IFRfQklOQVJZX0NBU1QsCiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnICAgID0+ICdUX0JJTkFSWV9DQVNUJywKICAgICAgICAgICAgICAgICAgICAnY29udGVudCcgPT4gJ2InLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgJHRva2VuWzFdID0gc3Vic3RyKCR0b2tlblsxXSwgMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5bMF0gPT09IFRfU1RSSU5HX0NBU1QKICAgICAgICAgICAgICAgICYmIHByZWdfbWF0Y2goJ2BeXChccypiaW5hcnlccypcKSRgaScsICR0b2tlblsxXSkgPT09IDEKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9IFsKICAgICAgICAgICAgICAgICAgICAnY29kZScgICAgPT4gVF9CSU5BUllfQ0FTVCwKICAgICAgICAgICAgICAgICAgICAndHlwZScgICAgPT4gJ1RfQklOQVJZX0NBU1QnLAogICAgICAgICAgICAgICAgICAgICdjb250ZW50JyA9PiAkdG9rZW5bMV0sCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgYSBoZXJlZG9jLCBQSFAgd2lsbCB0b2tlbml6ZSB0aGUgd2hvbGUKICAgICAgICAgICAgICAgIHRoaW5nIHdoaWNoIGNhdXNlcyBwcm9ibGVtcyB3aGVuIGhlcmVkb2NzIGRvbid0CiAgICAgICAgICAgICAgICBjb250YWluIHJlYWwgUEhQIGNvZGUsIHdoaWNoIGlzIGFsbW9zdCBuZXZlci4KICAgICAgICAgICAgICAgIFdlIHdhbnQgdG8gbGVhdmUgdGhlIHN0YXJ0IGFuZCBlbmQgaGVyZWRvYyB0b2tlbnMKICAgICAgICAgICAgICAgIGFsb25lIHRob3VnaC4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSB0cnVlICYmICR0b2tlblswXSA9PT0gVF9TVEFSVF9IRVJFRE9DKSB7CiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHN0YXJ0IGhlcmVkb2MgdG9rZW4gdG8gdGhlIGZpbmFsIGFycmF5LgogICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSBzZWxmOjpzdGFuZGFyZGlzZVRva2VuKCR0b2tlbik7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhY3R1YWxseSBhIG5vd2RvYyBhbmQgdXNlIGEgZGlmZmVyZW50IHRva2VuCiAgICAgICAgICAgICAgICAvLyB0byBoZWxwIHRoZSBzbmlmZnMuCiAgICAgICAgICAgICAgICAkbm93ZG9jID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCR0b2tlblsxXSwgIiciKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXVsnY29kZSddID0gVF9TVEFSVF9OT1dET0M7CiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl1bJ3R5cGUnXSA9ICdUX1NUQVJUX05PV0RPQyc7CiAgICAgICAgICAgICAgICAgICAgJG5vd2RvYyA9IHRydWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHRva2VuQ29udGVudCA9ICcnOwogICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgKyAxKTsgJGkgPCAkbnVtVG9rZW5zOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgJHN1YlRva2VuSXNBcnJheSA9IGlzX2FycmF5KCR0b2tlbnNbJGldKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHN1YlRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRpXVswXSA9PT0gVF9FTkRfSEVSRURPQwogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBoZXJlZG9jLgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkc3ViVG9rZW5Jc0FycmF5ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbkNvbnRlbnQgLj0gJHRva2Vuc1skaV1bMV07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRva2VuQ29udGVudCAuPSAkdG9rZW5zWyRpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRpID09PSAkbnVtVG9rZW5zKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZ290IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIG5ldmVyCiAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgdGhlIGNsb3NpbmcgdG9rZW4sIHNvIHRoaXMgcHJvYmFibHkgd2Fzbid0CiAgICAgICAgICAgICAgICAgICAgLy8gYSBoZXJlZG9jLgogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIGZhaWxlZCB0byBmaW5kIHRoZSBlbmQgb2YgdGhlIGhlcmUvbm93ZG9jIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgY2hhbmdlZCBmcm9tICR0eXBlIHRvIFRfU1RSSU5HIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl1bJ2NvZGUnXSA9IFRfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdWyd0eXBlJ10gPSAnVF9TVFJJTkcnOwogICAgICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRzdGFja1B0ciA9ICRpOwogICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBlYWNoIGxpbmUgd2l0aGluIHRoZSBoZXJlZG9jIHRvIGEKICAgICAgICAgICAgICAgIC8vIG5ldyB0b2tlbiwgc28gaXQgY29uZm9ybXMgd2l0aCBvdGhlciBtdWx0aXBsZSBsaW5lIHRva2Vucy4KICAgICAgICAgICAgICAgICR0b2tlbkxpbmVzID0gZXhwbG9kZSgkdGhpcy0+ZW9sQ2hhciwgJHRva2VuQ29udGVudCk7CiAgICAgICAgICAgICAgICAkbnVtTGluZXMgICA9IGNvdW50KCR0b2tlbkxpbmVzKTsKICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgID0gW107CgogICAgICAgICAgICAgICAgZm9yICgkaiA9IDA7ICRqIDwgJG51bUxpbmVzOyAkaisrKSB7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAkdG9rZW5MaW5lc1skal07CiAgICAgICAgICAgICAgICAgICAgaWYgKCRqID09PSAoJG51bUxpbmVzIC0gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbkxpbmVzWyRqXSA9PT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gLj0gJHRoaXMtPmVvbENoYXI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJG5vd2RvYyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvZGUnXSA9IFRfTk9XRE9DOwogICAgICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX05PV0RPQyc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gPSBUX0hFUkVET0M7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfSEVSRURPQyc7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKICAgICAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgIH0vL2VuZCBmb3IKCiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGVuZCBoZXJlZG9jIHRva2VuIHRvIHRoZSBmaW5hbCBhcnJheS4KICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdID0gc2VsZjo6c3RhbmRhcmRpc2VUb2tlbigkdG9rZW5zWyRzdGFja1B0cl0pOwoKICAgICAgICAgICAgICAgIGlmICgkbm93ZG9jID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl1bJ2NvZGUnXSA9IFRfRU5EX05PV0RPQzsKICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXVsndHlwZSddID0gJ1RfRU5EX05PV0RPQyc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CgogICAgICAgICAgICAgICAgLy8gQ29udGludWUsIGFzIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIHRva2VuLgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIEVudW0ga2V5d29yZCBmb3IgUEhQIDwgOC4xCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgJHRva2VuWzBdID09PSBUX1NUUklORwogICAgICAgICAgICAgICAgJiYgc3RydG9sb3dlcigkdG9rZW5bMV0pID09PSAnZW51bScKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgbm9uLWVtcHR5IHRva2VuLgogICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgKyAxKTsgJGkgPCAkbnVtVG9rZW5zOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNzZXQoVXRpbFxUb2tlbnM6OiRlbXB0eVRva2Vuc1skdG9rZW5zWyRpXVswXV0pID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJGldKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICYmIGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGldWzBdID09PSBUX1NUUklORwogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gTW9kaWZ5ICR0b2tlbnMgZGlyZWN0bHkgc28gd2UgY2FuIHVzZSBpdCBsYXRlciB3aGVuIGNvbnZlcnRpbmcgZW51bSAiY2FzZSIuCiAgICAgICAgICAgICAgICAgICAgJHRva2Vuc1skc3RhY2tQdHJdWzBdID0gVF9FTlVNOwoKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddICAgID0gVF9FTlVNOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gJ1RfRU5VTSc7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAkdG9rZW5bMV07CiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CgogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgY2hhbmdlZCBmcm9tIFRfU1RSSU5HIHRvIFRfRU5VTSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBDb252ZXJ0IGVudW0gImNhc2UiIHRvIFRfRU5VTV9DQVNFCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgJHRva2VuWzBdID09PSBUX0NBU0UKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0aGlzLT50c3RyaW5nQ29udGV4dHNbJGZpbmFsVG9rZW5zWyRsYXN0Tm90RW1wdHlUb2tlbl1bJ2NvZGUnXV0pID09PSBmYWxzZQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRpc0VudW1DYXNlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkc2NvcGUgICAgICA9IDE7CgogICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgLSAxKTsgJGkgPiAwOyAkaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldID09PSAnfScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldID09PSAneycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLS07CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHNjb3BlICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldWzBdID09PSBUX1NXSVRDSCkgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRpXVswXSA9PT0gVF9FTlVNIHx8ICR0b2tlbnNbJGldWzBdID09PSBUX0VOVU1fQ0FTRSkgewogICAgICAgICAgICAgICAgICAgICAgICAkaXNFbnVtQ2FzZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0vL2VuZCBmb3IKCiAgICAgICAgICAgICAgICBpZiAoJGlzRW51bUNhc2UgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAvLyBNb2RpZnkgJHRva2VucyBkaXJlY3RseSBzbyB3ZSBjYW4gdXNlIGl0IGFzIG9wdGltaXNhdGlvbiBmb3Igb3RoZXIgZW51bSAiY2FzZSIuCiAgICAgICAgICAgICAgICAgICAgJHRva2Vuc1skc3RhY2tQdHJdWzBdID0gVF9FTlVNX0NBU0U7CgogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgICAgICAgICAgID0gW107CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX0VOVU1fQ0FTRTsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSAgICA9ICdUX0VOVU1fQ0FTRSc7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAkdG9rZW5bMV07CiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CgogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgY2hhbmdlZCBmcm9tIFRfQ0FTRSB0byBUX0VOVU1fQ0FTRSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBBcyBvZiBQSFAgOC4wIGZ1bGx5IHF1YWxpZmllZCwgcGFydGlhbGx5IHF1YWxpZmllZCBhbmQgbmFtZXNwYWNlIHJlbGF0aXZlCiAgICAgICAgICAgICAgICBpZGVudGlmaWVyIG5hbWVzIGFyZSB0b2tlbml6ZWQgZGlmZmVyZW50bHkuCiAgICAgICAgICAgICAgICBUaGlzICJ1bmRvZXMiIHRoZSBuZXcgdG9rZW5pemF0aW9uIHNvIHRoZSB0b2tlbml6YXRpb24gd2lsbCBiZSB0aGUgc2FtZSBpbgogICAgICAgICAgICAgICAgaW4gUEhQIDUsIDcgYW5kIDguCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPj0gODAwMDAKICAgICAgICAgICAgICAgICYmICR0b2tlbklzQXJyYXkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICgkdG9rZW5bMF0gPT09IFRfTkFNRV9RVUFMSUZJRUQKICAgICAgICAgICAgICAgIHx8ICR0b2tlblswXSA9PT0gVF9OQU1FX0ZVTExZX1FVQUxJRklFRAogICAgICAgICAgICAgICAgfHwgJHRva2VuWzBdID09PSBUX05BTUVfUkVMQVRJVkUpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJG5hbWUgPSAkdG9rZW5bMV07CgogICAgICAgICAgICAgICAgaWYgKCR0b2tlblswXSA9PT0gVF9OQU1FX0ZVTExZX1FVQUxJRklFRCkgewogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgICAgICAgICAgID0gW107CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX05TX1NFUEFSQVRPUjsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSAgICA9ICdUX05TX1NFUEFSQVRPUic7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAnXFwnOwogICAgICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdID0gJG5ld1Rva2VuOwogICAgICAgICAgICAgICAgICAgICsrJG5ld1N0YWNrUHRyOwoKICAgICAgICAgICAgICAgICAgICAkbmFtZSA9IGx0cmltKCRuYW1lLCAnXFwnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJHRva2VuWzBdID09PSBUX05BTUVfUkVMQVRJVkUpIHsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddICAgID0gVF9OQU1FU1BBQ0U7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gICAgPSAnVF9OQU1FU1BBQ0UnOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gc3Vic3RyKCRuYW1lLCAwLCA5KTsKICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKICAgICAgICAgICAgICAgICAgICArKyRuZXdTdGFja1B0cjsKCiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuICAgICAgICAgICAgPSBbXTsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvZGUnXSAgICA9IFRfTlNfU0VQQVJBVE9SOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gJ1RfTlNfU0VQQVJBVE9SJzsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvbnRlbnQnXSA9ICdcXCc7CiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CiAgICAgICAgICAgICAgICAgICAgKyskbmV3U3RhY2tQdHI7CgogICAgICAgICAgICAgICAgICAgICRuYW1lID0gc3Vic3RyKCRuYW1lLCAxMCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHBhcnRzICAgICA9IGV4cGxvZGUoJ1xcJywgJG5hbWUpOwogICAgICAgICAgICAgICAgJHBhcnRDb3VudCA9IGNvdW50KCRwYXJ0cyk7CiAgICAgICAgICAgICAgICAkbGFzdFBhcnQgID0gKCRwYXJ0Q291bnQgLSAxKTsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGFydHMgYXMgJGkgPT4gJHBhcnQpIHsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddICAgID0gVF9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gICAgPSAnVF9TVFJJTkcnOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJHBhcnQ7CiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CiAgICAgICAgICAgICAgICAgICAgKyskbmV3U3RhY2tQdHI7CgogICAgICAgICAgICAgICAgICAgIGlmICgkaSAhPT0gJGxhc3RQYXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgICAgICAgICAgID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddICAgID0gVF9OU19TRVBBUkFUT1I7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gJ1RfTlNfU0VQQVJBVE9SJzsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAnXFwnOwogICAgICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKICAgICAgICAgICAgICAgICAgICAgICAgKyskbmV3U3RhY2tQdHI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICR0eXBlICAgID0gVXRpbFxUb2tlbnM6OnRva2VuTmFtZSgkdG9rZW5bMF0pOwogICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gVXRpbFxDb21tb246OnByZXBhcmVGb3JPdXRwdXQoJHRva2VuWzFdKTsKICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgc3BsaXQgaW50byBpbmRpdmlkdWFsIHRva2Vuczsgd2FzOiAkdHlwZSA9PiAkY29udGVudCIuUEhQX0VPTDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgUEhQIDguMCBBdHRyaWJ1dGVzCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDAwMAogICAgICAgICAgICAgICAgJiYgJHRva2VuWzBdID09PSBUX0NPTU1FTlQKICAgICAgICAgICAgICAgICYmIHN0cnBvcygkdG9rZW5bMV0sICcjWycpID09PSAwCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHN1YlRva2VucyA9ICR0aGlzLT5wYXJzZVBocEF0dHJpYnV0ZSgkdG9rZW5zLCAkc3RhY2tQdHIpOwogICAgICAgICAgICAgICAgaWYgKCRzdWJUb2tlbnMgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBhcnJheV9zcGxpY2UoJHRva2VucywgJHN0YWNrUHRyLCAxLCAkc3ViVG9rZW5zKTsKICAgICAgICAgICAgICAgICAgICAkbnVtVG9rZW5zID0gY291bnQoJHRva2Vucyk7CgogICAgICAgICAgICAgICAgICAgICR0b2tlbklzQXJyYXkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICR0b2tlbiAgICAgICAgPSAkdG9rZW5zWyRzdGFja1B0cl07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICR0b2tlblswXSA9IFRfQVRUUklCVVRFOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgJHRva2VuWzBdID09PSBUX0FUVFJJQlVURQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIC8vIEdvIGxvb2tpbmcgZm9yIHRoZSBjbG9zZSBicmFja2V0LgogICAgICAgICAgICAgICAgJGJyYWNrZXRDbG9zZXIgPSAkdGhpcy0+ZmluZENsb3NlcigkdG9rZW5zLCAoJHN0YWNrUHRyICsgMSksIFsnWycsICcjWyddLCAnXScpOwoKICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgICAgICAgICAgID0gW107CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvZGUnXSAgICA9IFRfQVRUUklCVVRFOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gICAgPSAnVF9BVFRSSUJVVEUnOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAnI1snOwogICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CgogICAgICAgICAgICAgICAgJHRva2Vuc1skYnJhY2tldENsb3Nlcl0gICAgPSBbXTsKICAgICAgICAgICAgICAgICR0b2tlbnNbJGJyYWNrZXRDbG9zZXJdWzBdID0gVF9BVFRSSUJVVEVfRU5EOwogICAgICAgICAgICAgICAgJHRva2Vuc1skYnJhY2tldENsb3Nlcl1bMV0gPSAnXSc7CgogICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogdG9rZW4gJGJyYWNrZXRDbG9zZXIgY2hhbmdlZCBmcm9tIFRfQ0xPU0VfU1FVQVJFX0JSQUNLRVQgdG8gVF9BVFRSSUJVVEVfRU5EIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIFRva2VuaXplIHRoZSBwYXJhbWV0ZXIgbGFiZWxzIGZvciBQSFAgOC4wIG5hbWVkIHBhcmFtZXRlcnMgYXMgYSBzcGVjaWFsIFRfUEFSQU1fTkFNRQogICAgICAgICAgICAgICAgdG9rZW4gYW5kIGVuc3VyZSB0aGF0IHRoZSBjb2xvbiBhZnRlciBpdCBpcyBhbHdheXMgVF9DT0xPTi4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAoJHRva2VuWzBdID09PSBUX1NUUklORwogICAgICAgICAgICAgICAgfHwgcHJlZ19tYXRjaCgnYF5bYS16QS1aX1x4ODAtXHhmZl1gJywgJHRva2VuWzFdKSA9PT0gMSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgbm9uLWVtcHR5IHRva2VuLgogICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgKyAxKTsgJGkgPCAkbnVtVG9rZW5zOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNzZXQoVXRpbFxUb2tlbnM6OiRlbXB0eVRva2Vuc1skdG9rZW5zWyRpXVswXV0pID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJGldKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICYmIGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRpXSA9PT0gJzonCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHByZXZpb3VzIG5vbi1lbXB0eSB0b2tlbi4KICAgICAgICAgICAgICAgICAgICBmb3IgKCRqID0gKCRzdGFja1B0ciAtIDEpOyAkaiA+IDA7ICRqLS0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGpdKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRva2Vuc1skal1bMF1dKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGpdKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCR0b2tlbnNbJGpdID09PSAnKCcKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRva2Vuc1skal0gPT09ICcsJykKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuICAgICAgICAgICAgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX1BBUkFNX05BTUU7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gJ1RfUEFSQU1fTkFNRSc7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJHRva2VuWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKCiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBvcmlnaW5hbCB0b2tlbiBzdGFjayBzbyB0aGF0IGZ1dHVyZSBjaGVja3MsIGxpa2UKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5pbmcgVF9DT0xPTiB2cyBUX0lOTElORV9FTFNFIGNhbiBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbnNbJHN0YWNrUHRyXVswXSA9IFRfUEFSQU1fTkFNRTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSBVdGlsXFRva2Vuczo6dG9rZW5OYW1lKCR0b2tlblswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgY2hhbmdlZCBmcm9tICR0eXBlIHRvIFRfUEFSQU1fTkFNRSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICJyZWFkb25seSIga2V5d29yZCBmb3IgUEhQIDwgOC4xCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDEwMAogICAgICAgICAgICAgICAgJiYgJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgc3RydG9sb3dlcigkdG9rZW5bMV0pID09PSAncmVhZG9ubHknCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdGhpcy0+dHN0cmluZ0NvbnRleHRzWyRmaW5hbFRva2Vuc1skbGFzdE5vdEVtcHR5VG9rZW5dWydjb2RlJ11dKSA9PT0gZmFsc2UKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgbm9uLXdoaXRlc3BhY2UgdG9rZW4uCiAgICAgICAgICAgICAgICBmb3IgKCRpID0gKCRzdGFja1B0ciArIDEpOyAkaSA8ICRudW1Ub2tlbnM7ICRpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHRva2Vuc1skaV0pID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICB8fCAkdG9rZW5zWyRpXVswXSAhPT0gVF9XSElURVNQQUNFCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRva2Vuc1skaV0pID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgIHx8ICR0b2tlbnNbJGldICE9PSAnKCcKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdID0gWwogICAgICAgICAgICAgICAgICAgICAgICAnY29kZScgICAgPT4gVF9SRUFET05MWSwKICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnICAgID0+ICdUX1JFQURPTkxZJywKICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQnID0+ICR0b2tlblsxXSwKICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwoKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgQmVmb3JlIFBIUCA3LjAsIHRoZSAieWllbGQgZnJvbSIgd2FzIHRva2VuaXplZCBhcwogICAgICAgICAgICAgICAgVF9ZSUVMRCwgVF9XSElURVNQQUNFIGFuZCBUX1NUUklORy4gU28gbG9vayBmb3IKICAgICAgICAgICAgICAgIGFuZCBjaGFuZ2UgdGhpcyB0b2tlbiBpbiBlYXJsaWVyIHZlcnNpb25zLgogICAgICAgICAgICAqLwoKICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgNzAwMDAKICAgICAgICAgICAgICAgICYmIFBIUF9WRVJTSU9OX0lEID49IDUwNTAwCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5Jc0FycmF5ID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5bMF0gPT09IFRfWUlFTEQKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbKCRzdGFja1B0ciArIDIpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVswXSA9PT0gVF9XSElURVNQQUNFCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAyKV1bMF0gPT09IFRfU1RSSU5HCiAgICAgICAgICAgICAgICAmJiBzdHJ0b2xvd2VyKCR0b2tlbnNbKCRzdGFja1B0ciArIDIpXVsxXSkgPT09ICdmcm9tJwogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIC8vIENvdWxkIGJlIG11bHRpLWxpbmUsIHNvIGFkanVzdCB0aGUgdG9rZW4gc3RhY2suCiAgICAgICAgICAgICAgICAkdG9rZW5bMF0gID0gVF9ZSUVMRF9GUk9NOwogICAgICAgICAgICAgICAgJHRva2VuWzFdIC49ICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVsxXS4kdG9rZW5zWygkc3RhY2tQdHIgKyAyKV1bMV07CgogICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgKyAxKTsgJGkgPD0gKCRzdGFja1B0ciArIDIpOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlICAgID0gVXRpbFxUb2tlbnM6OnRva2VuTmFtZSgkdG9rZW5zWyRpXVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gVXRpbFxDb21tb246OnByZXBhcmVGb3JPdXRwdXQoJHRva2Vuc1skaV1bMV0pOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkaSBtZXJnZWQgaW50byBUX1lJRUxEX0ZST007IHdhczogJHR5cGUgPT4gJGNvbnRlbnQiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSA9IG51bGw7CiAgICAgICAgICAgICAgICAkdG9rZW5zWygkc3RhY2tQdHIgKyAyKV0gPSBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgQmVmb3JlIFBIUCA1LjUsIHRoZSB5aWVsZCBrZXl3b3JkIHdhcyB0b2tlbml6ZWQgYXMKICAgICAgICAgICAgICAgIFRfU1RSSU5HLiBTbyBsb29rIGZvciBhbmQgY2hhbmdlIHRoaXMgdG9rZW4gaW4KICAgICAgICAgICAgICAgIGVhcmxpZXIgdmVyc2lvbnMuCiAgICAgICAgICAgICAgICBDaGVja3MgYWxzbyBpZiBpdCBpcyBqdXN0ICJ5aWVsZCIgb3IgInlpZWxkIGZyb20iLgogICAgICAgICAgICAqLwoKICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgNTA1MDAKICAgICAgICAgICAgICAgICYmICR0b2tlbklzQXJyYXkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlblswXSA9PT0gVF9TVFJJTkcKICAgICAgICAgICAgICAgICYmIHN0cnRvbG93ZXIoJHRva2VuWzFdKSA9PT0gJ3lpZWxkJwogICAgICAgICAgICAgICAgJiYgaXNzZXQoJHRoaXMtPnRzdHJpbmdDb250ZXh0c1skZmluYWxUb2tlbnNbJGxhc3ROb3RFbXB0eVRva2VuXVsnY29kZSddXSkgPT09IGZhbHNlCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWygkc3RhY2tQdHIgKyAyKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1soJHN0YWNrUHRyICsgMSldWzBdID09PSBUX1dISVRFU1BBQ0UKICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAyKV1bMF0gPT09IFRfU1RSSU5HCiAgICAgICAgICAgICAgICAgICAgJiYgc3RydG9sb3dlcigkdG9rZW5zWygkc3RhY2tQdHIgKyAyKV1bMV0pID09PSAnZnJvbScKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIC8vIENvdWxkIGJlIG11bHRpLWxpbmUsIHNvIGp1c3QganVzdCB0aGUgdG9rZW4gc3RhY2suCiAgICAgICAgICAgICAgICAgICAgJHRva2VuWzBdICA9IFRfWUlFTERfRlJPTTsKICAgICAgICAgICAgICAgICAgICAkdG9rZW5bMV0gLj0gJHRva2Vuc1soJHN0YWNrUHRyICsgMSldWzFdLiR0b2tlbnNbKCRzdGFja1B0ciArIDIpXVsxXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAoJHN0YWNrUHRyICsgMSk7ICRpIDw9ICgkc3RhY2tQdHIgKyAyKTsgJGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgICAgPSBVdGlsXFRva2Vuczo6dG9rZW5OYW1lKCR0b2tlbnNbJGldWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gVXRpbFxDb21tb246OnByZXBhcmVGb3JPdXRwdXQoJHRva2Vuc1skaV1bMV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogdG9rZW4gJGkgbWVyZ2VkIGludG8gVF9ZSUVMRF9GUk9NOyB3YXM6ICR0eXBlID0+ICRjb250ZW50Ii5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0gPSBudWxsOwogICAgICAgICAgICAgICAgICAgICR0b2tlbnNbKCRzdGFja1B0ciArIDIpXSA9IG51bGw7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgICAgICAgICAgID0gW107CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX1lJRUxEOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gJ1RfWUlFTEQnOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJHRva2VuWzFdOwogICAgICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdID0gJG5ld1Rva2VuOwoKICAgICAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBCZWZvcmUgUEhQIDUuNiwgdGhlIC4uLiBvcGVyYXRvciB3YXMgdG9rZW5pemVkIGFzIHRocmVlCiAgICAgICAgICAgICAgICBUX1NUUklOR19DT05DQVQgdG9rZW5zIGluIGEgcm93LiBTbyBsb29rIGZvciBhbmQgY29tYmluZQogICAgICAgICAgICAgICAgdGhlc2UgdG9rZW5zIGluIGVhcmxpZXIgdmVyc2lvbnMuCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICYmICR0b2tlblswXSA9PT0gJy4nCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWygkc3RhY2tQdHIgKyAyKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0gPT09ICcuJwogICAgICAgICAgICAgICAgJiYgJHRva2Vuc1soJHN0YWNrUHRyICsgMildID09PSAnLicKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX0VMTElQU0lTOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gICAgPSAnVF9FTExJUFNJUyc7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvbnRlbnQnXSA9ICcuLi4nOwogICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CgogICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CiAgICAgICAgICAgICAgICAkc3RhY2tQdHIgKz0gMjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgQmVmb3JlIFBIUCA1LjYsIHRoZSAqKiBvcGVyYXRvciB3YXMgdG9rZW5pemVkIGFzIHR3bwogICAgICAgICAgICAgICAgVF9NVUxUSVBMWSB0b2tlbnMgaW4gYSByb3cuIFNvIGxvb2sgZm9yIGFuZCBjb21iaW5lCiAgICAgICAgICAgICAgICB0aGVzZSB0b2tlbnMgaW4gZWFybGllciB2ZXJzaW9ucy4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSBmYWxzZQogICAgICAgICAgICAgICAgJiYgJHRva2VuWzBdID09PSAnKicKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSA9PT0gJyonCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJG5ld1Rva2VuICAgICAgICAgICAgPSBbXTsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddICAgID0gVF9QT1c7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSAgICA9ICdUX1BPVyc7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvbnRlbnQnXSA9ICcqKic7CiAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKCiAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICRzdGFja1B0cisrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBCZWZvcmUgUEhQIDUuNiwgdGhlICoqPSBvcGVyYXRvciB3YXMgdG9rZW5pemVkIGFzCiAgICAgICAgICAgICAgICBUX01VTFRJUExZIGZvbGxvd2VkIGJ5IFRfTVVMX0VRVUFMLiBTbyBsb29rIGZvciBhbmQgY29tYmluZQogICAgICAgICAgICAgICAgdGhlc2UgdG9rZW5zIGluIGVhcmxpZXIgdmVyc2lvbnMuCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICYmICR0b2tlblswXSA9PT0gJyonCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiBpc19hcnJheSgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV1bMV0gPT09ICcqPScKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX1BPV19FUVVBTDsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gJ1RfUE9XX0VRVUFMJzsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJyoqPSc7CiAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKCiAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICRzdGFja1B0cisrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBCZWZvcmUgUEhQIDcsIHRoZSA/Pz0gb3BlcmF0b3Igd2FzIHRva2VuaXplZCBhcwogICAgICAgICAgICAgICAgVF9JTkxJTkVfVEhFTiwgVF9JTkxJTkVfVEhFTiwgVF9FUVVBTC4KICAgICAgICAgICAgICAgIEJldHdlZW4gUEhQIDcuMCBhbmQgNy4zLCB0aGUgPz89IG9wZXJhdG9yIHdhcyB0b2tlbml6ZWQgYXMKICAgICAgICAgICAgICAgIFRfQ09BTEVTQ0UsIFRfRVFVQUwuCiAgICAgICAgICAgICAgICBTbyBsb29rIGZvciBhbmQgY29tYmluZSB0aGVzZSB0b2tlbnMgaW4gZWFybGllciB2ZXJzaW9ucy4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmICgoJHRva2VuSXNBcnJheSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICYmICR0b2tlblswXSA9PT0gJz8nCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV1bMF0gPT09ICc/JwogICAgICAgICAgICAgICAgJiYgaXNzZXQoJHRva2Vuc1soJHN0YWNrUHRyICsgMildKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgJHRva2Vuc1soJHN0YWNrUHRyICsgMildWzBdID09PSAnPScpCiAgICAgICAgICAgICAgICB8fCAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgJHRva2VuWzBdID09PSBUX0NPQUxFU0NFCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV1bMF0gPT09ICc9JykKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX0NPQUxFU0NFX0VRVUFMOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gICAgPSAnVF9DT0FMRVNDRV9FUVVBTCc7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvbnRlbnQnXSA9ICc/Pz0nOwogICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CgogICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CiAgICAgICAgICAgICAgICAkc3RhY2tQdHIrKzsKCiAgICAgICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAvLyBQcmUgUEhQIDcuCiAgICAgICAgICAgICAgICAgICAgJHN0YWNrUHRyKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBCZWZvcmUgUEhQIDcsIHRoZSA/PyBvcGVyYXRvciB3YXMgdG9rZW5pemVkIGFzCiAgICAgICAgICAgICAgICBUX0lOTElORV9USEVOIGZvbGxvd2VkIGJ5IFRfSU5MSU5FX1RIRU4uCiAgICAgICAgICAgICAgICBTbyBsb29rIGZvciBhbmQgY29tYmluZSB0aGVzZSB0b2tlbnMgaW4gZWFybGllciB2ZXJzaW9ucy4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSBmYWxzZQogICAgICAgICAgICAgICAgJiYgJHRva2VuWzBdID09PSAnPycKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVswXSA9PT0gJz8nCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJG5ld1Rva2VuICAgICAgICAgICAgPSBbXTsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddICAgID0gVF9DT0FMRVNDRTsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gJ1RfQ09BTEVTQ0UnOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAnPz8nOwogICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CgogICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CiAgICAgICAgICAgICAgICAkc3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgQmVmb3JlIFBIUCA4LCB0aGUgPy0+IG9wZXJhdG9yIHdhcyB0b2tlbml6ZWQgYXMKICAgICAgICAgICAgICAgIFRfSU5MSU5FX1RIRU4gZm9sbG93ZWQgYnkgVF9PQkpFQ1RfT1BFUkFUT1IuCiAgICAgICAgICAgICAgICBTbyBsb29rIGZvciBhbmQgY29tYmluZSB0aGVzZSB0b2tlbnMgaW4gZWFybGllciB2ZXJzaW9ucy4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSBmYWxzZQogICAgICAgICAgICAgICAgJiYgJHRva2VuWzBdID09PSAnPycKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmIGlzX2FycmF5KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXVswXSA9PT0gVF9PQkpFQ1RfT1BFUkFUT1IKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX05VTExTQUZFX09CSkVDVF9PUEVSQVRPUjsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gJ1RfTlVMTFNBRkVfT0JKRUNUX09QRVJBVE9SJzsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJz8tPic7CiAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKCiAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICRzdGFja1B0cisrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBCZWZvcmUgUEhQIDcuNCwgdW5kZXJzY29yZXMgaW5zaWRlIFRfTE5VTUJFUiBhbmQgVF9ETlVNQkVSCiAgICAgICAgICAgICAgICB0b2tlbnMgc3BsaXQgdGhlIHRva2VuIHdpdGggYSBUX1NUUklORy4gU28gbG9vayBmb3IKICAgICAgICAgICAgICAgIGFuZCBjaGFuZ2UgdGhlc2UgdG9rZW5zIGluIGVhcmxpZXIgdmVyc2lvbnMuCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA3MDQwMAogICAgICAgICAgICAgICAgJiYgKCR0b2tlbklzQXJyYXkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICgkdG9rZW5bMF0gPT09IFRfTE5VTUJFUgogICAgICAgICAgICAgICAgfHwgJHRva2VuWzBdID09PSBUX0ROVU1CRVIpCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiBpc19hcnJheSgkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV1bMF0gPT09IFRfU1RSSU5HCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgKyAxKV1bMV1bMF0gPT09ICdfJykKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkbmV3Q29udGVudCA9ICR0b2tlblsxXTsKICAgICAgICAgICAgICAgICRuZXdUeXBlICAgID0gJHRva2VuWzBdOwogICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgKyAxKTsgJGkgPCAkbnVtVG9rZW5zOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1skaV1bMF0gPT09IFRfTE5VTUJFUgogICAgICAgICAgICAgICAgICAgICAgICB8fCAkdG9rZW5zWyRpXVswXSA9PT0gVF9ETlVNQkVSCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdDb250ZW50IC49ICR0b2tlbnNbJGldWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRpXVswXSA9PT0gVF9TVFJJTkcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1skaV1bMV1bMF0gPT09ICdfJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHN0cnBvcygkbmV3Q29udGVudCwgJzB4JykgPT09IDAKICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJlZ19tYXRjaCgnYF4oKD88IVwuKV9bMC05QS1GXVswLTlBLUZcLl0qKSskYGlEJywgJHRva2Vuc1skaV1bMV0pID09PSAxKQogICAgICAgICAgICAgICAgICAgICAgICB8fCAoc3RycG9zKCRuZXdDb250ZW50LCAnMHgnKSAhPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAmJiBzdWJzdHIoJG5ld0NvbnRlbnQsIC0xKSAhPT0gJy4nCiAgICAgICAgICAgICAgICAgICAgICAgICYmIHN1YnN0cihzdHJ0b2xvd2VyKCRuZXdDb250ZW50KSwgLTEpICE9PSAnZScKICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJlZ19tYXRjaCgnYF4oPzooPzwhW1wuZV0pX1swLTldWzAtOWVcLl0qKSskYGlEJywgJHRva2Vuc1skaV1bMV0pID09PSAxKSkKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld0NvbnRlbnQgLj0gJHRva2Vuc1skaV1bMV07CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZsb2F0cy4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnN0cihzdHJ0b2xvd2VyKCR0b2tlbnNbJGldWzFdKSwgLTEpID09PSAnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgkdG9rZW5zWygkaSArIDEpXSA9PT0gJy0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkdG9rZW5zWygkaSArIDEpXSA9PT0gJysnKQogICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdDb250ZW50IC49ICR0b2tlbnNbKCRpICsgMSldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfS8vZW5kIGZvcgoKICAgICAgICAgICAgICAgIGlmICgkbmV3VHlwZSA9PT0gVF9MTlVNQkVSCiAgICAgICAgICAgICAgICAgICAgJiYgKChzdHJpcG9zKCRuZXdDb250ZW50LCAnMHgnKSA9PT0gMCAmJiBoZXhkZWMoc3RyX3JlcGxhY2UoJ18nLCAnJywgJG5ld0NvbnRlbnQpKSA+IFBIUF9JTlRfTUFYKQogICAgICAgICAgICAgICAgICAgIHx8IChzdHJpcG9zKCRuZXdDb250ZW50LCAnMGInKSA9PT0gMCAmJiBiaW5kZWMoc3RyX3JlcGxhY2UoJ18nLCAnJywgJG5ld0NvbnRlbnQpKSA+IFBIUF9JTlRfTUFYKQogICAgICAgICAgICAgICAgICAgIHx8IChzdHJpcG9zKCRuZXdDb250ZW50LCAnMG8nKSA9PT0gMCAmJiBvY3RkZWMoc3RyX3JlcGxhY2UoJ18nLCAnJywgJG5ld0NvbnRlbnQpKSA+IFBIUF9JTlRfTUFYKQogICAgICAgICAgICAgICAgICAgIHx8IChzdHJpcG9zKCRuZXdDb250ZW50LCAnMHgnKSAhPT0gMAogICAgICAgICAgICAgICAgICAgICYmIHN0cmlwb3MoJG5ld0NvbnRlbnQsICdlJykgIT09IGZhbHNlIHx8IHN0cnBvcygkbmV3Q29udGVudCwgJy4nKSAhPT0gZmFsc2UpCiAgICAgICAgICAgICAgICAgICAgfHwgKHN0cnBvcygkbmV3Q29udGVudCwgJzAnKSA9PT0gMCAmJiBzdHJpcG9zKCRuZXdDb250ZW50LCAnMHgnKSAhPT0gMAogICAgICAgICAgICAgICAgICAgICYmIHN0cmlwb3MoJG5ld0NvbnRlbnQsICcwYicpICE9PSAwICYmIG9jdGRlYyhzdHJfcmVwbGFjZSgnXycsICcnLCAkbmV3Q29udGVudCkpID4gUEhQX0lOVF9NQVgpCiAgICAgICAgICAgICAgICAgICAgfHwgKHN0cnBvcygkbmV3Q29udGVudCwgJzAnKSAhPT0gMCAmJiBzdHJfcmVwbGFjZSgnXycsICcnLCAkbmV3Q29udGVudCkgPiBQSFBfSU5UX01BWCkpCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkbmV3VHlwZSA9IFRfRE5VTUJFUjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSAkbmV3VHlwZTsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gVXRpbFxUb2tlbnM6OnRva2VuTmFtZSgkbmV3VHlwZSk7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvbnRlbnQnXSA9ICRuZXdDb250ZW50OwogICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CgogICAgICAgICAgICAgICAgJG5ld1N0YWNrUHRyKys7CiAgICAgICAgICAgICAgICAkc3RhY2tQdHIgPSAoJGkgLSAxKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBCYWNrZmlsbCB0aGUgVF9NQVRDSCB0b2tlbiBmb3IgUEhQIHZlcnNpb25zIDwgOC4wIGFuZAogICAgICAgICAgICAgICAgZG8gaW5pdGlhbCBjb3JyZWN0aW9uIGZvciBub24tbWF0Y2ggZXhwcmVzc2lvbiBUX01BVENIIHRva2VucwogICAgICAgICAgICAgICAgdG8gVF9TVFJJTkcgZm9yIFBIUCA+PSA4LjAuCiAgICAgICAgICAgICAgICBBIGZpbmFsIGNoZWNrIGZvciBub24tbWF0Y2ggZXhwcmVzc2lvbiBUX01BVENIIHRva2VucyBpcyBkb25lCiAgICAgICAgICAgICAgICBpbiBQSFA6OnByb2Nlc3NBZGRpdGlvbmFsKCkuCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgKCgkdG9rZW5bMF0gPT09IFRfU1RSSU5HCiAgICAgICAgICAgICAgICAmJiBzdHJ0b2xvd2VyKCR0b2tlblsxXSkgPT09ICdtYXRjaCcpCiAgICAgICAgICAgICAgICB8fCAkdG9rZW5bMF0gPT09IFRfTUFUQ0gpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGlzTWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgIGZvciAoJHggPSAoJHN0YWNrUHRyICsgMSk7ICR4IDwgJG51bVRva2VuczsgJHgrKykgewogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdG9rZW5zWyR4XVswXSwgVXRpbFxUb2tlbnM6OiRlbXB0eVRva2Vuc1skdG9rZW5zWyR4XVswXV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJHhdICE9PSAnKCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSBtYXRjaCBleHByZXNzaW9uLgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dHN0cmluZ0NvbnRleHRzWyRmaW5hbFRva2Vuc1skbGFzdE5vdEVtcHR5VG9rZW5dWydjb2RlJ11dKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBBbHNvIG5vdCBhIG1hdGNoIGV4cHJlc3Npb24uCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGlzTWF0Y2ggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfS8vZW5kIGZvcgoKICAgICAgICAgICAgICAgIGlmICgkaXNNYXRjaCA9PT0gdHJ1ZSAmJiAkdG9rZW5bMF0gPT09IFRfU1RSSU5HKSB7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuICAgICAgICAgICAgPSBbXTsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvZGUnXSAgICA9IFRfTUFUQ0g7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gICAgPSAnVF9NQVRDSCc7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAkdG9rZW5bMV07CgogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgY2hhbmdlZCBmcm9tIFRfU1RSSU5HIHRvIFRfTUFUQ0giLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKICAgICAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJGlzTWF0Y2ggPT09IGZhbHNlICYmICR0b2tlblswXSA9PT0gVF9NQVRDSCkgewogICAgICAgICAgICAgICAgICAgIC8vIFBIUCA4LjAsIG1hdGNoIGtleXdvcmQsIGJ1dCBub3QgYSBtYXRjaCBleHByZXNzaW9uLgogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgICAgICAgICAgID0gW107CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX1NUUklORzsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSAgICA9ICdUX1NUUklORyc7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAkdG9rZW5bMV07CgogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgY2hhbmdlZCBmcm9tIFRfTUFUQ0ggdG8gVF9TVFJJTkciLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKICAgICAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBSZXRva2VuaXplIHRoZSBUX0RFRkFVTFQgaW4gbWF0Y2ggY29udHJvbCBzdHJ1Y3R1cmVzIGFzIFRfTUFUQ0hfREVGQVVMVAogICAgICAgICAgICAgICAgdG8gcHJldmVudCBzY29wZSBiZWluZyBzZXQgYW5kIHRoZSBzY29wZSBmb3Igc3dpdGNoIGRlZmF1bHQgc3RhdGVtZW50cwogICAgICAgICAgICAgICAgYnJlYWtpbmcuCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgJHRva2VuWzBdID09PSBUX0RFRkFVTFQKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0aGlzLT50c3RyaW5nQ29udGV4dHNbJGZpbmFsVG9rZW5zWyRsYXN0Tm90RW1wdHlUb2tlbl1bJ2NvZGUnXV0pID09PSBmYWxzZQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGZvciAoJHggPSAoJHN0YWNrUHRyICsgMSk7ICR4IDwgJG51bVRva2VuczsgJHgrKykgewogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyR4XSA9PT0gJywnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciBwb3RlbnRpYWwgdHJhaWxpbmcgY29tbWEgKHN1cHBvcnRlZCBpbiBQSFApLgogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdG9rZW5zWyR4XSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRva2Vuc1skeF1bMF1dKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9uLWVtcHR5LCBub24tY29tbWEgY29udGVudC4KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdG9rZW5zWyR4XSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAmJiBpc19hcnJheSgkdG9rZW5zWyR4XSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyR4XVswXSA9PT0gVF9ET1VCTEVfQVJST1cKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIC8vIE1vZGlmeSB0aGUgb3JpZ2luYWwgdG9rZW4gc3RhY2sgZm9yIHRoZSBkb3VibGUgYXJyb3cgc28gdGhhdAogICAgICAgICAgICAgICAgICAgIC8vIGZ1dHVyZSBjaGVja3MgY2FuIGRpc3JlZ2FyZCB0aGUgZG91YmxlIGFycm93IHRva2VuIG1vcmUgZWFzaWx5LgogICAgICAgICAgICAgICAgICAgIC8vIEZvciBtYXRjaCBleHByZXNzaW9uICJjYXNlIiBzdGF0ZW1lbnRzLCB0aGlzIGlzIGhhbmRsZWQKICAgICAgICAgICAgICAgICAgICAvLyBpbiBQSFA6OnByb2Nlc3NBZGRpdGlvbmFsKCkuCiAgICAgICAgICAgICAgICAgICAgJHRva2Vuc1skeF1bMF0gPSBUX01BVENIX0FSUk9XOwogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkeCBjaGFuZ2VkIGZyb20gVF9ET1VCTEVfQVJST1cgdG8gVF9NQVRDSF9BUlJPVyIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgICAgICAgICAgID0gW107CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX01BVENIX0RFRkFVTFQ7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gICAgPSAnVF9NQVRDSF9ERUZBVUxUJzsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvbnRlbnQnXSA9ICR0b2tlblsxXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHRva2VuICRzdGFja1B0ciBjaGFuZ2VkIGZyb20gVF9ERUZBVUxUIHRvIFRfTUFUQ0hfREVGQVVMVCIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdID0gJG5ld1Rva2VuOwogICAgICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIENvbnZlcnQgPyB0byBUX05VTExBQkxFIE9SIFRfSU5MSU5FX1RIRU4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSBmYWxzZSAmJiAkdG9rZW5bMF0gPT09ICc/JykgewogICAgICAgICAgICAgICAgJG5ld1Rva2VuICAgICAgICAgICAgPSBbXTsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJz8nOwoKICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgKiBDaGVjayBpZiB0aGUgbmV4dCBub24tZW1wdHkgdG9rZW4gaXMgb25lIG9mIHRoZSB0b2tlbnMgd2hpY2ggY2FuIGJlIHVzZWQKICAgICAgICAgICAgICAgICAqIGluIHR5cGUgZGVjbGFyYXRpb25zLiBJZiBub3QsIGl0J3MgZGVmaW5pdGVseSBhIHRlcm5hcnkuCiAgICAgICAgICAgICAgICAgKiBBdCB0aGlzIHBvaW50LCB0aGUgb25seSB0b2tlbiB0eXBlcyB3aGljaCBuZWVkIHRvIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbgogICAgICAgICAgICAgICAgICogYXMgcG90ZW50aWFsIHR5cGUgZGVjbGFyYXRpb25zIGFyZSBpZGVudGlmaWVyIG5hbWVzLCBUX0FSUkFZLCBUX0NBTExBQkxFIGFuZCBUX05TX1NFUEFSQVRPUi4KICAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAgICRsYXN0UmVsZXZhbnROb25FbXB0eSA9IG51bGw7CgogICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgKyAxKTsgJGkgPCAkbnVtVG9rZW5zOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG9rZW5UeXBlID0gJHRva2Vuc1skaV1bMF07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRva2VuVHlwZSA9ICR0b2tlbnNbJGldOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRva2VuVHlwZV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlblR5cGUgPT09IFRfU1RSSU5HCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0b2tlblR5cGUgPT09IFRfTkFNRV9GVUxMWV9RVUFMSUZJRUQKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRva2VuVHlwZSA9PT0gVF9OQU1FX1JFTEFUSVZFCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0b2tlblR5cGUgPT09IFRfTkFNRV9RVUFMSUZJRUQKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRva2VuVHlwZSA9PT0gVF9BUlJBWQogICAgICAgICAgICAgICAgICAgICAgICB8fCAkdG9rZW5UeXBlID09PSBUX05BTUVTUEFDRQogICAgICAgICAgICAgICAgICAgICAgICB8fCAkdG9rZW5UeXBlID09PSBUX05TX1NFUEFSQVRPUgogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGFzdFJlbGV2YW50Tm9uRW1wdHkgPSAkdG9rZW5UeXBlOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgoJHRva2VuVHlwZSAhPT0gVF9DQUxMQUJMRQogICAgICAgICAgICAgICAgICAgICAgICAmJiBpc3NldCgkbGFzdFJlbGV2YW50Tm9uRW1wdHkpID09PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCRsYXN0UmVsZXZhbnROb25FbXB0eSA9PT0gVF9BUlJBWQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5UeXBlID09PSAnKCcpCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoJGxhc3RSZWxldmFudE5vbkVtcHR5ID09PSBUX1NUUklORwogICAgICAgICAgICAgICAgICAgICAgICB8fCAkbGFzdFJlbGV2YW50Tm9uRW1wdHkgPT09IFRfTkFNRV9GVUxMWV9RVUFMSUZJRUQKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxhc3RSZWxldmFudE5vbkVtcHR5ID09PSBUX05BTUVfUkVMQVRJVkUKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxhc3RSZWxldmFudE5vbkVtcHR5ID09PSBUX05BTUVfUVVBTElGSUVEKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAoJHRva2VuVHlwZSA9PT0gVF9ET1VCTEVfQ09MT04KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRva2VuVHlwZSA9PT0gJygnCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0b2tlblR5cGUgPT09ICc6JykpCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogdG9rZW4gJHN0YWNrUHRyIGNoYW5nZWQgZnJvbSA/IHRvIFRfSU5MSU5FX1RIRU4iLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddID0gVF9JTkxJTkVfVEhFTjsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9JTkxJTkVfVEhFTic7CgogICAgICAgICAgICAgICAgICAgICAgICAkaW5zaWRlSW5saW5lSWZbXSA9ICRzdGFja1B0cjsKCiAgICAgICAgICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdID0gJG5ld1Rva2VuOwogICAgICAgICAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgMjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfS8vZW5kIGZvcgoKICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgKiBUaGlzIGNhbiBzdGlsbCBiZSBhIG51bGxhYmxlIHR5cGUgb3IgYSB0ZXJuYXJ5LgogICAgICAgICAgICAgICAgICogRG8gYWRkaXRpb25hbCBjaGVja2luZy4KICAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAgICRwcmV2Tm9uRW1wdHkgICAgID0gbnVsbDsKICAgICAgICAgICAgICAgICRsYXN0U2Vlbk5vbkVtcHR5ID0gbnVsbDsKCiAgICAgICAgICAgICAgICBmb3IgKCRpID0gKCRzdGFja1B0ciAtIDEpOyAkaSA+PSAwOyAkaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG9rZW5UeXBlID0gJHRva2Vuc1skaV1bMF07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRva2VuVHlwZSA9ICR0b2tlbnNbJGldOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlblR5cGUgPT09IFRfU1RBVElDCiAgICAgICAgICAgICAgICAgICAgICAgICYmICgkbGFzdFNlZW5Ob25FbXB0eSA9PT0gVF9ET1VCTEVfQ09MT04KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxhc3RTZWVuTm9uRW1wdHkgPT09ICcoJykKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RTZWVuTm9uRW1wdHkgPSAkdG9rZW5UeXBlOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkcHJldk5vbkVtcHR5ID09PSBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRva2VuVHlwZV0pID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3VuZCB0aGUgcHJldmlvdXMgbm9uLWVtcHR5IHRva2VuLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRva2VuVHlwZSA9PT0gJzonIHx8ICR0b2tlblR5cGUgPT09ICcsJyB8fCAkdG9rZW5UeXBlID09PSBUX0FUVFJJQlVURV9FTkQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddID0gVF9OVUxMQUJMRTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfTlVMTEFCTEUnOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHRva2VuICRzdGFja1B0ciBjaGFuZ2VkIGZyb20gPyB0byBUX05VTExBQkxFIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAkcHJldk5vbkVtcHR5ID0gJHRva2VuVHlwZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5UeXBlID09PSBUX0ZVTkNUSU9OCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0b2tlblR5cGUgPT09IFRfRk4KICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNzZXQoVXRpbFxUb2tlbnM6OiRtZXRob2RQcmVmaXhlc1skdG9rZW5UeXBlXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRva2VuVHlwZSA9PT0gVF9WQVIKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgY2hhbmdlZCBmcm9tID8gdG8gVF9OVUxMQUJMRSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gPSBUX05VTExBQkxFOwogICAgICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX05VTExBQkxFJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbl9hcnJheSgkdG9rZW5UeXBlLCBbVF9ET1VCTEVfQVJST1csIFRfT1BFTl9UQUcsIFRfT1BFTl9UQUdfV0lUSF9FQ0hPLCAnPScsICd7JywgJzsnXSwgdHJ1ZSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiB0b2tlbiAkc3RhY2tQdHIgY2hhbmdlZCBmcm9tID8gdG8gVF9JTkxJTkVfVEhFTiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gPSBUX0lOTElORV9USEVOOwogICAgICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0lOTElORV9USEVOJzsKCiAgICAgICAgICAgICAgICAgICAgICAgICRpbnNpZGVJbmxpbmVJZltdID0gJHN0YWNrUHRyOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0b2tlblR5cGVdKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RTZWVuTm9uRW1wdHkgPSAkdG9rZW5UeXBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0vL2VuZCBmb3IKCiAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIFRva2VucyBhZnRlciBhIGRvdWJsZSBjb2xvbiBtYXkgbG9vayBsaWtlIHNjb3BlIG9wZW5lcnMsCiAgICAgICAgICAgICAgICBzdWNoIGFzIHdoZW4gd3JpdGluZyBjb2RlIGxpa2UgRm9vOjpOQU1FU1BBQ0UsIGJ1dCB0aGV5IGFyZQogICAgICAgICAgICAgICAgb25seSBldmVyIHZhcmlhYmxlcyBvciBzdHJpbmdzLgogICAgICAgICAgICAqLwoKICAgICAgICAgICAgaWYgKCRzdGFja1B0ciA+IDEKICAgICAgICAgICAgICAgICYmIChpc19hcnJheSgkdG9rZW5zWygkc3RhY2tQdHIgLSAxKV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWygkc3RhY2tQdHIgLSAxKV1bMF0gPT09IFRfUEFBTUFZSU1fTkVLVURPVEFZSU0pCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5Jc0FycmF5ID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5bMF0gIT09IFRfU1RSSU5HCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5bMF0gIT09IFRfVkFSSUFCTEUKICAgICAgICAgICAgICAgICYmICR0b2tlblswXSAhPT0gVF9ET0xMQVIKICAgICAgICAgICAgICAgICYmIGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRva2VuWzBdXSkgPT09IGZhbHNlCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJG5ld1Rva2VuICAgICAgICAgICAgPSBbXTsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddICAgID0gVF9TVFJJTkc7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSAgICA9ICdUX1NUUklORyc7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvbnRlbnQnXSA9ICR0b2tlblsxXTsKICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdID0gJG5ld1Rva2VuOwoKICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBCYWNrZmlsbCB0aGUgVF9GTiB0b2tlbiBmb3IgUEhQIHZlcnNpb25zIDwgNy40LgogICAgICAgICAgICAqLwoKICAgICAgICAgICAgaWYgKCR0b2tlbklzQXJyYXkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlblswXSA9PT0gVF9TVFJJTkcKICAgICAgICAgICAgICAgICYmIHN0cnRvbG93ZXIoJHRva2VuWzFdKSA9PT0gJ2ZuJwogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIC8vIE1vZGlmeSB0aGUgb3JpZ2luYWwgdG9rZW4gc3RhY2sgc28gdGhhdAogICAgICAgICAgICAgICAgLy8gZnV0dXJlIGNoZWNrcyAobGlrZSBsb29raW5nIGZvciBUX05VTExBQkxFKSBjYW4KICAgICAgICAgICAgICAgIC8vIGRldGVjdCB0aGUgVF9GTiB0b2tlbiBtb3JlIGVhc2lseS4KICAgICAgICAgICAgICAgICR0b2tlbnNbJHN0YWNrUHRyXVswXSA9IFRfRk47CiAgICAgICAgICAgICAgICAkdG9rZW5bMF0gPSBUX0ZOOwogICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogdG9rZW4gJHN0YWNrUHRyIGNoYW5nZWQgZnJvbSBUX1NUUklORyB0byBUX0ZOIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgVGhpcyBpcyBhIHNwZWNpYWwgY29uZGl0aW9uIGZvciBUX0FSUkFZIHRva2VucyB1c2VkIGZvcgogICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV0dXJuIHR5cGVzLiBXZSB3YW50IHRvIGtlZXAgdGhlIHBhcmVudGhlc2lzIG1hcCBjbGVhbiwKICAgICAgICAgICAgICAgIHNvIGxldCdzIHRhZyB0aGVzZSB0b2tlbnMgYXMgVF9TVFJJTkcuCiAgICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgKCR0b2tlblswXSA9PT0gVF9GVU5DVElPTgogICAgICAgICAgICAgICAgfHwgJHRva2VuWzBdID09PSBUX0ZOKQogICAgICAgICAgICAgICAgJiYgJGZpbmFsVG9rZW5zWyRsYXN0Tm90RW1wdHlUb2tlbl1bJ2NvZGUnXSAhPT0gVF9VU0UKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAvLyBHbyBsb29raW5nIGZvciB0aGUgY29sb24gdG8gc3RhcnQgdGhlIHJldHVybiB0eXBlIGhpbnQuCiAgICAgICAgICAgICAgICAvLyBTdGFydCBieSBmaW5kaW5nIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzIG9mIHRoZSBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICRwYXJlbnRoZXNpc1N0YWNrICA9IFtdOwogICAgICAgICAgICAgICAgJHBhcmVudGhlc2lzQ2xvc2VyID0gZmFsc2U7CiAgICAgICAgICAgICAgICBmb3IgKCR4ID0gKCRzdGFja1B0ciArIDEpOyAkeCA8ICRudW1Ub2tlbnM7ICR4KyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHRva2Vuc1skeF0pID09PSBmYWxzZSAmJiAkdG9rZW5zWyR4XSA9PT0gJygnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbnRoZXNpc1N0YWNrW10gPSAkeDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzX2FycmF5KCR0b2tlbnNbJHhdKSA9PT0gZmFsc2UgJiYgJHRva2Vuc1skeF0gPT09ICcpJykgewogICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3AoJHBhcmVudGhlc2lzU3RhY2spOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHBhcmVudGhlc2lzU3RhY2spID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyZW50aGVzaXNDbG9zZXIgPSAkeDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkcGFyZW50aGVzaXNDbG9zZXIgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkeCA9ICgkcGFyZW50aGVzaXNDbG9zZXIgKyAxKTsgJHggPCAkbnVtVG9rZW5zOyAkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdG9rZW5zWyR4XSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0b2tlbnNbJHhdWzBdXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9uLWVtcHR5IGNvbnRlbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHRva2Vuc1skeF0pID09PSB0cnVlICYmICR0b2tlbnNbJHhdWzBdID09PSBUX1VTRSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgdXNlIHN0YXRlbWVudHMsIHNvIHNlYXJjaCBhaGVhZCBmb3IgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkeCArPSAxOyAkeCA8ICRudW1Ub2tlbnM7ICR4KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJHhdKSA9PT0gZmFsc2UgJiYgJHRva2Vuc1skeF0gPT09ICcpJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUoMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdG9rZW5zWyR4XSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNfYXJyYXkoJHRva2Vuc1skeF0pID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyR4XSA9PT0gJzonCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSByZXR1cm4gdHlwZS4KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkeCArPSAxOyAkeCA8ICRudW1Ub2tlbnM7ICR4KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdG9rZW5zWyR4XSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0b2tlbnNbJHhdWzBdXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoaXRlc3BhY2Ugb3IgY29tbWVudHMgYmVmb3JlIHRoZSByZXR1cm4gdHlwZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHRva2Vuc1skeF0pID09PSBmYWxzZSAmJiAkdG9rZW5zWyR4XSA9PT0gJz8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgYSBudWxsYWJsZSBvcGVyYXRvciwgc28gc2tpcCBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXQgYWxzbyBjb252ZXJ0IHRoZSB0b2tlbiB0byBzYXZlIHRoZSB0b2tlbml6ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGJpdCBvZiB0aW1lIGxhdGVyIG9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbnNbJHhdID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX05VTExBQkxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHRva2VuICR4IGNoYW5nZWQgZnJvbSA/IHRvIFRfTlVMTEFCTEUiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfS8vZW5kIGZvcgogICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIEJlZm9yZSBQSFAgNywgdGhlIDw9PiBvcGVyYXRvciB3YXMgdG9rZW5pemVkIGFzCiAgICAgICAgICAgICAgICBUX0lTX1NNQUxMRVJfT1JfRVFVQUwgZm9sbG93ZWQgYnkgVF9HUkVBVEVSX1RIQU4uCiAgICAgICAgICAgICAgICBTbyBsb29rIGZvciBhbmQgY29tYmluZSB0aGVzZSB0b2tlbnMgaW4gZWFybGllciB2ZXJzaW9ucy4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkdG9rZW5bMF0gPT09IFRfSVNfU01BTExFUl9PUl9FUVVBTAogICAgICAgICAgICAgICAgJiYgaXNzZXQoJHRva2Vuc1soJHN0YWNrUHRyICsgMSldKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgJHRva2Vuc1soJHN0YWNrUHRyICsgMSldWzBdID09PSAnPicKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkbmV3VG9rZW4gICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gICAgPSBUX1NQQUNFU0hJUDsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddICAgID0gJ1RfU1BBQ0VTSElQJzsKICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJzw9Pic7CiAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKCiAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICRzdGFja1B0cisrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICBQSFAgZG9lc24ndCBhc3NpZ24gYSB0b2tlbiB0byBnb3RvIGxhYmVscywgc28gd2UgaGF2ZSB0by4KICAgICAgICAgICAgICAgIFRoZXNlIGFyZSBqdXN0IHN0cmluZyB0b2tlbnMgd2l0aCBhIHNpbmdsZSBjb2xvbiBhZnRlciB0aGVtLiBEb3VibGUKICAgICAgICAgICAgICAgIGNvbG9ucyBhcmUgYWxyZWFkeSB0b2tlbml6ZWQgYW5kIHNvIGRvbid0IGludGVyZmVyZSB3aXRoIHRoaXMgY2hlY2suCiAgICAgICAgICAgICAgICBCdXQgd2UgZG8gaGF2ZSB0byBhY2NvdW50IGZvciBDQVNFIHN0YXRlbWVudHMsIHRoYXQgbG9vayBqdXN0IGxpa2UKICAgICAgICAgICAgICAgIGdvdG8gbGFiZWxzLgogICAgICAgICAgICAqLwoKICAgICAgICAgICAgaWYgKCR0b2tlbklzQXJyYXkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlblswXSA9PT0gVF9TVFJJTkcKICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICR0b2tlbnNbKCRzdGFja1B0ciArIDEpXSA9PT0gJzonCiAgICAgICAgICAgICAgICAmJiAoaXNfYXJyYXkoJHRva2Vuc1soJHN0YWNrUHRyIC0gMSldKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgIHx8ICR0b2tlbnNbKCRzdGFja1B0ciAtIDEpXVswXSAhPT0gVF9QQUFNQVlJTV9ORUtVRE9UQVlJTSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkc3RvcFRva2VucyA9IFsKICAgICAgICAgICAgICAgICAgICBUX0NBU0UgICAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFRfU0VNSUNPTE9OICAgICAgICAgID0+IHRydWUsCiAgICAgICAgICAgICAgICAgICAgVF9PUEVOX1RBRyAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFRfSU5MSU5FX1RIRU4gICAgICAgID0+IHRydWUsCiAgICAgICAgICAgICAgICAgICAgVF9FTlVNICAgICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgZm9yICgkeCA9ICgkbmV3U3RhY2tQdHIgLSAxKTsgJHggPiAwOyAkeC0tKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRzdG9wVG9rZW5zWyRmaW5hbFRva2Vuc1skeF1bJ2NvZGUnXV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGZpbmFsVG9rZW5zWyR4XVsnY29kZSddICE9PSBUX0NBU0UKICAgICAgICAgICAgICAgICAgICAmJiAkZmluYWxUb2tlbnNbJHhdWydjb2RlJ10gIT09IFRfSU5MSU5FX1RIRU4KICAgICAgICAgICAgICAgICAgICAmJiAkZmluYWxUb2tlbnNbJHhdWydjb2RlJ10gIT09IFRfRU5VTQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50JyA9PiAkdG9rZW5bMV0uJzonLAogICAgICAgICAgICAgICAgICAgICAgICAnY29kZScgICAgPT4gVF9HT1RPX0xBQkVMLAogICAgICAgICAgICAgICAgICAgICAgICAndHlwZScgICAgPT4gJ1RfR09UT19MQUJFTCcsCiAgICAgICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHRva2VuICRzdGFja1B0ciBjaGFuZ2VkIGZyb20gVF9TVFJJTkcgdG8gVF9HT1RPX0xBQkVMIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiBza2lwcGluZyBUX0NPTE9OIHRva2VuICIuKCRzdGFja1B0ciArIDEpLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICAgICAkc3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgSWYgdGhpcyB0b2tlbiBoYXMgbmV3bGluZXMgaW4gaXRzIGNvbnRlbnQsIHNwbGl0IGVhY2ggbGluZSB1cAogICAgICAgICAgICAgICAgYW5kIGNyZWF0ZSBhIG5ldyB0b2tlbiBmb3IgZWFjaCBsaW5lLiBXZSBkbyB0aGlzIHNvIGl0J3MgZWFzaWVyCiAgICAgICAgICAgICAgICB0byBhc2NlcnRhaW4gd2hlcmUgZXJyb3JzIG9jY3VyIG9uIGEgbGluZS4KICAgICAgICAgICAgICAgIE5vdGUgdGhhdCAkdG9rZW5bMV0gaXMgdGhlIHRva2VuJ3MgY29udGVudC4KICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSB0cnVlICYmIHN0cnBvcygkdG9rZW5bMV0sICR0aGlzLT5lb2xDaGFyKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICR0b2tlbkxpbmVzID0gZXhwbG9kZSgkdGhpcy0+ZW9sQ2hhciwgJHRva2VuWzFdKTsKICAgICAgICAgICAgICAgICRudW1MaW5lcyAgID0gY291bnQoJHRva2VuTGluZXMpOwogICAgICAgICAgICAgICAgJG5ld1Rva2VuICAgPSBbCiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnICAgID0+IFV0aWxcVG9rZW5zOjp0b2tlbk5hbWUoJHRva2VuWzBdKSwKICAgICAgICAgICAgICAgICAgICAnY29kZScgICAgPT4gJHRva2VuWzBdLAogICAgICAgICAgICAgICAgICAgICdjb250ZW50JyA9PiAnJywKICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG51bUxpbmVzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gPSAkdG9rZW5MaW5lc1skaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKCRpID09PSAoJG51bUxpbmVzIC0gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbkxpbmVzWyRpXSA9PT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb250ZW50J10gLj0gJHRoaXMtPmVvbENoYXI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9ICRuZXdUb2tlbjsKICAgICAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFNvbWUgVF9TVFJJTkcgdG9rZW5zIHNob3VsZCByZW1haW4gdGhhdCB3YXkgZHVlIHRvIHRoZWlyIGNvbnRleHQuCiAgICAgICAgICAgICAgICBpZiAoJHRva2VuSXNBcnJheSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICYmICR0b2tlblswXSA9PT0gVF9TVFJJTkcKICAgICAgICAgICAgICAgICAgICAmJiBpc3NldCgkdGhpcy0+dHN0cmluZ0NvbnRleHRzWyRmaW5hbFRva2Vuc1skbGFzdE5vdEVtcHR5VG9rZW5dWydjb2RlJ11dKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBzeW50YXggbGlrZTogcmV0dXJuIG5ldyBzZWxmL25ldyBwYXJlbnQKICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBzZWxmL3BhcmVudCBzaG91bGQgbm90IGJlIGEgc3RyaW5nLgogICAgICAgICAgICAgICAgICAgICR0b2tlbkNvbnRlbnRMb3dlciA9IHN0cnRvbG93ZXIoJHRva2VuWzFdKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbmFsVG9rZW5zWyRsYXN0Tm90RW1wdHlUb2tlbl1bJ2NvZGUnXSA9PT0gVF9ORVcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCR0b2tlbkNvbnRlbnRMb3dlciA9PT0gJ3NlbGYnIHx8ICR0b2tlbkNvbnRlbnRMb3dlciA9PT0gJ3BhcmVudCcpCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmaW5hbFRva2Vuc1skbmV3U3RhY2tQdHJdID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQnID0+ICR0b2tlblsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbkNvbnRlbnRMb3dlciA9PT0gJ3NlbGYnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXVsnY29kZSddID0gVF9TRUxGOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl1bJ3R5cGUnXSA9ICdUX1NFTEYnOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRva2VuQ29udGVudExvd2VyID09PSAncGFyZW50JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl1bJ2NvZGUnXSA9IFRfUEFSRU5UOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl1bJ3R5cGUnXSA9ICdUX1BBUkVOVCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkZmluYWxUb2tlbnNbJG5ld1N0YWNrUHRyXSA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50JyA9PiAkdG9rZW5bMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZScgICAgPT4gVF9TVFJJTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZScgICAgPT4gJ1RfU1RSSU5HJywKICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRuZXdTdGFja1B0cisrOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAgICAgJG5ld1Rva2VuID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmICgkdG9rZW5Jc0FycmF5ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldChzZWxmOjokcmVzb2x2ZVRva2VuQ2FjaGVbJHRva2VuWzBdXSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuID0gc2VsZjo6JHJlc29sdmVUb2tlbkNhY2hlWyR0b2tlblswXV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY2FjaGVLZXkgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5bMF0gPT09IFRfU1RSSU5HKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjYWNoZUtleSA9IHN0cnRvbG93ZXIoJHRva2VuWzFdKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCR0b2tlblswXSAhPT0gVF9DVVJMWV9PUEVOKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjYWNoZUtleSA9ICR0b2tlblswXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkY2FjaGVLZXkgIT09IG51bGwgJiYgaXNzZXQoc2VsZjo6JHJlc29sdmVUb2tlbkNhY2hlWyRjYWNoZUtleV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgICAgICAgICAgID0gc2VsZjo6JHJlc29sdmVUb2tlbkNhY2hlWyRjYWNoZUtleV07CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJHRva2VuWzFdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJG5ld1Rva2VuID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuID0gc2VsZjo6c3RhbmRhcmRpc2VUb2tlbigkdG9rZW4pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgY29sb25zIHRoYXQgYXJlIGFjdHVhbGx5IHRoZSBFTFNFIGNvbXBvbmVudCBvZiBhbgogICAgICAgICAgICAgICAgLy8gaW5saW5lIElGIHN0YXRlbWVudC4KICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkaW5zaWRlSW5saW5lSWYpID09PSBmYWxzZSAmJiAkbmV3VG9rZW5bJ2NvZGUnXSA9PT0gVF9DT0xPTikgewogICAgICAgICAgICAgICAgICAgICRpc0lubGluZUlmID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoaXMgaXNuJ3QgYSBuYW1lZCBwYXJhbWV0ZXIgbGFiZWwuCiAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBwcmV2aW91cyBub24tZW1wdHkgdG9rZW4uCiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgLSAxKTsgJGkgPiAwOyAkaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdG9rZW5zWyRpXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0b2tlbnNbJGldWzBdXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRpXVswXSA9PT0gVF9QQVJBTV9OQU1FKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpc0lubGluZUlmID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogdG9rZW4gaXMgcGFyYW1ldGVyIGxhYmVsLCBub3QgVF9JTkxJTkVfRUxTRSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpc0lubGluZUlmID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGlzIGlzbid0IGEgcmV0dXJuIHR5cGUgc2VwYXJhdG9yLgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gKCRzdGFja1B0ciAtIDEpOyAkaSA+IDA7ICRpLS0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdG9rZW5zWyRpXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCR0b2tlbnNbJGldWzBdICE9PSBUX0RPQ19DT01NRU5UCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1skaV1bMF0gIT09IFRfQ09NTUVOVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGldWzBdICE9PSBUX1dISVRFU1BBQ0UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldID09PSAnKScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbkNvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJGktLTsgJGkgPiAwOyAkaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldID09PSAnKCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVuQ291bnQtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJlbkNvdW50ID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRva2Vuc1skaV0gPT09ICcpJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyZW5Db3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCB0aGUgb3BlbiBwYXJlbnRoZXNpcywgc28gaWYgdGhlIHByZXZpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub24tZW1wdHkgdG9rZW4gaXMgRlVOQ1RJT04gb3IgVVNFLCB0aGlzIGlzIGEgcmV0dXJuIHR5cGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBza2lwIFRfU1RSSU5HIHRva2VucyBoZXJlIGFzIHRoZXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gYmUgZnVuY3Rpb24gbmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRpLS07ICRpID4gMDsgJGktLSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdG9rZW5zWyRpXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgkdG9rZW5zWyRpXVswXSAhPT0gVF9ET0NfQ09NTUVOVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zWyRpXVswXSAhPT0gVF9DT01NRU5UCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNbJGldWzBdICE9PSBUX1dISVRFU1BBQ0UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1skaV1bMF0gIT09IFRfU1RSSU5HKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGldWzBdID09PSBUX0ZVTkNUSU9OIHx8ICR0b2tlbnNbJGldWzBdID09PSBUX0ZOIHx8ICR0b2tlbnNbJGldWzBdID09PSBUX1VTRSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc0lubGluZUlmID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHRva2VuIGlzIHJldHVybiB0eXBlLCBub3QgVF9JTkxJTkVfRUxTRSIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIENBU0Ugb3IgREVGQVVMVCBvcGVuZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpc0lubGluZUlmID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbmxpbmVJZlRva2VuID0gJGluc2lkZUlubGluZUlmWyhjb3VudCgkaW5zaWRlSW5saW5lSWYpIC0gMSldOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gJHN0YWNrUHRyOyAkaSA+ICRpbmxpbmVJZlRva2VuOyAkaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHRva2Vuc1skaV0pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCR0b2tlbnNbJGldWzBdID09PSBUX0NBU0UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkdG9rZW5zWyRpXVswXSA9PT0gVF9ERUZBVUxUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzSW5saW5lSWYgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUEhQX0NPREVTTklGRkVSX1ZFUkJPU0lUWSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogdG9rZW4gaXMgVF9DQVNFIG9yIFRfREVGQVVMVCBvcGVuZXIsIG5vdCBUX0lOTElORV9FTFNFIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbnNbJGldKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJHRva2Vuc1skaV0gPT09ICc7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0b2tlbnNbJGldID09PSAneycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgICAgICAgICBpZiAoJGlzSW5saW5lSWYgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9wKCRpbnNpZGVJbmxpbmVJZik7CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddID0gVF9JTkxJTkVfRUxTRTsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9JTkxJTkVfRUxTRSc7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUEhQX0NPREVTTklGRkVSX1ZFUkJPU0lUWSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHRva2VuIGNoYW5nZWQgZnJvbSBUX0NPTE9OIHRvIFRfSU5MSU5FX0VMU0UiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjb25kaXRpb24gZm9yIFRfQVJSQVkgdG9rZW5zIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UKICAgICAgICAgICAgICAgIC8vIGJ1dCBhcnJheSBkZWNsYXJhdGlvbnMsIGxpa2UgdHlwZSBoaW50aW5nIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcwogICAgICAgICAgICAgICAgLy8gYmVpbmcgYXJyYXlzLgogICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBrZWVwIHRoZSBwYXJlbnRoZXNpcyBtYXAgY2xlYW4sIHNvIGxldCdzIHRhZyB0aGVzZSB0b2tlbnMgYXMKICAgICAgICAgICAgICAgIC8vIFRfU1RSSU5HLgogICAgICAgICAgICAgICAgaWYgKCRuZXdUb2tlblsnY29kZSddID09PSBUX0FSUkFZKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkc3RhY2tQdHIgKyAxKTsgJGkgPCAkbnVtVG9rZW5zOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdG9rZW5zWyRpXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0b2tlbnNbJGldWzBdXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9uLWVtcHR5IGNvbnRlbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpICE9PSAkbnVtVG9rZW5zICYmICR0b2tlbnNbJGldICE9PSAnKCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gPSBUX1NUUklORzsKICAgICAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9TVFJJTkcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHdoZW4gY2hlY2tpbmcgUEhQIDUuNSsgY29kZSBpbiBQSFAgPCA1LjUKICAgICAgICAgICAgICAgIC8vIHdoZXJlICJmaW5hbGx5IiBzaG91bGQgYmUgVF9GSU5BTExZIGluc3RlYWQgb2YgVF9TVFJJTkcuCiAgICAgICAgICAgICAgICBpZiAoJG5ld1Rva2VuWydjb2RlJ10gPT09IFRfU1RSSU5HCiAgICAgICAgICAgICAgICAgICAgJiYgc3RydG9sb3dlcigkbmV3VG9rZW5bJ2NvbnRlbnQnXSkgPT09ICdmaW5hbGx5JwogICAgICAgICAgICAgICAgICAgICYmICRmaW5hbFRva2Vuc1skbGFzdE5vdEVtcHR5VG9rZW5dWydjb2RlJ10gPT09IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVAogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gPSBUX0ZJTkFMTFk7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9GSU5BTExZJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBQSFAgNS42IHVzZSBmdW5jdGlvbiBhbmQgdXNlIGNvbnN0CiAgICAgICAgICAgICAgICAvLyB3aGVyZSAiZnVuY3Rpb24iIGFuZCAiY29uc3QiIHNob3VsZCBiZSBUX1NUUklORyBpbnN0ZWFkIG9mIFRfRlVOQ1RJT04KICAgICAgICAgICAgICAgIC8vIGFuZCBUX0NPTlNULgogICAgICAgICAgICAgICAgaWYgKCgkbmV3VG9rZW5bJ2NvZGUnXSA9PT0gVF9GVU5DVElPTgogICAgICAgICAgICAgICAgICAgIHx8ICRuZXdUb2tlblsnY29kZSddID09PSBUX0NPTlNUKQogICAgICAgICAgICAgICAgICAgICYmICgkZmluYWxUb2tlbnNbJGxhc3ROb3RFbXB0eVRva2VuXVsnY29kZSddID09PSBUX1VTRSB8fCAkaW5zaWRlVXNlR3JvdXAgPT09IHRydWUpCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvZGUnXSA9IFRfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfU1RSSU5HJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciB1c2UgZ3JvdXBzIGluIFBIUCA3KyB3aGVyZSBsZWF2aW5nCiAgICAgICAgICAgICAgICAvLyB0aGUgY3VybHkgYnJhY2VzIGFzIHRoZWlyIG5vcm1hbCB0b2tlbnMgd291bGQgY29uZnVzZQogICAgICAgICAgICAgICAgLy8gdGhlIHNjb3BlIG1hcCBhbmQgc25pZmZzLgogICAgICAgICAgICAgICAgaWYgKCRuZXdUb2tlblsnY29kZSddID09PSBUX09QRU5fQ1VSTFlfQlJBQ0tFVAogICAgICAgICAgICAgICAgICAgICYmICRmaW5hbFRva2Vuc1skbGFzdE5vdEVtcHR5VG9rZW5dWydjb2RlJ10gPT09IFRfTlNfU0VQQVJBVE9SCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvZGUnXSA9IFRfT1BFTl9VU0VfR1JPVVA7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9PUEVOX1VTRV9HUk9VUCc7CiAgICAgICAgICAgICAgICAgICAgJGluc2lkZVVzZUdyb3VwICAgPSB0cnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkaW5zaWRlVXNlR3JvdXAgPT09IHRydWUgJiYgJG5ld1Rva2VuWydjb2RlJ10gPT09IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCkgewogICAgICAgICAgICAgICAgICAgICRuZXdUb2tlblsnY29kZSddID0gVF9DTE9TRV9VU0VfR1JPVVA7CiAgICAgICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9DTE9TRV9VU0VfR1JPVVAnOwogICAgICAgICAgICAgICAgICAgICRpbnNpZGVVc2VHcm91cCAgID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGZpbmFsVG9rZW5zWyRuZXdTdGFja1B0cl0gPSAkbmV3VG9rZW47CiAgICAgICAgICAgICAgICAkbmV3U3RhY2tQdHIrKzsKICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgfS8vZW5kIGZvcgoKICAgICAgICBpZiAoUEhQX0NPREVTTklGRkVSX1ZFUkJPU0lUWSA+IDEpIHsKICAgICAgICAgICAgZWNobyAiXHQqKiogRU5EIFBIUCBUT0tFTklaSU5HICoqKiIuUEhQX0VPTDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZmluYWxUb2tlbnM7CgogICAgfS8vZW5kIHRva2VuaXplKCkKCgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgYWZ0ZXIgbWFpbiB0b2tlbml6aW5nLgogICAgICoKICAgICAqIFRoaXMgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGNoZWNrcyBmb3IgQ0FTRSBzdGF0ZW1lbnRzIHRoYXQgYXJlIHVzaW5nIGN1cmx5CiAgICAgKiBicmFjZXMgZm9yIHNjb3BlIG9wZW5lcnMgYW5kIGNsb3NlcnMuIEl0IGFsc28gdHVybnMgc29tZSBUX0ZVTkNUSU9OIHRva2VucwogICAgICogaW50byBUX0NMT1NVUkUgd2hlbiB0aGV5IGFyZSBub3Qgc3RhbmRhcmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIEl0IGFsc28KICAgICAqIGRldGVjdHMgc2hvcnQgYXJyYXkgc3ludGF4IGFuZCBjb252ZXJ0cyB0aG9zZSBzcXVhcmUgYnJhY2tldHMgaW50byBuZXcgdG9rZW5zLgogICAgICogSXQgYWxzbyBjb3JyZWN0cyBzb21lIHVzYWdlIG9mIHRoZSBzdGF0aWMgYW5kIGNsYXNzIGtleXdvcmRzLiBJdCBhbHNvCiAgICAgKiBhc3NpZ25zIHRva2VucyB0byBmdW5jdGlvbiByZXR1cm4gdHlwZXMuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwcm9jZXNzQWRkaXRpb25hbCgpCiAgICB7CiAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgIGVjaG8gIlx0KioqIFNUQVJUIEFERElUSU9OQUwgUEhQIFBST0NFU1NJTkcgKioqIi5QSFBfRU9MOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmNyZWF0ZUF0dHJpYnV0ZXNOZXN0aW5nTWFwKCk7CgogICAgICAgICRudW1Ub2tlbnMgPSBjb3VudCgkdGhpcy0+dG9rZW5zKTsKICAgICAgICBmb3IgKCRpID0gKCRudW1Ub2tlbnMgLSAxKTsgJGkgPj0gMDsgJGktLSkgewogICAgICAgICAgICAvLyBDaGVjayBmb3IgYW55IHVuc2V0IHNjb3BlIGNvbmRpdGlvbnMgZHVlIHRvIGFsdGVybmF0ZSBJRi9FTkRJRiBzeW50YXguCiAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dG9rZW5zWyRpXVsnc2NvcGVfb3BlbmVyJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiBpc3NldCgkdGhpcy0+dG9rZW5zWyRpXVsnc2NvcGVfY29uZGl0aW9uJ10pID09PSBmYWxzZQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWydzY29wZV9jb25kaXRpb24nXSA9ICR0aGlzLT50b2tlbnNbJHRoaXMtPnRva2Vuc1skaV1bJ3Njb3BlX29wZW5lciddXVsnc2NvcGVfY29uZGl0aW9uJ107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID09PSBUX0ZVTkNUSU9OKSB7CiAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgIERldGVjdCBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgY2xvc3VyZXMgYW5kCiAgICAgICAgICAgICAgICAgICAgYXNzaWduIHRoZW0gYSBkaWZmZXJlbnQgdG9rZW4uCiAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dG9rZW5zWyRpXVsnc2NvcGVfb3BlbmVyJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkeCA9ICgkaSArIDEpOyAkeCA8ICRudW1Ub2tlbnM7ICR4KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXV0pID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSAhPT0gVF9CSVRXSVNFX0FORAogICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9PUEVOX1BBUkVOVEhFU0lTKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWydjb2RlJ10gPSBUX0NMT1NVUkU7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWyd0eXBlJ10gPSAnVF9DTE9TVVJFJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0aGlzLT50b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogdG9rZW4gJGkgb24gbGluZSAkbGluZSBjaGFuZ2VkIGZyb20gVF9GVU5DVElPTiB0byBUX0NMT1NVUkUiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJHggPSAoJHRoaXMtPnRva2Vuc1skaV1bJ3Njb3BlX29wZW5lciddICsgMSk7ICR4IDwgJHRoaXMtPnRva2Vuc1skaV1bJ3Njb3BlX2Nsb3NlciddOyAkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRva2Vuc1skeF1bJ2NvbmRpdGlvbnMnXVskaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJHhdWydjb25kaXRpb25zJ11bJGldID0gVF9DTE9TVVJFOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdGhpcy0+dG9rZW5zWyR4XVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIGNsZWFuZWQgJHggKCR0eXBlKSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRoaXMtPnRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9DTEFTUyAmJiBpc3NldCgkdGhpcy0+dG9rZW5zWyRpXVsnc2NvcGVfb3BlbmVyJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgIERldGVjdCBhbm9ueW1vdXMgY2xhc3NlcyBhbmQgYXNzaWduIHRoZW0gYSBkaWZmZXJlbnQgdG9rZW4uCiAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAgIGZvciAoJHggPSAoJGkgKyAxKTsgJHggPCAkbnVtVG9rZW5zOyAkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXV0pID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ10gPT09IFRfT1BFTl9QQVJFTlRIRVNJUwogICAgICAgICAgICAgICAgICAgIHx8ICR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ10gPT09IFRfT1BFTl9DVVJMWV9CUkFDS0VUCiAgICAgICAgICAgICAgICAgICAgfHwgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9FWFRFTkRTCiAgICAgICAgICAgICAgICAgICAgfHwgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9JTVBMRU1FTlRTCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID0gVF9BTk9OX0NMQVNTOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWyd0eXBlJ10gPSAnVF9BTk9OX0NMQVNTJzsKICAgICAgICAgICAgICAgICAgICBpZiAoUEhQX0NPREVTTklGRkVSX1ZFUkJPU0lUWSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdGhpcy0+dG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogdG9rZW4gJGkgb24gbGluZSAkbGluZSBjaGFuZ2VkIGZyb20gVF9DTEFTUyB0byBUX0FOT05fQ0xBU1MiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9PUEVOX1BBUkVOVEhFU0lTCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0aGlzLT50b2tlbnNbJHhdWydwYXJlbnRoZXNpc19jbG9zZXInXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNsb3NlciA9ICR0aGlzLT50b2tlbnNbJHhdWydwYXJlbnRoZXNpc19jbG9zZXInXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWydwYXJlbnRoZXNpc19vcGVuZXInXSAgICAgPSAkeDsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3BhcmVudGhlc2lzX2Nsb3NlciddICAgICA9ICRjbG9zZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWydwYXJlbnRoZXNpc19vd25lciddICAgICAgPSAkaTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skeF1bJ3BhcmVudGhlc2lzX293bmVyJ10gICAgICA9ICRpOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRjbG9zZXJdWydwYXJlbnRoZXNpc19vd25lciddID0gJGk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUEhQX0NPREVTTklGRkVSX1ZFUkJPU0lUWSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRoaXMtPnRva2Vuc1skaV1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIGFkZGVkIHBhcmVudGhlc2lzIGtleXMgdG8gVF9BTk9OX0NMQVNTIHRva2VuICRpIG9uIGxpbmUgJGxpbmUiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGZvciAoJHggPSAoJHRoaXMtPnRva2Vuc1skaV1bJ3Njb3BlX29wZW5lciddICsgMSk7ICR4IDwgJHRoaXMtPnRva2Vuc1skaV1bJ3Njb3BlX2Nsb3NlciddOyAkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dG9rZW5zWyR4XVsnY29uZGl0aW9ucyddWyRpXSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skeF1bJ2NvbmRpdGlvbnMnXVskaV0gPSBUX0FOT05fQ0xBU1M7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdGhpcy0+dG9rZW5zWyR4XVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogY2xlYW5lZCAkeCAoJHR5cGUpICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIGlmICgkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID09PSBUX0ZOICYmIGlzc2V0KCR0aGlzLT50b2tlbnNbKCRpICsgMSldKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgLy8gUG9zc2libGUgYXJyb3cgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICBmb3IgKCR4ID0gKCRpICsgMSk7ICR4IDwgJG51bVRva2VuczsgJHgrKykgewogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ11dKSA9PT0gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSAhPT0gVF9CSVRXSVNFX0FORAogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBOb24td2hpdGVzcGFjZSBjb250ZW50LgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT50b2tlbnNbJHhdKSA9PT0gdHJ1ZSAmJiAkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX09QRU5fUEFSRU5USEVTSVMpIHsKICAgICAgICAgICAgICAgICAgICAkaWdub3JlICA9IFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnM7CiAgICAgICAgICAgICAgICAgICAgJGlnbm9yZSArPSBbCiAgICAgICAgICAgICAgICAgICAgICAgIFRfQVJSQVkgICAgICAgICAgICAgPT4gVF9BUlJBWSwKICAgICAgICAgICAgICAgICAgICAgICAgVF9DQUxMQUJMRSAgICAgICAgICA9PiBUX0NBTExBQkxFLAogICAgICAgICAgICAgICAgICAgICAgICBUX0NPTE9OICAgICAgICAgICAgID0+IFRfQ09MT04sCiAgICAgICAgICAgICAgICAgICAgICAgIFRfTkFNRVNQQUNFICAgICAgICAgPT4gVF9OQU1FU1BBQ0UsCiAgICAgICAgICAgICAgICAgICAgICAgIFRfTlNfU0VQQVJBVE9SICAgICAgPT4gVF9OU19TRVBBUkFUT1IsCiAgICAgICAgICAgICAgICAgICAgICAgIFRfTlVMTCAgICAgICAgICAgICAgPT4gVF9OVUxMLAogICAgICAgICAgICAgICAgICAgICAgICBUX05VTExBQkxFICAgICAgICAgID0+IFRfTlVMTEFCTEUsCiAgICAgICAgICAgICAgICAgICAgICAgIFRfUEFSRU5UICAgICAgICAgICAgPT4gVF9QQVJFTlQsCiAgICAgICAgICAgICAgICAgICAgICAgIFRfU0VMRiAgICAgICAgICAgICAgPT4gVF9TRUxGLAogICAgICAgICAgICAgICAgICAgICAgICBUX1NUQVRJQyAgICAgICAgICAgID0+IFRfU1RBVElDLAogICAgICAgICAgICAgICAgICAgICAgICBUX1NUUklORyAgICAgICAgICAgID0+IFRfU1RSSU5HLAogICAgICAgICAgICAgICAgICAgICAgICBUX1RZUEVfVU5JT04gICAgICAgID0+IFRfVFlQRV9VTklPTiwKICAgICAgICAgICAgICAgICAgICAgICAgVF9UWVBFX0lOVEVSU0VDVElPTiA9PiBUX1RZUEVfSU5URVJTRUNUSU9OLAogICAgICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgICAgICRjbG9zZXIgPSAkdGhpcy0+dG9rZW5zWyR4XVsncGFyZW50aGVzaXNfY2xvc2VyJ107CiAgICAgICAgICAgICAgICAgICAgZm9yICgkYXJyb3cgPSAoJGNsb3NlciArIDEpOyAkYXJyb3cgPCAkbnVtVG9rZW5zOyAkYXJyb3crKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGlnbm9yZVskdGhpcy0+dG9rZW5zWyRhcnJvd11bJ2NvZGUnXV0pID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyRhcnJvd11bJ2NvZGUnXSA9PT0gVF9ET1VCTEVfQVJST1cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGVuZFRva2VucyA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfQ09MT04gICAgICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfQ09NTUEgICAgICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfU0VNSUNPTE9OICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfQ0xPU0VfUEFSRU5USEVTSVMgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfQ0xPU0VfU1FVQVJFX0JSQUNLRVQgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfQ0xPU0VfU0hPUlRfQVJSQVkgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfT1BFTl9UQUcgICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfQ0xPU0VfVEFHICAgICAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRpblRlcm5hcnkgICAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RFbmRUb2tlbiA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRzY29wZUNsb3NlciA9ICgkYXJyb3cgKyAxKTsgJHNjb3BlQ2xvc2VyIDwgJG51bVRva2VuczsgJHNjb3BlQ2xvc2VyKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycm93IGZ1bmN0aW9uIGNsb3NlciBzaG91bGQgbmV2ZXIgYmUgc2hhcmVkIHdpdGggdGhlIGNsb3NlciBvZiBhIG1hdGNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sIHN0cnVjdHVyZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ3Njb3BlX2Nsb3NlciddLCAkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ3Njb3BlX2NvbmRpdGlvbiddKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRzY29wZUNsb3NlciA9PT0gJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydzY29wZV9jbG9zZXInXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR0aGlzLT50b2tlbnNbJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydzY29wZV9jb25kaXRpb24nXV1bJ2NvZGUnXSA9PT0gVF9NQVRDSAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhcnJvdyA8ICR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfY29uZGl0aW9uJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWF0Y2ggaW4gcmV0dXJuIHZhbHVlIG9mIGFycm93IGZ1bmN0aW9uLiBNb3ZlIG9uIHRvIHRoZSBuZXh0IHRva2VuLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycm93IGZ1bmN0aW9uIGFzIHJldHVybiB2YWx1ZSBmb3IgdGhlIGxhc3QgbWF0Y2ggY2FzZSB3aXRob3V0IHRyYWlsaW5nIGNvbW1hLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbGFzdEVuZFRva2VuICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZUNsb3NlciA9ICRsYXN0RW5kVG9rZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkbGFzdE5vbkVtcHR5ID0gKCRzY29wZUNsb3NlciAtIDEpOyAkbGFzdE5vbkVtcHR5ID4gJGFycm93OyAkbGFzdE5vbkVtcHR5LS0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRoaXMtPnRva2Vuc1skbGFzdE5vbkVtcHR5XVsnY29kZSddXSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGVDbG9zZXIgPSAkbGFzdE5vbkVtcHR5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGVuZFRva2Vuc1skdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2NvZGUnXV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRsYXN0RW5kVG9rZW4gIT09IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChpc3NldCgkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ3BhcmVudGhlc2lzX29wZW5lciddKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ3BhcmVudGhlc2lzX29wZW5lciddIDwgJGFycm93KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNzZXQoJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydicmFja2V0X29wZW5lciddKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2JyYWNrZXRfb3BlbmVyJ10gPCAkYXJyb3cpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRsYXN0Tm9uRW1wdHkgPSAoJHNjb3BlQ2xvc2VyIC0gMSk7ICRsYXN0Tm9uRW1wdHkgPiAkYXJyb3c7ICRsYXN0Tm9uRW1wdHktLSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRoaXMtPnRva2Vuc1skbGFzdE5vbkVtcHR5XVsnY29kZSddXSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlQ2xvc2VyID0gJGxhc3ROb25FbXB0eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpblRlcm5hcnkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNzZXQoJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydzY29wZV9jbG9zZXInXSwgJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydzY29wZV9jb25kaXRpb24nXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkc2NvcGVDbG9zZXIgPT09ICR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfY2xvc2VyJ10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdGhpcy0+dG9rZW5zWyR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfY29uZGl0aW9uJ11dWydjb2RlJ10gPT09IFRfRk4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGFycm93IGZ1bmN0aW9uIHRoYXQgYWxyZWFkeSBoYXMgdGhlIGNsb3NlciBzZXQgYW5kIGlzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNhbWUgc2NvcGUgYXMgdXMsIHNvIHdlIGNhbiB1c2UgaXRzIGNsb3Nlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydzY29wZV9jbG9zZXInXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2NvZGUnXSAhPT0gVF9JTkxJTkVfRUxTRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnY29kZSddICE9PSBUX0VORF9IRVJFRE9DCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydjb2RlJ10gIT09IFRfRU5EX05PV0RPQwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWludXMgMSBoZXJlIGluIGNhc2UgdGhlIGNsb3NlciBjYW4gYmUgc2hhcmVkIHdpdGggdXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlQ2xvc2VyID0gKCR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfY2xvc2VyJ10gLSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydwYXJlbnRoZXNpc19jbG9zZXInXSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGVDbG9zZXIgID0gJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydwYXJlbnRoZXNpc19jbG9zZXInXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdEVuZFRva2VuID0gJHNjb3BlQ2xvc2VyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2JyYWNrZXRfY2xvc2VyJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlQ2xvc2VyICA9ICR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnYnJhY2tldF9jbG9zZXInXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdEVuZFRva2VuID0gJHNjb3BlQ2xvc2VyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2NvZGUnXSA9PT0gVF9JTkxJTkVfVEhFTikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpblRlcm5hcnkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ2NvZGUnXSA9PT0gVF9JTkxJTkVfRUxTRSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaW5UZXJuYXJ5ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpblRlcm5hcnkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfS8vZW5kIGZvcgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzY29wZUNsb3NlciAhPT0gJG51bVRva2VucykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdGhpcy0+dG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0PT4gdG9rZW4gJGkgb24gbGluZSAkbGluZSBwcm9jZXNzZWQgYXMgYXJyb3cgZnVuY3Rpb24iLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogc2NvcGUgb3BlbmVyIHNldCB0byAkYXJyb3cgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiBzY29wZSBjbG9zZXIgc2V0IHRvICRzY29wZUNsb3NlciAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHBhcmVudGhlc2lzIG9wZW5lciBzZXQgdG8gJHggKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0KiBwYXJlbnRoZXNpcyBjbG9zZXIgc2V0IHRvICRjbG9zZXIgKiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddICAgICAgICAgICAgPSBUX0ZOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3R5cGUnXSAgICAgICAgICAgID0gJ1RfRk4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3Njb3BlX2NvbmRpdGlvbiddID0gJGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRpXVsnc2NvcGVfb3BlbmVyJ10gICAgPSAkYXJyb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRpXVsnc2NvcGVfY2xvc2VyJ10gICAgPSAkc2NvcGVDbG9zZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRpXVsncGFyZW50aGVzaXNfb3duZXInXSAgPSAkaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWydwYXJlbnRoZXNpc19vcGVuZXInXSA9ICR4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3BhcmVudGhlc2lzX2Nsb3NlciddID0gJGNsb3NlcjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRhcnJvd11bJ2NvZGUnXSA9IFRfRk5fQVJST1c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRhcnJvd11bJ3R5cGUnXSA9ICdUX0ZOX0FSUk9XJzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRhcnJvd11bJ3Njb3BlX2NvbmRpdGlvbiddICAgICAgID0gJGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRhcnJvd11bJ3Njb3BlX29wZW5lciddICAgICAgICAgID0gJGFycm93OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skYXJyb3ddWydzY29wZV9jbG9zZXInXSAgICAgICAgICA9ICRzY29wZUNsb3NlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfY29uZGl0aW9uJ10gPSAkaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfb3BlbmVyJ10gICAgPSAkYXJyb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ3Njb3BlX2Nsb3NlciddICAgID0gJHNjb3BlQ2xvc2VyOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcGVuZXIgPSAkdGhpcy0+dG9rZW5zWyRpXVsncGFyZW50aGVzaXNfb3BlbmVyJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2xvc2VyID0gJHRoaXMtPnRva2Vuc1skaV1bJ3BhcmVudGhlc2lzX2Nsb3NlciddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skb3BlbmVyXVsncGFyZW50aGVzaXNfb3duZXInXSA9ICRpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skY2xvc2VyXVsncGFyZW50aGVzaXNfb3duZXInXSA9ICRpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRoaXMtPnRva2Vuc1skYXJyb3ddWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogdG9rZW4gJGFycm93IG9uIGxpbmUgJGxpbmUgY2hhbmdlZCBmcm9tIFRfRE9VQkxFX0FSUk9XIHRvIFRfRk5fQVJST1ciLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAgICAgLy8gSWYgYWZ0ZXIgYWxsIHRoYXQsIHRoZSBleHRyYSB0b2tlbnMgYXJlIG5vdCBzZXQsIHRoaXMgaXMgbm90IGFuIGFycm93IGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT50b2tlbnNbJGldWydzY29wZV9jbG9zZXInXSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJHRoaXMtPnRva2Vuc1skaV1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQ9PiB0b2tlbiAkaSBvbiBsaW5lICRsaW5lIGlzIG5vdCBhbiBhcnJvdyBmdW5jdGlvbiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogdG9rZW4gY2hhbmdlZCBmcm9tIFRfRk4gdG8gVF9TVFJJTkciLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID0gVF9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3R5cGUnXSA9ICdUX1NUUklORyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRoaXMtPnRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9PUEVOX1NRVUFSRV9CUkFDS0VUKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRva2Vuc1skaV1bJ2JyYWNrZXRfY2xvc2VyJ10pID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFVubGVzcyB0aGVyZSBpcyBhIHZhcmlhYmxlIG9yIGEgYnJhY2tldCBiZWZvcmUgdGhpcyB0b2tlbiwKICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRoZSBzdGFydCBvZiBhbiBhcnJheSBiZWluZyBkZWZpbmVkIHVzaW5nIHRoZSBzaG9ydCBzeW50YXguCiAgICAgICAgICAgICAgICAkaXNTaG9ydEFycmF5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkYWxsb3dlZCAgICAgID0gWwogICAgICAgICAgICAgICAgICAgIFRfQ0xPU0VfU1FVQVJFX0JSQUNLRVQgICAgID0+IFRfQ0xPU0VfU1FVQVJFX0JSQUNLRVQsCiAgICAgICAgICAgICAgICAgICAgVF9DTE9TRV9DVVJMWV9CUkFDS0VUICAgICAgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULAogICAgICAgICAgICAgICAgICAgIFRfQ0xPU0VfUEFSRU5USEVTSVMgICAgICAgID0+IFRfQ0xPU0VfUEFSRU5USEVTSVMsCiAgICAgICAgICAgICAgICAgICAgVF9WQVJJQUJMRSAgICAgICAgICAgICAgICAgPT4gVF9WQVJJQUJMRSwKICAgICAgICAgICAgICAgICAgICBUX09CSkVDVF9PUEVSQVRPUiAgICAgICAgICA9PiBUX09CSkVDVF9PUEVSQVRPUiwKICAgICAgICAgICAgICAgICAgICBUX05VTExTQUZFX09CSkVDVF9PUEVSQVRPUiA9PiBUX05VTExTQUZFX09CSkVDVF9PUEVSQVRPUiwKICAgICAgICAgICAgICAgICAgICBUX1NUUklORyAgICAgICAgICAgICAgICAgICA9PiBUX1NUUklORywKICAgICAgICAgICAgICAgICAgICBUX0NPTlNUQU5UX0VOQ0FQU0VEX1NUUklORyA9PiBUX0NPTlNUQU5UX0VOQ0FQU0VEX1NUUklORywKICAgICAgICAgICAgICAgICAgICBUX0RPVUJMRV9RVU9URURfU1RSSU5HICAgICA9PiBUX0RPVUJMRV9RVU9URURfU1RSSU5HLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICRhbGxvd2VkICAgICArPSBVdGlsXFRva2Vuczo6JG1hZ2ljQ29uc3RhbnRzOwoKICAgICAgICAgICAgICAgIGZvciAoJHggPSAoJGkgLSAxKTsgJHggPj0gMDsgJHgtLSkgewogICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhpdCBhIHNjb3BlIG9wZW5lciwgdGhlIHN0YXRlbWVudCBoYXMgZW5kZWQKICAgICAgICAgICAgICAgICAgICAvLyB3aXRob3V0IGZpbmRpbmcgYW55dGhpbmcsIHNvIGl0J3MgcHJvYmFibHkgYW4gYXJyYXkKICAgICAgICAgICAgICAgICAgICAvLyB1c2luZyBQSFAgNy4xIHNob3J0IGxpc3Qgc3ludGF4LgogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dG9rZW5zWyR4XVsnc2NvcGVfb3BlbmVyJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpc1Nob3J0QXJyYXkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ11dKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhbGxvd2VkWyR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ11dKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc1Nob3J0QXJyYXkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRpc1Nob3J0QXJyYXkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID0gVF9PUEVOX1NIT1JUX0FSUkFZOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWyd0eXBlJ10gPSAnVF9PUEVOX1NIT1JUX0FSUkFZJzsKCiAgICAgICAgICAgICAgICAgICAgJGNsb3NlciA9ICR0aGlzLT50b2tlbnNbJGldWydicmFja2V0X2Nsb3NlciddOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGNsb3Nlcl1bJ2NvZGUnXSA9IFRfQ0xPU0VfU0hPUlRfQVJSQVk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skY2xvc2VyXVsndHlwZSddID0gJ1RfQ0xPU0VfU0hPUlRfQVJSQVknOwogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0aGlzLT50b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB0b2tlbiAkaSBvbiBsaW5lICRsaW5lIGNoYW5nZWQgZnJvbSBUX09QRU5fU1FVQVJFX0JSQUNLRVQgdG8gVF9PUEVOX1NIT1JUX0FSUkFZIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0aGlzLT50b2tlbnNbJGNsb3Nlcl1bJ2xpbmUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIHRva2VuICRjbG9zZXIgb24gbGluZSAkbGluZSBjaGFuZ2VkIGZyb20gVF9DTE9TRV9TUVVBUkVfQlJBQ0tFVCB0byBUX0NMT1NFX1NIT1JUX0FSUkFZIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIGlmICgkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID09PSBUX01BVENIKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRva2Vuc1skaV1bJ3Njb3BlX29wZW5lciddLCAkdGhpcy0+dG9rZW5zWyRpXVsnc2NvcGVfY2xvc2VyJ10pID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhIG1hdGNoIGV4cHJlc3Npb24gYWZ0ZXIgYWxsLgogICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWydjb2RlJ10gPSBUX1NUUklORzsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRpXVsndHlwZSddID0gJ1RfU1RSSU5HJzsKCiAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHRva2VuICRpIGNoYW5nZWQgZnJvbSBUX01BVENIIHRvIFRfU1RSSU5HIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT50b2tlbnNbJGldWydwYXJlbnRoZXNpc19vcGVuZXInXSwgJHRoaXMtPnRva2Vuc1skaV1bJ3BhcmVudGhlc2lzX2Nsb3NlciddKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkb3BlbmVyID0gJHRoaXMtPnRva2Vuc1skaV1bJ3BhcmVudGhlc2lzX29wZW5lciddOwogICAgICAgICAgICAgICAgICAgICAgICAkY2xvc2VyID0gJHRoaXMtPnRva2Vuc1skaV1bJ3BhcmVudGhlc2lzX2Nsb3NlciddOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJG9wZW5lcl1bJ3BhcmVudGhlc2lzX293bmVyJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRjbG9zZXJdWydwYXJlbnRoZXNpc19vd25lciddCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3BhcmVudGhlc2lzX29wZW5lciddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3BhcmVudGhlc2lzX2Nsb3NlciddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3BhcmVudGhlc2lzX293bmVyJ10KICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogY2xlYW5lZCBwYXJlbnRoZXNpcyBvZiB0b2tlbiAkaSAqIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBSZXRva2VuaXplIHRoZSBkb3VibGUgYXJyb3dzIGZvciBtYXRjaCBleHByZXNzaW9uIGNhc2VzIHRvIGBUX01BVENIX0FSUk9XYC4KICAgICAgICAgICAgICAgICAgICAkc2VhcmNoRm9yICA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgVF9PUEVOX0NVUkxZX0JSQUNLRVQgID0+IFRfT1BFTl9DVVJMWV9CUkFDS0VULAogICAgICAgICAgICAgICAgICAgICAgICBUX09QRU5fU1FVQVJFX0JSQUNLRVQgPT4gVF9PUEVOX1NRVUFSRV9CUkFDS0VULAogICAgICAgICAgICAgICAgICAgICAgICBUX09QRU5fUEFSRU5USEVTSVMgICAgPT4gVF9PUEVOX1BBUkVOVEhFU0lTLAogICAgICAgICAgICAgICAgICAgICAgICBUX09QRU5fU0hPUlRfQVJSQVkgICAgPT4gVF9PUEVOX1NIT1JUX0FSUkFZLAogICAgICAgICAgICAgICAgICAgICAgICBUX0RPVUJMRV9BUlJPVyAgICAgICAgPT4gVF9ET1VCTEVfQVJST1csCiAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAkc2VhcmNoRm9yICs9IFV0aWxcVG9rZW5zOjokc2NvcGVPcGVuZXJzOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKCR4ID0gKCR0aGlzLT50b2tlbnNbJGldWydzY29wZV9vcGVuZXInXSArIDEpOyAkeCA8ICR0aGlzLT50b2tlbnNbJGldWydzY29wZV9jbG9zZXInXTsgJHgrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHNlYXJjaEZvclskdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddXSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT50b2tlbnNbJHhdWydzY29wZV9jbG9zZXInXSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR4ID0gJHRoaXMtPnRva2Vuc1skeF1bJ3Njb3BlX2Nsb3NlciddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dG9rZW5zWyR4XVsncGFyZW50aGVzaXNfY2xvc2VyJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeCA9ICR0aGlzLT50b2tlbnNbJHhdWydwYXJlbnRoZXNpc19jbG9zZXInXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRva2Vuc1skeF1bJ2JyYWNrZXRfY2xvc2VyJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeCA9ICR0aGlzLT50b2tlbnNbJHhdWydicmFja2V0X2Nsb3NlciddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGRvdWJsZSBhcnJvdywgYnV0IG1ha2Ugc3VyZSBhbnlob3cuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX0RPVUJMRV9BUlJPVykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9IFRfTUFUQ0hfQVJST1c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyR4XVsndHlwZSddID0gJ1RfTUFUQ0hfQVJST1cnOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0XHQqIHRva2VuICR4IGNoYW5nZWQgZnJvbSBUX0RPVUJMRV9BUlJPVyB0byBUX01BVENIX0FSUk9XIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfS8vZW5kIGZvcgogICAgICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRoaXMtPnRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9CSVRXSVNFX09SCiAgICAgICAgICAgICAgICB8fCAkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID09PSBUX0JJVFdJU0VfQU5ECiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICBDb252ZXJ0ICJ8IiB0byBUX1RZUEVfVU5JT04gb3IgbGVhdmUgYXMgVF9CSVRXSVNFX09SLgogICAgICAgICAgICAgICAgICAgIENvbnZlcnQgIiYiIHRvIFRfVFlQRV9JTlRFUlNFQ1RJT04gb3IgbGVhdmUgYXMgVF9CSVRXSVNFX0FORC4KICAgICAgICAgICAgICAgICovCgogICAgICAgICAgICAgICAgJGFsbG93ZWQgPSBbCiAgICAgICAgICAgICAgICAgICAgVF9TVFJJTkcgICAgICAgPT4gVF9TVFJJTkcsCiAgICAgICAgICAgICAgICAgICAgVF9DQUxMQUJMRSAgICAgPT4gVF9DQUxMQUJMRSwKICAgICAgICAgICAgICAgICAgICBUX1NFTEYgICAgICAgICA9PiBUX1NFTEYsCiAgICAgICAgICAgICAgICAgICAgVF9QQVJFTlQgICAgICAgPT4gVF9QQVJFTlQsCiAgICAgICAgICAgICAgICAgICAgVF9TVEFUSUMgICAgICAgPT4gVF9TVEFUSUMsCiAgICAgICAgICAgICAgICAgICAgVF9GQUxTRSAgICAgICAgPT4gVF9GQUxTRSwKICAgICAgICAgICAgICAgICAgICBUX05VTEwgICAgICAgICA9PiBUX05VTEwsCiAgICAgICAgICAgICAgICAgICAgVF9OQU1FU1BBQ0UgICAgPT4gVF9OQU1FU1BBQ0UsCiAgICAgICAgICAgICAgICAgICAgVF9OU19TRVBBUkFUT1IgPT4gVF9OU19TRVBBUkFUT1IsCiAgICAgICAgICAgICAgICBdOwoKICAgICAgICAgICAgICAgICRzdXNwZWN0ZWRUeXBlICA9IG51bGw7CiAgICAgICAgICAgICAgICAkdHlwZVRva2VuQ291bnQgPSAwOwoKICAgICAgICAgICAgICAgIGZvciAoJHggPSAoJGkgKyAxKTsgJHggPCAkbnVtVG9rZW5zOyAkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhbGxvd2VkWyR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ11dKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICArKyR0eXBlVG9rZW5Db3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHR5cGVUb2tlbkNvdW50ID4gMAogICAgICAgICAgICAgICAgICAgICAgICAmJiAoJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9CSVRXSVNFX0FORAogICAgICAgICAgICAgICAgICAgICAgICB8fCAkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX0VMTElQU0lTKQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIHBhc3QgcmVmZXJlbmNlIGFuZCB2YXJpYWRpYyBpbmRpY2F0b3JzIGZvciBwYXJhbWV0ZXIgdHlwZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ10gPT09IFRfVkFSSUFCTEUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFyYW1ldGVyL1Byb3BlcnR5IGRlZmF1bHRzIGNhbiBub3QgY29udGFpbiB2YXJpYWJsZXMsIHNvIHRoaXMgY291bGQgYmUgYSB0eXBlLgogICAgICAgICAgICAgICAgICAgICAgICAkc3VzcGVjdGVkVHlwZSA9ICdwcm9wZXJ0eSBvciBwYXJhbWV0ZXInOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX0RPVUJMRV9BUlJPVykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBQb3NzaWJsZSBhcnJvdyBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgJHN1c3BlY3RlZFR5cGUgPSAncmV0dXJuJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9TRU1JQ09MT04pIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9zc2libGUgYWJzdHJhY3QgbWV0aG9kIG9yIGludGVyZmFjZSBtZXRob2QuCiAgICAgICAgICAgICAgICAgICAgICAgICRzdXNwZWN0ZWRUeXBlID0gJ3JldHVybic7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ10gPT09IFRfT1BFTl9DVVJMWV9CUkFDS0VUCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0aGlzLT50b2tlbnNbJHhdWydzY29wZV9jb25kaXRpb24nXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRoaXMtPnRva2Vuc1skdGhpcy0+dG9rZW5zWyR4XVsnc2NvcGVfY29uZGl0aW9uJ11dWydjb2RlJ10gPT09IFRfRlVOQ1RJT04KICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHN1c3BlY3RlZFR5cGUgPSAncmV0dXJuJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfS8vZW5kIGZvcgoKICAgICAgICAgICAgICAgIGlmICgkdHlwZVRva2VuQ291bnQgPT09IDAgfHwgaXNzZXQoJHN1c3BlY3RlZFR5cGUpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIC8vIERlZmluaXRlbHkgbm90IGEgdW5pb24gb3IgaW50ZXJzZWN0aW9uIHR5cGUsIG1vdmUgb24uCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHR5cGVUb2tlbkNvdW50ID0gMDsKICAgICAgICAgICAgICAgICR0eXBlT3BlcmF0b3JzICA9IFskaV07CiAgICAgICAgICAgICAgICAkY29uZmlybWVkICAgICAgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBmb3IgKCR4ID0gKCRpIC0gMSk7ICR4ID49IDA7ICR4LS0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoVXRpbFxUb2tlbnM6OiRlbXB0eVRva2Vuc1skdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddXSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGFsbG93ZWRbJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICsrJHR5cGVUb2tlbkNvdW50OwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIFVuaW9uIGFuZCBpbnRlcnNlY3Rpb24gdHlwZXMgY2FuJ3QgdXNlIHRoZSBudWxsYWJsZSBvcGVyYXRvciwgYnV0IGJlIHRvbGVyYW50IHRvIHBhcnNlIGVycm9ycy4KICAgICAgICAgICAgICAgICAgICBpZiAoJHR5cGVUb2tlbkNvdW50ID4gMCAmJiAkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX05VTExBQkxFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ10gPT09IFRfQklUV0lTRV9PUiB8fCAkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX0JJVFdJU0VfQU5EKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlT3BlcmF0b3JzW10gPSAkeDsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHN1c3BlY3RlZFR5cGUgPT09ICdyZXR1cm4nICYmICR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ10gPT09IFRfQ09MT04pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmZpcm1lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCRzdXNwZWN0ZWRUeXBlID09PSAncHJvcGVydHkgb3IgcGFyYW1ldGVyJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAoaXNzZXQoVXRpbFxUb2tlbnM6OiRzY29wZU1vZGlmaWVyc1skdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9WQVIKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9SRUFET05MWSkKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGFsc28gY29uZmlybSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBwcm9tb3Rpb24gcGFyYW1ldGVycywgYnV0IHRoYXQncyBmaW5lLgogICAgICAgICAgICAgICAgICAgICAgICAkY29uZmlybWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfS8vZW5kIGZvcgoKICAgICAgICAgICAgICAgIGlmICgkY29uZmlybWVkID09PSBmYWxzZQogICAgICAgICAgICAgICAgICAgICYmICRzdXNwZWN0ZWRUeXBlID09PSAncHJvcGVydHkgb3IgcGFyYW1ldGVyJwogICAgICAgICAgICAgICAgICAgICYmIGlzc2V0KCR0aGlzLT50b2tlbnNbJGldWyduZXN0ZWRfcGFyZW50aGVzaXMnXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICRwYXJlbnMgPSAkdGhpcy0+dG9rZW5zWyRpXVsnbmVzdGVkX3BhcmVudGhlc2lzJ107CiAgICAgICAgICAgICAgICAgICAgJGxhc3QgICA9IGVuZCgkcGFyZW5zKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT50b2tlbnNbJGxhc3RdWydwYXJlbnRoZXNpc19vd25lciddKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdGhpcy0+dG9rZW5zWyR0aGlzLT50b2tlbnNbJGxhc3RdWydwYXJlbnRoZXNpc19vd25lciddXVsnY29kZSddID09PSBUX0ZVTkNUSU9OCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25maXJtZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIHBhcmVudGhlc2lzIG93bmVyIHNldCwgdGhpcyBtYXkgYmUgYW4gYXJyb3cgZnVuY3Rpb24gd2hpY2ggaGFzIG5vdCB5ZXQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFkIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBkb25lLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRva2Vuc1skbGFzdF1bJ3BhcmVudGhlc2lzX29wZW5lciddKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkeCA9ICgkdGhpcy0+dG9rZW5zWyRsYXN0XVsncGFyZW50aGVzaXNfb3BlbmVyJ10gLSAxKTsgJHggPj0gMDsgJHgtLSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ11dKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX0ZOKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgtLSR4OyAkeCA+PSAwOyAkeC0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ11dKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9CSVRXSVNFX0FORAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddICE9PSBUX0ZVTkNUSU9OKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25maXJtZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAgICAgICAgIHVuc2V0KCRwYXJlbnMsICRsYXN0KTsKICAgICAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgICAgIGlmICgkY29uZmlybWVkID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhIHVuaW9uIG9yIGludGVyc2VjdGlvbiB0eXBlIGFmdGVyIGFsbCwgbW92ZSBvbi4KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdHlwZU9wZXJhdG9ycyBhcyAkeCkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX0JJVFdJU0VfT1IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9IFRfVFlQRV9VTklPTjsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skeF1bJ3R5cGUnXSA9ICdUX1RZUEVfVU5JT04nOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0aGlzLT50b2tlbnNbJHhdWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogdG9rZW4gJHggb24gbGluZSAkbGluZSBjaGFuZ2VkIGZyb20gVF9CSVRXSVNFX09SIHRvIFRfVFlQRV9VTklPTiIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ10gPSBUX1RZUEVfSU5URVJTRUNUSU9OOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyR4XVsndHlwZSddID0gJ1RfVFlQRV9JTlRFUlNFQ1RJT04nOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0aGlzLT50b2tlbnNbJHhdWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdCogdG9rZW4gJHggb24gbGluZSAkbGluZSBjaGFuZ2VkIGZyb20gVF9CSVRXSVNFX0FORCB0byBUX1RZUEVfSU5URVJTRUNUSU9OIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKCR0aGlzLT50b2tlbnNbJGldWydjb2RlJ10gPT09IFRfU1RBVElDKSB7CiAgICAgICAgICAgICAgICBmb3IgKCR4ID0gKCRpIC0gMSk7ICR4ID4gMDsgJHgtLSkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ11dKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX0lOU1RBTkNFT0YpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID0gVF9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3R5cGUnXSA9ICdUX1NUUklORyc7CgogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0aGlzLT50b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB0b2tlbiAkaSBvbiBsaW5lICRsaW5lIGNoYW5nZWQgZnJvbSBUX1NUQVRJQyB0byBUX1NUUklORyIuUEhQX0VPTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRoaXMtPnRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9UUlVFCiAgICAgICAgICAgICAgICB8fCAkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID09PSBUX0ZBTFNFCiAgICAgICAgICAgICAgICB8fCAkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddID09PSBUX05VTEwKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBmb3IgKCR4ID0gKCRpICsgMSk7ICRpIDwgJG51bVRva2VuczsgJHgrKykgewogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldChVdGlsXFRva2Vuczo6JGVtcHR5VG9rZW5zWyR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ11dKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9uLXdoaXRlc3BhY2UgY29udGVudC4KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dHN0cmluZ0NvbnRleHRzWyR0aGlzLT50b2tlbnNbJHhdWydjb2RlJ11dKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICR0aGlzLT50b2tlbnNbJGldWydsaW5lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJHRoaXMtPnRva2Vuc1skaV1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHQqIHRva2VuICRpIG9uIGxpbmUgJGxpbmUgY2hhbmdlZCBmcm9tICR0eXBlIHRvIFRfU1RSSU5HIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ2NvZGUnXSA9IFRfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWyd0eXBlJ10gPSAnVF9TVFJJTkcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIGlmICgoJHRoaXMtPnRva2Vuc1skaV1bJ2NvZGUnXSAhPT0gVF9DQVNFCiAgICAgICAgICAgICAgICAmJiAkdGhpcy0+dG9rZW5zWyRpXVsnY29kZSddICE9PSBUX0RFRkFVTFQpCiAgICAgICAgICAgICAgICB8fCBpc3NldCgkdGhpcy0+dG9rZW5zWyRpXVsnc2NvcGVfb3BlbmVyJ10pID09PSBmYWxzZQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIC8vIE9ubHkgaW50ZXJlc3RlZCBpbiBDQVNFIGFuZCBERUZBVUxUIHN0YXRlbWVudHMgZnJvbSBoZXJlIG9uIGluLgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzY29wZU9wZW5lciA9ICR0aGlzLT50b2tlbnNbJGldWydzY29wZV9vcGVuZXInXTsKICAgICAgICAgICAgJHNjb3BlQ2xvc2VyID0gJHRoaXMtPnRva2Vuc1skaV1bJ3Njb3BlX2Nsb3NlciddOwoKICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGNoYXIgYWZ0ZXIgdGhlIG9wZW5lciBpcyBhIGN1cmx5IGJyYWNlCiAgICAgICAgICAgIC8vIGFuZCB0aGF0IGJyYWNlIGhhcyBiZWVuIGlnbm9yZWQsIGl0IGlzIGFjdHVhbGx5CiAgICAgICAgICAgIC8vIG9wZW5pbmcgdGhpcyBjYXNlIHN0YXRlbWVudCBhbmQgdGhlIG9wZW5lciBhbmQgY2xvc2VyIGFyZQogICAgICAgICAgICAvLyBwcm9iYWJseSBzZXQgaW5jb3JyZWN0bHkuCiAgICAgICAgICAgIGZvciAoJHggPSAoJHNjb3BlT3BlbmVyICsgMSk7ICR4IDwgJG51bVRva2VuczsgJHgrKykgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KFV0aWxcVG9rZW5zOjokZW1wdHlUb2tlbnNbJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXV0pID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIC8vIE5vbi13aGl0ZXNwYWNlIGNvbnRlbnQuCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdGhpcy0+dG9rZW5zWyR4XVsnY29kZSddID09PSBUX0NBU0UgfHwgJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSA9PT0gVF9ERUZBVUxUKSB7CiAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIG11bHRpcGxlIENBU0Ugc3RhdGVtZW50cyB0aGF0IHNoYXJlIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAvLyBjbG9zZXIuIEJlY2F1c2Ugd2UgYXJlIGdvaW5nIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBmaWxlLCB0aGlzIG5leHQKICAgICAgICAgICAgICAgIC8vIENBU0Ugc3RhdGVtZW50IGlzIGFscmVhZHkgZml4ZWQsIHNvIGp1c3QgdXNlIGl0cyBjbG9zZXIgYW5kIGRvbid0CiAgICAgICAgICAgICAgICAvLyB3b3JyeSBhYm91dCBmaXhpbmcgYW55dGhpbmcuCiAgICAgICAgICAgICAgICAkbmV3Q2xvc2VyID0gJHRoaXMtPnRva2Vuc1skeF1bJ3Njb3BlX2Nsb3NlciddOwogICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ3Njb3BlX2Nsb3NlciddID0gJG5ld0Nsb3NlcjsKICAgICAgICAgICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICAgICAgICAgICRvbGRUeXBlID0gJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgJG5ld1R5cGUgPSAkdGhpcy0+dG9rZW5zWyRuZXdDbG9zZXJdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgJGxpbmUgICAgPSAkdGhpcy0+dG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB0b2tlbiAkaSAoVF9DQVNFKSBvbiBsaW5lICRsaW5lIGNsb3NlciBjaGFuZ2VkIGZyb20gJHNjb3BlQ2xvc2VyICgkb2xkVHlwZSkgdG8gJG5ld0Nsb3NlciAoJG5ld1R5cGUpIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRoaXMtPnRva2Vuc1skeF1bJ2NvZGUnXSAhPT0gVF9PUEVOX0NVUkxZX0JSQUNLRVQKICAgICAgICAgICAgICAgIHx8IGlzc2V0KCR0aGlzLT50b2tlbnNbJHhdWydzY29wZV9jb25kaXRpb24nXSkgPT09IHRydWUKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAvLyBOb3QgYSBDQVNFL0RFRkFVTFQgd2l0aCBhIGN1cmx5IGJyYWNlIG9wZW5lci4KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUaGUgY2xvc2VyIGZvciB0aGlzIENBU0UvREVGQVVMVCBzaG91bGQgYmUgdGhlIGNsb3NpbmcgY3VybHkgYnJhY2UgYW5kCiAgICAgICAgICAgIC8vIG5vdCB3aGF0ZXZlciBpdCBhbHJlYWR5IGlzLiBUaGUgb3BlbmVyIG5lZWRzIHRvIGJlIHRoZSBvcGVuaW5nIGN1cmx5CiAgICAgICAgICAgIC8vIGJyYWNlIHNvIGV2ZXJ5dGhpbmcgbWF0Y2hlcyB1cC4KICAgICAgICAgICAgJG5ld0Nsb3NlciA9ICR0aGlzLT50b2tlbnNbJHhdWydicmFja2V0X2Nsb3NlciddOwogICAgICAgICAgICBmb3JlYWNoIChbJGksICR4LCAkbmV3Q2xvc2VyXSBhcyAkaW5kZXgpIHsKICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGluZGV4XVsnc2NvcGVfY29uZGl0aW9uJ10gPSAkaTsKICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGluZGV4XVsnc2NvcGVfb3BlbmVyJ10gICAgPSAkeDsKICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGluZGV4XVsnc2NvcGVfY2xvc2VyJ10gICAgPSAkbmV3Q2xvc2VyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoUEhQX0NPREVTTklGRkVSX1ZFUkJPU0lUWSA+IDEpIHsKICAgICAgICAgICAgICAgICRsaW5lICAgICAgPSAkdGhpcy0+dG9rZW5zWyRpXVsnbGluZSddOwogICAgICAgICAgICAgICAgJHRva2VuVHlwZSA9ICR0aGlzLT50b2tlbnNbJGldWyd0eXBlJ107CgogICAgICAgICAgICAgICAgJG9sZFR5cGUgPSAkdGhpcy0+dG9rZW5zWyRzY29wZU9wZW5lcl1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICRuZXdUeXBlID0gJHRoaXMtPnRva2Vuc1skeF1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgIGVjaG8gIlx0KiB0b2tlbiAkaSAoJHRva2VuVHlwZSkgb24gbGluZSAkbGluZSBvcGVuZXIgY2hhbmdlZCBmcm9tICRzY29wZU9wZW5lciAoJG9sZFR5cGUpIHRvICR4ICgkbmV3VHlwZSkiLlBIUF9FT0w7CgogICAgICAgICAgICAgICAgJG9sZFR5cGUgPSAkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ3R5cGUnXTsKICAgICAgICAgICAgICAgICRuZXdUeXBlID0gJHRoaXMtPnRva2Vuc1skbmV3Q2xvc2VyXVsndHlwZSddOwogICAgICAgICAgICAgICAgZWNobyAiXHQqIHRva2VuICRpICgkdG9rZW5UeXBlKSBvbiBsaW5lICRsaW5lIGNsb3NlciBjaGFuZ2VkIGZyb20gJHNjb3BlQ2xvc2VyICgkb2xkVHlwZSkgdG8gJG5ld0Nsb3NlciAoJG5ld1R5cGUpIi5QSFBfRU9MOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRoaXMtPnRva2Vuc1skc2NvcGVPcGVuZXJdWydzY29wZV9jb25kaXRpb24nXSA9PT0gJGkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCR0aGlzLT50b2tlbnNbJHNjb3BlT3BlbmVyXVsnc2NvcGVfY29uZGl0aW9uJ10pOwogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPnRva2Vuc1skc2NvcGVPcGVuZXJdWydzY29wZV9vcGVuZXInXSk7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+dG9rZW5zWyRzY29wZU9wZW5lcl1bJ3Njb3BlX2Nsb3NlciddKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfY29uZGl0aW9uJ10gPT09ICRpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+dG9rZW5zWyRzY29wZUNsb3Nlcl1bJ3Njb3BlX2NvbmRpdGlvbiddKTsKICAgICAgICAgICAgICAgIHVuc2V0KCR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfb3BlbmVyJ10pOwogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydzY29wZV9jbG9zZXInXSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVzaW5nIGEgc2hhcmVkIGNsb3Nlci4gQWxsIHRva2VucyB0aGF0IHdlcmUKICAgICAgICAgICAgICAgIC8vIHNoYXJpbmcgdGhpcyBjbG9zZXIgd2l0aCB1cywgZXhjZXB0IGZvciB0aGUgc2NvcGUgY29uZGl0aW9uCiAgICAgICAgICAgICAgICAvLyBhbmQgaXQncyBvcGVuZXIsIG5lZWQgdG8gbm93IHBvaW50IHRvIHRoZSBuZXcgY2xvc2VyLgogICAgICAgICAgICAgICAgJGNvbmRpdGlvbiA9ICR0aGlzLT50b2tlbnNbJHNjb3BlQ2xvc2VyXVsnc2NvcGVfY29uZGl0aW9uJ107CiAgICAgICAgICAgICAgICAkc3RhcnQgICAgID0gKCR0aGlzLT50b2tlbnNbJGNvbmRpdGlvbl1bJ3Njb3BlX29wZW5lciddICsgMSk7CiAgICAgICAgICAgICAgICBmb3IgKCR5ID0gJHN0YXJ0OyAkeSA8ICRzY29wZUNsb3NlcjsgJHkrKykgewogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+dG9rZW5zWyR5XVsnc2NvcGVfY2xvc2VyJ10pID09PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR0aGlzLT50b2tlbnNbJHldWydzY29wZV9jbG9zZXInXSA9PT0gJHNjb3BlQ2xvc2VyCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJHldWydzY29wZV9jbG9zZXInXSA9ICRuZXdDbG9zZXI7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUEhQX0NPREVTTklGRkVSX1ZFUkJPU0lUWSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lICAgICAgPSAkdGhpcy0+dG9rZW5zWyR5XVsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRva2VuVHlwZSA9ICR0aGlzLT50b2tlbnNbJHldWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2xkVHlwZSAgID0gJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3VHlwZSAgID0gJHRoaXMtPnRva2Vuc1skbmV3Q2xvc2VyXVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogdG9rZW4gJHkgKCR0b2tlblR5cGUpIG9uIGxpbmUgJGxpbmUgY2xvc2VyIGNoYW5nZWQgZnJvbSAkc2NvcGVDbG9zZXIgKCRvbGRUeXBlKSB0byAkbmV3Q2xvc2VyICgkbmV3VHlwZSkiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPnRva2Vuc1skeF1bJ2JyYWNrZXRfb3BlbmVyJ10pOwogICAgICAgICAgICB1bnNldCgkdGhpcy0+dG9rZW5zWyR4XVsnYnJhY2tldF9jbG9zZXInXSk7CiAgICAgICAgICAgIHVuc2V0KCR0aGlzLT50b2tlbnNbJG5ld0Nsb3Nlcl1bJ2JyYWNrZXRfb3BlbmVyJ10pOwogICAgICAgICAgICB1bnNldCgkdGhpcy0+dG9rZW5zWyRuZXdDbG9zZXJdWydicmFja2V0X2Nsb3NlciddKTsKICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skc2NvcGVDbG9zZXJdWydjb25kaXRpb25zJ11bXSA9ICRpOwoKICAgICAgICAgICAgLy8gTm93IGZpeCB1cCBhbGwgdGhlIHRva2VucyB0aGF0IHRoaW5rIHRoZXkgYXJlCiAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgQ0FTRS9ERUZBVUxUIHN0YXRlbWVudCB3aGVuIHRoZXkgYXJlIHJlYWxseSBvdXRzaWRlLgogICAgICAgICAgICBmb3IgKCR4ID0gJG5ld0Nsb3NlcjsgJHggPCAkc2NvcGVDbG9zZXI7ICR4KyspIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT50b2tlbnNbJHhdWydjb25kaXRpb25zJ10gYXMgJG51bSA9PiAkb2xkQ29uZCkgewogICAgICAgICAgICAgICAgICAgIGlmICgkb2xkQ29uZCA9PT0gJHRoaXMtPnRva2Vuc1skaV1bJ2NvZGUnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAkb2xkQ29uZGl0aW9ucyA9ICR0aGlzLT50b2tlbnNbJHhdWydjb25kaXRpb25zJ107CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0KCR0aGlzLT50b2tlbnNbJHhdWydjb25kaXRpb25zJ11bJG51bV0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9DT0RFU05JRkZFUl9WRVJCT1NJVFkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSAgICAgPSAkdGhpcy0+dG9rZW5zWyR4XVsndHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9sZENvbmRzID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkb2xkQ29uZGl0aW9ucyBhcyAkY29uZGl0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9sZENvbmRzIC49IFV0aWxcVG9rZW5zOjp0b2tlbk5hbWUoJGNvbmRpdGlvbikuJywnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvbGRDb25kcyA9IHJ0cmltKCRvbGRDb25kcywgJywnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3Q29uZHMgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT50b2tlbnNbJHhdWydjb25kaXRpb25zJ10gYXMgJGNvbmRpdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdDb25kcyAuPSBVdGlsXFRva2Vuczo6dG9rZW5OYW1lKCRjb25kaXRpb24pLicsJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3Q29uZHMgPSBydHJpbSgkbmV3Q29uZHMsICcsJyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiXHRcdCogY2xlYW5lZCAkeCAoJHR5cGUpICoiLlBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJcdFx0XHQ9PiBjb25kaXRpb25zIGNoYW5nZWQgZnJvbSAkb2xkQ29uZHMgdG8gJG5ld0NvbmRzIi5QSFBfRU9MOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9Ly9lbmQgaWYKICAgICAgICAgICAgICAgIH0vL2VuZCBmb3JlYWNoCiAgICAgICAgICAgIH0vL2VuZCBmb3IKICAgICAgICB9Ly9lbmQgZm9yCgogICAgICAgIGlmIChQSFBfQ09ERVNOSUZGRVJfVkVSQk9TSVRZID4gMSkgewogICAgICAgICAgICBlY2hvICJcdCoqKiBFTkQgQURESVRJT05BTCBQSFAgUFJPQ0VTU0lORyAqKioiLlBIUF9FT0w7CiAgICAgICAgfQoKICAgIH0vL2VuZCBwcm9jZXNzQWRkaXRpb25hbCgpCgoKICAgIC8qKgogICAgICogVGFrZXMgYSB0b2tlbiBwcm9kdWNlZCBmcm9tIDxjb2RlPnRva2VuX2dldF9hbGwoKTwvY29kZT4gYW5kIHByb2R1Y2VzIGEKICAgICAqIG1vcmUgdW5pZm9ybSB0b2tlbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICR0b2tlbiBUaGUgdG9rZW4gdG8gY29udmVydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IFRoZSBuZXcgdG9rZW4uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RhbmRhcmRpc2VUb2tlbigkdG9rZW4pCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0b2tlblsxXSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIGlmIChpc3NldChzZWxmOjokcmVzb2x2ZVRva2VuQ2FjaGVbJHRva2VuWzBdXSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmOjokcmVzb2x2ZVRva2VuQ2FjaGVbJHRva2VuWzBdXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjYWNoZUtleSA9IG51bGw7CiAgICAgICAgICAgIGlmICgkdG9rZW5bMF0gPT09IFRfU1RSSU5HKSB7CiAgICAgICAgICAgICAgICAkY2FjaGVLZXkgPSBzdHJ0b2xvd2VyKCR0b2tlblsxXSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRva2VuWzBdICE9PSBUX0NVUkxZX09QRU4pIHsKICAgICAgICAgICAgICAgICRjYWNoZUtleSA9ICR0b2tlblswXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRjYWNoZUtleSAhPT0gbnVsbCAmJiBpc3NldChzZWxmOjokcmVzb2x2ZVRva2VuQ2FjaGVbJGNhY2hlS2V5XSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICRuZXdUb2tlbiAgICAgICAgICAgID0gc2VsZjo6JHJlc29sdmVUb2tlbkNhY2hlWyRjYWNoZUtleV07CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ2NvbnRlbnQnXSA9ICR0b2tlblsxXTsKICAgICAgICAgICAgICAgIHJldHVybiAkbmV3VG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkdG9rZW5bMV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6cmVzb2x2ZVNpbXBsZVRva2VuKCR0b2tlblswXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRva2VuWzBdID09PSBUX1NUUklORykgewogICAgICAgICAgICBzd2l0Y2ggKCRjYWNoZUtleSkgewogICAgICAgICAgICBjYXNlICdmYWxzZSc6CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0ZBTFNFJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0cnVlJzoKICAgICAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfVFJVRSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnbnVsbCc6CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX05VTEwnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NlbGYnOgogICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9TRUxGJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdwYXJlbnQnOgogICAgICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9QQVJFTlQnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX1NUUklORyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG5ld1Rva2VuWydjb2RlJ10gPSBjb25zdGFudCgkbmV3VG9rZW5bJ3R5cGUnXSk7CgogICAgICAgICAgICBzZWxmOjokcmVzb2x2ZVRva2VuQ2FjaGVbJGNhY2hlS2V5XSA9ICRuZXdUb2tlbjsKICAgICAgICB9IGVsc2UgaWYgKCR0b2tlblswXSA9PT0gVF9DVVJMWV9PUEVOKSB7CiAgICAgICAgICAgICRuZXdUb2tlbiA9IFsKICAgICAgICAgICAgICAgICdjb2RlJyA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVCwKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnVF9PUEVOX0NVUkxZX0JSQUNLRVQnLAogICAgICAgICAgICBdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRuZXdUb2tlbiA9IFsKICAgICAgICAgICAgICAgICdjb2RlJyA9PiAkdG9rZW5bMF0sCiAgICAgICAgICAgICAgICAndHlwZScgPT4gVXRpbFxUb2tlbnM6OnRva2VuTmFtZSgkdG9rZW5bMF0pLAogICAgICAgICAgICBdOwoKICAgICAgICAgICAgc2VsZjo6JHJlc29sdmVUb2tlbkNhY2hlWyR0b2tlblswXV0gPSAkbmV3VG9rZW47CiAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICRuZXdUb2tlblsnY29udGVudCddID0gJHRva2VuWzFdOwogICAgICAgIHJldHVybiAkbmV3VG9rZW47CgogICAgfS8vZW5kIHN0YW5kYXJkaXNlVG9rZW4oKQoKCiAgICAvKioKICAgICAqIENvbnZlcnRzIHNpbXBsZSB0b2tlbnMgaW50byBhIGZvcm1hdCB0aGF0IGNvbmZvcm1zIHRvIGNvbXBsZXggdG9rZW5zCiAgICAgKiBwcm9kdWNlZCBieSB0b2tlbl9nZXRfYWxsKCkuCiAgICAgKgogICAgICogU2ltcGxlIHRva2VucyBhcmUgdG9rZW5zIHRoYXQgYXJlIG5vdCBpbiBhcnJheSBmb3JtIHdoZW4gcHJvZHVjZWQgZnJvbQogICAgICogdG9rZW5fZ2V0X2FsbCgpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRva2VuIFRoZSBzaW1wbGUgdG9rZW4gdG8gY29udmVydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IFRoZSBuZXcgdG9rZW4gaW4gYXJyYXkgZm9ybWF0LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlc29sdmVTaW1wbGVUb2tlbigkdG9rZW4pCiAgICB7CiAgICAgICAgJG5ld1Rva2VuID0gW107CgogICAgICAgIHN3aXRjaCAoJHRva2VuKSB7CiAgICAgICAgY2FzZSAneyc6CiAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfT1BFTl9DVVJMWV9CUkFDS0VUJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnfSc6CiAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ1snOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX09QRU5fU1FVQVJFX0JSQUNLRVQnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICddJzoKICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9DTE9TRV9TUVVBUkVfQlJBQ0tFVCc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJygnOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX09QRU5fUEFSRU5USEVTSVMnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICcpJzoKICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9DTE9TRV9QQVJFTlRIRVNJUyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzonOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0NPTE9OJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnLic6CiAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfU1RSSU5HX0NPTkNBVCc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzsnOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX1NFTUlDT0xPTic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJz0nOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0VRVUFMJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnKic6CiAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfTVVMVElQTFknOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9ESVZJREUnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9QTFVTJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnLSc6CiAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfTUlOVVMnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICclJzoKICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9NT0RVTFVTJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnXic6CiAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfQklUV0lTRV9YT1InOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICcmJzoKICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9CSVRXSVNFX0FORCc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3wnOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0JJVFdJU0VfT1InOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd+JzoKICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9CSVRXSVNFX05PVCc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzwnOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0xFU1NfVEhBTic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJz4nOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0dSRUFURVJfVEhBTic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJyEnOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0JPT0xFQU5fTk9UJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnLCc6CiAgICAgICAgICAgICRuZXdUb2tlblsndHlwZSddID0gJ1RfQ09NTUEnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdAJzoKICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9BU1BFUkFORCc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJyQnOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0RPTExBUic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2AnOgogICAgICAgICAgICAkbmV3VG9rZW5bJ3R5cGUnXSA9ICdUX0JBQ0tUSUNLJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgJG5ld1Rva2VuWyd0eXBlJ10gPSAnVF9OT05FJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfS8vZW5kIHN3aXRjaAoKICAgICAgICAkbmV3VG9rZW5bJ2NvZGUnXSAgICA9IGNvbnN0YW50KCRuZXdUb2tlblsndHlwZSddKTsKICAgICAgICAkbmV3VG9rZW5bJ2NvbnRlbnQnXSA9ICR0b2tlbjsKCiAgICAgICAgc2VsZjo6JHJlc29sdmVUb2tlbkNhY2hlWyR0b2tlbl0gPSAkbmV3VG9rZW47CiAgICAgICAgcmV0dXJuICRuZXdUb2tlbjsKCiAgICB9Ly9lbmQgcmVzb2x2ZVNpbXBsZVRva2VuKCkKCgogICAgLyoqCiAgICAgKiBGaW5kcyBhICJjbG9zZXIiIHRva2VuIChjbG9zaW5nIHBhcmVudGhlc2lzIG9yIHNxdWFyZSBicmFja2V0IGZvciBleGFtcGxlKQogICAgICogSGFuZGxlIHBhcmVudGhlc2lzIGJhbGFuY2luZyB3aGlsZSBzZWFyY2hpbmcgZm9yIGNsb3NpbmcgdG9rZW4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICR0b2tlbnMgICAgICAgVGhlIGxpc3Qgb2YgdG9rZW5zIHRvIGl0ZXJhdGUgc2VhcmNoaW5nIHRoZSBjbG9zaW5nIHRva2VuIChhcyByZXR1cm5lZCBieSB0b2tlbl9nZXRfYWxsKQogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkc3RhcnQgICAgICAgIFRoZSBzdGFydGluZyBwb3NpdGlvbgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkb3BlbmVyVG9rZW5zIFRoZSBvcGVuaW5nIGNoYXJhY3RlcgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAkY2xvc2VyQ2hhciAgIFRoZSBjbG9zaW5nIGNoYXJhY3RlcgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIHBvc2l0aW9uIG9mIHRoZSBjbG9zaW5nIHRva2VuLCBpZiBmb3VuZC4gTlVMTCBvdGhlcndpc2UuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmluZENsb3NlcihhcnJheSAmJHRva2VucywgJHN0YXJ0LCAkb3BlbmVyVG9rZW5zLCAkY2xvc2VyQ2hhcikKICAgIHsKICAgICAgICAkbnVtVG9rZW5zICAgID0gY291bnQoJHRva2Vucyk7CiAgICAgICAgJHN0YWNrICAgICAgICA9IFswXTsKICAgICAgICAkY2xvc2VyICAgICAgID0gbnVsbDsKICAgICAgICAkb3BlbmVyVG9rZW5zID0gKGFycmF5KSAkb3BlbmVyVG9rZW5zOwoKICAgICAgICBmb3IgKCR4ID0gJHN0YXJ0OyAkeCA8ICRudW1Ub2tlbnM7ICR4KyspIHsKICAgICAgICAgICAgaWYgKGluX2FycmF5KCR0b2tlbnNbJHhdLCAkb3BlbmVyVG9rZW5zLCB0cnVlKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgfHwgKGlzX2FycmF5KCR0b2tlbnNbJHhdKSA9PT0gdHJ1ZSAmJiBpbl9hcnJheSgkdG9rZW5zWyR4XVsxXSwgJG9wZW5lclRva2VucywgdHJ1ZSkgPT09IHRydWUpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHN0YWNrW10gPSAkeDsKICAgICAgICAgICAgfSBlbHNlIGlmICgkdG9rZW5zWyR4XSA9PT0gJGNsb3NlckNoYXIpIHsKICAgICAgICAgICAgICAgIGFycmF5X3BvcCgkc3RhY2spOwogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRzdGFjaykgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkY2xvc2VyID0gJHg7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkY2xvc2VyOwoKICAgIH0vL2VuZCBmaW5kQ2xvc2VyKCkKCgogICAgLyoqCiAgICAgKiBQSFAgOCBhdHRyaWJ1dGVzIHBhcnNlciBmb3IgUEhQIDwgOAogICAgICogSGFuZGxlcyBzaW5nbGUtbGluZSBhbmQgbXVsdGlsaW5lIGF0dHJpYnV0ZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR0b2tlbnMgICBUaGUgb3JpZ2luYWwgYXJyYXkgb2YgdG9rZW5zIChhcyByZXR1cm5lZCBieSB0b2tlbl9nZXRfYWxsKQogICAgICogQHBhcmFtIGludCAgICRzdGFja1B0ciBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0b2tlbiBhcnJheQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbCBUaGUgYXJyYXkgb2YgcGFyc2VkIGF0dHJpYnV0ZSB0b2tlbnMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVBocEF0dHJpYnV0ZShhcnJheSAmJHRva2VucywgJHN0YWNrUHRyKQogICAgewoKICAgICAgICAkdG9rZW4gPSAkdG9rZW5zWyRzdGFja1B0cl07CgogICAgICAgICRjb21tZW50Qm9keSA9IHN1YnN0cigkdG9rZW5bMV0sIDIpOwogICAgICAgICRzdWJUb2tlbnMgICA9IEB0b2tlbl9nZXRfYWxsKCc8P3BocCAnLiRjb21tZW50Qm9keSk7CgogICAgICAgIGZvcmVhY2ggKCRzdWJUb2tlbnMgYXMgJGkgPT4gJHN1YlRva2VuKSB7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgkc3ViVG9rZW4pID09PSB0cnVlCiAgICAgICAgICAgICAgICAmJiAkc3ViVG9rZW5bMF0gPT09IFRfQ09NTUVOVAogICAgICAgICAgICAgICAgJiYgc3RycG9zKCRzdWJUb2tlblsxXSwgJyNbJykgPT09IDAKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkcmVwYXJzZWQgPSAkdGhpcy0+cGFyc2VQaHBBdHRyaWJ1dGUoJHN1YlRva2VucywgJGkpOwogICAgICAgICAgICAgICAgaWYgKCRyZXBhcnNlZCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGFycmF5X3NwbGljZSgkc3ViVG9rZW5zLCAkaSwgMSwgJHJlcGFyc2VkKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHN1YlRva2VuWzBdID0gVF9BVFRSSUJVVEU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGFycmF5X3NwbGljZSgkc3ViVG9rZW5zLCAwLCAxLCBbW1RfQVRUUklCVVRFLCAnI1snXV0pOwoKICAgICAgICAvLyBHbyBsb29raW5nIGZvciB0aGUgY2xvc2UgYnJhY2tldC4KICAgICAgICAkYnJhY2tldENsb3NlciA9ICR0aGlzLT5maW5kQ2xvc2VyKCRzdWJUb2tlbnMsIDEsICdbJywgJ10nKTsKICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA4MDAwMCAmJiAkYnJhY2tldENsb3NlciA9PT0gbnVsbCkgewogICAgICAgICAgICBmb3JlYWNoIChhcnJheV9zbGljZSgkdG9rZW5zLCAoJHN0YWNrUHRyICsgMSkpIGFzICR0b2tlbikgewogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR0b2tlbikgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkY29tbWVudEJvZHkgLj0gJHRva2VuWzFdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY29tbWVudEJvZHkgLj0gJHRva2VuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkc3ViVG9rZW5zID0gQHRva2VuX2dldF9hbGwoJzw/cGhwICcuJGNvbW1lbnRCb2R5KTsKICAgICAgICAgICAgYXJyYXlfc3BsaWNlKCRzdWJUb2tlbnMsIDAsIDEsIFtbVF9BVFRSSUJVVEUsICcjWyddXSk7CgogICAgICAgICAgICAkYnJhY2tldENsb3NlciA9ICR0aGlzLT5maW5kQ2xvc2VyKCRzdWJUb2tlbnMsIDEsICdbJywgJ10nKTsKICAgICAgICAgICAgaWYgKCRicmFja2V0Q2xvc2VyICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBhcnJheV9zcGxpY2UoJHRva2VucywgKCRzdGFja1B0ciArIDEpLCBjb3VudCgkdG9rZW5zKSwgYXJyYXlfc2xpY2UoJHN1YlRva2VucywgKCRicmFja2V0Q2xvc2VyICsgMSkpKTsKICAgICAgICAgICAgICAgICRzdWJUb2tlbnMgPSBhcnJheV9zbGljZSgkc3ViVG9rZW5zLCAwLCAoJGJyYWNrZXRDbG9zZXIgKyAxKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkYnJhY2tldENsb3NlciA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc3ViVG9rZW5zOwoKICAgIH0vL2VuZCBwYXJzZVBocEF0dHJpYnV0ZSgpCgoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG1hcCBmb3IgdGhlIGF0dHJpYnV0ZXMgdG9rZW5zIHRoYXQgc3Vycm91bmQgb3RoZXIgdG9rZW5zLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZUF0dHJpYnV0ZXNOZXN0aW5nTWFwKCkKICAgIHsKICAgICAgICAkbWFwID0gW107CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJHRoaXMtPm51bVRva2VuczsgJGkrKykgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRva2Vuc1skaV1bJ2F0dHJpYnV0ZV9vcGVuZXInXSkgPT09IHRydWUKICAgICAgICAgICAgICAgICYmICRpID09PSAkdGhpcy0+dG9rZW5zWyRpXVsnYXR0cmlidXRlX29wZW5lciddCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtYXApID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWyduZXN0ZWRfYXR0cmlidXRlcyddID0gJG1hcDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnRva2Vuc1skaV1bJ2F0dHJpYnV0ZV9jbG9zZXInXSkgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkbWFwWyR0aGlzLT50b2tlbnNbJGldWydhdHRyaWJ1dGVfb3BlbmVyJ11dCiAgICAgICAgICAgICAgICAgICAgICAgID0gJHRoaXMtPnRva2Vuc1skaV1bJ2F0dHJpYnV0ZV9jbG9zZXInXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChpc3NldCgkdGhpcy0+dG9rZW5zWyRpXVsnYXR0cmlidXRlX2Nsb3NlciddKSA9PT0gdHJ1ZQogICAgICAgICAgICAgICAgJiYgJGkgPT09ICR0aGlzLT50b2tlbnNbJGldWydhdHRyaWJ1dGVfY2xvc2VyJ10KICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBhcnJheV9wb3AoJG1hcCk7CiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJG1hcCkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRva2Vuc1skaV1bJ25lc3RlZF9hdHRyaWJ1dGVzJ10gPSAkbWFwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtYXApID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT50b2tlbnNbJGldWyduZXN0ZWRfYXR0cmlidXRlcyddID0gJG1hcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgfS8vZW5kIGZvcgoKICAgIH0vL2VuZCBjcmVhdGVBdHRyaWJ1dGVzTmVzdGluZ01hcCgpCgoKfS8vZW5kIGNsYXNzCiI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBuYW1lc3BhY2VzIjthOjE6e3M6Mjc6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVycyI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMDoiVG9rZW5pemVycyI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGluY2x1ZGVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGZ1bmN0aW9ucyI7YTowOnt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjb25zdGFudHMiO2E6MDp7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAY2xhc3NlcyI7YToxOntzOjMxOiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTM6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjMxOiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MzoiUEhQIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGRvY0Jsb2NrIjtOO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwYXJlbnQiO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czozNzoiXFBIUF9Db2RlU25pZmZlclxUb2tlbml6ZXJzXFRva2VuaXplciI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjk6IlRva2VuaXplciI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBpbXBsZW1lbnRzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AY29uc3RhbnRzIjthOjA6e31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AcHJvcGVydGllcyI7YTo1OntzOjQ2OiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQOjokc2NvcGVPcGVuZXJzIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5IjoxMTp7czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0NjoiXFBIUF9Db2RlU25pZmZlclxUb2tlbml6ZXJzXFBIUDo6JHNjb3BlT3BlbmVycyI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEyOiJzY29wZU9wZW5lcnMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTA6IkEgbGlzdCBvZiB0b2tlbnMgdGhhdCBhcmUgYWxsb3dlZCB0byBvcGVuIGEgc2NvcGUuIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI5MDoiVGhpcyBhcnJheSBhbHNvIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoYXQga2luZCBvZiB0b2tlbiB0aGUgc2NvcGUKb3BlbmVyIHVzZXMgdG8gb3BlbiBhbmQgY2xvc2UgdGhlIHNjb3BlLCBpZiB0aGUgdG9rZW4gc3RyaWN0bHkgcmVxdWlyZXMKYW4gb3BlbmVyLCBpZiB0aGUgdG9rZW4gY2FuIHNoYXJlIGEgc2NvcGUgY2xvc2VyLCBhbmQgd2hvIGl0IGNhbiBiZSBzaGFyZWQKd2l0aC4gQW4gZXhhbXBsZSBvZiBhIHRva2VuIHRoYXQgc2hhcmVzIGEgc2NvcGUgY2xvc2VyIGlzIGEgQ0FTRSBzY29wZS4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czoyNjoiUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnMiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjE6e3M6NDoiVXRpbCI7czoyMDoiUEhQX0NvZGVTbmlmZmVyXFV0aWwiO319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czo1MDk4OiJbVF9JRiA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVQsIFRfQ09MT04gPT4gVF9DT0xPTl0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULCBUX0VORElGID0+IFRfRU5ESUYsIFRfRUxTRSA9PiBUX0VMU0UsIFRfRUxTRUlGID0+IFRfRUxTRUlGXSwgJ3N0cmljdCcgPT4gZmFsc2UsICdzaGFyZWQnID0+IGZhbHNlLCAnd2l0aCcgPT4gW1RfRUxTRSA9PiBUX0VMU0UsIFRfRUxTRUlGID0+IFRfRUxTRUlGXV0sIFRfVFJZID0+IFsnc3RhcnQnID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVF0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VUXSwgJ3N0cmljdCcgPT4gdHJ1ZSwgJ3NoYXJlZCcgPT4gZmFsc2UsICd3aXRoJyA9PiBbXV0sIFRfQ0FUQ0ggPT4gWydzdGFydCcgPT4gW1RfT1BFTl9DVVJMWV9CUkFDS0VUID0+IFRfT1BFTl9DVVJMWV9CUkFDS0VUXSwgJ2VuZCcgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVRdLCAnc3RyaWN0JyA9PiB0cnVlLCAnc2hhcmVkJyA9PiBmYWxzZSwgJ3dpdGgnID0+IFtdXSwgVF9GSU5BTExZID0+IFsnc3RhcnQnID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVF0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VUXSwgJ3N0cmljdCcgPT4gdHJ1ZSwgJ3NoYXJlZCcgPT4gZmFsc2UsICd3aXRoJyA9PiBbXV0sIFRfRUxTRSA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVQsIFRfQ09MT04gPT4gVF9DT0xPTl0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULCBUX0VORElGID0+IFRfRU5ESUZdLCAnc3RyaWN0JyA9PiBmYWxzZSwgJ3NoYXJlZCcgPT4gZmFsc2UsICd3aXRoJyA9PiBbVF9JRiA9PiBUX0lGLCBUX0VMU0VJRiA9PiBUX0VMU0VJRl1dLCBUX0VMU0VJRiA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVQsIFRfQ09MT04gPT4gVF9DT0xPTl0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULCBUX0VORElGID0+IFRfRU5ESUYsIFRfRUxTRSA9PiBUX0VMU0UsIFRfRUxTRUlGID0+IFRfRUxTRUlGXSwgJ3N0cmljdCcgPT4gZmFsc2UsICdzaGFyZWQnID0+IGZhbHNlLCAnd2l0aCcgPT4gW1RfSUYgPT4gVF9JRiwgVF9FTFNFID0+IFRfRUxTRV1dLCBUX0ZPUiA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVQsIFRfQ09MT04gPT4gVF9DT0xPTl0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULCBUX0VOREZPUiA9PiBUX0VOREZPUl0sICdzdHJpY3QnID0+IGZhbHNlLCAnc2hhcmVkJyA9PiBmYWxzZSwgJ3dpdGgnID0+IFtdXSwgVF9GT1JFQUNIID0+IFsnc3RhcnQnID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVCwgVF9DT0xPTiA9PiBUX0NPTE9OXSwgJ2VuZCcgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVQsIFRfRU5ERk9SRUFDSCA9PiBUX0VOREZPUkVBQ0hdLCAnc3RyaWN0JyA9PiBmYWxzZSwgJ3NoYXJlZCcgPT4gZmFsc2UsICd3aXRoJyA9PiBbXV0sIFRfSU5URVJGQUNFID0+IFsnc3RhcnQnID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVF0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VUXSwgJ3N0cmljdCcgPT4gdHJ1ZSwgJ3NoYXJlZCcgPT4gZmFsc2UsICd3aXRoJyA9PiBbXV0sIFRfRlVOQ1RJT04gPT4gWydzdGFydCcgPT4gW1RfT1BFTl9DVVJMWV9CUkFDS0VUID0+IFRfT1BFTl9DVVJMWV9CUkFDS0VUXSwgJ2VuZCcgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVRdLCAnc3RyaWN0JyA9PiB0cnVlLCAnc2hhcmVkJyA9PiBmYWxzZSwgJ3dpdGgnID0+IFtdXSwgVF9DTEFTUyA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVRdLCAnZW5kJyA9PiBbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVF0sICdzdHJpY3QnID0+IHRydWUsICdzaGFyZWQnID0+IGZhbHNlLCAnd2l0aCcgPT4gW11dLCBUX1RSQUlUID0+IFsnc3RhcnQnID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVF0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VUXSwgJ3N0cmljdCcgPT4gdHJ1ZSwgJ3NoYXJlZCcgPT4gZmFsc2UsICd3aXRoJyA9PiBbXV0sIFRfRU5VTSA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVRdLCAnZW5kJyA9PiBbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVF0sICdzdHJpY3QnID0+IHRydWUsICdzaGFyZWQnID0+IGZhbHNlLCAnd2l0aCcgPT4gW11dLCBUX1VTRSA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVRdLCAnZW5kJyA9PiBbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVF0sICdzdHJpY3QnID0+IGZhbHNlLCAnc2hhcmVkJyA9PiBmYWxzZSwgJ3dpdGgnID0+IFtdXSwgVF9ERUNMQVJFID0+IFsnc3RhcnQnID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVCwgVF9DT0xPTiA9PiBUX0NPTE9OXSwgJ2VuZCcgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVQsIFRfRU5EREVDTEFSRSA9PiBUX0VORERFQ0xBUkVdLCAnc3RyaWN0JyA9PiBmYWxzZSwgJ3NoYXJlZCcgPT4gZmFsc2UsICd3aXRoJyA9PiBbXV0sIFRfTkFNRVNQQUNFID0+IFsnc3RhcnQnID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVF0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VUXSwgJ3N0cmljdCcgPT4gZmFsc2UsICdzaGFyZWQnID0+IGZhbHNlLCAnd2l0aCcgPT4gW11dLCBUX1dISUxFID0+IFsnc3RhcnQnID0+IFtUX09QRU5fQ1VSTFlfQlJBQ0tFVCA9PiBUX09QRU5fQ1VSTFlfQlJBQ0tFVCwgVF9DT0xPTiA9PiBUX0NPTE9OXSwgJ2VuZCcgPT4gW1RfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiBUX0NMT1NFX0NVUkxZX0JSQUNLRVQsIFRfRU5EV0hJTEUgPT4gVF9FTkRXSElMRV0sICdzdHJpY3QnID0+IGZhbHNlLCAnc2hhcmVkJyA9PiBmYWxzZSwgJ3dpdGgnID0+IFtdXSwgVF9ETyA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVRdLCAnZW5kJyA9PiBbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVF0sICdzdHJpY3QnID0+IHRydWUsICdzaGFyZWQnID0+IGZhbHNlLCAnd2l0aCcgPT4gW11dLCBUX1NXSVRDSCA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVQsIFRfQ09MT04gPT4gVF9DT0xPTl0sICdlbmQnID0+IFtUX0NMT1NFX0NVUkxZX0JSQUNLRVQgPT4gVF9DTE9TRV9DVVJMWV9CUkFDS0VULCBUX0VORFNXSVRDSCA9PiBUX0VORFNXSVRDSF0sICdzdHJpY3QnID0+IHRydWUsICdzaGFyZWQnID0+IGZhbHNlLCAnd2l0aCcgPT4gW11dLCBUX0NBU0UgPT4gWydzdGFydCcgPT4gW1RfQ09MT04gPT4gVF9DT0xPTiwgVF9TRU1JQ09MT04gPT4gVF9TRU1JQ09MT05dLCAnZW5kJyA9PiBbVF9CUkVBSyA9PiBUX0JSRUFLLCBUX1JFVFVSTiA9PiBUX1JFVFVSTiwgVF9DT05USU5VRSA9PiBUX0NPTlRJTlVFLCBUX1RIUk9XID0+IFRfVEhST1csIFRfRVhJVCA9PiBUX0VYSVRdLCAnc3RyaWN0JyA9PiB0cnVlLCAnc2hhcmVkJyA9PiB0cnVlLCAnd2l0aCcgPT4gW1RfREVGQVVMVCA9PiBUX0RFRkFVTFQsIFRfQ0FTRSA9PiBUX0NBU0UsIFRfU1dJVENIID0+IFRfU1dJVENIXV0sIFRfREVGQVVMVCA9PiBbJ3N0YXJ0JyA9PiBbVF9DT0xPTiA9PiBUX0NPTE9OLCBUX1NFTUlDT0xPTiA9PiBUX1NFTUlDT0xPTl0sICdlbmQnID0+IFtUX0JSRUFLID0+IFRfQlJFQUssIFRfUkVUVVJOID0+IFRfUkVUVVJOLCBUX0NPTlRJTlVFID0+IFRfQ09OVElOVUUsIFRfVEhST1cgPT4gVF9USFJPVywgVF9FWElUID0+IFRfRVhJVF0sICdzdHJpY3QnID0+IHRydWUsICdzaGFyZWQnID0+IHRydWUsICd3aXRoJyA9PiBbVF9DQVNFID0+IFRfQ0FTRSwgVF9TV0lUQ0ggPT4gVF9TV0lUQ0hdXSwgVF9NQVRDSCA9PiBbJ3N0YXJ0JyA9PiBbVF9PUEVOX0NVUkxZX0JSQUNLRVQgPT4gVF9PUEVOX0NVUkxZX0JSQUNLRVRdLCAnZW5kJyA9PiBbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVF0sICdzdHJpY3QnID0+IHRydWUsICdzaGFyZWQnID0+IGZhbHNlLCAnd2l0aCcgPT4gW11dLCBUX1NUQVJUX0hFUkVET0MgPT4gWydzdGFydCcgPT4gW1RfU1RBUlRfSEVSRURPQyA9PiBUX1NUQVJUX0hFUkVET0NdLCAnZW5kJyA9PiBbVF9FTkRfSEVSRURPQyA9PiBUX0VORF9IRVJFRE9DXSwgJ3N0cmljdCcgPT4gdHJ1ZSwgJ3NoYXJlZCcgPT4gZmFsc2UsICd3aXRoJyA9PiBbXV0sIFRfU1RBUlRfTk9XRE9DID0+IFsnc3RhcnQnID0+IFtUX1NUQVJUX05PV0RPQyA9PiBUX1NUQVJUX05PV0RPQ10sICdlbmQnID0+IFtUX0VORF9OT1dET0MgPT4gVF9FTkRfTk9XRE9DXSwgJ3N0cmljdCcgPT4gdHJ1ZSwgJ3NoYXJlZCcgPT4gZmFsc2UsICd3aXRoJyA9PiBbXV1dIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6Mjc7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI4MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlIjtOO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHJlYWRPbmx5IjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbWV0YWRhdGEiO2E6MDp7fX1zOjQ4OiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQOjokZW5kU2NvcGVUb2tlbnMiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkiOjExOntzOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ4OiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQOjokZW5kU2NvcGVUb2tlbnMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNDoiZW5kU2NvcGVUb2tlbnMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6MzY6IkEgbGlzdCBvZiB0b2tlbnMgdGhhdCBlbmQgdGhlIHNjb3BlLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoxNTQ6IlRoaXMgYXJyYXkgaXMganVzdCBhIHVuaXF1ZSBjb2xsZWN0aW9uIG9mIHRoZSBlbmQgdG9rZW5zCmZyb20gdGhlIHNjb3BlT3BlbmVycyBhcnJheS4gVGhlIGRhdGEgaXMgZHVwbGljYXRlZCBoZXJlIHRvCnNhdmUgdGltZSBkdXJpbmcgcGFyc2luZyBvZiB0aGUgZmlsZS4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0NDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZXMiO2E6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRlZmF1bHQiO3M6Mjg2OiJbVF9DTE9TRV9DVVJMWV9CUkFDS0VUID0+IFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCwgVF9FTkRJRiA9PiBUX0VORElGLCBUX0VOREZPUiA9PiBUX0VOREZPUiwgVF9FTkRGT1JFQUNIID0+IFRfRU5ERk9SRUFDSCwgVF9FTkRXSElMRSA9PiBUX0VORFdISUxFLCBUX0VORFNXSVRDSCA9PiBUX0VORFNXSVRDSCwgVF9FTkRERUNMQVJFID0+IFRfRU5EREVDTEFSRSwgVF9CUkVBSyA9PiBUX0JSRUFLLCBUX0VORF9IRVJFRE9DID0+IFRfRU5EX0hFUkVET0MsIFRfRU5EX05PV0RPQyA9PiBUX0VORF9OT1dET0NdIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MjkzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMDQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQByZWFkT25seSI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AG1ldGFkYXRhIjthOjA6e319czo0NjoiXFBIUF9Db2RlU25pZmZlclxUb2tlbml6ZXJzXFBIUDo6JGtub3duTGVuZ3RocyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6MTE6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDY6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyc1xQSFA6OiRrbm93bkxlbmd0aHMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxMjoia25vd25MZW5ndGhzIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjI0OiJLbm93biBsZW5ndGhzIG9mIHRva2Vucy4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czozOiJ2YXIiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB0eXBlcyI7YTowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZGVmYXVsdCI7czoyNjc3OiJbVF9BQlNUUkFDVCA9PiA4LCBUX0FORF9FUVVBTCA9PiAyLCBUX0FSUkFZID0+IDUsIFRfQVMgPT4gMiwgVF9CT09MRUFOX0FORCA9PiAyLCBUX0JPT0xFQU5fT1IgPT4gMiwgVF9CUkVBSyA9PiA1LCBUX0NBTExBQkxFID0+IDgsIFRfQ0FTRSA9PiA0LCBUX0NBVENIID0+IDUsIFRfQ0xBU1MgPT4gNSwgVF9DTEFTU19DID0+IDksIFRfQ0xPTkUgPT4gNSwgVF9DT05DQVRfRVFVQUwgPT4gMiwgVF9DT05TVCA9PiA1LCBUX0NPTlRJTlVFID0+IDgsIFRfQ1VSTFlfT1BFTiA9PiAyLCBUX0RFQyA9PiAyLCBUX0RFQ0xBUkUgPT4gNywgVF9ERUZBVUxUID0+IDcsIFRfRElSID0+IDcsIFRfRElWX0VRVUFMID0+IDIsIFRfRE8gPT4gMiwgVF9ET0xMQVJfT1BFTl9DVVJMWV9CUkFDRVMgPT4gMiwgVF9ET1VCTEVfQVJST1cgPT4gMiwgVF9ET1VCTEVfQ09MT04gPT4gMiwgVF9FQ0hPID0+IDQsIFRfRUxMSVBTSVMgPT4gMywgVF9FTFNFID0+IDQsIFRfRUxTRUlGID0+IDYsIFRfRU1QVFkgPT4gNSwgVF9FTkRERUNMQVJFID0+IDEwLCBUX0VOREZPUiA9PiA2LCBUX0VOREZPUkVBQ0ggPT4gMTAsIFRfRU5ESUYgPT4gNSwgVF9FTkRTV0lUQ0ggPT4gOSwgVF9FTkRXSElMRSA9PiA4LCBUX0VOVU0gPT4gNCwgVF9FTlVNX0NBU0UgPT4gNCwgVF9FVkFMID0+IDQsIFRfRVhURU5EUyA9PiA3LCBUX0ZJTEUgPT4gOCwgVF9GSU5BTCA9PiA1LCBUX0ZJTkFMTFkgPT4gNywgVF9GTiA9PiAyLCBUX0ZPUiA9PiAzLCBUX0ZPUkVBQ0ggPT4gNywgVF9GVU5DVElPTiA9PiA4LCBUX0ZVTkNfQyA9PiAxMiwgVF9HTE9CQUwgPT4gNiwgVF9HT1RPID0+IDQsIFRfSEFMVF9DT01QSUxFUiA9PiAxNSwgVF9JRiA9PiAyLCBUX0lNUExFTUVOVFMgPT4gMTAsIFRfSU5DID0+IDIsIFRfSU5DTFVERSA9PiA3LCBUX0lOQ0xVREVfT05DRSA9PiAxMiwgVF9JTlNUQU5DRU9GID0+IDEwLCBUX0lOU1RFQURPRiA9PiA5LCBUX0lOVEVSRkFDRSA9PiA5LCBUX0lTU0VUID0+IDUsIFRfSVNfRVFVQUwgPT4gMiwgVF9JU19HUkVBVEVSX09SX0VRVUFMID0+IDIsIFRfSVNfSURFTlRJQ0FMID0+IDMsIFRfSVNfTk9UX0VRVUFMID0+IDIsIFRfSVNfTk9UX0lERU5USUNBTCA9PiAzLCBUX0lTX1NNQUxMRVJfT1JfRVFVQUwgPT4gMiwgVF9MSU5FID0+IDgsIFRfTElTVCA9PiA0LCBUX0xPR0lDQUxfQU5EID0+IDMsIFRfTE9HSUNBTF9PUiA9PiAyLCBUX0xPR0lDQUxfWE9SID0+IDMsIFRfTUFUQ0ggPT4gNSwgVF9NQVRDSF9BUlJPVyA9PiAyLCBUX01BVENIX0RFRkFVTFQgPT4gNywgVF9NRVRIT0RfQyA9PiAxMCwgVF9NSU5VU19FUVVBTCA9PiAyLCBUX1BPV19FUVVBTCA9PiAzLCBUX01PRF9FUVVBTCA9PiAyLCBUX01VTF9FUVVBTCA9PiAyLCBUX05BTUVTUEFDRSA9PiA5LCBUX05TX0MgPT4gMTMsIFRfTlNfU0VQQVJBVE9SID0+IDEsIFRfTkVXID0+IDMsIFRfTlVMTFNBRkVfT0JKRUNUX09QRVJBVE9SID0+IDMsIFRfT0JKRUNUX09QRVJBVE9SID0+IDIsIFRfT1BFTl9UQUdfV0lUSF9FQ0hPID0+IDMsIFRfT1JfRVFVQUwgPT4gMiwgVF9QTFVTX0VRVUFMID0+IDIsIFRfUFJJTlQgPT4gNSwgVF9QUklWQVRFID0+IDcsIFRfUFVCTElDID0+IDYsIFRfUFJPVEVDVEVEID0+IDksIFRfUkVBRE9OTFkgPT4gOCwgVF9SRVFVSVJFID0+IDcsIFRfUkVRVUlSRV9PTkNFID0+IDEyLCBUX1JFVFVSTiA9PiA2LCBUX1NUQVRJQyA9PiA2LCBUX1NXSVRDSCA9PiA2LCBUX1RIUk9XID0+IDUsIFRfVFJBSVQgPT4gNSwgVF9UUkFJVF9DID0+IDksIFRfVFJZID0+IDMsIFRfVU5TRVQgPT4gNSwgVF9VU0UgPT4gMywgVF9WQVIgPT4gMywgVF9XSElMRSA9PiA1LCBUX1hPUl9FUVVBTCA9PiAyLCBUX1lJRUxEID0+IDUsIFRfT1BFTl9DVVJMWV9CUkFDS0VUID0+IDEsIFRfQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9PiAxLCBUX09QRU5fU1FVQVJFX0JSQUNLRVQgPT4gMSwgVF9DTE9TRV9TUVVBUkVfQlJBQ0tFVCA9PiAxLCBUX09QRU5fUEFSRU5USEVTSVMgPT4gMSwgVF9DTE9TRV9QQVJFTlRIRVNJUyA9PiAxLCBUX0NPTE9OID0+IDEsIFRfU1RSSU5HX0NPTkNBVCA9PiAxLCBUX0lOTElORV9USEVOID0+IDEsIFRfSU5MSU5FX0VMU0UgPT4gMSwgVF9OVUxMQUJMRSA9PiAxLCBUX05VTEwgPT4gNCwgVF9GQUxTRSA9PiA1LCBUX1RSVUUgPT4gNCwgVF9TRU1JQ09MT04gPT4gMSwgVF9FUVVBTCA9PiAxLCBUX01VTFRJUExZID0+IDEsIFRfRElWSURFID0+IDEsIFRfUExVUyA9PiAxLCBUX01JTlVTID0+IDEsIFRfTU9EVUxVUyA9PiAxLCBUX1BPVyA9PiAyLCBUX1NQQUNFU0hJUCA9PiAzLCBUX0NPQUxFU0NFID0+IDIsIFRfQ09BTEVTQ0VfRVFVQUwgPT4gMywgVF9CSVRXSVNFX0FORCA9PiAxLCBUX0JJVFdJU0VfT1IgPT4gMSwgVF9CSVRXSVNFX1hPUiA9PiAxLCBUX1NMID0+IDIsIFRfU1IgPT4gMiwgVF9TTF9FUVVBTCA9PiAzLCBUX1NSX0VRVUFMID0+IDMsIFRfR1JFQVRFUl9USEFOID0+IDEsIFRfTEVTU19USEFOID0+IDEsIFRfQk9PTEVBTl9OT1QgPT4gMSwgVF9TRUxGID0+IDQsIFRfUEFSRU5UID0+IDYsIFRfQ09NTUEgPT4gMSwgVF9USElTID0+IDQsIFRfQ0xPU1VSRSA9PiA4LCBUX0JBQ0tUSUNLID0+IDEsIFRfT1BFTl9TSE9SVF9BUlJBWSA9PiAxLCBUX0NMT1NFX1NIT1JUX0FSUkFZID0+IDEsIFRfVFlQRV9VTklPTiA9PiAxLCBUX1RZUEVfSU5URVJTRUNUSU9OID0+IDFdIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzExO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTo0NjY7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdHlwZSI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQByZWFkT25seSI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AG1ldGFkYXRhIjthOjA6e319czo0OToiXFBIUF9Db2RlU25pZmZlclxUb2tlbml6ZXJzXFBIUDo6JHRzdHJpbmdDb250ZXh0cyI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6MTE6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDk6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyc1xQSFA6OiR0c3RyaW5nQ29udGV4dHMiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNToidHN0cmluZ0NvbnRleHRzIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjY2OiJDb250ZXh0cyBpbiB3aGljaCBrZXl3b3JkcyBzaG91bGQgYWx3YXlzIGJlIHRva2VuaXplZCBhcyBUX1NUUklORy4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFZhcl8iOjQ6e3M6MTU6IgAqAHZhcmlhYmxlTmFtZSI7czowOiIiO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjM6InZhciI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjM2MToiW1RfT0JKRUNUX09QRVJBVE9SID0+IHRydWUsIFRfTlVMTFNBRkVfT0JKRUNUX09QRVJBVE9SID0+IHRydWUsIFRfRlVOQ1RJT04gPT4gdHJ1ZSwgVF9DTEFTUyA9PiB0cnVlLCBUX0lOVEVSRkFDRSA9PiB0cnVlLCBUX1RSQUlUID0+IHRydWUsIFRfRU5VTSA9PiB0cnVlLCBUX0VOVU1fQ0FTRSA9PiB0cnVlLCBUX0VYVEVORFMgPT4gdHJ1ZSwgVF9JTVBMRU1FTlRTID0+IHRydWUsIFRfQVRUUklCVVRFID0+IHRydWUsIFRfTkVXID0+IHRydWUsIFRfQ09OU1QgPT4gdHJ1ZSwgVF9OU19TRVBBUkFUT1IgPT4gdHJ1ZSwgVF9VU0UgPT4gdHJ1ZSwgVF9OQU1FU1BBQ0UgPT4gdHJ1ZSwgVF9QQUFNQVlJTV9ORUtVRE9UQVlJTSA9PiB0cnVlXSI7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAc3RhdGljIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6OToicHJvdGVjdGVkIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ3MztzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDkxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO047czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAcmVhZE9ubHkiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBtZXRhZGF0YSI7YTowOnt9fXM6NTE6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyc1xQSFA6OiRyZXNvbHZlVG9rZW5DYWNoZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eSI6MTE6e3M6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTE6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyc1xQSFA6OiRyZXNvbHZlVG9rZW5DYWNoZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjE3OiJyZXNvbHZlVG9rZW5DYWNoZSI7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo1NToiQSBjYWNoZSBvZiBkaWZmZXJlbnQgdG9rZW4gdHlwZXMsIHJlc29sdmVkIGludG8gYXJyYXlzLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0MzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcVmFyXyI6NDp7czoxNToiACoAdmFyaWFibGVOYW1lIjtzOjA6IiI7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6MzoidmFyIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0MjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcU2VlIjozOntzOjc6IgAqAG5hbWUiO3M6Mzoic2VlIjtzOjk6IgAqAHJlZmVycyI7Tzo1NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuIjoxOntzOjYxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmVmZXJlbmNlXEZxc2VuAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDY6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyc1xzdGFuZGFyZGlzZVRva2VuKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoic3RhbmRhcmRpc2VUb2tlbiI7fX1zOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tjt9fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGVzIjthOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBkZWZhdWx0IjtzOjI6IltdIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBzdGF0aWMiO2I6MTtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo3OiJwcml2YXRlIjt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ5OTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6NDk5O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFByb3BlcnR5AHR5cGUiO047czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcUHJvcGVydHkAcmVhZE9ubHkiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxQcm9wZXJ0eQBtZXRhZGF0YSI7YTowOnt9fX1zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0aG9kcyI7YTo3OntzOjQzOiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQOjp0b2tlbml6ZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6MTI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTI6IkNyZWF0ZXMgYW4gYXJyYXkgb2YgdG9rZW5zIHdoZW4gZ2l2ZW4gc29tZSBQSFAgY29kZS4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTIwOiJTdGFydHMgYnkgdXNpbmcgdG9rZW5fZ2V0X2FsbCgpIGJ1dCBkb2VzIGEgbG90IG9mIGV4dHJhIHByb2Nlc3NpbmcKdG8gaW5zZXJ0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZXh0IG9mIHRoZSB0b2tlbi4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToyOntpOjA7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6Njoic3RyaW5nIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjc6IgAqAG5hbWUiO3M6NToicGFyYW0iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjIzOiJUaGUgc3RyaW5nIHRvIHRva2VuaXplLiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo0MzoiXFBIUF9Db2RlU25pZmZlclxUb2tlbml6ZXJzXFBIUDo6dG9rZW5pemUoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6InRva2VuaXplIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjY6InN0cmluZyI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjUxMjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIzNDA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAaGFzUmV0dXJuQnlSZWZlcmVuY2UiO2I6MDtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbWV0YWRhdGEiO2E6MDp7fX1zOjUyOiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQOjpwcm9jZXNzQWRkaXRpb25hbCgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6MTI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTM6IlBlcmZvcm1zIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBhZnRlciBtYWluIHRva2VuaXppbmcuIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjQxMToiVGhpcyBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2hlY2tzIGZvciBDQVNFIHN0YXRlbWVudHMgdGhhdCBhcmUgdXNpbmcgY3VybHkKYnJhY2VzIGZvciBzY29wZSBvcGVuZXJzIGFuZCBjbG9zZXJzLiBJdCBhbHNvIHR1cm5zIHNvbWUgVF9GVU5DVElPTiB0b2tlbnMKaW50byBUX0NMT1NVUkUgd2hlbiB0aGV5IGFyZSBub3Qgc3RhbmRhcmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIEl0IGFsc28KZGV0ZWN0cyBzaG9ydCBhcnJheSBzeW50YXggYW5kIGNvbnZlcnRzIHRob3NlIHNxdWFyZSBicmFja2V0cyBpbnRvIG5ldyB0b2tlbnMuCkl0IGFsc28gY29ycmVjdHMgc29tZSB1c2FnZSBvZiB0aGUgc3RhdGljIGFuZCBjbGFzcyBrZXl3b3Jkcy4gSXQgYWxzbwphc3NpZ25zIHRva2VucyB0byBmdW5jdGlvbiByZXR1cm4gdHlwZXMuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUyOiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQOjpwcm9jZXNzQWRkaXRpb25hbCgpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6MTc6InByb2Nlc3NBZGRpdGlvbmFsIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo5OiJwcm90ZWN0ZWQiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjIzNTU7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMTU4O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGhhc1JldHVybkJ5UmVmZXJlbmNlIjtiOjA7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAG1ldGFkYXRhIjthOjA6e319czo1MToiXFBIUF9Db2RlU25pZmZlclxUb2tlbml6ZXJzXFBIUDo6c3RhbmRhcmRpc2VUb2tlbigpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6MTI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6OTE6IlRha2VzIGEgdG9rZW4gcHJvZHVjZWQgZnJvbSA8Y29kZT50b2tlbl9nZXRfYWxsKCk8L2NvZGU+IGFuZCBwcm9kdWNlcyBhCm1vcmUgdW5pZm9ybSB0b2tlbi4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtIjo2OntzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AdmFyaWFibGVOYW1lIjtzOjU6InRva2VuIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX19czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czoyMToiVGhlIHRva2VuIHRvIGNvbnZlcnQuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MTQ6IlRoZSBuZXcgdG9rZW4uIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3ODtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjUxOiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQOjpzdGFuZGFyZGlzZVRva2VuKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNjoic3RhbmRhcmRpc2VUb2tlbiI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToxOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo1OiJ0b2tlbiI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMxNjk7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMjM2O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGhhc1JldHVybkJ5UmVmZXJlbmNlIjtiOjA7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAG1ldGFkYXRhIjthOjA6e319czo1MzoiXFBIUF9Db2RlU25pZmZlclxUb2tlbml6ZXJzXFBIUDo6cmVzb2x2ZVNpbXBsZVRva2VuKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjoxMjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo5NzoiQ29udmVydHMgc2ltcGxlIHRva2VucyBpbnRvIGEgZm9ybWF0IHRoYXQgY29uZm9ybXMgdG8gY29tcGxleCB0b2tlbnMKcHJvZHVjZWQgYnkgdG9rZW5fZ2V0X2FsbCgpLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo4NzoiU2ltcGxlIHRva2VucyBhcmUgdG9rZW5zIHRoYXQgYXJlIG5vdCBpbiBhcnJheSBmb3JtIHdoZW4gcHJvZHVjZWQgZnJvbQp0b2tlbl9nZXRfYWxsKCkuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6Mjp7aTowO086NDQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtIjo2OntzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AdmFyaWFibGVOYW1lIjtzOjU6InRva2VuIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31zOjc6IgAqAG5hbWUiO3M6NToicGFyYW0iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjI4OiJUaGUgc2ltcGxlIHRva2VuIHRvIGNvbnZlcnQuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzA6IlRoZSBuZXcgdG9rZW4gaW4gYXJyYXkgZm9ybWF0LiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6Nzg7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo1MzoiXFBIUF9Db2RlU25pZmZlclxUb2tlbml6ZXJzXFBIUDo6cmVzb2x2ZVNpbXBsZVRva2VuKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxODoicmVzb2x2ZVNpbXBsZVRva2VuIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjoxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjE6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjU6InRva2VuIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI1MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMzNDQ7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAaGFzUmV0dXJuQnlSZWZlcmVuY2UiO2I6MDtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbWV0YWRhdGEiO2E6MDp7fX1zOjQ1OiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQOjpmaW5kQ2xvc2VyKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjoxMjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czoxMzc6IkZpbmRzIGEgImNsb3NlciIgdG9rZW4gKGNsb3NpbmcgcGFyZW50aGVzaXMgb3Igc3F1YXJlIGJyYWNrZXQgZm9yIGV4YW1wbGUpCkhhbmRsZSBwYXJlbnRoZXNpcyBiYWxhbmNpbmcgd2hpbGUgc2VhcmNoaW5nIGZvciBjbG9zaW5nIHRva2VuIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjU6e2k6MDtPOjQ0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbSI6Njp7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czo2OiJ0b2tlbnMiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1zOjc6IgAqAG5hbWUiO3M6NToicGFyYW0iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjg4OiJUaGUgbGlzdCBvZiB0b2tlbnMgdG8gaXRlcmF0ZSBzZWFyY2hpbmcgdGhlIGNsb3NpbmcgdG9rZW4gKGFzIHJldHVybmVkIGJ5IHRva2VuX2dldF9hbGwpIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToxO086NDQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtIjo2OntzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AdmFyaWFibGVOYW1lIjtzOjU6InN0YXJ0IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6NToicGFyYW0iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjIxOiJUaGUgc3RhcnRpbmcgcG9zaXRpb24iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6MTI6Im9wZW5lclRva2VucyI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzVmFyaWFkaWMiO2I6MDtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNSZWZlcmVuY2UiO2I6MDtzOjc6IgAqAHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO31zOjc6IgAqAG5hbWUiO3M6NToicGFyYW0iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjIxOiJUaGUgb3BlbmluZyBjaGFyYWN0ZXIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6MTA6ImNsb3NlckNoYXIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MjE6IlRoZSBjbG9zaW5nIGNoYXJhY3RlciI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31pOjE7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE51bGxfIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjYwOiJUaGUgcG9zaXRpb24gb2YgdGhlIGNsb3NpbmcgdG9rZW4sIGlmIGZvdW5kLiBOVUxMIG90aGVyd2lzZS4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NDU6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyc1xQSFA6OmZpbmRDbG9zZXIoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjEwOiJmaW5kQ2xvc2VyIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo3OiJwcml2YXRlIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YTo0OntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo2OiJ0b2tlbnMiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBcnJheV8iOjM6e3M6MTI6IgAqAHZhbHVlVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6MTA6IgAqAGtleVR5cGUiO047czoxNzoiACoAZGVmYXVsdEtleVR5cGUiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb21wb3VuZCI6Mjp7czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0eXBlcyI7YToyOntpOjA7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFN0cmluZ18iOjA6e31pOjE7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e319czo1MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xBZ2dyZWdhdGVkVHlwZQB0b2tlbiI7czoxOiJ8Ijt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MTtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjU6InN0YXJ0IjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToyO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MTI6Im9wZW5lclRva2VucyI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MztPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjEwOiJjbG9zZXJDaGFyIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABsb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzM1ODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMzODE7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAaGFzUmV0dXJuQnlSZWZlcmVuY2UiO2I6MDtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbWV0YWRhdGEiO2E6MDp7fX1zOjUyOiJcUEhQX0NvZGVTbmlmZmVyXFRva2VuaXplcnNcUEhQOjpwYXJzZVBocEF0dHJpYnV0ZSgpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6MTI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6ODE6IlBIUCA4IGF0dHJpYnV0ZXMgcGFyc2VyIGZvciBQSFAgPCA4CkhhbmRsZXMgc2luZ2xlLWxpbmUgYW5kIG11bHRpbGluZSBhdHRyaWJ1dGVzLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6NjoidG9rZW5zIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo1OToiVGhlIG9yaWdpbmFsIGFycmF5IG9mIHRva2VucyAoYXMgcmV0dXJuZWQgYnkgdG9rZW5fZ2V0X2FsbCkiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6ODoic3RhY2tQdHIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzU6IlRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRva2VuIGFycmF5IjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQXJyYXlfIjozOntzOjEyOiIAKgB2YWx1ZVR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjEwOiIAKgBrZXlUeXBlIjtOO3M6MTc6IgAqAGRlZmF1bHRLZXlUeXBlIjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29tcG91bmQiOjI6e3M6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdHlwZXMiO2E6Mjp7aTowO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xTdHJpbmdfIjowOnt9aToxO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fX1pOjE7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE51bGxfIjowOnt9fXM6NTI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQWdncmVnYXRlZFR5cGUAdG9rZW4iO3M6MToifCI7fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjM2OiJUaGUgYXJyYXkgb2YgcGFyc2VkIGF0dHJpYnV0ZSB0b2tlbnMiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NTI6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyc1xQSFA6OnBhcnNlUGhwQXR0cmlidXRlKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoxNzoicGFyc2VQaHBBdHRyaWJ1dGUiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjc6InByaXZhdGUiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjI6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjY6InRva2VucyI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjoxO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToxO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6ODoic3RhY2tQdHIiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO319czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozMzkzO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzQ0NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABoYXNSZXR1cm5CeVJlZmVyZW5jZSI7YjowO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABtZXRhZGF0YSI7YTowOnt9fXM6NjE6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyc1xQSFA6OmNyZWF0ZUF0dHJpYnV0ZXNOZXN0aW5nTWFwKCkiO086MzU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kIjoxMjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGRvY0Jsb2NrIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2siOjc6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAc3VtbWFyeSI7czo2NzoiQ3JlYXRlcyBhIG1hcCBmb3IgdGhlIGF0dHJpYnV0ZXMgdG9rZW5zIHRoYXQgc3Vycm91bmQgb3RoZXIgdG9rZW5zLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YToxOntpOjA7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUmV0dXJuXyI6Mzp7czo3OiIAKgB0eXBlIjtPOjM2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcVm9pZF8iOjA6e31zOjc6IgAqAG5hbWUiO3M6NjoicmV0dXJuIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtyOjc4O3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAbG9jYXRpb24iO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlU3RhcnQiO2I6MDtzOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVFbmQiO2I6MDt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6NjE6IlxQSFBfQ29kZVNuaWZmZXJcVG9rZW5pemVyc1xQSFA6OmNyZWF0ZUF0dHJpYnV0ZXNOZXN0aW5nTWFwKCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyNjoiY3JlYXRlQXR0cmlidXRlc05lc3RpbmdNYXAiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYWJzdHJhY3QiO2I6MDtzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZmluYWwiO2I6MDtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAc3RhdGljIjtiOjA7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHZpc2liaWxpdHkiO086Mzk6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eSI6MTp7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcVmlzaWJpbGl0eQB2aXNpYmlsaXR5IjtzOjc6InByaXZhdGUiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjM0NTI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGVuZExvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aTozNDgxO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGhhc1JldHVybkJ5UmVmZXJlbmNlIjtiOjA7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAG1ldGFkYXRhIjthOjA6e319fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwB1c2VkVHJhaXRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzQ4NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0YWRhdGEiO2E6MDp7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9czo0MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBlbnVtcyI7YTowOnt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBtZXRhZGF0YSI7YTowOnt9fQ==";