LyoKICogTm90ZXBhZCAoU2xvdmVuaWFuIHJlc291cmNlcykKICoKICogQ29weXJpZ2h0IDIwMDIgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX0RFRkFVTFQKewogUE9QVVAgIiZEYXRvdGVrYSIgewogIE1FTlVJVEVNICImTm92YSIsICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIiZPZHByaSAuLi4iLCAgICAgICAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImU2hyYW5pIiwgICAgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiU2hyYW5pICZrb3QgLi4uIiwgICAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiTmEmdGlzbmkiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJQJnJpcHJhdmEgc3RyYW5pIC4uLiIsICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIiZUaXNrYWxuaWsgLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiSXomaG9kIiwgICAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIiZVcmVqYW5qZSIgewogIE1FTlVJVEVNICImUmF6dmVsamF2aVx0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZJenJlnmlcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImS29waXJhalx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIiZQcmlsZXBpXHRDdHJsK1YiLCAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiSXpicmkmmmlcdERlbCIsICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJJemJlcmkgJnZzZSIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIshhcy8mRGF0dW1cdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJQciZlbG9tIHZyc3RpY2UiLCAgQ01EX1dSQVAKIH0KUE9QVVAgIiZJc2thbmplIiB7CiAgTUVOVUlURU0gIiZOYWpkaSAuLi4iLCAgICAgICAgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICJOYSZkYWxqdWogaXNrYW5qZVx0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImUG9tb+giIHsKICBNRU5VSVRFTSAiJlRlbWUgcG9tb+hpIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImTmFqZGkgLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImTyBwb21v6GkiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICJJbmYmb3JtYWNpamUgLi4uIiB7CiAgIE1FTlVJVEVNICImTGljZW7obmEgcG9nb2RiYSIsICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIiZCUkVaIEdBUkFOQ0lKRSIsICAgICBDTURfTk9fV0FSUkFOVFkKICAgTUVOVUlURU0gIiZPIFdpbmUiLCAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1CkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIlByaXByYXZhIHN0cmFuaSIKQ0FQVElPTiAiUGFnZSBTZXR1cCIKewpMVEVYVCAgICAiJkdsYXZhOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MSwgICAgICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZOb2dhOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICJSb2JvdmkiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZMZXZvOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwqLyAgIDB4MTQ3LCAgICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImRGVzbm86IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZaZ29yYWo6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZTcG9kYWo6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIlYgcmVkdSIsICAgICAgICAgMHgxNTEsICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJQcmVrbGnoaSIsICAgICAweDE1MiwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJlBvbW/oIiwgICAgICAgMHgxNTMsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1NMT1ZFTklBTiwgU1VCTEFOR19ORVVUUkFMCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJTdHJhbiAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgICAgICAgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgICAiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgICAgICAgICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgICAiMjUgbW0iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGWebmljYSIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5BUEFLQSIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QT1pPUklMTyIKU1RSSU5HX0lORk8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybWFjaWphIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5laW1lbm92YW5hIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZzZSBkYXRvdGVrZSAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICJEYXRvdGVrZSB6IGJlc2VkaWxvbSAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRhdG90ZWthICclcycgamUgcHJldmVsaWthIHphIEJlbGWebmljby5cbiBcClVwb3JhYml0ZSBkcnVnIHVyZWpldmFsbmlrLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5pc3RlIHZuZXNsaSBiZXNlZGlsYS4gXApcblZuZXNpdGUgYmVzZWRpbG8gaW4gcG9za3VzaXRlIHpub3ZhLiIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRhdG90ZWthICclcycgbmUgb2JzdGFqYS5cblxuIFwKQWxpIJ5lbGl0ZSB1c3R2YXJpdGkgbm92byBkYXRvdGVrbz8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWc2ViaW5hIGRhdG90ZWtlICclcydqZSBiaWxhIHNwcmVtZW5qZW5hLlxuXG4gXApBbGkgnmVsaXRlIHNocmFuaXRpIHNwcmVtZW1iZT8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5pIG1vZ2/oZSBuYWp0aSAnJXMnLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJOYSB2b2xqbyBuaSBkb3ZvbGogcG9tbmlsbmlrYSwgZGEgYmkgYmlsbyBtb2dv6GUgZG9rb27oYXRpIHRvIFwKb3BlcmFjaWpvLiBcbshlIGdhIJ5lbGl0ZSBzcHJvc3RpdGksIGtvbuhhanRlIGVuZWdhIGFsaSB2ZeggcHJvZ3JhbW92IGluIHBvc2t1c2l0ZSB6bm92YS4gIgoKfQo=