IC8qCiAqIENvcHlyaWdodCAyMDA0IGJ5IEtyenlzenRvZiBGb2x0bWFuCiAqIENvcHlyaWdodCAyMDA2LDIwMDcgYnkgWXVuU29uZyBId2FuZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfTkVVVFJBTApNQUlOTUVOVSBNRU5VIERJU0NBUkRBQkxFICAKQkVHSU4KICAgIFBPUFVQICLGxMDPKCZGKSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIrv1IMbEwM8oJk4pXHRDdHJsK04iLCAgICAgICAgICBJRF9GSUxFX05FVwogICAgICAgIE1FTlVJVEVNICK/rbHiKCZPKS4uLlx0Q3RybCtPIiwgICAgICBJRF9GSUxFX09QRU4KICAgICAgICBNRU5VSVRFTSAiwPrA5SgmUylcdEN0cmwrUyIsICAgICAgICAgSURfRklMRV9TQVZFCiAgICAgICAgTUVOVUlURU0gIrTZuKUgwMy4p8C4t84gwPrA5SgmQSkuLi4iLCBJRF9GSUxFX1NBVkVBUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUHJpbnQgLiAuIC5cdEN0cmwrUCIsICAgIElEX1BSSU5UCiAgICAgICAgTUVOVUlURU0gIlByaW50IHByZXZpZSZ3IC4gLiAuIiwgICAgSURfUFJFVklFVwogICAgICAgIE1FTlVJVEVNICJQYWcmZSBzZXR1cCAuIC4gLiIsICAgICAgIElEX1BSSU5UU0VUVVAKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAis6qwobHiKCZYKSIsICAgICAgICAgSURfRklMRV9FWElUCiAgICBFTkQKICAgIFBPUFVQICLG7cH9KCZFKSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIrXHtbm4rrHiKCZVKVx0Q3RybCtaIiwgICAgICAgICAgICAgICBJRF9FRElUX1VORE8KICAgICAgICBNRU5VSVRFTSAitNm9wyC9x8fgKCZSKVx0Q3RybCtZIiwgICAgICAgICAgICAgICBJRF9FRElUX1JFRE8KICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiwN+287O7seIoJlQpXHRDdHJsK1giLCAgICAgICAgICAgICAgICBJRF9FRElUX0NVVAogICAgICAgIE1FTlVJVEVNICK6ubvnKCZDKVx0Q3RybCtDIiwgICAgICAgICAgICAgICBJRF9FRElUX0NPUFkKICAgICAgICBNRU5VSVRFTSAiutm/qbPWseIoJlApXHRDdHJsK1YiLCAgICAgICAgICAgICAgSURfRURJVF9QQVNURQogICAgICAgIE1FTlVJVEVNICLB9r/sseIoJkMpXHRERUwiLCAgICAgICAgICAgICAgICAgSURfRURJVF9DTEVBUgogICAgICAgIE1FTlVJVEVNICK48LXOILyxxcMoJlMpXHRDdHJsK0EiLCAgICAgICAgIElEX0VESVRfU0VMRUNUQUxMCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsOjseIoJkYpLiAuIC5cdENydGwrRiIsICAgICAgICAgSURfRklORAogICAgICAgIE1FTlVJVEVNICK02cC9IMOjseIoJk4pXHRGMyIsICAgICAgICAgICAgICBJRF9GSU5EX05FWFQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiwNCx4iDA/L/rKCZPKSIsICAgICAgICAgICAgICAgICAgSURfRURJVF9SRUFET05MWQogICAgICAgIE1FTlVJVEVNICK89sGkILChtMkoJk0pIiwgICAgICAgICAgICAgICAgICAgSURfRURJVF9NT0RJRklFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICKx4sW4KCZFKSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAivLHFwyC/tb+qIMGkurgoJkkpIiwgICAgICAgICAgICAgSURfRURJVF9TRUxFQ1RJT05JTkZPCiAgICAgICAgICAgIE1FTlVJVEVNICK5rsDaIMf8vcQoJkYpIiwgICAgICAgICAgIElEX0VESVRfQ0hBUkZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiwaTAx7XIILmuwNq/rSDH/L3EKCZEKSIsICAgICAgICAgICBJRF9FRElUX0RFRkNIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIrTctvQgx/y9xCgmSCkiLCAgICAgICAgICAgSURfRURJVF9QQVJBRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICLF2L26xq4gvvKx4igmRykiLCAgICAgICAgICAgICAgICAgICBJRF9FRElUX0dFVFRFWFQKICAgICAgICBFTkQKICAgIEVORAogICAgUE9QVVAgIrq4seIoJlYpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAitbWxuLnZKCZUKSIsICAgICAgICBJRF9UT0dHTEVfVE9PTEJBUgogICAgICAgIE1FTlVJVEVNICLH/L3EudkoJkYpIiwgICAgICBJRF9UT0dHTEVfRk9STUFUQkFSCiAgICAgICAgTUVOVUlURU0gIrvzxcK52SgmUykiLCAgICAgIElEX1RPR0dMRV9TVEFUVVNCQVIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk9wdGlvbnMgLiAuIC4iLCAgSURfVklFV1BST1BFUlRJRVMKICAgIEVORAogICAgUE9QVVAgIsH9vu6z1rHiKCZJKSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIrOvwqW/zSC9w7CjKCZEKSAuIC4gLiIsICBJRF9EQVRFVElNRQogICAgRU5ECiAgICBQT1BVUCAix/y9xCgmTykiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICIgsK3BtiDBoSgmVSkiICAgICAgICAgICAgICAgIElEX0JVTExFVAogICAgICAgIE1FTlVJVEVNICImRm9udCAuIC4gLiIsICAgICAgICAgICAgICAgSURfRk9OVFNFVFRJTkdTCiAgICAgICAgTUVOVUlURU0gIiZQYXJhZ3JhcGggLiAuIC4iICAgICAgICAgICAgICBJRF9QQVJBRk9STUFUCiAgICAgICAgTUVOVUlURU0gIiZUYWJzIC4gLiAuIiAgICAgICAgICAgICAgICAgICBJRF9UQUJTVE9QUwogICAgICAgIFBPUFVQICK56LDmKCZCKSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAivcO9usXbKCZTKVx0Q3RybCsxIiwgICAgICAgICBJRF9CQUNLXzEKICAgICAgICAgICAgTUVOVUlURU0gIrPrtvu79sC4t84oJlApXHRDdHJsKzIiLCAgICAgICAgICAgSURfQkFDS18yCiAgICAgICAgRU5ECiAgICBFTkQKICAgIFBPUFVQICImSGVscCIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZBYm91dCBXaW5lIFdvcmRwYWQiICAgICAgIElEX0FCT1VUCiAgICBFTkQKRU5ECgpJRE1fUE9QVVAgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIiIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIsDftvOzu7HiKCZUKSIsICAgICAgICAgIElEX0VESVRfQ1VUCiAgICAgICAgTUVOVUlURU0gIrq5u+coJkMpIiwgICAgICAgICAgICAgSURfRURJVF9DT1BZCiAgICAgICAgTUVOVUlURU0gIrrZv6mz1rHiKCZQKSIsICAgICAgICAgIElEX0VESVRfUEFTVEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkJ1bGxldCBwb2ludHMiICAgICAgICBJRF9CVUxMRVQKICAgICAgICBNRU5VSVRFTSAiJlBhcmFncmFwaCAuIC4gLiIgICAgICBJRF9QQVJBRk9STUFUCiAgICBFTkQKRU5ECgpJRERfREFURVRJTUUgRElBTE9HIERJU0NBUkRBQkxFIDMwLCAyMCwgMTMwLCA4MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAis6/Cpb/NIL3DsKMiCkZPTlQgMTAsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogICAgTFRFWFQgICAgICAgICKwobTJx9Egx/y9xCIsMCwzLDIsMTAwLDE1CiAgICBMSVNUQk9YICAgICAgSURDX0RBVEVUSU1FLDMsMTIsODAsNjUsTEJTX05PSU5URUdSQUxIRUlHSFQKICAgIFBVU0hCVVRUT04gICAiyK7AzigmTykiLElET0ssODcsMTIsNDAsMTIKICAgIFBVU0hCVVRUT04gICAiw+u80igmQykiLElEQ0FOQ0VMLDg3LDI2LDQwLDEyCkVORAoKSUREX05FV0ZJTEUgRElBTE9HIERJU0NBUkRBQkxFIDMwLCAyMCwgMTQwLCA4MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiu/Ugua68rSIKRk9OVCAxMCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgIrv1ILmuvK0gx/y9xCIsMCwzLDIsMTAwLDE1CiAgICBMSVNUQk9YICAgICAgSURDX05FV0ZJTEUsMywxMiw5MCw2NSxMQlNfTk9JTlRFR1JBTEhFSUdIVAogICAgUFVTSEJVVFRPTiAgICLIrsDOKCZPKSIsSURPSyw5NywxMiw0MCwxMgogICAgUFVTSEJVVFRPTiAgICLD67zSKCZDKSIsSURDQU5DRUwsOTcsMjYsNDAsMTIKRU5ECgpJRERfUEFSQUZPUk1BVCBESUFMT0cgRElTQ0FSREFCTEUgMzAsIDIwLCAyMDAsIDExMApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ2FwdGlvbiAiUGFyYWdyYXBoIGZvcm1hdCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgR1JPVVBCT1ggIkluZGVudGF0aW9uIiwgMCwgMTAsIDEwLCAxMjAsIDY4CiAgICBMVEVYVCAiTGVmdCIsIDAsIDE1LCAyMiwgNDAsIDEzCiAgICBFRElUVEVYVCBJRENfUEFSQV9MRUZULCA1NSwgMjAsIDYwLCAxMwogICAgTFRFWFQgIlJpZ2h0IiwgMCwgMTUsIDQwLCA0MCwgMTMKICAgIEVESVRURVhUIElEQ19QQVJBX1JJR0hULCA1NSwgMzgsIDYwLCAxMwogICAgTFRFWFQgIkZpcnN0IGxpbmUiLCAwLCAxNSwgNTgsIDQwLCAxMwogICAgRURJVFRFWFQgSURDX1BBUkFfRklSU1QsIDU1LCA1NiwgNjAsIDEzCiAgICBMVEVYVCAiQWxpZ25tZW50IiwgMCwgMTUsIDg3LCA0MCwgMTMKICAgIENPTUJPQk9YIElEQ19QQVJBX0FMSUdOLCA1NSwgODUsIDYwLCAxMywgQ0JTX0RST1BET1dOTElTVAogICAgUFVTSEJVVFRPTiAiJk9LIiwgSURPSywgMTM3LCAxNSwgNTAsIDE1CiAgICBQVVNIQlVUVE9OICImQ2FuY2VsIiwgSURDQU5DRUwsIDEzNywgMzMsIDUwLCAxNQpFTkQKCklERF9UQUJTVE9QUyBESUFMT0cgRElTQ0FSREFCTEUgMzAsIDIwLCAyMDAsIDExMApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ2FwdGlvbiAiVGFicyIKRk9OVCA4LCAiTVMgU0hlbGwgRExnIgpCRUdJTgogICAgR1JPVVBCT1ggIlRhYiBzdG9wcyIsIDAsIDEwLCAxMCwgMTIwLCA5MAogICAgQ09NQk9CT1ggSURDX1RBQlNUT1BTLCAyMCwgMjAsIDEwMCwgNjAsIENCU19TSU1QTEUgfCBDQlNfU09SVAogICAgREVGUFVTSEJVVFRPTiAiJkFkZCIsIElEX1RBQl9BREQsIDIwLCA4MCwgNDUsIDE1CiAgICBQVVNIQlVUVE9OICImUmVtb3ZlIiwgSURfVEFCX0RFTCwgNzIsIDgwLCA0NSwgMTUKICAgIFBVU0hCVVRUT04gIiZPSyIsIElET0ssIDEzNywgMTUsIDUwLCAxNQogICAgUFVTSEJVVFRPTiAiJkNhbmNlbCIsIElEQ0FOQ0VMLCAxMzcsIDMzLCA1MCwgMTUKICAgIFBVU0hCVVRUT04gIlJlbW92ZSBhbCZsIiwgSURfVEFCX0VNUFRZLCAxMzcsIDUxLCA1MCwgMTUKRU5ECgpJRERfRk9STUFUT1BUUyBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjgwLCAxMTAKU1RZTEUgRFNfU1lTTU9EQUwKQ2FwdGlvbiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBHUk9VUEJPWCAiTGluZSB3cmFwcGluZyIsIDAsIDEwLCAxMCwgMTMwLCA4NQogICAgUkFESU9CVVRUT04gIldyYXAgdGV4dCBieSB0aGUgJndpbmRvdyBib3JkZXIiLCBJRENfUEFHRUZNVF9XVywgMTgsIDI1LCAxMTcsIDE1CiAgICBSQURJT0JVVFRPTiAiV3JhcCB0ZXh0IGJ5IHRoZSAmbWFyZ2luIiwgSURDX1BBR0VGTVRfV00sIDE4LCA0NSwgMTE3LCAxNQogICAgR1JPVVBCT1ggIlRvb2xiYXJzIiwgMCwgMTUwLCAxMCwgMTIwLCA4NQogICAgQ0hFQ0tCT1ggIiZUb29sYmFyIiwgSURDX1BBR0VGTVRfVEIsIDE2MCwgMjAsIDgwLCAxNQogICAgQ0hFQ0tCT1ggIiZGb3JtYXRiYXIiLCBJRENfUEFHRUZNVF9GQiwgMTYwLCAzOCwgODAsIDE1CiAgICBDSEVDS0JPWCAiJlN0YXR1c2JhciIsIElEQ19QQUdFRk1UX1NCLCAxNjAsIDU2LCA4MCwgMTUKICAgIExURVhUICIiLCBJRENfUEFHRUZNVF9JRCwgMCwwLDAsMApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBTVFJJTkdfUklDSFRFWFRfRklMRVNfUlRGLCAgICAgIriuxKEgxdi9usauIMbEwM/H/L3EICgqLnJ0ZikiCiAgICBTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgIsXYvbrGriDGxMDPICgqLnR4dCkiCiAgICBTVFJJTkdfVEVYVF9GSUxFU19VTklDT0RFX1RYVCwgIsCvtM/E2rXlIMXYvbrGriC5rrytKCoudHh0KSIKICAgIFNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAiuPC15yC5rrytICgqLiopIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBTVFJJTkdfQUxJR05fTEVGVCwgICAgICAgICAgICAiTGVmdCIKICAgIFNUUklOR19BTElHTl9SSUdIVCwgICAgICAgICAgICJSaWdodCIKICAgIFNUUklOR19BTElHTl9DRU5URVIsICAgICAgICAgICJDZW50ZXIiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFNUUklOR19QUklOVEVSX0ZJTEVTX1BSTiwgICAgICAgICJQcmludGVyIGZpbGVzICgqLlBSTikiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFNUUklOR19WSUVXUFJPUFNfVElUTEUsICAgICAgICAgICJPcHRpb25zIgogICAgU1RSSU5HX1ZJRVdQUk9QU19URVhULCAgICAgICAgICAgIlRleHQiCiAgICBTVFJJTkdfVklFV1BST1BTX1JJQ0hURVhULCAgICAgICAiUmljaCB0ZXh0IgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBTVFJJTkdfUFJFVklFV19QUklOVCwgICAgICAgICAgICAiUHJpbnQiCiAgICBTVFJJTkdfUFJFVklFV19ORVhUUEFHRSwgICAgICAgICAiTmV4dCBwYWdlIgogICAgU1RSSU5HX1BSRVZJRVdfUFJFVlBBR0UsICAgICAgICAgIlByZXZpb3VzIHBhZ2UiCiAgICBTVFJJTkdfUFJFVklFV19DTE9TRSwgICAgICAgICAgICAiQ2xvc2UiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFNUUklOR19VTklUU19DTSwgICAgICAgICAgICAgImNtIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBTVFJJTkdfREVGQVVMVF9GSUxFTkFNRSwgICAgICK5rrytIgogICAgU1RSSU5HX1BST01QVF9TQVZFX0NIQU5HRVMsICAiJyVzJ8DHILnZsu8gsM3AuyDA+sDlx8+w2r3AtM+x7j8iCiAgICBTVFJJTkdfU0VBUkNIX0ZJTklTSEVELCAgICAgICK5rrytv6G8rSDDo7HiILOhLiIKICAgIFNUUklOR19MT0FEX1JJQ0hFRF9GQUlMRUQsICAgIriuxKHF2L26xq4gtvPAzLrqt6+4riC60revv8Cx4iC9x8bQLiIKICAgIFNUUklOR19TQVZFX0xPU0VGT1JNQVRUSU5HLCAgIrTnvcXAuiC6uMXrIMXYvbrGriDH/L3EwLi3ziDA+sDlx8+x4rimILyxxcPH373AtM+02SwgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLAzLDNwLogxq+89sfRILLZudLAuyC++L+kILDNwNS0z7TZLiAiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIrTnvcXAuiDBpLi7t84gwPrA5cfPseK4piC/+MfVtM+x7j8iCiAgICBTVFJJTkdfSU5WQUxJRF9OVU1CRVIsICAgICAgICJJbnZhbGlkIG51bWJlciBmb3JtYXQiCkVORAo=