LyoKICogQ29weXJpZ2h0IDIwMDcgVml0YWx5IExpcGF0b3YgZm9yIEV0ZXJzb2Z0CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgpVSUlOU0VSVE9CSkVDVCBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI5NCwgMTUxClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIsLx8uDi6PL8IO7h+uXq8iIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTElTVEJPWCAgICAgICAgIElEQ19PQkpUWVBFTElTVCw4MiwxOSwxMzEsNjYsTEJTX1NPUlQgfAogICAgICAgICAgICAgICAgICAgIExCU19OT0lOVEVHUkFMSEVJR0hUIHwgV1NfVklTSUJMRSB8IFdTX1ZTQ1JPTEwgfAogICAgICAgICAgICAgICAgICAgIFdTX1RBQlNUT1AKICAgIExURVhUICAgICAgICAgICAi0ujvIO7h+uXq8uA6IixJRENfT0JKVFlQRUxCTCw4Miw3LDUzLDgsV1NfVklTSUJMRQogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywyMjEsNyw2NiwxNAogICAgUFVTSEJVVFRPTiAgICAgICLO8uzl7eAiLElEQ0FOQ0VMLDIyMSwyNCw2NiwxNAogICAgR1JPVVBCT1ggICAgICAgICLQ5efz6/zy4PIiLElEQ19SRVNVTFQsNywxMDMsMjA4LDQxCiAgICBDT05UUk9MICAgICAgICAgItHu5+Tg8vwg7e7i++kiLElEQ19DUkVBVEVORVcsIkJ1dHRvbiIsQlNfQVVUT1JBRElPQlVUVE9OIHwKICAgICAgICAgICAgICAgICAgICBXU19HUk9VUCw3LDIwLDYyLDEwCiAgICBDT05UUk9MICAgICAgICAgItHu5+Tg8vwg/evl7OXt8iDz7/Dg4uvl7ej/IixJRENfQ1JFQVRFQ09OVFJPTCwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPUkFESU9CVVRUT04gfCBOT1QgV1NfVklTSUJMRSw3LDU0LDYyLDEwCiAgICBDT05UUk9MICAgICAgICAgItHu5+Tg8vwg6Ocg9ODp6+AiLElEQ19DUkVBVEVGUk9NRklMRSwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPUkFESU9CVVRUT04sNywzNyw2NywxMAogICAgTFRFWFQgICAgICAgICAgICIiLElEQ19SRVNVTFRERVNDLDQ5LDExMiwxNTksMjMKICAgIFBVU0hCVVRUT04gICAgICAiJsTu4eDi6PL8IP3r5ezl7fIg8+/w4OLr5e3o/y4uLiIsSURDX0FERENPTlRST0wsODEsODgsNjMsMTQsTk9UIFdTX1ZJU0lCTEUKICAgIENPTlRST0wgICAgICAgICAiRGlzcGxheSBBcyBJY29uIixJRENfQVNJQ09OLCJCdXR0b24iLEJTX0FVVE9DSEVDS0JPWCB8CiAgICAgICAgICAgICAgICAgICAgV1NfVEFCU1RPUCB8IE5PVCBXU19WSVNJQkxFLDIyMyw1OCw2NCwxMAogICAgUFVTSEJVVFRPTiAgICAgICLC++Hw4PL8Li4uIixJRENfQlJPV1NFLDgzLDUzLDUwLDE0LE5PVCBXU19WSVNJQkxFCiAgICBMVEVYVCAgICAgICAgICAgItTg6es6IixJRENfRklMRUxCTCw4MywyNywyMCw4LCBOT1QgV1NfVklTSUJMRQogICAgRURJVFRFWFQgICAgICAgIElEQ19GSUxFLDgzLDM3LDEzMiwxMyxFU19BVVRPSFNDUk9MTCB8IE5PVCBXU19WSVNJQkxFCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogIElEU19SRVNVTFRPQkpERVNDCSLE7uHg4uvl7ejlIO3u4u7j7iDu4frl6vLgICVzIOIg5O7q8+zl7fIiCiAgSURTX1JFU1VMVEZJTEVPQkpERVNDCSLE7uHg4uvl7ejlIO7h+uXq8uAg6Ocg9ODp6+Ag4iDk7urz7OXt8i4g0ODh7vLg8vwg8SDu4frl6vLu7CDs7ubt7iDh8+Tl8iDiIPHu5+Tg4vjl6SDl4+4g7/Du4/Dg7OzlLiIKICBJRFNfQlJPV1NFICAgICAgICAgICAgIs/w7vHs7vLwIgogIElEU19OT1RPTEVNT0QgICAgICAgICAi1ODp6yDt5SD/4uv/5fLx/yDq7vDw5ery7fvsIOzu5PPr5ewgT0xFLiDN5eLu5+zu5u3uIOfg8OXj6PHy8Ojw7uLg8vwg/evl7OXt8iDz7/Dg4uvl7ej/IE9MRS4iCiAgSURTX05PVE9MRU1PRENBUFRJT04gICLE7uHg4ujy/CD96+Xs5e3yIPPv8ODi6+Xt6P8iCn0KCklERF9QQVNURVNQRUNJQUw0IERJQUxPRyBESVNDQVJEQUJMRSAzLCAxNSwgMjkzLCAxNDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gItHv5fbo4Ov87eD/IOLx8uDi6uAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgIsjx8u737ejqOiIsIC0xLCA2LCA5LCAzMCwgOCwgV1NfVklTSUJMRSB8IFdTX0dST1VQCiAgICBDT05UUk9MICAgICAgICImwvHy4OLo8vwiLCBJRENfUFNfUEFTVEUsICJCdXR0b24iLCBCU19BVVRPUkFESU9CVVRUT04gfCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WSVNJQkxFLAogICAgICAgICAgICAgICAgICA2LCAzOCwgNTUsIDEwCiAgICBDT05UUk9MICAgICAgICLC8fLg4ujy/CAm0fH76+rzIiwgSURDX1BTX1BBU1RFTElOSywgIkJ1dHRvbiIsIEJTX0FVVE9SQURJT0JVVFRPTiB8IFdTX1ZJU0lCTEUsCiAgICAgICAgICAgICAgICAgIDYsIDYzLCA1NSwgMTAKICAgIExURVhUICAgICAgICAgIibK4Oo6IiwgLTEsIDY1LCAyNSwgMTYsIDgsIFdTX1ZJU0lCTEUgfCBXU19HUk9VUAogICAgTElTVEJPWCAgICAgICBJRENfUFNfUEFTVEVMSVNULCAgICAgNjUsIDM2LCAxNTMsIDU3LCBMQlNfTk9USUZZIHwgTEJTX1VTRVRBQlNUT1BTIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUiB8IE5PVCBXU19WSVNJQkxFCiAgICBMSVNUQk9YICAgICAgIElEQ19QU19QQVNURUxJTktMSVNULCA2NSwgMzYsIDE1MywgNTcsIExCU19OT1RJRlkgfCBMQlNfVVNFVEFCU1RPUFMgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSIHwgTk9UIFdTX1ZJU0lCTEUKICAgIExJU1RCT1ggICAgICAgSURDX1BTX0RJU1BMQVlMSVNULCAgIDY1LCAzNiwgMTUzLCA1NywgTEJTX05PVElGWSB8IExCU19VU0VUQUJTVE9QUyB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WSVNJQkxFCiAgICBDT05UUk9MICAgICAgICJPSyIsIElET0ssICJCdXR0b24iLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVklTSUJMRSwgMjI0LCA2LCA2NiwgMTQKICAgIENPTlRST0wgICAgICAgIs7y7OXt4CIsIElEQ0FOQ0VMLCAiQnV0dG9uIiwgQlNfUFVTSEJVVFRPTiB8IFdTX1RBQlNUT1AgfCBXU19WSVNJQkxFLCAyMjQsIDIzLCA2NiwgMTQKICAgIENPTlRST0wgICAgICAgItEm7/Dg4urgIiwgSURDX09MRVVJSEVMUCwgIkJ1dHRvbiIsIEJTX1BVU0hCVVRUT04gfCBXU19UQUJTVE9QIHwgV1NfVklTSUJMRSwgMjI0LCA0MiwgNjYsIDE0CiAgICBDT05UUk9MICAgICAgICImz+7q4Of74uDy/CDq4Oog5+3g9+7qIiwgSURDX1BTX0RJU1BMQVlBU0lDT04sICJCdXR0b24iLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QIHwgV1NfVklTSUJMRSwgMjI0LCA1OSwgNjYsIDE0CiAgICBDT05UUk9MICAgICAgICIiLCBJRENfUFNfSUNPTkRJU1BMQVksICJTdGF0aWMiLCBTU19JQ09OIHwgV1NfVklTSUJMRSwgMjI0LCA3NSwgNjYsIDQ0CiAgICBDT05UUk9MICAgICAgICLI5+zl7ejy/CAm5+3g9+7qLi4uIiwgSURDX1BTX0NIQU5HRUlDT04sICJCdXR0b24iLCBCU19QVVNIQlVUVE9OIHwgV1NfVEFCU1RPUCB8IFdTX1ZJU0lCTEUsIDIyNCwgMTIzLCA2NiwgMTQKICAgIENPTlRST0wgICAgICAgIiIsIElEQ19QU19SRVNVTFRJTUFHRSwgIlN0YXRpYyIsIFNTX0lDT04gfCBXU19WSVNJQkxFLCA4LCAxMDEsIDQyLCAzNAogICAgQ09OVFJPTCAgICAgICAiPDwgcmVzdWx0IHRleHQgZ29lcyBoZXJlID4+IiwgSURDX1BTX1JFU1VMVFRFWFQsICJTdGF0aWMiLCBTU19OT1BSRUZJWCB8IFdTX1ZJU0lCTEUsIDU0LCAxMDAsIDE1OSwgMzUKICAgIENPTlRST0wgICAgICAgItDl5/Pr/PLg8iIsIC0xLCAiQnV0dG9uIiwgQlNfR1JPVVBCT1ggfCBXU19HUk9VUCB8IFdTX1ZJU0lCTEUsIDYsIDkwLCAyMTIsIDQ4CiAgICBDT05UUk9MICAgICAgICIiLCBJRENfUFNfU09VUkNFVEVYVCwgIkVkaXQiLCBFU19SRUFET05MWSB8IEVTX0FVVE9IU0NST0xMIHwgV1NfVklTSUJMRSwgMzcsIDksIDE4MCwgOApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19QU19QQVNURV9EQVRBICAgICAgICAgICAgICAgICAgICAgIsLx8uDi6uAg8e7k5fDm6Ozu4+4g4fP05fDgIO7h7OXt4CDiIOTu6vPs5e3yIOrg6iAlcy4iCiAgICBJRFNfUFNfUEFTVEVfT0JKRUNUICAgICAgICAgICAgICAgICAgICLC8fLg4urgIPHu5OXw5ujs7uPuIOHz9OXw4CDu4ezl7eAg4iDk7urz7OXt8iDy4OosIPfy7iDl4+4g7O7m7e4g4Ory6OLo8O7i4PL8LCDo8e/u6/zn8/8gJXMuIgogICAgSURTX1BTX1BBU1RFX09CSkVDVF9BU19JQ09OICAgICAgICAgICAiwvHy4OLq4CDx7uTl8Obo7O7j7iDh8/Tl8OAg7uHs5e3gIOIg5O7q8+zl7fIg8uDqLCD38u4g5ePuIOzu5u3uIODq8uji6PDu4uDy/Cwg6PHv7uv85/P/ICVzLiDO7SDh8+Tl8iDu8u7h8ODm4PL88f8g4iDi6OTlIOft4Pfq4C4iCiAgICBJRFNfUFNfUEFTVEVfTElOS19EQVRBICAgICAgICAgICAgICAgICLC8fLg4urgIPHu5OXw5ujs7uPuIOHz9OXw4CDu4ezl7eAg4iDk7urz7OXt8iDq4OogJXMuIMTg7e375SDh8+Tz8iDx4v/n4O37IPEg6PH17uTt++wg9ODp6+7sLCDy4Oog9/LuIOjn7OXt5e3o/yDiIO247CDh8+Tz8iDu8vDg5uDy/PH/IOIg5O7q8+zl7fLlLiIKICAgIElEU19QU19QQVNURV9MSU5LX09CSkVDVCAgICAgICAgICAgICAgIsLx8uDi6uAg6Ofu4fDg5uXt6P8g6Ocg4fP05fDgIO7h7OXt4CDiIOTu6vPs5e3yLiDI5+Hw4Obl7ejlIOHz5OXyIPHi/+fg7e4g8SDo8fXu5O377CD04Onr7uwsIPLg6iD38u4g6Ofs5e3l7ej/IOIg7bjsIOHz5PPyIO7y8ODm4PL88f8g4iDk7urz7OXt8uUuIgogICAgSURTX1BTX1BBU1RFX0xJTktfT0JKRUNUX0FTX0lDT04gICAgICAiwvHy4OLq4CDx8fvr6ugsIOru8u7w4P8g4fPk5fIg8+rg5/vi4PL8IO3gIPDg8e/u6+7m5e3o5SDx7uTl8Obo7O7j7iDh8/Tl8OAg7uHs5e3gLiDR8fvr6uAg4fPk5fIg8eL/5+Dt4CDxIOjx9e7k7fvsIPTg6evu7Cwg8uDqIPfy7iDo5+zl7eXt6P8g4iDtuOwg4fPk8/Ig7vLw4Obg8vzx/yDiIOTu6vPs5e3y5S4iCiAgICBJRFNfUFNfTk9OX09MRSAgICAgICAgICAgICAgICAgICAgICAgICLC8fLg4urgIPHu5OXw5ujs7uUg4fP05fDgIO7h7OXt4CDiIOTu6vPs5e3yLiIKICAgIElEU19QU19VTktOT1dOX1RZUEUgICAgICAgICAgICAgICAgICAgIs3l6Ofi5fHy7fvpIPLo7yIKICAgIElEU19QU19VTktOT1dOX1NSQyAgICAgICAgICAgICAgICAgICAgIs3l6Ofi5fHy7fvpIOjx8u737ejqIgogICAgSURTX1BTX1VOS05PV05fQVBQICAgICAgICAgICAgICAgICAgICAi7/Du4/Dg7OzgLCDq7vLu8OD/IOXj7iDx7ufk4OvgIgp9Cg==