LyoKICogIE5vdGVwYWQgKER1dGNoIHJlc291cmNlcykKICoKICogIENvcHlyaWdodCAyMDAzIEhhbnMgTGVpZGVra2VyCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJub3RlcGFkX3Jlcy5oIgoKTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ORVVUUkFMCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkJlc3RhbmQiIHsKICBNRU5VSVRFTSAiJk5pZXV3IiwJCSAgICAgQ01EX05FVwogIE1FTlVJVEVNICImT3BlbmVuLi4uXHRDdHJsK08iLAkgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIk8mcHNsYWFuXHRDdHJsK1MiLAkgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIk9wcyZsYWFuIGFscy4uLiIsCSAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFmZHJ1a2tlbi4uLlx0Q3RybCtQIiwJICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiUGFnaW5hLWluJnN0ZWxsaW5nLi4uIiwgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIlByaW50ZXJpbnN0ZWxsaW5nZW4uLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWZzbHVpdGVuIiwgICAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIkJlJndlcmtlbiIgewogIE1FTlVJVEVNICImT25nZWRhYW4gbWFrZW5cdEN0cmwrWiIsICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIksmbmlwcGVuXHRDdHJsK1giLCAgICAgICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImS29waetyZW5cdEN0cmwrQyIsICAgICAgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIiZQbGFra2VuXHRDdHJsK1YiLCAgICAgICAgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZWZXJ3aWpkZXJlblx0RGVsIiwgICAgICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWxsZXMgc2VsZWN0ZXJlblx0Q3RybCtBIiwgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIlRpamQvJmRhdHVtXHRGNSIsICAgICAgICAgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJBJnV0b21hdGlzY2hlIHRlcnVnbG9vcCIsICAgIENNRF9XUkFQCiAgTUVOVUlURU0gIiZMZXR0ZXJ0eXBlIGluc3RlbGxlbi4uLiIsICAgQ01EX0ZPTlQKIH0KUE9QVVAgIiZab2VrZW4iIHsKICBNRU5VSVRFTSAiJlpvZWtlbi4uLlx0Q3RybCtaIiwgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICJWJm9sZ2VuZGUgem9la2VuXHRGMyIsICBDTURfU0VBUkNIX05FWFQKICBNRU5VSVRFTSAiJlZlcnZhbmdlbi4uLlx0Q3RybCtIIiwgQ01EX1JFUExBQ0UKIH0KUE9QVVAgIiZIZWxwIiB7CiAgTUVOVUlURU0gIiZIZWxwLW9uZGVyd2VycGVuIiwgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZab2VrZW4uLi4iLCAgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImSHVscCBiaWogSGVscCIsICAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZPdmVyIE5vdGVwYWQiLCBDTURfSEVMUF9BQk9VVF9OT1RFUEFECiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiUGFnaW5hLWluc3RlbGxpbmciCnsKTFRFWFQgICAgIiZLb3B0ZWtzdDoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlZvZXR0ZWtzdDoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIiZNYXJnZXMgKG1pbGxpbWV0ZXIpOiIsICAweDE0NCwgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICJMaSZua3M6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCb3ZlbjoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImUmVjaHRzOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJk9uZGVyOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgIElET0ssICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXJlbiIsIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImSGVscCIsICAgICBJREhFTFAsICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KCklERF9PRk5fVEVNUExBVEUgIERJQUxPRyAgRElTQ0FSREFCTEUgNTAsNTAsMzAwLDE1ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfCBXU19CT1JERVIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogIExURVhUICJDb2RlcmluZzoiLCAtMSwgNSwwLCA1MCwxMgogIENPTUJPQk9YIElEQ19PRk5fRU5DQ09NQk8sIDUzLDAsIDE1Niw0OCwgV1NfQ0hJTEQgfCBXU19WU0NST0xMIHwgQ0JTX0RST1BET1dOTElTVApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJmYiClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlBhZ2luYSAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLbGFkYmxvayIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZPVVQiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXQUFSU0NIVVdJTkciClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hdGllIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihuYWFtbG9vcykiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSBiZXN0YW5kZW4gKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICJUZWtzdGJlc3RhbmRlbiAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhldCBiZXN0YW5kICclcycgaXMgdGUgZ3Jvb3Qgdm9vciBLbGFkYmxvay5cbiBcCkdlYnJ1aWsgZWVuIGFuZGVyZSBlZGl0b3IuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVSBoZWVmdCBnZWVuIHRla3N0IGluZ2V2b2VyZC4gXApcblR5cGUgdXcgdGVrc3QgZW4gcHJvYmVlciBoZXQgbm9nbWFhbHMiClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZXQgYmVzdGFuZCAnJXMnXG5iZXN0YWF0IG5pZXRcblxuIFwKV2lsdCB1IGVlbiBuaWV1dyBiZXN0YW5kIG1ha2VuPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhldCBiZXN0YW5kICclcydcbmlzIGdld2lqemlnZFxuXG4gXApXaWx0IHUgZGUgd2lqemlnaW5nZW4gb3BzbGFhbj8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGthbiBuaWV0IHdvcmRlbiBnZXZvbmRlbi4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbnZvbGRvZW5kZSBnZWhldWdlbi4gXApcblNsdWl0IGVlbiBvZiBtZWVyIGFwcGxpY2F0aWVzIG9tIGRlIGhvZXZlZWxoZWlkXG5iZXNjaGlrYmFhciBnZWhldWdlbiB0ZSB2ZXJncm90ZW4uIgoKU1RSSU5HX1VOSUNPREVfTEUsICAgICAiVW5pY29kZSAoVVRGLTE2KSIKU1RSSU5HX1VOSUNPREVfQkUsICAgICAiVW5pY29kZSAoVVRGLTE2IGJpZy1lbmRpYW4pIgoKU1RSSU5HX0xPU1NfT0ZfVU5JQ09ERV9DSEFSQUNURVJTLCAgICAgICAgICIlc1xuXApEaXQgYmVzdGFuZCBiZXZhdCBVbmljb2RlIHRla2VucyB3ZWxrZSB2ZXJsb3JlbiB6dWxsZW4gZ2FhblxuXAphbHMgZGl0IGJlc3RhbmQgd29yZHQgb3BnZXNsYWdlbiBpbiBkZSAlcyBjb2RlcmluZy5cblwKT20gZGV6ZSB0ZWtlbnMgdGUgYmVob3VkZW4sIGtsaWt0IHUgb3AgQW5udWxlcmVuIGVuIHNlbGVjdGVlcnRcblwKZGFhcm5hIGVlbiB2YW4gZGUgVW5pY29kZS1vcHRpZXMgaW4gZGUgQ29kZXJpbmcga2V1emVsaWpzdC5cblwKV2lsdCB1IGRvb3JnYWFuPyIKfQo=