LyoKICogQ29weXJpZ2h0IDE5OTUgQWxleGFuZHJlIEp1bGxpYXJkCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfRlJFTkNILCBTVUJMQU5HX0RFRkFVTFQKClNZU01FTlUgTUVOVSBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFCnsKIE1FTlVJVEVNICImUmVzdGF1cmF0aW9uIiwgNjE3MjgKIE1FTlVJVEVNICImROlwbGFjZW1lbnQiLCA2MTQ1NgogTUVOVUlURU0gIkRpJm1lbnNpb24iLCA2MTQ0MAogTUVOVUlURU0gIlLpZHVjdCZpb24iLCA2MTQ3MgogTUVOVUlURU0gIiZBZ3JhbmRpc3NlbWVudCIsIDYxNDg4CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICImRmVybWV0dXJlXHRBbHQtRjQiLCA2MTUzNgogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAiJkJhc2N1bGVyIHZlcnMgLi4uXHRDdHJsLUVjaGFwIiwgNjE3NDQKIE1FTlVJVEVNIFNFUEFSQVRPUgogTUVOVUlURU0gIsAgcHJvcG9zIGRlICZXaW5lIC4uLiIsIDYxNzYxCiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICJJbnPpcmVyIHVuZSBtYXJxdWUgZGFucyBsZSBmbHV4IGRlIGTpYm9ndWFnZSIsIDYxNzYyCn0KCkVESVRNRU5VIE1FTlUgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRQp7CglQT1BVUCAiIgoJQkVHSU4KCQlNRU5VSVRFTSAiJkFubnVsZXIiLCBFTV9VTkRPCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkNvdXBlJnIiLCBXTV9DVVQKCQlNRU5VSVRFTSAiJkNvcGllciIsIFdNX0NPUFkKCQlNRU5VSVRFTSAiQyZvbGxlciIsIFdNX1BBU1RFCgkJTUVOVUlURU0gIkUmZmZhY2VyIiwgV01fQ0xFQVIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiVG91dCAmc+lsZWN0aW9ubmVyIiwgRU1fU0VUU0VMCglFTkQKfQoKTVNHQk9YIERJQUxPRyAxMDAsIDgwLCAyMTYsIDE2OApTVFlMRSBEU19TWVNNT0RBTCB8IERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpCRUdJTgogICAgICAgIElDT04gIiIsIDEwODgsIDgsIDIwLCAxNiwgMTYsIFdTX0NISUxEIHwgV1NfVklTSUJMRQogICAgICAgIExURVhUICIiLCAxMDAsIDMyLCA0LCAxNzYsIDQ4LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUAogICAgICAgIFBVU0hCVVRUT04gIiZPayIsIDEsIDE2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJkFubnVsZXIiLCAyLCA2NCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZBbm51bGVyIiwgMywgMTEyLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJlLpcOl0ZXIiLCA0LCAxNjAsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImSWdub3JlciIsIDUsIDIwOCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZPdWkiLCA2LCAyNTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImTm9uIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCkVORAoKTURJX01PUkVXSU5ET1dTIERJQUxPRyBGSVhFRCBJTVBVUkUgMjAsIDIwLCAyMzIsIDEyMgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJT6WxlY3Rpb24gZGUgZmVu6nRyZSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTElTVEJPWCAgICAgICAgIE1ESV9JRENfTElTVEJPWCwgNSwgNywgMjIyLCA5MCwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgLyogZGVmaW5lZCBpbiBtZGkuaCAqLwogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIElET0ssIDc1LCAxMDAsIDM1LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICJBbm51bGVyIiwgSURDQU5DRUwsIDEyMCwgMTAwLCAzNSwgMTQKRU5ECgoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSURTX0VSUk9SICJFcnJldXIiCiAgICBJRFNfTURJX01PUkVXSU5ET1dTICImUGx1cyBkZSBmZW7qdHJlcy4uLiIKfQo=