LyoKICogUmVnZWRpdCAoUnVzc2lhbiByZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAzIElnb3IgU3RlcGluCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgovKgogKiBNZW51CiAqLwoKSURDX1JFR0VESVQgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIibU4OnrIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiwib76fLoIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIibR7/Dg4urgIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJs4g7/Du4/Dg7OzlIiwgICAgICAgICAgICAgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgpJRFJfUkVHRURJVF9NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICIm0OXl8fLwIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJsjs7+7w8ujw7uLg8vwg9ODp6yDw5eXx8vDgLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIibd6vHv7vDy6PDu4uDy/CD04OnrIPDl5fHy8OAuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJs/u5Orr/vfo8vwg8eXy5eLu6SDw5eXx8vAuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiJs7y6uv+9+jy/CDx5fLl4u7pIPDl5fHy8C4uLiIsICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJs3g7+X34PLg8vxcdEN0cmwrUCIsICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9QUklOVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsIm++ny6CIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImz/Dg4urgIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJsjn7OXt6PL8IiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICLR7ufkJuDy/CIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiyusm/vciLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIibR8vDu6u7i7uUg5+3g9+Xt6OUiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImwejt4PDt7uUg5+3g9+Xt6OUiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImRFdPUkQg5+3g9+Xt6OUiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibT5ODr6PL8XHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICImz+Xw5ejs5e3u4uDy/Fx0RjIiLCAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAi0Sbq7u/o8O7i4PL8IOjs/yDq6/734CIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibN4Ony6Fx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICLN4Ony6CAm5ODr5eVcdEYzIiwgICAgICAgICAgICAgIElEX0VESVRfRklORE5FWFQsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiJsLo5CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gItHy8O7q4CAm8e7x8u7/7ej/IiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibQ4Ofk5evo8vwiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibO4e3u4ujy/Fx0RjUiLCAgICAgICAgICAgICAgICBJRF9WSUVXX1JFRlJFU0gKICAgIEVORAogICAgUE9QVVAgIibI5+Hw4O3t7uUiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImxO7h4OLo8vwg4iDo5+Hw4O3t7uUiLCAgICAgICAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMKICAgICAgICAsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICIm0+Tg6+jy/CDo5yDo5+Hw4O3t7uPuIiwgICAgICAgICAgIElEX0ZBVk9SSVRFU19SRU1PVkVGQVZPUklURQogICAgICAgICwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICIm0e/w4OLq4CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibR7uTl8Obg7ejlIiwgICAgICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibOIPDl5ODq8u7w5SDw5eXx8vDgIiwgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0FCT1VUQk9YIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMzAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLOIO/w7uPw4Ozs5SIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgSUNPTiAgICAgICAgICAgIElESV9SRUdFRElULElESV9SRUdFRElULDE0LDksMTYsMTYKICAgIExURVhUICAgICAgICAgICAi0OXk4Ory7vAg8OXl8fLw4CBSZWFjdE9TLiDC5fDx6P8gMS4wIixJRENfU1RBVElDLDQ5LDEwLDExOSw4LAogICAgICAgICAgICAgICAgICAgIFNTX05PUFJFRklYCiAgICBMVEVYVCAgICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwMiDK7uzg7eTgIFJlYWN0T1MiLElEQ19TVEFUSUMsNDksMjAsMTE5LDgKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTk1LDYsMzAsMTEsV1NfR1JPVVAKRU5ECgovKgogKiBTdHJpbmcgVGFibGUKICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0xJU1RfQ09MVU1OX05BTUUgICAgIsjs/yIKICAgIElEU19MSVNUX0NPTFVNTl9UWVBFICAgICLS6O8iCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAixODt7fvlIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAi0OXk4Ory7vAg8OXl8fLw4CIKICAgIElEQ19SRUdFRElUICAgICAgICAgICAgICJSRUdFRElUIgogICAgSURDX1JFR0VESVRfRlJBTUUgICAgICAgIlJFR0VESVRfRlJBTUUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDw4OHu8vsg8SDw5ePo8fLw7uwg4iD25evu7CIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDw5eTg6vLo8O7i4O3o/yDn7eD35e3o6SDo6+gg6uv+9+XpIgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgItHu5OXw5ujyIOru7ODt5Psg5Ov/IO3g8fLw7unq6CDu6u3gIPDl5fHy8OAiCiAgICBJRF9GQVZPUklURVNfTUVOVSAgICAgICAi0e7k5fDm6PIg6u7s4O3k+yDk6/8g5O7x8vPv4CDqIPfg8fLuIOjx7+7r/Ofz5ez77CDq6/734OwiCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAi0e7k5fDm6PIg6u7s4O3k+yDk6/8g7vLu4fDg5uXt6P8g8e/w4OLq6CDoIOjt9O7w7OD26Ogg7iDw5eTg6vLu8OUg8OXl8fLw4CIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDx7ufk4O3o/yDt7uL79SDq6/735ekg6OvoIOft4Pfl7ejpIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9FRElUX01PRElGWSAgICAgICAgICAiTW9kaWZpZXMgdGhlIHZhbHVlJ3MgZGF0YSIKICAgIElEX0VESVRfTkVXX0tFWSAgICAgICAgICLE7uHg4uv/5fIg7e7i++kg6uv+9yIKICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFICLE7uHg4uv/5fIg7e7i7uUg8fLw7uru4u7lIOft4Pfl7ejlIgogICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUgIsTu4eDi6//l8iDt7uLu5SDh6O3g8O3u5SDn7eD35e3o5SIKICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUgICLE7uHg4uv/5fIg7e7i7uUgRFdPUkQt5+3g9+Xt6OUiCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIsjs7+7w8ujw8+XyIPLl6vHy7uLu6SD04OnrIOIg8OXl8fLwIgogICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAi3erx7+7w8ujw8+XyIOLl8fwg8OXl8fLwIOjr6CDl4+4g9+Dx8vwg4iDy5erx8u7i7ukg9ODp6yIKICAgIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICLP7uTq6/734OXy8f8g6iDw5eXx8vDzIPPk4Ou47e3u4+4g6u7s7/z+8uXw4CIKICAgIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICLO8urr/vfg5fLx/yDu8iDw5eXx8vDgIPPk4Ou47e3u4+4g6u7s7/z+8uXw4CIKICAgIElEX1JFR0lTVFJZX1BSSU5UICAgICAgICLP5ffg8uDl8iDi5fH8IPDl5fHy8CDo6+gg5ePuIPfg8fL8IgovKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT3BlbnMgcmVnaXN0cnkgZWRpdG9yIGhlbHAiICovCiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAizvLu4fDg5uDl8iDo7fTu8Ozg9uj+IO4g7/Du4/Dg7OzlLCDt7uzl8CDi5fDx6Ogg6CDx7+jx7uog4OLy7vDu4iIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfRVhJVCAgICAgICAgIsL79e7kIOjnIPDl5ODq8u7w4CDw5eXx8vDgIgogICAgSURfRkFWT1JJVEVTX0FERFRPRkFWT1JJVEVTICLE7uHg4ujy/CDq6/73IOIg6Ofh8ODt7e7lIgogICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFICLT5ODr6PL8IOrr/vcg6Ocg6Ofh8ODt7e7j7iIKICAgIElEX1ZJRVdfU1RBVFVTQkFSICAgICAgICLP7urg5+Dy/CDo6+gg8erw+/L8IPHy8O7q8yDx7vHy7v/t6P8iCiAgICBJRF9WSUVXX1NQTElUICAgICAgICAgICAiyOfs5e3o8vwg7+7n6Pbo/iDw4Ofk5evo8uXr/yDs5ebk8yDk4vPs/yDv4O3l6//s6CIKICAgIElEX1ZJRVdfUkVGUkVTSCAgICAgICAgICLO4e3u4uv/5fIg7urt7iIKICAgIElEX0VESVRfREVMRVRFICAgICAgICAgICLT5ODr/+XyIOL75OXr5e3o5SIKICAgIElEX0VESVRfUkVOQU1FICAgICAgICAgICLP5fDl6Ozl7e7i++Lg5fIg4vvk5evl7ejlIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIsru7+jw8+XyIOjs/yDi++Tl6+Xt7e7j7iDq6/734CDiIOHz9OXwIO7h7OXt4CIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICLI+eXyIPLl6vHy7uLz/iDx8vDu6vMg4iDq6/735Swg5+3g9+Xt6Ogg6OvoIOTg7e379SIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICLI+eXyIPHr5eTz/vnl5SDx7uLv4OTl7ejlIPLl6vHy4Cwg5+Dk4O3t7uPuIOIg7/Dl5Pvk8/nl7CDv7ujx6uUiCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qCiAqIERpYWxvZwogKi8KCklERF9ESUFMT0cxIERJQUxPRyBESVNDQVJEQUJMRSAgNTAsIDUwLCAyNjgsIDk4ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfAogICAgV1NfQk9SREVSCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KRU5ECgpJRERfRElBTE9HMiBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE4NywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAixOjg6+7jIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDEzMCw3LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIs7y7OXt4CIsSURDQU5DRUwsMTMwLDI0LDUwLDE0CkVORAoKCi8qCiAqIFRFWFRJTkNMVURFCiAqLwoKMSBURVhUSU5DTFVERSBESVNDQVJEQUJMRQpCRUdJTgogICAgInJlc291cmNlLmhcMCIKRU5ECgoKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KCi8qCiAqU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKICpCRUdJTgogKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT3BlbnMgUmVnaXN0cnkgRWRpdG9yIEhlbHAuIgogKiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiRGlzcGxheXMgcHJvZ3JhbSBpbmZvcm1hdGlvbiwgdmVyc2lvbiBudW1iZXIsIGFuZCBjb3B5cmlnaHQuIgogKkVORAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K