IiIiU3VpdGUgQXBwbGVTY3JpcHQgU3VpdGU6IEdvb2RpZXMgZm9yIEd1c3RhdgpMZXZlbCAxLCB2ZXJzaW9uIDEKCkdlbmVyYXRlZCBmcm9tIGZsYXA6U3lzdGVtIEZvbGRlcjpFeHRlbnNpb25zOlNjcmlwdGluZyBBZGRpdGlvbnM6RGlhbGVjdHM6RW5nbGlzaCBEaWFsZWN0CkFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMCwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKIiIiCgppbXBvcnQgYWV0b29scwppbXBvcnQgTWFjT1MKCl9jb2RlID0gJ2FzY3InCgpjbGFzcyBBcHBsZVNjcmlwdF9TdWl0ZToKCglkZWYgYWN0aXZhdGUoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJhY3RpdmF0ZTogQnJpbmcgdGFyZ2V0ZWQgYXBwbGljYXRpb24gcHJvZ3JhbSB0byB0aGUgZnJvbnQuCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCSIiIgoJCV9jb2RlID0gJ21pc2MnCgkJX3N1YmNvZGUgPSAnYWN0dicKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIGxvZyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJsb2c6IENhdXNlIGEgY29tbWVudCB0byBiZSBsb2dnZWQuCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFueXRoaW5nCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCSIiIgoJCV9jb2RlID0gJ2FzY3InCgkJX3N1YmNvZGUgPSAnY21udCcKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIHN0b3BfbG9nKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIic3RvcCBsb2c6IAoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQkiIiIKCQlfY29kZSA9ICdUb3lTJwoJCV9zdWJjb2RlID0gJ2xvZzAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBzdGFydF9sb2coc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJzdGFydCBsb2c6IAoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQkiIiIKCQlfY29kZSA9ICdUb3lTJwoJCV9zdWJjb2RlID0gJ2xvZzEnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBjb3B5KHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiY29weTogQ29weSBhbiBvYmplY3QgdG8gdGhlIGNsaXBib2FyZAoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQkiIiIKCQlfY29kZSA9ICdtaXNjJwoJCV9zdWJjb2RlID0gJ2NvcHknCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBkb19zY3JpcHQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiZG8gc2NyaXB0OiBFeGVjdXRlIGEgc2NyaXB0CgkJUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBzY3JpcHQgdG8gZXhlY3V0ZQoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBhbnl0aGluZwoJCSIiIgoJCV9jb2RlID0gJ21pc2MnCgkJX3N1YmNvZGUgPSAnZG9zYycKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIGlkbGUoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJpZGxlOiBTZW50IHRvIGEgc2NyaXB0IGFwcGxpY2F0aW9uIHdoZW4gaXQgaXMgaWRsZQoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBuZXh0IGlkbGUgZXZlbnQKCQkiIiIKCQlfY29kZSA9ICdtaXNjJwoJCV9zdWJjb2RlID0gJ2lkbGUnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBsYXVuY2goc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJsYXVuY2g6IFN0YXJ0IGFuIGFwcGxpY2F0aW9uIGZvciBzY3JpcHRpbmcKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ25vb3AnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiB0ZWxsKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIidGVsbDogTWFnaWMgdGVsbCBldmVudCBmb3IgZXZlbnQgbG9nZ2luZwoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBhbnl0aGluZwoJCSIiIgoJCV9jb2RlID0gJ2FzY3InCgkJX3N1YmNvZGUgPSAndGVsbCcKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIGVuZF90ZWxsKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiZW5kIHRlbGw6IFN0YXJ0IGFuIGFwcGxpY2F0aW9uIGZvciBzY3JpcHRpbmcKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ3RlbmQnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJwoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCV9hcmdtYXBfZXJyb3IgPSB7CgkJJ251bWJlcicgOiAnZXJybicsCgkJJ3BhcnRpYWxfcmVzdWx0JyA6ICdwdGxyJywKCQknX2Zyb20nIDogJ2Vyb2InLAoJCSd0bycgOiAnZXJydCcsCgl9CgoJZGVmIGVycm9yKHNlbGYsIF9vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiZXJyb3I6IFJhaXNlIGFuIGVycm9yCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFueXRoaW5nCgkJS2V5d29yZCBhcmd1bWVudCBudW1iZXI6IGFuIGVycm9yIG51bWJlcgoJCUtleXdvcmQgYXJndW1lbnQgcGFydGlhbF9yZXN1bHQ6IGFueSBwYXJ0aWFsIHJlc3VsdCBvY2N1cnJpbmcgYmVmb3JlIHRoZSBlcnJvcgoJCUtleXdvcmQgYXJndW1lbnQgX2Zyb206IHRoZSBvYmplY3QgdGhhdCBjYXVzZWQgdGhlIGVycm9yCgkJS2V5d29yZCBhcmd1bWVudCB0bzogYW5vdGhlciBwYXJhbWV0ZXIgdG8gdGhlIGVycm9yCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IGFueXRoaW5nCgkJIiIiCgkJX2NvZGUgPSAnYXNjcicKCQlfc3ViY29kZSA9ICdlcnIgJwoKCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9lcnJvcikKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJX2FyZ21hcF9DYWxsX2E1X3N1YnJvdXRpbmUgPSB7CgkJJ2F0JyA6ICdhdCAgJywKCQknX2Zyb20nIDogJ2Zyb20nLAoJCSdfZm9yJyA6ICdmb3IgJywKCQkndG8nIDogJ3RvICAnLAoJCSd0aHJ1JyA6ICd0aHJ1JywKCQkndGhyb3VnaCcgOiAndGhnaCcsCgkJJ2J5JyA6ICdieSAgJywKCQknb24nIDogJ29uICAnLAoJCSdpbnRvJyA6ICdpbnRvJywKCQknb250bycgOiAnb250bycsCgkJJ2JldHdlZW4nIDogJ2J0d24nLAoJCSdhZ2FpbnN0JyA6ICdhZ3N0JywKCQknb3V0X29mJyA6ICdvdXRvJywKCQknaW5zdGVhZF9vZicgOiAnaXN0bycsCgkJJ2FzaWRlX2Zyb20nIDogJ2FzZGYnLAoJCSdhcm91bmQnIDogJ2FybmQnLAoJCSdiZXNpZGUnIDogJ2JzaWQnLAoJCSdiZW5lYXRoJyA6ICdibnRoJywKCQkndW5kZXInIDogJ3VuZHInLAoJCSdvdmVyJyA6ICdvdmVyJywKCQknYWJvdmUnIDogJ2FidmUnLAoJCSdiZWxvdycgOiAnYmVsdycsCgkJJ2FwYXJ0X2Zyb20nIDogJ2FwcnQnLAoJCSdnaXZlbicgOiAnZ2l2bicsCgkJJ3dpdGgnIDogJ3dpdGgnLAoJCSd3aXRob3V0JyA6ICd3b3V0JywKCQknYWJvdXQnIDogJ2Fib3UnLAoJCSdzaW5jZScgOiAnc25jZScsCgkJJ3VudGlsJyA6ICd0aWxsJywKCQkncmV0dXJuaW5nJyA6ICdLcnRuJywKCX0KCglkZWYgQ2FsbF9hNV9zdWJyb3V0aW5lKHNlbGYsIF9vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiQ2FsbIJzdWJyb3V0aW5lOiBBIHN1YnJvdXRpbmUgY2FsbAoJCVJlcXVpcmVkIGFyZ3VtZW50OiBhbnl0aGluZwoJCUtleXdvcmQgYXJndW1lbnQgYXQ6IGEgcHJlcG9zaXRpb24KCQlLZXl3b3JkIGFyZ3VtZW50IF9mcm9tOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCBfZm9yOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCB0bzogYSBwcmVwb3NpdGlvbgoJCUtleXdvcmQgYXJndW1lbnQgdGhydTogYSBwcmVwb3NpdGlvbgoJCUtleXdvcmQgYXJndW1lbnQgdGhyb3VnaDogYSBwcmVwb3NpdGlvbgoJCUtleXdvcmQgYXJndW1lbnQgYnk6IGEgcHJlcG9zaXRpb24KCQlLZXl3b3JkIGFyZ3VtZW50IG9uOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCBpbnRvOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCBvbnRvOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCBiZXR3ZWVuOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCBhZ2FpbnN0OiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCBvdXRfb2Y6IGEgcHJlcG9zaXRpb24KCQlLZXl3b3JkIGFyZ3VtZW50IGluc3RlYWRfb2Y6IGEgcHJlcG9zaXRpb24KCQlLZXl3b3JkIGFyZ3VtZW50IGFzaWRlX2Zyb206IGEgcHJlcG9zaXRpb24KCQlLZXl3b3JkIGFyZ3VtZW50IGFyb3VuZDogYSBwcmVwb3NpdGlvbgoJCUtleXdvcmQgYXJndW1lbnQgYmVzaWRlOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCBiZW5lYXRoOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCB1bmRlcjogYSBwcmVwb3NpdGlvbgoJCUtleXdvcmQgYXJndW1lbnQgb3ZlcjogYSBwcmVwb3NpdGlvbgoJCUtleXdvcmQgYXJndW1lbnQgYWJvdmU6IGEgcHJlcG9zaXRpb24KCQlLZXl3b3JkIGFyZ3VtZW50IGJlbG93OiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCBhcGFydF9mcm9tOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCBnaXZlbjogYSBwcmVwb3NpdGlvbgoJCUtleXdvcmQgYXJndW1lbnQgd2l0aDogc3BlY2lhbCBwcmVwb3NpdGlvbiBmb3Igc2V0dGluZyBldmVudCBwcm9wZXJ0aWVzCgkJS2V5d29yZCBhcmd1bWVudCB3aXRob3V0OiBzcGVjaWFsIHByZXBvc2l0aW9uIGZvciBjbGVhcmluZyBldmVudCBwcm9wZXJ0aWVzCgkJS2V5d29yZCBhcmd1bWVudCBhYm91dDogYSBwcmVwb3NpdGlvbgoJCUtleXdvcmQgYXJndW1lbnQgc2luY2U6IGEgcHJlcG9zaXRpb24KCQlLZXl3b3JkIGFyZ3VtZW50IHVudGlsOiBhIHByZXBvc2l0aW9uCgkJS2V5d29yZCBhcmd1bWVudCByZXR1cm5pbmc6IHNwZWNpZmllcyBhIHBhdHRlcm4gdG8gbWF0Y2ggcmVzdWx0cyB0bwoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBhbnl0aGluZwoJCSIiIgoJCV9jb2RlID0gJ2FzY3InCgkJX3N1YmNvZGUgPSAncHNicicKCgkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfQ2FsbF9hNV9zdWJyb3V0aW5lKQoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgXzNkXyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiI9OiBFcXVhbGl0eQoJCVJlcXVpcmVkIGFyZ3VtZW50OiBhbiBBRSBvYmplY3QgcmVmZXJlbmNlCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IGFueXRoaW5nCgkJIiIiCgkJX2NvZGUgPSAnYXNjcicKCQlfc3ViY29kZSA9ICc9ICAgJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgX2FkXyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiKtOiBJbmVxdWFsaXR5CgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ1wyNTUgICAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBfMmJfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIis6IEFkZGl0aW9uCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJysgICAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBfMmRfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIi06IFN1YnRyYWN0aW9uCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJy0gICAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBfMmFfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIio6IE11bHRpcGxpY2F0aW9uCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJyogICAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBfZDZfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIvc6IERpdmlzaW9uCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJy8gICAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBkaXYoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiZGl2OiBRdW90aWVudAoJCVJlcXVpcmVkIGFyZ3VtZW50OiBhbiBBRSBvYmplY3QgcmVmZXJlbmNlCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IGFueXRoaW5nCgkJIiIiCgkJX2NvZGUgPSAnYXNjcicKCQlfc3ViY29kZSA9ICdkaXYgJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgbW9kKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIm1vZDogUmVtYWluZGVyCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ21vZCAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBfNWVfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIl46IEV4cG9uZW50aWF0aW9uCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ14gICAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBfM2VfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIj46IEdyZWF0ZXIgdGhhbgoJCVJlcXVpcmVkIGFyZ3VtZW50OiBhbiBBRSBvYmplY3QgcmVmZXJlbmNlCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IGFueXRoaW5nCgkJIiIiCgkJX2NvZGUgPSAnYXNjcicKCQlfc3ViY29kZSA9ICc+ICAgJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgX2IzXyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiKzOiBHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KCQlSZXF1aXJlZCBhcmd1bWVudDogYW4gQUUgb2JqZWN0IHJlZmVyZW5jZQoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBhbnl0aGluZwoJCSIiIgoJCV9jb2RlID0gJ2FzY3InCgkJX3N1YmNvZGUgPSAnPj0gICcKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIF8zY18oc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiPDogTGVzcyB0aGFuCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJzwgICAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBfYjJfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIrI6IExlc3MgdGhhbiBvciBlcXVhbCB0bwoJCVJlcXVpcmVkIGFyZ3VtZW50OiBhbiBBRSBvYmplY3QgcmVmZXJlbmNlCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IGFueXRoaW5nCgkJIiIiCgkJX2NvZGUgPSAnYXNjcicKCQlfc3ViY29kZSA9ICc8PSAgJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgXzI2XyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiImOiBDb25jYXRlbmF0aW9uCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ2NjYXQnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBzdGFydHNfd2l0aChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJzdGFydHMgd2l0aDogU3RhcnRzIHdpdGgKCQlSZXF1aXJlZCBhcmd1bWVudDogYW4gQUUgb2JqZWN0IHJlZmVyZW5jZQoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBhbnl0aGluZwoJCSIiIgoJCV9jb2RlID0gJ2FzY3InCgkJX3N1YmNvZGUgPSAnYmd3dCcKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIGVuZHNfd2l0aChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJlbmRzIHdpdGg6IEVuZHMgd2l0aAoJCVJlcXVpcmVkIGFyZ3VtZW50OiBhbiBBRSBvYmplY3QgcmVmZXJlbmNlCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IGFueXRoaW5nCgkJIiIiCgkJX2NvZGUgPSAnYXNjcicKCQlfc3ViY29kZSA9ICdlbmRzJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgY29udGFpbnMoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIiY29udGFpbnM6IENvbnRhaW5tZW50CgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ2NvbnQnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBfYW5kKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiImFuZDogTG9naWNhbCBjb25qdW5jdGlvbgoJCVJlcXVpcmVkIGFyZ3VtZW50OiBhbiBBRSBvYmplY3QgcmVmZXJlbmNlCgkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQoJCVJldHVybnM6IGFueXRoaW5nCgkJIiIiCgkJX2NvZGUgPSAnYXNjcicKCQlfc3ViY29kZSA9ICdBTkQgJwoKCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwoJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKCgoJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAoJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CgkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CgkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CgkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KCglkZWYgX29yKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgoJCSIiIm9yOiBMb2dpY2FsIGRpc2p1bmN0aW9uCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ09SICAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBhcyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKCQkiIiJhczogQ29lcmNpb24KCQlSZXF1aXJlZCBhcmd1bWVudDogYW4gQUUgb2JqZWN0IHJlZmVyZW5jZQoJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKCQlSZXR1cm5zOiBhbnl0aGluZwoJCSIiIgoJCV9jb2RlID0gJ2FzY3InCgkJX3N1YmNvZGUgPSAnY29lcicKCgkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CgoKCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgoJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCgkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAoJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgoJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCgoJZGVmIF9ub3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIibm90OiBMb2dpY2FsIG5lZ2F0aW9uCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ05PVCAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCWRlZiBuZWdhdGUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CgkJIiIibmVnYXRlOiBOdW1lcmljIG5lZ2F0aW9uCgkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIEFFIG9iamVjdCByZWZlcmVuY2UKCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CgkJUmV0dXJuczogYW55dGhpbmcKCQkiIiIKCQlfY29kZSA9ICdhc2NyJwoJCV9zdWJjb2RlID0gJ25lZyAnCgoJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCgkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAoKCgkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCgkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQoJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQoKCmNsYXNzIF9lbXB0eV9hZV9uYW1lKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiIgLSB0aGUgdW5kZWZpbmVkIHZhbHVlIiIiCgl3YW50ID0gJ3VuZGYnCgpjbGFzcyB1cHBlcl9jYXNlKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJ1cHBlciBjYXNlIC0gVGV4dCB3aXRoIGxvd2VyIGNhc2UgY29udmVydGVkIHRvIHVwcGVyIGNhc2UiIiIKCXdhbnQgPSAnY2FzZScKCmNsYXNzIG1hY2hpbmVzKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJtYWNoaW5lcyAtIGV2ZXJ5IGNvbXB1dGVyIiIiCgl3YW50ID0gJ21hY2gnCgptYWNoaW5lID0gbWFjaGluZXMKCmNsYXNzIHpvbmVzKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJ6b25lcyAtIGV2ZXJ5IEFwcGxlVGFsayB6b25lIiIiCgl3YW50ID0gJ3pvbmUnCgp6b25lID0gem9uZXMKCmNsYXNzIHNlY29uZHMoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiInNlY29uZHMgLSBtb3JlIHRoYW4gb25lIHNlY29uZCIiIgoJd2FudCA9ICdzY25kJwoKY2xhc3MgaXRlbShhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiaXRlbSAtIEFuIGl0ZW0gb2YgYW55IHR5cGUiIiIKCXdhbnQgPSAnY29iaicKY2xhc3MgaWQoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiaWQgLSB0aGUgdW5pcXVlIGlkIG51bWJlciBvZiB0aGlzIG9iamVjdCIiIgoJd2hpY2ggPSAnSUQgICcKCXdhbnQgPSAnbG9uZycKCml0ZW1zID0gaXRlbQoKY2xhc3MgdGV4dF9pdGVtcyhhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIidGV4dCBpdGVtcyAtICIiIgoJd2FudCA9ICdjaXRtJwoKdGV4dF9pdGVtID0gdGV4dF9pdGVtcwoKY2xhc3MgZGF0ZShhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiZGF0ZSAtIEFic29sdXRlIGRhdGUgYW5kIHRpbWUgdmFsdWVzIiIiCgl3YW50ID0gJ2xkdCAnCmNsYXNzIHdlZWtkYXkoYWV0b29scy5OUHJvcGVydHkpOgoJIiIid2Vla2RheSAtIHRoZSBkYXkgb2YgYSB3ZWVrIG9mIGEgZGF0ZSIiIgoJd2hpY2ggPSAnd2tkeScKCXdhbnQgPSAnd2tkeScKY2xhc3MgbW9udGgoYWV0b29scy5OUHJvcGVydHkpOgoJIiIibW9udGggLSB0aGUgbW9udGggb2YgYSBkYXRlIiIiCgl3aGljaCA9ICdtbnRoJwoJd2FudCA9ICdtbnRoJwpjbGFzcyBkYXkoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiZGF5IC0gdGhlIGRheSBvZiB0aGUgbW9udGggb2YgYSBkYXRlIiIiCgl3aGljaCA9ICdkYXkgJwoJd2FudCA9ICdsb25nJwpjbGFzcyB5ZWFyKGFldG9vbHMuTlByb3BlcnR5KToKCSIiInllYXIgLSB0aGUgeWVhciBvZiBhIGRhdGUiIiIKCXdoaWNoID0gJ3llYXInCgl3YW50ID0gJ2xvbmcnCmNsYXNzIHRpbWUoYWV0b29scy5OUHJvcGVydHkpOgoJIiIidGltZSAtIHRoZSB0aW1lIHNpbmNlIG1pZG5pZ2h0IG9mIGEgZGF0ZSIiIgoJd2hpY2ggPSAndGltZScKCXdhbnQgPSAnbG9uZycKY2xhc3MgZGF0ZV9zdHJpbmcoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiZGF0ZSBzdHJpbmcgLSB0aGUgZGF0ZSBwb3J0aW9uIG9mIGEgZGF0ZS10aW1lIHZhbHVlIGFzIGEgc3RyaW5nIiIiCgl3aGljaCA9ICdkc3RyJwoJd2FudCA9ICdURVhUJwpjbGFzcyB0aW1lX3N0cmluZyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJ0aW1lIHN0cmluZyAtIHRoZSB0aW1lIHBvcnRpb24gb2YgYSBkYXRlLXRpbWUgdmFsdWUgYXMgYSBzdHJpbmciIiIKCXdoaWNoID0gJ3RzdHInCgl3YW50ID0gJ1RFWFQnCgpkYXRlcyA9IGRhdGUKCmNsYXNzIG1vbnRoKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJtb250aCAtIGEgbW9udGgiIiIKCXdhbnQgPSAnbW50aCcKCm1vbnRocyA9IG1vbnRoCgpjbGFzcyBKYW51YXJ5KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJKYW51YXJ5IC0gSXQncyBKdW5lIGluIEphbnVhcnkuLi4iIiIKCXdhbnQgPSAnamFuICcKCmNsYXNzIEZlYnJ1YXJ5KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJGZWJydWFyeSAtIHRoZSBtb250aCBvZiBGZWJydWFyeSIiIgoJd2FudCA9ICdmZWIgJwoKY2xhc3MgTWFyY2goYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIk1hcmNoIC0gdGhlIG1vbnRoIG9mIE1hcmNoIiIiCgl3YW50ID0gJ21hciAnCgpjbGFzcyBBcHJpbChhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiQXByaWwgLSB0aGUgbW9udGggb2YgQXByaWwiIiIKCXdhbnQgPSAnYXByICcKCmNsYXNzIE1heShhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiTWF5IC0gdGhlIHZlcnkgbWVycnkgbW9udGggb2YgTWF5IiIiCgl3YW50ID0gJ21heSAnCgpjbGFzcyBKdW5lKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJKdW5lIC0gdGhlIG1vbnRoIG9mIEp1bmUiIiIKCXdhbnQgPSAnanVuICcKCmNsYXNzIEp1bHkoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIkp1bHkgLSB0aGUgbW9udGggb2YgSnVseSIiIgoJd2FudCA9ICdqdWwgJwoKY2xhc3MgQXVndXN0KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJBdWd1c3QgLSB0aGUgbW9udGggb2YgQXVndXN0IiIiCgl3YW50ID0gJ2F1ZyAnCgpjbGFzcyBTZXB0ZW1iZXIoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIlNlcHRlbWJlciAtIHRoZSBtb250aCBvZiBTZXB0ZW1iZXIiIiIKCXdhbnQgPSAnc2VwICcKCmNsYXNzIE9jdG9iZXIoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIk9jdG9iZXIgLSB0aGUgbW9udGggb2YgT2N0b2JlciIiIgoJd2FudCA9ICdvY3QgJwoKY2xhc3MgTm92ZW1iZXIoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIk5vdmVtYmVyIC0gdGhlIG1vbnRoIG9mIE5vdmVtYmVyIiIiCgl3YW50ID0gJ25vdiAnCgpjbGFzcyBEZWNlbWJlcihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiRGVjZW1iZXIgLSB0aGUgbW9udGggb2YgRGVjZW1iZXIiIiIKCXdhbnQgPSAnZGVjICcKCmNsYXNzIHdlZWtkYXkoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIndlZWtkYXkgLSBhIHdlZWtkYXkiIiIKCXdhbnQgPSAnd2tkeScKCndlZWtkYXlzID0gd2Vla2RheQoKY2xhc3MgU3VuZGF5KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJTdW5kYXkgLSBTdW5kYXkgQmxvb2R5IFN1bmRheSIiIgoJd2FudCA9ICdzdW4gJwoKY2xhc3MgTW9uZGF5KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJNb25kYXkgLSBCbHVlIE1vbmRheSIiIgoJd2FudCA9ICdtb24gJwoKY2xhc3MgVHVlc2RheShhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiVHVlc2RheSAtIFJ1YnkgVHVlc2RheSIiIgoJd2FudCA9ICd0dWUgJwoKY2xhc3MgV2VkbmVzZGF5KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJXZWRuZXNkYXkgLSBXZWRuZXNkYXkgV2VlayIiIgoJd2FudCA9ICd3ZWQgJwoKY2xhc3MgVGh1cnNkYXkoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIlRodXJzZGF5IC0gVGh1cnNkYXkgQWZ0ZXJub29uIiIiCgl3YW50ID0gJ3RodSAnCgpjbGFzcyBGcmlkYXkoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIkZyaWRheSAtIEZyaWRheSIiIgoJd2FudCA9ICdmcmkgJwoKY2xhc3MgU2F0dXJkYXkoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIlNhdHVyZGF5IC0gU2F0dXJkYXkgTmlnaHQncyBBbHJpZ2h0IGZvciBGaWdodGluZyIiIgoJd2FudCA9ICdzYXQgJwoKY2xhc3MgUkdCX2NvbG9yKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJSR0IgY29sb3IgLSBUaHJlZSBudW1iZXJzIHNwZWNpZnlpbmcgcmVkLCBncmVlbiwgYmx1ZSBjb2xvciB2YWx1ZXMiIiIKCXdhbnQgPSAnY1JHQicKClJHQl9jb2xvcnMgPSBSR0JfY29sb3IKCmNsYXNzIGludGVnZXIoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiImludGVnZXIgLSBBbiBpbnRlZ3JhbCBudW1iZXIiIiIKCXdhbnQgPSAnbG9uZycKCmludGVnZXJzID0gaW50ZWdlcgoKY2xhc3MgYm9vbGVhbihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiYm9vbGVhbiAtIEEgdHJ1ZSBvciBmYWxzZSB2YWx1ZSIiIgoJd2FudCA9ICdib29sJwoKYm9vbGVhbnMgPSBib29sZWFuCgpjbGFzcyByZWFsKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJyZWFsIC0gQSByZWFsIG51bWJlciIiIgoJd2FudCA9ICdkb3ViJwoKcmVhbHMgPSByZWFsCgpjbGFzcyBsaXN0KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJsaXN0IC0gQW4gb3JkZXJlZCBjb2xsZWN0aW9uIG9mIGl0ZW1zIiIiCgl3YW50ID0gJ2xpc3QnCmNsYXNzIGxlbmd0aChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJsZW5ndGggLSB0aGUgbGVuZ3RoIG9mIGEgbGlzdCIiIgoJd2hpY2ggPSAnbGVuZycKCXdhbnQgPSAnbG9uZycKCmxpc3RzID0gbGlzdAoKY2xhc3MgbGlua2VkX2xpc3QoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiImxpbmtlZCBsaXN0IC0gQW4gb3JkZXJlZCBjb2xsZWN0aW9uIG9mIGl0ZW1zIiIiCgl3YW50ID0gJ2xsc3QnCiMgcmVwZWF0ZWQgcHJvcGVydHkgbGVuZ3RoIHRoZSBsZW5ndGggb2YgYSBsaXN0CgpsaW5rZWRfbGlzdHMgPSBsaW5rZWRfbGlzdAoKY2xhc3MgdmVjdG9yKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJ2ZWN0b3IgLSBBbiBvcmRlcmVkIGNvbGxlY3Rpb24gb2YgaXRlbXMiIiIKCXdhbnQgPSAndmVjdCcKIyByZXBlYXRlZCBwcm9wZXJ0eSBsZW5ndGggdGhlIGxlbmd0aCBvZiBhIGxpc3QKCnZlY3RvcnMgPSB2ZWN0b3IKCmNsYXNzIHJlY29yZChhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIicmVjb3JkIC0gQSBzZXQgb2YgbGFiZWxlZCBpdGVtcyIiIgoJd2FudCA9ICdyZWNvJwoKcmVjb3JkcyA9IHJlY29yZAoKY2xhc3Mgc2NyaXB0KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJzY3JpcHQgLSBBbiBBcHBsZVNjcmlwdCBzY3JpcHQiIiIKCXdhbnQgPSAnc2NwdCcKY2xhc3MgcGFyZW50KGFldG9vbHMuTlByb3BlcnR5KToKCSIiInBhcmVudCAtIHRoZSBwYXJlbnQgb2YgYSBzY3JpcHQiIiIKCXdoaWNoID0gJ3BhcmUnCgl3YW50ID0gJ3NjcHQnCgpzY3JpcHRzID0gc2NyaXB0CgpjbGFzcyBzdHJpbmcoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiInN0cmluZyAtIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyIiIgoJd2FudCA9ICdURVhUJwoKc3RyaW5ncyA9IHN0cmluZwoKY2xhc3Mgc3R5bGVkX3RleHQoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiInN0eWxlZCB0ZXh0IC0gYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHdpdGggc3R5bGUiIiIKCXdhbnQgPSAnU1RYVCcKCmNsYXNzIG51bWJlcihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIibnVtYmVyIC0gYW4gaW50ZWdlciBvciBmbG9hdGluZyBwb2ludCBudW1iZXIiIiIKCXdhbnQgPSAnbm1icicKCm51bWJlcnMgPSBudW1iZXIKCmNsYXNzIF9jbGFzcyhhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiY2xhc3MgLSB0aGUgdHlwZSBvZiBhIHZhbHVlIiIiCgl3YW50ID0gJ3BjbHMnCmNsYXNzIGluaGVyaXRzKGFldG9vbHMuTlByb3BlcnR5KToKCSIiImluaGVyaXRzIC0gY2xhc3NlcyB0byBpbmhlcml0IHByb3BlcnRpZXMgZnJvbSIiIgoJd2hpY2ggPSAnY0AjXicKCXdhbnQgPSAncGNscycKCmNsYXNzZXMgPSBfY2xhc3MKCmNsYXNzIGV2ZW50KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJldmVudCAtIGFuIEFwcGxlRXZlbnRzIGV2ZW50IiIiCgl3YW50ID0gJ2V2bnQnCgpldmVudHMgPSBldmVudAoKY2xhc3MgcHJvcGVydHkoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiInByb3BlcnR5IC0gYW4gQXBwbGVFdmVudHMgcHJvcGVydHkiIiIKCXdhbnQgPSAncHJvcCcKCnByb3BlcnRpZXMgPSBwcm9wZXJ0eQoKY2xhc3MgY29uc3RhbnQoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiImNvbnN0YW50IC0gQSBjb25zdGFudCB2YWx1ZSIiIgoJd2FudCA9ICdlbnVtJwoKY29uc3RhbnRzID0gY29uc3RhbnQKCmNsYXNzIHByZXBvc2l0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJwcmVwb3NpdGlvbiAtIGFuIEFwcGxlRXZlbnRzIHByZXBvc2l0aW9uIiIiCgl3YW50ID0gJ3ByZXAnCgpwcmVwb3NpdGlvbnMgPSBwcmVwb3NpdGlvbgoKY2xhc3Mga2V5KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJrZXkgLSBhbiBBcHBsZUV2ZW50cyBrZXkgZm9ybSIiIgoJd2FudCA9ICdrZXlmJwoKa2V5cyA9IGtleQoKY2xhc3MgcGljdHVyZShhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIicGljdHVyZSAtIEEgcGljdHVyZSIiIgoJd2FudCA9ICdQSUNUJwoKcGljdHVyZXMgPSBwaWN0dXJlCgpjbGFzcyByZWZlcmVuY2UoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiInJlZmVyZW5jZSAtIEFuIEFwcGxlU2NyaXB0IHJlZmVyZW5jZSIiIgoJd2FudCA9ICdvYmogJwoKcmVmZXJlbmNlcyA9IHJlZmVyZW5jZQoKY2xhc3MgZGF0YShhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiZGF0YSAtIEFuIEFwcGxlU2NyaXB0IHJhdyBkYXRhIG9iamVjdCIiIgoJd2FudCA9ICdyZGF0JwoKY2xhc3MgaGFuZGxlcihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiaGFuZGxlciAtIEFuIEFwcGxlU2NyaXB0IGhhbmRsZXIiIiIKCXdhbnQgPSAnaGFuZCcKCmhhbmRsZXJzID0gaGFuZGxlcgoKY2xhc3MgbGlzdF9vcl9yZWNvcmQoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiImxpc3Qgb3IgcmVjb3JkIC0gYSBsaXN0IG9yIHJlY29yZCIiIgoJd2FudCA9ICdsciAgJwoKY2xhc3MgbGlzdF9vcl9zdHJpbmcoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiImxpc3Qgb3Igc3RyaW5nIC0gYSBsaXN0IG9yIHN0cmluZyIiIgoJd2FudCA9ICdscyAgJwoKY2xhc3MgbGlzdF8yY19fcmVjb3JkX29yX3RleHQoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiImxpc3QsIHJlY29yZCBvciB0ZXh0IC0gYSBsaXN0LCByZWNvcmQgb3IgdGV4dCIiIgoJd2FudCA9ICdscnMgJwoKY2xhc3MgbnVtYmVyX29yX2RhdGUoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIm51bWJlciBvciBkYXRlIC0gYSBudW1iZXIgb3IgZGF0ZSIiIgoJd2FudCA9ICduZCAgJwoKY2xhc3MgbnVtYmVyXzJjX19kYXRlX29yX3RleHQoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiIm51bWJlciwgZGF0ZSBvciB0ZXh0IC0gYSBudW1iZXIsIGRhdGUgb3IgdGV4dCIiIgoJd2FudCA9ICduZHMgJwoKY2xhc3MgYWxpYXMoYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiImFsaWFzIC0gYSByZWZlcmVuY2UgdG8gYW4gZXhpc3RpbmcgZmlsZSIiIgoJd2FudCA9ICdhbGlzJwoKYWxpYXNlcyA9IGFsaWFzCgpjbGFzcyBhcHBsaWNhdGlvbihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgoJIiIiYXBwbGljYXRpb24gLSBzcGVjaWZpZXMgZ2xvYmFsIHByb3BlcnRpZXMgb2YgQXBwbGVTY3JpcHQiIiIKCXdhbnQgPSAnY2FwcCcKY2xhc3MgcmVzdWx0KGFldG9vbHMuTlByb3BlcnR5KToKCSIiInJlc3VsdCAtIHRoZSBsYXN0IHJlc3VsdCBvZiBldmFsdWF0aW9uIiIiCgl3aGljaCA9ICdyc2x0JwoJd2FudCA9ICdjb2JqJwpjbGFzcyBzcGFjZShhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJzcGFjZSAtIGEgc3BhY2UgY2hhcmFjdGVyIiIiCgl3aGljaCA9ICdzcGFjJwoJd2FudCA9ICdURVhUJwpjbGFzcyBfcmV0dXJuKGFldG9vbHMuTlByb3BlcnR5KToKCSIiInJldHVybiAtIGEgcmV0dXJuIGNoYXJhY3RlciIiIgoJd2hpY2ggPSAncmV0ICcKCXdhbnQgPSAnVEVYVCcKY2xhc3MgdGFiKGFldG9vbHMuTlByb3BlcnR5KToKCSIiInRhYiAtIGEgdGFiIGNoYXJhY3RlciIiIgoJd2hpY2ggPSAndGFiICcKCXdhbnQgPSAnVEVYVCcKY2xhc3MgbWludXRlcyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJtaW51dGVzIC0gdGhlIG51bWJlciBvZiBzZWNvbmRzIGluIGEgbWludXRlIiIiCgl3aGljaCA9ICdtaW4gJwoJd2FudCA9ICdURVhUJwpjbGFzcyBob3VycyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJob3VycyAtIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpbiBhbiBob3VyIiIiCgl3aGljaCA9ICdob3VyJwoJd2FudCA9ICdURVhUJwpjbGFzcyBkYXlzKGFldG9vbHMuTlByb3BlcnR5KToKCSIiImRheXMgLSB0aGUgbnVtYmVyIG9mIHNlY29uZHMgaW4gYSBkYXkiIiIKCXdoaWNoID0gJ2RheXMnCgl3YW50ID0gJ1RFWFQnCmNsYXNzIHdlZWtzKGFldG9vbHMuTlByb3BlcnR5KToKCSIiIndlZWtzIC0gdGhlIG51bWJlciBvZiBzZWNvbmRzIGluIGEgd2VlayIiIgoJd2hpY2ggPSAnd2VlaycKCXdhbnQgPSAnVEVYVCcKY2xhc3MgcGkoYWV0b29scy5OUHJvcGVydHkpOgoJIiIicGkgLSB0aGUgY29uc3RhbnQgcGkiIiIKCXdoaWNoID0gJ3BpICAnCgl3YW50ID0gJ2RvdWInCmNsYXNzIHByaW50X2xlbmd0aChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJwcmludCBsZW5ndGggLSB0aGUgbWF4aW11bSBsZW5ndGggdG8gcHJpbnQiIiIKCXdoaWNoID0gJ3BybG4nCgl3YW50ID0gJ2xvbmcnCmNsYXNzIHByaW50X2RlcHRoKGFldG9vbHMuTlByb3BlcnR5KToKCSIiInByaW50IGRlcHRoIC0gdGhlIG1heGltdW0gZGVwdGggdG8gcHJpbnQiIiIKCXdoaWNoID0gJ3ByZHAnCgl3YW50ID0gJ2xvbmcnCmNsYXNzIHJldmVyc2UoYWV0b29scy5OUHJvcGVydHkpOgoJIiIicmV2ZXJzZSAtIHRoZSByZXZlcnNlIG9mIGEgbGlzdCIiIgoJd2hpY2ggPSAncnZzZScKCXdhbnQgPSAnbGlzdCcKY2xhc3MgcmVzdChhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJyZXN0IC0gdGhlIHJlc3Qgb2YgYSBsaXN0IiIiCgl3aGljaCA9ICdyZXN0JwoJd2FudCA9ICdsaXN0JwpjbGFzcyB0ZXh0X2l0ZW1fZGVsaW1pdGVycyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJ0ZXh0IGl0ZW0gZGVsaW1pdGVycyAtIHRoZSB0ZXh0IGl0ZW0gZGVsaW1pdGVycyBvZiBhIHN0cmluZyIiIgoJd2hpY2ggPSAndHhkbCcKCXdhbnQgPSAnbGlzdCcKY2xhc3MgQXBwbGVTY3JpcHQoYWV0b29scy5OUHJvcGVydHkpOgoJIiIiQXBwbGVTY3JpcHQgLSB0aGUgdG9wLWxldmVsIHNjcmlwdCBvYmplY3QiIiIKCXdoaWNoID0gJ2FzY3InCgl3YW50ID0gJ3NjcHQnCgphcHBsaWNhdGlvbnMgPSBhcHBsaWNhdGlvbgoKYXBwID0gYXBwbGljYXRpb24KCmNsYXNzIHZlcnNpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKCSIiInZlcnNpb24gLSBhIHZlcnNpb24gdmFsdWUiIiIKCXdhbnQgPSAndmVycycKCmNsYXNzIHdyaXRpbmdfY29kZV9pbmZvKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CgkiIiJ3cml0aW5nIGNvZGUgaW5mbyAtIFNjcmlwdCBjb2RlIGFuZCBsYW5ndWFnZSBjb2RlIG9mIHRleHQgcnVuIiIiCgl3YW50ID0gJ2NpdGwnCmNsYXNzIHNjcmlwdF9jb2RlKGFldG9vbHMuTlByb3BlcnR5KToKCSIiInNjcmlwdCBjb2RlIC0gdGhlIHNjcmlwdCBjb2RlIGZvciB0aGUgdGV4dCIiIgoJd2hpY2ggPSAncHNjZCcKCXdhbnQgPSAnc2hvcicKY2xhc3MgbGFuZ3VhZ2VfY29kZShhZXRvb2xzLk5Qcm9wZXJ0eSk6CgkiIiJsYW5ndWFnZSBjb2RlIC0gdGhlIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSB0ZXh0IiIiCgl3aGljaCA9ICdwbGNkJwoJd2FudCA9ICdzaG9yJwoKd3JpdGluZ19jb2RlX2luZm9zID0gd3JpdGluZ19jb2RlX2luZm8KX2VtcHR5X2FlX25hbWUuX3Byb3BkaWN0ID0gewp9Cl9lbXB0eV9hZV9uYW1lLl9lbGVtZGljdCA9IHsKfQp1cHBlcl9jYXNlLl9wcm9wZGljdCA9IHsKfQp1cHBlcl9jYXNlLl9lbGVtZGljdCA9IHsKfQptYWNoaW5lcy5fcHJvcGRpY3QgPSB7Cn0KbWFjaGluZXMuX2VsZW1kaWN0ID0gewp9CnpvbmVzLl9wcm9wZGljdCA9IHsKfQp6b25lcy5fZWxlbWRpY3QgPSB7Cn0Kc2Vjb25kcy5fcHJvcGRpY3QgPSB7Cn0Kc2Vjb25kcy5fZWxlbWRpY3QgPSB7Cn0KaXRlbS5fcHJvcGRpY3QgPSB7CgknaWQnIDogaWQsCn0KaXRlbS5fZWxlbWRpY3QgPSB7Cn0KdGV4dF9pdGVtcy5fcHJvcGRpY3QgPSB7Cn0KdGV4dF9pdGVtcy5fZWxlbWRpY3QgPSB7Cn0KZGF0ZS5fcHJvcGRpY3QgPSB7Cgknd2Vla2RheScgOiB3ZWVrZGF5LAoJJ21vbnRoJyA6IG1vbnRoLAoJJ2RheScgOiBkYXksCgkneWVhcicgOiB5ZWFyLAoJJ3RpbWUnIDogdGltZSwKCSdkYXRlX3N0cmluZycgOiBkYXRlX3N0cmluZywKCSd0aW1lX3N0cmluZycgOiB0aW1lX3N0cmluZywKfQpkYXRlLl9lbGVtZGljdCA9IHsKfQptb250aC5fcHJvcGRpY3QgPSB7Cn0KbW9udGguX2VsZW1kaWN0ID0gewp9CkphbnVhcnkuX3Byb3BkaWN0ID0gewp9CkphbnVhcnkuX2VsZW1kaWN0ID0gewp9CkZlYnJ1YXJ5Ll9wcm9wZGljdCA9IHsKfQpGZWJydWFyeS5fZWxlbWRpY3QgPSB7Cn0KTWFyY2guX3Byb3BkaWN0ID0gewp9Ck1hcmNoLl9lbGVtZGljdCA9IHsKfQpBcHJpbC5fcHJvcGRpY3QgPSB7Cn0KQXByaWwuX2VsZW1kaWN0ID0gewp9Ck1heS5fcHJvcGRpY3QgPSB7Cn0KTWF5Ll9lbGVtZGljdCA9IHsKfQpKdW5lLl9wcm9wZGljdCA9IHsKfQpKdW5lLl9lbGVtZGljdCA9IHsKfQpKdWx5Ll9wcm9wZGljdCA9IHsKfQpKdWx5Ll9lbGVtZGljdCA9IHsKfQpBdWd1c3QuX3Byb3BkaWN0ID0gewp9CkF1Z3VzdC5fZWxlbWRpY3QgPSB7Cn0KU2VwdGVtYmVyLl9wcm9wZGljdCA9IHsKfQpTZXB0ZW1iZXIuX2VsZW1kaWN0ID0gewp9Ck9jdG9iZXIuX3Byb3BkaWN0ID0gewp9Ck9jdG9iZXIuX2VsZW1kaWN0ID0gewp9Ck5vdmVtYmVyLl9wcm9wZGljdCA9IHsKfQpOb3ZlbWJlci5fZWxlbWRpY3QgPSB7Cn0KRGVjZW1iZXIuX3Byb3BkaWN0ID0gewp9CkRlY2VtYmVyLl9lbGVtZGljdCA9IHsKfQp3ZWVrZGF5Ll9wcm9wZGljdCA9IHsKfQp3ZWVrZGF5Ll9lbGVtZGljdCA9IHsKfQpTdW5kYXkuX3Byb3BkaWN0ID0gewp9ClN1bmRheS5fZWxlbWRpY3QgPSB7Cn0KTW9uZGF5Ll9wcm9wZGljdCA9IHsKfQpNb25kYXkuX2VsZW1kaWN0ID0gewp9ClR1ZXNkYXkuX3Byb3BkaWN0ID0gewp9ClR1ZXNkYXkuX2VsZW1kaWN0ID0gewp9CldlZG5lc2RheS5fcHJvcGRpY3QgPSB7Cn0KV2VkbmVzZGF5Ll9lbGVtZGljdCA9IHsKfQpUaHVyc2RheS5fcHJvcGRpY3QgPSB7Cn0KVGh1cnNkYXkuX2VsZW1kaWN0ID0gewp9CkZyaWRheS5fcHJvcGRpY3QgPSB7Cn0KRnJpZGF5Ll9lbGVtZGljdCA9IHsKfQpTYXR1cmRheS5fcHJvcGRpY3QgPSB7Cn0KU2F0dXJkYXkuX2VsZW1kaWN0ID0gewp9ClJHQl9jb2xvci5fcHJvcGRpY3QgPSB7Cn0KUkdCX2NvbG9yLl9lbGVtZGljdCA9IHsKfQppbnRlZ2VyLl9wcm9wZGljdCA9IHsKfQppbnRlZ2VyLl9lbGVtZGljdCA9IHsKfQpib29sZWFuLl9wcm9wZGljdCA9IHsKfQpib29sZWFuLl9lbGVtZGljdCA9IHsKfQpyZWFsLl9wcm9wZGljdCA9IHsKfQpyZWFsLl9lbGVtZGljdCA9IHsKfQpsaXN0Ll9wcm9wZGljdCA9IHsKCSdsZW5ndGgnIDogbGVuZ3RoLAp9Cmxpc3QuX2VsZW1kaWN0ID0gewp9CmxpbmtlZF9saXN0Ll9wcm9wZGljdCA9IHsKCSdsZW5ndGgnIDogbGVuZ3RoLAp9CmxpbmtlZF9saXN0Ll9lbGVtZGljdCA9IHsKfQp2ZWN0b3IuX3Byb3BkaWN0ID0gewoJJ2xlbmd0aCcgOiBsZW5ndGgsCn0KdmVjdG9yLl9lbGVtZGljdCA9IHsKfQpyZWNvcmQuX3Byb3BkaWN0ID0gewp9CnJlY29yZC5fZWxlbWRpY3QgPSB7Cn0Kc2NyaXB0Ll9wcm9wZGljdCA9IHsKCSdwYXJlbnQnIDogcGFyZW50LAp9CnNjcmlwdC5fZWxlbWRpY3QgPSB7Cn0Kc3RyaW5nLl9wcm9wZGljdCA9IHsKfQpzdHJpbmcuX2VsZW1kaWN0ID0gewp9CnN0eWxlZF90ZXh0Ll9wcm9wZGljdCA9IHsKfQpzdHlsZWRfdGV4dC5fZWxlbWRpY3QgPSB7Cn0KbnVtYmVyLl9wcm9wZGljdCA9IHsKfQpudW1iZXIuX2VsZW1kaWN0ID0gewp9Cl9jbGFzcy5fcHJvcGRpY3QgPSB7CgknaW5oZXJpdHMnIDogaW5oZXJpdHMsCn0KX2NsYXNzLl9lbGVtZGljdCA9IHsKfQpldmVudC5fcHJvcGRpY3QgPSB7Cn0KZXZlbnQuX2VsZW1kaWN0ID0gewp9CnByb3BlcnR5Ll9wcm9wZGljdCA9IHsKfQpwcm9wZXJ0eS5fZWxlbWRpY3QgPSB7Cn0KY29uc3RhbnQuX3Byb3BkaWN0ID0gewp9CmNvbnN0YW50Ll9lbGVtZGljdCA9IHsKfQpwcmVwb3NpdGlvbi5fcHJvcGRpY3QgPSB7Cn0KcHJlcG9zaXRpb24uX2VsZW1kaWN0ID0gewp9CmtleS5fcHJvcGRpY3QgPSB7Cn0Ka2V5Ll9lbGVtZGljdCA9IHsKfQpwaWN0dXJlLl9wcm9wZGljdCA9IHsKfQpwaWN0dXJlLl9lbGVtZGljdCA9IHsKfQpyZWZlcmVuY2UuX3Byb3BkaWN0ID0gewp9CnJlZmVyZW5jZS5fZWxlbWRpY3QgPSB7Cn0KZGF0YS5fcHJvcGRpY3QgPSB7Cn0KZGF0YS5fZWxlbWRpY3QgPSB7Cn0KaGFuZGxlci5fcHJvcGRpY3QgPSB7Cn0KaGFuZGxlci5fZWxlbWRpY3QgPSB7Cn0KbGlzdF9vcl9yZWNvcmQuX3Byb3BkaWN0ID0gewp9Cmxpc3Rfb3JfcmVjb3JkLl9lbGVtZGljdCA9IHsKfQpsaXN0X29yX3N0cmluZy5fcHJvcGRpY3QgPSB7Cn0KbGlzdF9vcl9zdHJpbmcuX2VsZW1kaWN0ID0gewp9Cmxpc3RfMmNfX3JlY29yZF9vcl90ZXh0Ll9wcm9wZGljdCA9IHsKfQpsaXN0XzJjX19yZWNvcmRfb3JfdGV4dC5fZWxlbWRpY3QgPSB7Cn0KbnVtYmVyX29yX2RhdGUuX3Byb3BkaWN0ID0gewp9Cm51bWJlcl9vcl9kYXRlLl9lbGVtZGljdCA9IHsKfQpudW1iZXJfMmNfX2RhdGVfb3JfdGV4dC5fcHJvcGRpY3QgPSB7Cn0KbnVtYmVyXzJjX19kYXRlX29yX3RleHQuX2VsZW1kaWN0ID0gewp9CmFsaWFzLl9wcm9wZGljdCA9IHsKfQphbGlhcy5fZWxlbWRpY3QgPSB7Cn0KYXBwbGljYXRpb24uX3Byb3BkaWN0ID0gewoJJ3Jlc3VsdCcgOiByZXN1bHQsCgknc3BhY2UnIDogc3BhY2UsCgknX3JldHVybicgOiBfcmV0dXJuLAoJJ3RhYicgOiB0YWIsCgknbWludXRlcycgOiBtaW51dGVzLAoJJ2hvdXJzJyA6IGhvdXJzLAoJJ2RheXMnIDogZGF5cywKCSd3ZWVrcycgOiB3ZWVrcywKCSdwaScgOiBwaSwKCSdwcmludF9sZW5ndGgnIDogcHJpbnRfbGVuZ3RoLAoJJ3ByaW50X2RlcHRoJyA6IHByaW50X2RlcHRoLAoJJ3JldmVyc2UnIDogcmV2ZXJzZSwKCSdyZXN0JyA6IHJlc3QsCgkndGV4dF9pdGVtX2RlbGltaXRlcnMnIDogdGV4dF9pdGVtX2RlbGltaXRlcnMsCgknQXBwbGVTY3JpcHQnIDogQXBwbGVTY3JpcHQsCn0KYXBwbGljYXRpb24uX2VsZW1kaWN0ID0gewp9CnZlcnNpb24uX3Byb3BkaWN0ID0gewp9CnZlcnNpb24uX2VsZW1kaWN0ID0gewp9CndyaXRpbmdfY29kZV9pbmZvLl9wcm9wZGljdCA9IHsKCSdzY3JpcHRfY29kZScgOiBzY3JpcHRfY29kZSwKCSdsYW5ndWFnZV9jb2RlJyA6IGxhbmd1YWdlX2NvZGUsCn0Kd3JpdGluZ19jb2RlX2luZm8uX2VsZW1kaWN0ID0gewp9Cl9FbnVtX2NvbnMgPSB7CgknY2FzZScgOiAnY2FzZScsCSMgY2FzZQoJJ2RpYWNyaXRpY2FscycgOiAnZGlhYycsCSMgZGlhY3JpdGljYWxzCgknd2hpdGVfc3BhY2UnIDogJ3doaXQnLAkjIHdoaXRlIHNwYWNlCgknaHlwaGVucycgOiAnaHlwaCcsCSMgaHlwaGVucwoJJ2V4cGFuc2lvbicgOiAnZXhwYScsCSMgZXhwYW5zaW9uCgkncHVuY3R1YXRpb24nIDogJ3B1bmMnLAkjIHB1bmN0dWF0aW9uCgknYXBwbGljYXRpb25fcmVzcG9uc2VzJyA6ICdybXRlJywJIyByZW1vdGUgZXZlbnQgcmVwbGllcwp9CgpfRW51bV9ib292ID0gewoJJ3RydWUnIDogJ3RydWUnLAkjIHRoZSB0cnVlIGJvb2xlYW4gdmFsdWUKCSdmYWxzZScgOiAnZmFscycsCSMgdGhlIGZhbHNlIGJvb2xlYW4gdmFsdWUKfQoKX0VudW1fbWlzYyA9IHsKCSdjdXJyZW50X2FwcGxpY2F0aW9uJyA6ICdjdXJhJywJIyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbgp9CgoKIwojIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKIwpfY2xhc3NkZWNsYXJhdGlvbnMgPSB7CgknamFuICcgOiBKYW51YXJ5LAoJJ1BJQ1QnIDogcGljdHVyZSwKCSd2ZXJzJyA6IHZlcnNpb24sCgknc2F0ICcgOiBTYXR1cmRheSwKCSdub3YgJyA6IE5vdmVtYmVyLAoJJ2xzICAnIDogbGlzdF9vcl9zdHJpbmcsCgknbGlzdCcgOiBsaXN0LAoJJ2NSR0InIDogUkdCX2NvbG9yLAoJJ2NpdGwnIDogd3JpdGluZ19jb2RlX2luZm8sCgknc2NuZCcgOiBzZWNvbmRzLAoJJ3RodSAnIDogVGh1cnNkYXksCgkna2V5ZicgOiBrZXksCgknc3VuICcgOiBTdW5kYXksCgknd2tkeScgOiB3ZWVrZGF5LAoJJ3JkYXQnIDogZGF0YSwKCSd2ZWN0JyA6IHZlY3RvciwKCSdvYmogJyA6IHJlZmVyZW5jZSwKCSdoYW5kJyA6IGhhbmRsZXIsCgkndHVlICcgOiBUdWVzZGF5LAoJJ2RlYyAnIDogRGVjZW1iZXIsCgknZW51bScgOiBjb25zdGFudCwKCSduZCAgJyA6IG51bWJlcl9vcl9kYXRlLAoJJ3dlZCAnIDogV2VkbmVzZGF5LAoJJ3VuZGYnIDogX2VtcHR5X2FlX25hbWUsCgkncmVjbycgOiByZWNvcmQsCgknY2FwcCcgOiBhcHBsaWNhdGlvbiwKCSdjb2JqJyA6IGl0ZW0sCgkncHJlcCcgOiBwcmVwb3NpdGlvbiwKCSdtYWNoJyA6IG1hY2hpbmVzLAoJJ2NpdG0nIDogdGV4dF9pdGVtcywKCSdib29sJyA6IGJvb2xlYW4sCgknbm1icicgOiBudW1iZXIsCgkncHJvcCcgOiBwcm9wZXJ0eSwKCSdsb25nJyA6IGludGVnZXIsCgknc2VwICcgOiBTZXB0ZW1iZXIsCgknc2NwdCcgOiBzY3JpcHQsCgkncGNscycgOiBfY2xhc3MsCgknYWxpcycgOiBhbGlhcywKCSdtb24gJyA6IE1vbmRheSwKCSdsciAgJyA6IGxpc3Rfb3JfcmVjb3JkLAoJJ2p1bCAnIDogSnVseSwKCSdmcmkgJyA6IEZyaWRheSwKCSdvY3QgJyA6IE9jdG9iZXIsCgknbWFyICcgOiBNYXJjaCwKCSdsZHQgJyA6IGRhdGUsCgknbHJzICcgOiBsaXN0XzJjX19yZWNvcmRfb3JfdGV4dCwKCSdqdW4gJyA6IEp1bmUsCgknY2FzZScgOiB1cHBlcl9jYXNlLAoJJ2RvdWInIDogcmVhbCwKCSdmZWIgJyA6IEZlYnJ1YXJ5LAoJJ25kcyAnIDogbnVtYmVyXzJjX19kYXRlX29yX3RleHQsCgknbGxzdCcgOiBsaW5rZWRfbGlzdCwKCSdTVFhUJyA6IHN0eWxlZF90ZXh0LAoJJ2F1ZyAnIDogQXVndXN0LAoJJ1RFWFQnIDogc3RyaW5nLAoJJ2FwciAnIDogQXByaWwsCgknbWF5ICcgOiBNYXksCgknem9uZScgOiB6b25lcywKCSdldm50JyA6IGV2ZW50LAoJJ21udGgnIDogbW9udGgsCn0KCl9wcm9wZGVjbGFyYXRpb25zID0gewoJJ2RheSAnIDogZGF5LAoJJ3JzbHQnIDogcmVzdWx0LAoJJ3RpbWUnIDogdGltZSwKCSdwcmxuJyA6IHByaW50X2xlbmd0aCwKCSdwcmRwJyA6IHByaW50X2RlcHRoLAoJJ3R4ZGwnIDogdGV4dF9pdGVtX2RlbGltaXRlcnMsCgknZGF5cycgOiBkYXlzLAoJJ3NwYWMnIDogc3BhY2UsCgknaG91cicgOiBob3VycywKCSdwc2NkJyA6IHNjcmlwdF9jb2RlLAoJJ3BsY2QnIDogbGFuZ3VhZ2VfY29kZSwKCSdyZXQgJyA6IF9yZXR1cm4sCgkndHN0cicgOiB0aW1lX3N0cmluZywKCSd0YWIgJyA6IHRhYiwKCSdydnNlJyA6IHJldmVyc2UsCgknd2tkeScgOiB3ZWVrZGF5LAoJJ0lEICAnIDogaWQsCgknY0AjXicgOiBpbmhlcml0cywKCSdhc2NyJyA6IEFwcGxlU2NyaXB0LAoJJ3Jlc3QnIDogcmVzdCwKCSdkc3RyJyA6IGRhdGVfc3RyaW5nLAoJJ21pbiAnIDogbWludXRlcywKCSdwaSAgJyA6IHBpLAoJJ2xlbmcnIDogbGVuZ3RoLAoJJ3llYXInIDogeWVhciwKCSdwYXJlJyA6IHBhcmVudCwKCSdtbnRoJyA6IG1vbnRoLAoJJ3dlZWsnIDogd2Vla3MsCn0KCl9jb21wZGVjbGFyYXRpb25zID0gewp9CgpfZW51bWRlY2xhcmF0aW9ucyA9IHsKCSdjb25zJyA6IF9FbnVtX2NvbnMsCgknYm9vdicgOiBfRW51bV9ib292LAoJJ21pc2MnIDogX0VudW1fbWlzYywKfQo=