diff --git a/blockapi/__init__.py b/blockapi/__init__.py index 3e2e17f1..31c3d04d 100644 --- a/blockapi/__init__.py +++ b/blockapi/__init__.py @@ -1,4 +1,3 @@ -import inspect import random import coinaddrng diff --git a/blockapi/test/v2/api/perpetual/__init__.py b/blockapi/test/v2/api/perpetual/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/blockapi/test/v2/api/perpetual/test_perpetual.py b/blockapi/test/v2/api/perpetual/test_perpetual.py deleted file mode 100644 index afff7755..00000000 --- a/blockapi/test/v2/api/perpetual/test_perpetual.py +++ /dev/null @@ -1,94 +0,0 @@ -import os - -import pytest -from _decimal import Decimal - -from blockapi.v2.api import PerpetualApi, perp_contract_address -from blockapi.v2.base import ApiException -from blockapi.v2.models import FetchResult - - -@pytest.fixture -def perp_api(): - return PerpetualApi('http://localhost:2048/') - - -test_address = '0x134089B387E22f52b1e06CC80d9a5F622032EF74' - - -@pytest.mark.skip( - reason='metadata.perp.exchange/production.json returns 404 — upstream endpoint is offline' -) -def test_perp_contract_address(): - contract = perp_contract_address('PERP') - assert contract == '0xbC396689893D065F41bc2C6EcbeE5e0085233447' - - -@pytest.mark.skip( - reason='metadata.perp.exchange/production.json returns 404 — upstream endpoint is offline' -) -def test_perp_invalid_contract_raises(): - with pytest.raises(ValueError, match='Invalid contract name.'): - perp_contract_address("abc") - - -def test_perp_has_coin(perp_api): - assert perp_api.coin.symbol == 'PERP' - - -def filter_infura_key(request): - if 'infura.io' in request.host: - request.uri = 'https://mainnet.infura.io/v3/API_KEY_FILTERED' - return request - - -@pytest.mark.integration -@pytest.mark.skip( - reason='metadata.perp.exchange/production.json returns 404 — upstream endpoint is offline' -) -def test_fetch(): - key = os.environ.get('INFURA_API_KEY') - api = PerpetualApi(f'https://mainnet.infura.io/v3/{key}') - raw = api.fetch_balances(test_address) - assert raw.data - - -@pytest.mark.integration -@pytest.mark.skip( - reason='metadata.perp.exchange/production.json returns 404 — upstream endpoint is offline' -) -def test_fetch_error(): - api = PerpetualApi(f'https://mainnet.infura.io/v3/no-key') - raw = api.fetch_balances(test_address) - assert raw.status_code == 401 - assert ( - raw.errors[0] - == '401 Client Error: Unauthorized for url: https://mainnet.infura.io/v3/no-key' - ) - - -@pytest.mark.skip( - reason='metadata.perp.exchange/production.json returns 404 — upstream endpoint is offline' -) -def test_fetch_error_raises_from_get_balances(): - api = PerpetualApi(f'https://mainnet.infura.io/v3/no-key') - with pytest.raises(ApiException) as exc: - api.get_balance(test_address) - - assert exc.match('401 Client Error: Unauthorized for url') - - -def test_parse(perp_api): - raw = FetchResult( - status_code=200, - data=dict( - staking_claimable='1.10', - vesting_claimable='2.02', - vesting_locked='3.30', - ), - ) - - parsed = perp_api.parse_balances(raw) - - assert parsed.data[0].balance == Decimal('3.12') - assert parsed.data[1].balance == Decimal('3.30') diff --git a/blockapi/test/v2/api/synthetix/__init__.py b/blockapi/test/v2/api/synthetix/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/blockapi/test/v2/api/synthetix/cassettes/test_synthetix_optimism_api.yaml b/blockapi/test/v2/api/synthetix/cassettes/test_synthetix_optimism_api.yaml deleted file mode 100644 index 52a162fe..00000000 --- a/blockapi/test/v2/api/synthetix/cassettes/test_synthetix_optimism_api.yaml +++ /dev/null @@ -1,2771 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.25.1 - method: GET - uri: https://raw.githubusercontent.com/Synthetixio/synthetix-docs/master/content/addresses.md - response: - body: - string: !!binary | - H4sIAAAAAAAAA+y9a3McN5bn/d6fguN+szMxbQMHwAHQ63EErt3e8S0s292zG088javEME1qyVLb - +vaLzKIupCh3TuxkZvVStiWzkH9WovJXAM4BDg7+1K7b2fnN2eFZO7s4vzmcXfWzdHFxVq4uD9ep - HG7Ofjk/PDu/nAXlxfV1uzycPXl5OV4ezn89u3l5c2g/f/LRR//yLz+265vzq8t/+Zc/nP2vv8En - Cj6B/++/PTscnt/84dNPn443eZE/KVc/f/r6l8+vPr159fOnh+vWPr39tX/+6KN/+qd/Oju/7Fdn - H3+dfj6/fHrmri7/Nm49bnDz8UcfnY1//vymXrX9rV1cPW/XZ61cHav0r/OFy/Rzu5k+0psav/lg - aXzy69bb+Ez17HB1ll9Ov3N+ffbXm6sX16X99ezJ1cV5PT+8POvnF+2TL/r8njfjPc+OiunBvbgZ - v92vrs9+fnFxOH9+MQovbw7pshxvfPc5ntXzPm44PcNx4eZw/aIcxq+m66cvfh6FN2e/P7t5UZ6d - pZuzv85V/uTm6uKv/3r21++vfmqXTw7p0OaSs3RZz/767fXVry/Ddw7IsfD3U/1uSb1+XDPcq/G2 - vY9P/+qhTFWbn9xcn+kB95YOL8YTGdrpQhs3+P1ZHp/mML9+Pt3r7DBq2g5n7ZOnn5z9Nbb27dV0 - 3+nTHyvzumiUzM9q+gy3X5vy8t/by7P29A/j+Ybv/3T7a/OnnF8foY9HePbxn8bHezkhnx/d2Zfn - lz+9om7Gd/O27nkw/+WtB1zS5VThVMajn6AMnoPS2f96pRjf78uf2vXf/VK+0v/+qP/nsxeH84vx - Lfjk7Mn5z88vXr79LF+/9/xQ33p2o46vbvO6hp+8/rp/cn41iadnmeZqjd9Lh/EVGZ8uXfySXt6M - b2Y9v27jnW/f9GKwH83zb8dW9uoZvL7/KAqj4PpmPIVPjo8qjufbfk2jym20huuXf6dCb57Bq6rN - n7/eq8Ab1YvL2q4vXo4vz1s3nDSX7XDzr1MzaNfHL89t4fEh5TbAtzu1/9fpCz/a8t+p4NOrcb/z - N/X86KPf/e7sK/PF11+H7z/66LNDyhft888O1+PPs89Hv9E++3T8ML14MjfX1y9NrdfjO3J8Pbqe - z+fqv/nns3eLpsL66he/a6O9DRLjd+vDws/SbVv5t4///3yRLn/6+OzZ6Gv+7ePFHWK+uMqvOsQ3 - D+TTezWYGv7H96s1FX72afr8/6J67fV3aVQqHd/+U/KrApaDojlHjTYU0kA4QxmVJAqTXBZW6pwU - +/jz5dqppu9W8oGq/6dIufPr8uL8YK9b+mkXUHcrcOT0btk6mHQHRqsNgnmOpDOhLVjlHJdCcq5Z - SWY8fdsnTEu1K2G6upj6let0Ea4LkD043a3BLah3C9chlRJhyTKahfClhRYVF05VKpUmziEtXqvm - CZ9ILdWuTurwbF9OR7Po48/fKVqHkSiKcZ5LdUxFmqwIVjhaeWLC19CMALDCdzMxWqpdm9FX6TI9 - 3affu1+H+6zeKl6HF0HZmFZIRFA8gicpBEcVwYYgUTlBKfGu4MRrqXYjXrOFfwrQXrsaD5B7fW2l - 5iZZEJSIwq0GTtFTwbmharSn3KWsnIPNAurc3BZq18b35NnV9WFXbnMN7gN7XbgOKRqhsEQJx8JA - wmhG0IslTDHU4982ClkSdG5oS7Wrk5q+vPvbGg+2r5UbljLUEOK7TIZQAlxLJ4WmmkI2ihHaVB2G - X7Wz8b5Quw2unQ2OPWDlJqxIslCtsqMCueStisKYsx0ii0h4VD2qCdZS7SawTqAr3AEXZYbSYeXF - pAy6MAx14gRXygbdkPIqh2VeMylzV7hQuw4un54//yqdXx7a5TRJuQOpezU4knqgcB1SJhMLnbqu - pS41R44SQdDIxPi3OWHiGInAz+bFUu1KpFo+uFSe7cLo1b1v6bz9cqUWhEBMksMcYFro4dNSRzUn - LpIKKisQiHFcInMLWqhdi8tFezp6E/P8+fXV39LFzS587tXhFacHilfiJXrFJkbHJYfx3SSJikGo - TE7zSaaIQDmwYeTNvBZqN+IVxohwOQ0JV9fDn9mB3t0KHNG9W7aSFRiFwkiQ9Z6z0pkqdKpNJoLD - MfpIxK6drnS2Ahdq1+L2/GoPS2K+76v2dPvjOiwC7ciJ1MknDJ3ITJhW4BLjnVYvqQBjWFazA7VU - uxKLeS3qizE8P71O07LifhNM76vKLbHfuLrSfEXkVFLFhdZCAJW1oyEDhupijEqjmQTXDQY5z1cs - 1K4DMdyU66tf3LNW9lkSuXP/217vftE6jFhmWjdCTKwKCDWuKyMSCcVF6risyovAaU0To6XalRhN - H+DP18Ma3gfRW7d/NS7dLVkHkKPGhDGSqGwbU2inOQcmkkIGTo0BqDLaJJduArRUuxKgX8uzdPm0 - 7b7A+HBFbqG999o6+JopKVQtFAXNM82i9IxWj2bCrbKKWiBEcDb3gUu16+L7bopm2JHafP8phMm3 - X7+9Pi9TFMUddO8RrMMPuQJFqoeapQTnCVWGuOAk9JRFjspKVMzMU4NLtevye9IOh4s2BU19eZ53 - 5HinHncJvnNppQmNJAzzMhIeqMgAITNEbgUySpIZcJgAGcrc9pZqV2a30yrXnfvfY7Xymtaw+CTr - oLQgffxXsMg4WeyZmwqUG5COCJyX+Zdq12W054h2PXV7sbXvWjEXs1t8OP9bu7lL7DdEK4VqNEMI - TnMVGL0UvgDnKIbRnoRiCiQo7jkRsw25VLsOw9sozB0I3t75SOqtFytZ9RY6U9q0wBUBpgzXgRmt - lSgVFRVMEkmhzaPWUu2qRHafeHqwHndobTUN5bSPvYtuBBLRq+aT3aBBZqUhghWSadqGhT8b/Au1 - q7Lba9B6+/Z3SK29okUp8ohpOFKsKy7BU5118lVQjEUqUrIMjcA8v7tQuxKgi/breb5oOzaruzW4 - xfRu4TqkihQyOZtYIYIgDL+YEQBATNo7GRlSqEp0MZFaql2J1Itpi8HNV+n6p3bYbwYx/Pz88PKh - utxaGL91eSX/mXEmpjUQNLoz0wWaUtBPAxN3PXVgrbec5ongpdp1EH5xc/NiWqDdfSh7uCJHgu+/ - tpL7zGjQzJCeCVrRHFYBhRjwSifWNUqoaNPRvF+qXQ/fLm3ueOM3eFadkVeUxEKC1JEzGJZfrazg - sP4oJ4rFCixpTt28lLxUuw6OL8//94vzmsb3cwckb25+xHL39Uqrj01P+wqk9iJVHmTXVQtqkVSm - h5MLZNh0rOIcJ7NUuzaa79ov6bruMVn4Th3ug3qreB1eXWokLElKOW+cDlObOGqwi8lWwMBD0giO - zE1pqXYdXl+lXaIEp9seqbz6aSVfV4lGQ4YYQUVukElvwGktaVTORBFFpkHKueEs1a4D4ut5Imbn - dax3K3GE9HD5OsikYVVplSWVTZDx5e9VZWAwrV2JSIzg0sjW8oRsqXYdZN9ctq/bwTx9ej0Fylxd - T+Fe302r5zuQe29djgB/8/JKu+mkrMR72QzQAaQkWovnoVBRqnQtUyZ6QuXn3XQLtdtwnA2tetxi - fQIo367OwzTvK1ZymPsw7kYfqKp1wcCwIkxuyERRigntpFBSWd3mEKil2m2A3vgQvzgBknM9Hkb4 - +tJaK5UYgRElQFGfKyEYbfRAafRMVSI5U4qrW1droXYldr9ctmGgXaSX31zOA0578fMe6B6oxi25 - 91xZaVdeo2hQSQRK1GQdyjG+MccpiiqtDDUiHxb9vHyyVLsOuDdpNXbAdTenx8ef33290lw8oTRJ - 1poSEmMerUYEWoQUtBhmdWwkdUgY57n4hdq10dz88MQ/EjxCmkxbAeUpaEkkEVA7r5FT5YVK4DlW - 0QU9bohcpl0Rz36rj/Pt3+Ky4u4szoeVh5I3Cpwh51LTxE3tgRkw2RKjoTKi591ZC7XrIPns5nm6 - PLs5vLxo//Zxubq4uv7D2e+MMf/97NB+Pfy+tnJ1jJP9w5Tupf3+8Oz66sXTZ7dP8PXj/+zT6X3G - u714/vkPN+3s7T5yKvt/mvY/WP94Y8yP4ZH0jRVqZGIKnuaSFpWr9MqwlEDGzhvgcMMyJ3JeOFmq - XRWNN4+ETGMYwLMiC+PD/o6GZSeZ1IIM/1dIKhkqRQw9Lmkt065K5ofHYk9ErhoQEkzUmiBDsJZy - Dr0kRhsZbq2ULCs7u1BLtWuSsd+7R0KmB6pyw8xsVcqAByO7huGqEtAQZNIametu7s2Watck4/4U - HwmZeceikjFKHKZ1oY3KxCFyXodB52UEaKo1Ou8aXqpdk4z/5vtHQoZKKoybJnMoARuFq0KFbi26 - DtXBGD+qRpmPSUgWatckE77/0yMhI5rkThOGPSu0XjZXSyaKJ4KShVgYNMNomdc/lmpXJvN4hhpK - ePOR1sTEMLNQcGXjsL9AZEMDKEcxSQJsDhpbql0Vzg/fPRIyXtLmYtTDFDbCtYrD/uJTZhAsgjAx - ONgpe9K85L5UuyaZP9pvHwkZLXuDYVsxThNxVfmMER0BaoD7ojr3xish4nEhcJl2TTL/49v/eCRk - ImbqEGTTYnRNrAxHvmirQCTCIHbSbWeNyNk8W6pdk8y/f/fnR0IGUCstEqtxmL4sEyljUcCqx2qo - 1aJLMKnrOc5/qXZNMl9+8fW/PxI02TouRMk8jofbeI6OW8m0JJUhGV3UaA6hhzBbzku1pziJfVwq - et/89e3V/9fnsP9xFpG+a6nOD2P/ZOuvq3JEdOflOph4YJnRZkkQbjQw5DQEGlAEWV2ITQDJhrU+ - 77pZql0L0xR6eszfsQuaN7d/ReduyUqdJkoaASixNCJO5hwSGQyygBa8Yw048kpnG3Cpdn1AP8LO - iH6EdyEdy1baFF8UDvNaoXA5MjpGKB2tReUk18YLWyUoAm0+qGCpdgtM++2nebAeD0FbfTcNVSCZ - sl63oNVoPI7SPqjQYRCGgpGhpnQUzybjUu2a7G78+c3h+jy/mCyQ3cjdqcXb3N65sJKhrx0Mj4pw - TJK52oRmHWhHRjS1RELlRDYW55FrqXYdak9Sb76V85+njOa7bBq4V4MjrQcKV9qDwz3CGIGs5Z5E - gnxKgs9tVCS6Now9UVVkQR7zQC/UrkRqyiV8fvn09ou800rgvVrc0nq3cKXgkzZagxCZy9I94aOZ - MAkyMRFRu2Ht6aKyiXKOm1yq3YbWPisd+9Kiw66jMCUkEIZiymNo4jIbqXA0Ik4KCNZ4ocdd8wu1 - K9E6f3rZ6gn0hQ/V45ba+y6ttF8HlAErtUt1mA2CUTesCY5tdHaAVMYoSJFEz0siS7UrsTukn958 - m598/RebLqb9znv4yO+tyy3D37q80mSwTaHWMTpJBmK0owCWUqOMEypkqI541DXQeQFlqXYLjuc7 - DW93KvEQtTWTfktCdC3eQONaM5IklaNf1AI7gVK0Ir44mo9Jv5dpN0G109i2I6phocsymojxKbCk - gypKCoe0MaslyULoKiOKeYllqXYLVDfGfPvlyfSP2zKTqaPoVI6OjTSrKBqQ0SuiQopoMtERY0I+ - z/Av1W7D7Kv/+fUjZeYdY8pJMSWM40XWVGPIMvApMjlwITUySpk9Lv8v1G7CbIxe7sX13/aYu3pP - TR4Cd+fiWmfBOCo4GI6KUY1KWaUDA9abNsw2ZjQJNoM8ngWzTLsJQffNF4+11VFHvZYdR3uSQpvR - //EkzDAwxgAmtJDMZOFFnWOil2o3YTYMkR8uz29+Sc9/pLszu1ObB1vffcFKq2jKy86oGI5jSZ4x - iKhS6olQWeRocMo6wSXOfehS7TY0f/juNPrQbVtfIVVpzd109FWgw5BXSvhIzXQuliTdaSmzKLHN - G/IXajfhFe0j7S9hGIMEUSCSQj1LDMcLxRG1oHTKoIWmMunyMaxnmXYTYn/85ps/PlJm2K2MJEgl - FEiOuRJqi8XacwwIxYjIo6Zynt9aqt2E2VdP4vePlJn2hDBXQKsgQ6KcGkW0gykjXZKEUYnesJzm - deyl2k2YfR2/PJ1ZyW2ZqdBVMWCKSaaHQnW3o8tzlAqcDv9hQkapyHEldKl2E2bfP/nSPFJmkdSm - pIwQdZAGh/8su7YGESIlUgwcaDyhc3q1pdpNmP3wxJ+Gxfi6Jg/a/W9fXGvexKIRtBnmjKgsTunU - YsXpNFwxLPlkmmMlaTjOmyzTbkLwL+aHVy7RHlFav1GbB0neF6zUhzICMeg4rHqip72sw632Y3AT - lvjhXNPGo/eizedBLdWuRPPF8+cXL5+UZ62+uNilGd6pwC2zd8pWwlRhmBxcqCoYxkailk13yWl2 - wGhITpWqaZkPAV2qXQnT9Bi/a7W1n/cZ3N6+/y2k+0UrJWIQjFGmTddIi5ZcMoFec6mYKlpxQQkV - Ddg8tbVUuyKjHw7ne+QOen3vt9i8erlS26GmNR4MVx2lClQCctKtUJSVLo1GE1NEN5v2S7Urcjlm - AdqHyyR4i8urlytxUcwMzzcz0L7Lae6vaiYVRxAALkKXKqbM5oXOpdqVudjr8/q07RaL/2A97vG6 - f2mlXS6xSu05BmtkZIL2xrWNw05XstRmsCigLep+PIt1mXYTdt9fffP8cP7z+c0eKSLfW5cHGd69 - vFKwgQ6J0ERAK8eoqJTrxDUJjFuhfe4QnGxczbsslmpX5jglIn7yLF3vYgK+U4l75O6Ur9Rt6uhG - PxhBt2GGl8KhEqcydiKUm8J1KDOKsxnZUu3KyPbvMB/sKtfuJLWkTapGnAamwfDANNFaMVGiDJis - YNPRkMf16aXalUntdfjW3Qrc47TyAVw8a5cEEtlpj4pQXahDwwp04pyqDQG8sOq4FXChdkVMe2Ud - /OrFxeHcXV1cDBjX6WL+3dsDGd5zZaVWxSFkbKqMgSjYadcfk5yN3kwrkSKPw3kSSYg5JehS7aq4 - dslEeDK0aFZQEWJnAHl0cOMv7IwFbbROw63iw4xnZDbyl2pXpbVLdsJTodUzAeKM7Lwpx5PI1jaC - pAudgOuCIEWFjHPbWqpdk9Y+gdynQosWSwhPqqnx+F3Qwk2DkhYhIGE2ORWcIHg8kHqpdk1a+2Qx - PBVaNotMRl8GZJh0BHwThmWjY6GcT4ORZXqYE0pNtJZq16S1T2bDU6ElhSGFimGWM2kMQ8tJxjTM - Ba+1jDphwdZ6mPduLtWuSWuffRKnQkt47iRwGxtLACp2EkBTEGZgkTQGopkkJB2PfV+oXZnW4x66 - iHQ0KOoYF0YWoaoswImEEMtoNaCtJ8ilmY96WqpdFdguWRFPhVZSgdHAHFPJeyQCjJ4AaBVNsKp7 - ppnBEmezcKl2TVr7ZEo8FVp1OjIr66pDo9glz4EoBRhQ1cid9rrCcInz3LaWatektU/2xFOhFWgp - wBgoARZMIdUIbWjXnhFBFejhXkVW6ByAsVS7Jq19MiqeCq1qGjqpC8dkmQVFXAIFQhNCUAsBumRP - GZt7wqXaNWntlGXxVHD5iDo7LjjNCk3iRRguieWMyyAZKUxlKIPNHKu2ULsmrn3O2joVWpQYEaXX - HkV2BeR48sg4554PEyIxminRIEU/pspepl2L1s2h/fykHaZcJ3uc+Hm3Aq/WS+6XrbQlhUBqnNhW - 6XQ6INENplw3bnhPekpkabhWVrp5ImOpdgtMX57n3UmNOjwE67Z4pfWtxLQJffi6NBXiqYY0BiWp - GBKuGMtGRUapnJ3jpdpVeR3S4cWOjWq+/R1Kr0tW2i+ksWgiooqqDNugGI5t2m/Xg2xkyjMviJT6 - GISxVLsOoO+vfmqX83LsnqFqX7anqbx8U5cjq4dKV5ptyjSLHhLNWnvFkudS10gcAMRBAJgSTNE6 - O1hLtWvz2mvV+D6lLfhoW4JXRgVmqqJFZ8oxRqcUYUL1YSoYMnzdMu9KXqpdn88uy8S74NFiOjWD - TuuEPVdhBZn28UiSpZyPIDZFFMaPW+0WatfHs8u68B54XAbtoXRwKCqzjVZCIpF9WNeUacIZ+OG8 - khnPUu3qePaZTd8DD48IGrkYJkCVgheqFdASaXAqNhuheC4w4Lzou1S7Op59Vn73wCOAa+xBJd5b - CrFRXjVnLBDiuQqoQRfK6nE/1VLt6nj2WerdA49kliZAzoaZ7CojkVLfR//lteSdM8mCsG5Y0POy - 7kLt6nj2WdvdA88wt0Trwx6mw89MjIgUtIMqfeSQW+u8SE3YcXfwUu0WeB7P8EM4GGkIgfE/1IIL - noqwTcrEFZImSNGoWJ/7t6Xa9Qntsnq7Bx4UqLxuUpDuODeRkK6EnDL39KxgODiETAsP81zPUu3q - ePZZrt1l+GlKeaqN1MNwpqUHgRrrsAKIEF02IaNg0hwzwyzVro5nn/XZXWzrGo3rlgpBuRuWsta0 - dylskbZjzDRqxZC2OVh5qXZ1PPssyO4yccAsNh2zrVAYJOIdc2CHyWzl+Mk66AGGWXac11moXR3P - Tiuwu/g+UnqeJNOioBGdY9Va0TS8T9aTBM01YLLHjKpLtavz2WfJdRfTTSTthvmFMKU+YpCZ0Nwb - HokCxkkYFhnjrM3rdku1K+G5TvVNJpQ98NypwC2id8pWMuFAA+CUR4zljplTJxShnFXa0VHJnHBA - CJ1DTJZq18H04/n14cVtVMBX6ebQrsvV85c74Hq4Ikds77+20hYaAqVx1T2XXkZD7fB2RCKcc0VE - ZUA8YaPzm028pdp18P35Oj1/3q7jeIRX13tgu1uBI653y1bqDKFP0T6Ym2cslWp1ycNT7Y1xlIy7 - FlXSA8PcGS7U/ucwjb9Svmiff/TR73539pX54uuvw/dnr3b8n/23L+GfP/ros6NkQvjZ4dnnX6ef - p825z+YXT65eXJc3L28P8Ty+/s98DfY//fNeDY5fhAcK/y+/CVfHZ3s4L5+8z8AUBhPrfBgmhEoI - sgqSdANVJqe4SgpSoFXz5MZS7Tpt151flxfnB3vd0k+7MLtbgSOyd8tWJ6YIi54O29GxhCWXbKyZ - TgvivFGi6jDzp7NByTEF5ELtSsReR9GFXY5/unP/W173i1bHxYgynmLrmvQmS3JZCSsVN0iGU4ZB - 0kwNp/MZa0u1a+P6Kl2mp/u0sft1uI/treLV0VERhsemJSQWuJRKKiMUSsPllEAVwAYYVmecB8yl - 2o3Q7ZXU4uGKvAfif5Xz9/dJZkOJACxeSQ6pOMlMqy2KLn3OMHjZrnD4FfPJygu1a5OczxXcFeFc - g/vsXheuDq1lnoWxJUg2BishGNWck6oZlsqSr1L64UDoOSpjqXZtaDtlGLxbgfvI/otyDf59Yh6o - Rm0UuibKGKdMhtEnQiLT0YXGsEaoKFWbee/BQu06xPxwub5K55eHdjmlpN4B2b0aHJk9ULg6NMGF - ogZYRPCUS+MkVi54J5m1KGXUXiISMc+RLdWuBK3lg0vl2S64Xt37FtTbL9c3RCTCsCeErDSWaYms - MKGVrsUaxzprw+8a5gUcTy1fqF0L0UV7Onod8/z59dXf0sUeM5nv1OEVsgeKV0cHo7XkQoLR0iid - stcUKA+q8QokEphCoCRn8wafpdqN0IUxeFyOAf9wdT2stR1A3q3AkeK7ZasjJNBlt4hWiIYlTYlY - KWDV2CkvQjIIw/pgyG7nzRZpV0J4ft3K4YsxfDy9Tofzq8v9HLn3VeW2Lf7G1fV7UzXFVws6CIWm - RQlu2o4gO8YmwaEc9mO1Lh/PY1uoXYfnMVuje9bKPjNed+5/2/7uF62Oq9QsPUmaIwADISrTBhto - O9kdqrMpUqRQOtsnS7Ur4Zo+wBuzew9gPz8/vLxXjVtu77myOj6nwnjoGjAQbgMtWfMmaBFM6jqG - M8m9oKnhPMG8VLsJvp2WyU8RISmIXJIwjHsTgEzJMlALjegEOk0kp4pSM7t1S7UrIrxdT9uV3W0d - 7oN7q3j9fpOFxqEk66VkBkf3l3QoWkw7Iorm1mNkrB6Thi7VrkTt1/IsXT5tu6/wPFyRW4jvvbY6 - yWE2QlMRi8WCSVreEIE4rlBK2YudkpQLOKb6Wqpdl+R3U5jRjgDn+9/l9rpo/SVVynKVGGWgYhiJ - ToFUrkXwmMkwRignJWnX4Jj/dZl2XVzTnvyL9nO7POyTMODBetzF986l1THGnoajJrpQnDdDIsTi - LGHDKGGoQEVBxh+h5mNIl2pXxrjTos+d+9/DttkSjwxRyUJ5F8TF2KBJVsEpqSk6RkEVgUIzM7sJ - S7Xr4tpzhLs3qG0zjgHPPE+hewlakNlIkXgsSmiLBCPJOU17mMJsRy7VroMotvbt1dUeHtztnY94 - 3nqx/toNk8NZFpGg5LJRroKk6EuWw/Gy2hoqsiS9zPvQlmpXhbP79OSD9bgDbofJSk6HzWA7cq3G - kNQhjAEpVq470GoayzlLhrLM3eBS7aoY9xq03r79HWjbDVnYSAUsvReWkA0zkEUq+JSTUueO0LKT - VYKfWS3VrsTqov16ni/ajo3tbg1uib1buH4Dk6O9EACmSKUKvFGEEtNEBSF7SxxAZqB9XtBZql0J - 2ovDi1Hpr9L1T+2wUy6cO3W4hXa/aP0FHEKzVMPLEiinpWqDTDMGodI2rHbFdMGqxNEhW6rdAtm3 - j5ZYbIQwLVqZjjvkpBbUrGkwFvzo5UjUo2UJczyafql2C2I/mr88VmS8dzEB8CJanDKXFxx/GKM8 - VGZ74NVaRDHHuS7VboDMfm0fLTGTSE25AlhHlOZaCgbctgKacc7KlKYte3I0FRdqtyC2S+KJkyAW - mlKEV2UqJZk4ljy1VUjjhj8mgUPyw222et5otVS7ATH/zR8f7Ug2nClGqw2CeY6kM6EtWOUcl0Jy - rllJRlhpZ3NxqXYLZP/hH+1IRgkjwlEleEVvlaEESY1Iso/KKAtaUeDa3eZkXqbdAlk6pL2RTXV4 - ANur4vVXqqf4AG/D6O6ch2FCkCSDEhY10UGZUHglkeo2r1Qv1G6BruXDd1Mc1N789mpylYGwVFbh - tGMdLA57wkgkqbuoqOYiE6p4ne39pdoNuO2TpewkiHU1pcf2cQxZJVJGKJG1T6vNTGEfw9UYyZJw - eNzzvVC7BbFd0mKdBLFUOVeSIQPFCeW8R6dlBk9rkxQ7BiiRMMT5RKOF2g2I7ZRM5iSQUQBVpFfW - FpHdMAstVTR7aWkvQQ4HOSmWh6ExWyILtRsg+8p8/8Wj9dGys+CnBJpcBIqWCJ1h9HkZlA2SZFEM - lzmGuWNcqt2C2W6R4g9V4wF4W0aI16x0Z71Mp+8R6SvXUlGuRZeyq9RQ5zjY4GxGLtVuwPCbPXIK - nkSj05E66IRIagvLbIxY0oSadDfMoKooaLN8jGazl71QuwGwJ998+ViJlTjM9j6aSJRqmuUYRqEW - GTGqnHQRnfBqp/Nz5ujUhdotiO13/tGD9XgA33/haUgLjMogRKTIGJMGzJQbiBmDWI2OTIDWXc+n - tcw95VLtBhh/+PqLvQnu1fCEmfo+QCqj7GCCJW30gQ168tQHMnwxm7Qsx5NcFmo3IPYX88fHSixT - Lh1qGxpQGoUETRKW2nSl1uTuiXeRheNi6FLtJsR+eKzEOGe8C6zV1gCqp0yU4yZIqiVJBC0jJCql - 6LyytlC7BbGvHu3kCAuVcBd65EVTJSFSnWlNTEhOHLFNOwNUHJMgLNWuQ+yLm5sXu/hpxxsfAb35 - ef3xSltCpRpuFKBy0knJBfUEpFAIVGuSrSDWzifFLdWuQ+bL8//94rymw9UedN7c/Ejo7uvVKVmh - tBluMLRh3Umjk5A1TWdr04xT+glALrUg86zHUu3alPbLtftOHe4z+6/LuLsg1oqHlv10wBgnQFuE - hDY3rVmvXTPCiKtS8eN2+KXaddB9lXZJIzjd9gjo1U/rRyxaZiQLgYwhJTPKyHSgLBjMIqUudJCB - hS75HIy/VLsOk28u29ftYJ4+vZ6Sh1xd77mU+d66HOn95uXVkRpOVFWNUKcCUdyiFGLKZO2EFcJj - JFYOgscg1KXabZDOg32dSezRWf5WdR4Ge1+xfqY6KsCAzyUgBCwkV6Zkj5XmrIjCyHkRcRiNc6a6 - hdqV2P5y2cbocpFefnP5KvHyHkwfqMYty/dcWX8zRuUJuRMSKShOy5TdhYtqIfHAa2Y8EgIe5gnJ - pdp1GH7brp/f/Ah+ekitfnNd2/UU3f9t+G6P+f/b2rwKZHlTp9vG+dvXN8hvLbRsyXGB0+k0gxJP - nhSnmBNMYCnARUjEH/NbL9Nuh/XbD1Qf3uxLUjDSciEEJTjZotJZZ6VyokMF7a1IPJF5gmWpdjuq - 33/z1QesDyeaAcKjgtJoA1Gp8FCC8o7WZlhnVFuLPB1PhV+q3Q7rD/4D1QdH1unwCFdTIMzx4rvX - PWuvlXSSK4GmMAbdH+Npl2q3o/qj+csHrA9OzCnSJaZIo+PWgh42z5Te0GEjUXIkHoYL2sUcT7ZU - ux3Wvzz5QPXBuM7SxBghp6RBlFCmJfe5MytpQJWJiyraUomYU80u1W5G1X5tP1B9cJm+T5lIpaKS - EsGZTK1KnRQGRSBL7bmlhUs2D6xLtdtR/d59oPpgyg5VWCRKEkK805rEoniSo58NXqrKqCAySopz - W12q3YzqtCnsA9aHT8Oz2NkUHWO1CEUphTwS1qVQPowGKSs6KWg9noa3TLsd1v/wH+ylh2ci7HBY - JCqtnYoZoGpMA50fg6ckFI0azqmkx3yMS7WbYQ3f/+kD1QenfhlnggNDNLoz0ycfpaBHRQV3PXVg - rbecZit4qXY7qj9894Hqg+EgXGiQw+TpyHmklAqmFeGNKJiSEes8rF6T1RxytVS7GdX45Td//oD1 - wSgFDQSGEaQEgFZBtClvEimMjOGyGx6IHK0Q+2wwLdVuh/X7D7OGD08GRyWn7bqaKSnJcElN1IZY - AUwP99R67QSLoMI8GbxQuxnVP9pvP1B9cCKCedep9kzLKAxqnPbWZw5Kjk41ZsF6YIwcI4qWajej - Om1a/ID1wdBY4TTz4KjW0zGy3YPpWnmDOVFCtGB50BuW7xwau1C7GdZ5Y+MHrg/ORUSlgRJLWJjW - XogKY7B0kjluBeGoGMFGQczhLUu1m3H9OpgPhvDDwYHoLKLWDMfI2ZEaleNg5GzTlDtk2hNBA52d - 1qXazbB+82Fofdi7GVass5UT0lWThWidMsgy7B5vFGfFc85YjLPBtFS7GdQn33z5geqDAYYhU1dE - 9JK6Hj3lCIqoFijLdDQ8qjFHBJiD0JZqN6P6w9dffKD64D7ZMTS2KfxIQp0ObU+qV2PzNEqKAU1a - KklBczzFZaF2M6p/MX/8QPXBHpgawerwOhXTtFLOdR79aPNWcIlZeFUjsOGTzj3wQu2GVH/4QPXh - rbVhAuJBRT4anW7cUxm5TC3SrpA5hr6L24iIhdpVqb59Ns5+ON+uxR2O9y+s75wmD6OF2VaHe4IQ - urRKOCZVRF187Ri85ErPZ9Ut1a4K8E1u71NokQ80wm0mAAGCakpXz2E0IguSc0kEy1AsM8ExhgZG - s5onABdqt8B2GtG9e1FjXdWCjAFI3xwEnsQUwVmtpoUroYwKzDR53HK7ULsFtROJ3t0Lm6cQi0xM - 0RxjLkQUSTSXQLRMJPGgS1We03mfxFLtFthOIzp3L2oRLVUoraCVkYqd8R518khYDbVnBsPfG63L - H+dxlmm3oHYi0bd7YUPGRZXSMhKQxOhqCRkCIyxzBpEgiupF0sfQ6YXaLbCdRnTtXtQUV5TkKKqz - pHEU1CYYZYEojWL8iDplRdrsByzVbkDtRKJnd7MiW3bWesWEn2KaaQbMysRhVogsuua2e0ehzMk2 - l2q3oHYa0bF7URNRAWGgVUzEEsoUZhKV1JGYxLz3ZFj3brSl2edeqN2A2qlEv+6GLQy/izJgTCJR - hUhReS9NxjFUUZmz8rpH1eYEB0u1W2A7kejW3Xy2ljqh1GirmGalec8jY7TZYVtQyXTp0vsq532X - S7VbYNvnaIR36vDQLOVWRyNE6ZkfHphrIRSnh6WokPvR79WA0jWdCFBh9NEDWKjdAN2JBB7v1uCE - K8YRg9JDoiHS6JNSejqeolNORQxYhr0x95NLtVtQO43A4r2oBSKgDzdMTOcuUUqEJEw2UCKjy04l - lSjnt21tqXYDaqcSOLybB5AFZYiysGFukBggIlMUDCdF0lAo4UxgU3L2ABZqt8B2GoHBe1Gj6GkJ - QcEwDjMFxylFBPSu0IAalRDDP+vHLnKpdgNqJxL4u1tbG/Y80UpV21NzzHlmGNcgSxgdoADFlAGa - j+dUL9VuQO1UAnv3wla0asCZlpQG36nJNCjrgdHp8E5RWKCg5DAy5nCUhdoNsJ1M4O5e3Ig0ClJo - WkY6nDIQOEyKjLqB56UVCBG84mFe2V6q3YDbqQTm7oWte8QpPlpRTXLiWkvGZKKKC5prb5Jzr6dc - w/MmiIXaDbCdRuDtXtB4FJ0jlVxBRqZ1nRaudRFEDjO/M0mATKm+5ynJpdoNoJ1IYO1e1JoAKaQh - XjaLhSmSMaJpYBhJmmaUMVK0x9ifpdotqO13IMmD9XgA36YHkhAtNTOpUkGVVVU5JyH6OpwxLnVg - ziZpuanzDOVS7RYYD+nQTiWOa67MQyAPWwXiaQXUOT6sfswsTpn1OQfmtCWgleAE+RjRtMlzroSF - 2s0onkZY1/4QfTJKORx9pGFJC0lFRTlcbGl45NAASyU00nlBdal2M4gnEuW1P0VNE1fEdhidpCNM - BuS8B0kikPEz9moMr5rPjvpS7WYUTyPo6wQgSlYDQ5sVAdBzgxLKi0pBu+yrG46eSFzOQXtLtZtB - PJEYsP0psspQDf+giCAKF7xTqTvD6UjeLEs3ROsx2ol58mWpdjOKpxEStj9EqbpjkIfVMlw/JhgI - rRGFSMpWDWPgcz10T2bvcKl2K4gnEiF2AhCzFI4rIYPiTnGgngOE0aC4NDJmwgrTqvl6XClapt0M - 4mkEjO0PMQYTdSNGyIaAXUKgSfTeBZFeGqja6EhCOO5tX6jdCuKpxI/tT7Fib0xYpTGmoDKAMRi4 - zAGkABfVcCloLGmet1mq3YziiYST7U/R0AKYae9keO2aVU975ayQjghOVM2KExZxTkmwVLsVxRMJ - UdofImGqOiI8quAZRGANlcBCPOeZoEY7DJjc3ewqLtVuBvE0IpZOAGLgyqnRlJpWXUhsildSis+U - o2AKBpthiMK85LRUuxXEUwlg2p8i15KQkJlQnAbtPDJpGZtOnkIr62hqyafoj+v0S7WbUTyNeKb9 - ITaJPvIKQnAnuZUcizDUdxWM4c2oiEJqirOXsVS7FcQTCW/aHyIPNHI+OkoPQclhaeoBKYSqVGmV - hiK7oJypNrfEhdqtIJ5KtNMJUNTVScrbdB5YEUo0m5wynALRSlOewAVppYVjf7pMuxXFkwl+2h9j - d1pXorzqHXVjlGgRJJOAQBjqmDQUBRrnefCl2q0wnkos1P4UWxLMUG0FcYIqRR2RjCdJB5Wm3fDo - uSG69HniZql2K4qnERq1P8MEWLQ0ZPylVNNMaoWtIcgp6gmhAHEEW5/djKXarRieSKTU/hBFTcNW - URwEhxaHH5GGuxBNqIwrkpmlSLTpbYa4VLsVxBPJOLg/xBJ5ElFrTUCp6byYKAyApMXRLngWBRjQ - BscMgwu1W0E8kQSD+0McQCRaA6Yw4cEGRoRSWRCqXQQh+2hiSofjxtyl2u0gnkQ+wf0hCtXk6CVD - A9Kpb5xHoT3zFZATL0bfyUcZK/F4ouIy7QYQT6Qn3S3c23g2vDqJJCGVjAG2KJwCNZz14IOe8+8Y - enQNF2o3oPbjefvl5lQiTufKPADwdfn6OXsc5dXidFqPVEXanAkqZqE2AzRKnYcL0cnxdK6l2s0o - nkbE6f4QJffOdcmRc66mg0CAVOJioIZ7xi1EDhSpOh4LvlC7GcQTiTjdnyInsokkBVcKdQkCCBO8 - qlBGxyhHMYJwTh+3hi7VbkbxNCJO94dIpsOztAI9OBghUdc87BLGJFRRBUvc06SkmUfFpdrNIJ5I - xOn+FFHPK0qSVVKp8I4oWXLnGiGhUEynBMqAmx38pdrNKJ5GxOkJQGSScVKapiJhgBCadAQE0OQY - 44WRAlRX4o9JJJdpt4J4IhGn+0NUQlZNKxZkSoNlik2B+GW0NFACCY9Ra4l5HhSXajeDeBoRp/tD - zMTQCgWV7dyT6ZRQAt4BEJfQ15aVzz274wEBS7VbQTyViNP9KYbEMfHak/Qgp72+3KYAVuJw5dF6 - RYiQRcJ8OOxS7WYUTyTidH+KaBKjksjsMbkOnCCbjtUW0/naREsVcAoKNvNS8FLtVhRPJOJ0f4ia - IStEjT6RWIrBTAnnK2MpFRRFeQKUB11xNm2WajeDeBoRp/tDpAIDVZYJkRnGzrJ244dcUoqMClG1 - 8IxRPe8TXqrdCuKpRJzuT5FoFCG2PAY0XXTuylNh5LR/m/LmEBgHWjU5OvwLtZtRPI2I0xOAqFDV - aY+aRcc7ZZZpaIZbCV0RCkrxwkWWc9jwUu1WEE8k4nR/iDRaxOlUnDqsFp1RxSI6Vi6rx2KI15oT - IdLcEpdqt4J4KhGn+1MsnkgZTFat25I1T2k47jBgeGk0UIzAUEsz+4pLtVtRPJmI0/0xjkdfxDSm - NceZVoxAi6PXFEoOF94awD460NsMbku1W2E8lYjT/SnSkEIVjLemPAhvJEs8AC0+aGw8lqQdR3rM - DLxUuxXF04g43Z8hB1ZroTIR2tgc92srhdHeIOIwVJTVpk4ZFuZlxYXarRieSMTp/hCxDRpVN9KH - 9akYM0JwlouxhQ1CSY7ucjoad54GX6rdCuKJxEntD3HYmkk0LQhkYCG1WlRxhCutldKMUNamSTU5 - 72tbqt0K4olEnO4PURtLu7YgMqPQ6TBaFBWJgMxcDcuTIieUaDbva1uq3Q7iSUSc7g8xEIFMNsZU - phMFJ6bjzNhoX1JZoqiiHKcDDm4Pqlik3QDiiTTC3ZKwd+Be1cxBDiOEUOqF81yyHjo1g4XA2KJK - x4j9hdpNqJ1Eq9uLGoCJogHE4atT0dOUWE96sFwTBM11lJRLbmeHfql2VWrf9F6epfNL3y7Sy1a/ - ua7t+lQCht+u082rij50vNb7dOvjthFpJiqy4QcaTqTWXhPHMm1IOi3c+yy7n1c1lmq3x30akcWn - TztoXS1Os96GN6VRtSamFKilUA4Fa7WCEKFnv2SpdnvaJxKCfPq4h6mjlI8mqcyJEqPNTrmKdZcQ - mQ8c5XjNKU3zfNBC7fa4TyNW+fRpg0GBQU+7AZSQarxkqih0yLOQBAY+7y09JrJeqt2e9okENZ8+ - 7ihrBySJR44hdWEUCKWtbtozJXXD6FrjjB5Pylym3R73aUQ/nz5tzjjBonUvKkkpMYKSRBHSmIpR - FOWKxgR9zjy4VLs57RMJkz592qpAAeSaN9OAGJUAuubBi5i4pYRH4zGXMg/cS7Xb0z6NeOrTp001 - H7djHkogQoAEEoHH1n0XMmERjAMwegxnWardnPapBF6fPu5em65qyoLXLVUKGEPWayWB9siIKBw1 - Gno8dnepdnvcJxKhffq44/Ch43QwaAIpS1bEVMI6kNKlVDJ56gtXnc99+VLt5rhPJJT79GkTLnig - hCVJIcNwrahu3VortQwpKKKpqhXinBxjqXZ72qcR8336tC0xRKgyGieNGIqRRFeeR6ccXREACbth - KhwT9S3Vbk77VILDTx935IQrsNwbIQY9TLpnZlslKgAT6CUURgnM06dLtdvjPo0o8tOnTZTmw5LW - BLBHQkkBCMrqqkeHjSHY6JA6yvIxynyZdnPaJxJu/g9A21oQCExPJjXxKlo6fkjaS8IRJWIEp1Ka - YyeXajenfSpx6aePu6PsPlEOnVFUKGC41FmACyCSR1Ra9OFH03mZe6l2c9wnE8B++rwpCtoUg1oK - tbpE1MMOI1UNw6s1JozuokePxzmWhdrNeZ9KpPvp47aRWcoiFdMR5QkpFdgBaQb0JGSCHUE7aHPz - XqrdHPdphMSfPuwKXNKBzTalWDDSMNDTgWeKIDgGLImghNBzeOBS7eawTyR2/vRpU6ZN1LUJ6hII - zfWgSSBII1AwPywyFmLmYZ4+XardnPaJBNmfPm0llBSGiBx4zTIBrRadYK55okffnIYFphg/7tde - qt2c9okEAp8+bU10QU2EwEFKaRMS44pJGSzIGlzMY1SW9Zjke6l2B9onEUB8+rS7stqPARmsNxHH - /0uWikUCmWtPfdV0mGBBlNkHW6hdlfa311e/vtwztni6/21dbkneK1k/+TeTXCIVw0CWwgrdaRDD - VeIYgCDTo1EGqnSZ41CWajdgtl+A8Akgs2iblTpooU0qgELnEJD0QDxRSnBUNio1+0JLtRsg2zHK - d39m2VJ00o7Gwn00NOF46iyW0lgIXCCZBjpkbjZyl2o3YLZfqO7+yLRvlGMWiCwrmA7IE0RADb5B - MixW7mzxTh9tl4XaDZDtGG+7P7MChBkKEbRyQU5b6KOsXBjehU6cedtjA8LnZrZUuwGz/YJm90fG - koAMVFGkqOp0UHoOWmfpRB+Eho0hE0k+z2HPS7XrI9sx8nV/ZERzYonRwxlvNCfGTAiM0aS7FsRm - SBgh5tuzmhdqN0C2X/jq/siG2UeIDLolFdU0eaILZ1F1Pgx4XhlRgjWGx8FsqXZ9ZHvGoO7PTKvi - spNASyEigEp0mvJkHjVh2o7/Ahqg7WiALNRuwGzHQNL9mVGmo+aBd9IoJbQMq5AnBtRZo6goo/0I - ZYXXt5PZi7TrM9sxGnR/ZGBZzrxMRynFImC0FQKaMhpCZ5ZWoJxLVY+rTUu1GyDbL6Rzf2RKmoBQ - hATijVUUrE8lJ8RSgCumOSeEqzrbjEu16yPbMy5zf2YgEQVICpQk1zuPKRNlvLYZxTA2qELkksY5 - tHapdgNm+wVX7o/MUdWnM8q8Z7ZUIigm6gxRdfR1nRgeqKYG3Bxjs1S7PrIdIyT3R0arqUpNx8cn - J1QitWsKyTs+3GZRErN62ISOH+2Phdr1ke0Z5rg/M0YNRaFdIiQilUGhLxKFnfaAmt4kScLoctzn - v1S7PrNdYxX3h0YktypS3ct05JGFlgWlnAXax+g08HhvR9vix7zzC7XrQ9sz4HB/Zk51V7Fb7qmo - XjouBJMMtKwhMinSFPQPzc25A5dq12e2X9Tg/sQ4h4xaMzlGp9S1Hx4y00lSgbIbG9CNq9GmPmdJ - WKhdn9iOoX/7IyPBEO21nLIO8aqEZqBa4TmqZl3UrTgDGOm8BLNUuz6yHeP39kfG2Xj8MPo4ZM4E - k6wgMXatkq7NCdSO0cDDMc34Uu36yHYMwtsfWS1WcaaKlrobwohQlFHehBG+j34wx1Al52n2ppdq - t0C2WyTd/sgE1zX72HPlMnuBTHfN+OjpgoKArEHXUUo5m/lLtSshmycYv3NA9iI13/wtTq9fbzC1 - SEg1rTCRoopdqULR1kg4VVJyZ5mXQmvLj1OLy7RrU7r54Yl/hKQKdlAdIjXMKRnJaCIqa6zToYik - ailoK6rqY06lZdoVScXWvr2aHss+nN5CtI1NkSgaDpxIY7geRvhkjgdae6G9CpL6cKU0b3PejKXa - deh8dvM8XZ7dHF5etH/7uFxdXF3/4ex3xpj/fnZovx5+X1u5uk6H86vLP5xdnF+23x+eXV+9ePrs - 9mG+JvHZp9P7jHd78fzzH27a2dud6FT2CBvoP1ZXejMFgj8+SoRY5UUSjZphIbrMGaeF28IZDquQ - lfH8sd12o0u1q1L60fzl8VGykDlYYNShKjmTPJxkiDHkLqRUEMcQ5lk1c1taql2Tkv3ePT5IoJXV - VgtJFBXQO2pUKfWqlC4oFDZNUffj1MdS7ZqQwvd/enyQAieiNhUF5CSFGI5V7cwxVGL0bhgwNZxy - 58793VLtqpB++O7xQYpjTKF6GAUQFE1BykLQC9UVzQja+s6wkySPuZAXateE9MXXjxBSYkYwFYwY - T5up6hjU2qjQHEvxkmdfBY6ubTbxl2rXhDStMj8+SkX4DCCpNgSHNU1AGU6MtiJoM5oKaKE9qWTO - cbZUuyaleV358WFS1PtuCqVUU1ZZFUCVD0br6SBdBsxK55GJeVPfUu2amJ588+UjhJQhStNUMSoE - xUFZ9BJrUIoBZssHjTzFrs2QFmrXhPTD1188PkhdzDl/TBKTr0NtCAnAOj2aRXUySSUijk5sjudd - qj3FmafjrO/7Jp1urz7Oiad/mJnh71qqxy2Ax8p/18bz+Vu73oHZ66ockd15uX7YostE6Cyb5N2P - QQzFcIedJkoRnCKlJOdeRDYvZy7VrkXsl3Rdw025vvrlR9iB0xc/P7+6PqR80e5W5Yjtt66uThEZ - I+PRE9UFJUJGhpFjxakJOV9IQRH6tK9sPiV5oXYLik8Oo5992nZpdA/U41UDfM+l9WeECwSv7bAj - TdROdK6wUSk8JyhBVZbDIAVmtnKWatfEeOPHx7k+zy+moXI3iHdq8TbCdy6sH2lQNVUSGZmP/CuN - 22KskmxYNaOByS4j58nA3A6XatcB+CT15ls5/zldfJUOz3aAd68GR3APFK7f6iiHyEd7Ei7QSKmU - oVI2bQyMhg7HTjKNxarZT1+qXQna+dPLVk8A3UP1uAX4vkvrrwEIpikvfZgonRcWpnM/YFgmxHHC - U4mFqWixzXHhS7UrYTykn84vn952Uk++/sufw/d/+uHy/OaX9PxHtgfPOxW6BflO2fr+o+faySlL - wZQlCUlJiL2Nl5VrINisxkg5Ho/zWajdguDk8XnzxQeCv8pAaSGEVyBZEJCgpy2DSgYMKKXMoLge - /sKcn2KpdiWC0xP9rtXWft7F6btz/1te94tWx2W0ltYjlyY0hNAJy5w27DaamixnVQUhBZtxLdWu - iOuHw/keUVyv7/0WplcvNwjlyZQrWtS0250NM6NgUYqbAohJFs5I1FCiOYbyLNOuiOgYj7U5oq/O - L2fX+/UvHVE9WLx+AJ62TNggvUallCMQGQchIFmgatprIbROrs2nnSzVrozMXp/Xp+37K5tu9nDG - H6zHW63toUsbJBTBTINDrQtCHiYGKsGJwE6gOmmzmk4lqsiOCUWWaVfG6Fs+PHmWrndl+LoS9wDe - KV+/EYoihI1cKc9cVshJpxBx/Nz8aGYyKEAa5DwTvVS7Mr3jjNOe6I41uMftTeH6njg69ASZ0piK - ZAwlK5xLHjivGlB14ASMOKY3W6hdGdowsg+7Nre5An8e7/LleLiH4Xq3w4vn9xC+V7N+Ji0pCTA9 - nDWftQxS9iJMLVnw0WUK7nTjwgg6Ly8s1a5IdK9I5K9eXBzO3dXFxeB0nS7m3701Yd5zZf3cCFwq - ZiRTvjomRPFytDLpOSU0DwcbRhMbRibMh60u1a5Kbp/o5FMkh2o0k+n4PNVQ6OFiZ+za6SiBBSqQ - QQPLj2crLtWuSW6fiOUTBMeB+hAVUo/AoqTAag9ESeUVBi0klpyZlvPwt1S7Jrh9ophPEFzTtTRD - xjAVQ3Tj2fOATIeCxLkgJ9s/QHJx3sa9VLsquF0im08QXA01k0y4iZEKEDlzixRlJKSN/xOKmhTa - 47xmsFS7Jrh9op1PEBzjBRiS3pvwQAWHLrFpTWP0lPAOinpuWc9H62SZdk1wO0VAnyA5ElFJ2Ygd - dn0ikmmHVDKj6GCg/bBFpCJ8DGezj7dQuya5vaKiTxBd59pRzbUYRqLVVAmRHEGPTinbGMWakDSv - jye9LtSuiW6fSOkTBEe4FSQJrWGKslU0UF4545pXFIhaBaMd8HrMDLRQuya4faKnTxBciRAojmGL - CR2Y43XYHoGS5jip1ookuQBgZp7FXKpdFdwu6TBOEJzvBipLpDKIShKvZFeGVGkMZu1qsDJPk1t2 - ArdUuxa4m0P7+Uk7HM4vn97sMpP5dgVezVzeL1t/dyqoLJVopYDLIoYxdnXRGTUiBce00sNq5IrN - syZLtVsQ+/I87w5t1OEhbrfF60c/91B1UbVppVCI0XBk5DlKqfjAI3VlKirG5tMPl2pXRXdIhxc7 - NrX59neAvS5Zv5mpwmkOUzJdySg31kTgwLIE21VNClBzNjyzuZkt1K7D6vurn9rlvHKyZ2TDm1oc - gd19vX72C13QGRDDdgiyoyeeMU5coE1bIRkHmnqBNh9SuVS7Nq69FnF2RmX6cLP+T3vv1mTXbeT5 - vvenUEy/zDx0HGQicevxOALXHseRLYVkuT2PuFKMpklNsdi2vv3BWrsk8VIUV8fxutBkyCHWxvqL - C96/ApAJJDIH5Tk6PKcoTEs5LQkt5OheK0MqwRBmPWrbqt0f1TmnNiejQphOFXihwDtBMDiBzFIM - 7WpNwzhnohChrhv9W7W7ozrnmObsQWWi5MwInL5T5AmA8eWaPiTCOc1pO7Shzpm6RUhu0+5O6pxz - mZNJxcqlFEl1aWRhtrHAyHYBEgpopTGQrg1GWw2Ljdr9SZ1yEHMyKZVHAjaqNg4kVpXdUMqoOcsZ - FpURphYSctyCxDdqdyd1zsnLyaRG5Dx3I6wZLFhtNYmcOJ8DJYaKxIIPc35rtw3fjdrdSZ101HIy - KqYzY7pHy1Tj1aualxQlMU7zTmoPLOmkTJdrnPhW7e6ozjpbOZmV4cqbCA10iY6SjuC8Y6GpLAFr - lgxQgMrrEdhW7e6szjlMOZmU1ChCk04UzZMraa5FZCxRq5ppOxembrJUsO6/b9XuTuqc05OzlyqO - xRiROrUwBDGvSSOXzRnJdQOubDZFjrVeyVbt/qROOS45e/bDsmTQEk2bakGNxjA2w4XysVqOmtB6 - R3WNudmq3YnUXW6/XKA8g9QbHXig9U7b/tsVodoAloEZJWvOoCilgdkOxJiqVesYGKP1MGurdh9i - /36Xf/ih36X57b24+/EEYm924Ebs3bb9ianSMSbbSITumuLoIbohlsDeQkuIvQ6UHyrrbtT+14jN - fy037377T//0z//8xb99Fb/58nf/9E+/ubUt+H5z//1v/5D/slyd+H798O2LV3f1l48PaZlun/8r - vwLn53N6qwe3X4JHGv9//hY8edHvnj19rz/gNRuDswadTeNe9CpZHV2gw4oxTzMSx5w91zG7VbvP - mPVP7+qrp/furuf/OIXXmx244Xq3bVdaoLkjywT3xSqWCVkUejplevppcSyh+c2IyNYtka3anWj9 - HEwR7+opZWre6sEDr3cb9x1eXEm3FLvzRkXsJMhr3hVqENS9RGgDuRG3nDEbtbsDOyVXzBvvfwfW - 3yUc59dRqYDTdQadEUguVXcjyBFglD7NfdVTnusbU2rdwt+q3RvV7/Pz/OScyfDtPryN7LXmXbFp - WYYXrhMNEeISAaCRKmtzlfI+WuBM1kBsTaW1VXsQtrPuhD7ekfcA/Hs5fL9OUcrBiCU2fQHosSNO - vy3P4cUQTESUpavqXVwN0a3avSl++/2Lu/tT8a09eJvbz437AmvIPGoZDGXJuIXaomZzCtRdDCJX - EYVgfo0i2KrdG9hJeWHe7MDbuP5OGWI+MEkCWesIIpsrV+XDTquQVTlteYY1SEGZSJsYb7nLt2n3 - oRWmD/z7/PT5fX+en9czZse3enDj9UjjrsBc6NKCQo/z21bCKwqWuvXT/mN9YAq2SpRhDVXcqt0J - WC/3PtfvT0H107sfIL3+cVc8lTMXvdU4YEgWPOvUOBlGqAUKo0Xvg4Jaiz1t1e6F51l/Mmca+8MP - dy/+Mz87Y3vynT78hOuR5l2xjekNDxBZ6SWBo6Xs8nSKWXTMdO6xVRYbpbzailu1B2GLc7F4Phf3 - 0xIhv9mBG8F323bFV2JqIpWemZQiGkoMRZPdM9dCk9JQ7UtE4jrqtmr3wvfDizNMw/W9P42uhx93 - RWKcMkG21EkK1hQbXLRSNBuqQfTMDzU08rRGU23V7oTk6V2v97+bK/iTW8mG83zn93XlAdyvPN13 - A8RM404r5EZn4aVUNK1yobVhDo1jGuaEpwxfD7G3avdheUs15b/v9Zyd4Dfe/zAVvt20KypUxIMT - 2PS007ME5ZhAnR2zoyehGxdiMIlwO7fZpt0J1fJ/4OFk65RV65fX/7RmvdmyK6c5KmQxSkLB7JmC - sBTDSLYzGNlOpzcL3uAhLHirdidOf6vf5+dP+umnLI935IHde5/tazZCYLGDyQOJl1o8TIMQp+2O - c7qblnykNgzebtdu1e5L8ZslauREeOv7l0Ryof/t67un9enzJ28SfI9gV4xejpgxA2adTQdAjgV0 - 8NRMmJ7YtBCXgnq0Dsat2n0xLhckn/W/9Of359zefLQfb4J859GuCC0F3edcqEyqSoqRwEjeAlfA - kUkQZsn8IfU6Erdqd0Z40h7/G+9/C9khO/rEkDvuBigyamLQ5FimaSgy6UUpSMFy62n1tbdq90V1 - 5mp3t8yFqfdverXPVq/6/ul/9pdvgvsV0b57/b4LJapWrHZF1JFEHJoYK7JpQ4Cei8pviQK3avdB - Ob+cr1+8OGOT/+HNN2CvfdjX+w4m28FjoEhWMa05JSA9TDHLmSa6zLJmfN0Q2ardFczpu1iP9uMN - aAfvaYnqNAKDpcCMli1FHapSS+hq78KCcHog58WvlaA2andFeNaC9vrr3wB2zHKmEmUesLE+JzQf - OAPXdQYNlRsAqVTlgvuHiiUbtTtxetb/9nQpZnDeIHuzBw+03m3c1/7QYjpaIDQ304xHy2NSda4/ - bvpiHLxM3TO0dEuSulG7E7BX969mp3+f7/6j35+3Kxn/8sP9j4/15cEI+bXH+5ofBrWSqsyBk91o - nHKcA6xKFU1FJQCFM8LcNlG2avch+buXL1+dwu724huoX37elQoXmSdUiksjBDfUO6pp+3HSWkzT - nfm5OnEIac2suVG7D5Uvn/7fV09bnvPOCWR+efmNzpuf9z2klkJW0GpObIaGiUa7JYJbWDfHAriW - hSMatJoWW7V7EzrvDs07fXib19/vJs0HpjsGFvyAzKmZmhhD1vy0IiRUECJ1QT4ijTUif6t2H2wn - VZX8pYjk36lm5K/zmLZ1TT1arNmLxC3w4AAMn+MCvCrDisp4S2uk21btPjz+sO4HnHzi8m4nbqwe - b993iSoaWdIoprcbnKxBRgDtWTVuSXkvtDCGY153C7dq9yH31fP+h35vnzy5W6I+XtwtkUzfLIe/ - JwB8b19uHH/18c47iqYQqiarRpwury/ElJmmOlmZDCKhURFMvO0obtMeg3M1ydot9ekFiL7enceh - vq3YN9YxAlWhGU8ZSXjRdVWsCSZYZkq6nLNAM82TNdZxo/YYri9DTGfcoX+0H4+T/PnRzucy3GWT - 0KJK0+zQsiqrUyerRFsKYTf0Q/LbNaet2p0Q/vV5n6bcs/zjV8/Xxai/+ssZBB/pxgPA9zzZlV9q - jgNyUUPqUpeRAjSplfXcYuEQNeu5DraGcW3V7sPv67sXf/vxvG3+9fU3UD//uO+il7wcyus0aLAg - uOAgEkTZNWmjqjZcqkLqtuht1O5D5jcvf8jPv3h5/+Oz/r/+W33x7MXdv37xz9ba//nFff/b/b+0 - Xl/c4tn+9YtnT5/3f7n//u7FqyffP3yRr+VOXf6e+be9+uG3373sX6xP4zd+uUO6tJ0Ffe3Ca+R/ - /rzv8QAMopqFKVqqyJjopJMVaqk/2YbmyauhhFn3vrZqdxyYJyV/PBHQYDSCsehRiqg0as0xTkOz - MCBFRWrpcw1At5Dybdo9AZ2T8/FEQFwhyIZcSie1a7p4SXF+407zmKySwiMU0uvNwq3aK06gtyRB - 75s7H55+cvOngyElLSkhGUpjSZosjVHMBK5qnXOj4cq0sAbKbtXuQ/+bntv6xZyfmOTnrtxwvfFx - 39VOq+mT6zimE8BAEHSi6dvlJXsTJyTS09SUeqW1VbsXrWUz+LRKzK+//idIb7bsG35OxnlfUuA8 - WSkFD4VhjriU/yGKCUU0jmB1F7Zq9+f0JzyZ1J/wXVa3tn1dCM5YZnNB4xpl9jHlqJjEQgA5kVSZ - kxvcrtlZt2qPoHVeAMOj/XiM3VHBDB5YbdIPllQAFGiIcwAWcmLD81CB5Fyq5DoxbtXuifBlePry - /u5pebWYK6cBfKMXr+N758G+l+819pwU66CwaEEcSGiAKkYEaRrjiljJZq2QvVW7U9mZPHro9elf - luwfp5ztvdWDh+Iz7zbue89UZmRL5V1twHXwWsMEwZFFYgaN4Eprr/p64rdVuxOwp0+e93YBbI/1 - 4wHe+x7tizB10ayWRkPH5khCaVoEDsqIHJDPcaRj5Gvy0K3anRC++uGHZz9+W7/v7dWzMxa7Nzvw - AO2dtn199C5KLlmWuTaprqvhc9VKKlOdXEawUutpJI6V1lbtXoW55rf5TW+9/+UU1+yN9/9Umuut - pn1RoWXOWmFrrwQ6a5HmqoSDoUFtuNORhiK+Rqds1e6I6qSUPz+/+zVEhyT6IbOkCHRzFEgZpx3B - gyUjpRrJoJ8GhYCuMt72O7Zqd8Rz2/A/B88ieA3PTx/3PWfzLEoiHB5kh5qHwJIzh6EZ8aBdVNrG - wtaqdlu1O+Nxd0/bk37aTsej/XgL29uPdkUYgFMopEJIwsrRHdJSyS4PUNXbYbB3wcOtiORW7SEI - //jiq1s+6DPOu9/bl0dRvvl434y6hMrVJW+WaMbO4aUEFw5Gj1wbRCWZzdTlLaPuRu3OOJeIq2+/ - z3enGIvvdOItgG+07xsnq6a3pchPA0KopRxXkNkwL6xFhVozI3vM9ZYDY6t2Z3Lnz6KPzp+HzZzJ - kAYHbcnfCSk6YtPcKMAGBmZtrBpqu91W3KrdGdhZl93e7MBbuI658FZLTU5GnK4wqOA0d705zoYy - QYCZc51Cpiyu69xW7Y60Too8OLyk/AeGmADIaGxKS0gkrz4nUtO4N720BtpPz3kuYjdoW7V7Qjsn - GuFi0JxSiooyQ3Mw0CePBMJobdp0wKb3jIQdkdZ5cat2T2jnVCO6GDQ9GEwPDITQfEkprlgnyXRq - nYcWVagejTC41pHaqt0L2lq6vd/fP33+5MRq8g8d+Gkxe7tt3zIMkkeA6U/DtN7JZkjJcWm4zC4G - KtBA8S7GOi9u1R5B65y0P+/04TFmR6T7Eeg5N42prrGRYYoP6bSwjnEujOmsO0k01gs8W7W7YpuW - 2asTh9j6+jdg/dyy76YwrBXHRZKuMQmDrDY0nOoxiqUEOcw/WRu3GLuN2p1Ktf1cw+7M/ccv+5Nc - f3y7vt5jrfvebNSE3oAVAZ2PgLhk6DFqgIKmgcklFZNtt6j/rdq9sf0jlpf/wN2aaSgQAkcptKxE - rCi5JIh0spAeNQCESkqsibS2anen9A9YWv4Du1HOCU1FqlQFOfKMyEgUCsBygqykGlo5sxrxW7W7 - U/oHrCv6AYMiMe+z60aVpLmu05tKTCuGEVT0nLGUlK5hjezYqt2J0idRU/QDY6rngiYzw6ix0Ywk - 2yIkWXkuMEdQ5FIusaTrmNqo3YfWn57e3b96cD1/n6fldVdf/HBGXdHHO3Kj9/5n+56wDFmMbNhV - FkEtVdECWlMFIog5803nahALfL3CtFW7D8VPoyrsr9PK0iipGeOCeHddhGCWvQuFSgdj0kgmB8nM - eh62Vftfo/WbdyvCfvHTceAX//1L/B+f68PuUB/2X178dOL6vmHchAAuQALPqJtcbtt7sAOEUtO9 - RgaoDJj1ivdW7U4Fv85OYX5godgPYvt48kt+MgVIP8hsfuEovKHBHWQnXQmC88qcDENMN5urtpzL - iIfUatu0ezP7hCqRfpDftFTY0EhEXqPITBMOwTpUFHW55atkU1z2dTtsq/Ygfp9gSdIP4rTSzZHk - HbombBODxxwxIMleJ6bKk0rKiFuxt63avXF+ErVJP2yzZFLgAYfqo6ncHGNSRF5VJ6Eyq1xWWErx - rTbLRu3e5P7xi5R+EBvNVaxDF8NAl1Eb1L55l6ankb0xbBooXKtY7BrEvFG7U1GxT6ta6YfJoTDL - fSiysJyhWi2FpDGACCpXCUhC4tOPX8lt1O5E7h+5bOkHOSHImNeVSAjJrejAEeekx5TQgtXZo8mF - 3ZJibNXuxekTrF/6YX4KRPBaWVNNNhYyQ0lAjCMTiRIzPIKVwtzqv23THsTv9BIQBxYy/SBHM9cp - PW0OaJqV0pXkwRrljVRdkaxZZWzg66185kbtThw/l8/cCrUEr3ii5eJ9sbVzSz1G1NOcZF0zwSck - mblet1y2aneqfPSp1NH8IDNpDCrfsglDS06S8rBeBSvYUlHAJZ759OBg3GoMbNPuxOz+3IKaSxmI - R6pqPtZ8DDottMWUWLRLVF5hpQNrQxmnCPwYev6gUvfrjdSt2n0LjZ2+QX1ijc0P4kytzIGkAJUM - xZuAFKQuqNAJapGyVjnPSbHeUpFu0+6L8xLFNt+E93PTQRueEpwSpATjoiLrAzsXERhD14thnlcY - SNXfwmu3afdl9slW1vwgy8rMMNOjE0kpBJhmJqWQkI/kfeMlRsjFkV2vKG/V7szyH73E5geZ9SAC - YBV2YkgcW5RM+6QpyXVLky8ue7L6VqJio3ZfZqfW2nyT1ZFn6JIUzv/J+Z1LxCK7SBly0oZjoYnE - NciG1rG1VbtTTbJ/zEKaWzbG3LQmlFfTCxsotdJdSp1lZrJxz+W0K5hC8bAxtkm7K6HTt1NOq6j5 - QZaNAVMilxbmCGJM1mn9E2tdolhShcqmbOFerZtkW7W7svwHL635YTMyWcOWUGhPQxAqYVgLJKZd - YZTnyOX8x3B2OzffqN0J2KdVY/PDPrj2dswJcPAINXcmuEvMt+IExlSgilZtCVrdUhxu0+5E7vUK - ltb+KZ7B7vU+PJB7u+kggyQuoQlYqmoV5p855DmOvJ4OmILWbXZZih7XxGtbtUdw+/rTxmanzaF1 - U0M4UMoOx6ty3A4NwkulkwQNGeQ6UW7VHoHtT/bPnzS3KvOAJKCgRDmtR6+CqzwxxsIAQYoZGzu4 - dqvIuU17ADf3B/dJY+NJykGaF22ljNWVxLkWUYQhvdBQkSvdtFtXt63aI7CdclPyOthwEIIS6JSf - bpjUIVrJLDhuglQGVZ72vsW05j3fqj0AW/jq3z7t1a1O/6s0Qoc1G+GbXK78ADXLQ6IqDHHpleLm - tgO5TXsEt/8TPu3VDRArZBEZECuWLbGTmYhAl6Z5NF2U6bDh7erQVu0R3PJ9Ppvb0odH2P3UfNQy - ZzsXfvQ5kljKLa/J5w0Cd9Z5QZZpasKN2zK3TXsAv3Ouml9n2LEArDKOuc250BvtObdGdGFymTCw - TBKmhFss2FbtEdi+++aTxmbbHCAovHay28ixcpeibl3U5fa/MiAN883dfLiN2gOwffm7P/y/nzQ3 - pgDUtONRm4K2D500714sEVtD92IglEjU1i2TrdoDuP3e/vF3n7Y7ELUZcgALDfsSdk4MjM6yTPMw - guy8GgekbmF5W7VHgDstzvKxbjxC8PD4ykpoWtO0hDNnVdVySY6WXcmcOHTOSuPC1bZeMtiqPQDk - t199eTbEkze/RpA2kOrc8Gns4zT0Cw6VmdCaKS9JC54t3Da/tmmPwHZe4sRH+/EIw797GsUPL4Kt - 9Wl4AHlemvXO8OKgcS2ZyGkMZCZrYW7JALZqD2D53R9+dzbGU4cgkR2KSzJCEGWFMgYQ3rHoOjat - 5gLnPehbVaSt2gOw/dn+2yeNTZvEpTC897DOfsS7Bt9Vk5x3EPMZKup9XfC2ag/B9t0njQ0HdO2U - iWZ63MUM4pZYkzAyJSJZeU9+wK20xFbtEdh+/2k75ix2rBiXgKAlcUbWUjrHucI0R5I0Ojk+Qdxu - H2/V7oPtdy9fvjrFM7i9+Ebpl58PSmhjFptdtGbstAELJ0F8SdTMafraOhSPqvm5PK0JbTZq98Hz - 5dP/++ppy/cvzkD0y8sfksu+8fkgVJ0Rck5OuMLml54dCsAGMo0aKBS5FPkYsFqJW7V7ozov4eI7 - fXgb3N877eKHD3Sq9CxrwyQhk9MVU1GJAjAdZq5Y1FZbxpRbE59s1e7D76Syp79UOf27FjX98G3F - kXkgSFylaZzXudCgnCZfitOGYI3cNP2Mln2NI9mq3QfMV8/7H/q9ffLkbrkF/uJuyXXwzXIt9wRa - 7+3LDeGvPj4qjLILKX0yEU1n2o7kkOfS+TQLpxkxUU3/GQTewii3aY/huloB7VYf5AJoX+/O43Tf - Vhx0359RNYREmkqWQXhSzSjTdDepCpSgSAWp1z2wrdqdAP/1eZ8rzrP841fPT6wb+Fg3HoC+58lB - po3wyHomqaSMPAoWqAcwiluthWAODc2JVqy3VLdq9wH5db/74eWfMCzfVG9f3bV+t4Q9fx2/+foE - ng+9eQhveK1PD8P0158fFQeRtIjNGzn9BIOUiRvBeh05DitwfiTMTshbHMQ27XFsv/6M9lcW2KUC - jNZcFKGMYkNOjz21ojXZ1AEIGK9Aft2S2ao9Du0fv/r9Z7bvZ6uGkktohOVg2vRHZCDGlst4SBKq - 5iidRL3GwWzVHsf2u/AZ7fv9HdSBARaugBTDzJCW4rt6TrlUZJGag2+iryk+tmqPQ/sn++fPbN/L - 1iuWazXC66JBEueNS8EiFh1ZZY5YRz8aW4s8bNUex/bP335G+/60BCn75uZCqTmXKGSIXHEXFACb - y6cjk0pTENf9o63aw9C6P7jPaN9/kixl76Za0k0VY2pUbS6jenLLUmehQQ2j3EOiz43a49D+0X9G - +160DltGxTQ0HgE1VylxabXQRYJxKOckbCGqdRNqq/YwtMvlmc9s359cy+s6XRqpwATu6rKHFIch - noKFokqvASMrbrWRt2qPY/t/wmdD6lf8nyUR9hx73nOntRkpAe98WU8BjRJLIhkB5nYPYKv2MLbx - j//7M9pfyYkHsoasutBMB6TkQBZaxqVKTsUkuaxiDspbTrxt2uPQfvfNZ7Tv32w0DVJubA425qrL - PU0PNXIyoGSoqVEk1LHdNhs3ag9Dm7786t8/s33/jDxNI2pMhQHgVJ1+DASpcTBVNRe6k7OpcbVW - bt2qPY7tHz9vNv6K/wNMyailElJWROIiS2uGdlmZuYAqVrNsHFbXdqv2MLT/5r7+jPa9aBVomh4M - 69MyIqY7l27Ot8hBMN1EAWReKC7XZIpbtYehXa7nfWb7/tjOIaoUthYuhI8TmAzYebIBvOxdA1DN - Hm6V1bZqD2O7XuH7DPf9243NaM2QKcZatTIuOxIpGyNK88IV4IZEjrf0cVu1h8H9Q7SfzeRfMZOr - CqhbmJOt1Ew5F5eiam7OtFppKJlr7cCbdVNqq/Ywtl99Xm5/ZUr21oDDgZaRSmgwNOUxxpaAaUVV - Jek92Vvu8I3aw8h++9WXn9G+P9rNNBSkXVOyMCOZaqimiwpCZCwVoejYlYrrartVexja7/7wu89o - 328kqyUrLqLshnhTNQNanNYwlxntEMmoIoiX1f/Zqj0M7Z/tv31G+/5gCyGEMTmTdcxQqsS7UdOd - WQ55AqtlOrKqZ1p3LbZqD0T73We079+QAtGkEct+MJvzqghqqZhJaLmPvFJHKobZhxCpjdpd0b5e - z+Q8pq/34g2Ybz847AacCRISaj9dUiOzATU0KOiEXo4ahYdUen64AbdJuyvFX5ItX2FsPjIcDzSJ - /AhNNG+AM2arRKmQCZ5RSmGC8AKdBn2r1LFVewS7a0QVn4pOltZhLnBSSsiRK0dSMu6YzMCFygEV - NeX0GvK/VXsEuotEDZ/KDrWYnsXQEUJmnBQoJ6WLc3RJrshCyUwHe8tPv1V7BLtrRAWfio4x52ko - mVnHMf3DUuMEJJVkmrei2JwUpRe3elRbtUegu0jU77mrnVA4DQ7QqLTCPGLFlhbvgMsISnSpJarO - VnZbtUewu0ZU76noiOe25E4btgYrYsugBVIyo0I1XDREk5BgnTG3ag9Ad5Go3VPRla6txmlfKA6x - LwfOySTmlCoohiaJXiiD5lZ/eKP2CHTXiMo9Fd0QgfuudVRFecG1qHoI6WvFObCWCD0DiSCuKZi3 - ag9Ad5Wo23P9A2XmwiXnTMfyNDQwMK7CCGxJHaoFZ8CNperXGXOr9gh2F4mqPZVdH1kKjSbKzFPA - npgsgQPmEKYP5wgGcln5ei90q/YIduekrn+nD4/tcB6aur5qzXwjTj1o4tzojBGZ116CmpyMR2mY - xfXof6v2AH4XiXo+d8mbFmJCFJlMblxNgwRcMcSZi1VpRiRJUYQV3VbtEeiuEdV8ro9g81yldC9Q - SSkFXFlBRnLXIcUhwPNYCGg9TtiqPQDdVaKWT2XnFFNdE3bXjIktMEqSi+ljJ60EL6kQJhSwZqLZ - qj2C3TWikk9Fp1Giy6EFIYkKw8FBdQs2UBTVLccCpozGyi2sfJv2AHQXiTo+FV1zDEbroCtECpVJ - KJ2bQCKCm842ciOqBbXe9tiqPQDdVaKKT2UntG9YQYFIsigJVGJfsulxTc3IlKxQoCquiQq2ag9g - d5mo4XNNFZOpgZ7zXyOteeda9grWFCFLp9JZVL1N93s1VTZqD4B3lajgc9lhs66Rbb5Y3zEAyxqT - yciz5k1JJYx22NZThK3aA9hdI+r3XEsFmIFBbI4kG/REITkq7UnJJEoUukZjSKhb4vqN2gPIXSSq - 99xjVxRSFuONKMYWEQkFSj9IgrXC8umF8zQNkHXC3Ko9At151Voe7ccjDI+v1lKjTEqXUg3TTBso - UnEMqLrweTp2SzgRJYPrzvRW7REs7/N9v0rU2NqZx2jeHxr7pwzZ1IyjCSWCJMFGAtBDEsM6hFmS - raAsqwOxVXsYymsEkV2EZC6RFcUY5yErZjJkjH4OPV+Lk5KMNUaBMasXv1V7GMmLxJRdBOVSZAJd - k0EODdMtj85QyVwpbTOvqgrkDoJZ59et2sNQXiPE7CIkhyYOyJXoBZ1zLRIPkknjba2UWQYhm2y3 - QblVexjJi0ScXQSlaqRYwSo1CwPQmA4aopwzZ2XMGjWsKDzjGq67VXsYymsEoF2E5IAk9BDZWmQB - hJBdeiE8J+YqjiLzMAOGWV2RrdqjSF4kHu0iJEOB0ruyijKP0zBtWXNlTNJiLn5WD2OJKS3XMblV - exjJa4SnXYRk0eihGjJgBZqkrJuIrGzT9eeqh9BRN83Temq/VXsUyatEq10EZRBLNdZkRBOGRZ09 - R6WIETe+Gph/0JK+SK1XkrZqD0N5keC1i6AUwmkhBQ+JdzFKRlY5UOMqBswWuIikLCi6VSXZpj0K - 5UVioS5CkuemZQcx1zyFkpJo5JVEoYwmIwMq01XkfL3juVV7GMlrhEZdhGR0MvOs5rTp5+DyQ/eB - k1VFUkimT5fD9NZvfshW7VEkrxIpdRGU0AOLTMqaHGOpDSdxGB1dhEiCMcGHCpzRinKr9jCU1wic - ughJZDBKFSFJCzhnx8CA14GWcJlBuVC6GydvOf62ao8ieZE4qouQDORElyOYIOJ0Mwz6xIIVTkjF - 0IoESMK4utaY3ao9iuRVwqougrIxZayRuJxtZKm6XTx8LFqGqMmawYSi5sqaeGar9iiUl4myugjL - DnrJDyM0CxIqBNKNelSBxBJQpbSCttTgXpfKrdqjWF4l6OoiKGOKTaDuAiSMiFJyHBnACEtZNmmw - +iJlWE+3tmqPQnmNGKyLgJSlaASllF7KFuZqjJ2AnNB9KaallqjHmmW/XVDcqD0K5EVCsi5CEkdn - 2ksTdJ6YZKHIdCWVWIzZMMNQiIGabubrRu1RJC+SV/EiJE0LPAjh5hoYgOs4XUIrwUBQuuQhsVdA - Rrdke1u1R5G8SBrFi5DM3FAnDIZn7Ux0lJTQS1ykMs2CYH46GirldUxu1R5H8hJZEy9Cci52Akjz - xofmijlfjASlmfCdu2mOzmUwB8tWl3Kr9gCSF5lYT41aBqlADzMEqpAhGCGTsIlybNOPMMqw2FBL - tg7CrdoD0P3paf/ry6tEuq6deYTiz+0HrYxMC2Q64+DGslqsANRFcRkZwRjC85b6cGsqlK3aw1Be - I9L1IiQlVxLHUuumKaa5nh4Ez7h4iEGnIaukkHjkK8mt2sNIXiTS9SIou69cTf++9UyUqg8OlK+V - r7Zn7aJiKRbsrcTGRu1hKK8R6XoRkq44T413S4bIZN6kASGRopqTJXRQI6lQwhrpulV7GMmLRLpe - BGWSzRoCrVJSRI7bOlKR1JZAOaYSCk6Md75GfWzVHobyGpGuFyFpUmwMHVbShbwLBhmqGsD7GAQa - xiIK6Z1dbZ6N2qNIXiTS9SIk5wCjUKvKGRF01IyWKzssLzGPLHHNVJXGsDUH41btYSSvEel6EZLz - m6ckphkjnZOjO2UDAVq9BJpTi9h6Vz4YfStis017FMmrRLpeBKWsipuCPivurDHTt9DMcqm6aUVR - TZ2rwTytFwm2ag9DeZFI14ugFLV5JT0jYi1Kn82AVo0cSTrynBfqYkiR1rOsrdqjUF4k0vUiJJfz - YQHKQJojy08vI6hslQyuMiU0Vs6RRUW3/H8btYeRvEak60VIOpx+YmXamelKgOJahU5DZwXThoEe - ZDFcQllXyq3ao0heJdL1IigzEpc8s0qSL1XIhWE2VU9uDC4tQ00KAt3ylG3VHobyGpGuFyGZSqQl - 39gSZEWWLAIC01IiBxTeGIeWI5Y1R+dW7VEkLxLpehGSkhWhsgja64w6dzHNUYbkFDndRgIDsxXV - bRt9o/YokleJdL0ISoQqsICzPnAu0xAiMBiZd4mevAlKKEAn1+l1q/YolJeJdL0IS2ErAbSJKXhJ - VRk2uh7ENElFSbviPZgW1iPnrdqjWF4l0vUiKEvD6enbzpmVTjCURqrcTY4GjdVSVEStFTe3PC7b - tEehvEak60VADs2ZAA2lo1aDp9IyNIougFRF6x64CUt61lsal23ao0BeJNL1IiQxB2MEG7LPiXOp - R+RGdGqOOYZRLIFzlHnSah2SW7VHkbxIQNZFSDbmhOR6DqYBrIwSLYGRhhEjqsZww7RtvIjb7Z5t - 2qNIXiTS9SIkkQk/5uImGwuIXqQapKYkBzdJFuJLlPL0HW/FNDdqjyN5iUjXi5Bkc5AxHpSUQzHU - vNaGMsjMQXE1Pf4hvfZGrVkGtmoPIHmR4XhuNnrJ4yBqgDHlEgb3ZSjJQaIgJpUDAdh1W1Mrb9Ue - gu4S4+/cQnGkYkThNIEwfQjgAw1Q0aSbMU5Oa1OUKtZ4na3aXdF9NUb9Pj99Hvqz/GNvX921fneV - aOXX+/Typ44+Vo/sfbqDPBJe5bRMWeyYjIZp1ignI5iqpqEqeLPdAJbWVo9ko/Z45tcIa/5YkMsx - l0bPwfGMlKZ/yaufHiYLYmId3SzljjGs9UK2ao9HfpH454+EuTJKkGNqsMw0yBb49GBQzyEsuAqo - GEdGIppbeu5t2uOZXyNQ+iNB3qZ7SoaNYLpjfGhasopIkRoiy5UPX3gX2q+n3lu1xyO/SET1R8J8 - GmAgpFYocg/IivDTL+o8zgU6EedzweY6c70Gz2/VHs/8GqHXHwnyoiATVAdOdxYlc1qwTHxJy8ZR - Rs1Gz7L1dftqq/Zw5BeJ0f5IkHvd56jFzisVtJy3IsA2L/UctYSTpC7QzO04aKv2eOTXCOb+SJAb - zsWwRRCQQiks+doF55yEyK12iwUJwKyu+Vbt4civEvX9kTCXhqzkS2YiQA4p5QRVUi3WGTkq67qR - UKrjuh2zUXs884uEh38kzJlmrHfN5wAFE7GRypHzztmQmnht2Umlxm0Lbqv2cOYXiSP/SJCT7yxw - YWvUumstjCm8ZhG8BM7QBInEUNG6A7dVezzyawScfyTIwSQTFO/ERDC8FqUCxyWTcsChSPlkJJfV - uNVN26g9HPlVItM/EuZtiVluwUIxxVQpVZfJ+8I8M8VzGbp0pN3NNd+qPZ75NULYPxLkVWBWQSjH - o0u9CyzK6WrMiNwWKT1zbUBqq2u+VXs48ovEun8kyLuS2CrSXIe14HOtVgOyUK0kiaqrEFmPy5Hp - modko/Zw5FcJiv9ImMc87TBLOqBhi/dFuuTlHkNXhiBIr2WMwsvVgNuqPZz5ZaLnPxLoBoMXgkTQ - qZc5iCFMgtihTIdbSDYXaiY5N+vt0K3aw6FfJcz+I2EuTBBVAglJErsOIkehknSMEB2vMmiJJqU1 - d8ZW7eHMrxGP/5EQ75JKLyjBC++sVRKmSaZSK6CyNEwWYEErs27BbdUeTvwigfsfCXIyUjUwkxRn - BX0AzZt15KQn5rSas3jAXvKai2Or9nDkF4nw/0iQs24sB86FnUN1ybmqjTZK8GmjZQtgTPSja7Ne - YN2qPRz5RWKPPxLkLgIloul+helgGyYYmMHk9LuVqZJ1EsBQivUIdav2BOSXiFn+SJALUaZ3xbR0 - lo+lpIuixGHECIpCNBWYU0LfsoBs1e6K/Ou7F3/78cxw5uX9D315wPlWy0ElJ2mOL5jek2UuCNVs - FQZAaZHQar6ceExTW+MKbqv2AHDnxSRfhFsfgyvehwtcoOCQpGZCCWWknTOqmuZyZNzAesqxVXsA - txMDiy8CrvpWBUEG9JYLgyAN8DotHe6ZZs0ImLYtpzULxFbtAeDOiw6+CDcjitIdI1NsqVqmlKDB - mdZx6KxxieK2RUVa7z9u1R7A7cQQ34uA60CMC2kdJCaE7gyZBOaNl67WZi2lECIOuhWl26Y9ANx5 - cboX4WZ8nAxkFpIP0LZbFrVJxJRjBRSwxIwwQt5KQWzU7s/txGDbi3Djc9ZTyLgOpIqNRvkchfSs - W60SZjGYD5rr1fvbqj2A23kRsxfh1oQmipYrBpkEUx5VL1VEZxXnEWxGA8LxdW9uq3Z/bmeGvV4E - HLcUBEosc6WSimUmhWDJDzUtw9qIaU7c8bS6Alu1B4A7MXb1IuCKUV1LnTkxZxnzMNcwVZGTNwlU - 9QSODSlXk3Krdn9wJwagXoQbADhbamtSFnCSWWQgMGPggcnGZdJOKMbXMsdbtQdwOy+K9CLcjBdk - DJklYbSInEvUVmvFKhM2JaaVLmCFLDeLcpt2f25nhoJeBFxNds57whQhImSoGlmnINFKb2lMN40J - xO7WFW6r9gBw58VzXoTbnNgkCjTVj6T5EFpGR7obpXviRU67n+p03NYsmVu1+3M7MSjzItwEJ9Dg - uCotpxYgogZGrgqYzvRyg5n1aX/IW5qhjdr9uZ0ZWXkRcBIIWh2J01y6EDp48q0AiJYDTotfCjlk - TGspqa3a/cGdGh55EXKquJiRaWMaX2sJNa3U4JgHOF8EiiyGTzfve6t2f3JnxjheBNwQjC/RClpQ - EdOrBiOQUDQqEqosJRNjqP0t4c9G7f7gzgtUvAi2OeVJRIwhZI1GCpuZnv+MuXoZ1EPXkoVBtLdI - tG3a/bGdGG14EW4SmdTdBR9Ldaw7oym7ETNVNYxFmqY/68yvySu3avfndmLI4EW45QTgaI4YFCYo - 2zkkQ2LZJwaX1TQilz3kuaCttWU2avfndmLc30W4KR0A+Rwrhuul6ESQAiNmbXjwS0YbL6NZSgGt - dslG7RHcTgveuwi36jlgEi5X8Fx6r5gttUQlQzfAJed2aJ1uhwJbtTtxW/dKev/6xfLdnAPsNVIH - miBpmhMCs/SSeW3ARS7CtAsTJErCKF60bulWY3Srdh9Ev3n5Q37+xcv7H5/1//Xf6otnL+7+9Yt/ - ttb+zy/u+9/u/6X1+uIu3z998fxfv3j29Hn/l/vv7168evL9wzf6M47f/D/L3zP/tlc//Pa7l/2L - 27b0Nx7ZfDLbzqK/duG1X4GfPx+UWT2KGIwSRmbNpY7ORCIHgycUDqMGrklwtt5226rdcagulYI/ - VVK8qqxUQEwVUFH3vTrF+FAklyIUrBVgMt4qOG3U7kkq/vF/f6KkZOVaSNK6S0leFsY1szYOlwJU - 1LVJharf8nNu1V5xbn353bfh/dPqw9NPd2rtLkdrg0EuJQgxfQqi3LyoQCZpOa2dHABu1utW7T6/ - Bt/03G6Bf7fOf9Pnl/Sf/e4EcD935cbtjY8HHdSmqskYbEkstwCNUpr4UsUQWGSE07vAJfB5dRa3 - avfC9td81+LLevfir3/CE2D97i8/vLi7z+VZf7MrN3a/9vSgSqTSG7QNYGSpiipSixwKcZFKNBwr - I+OkYmusxFbtESi/vZ/T7pN+yvB7pB8/DcX3PDroKqc3bIkUy1AVSEFMLImyUDAj1JLylEnwboz1 - wvZW7Z4sX4anL+/vnpZXy/J5Gsk3evE6x3ceHBR1Nq1RttSdbM0qn/hc90QyliQnRoFKFo111CvF - rdp9KH6bRw+9Pv1Lfvb7fP/9CQTf6sGN3iONBxm1rnAHek1HOte8Oaq4MokRC9UBLNdNWjbBr/GC - W7U7kXv65HlvF+D3WD8eKL7v0UEsG3YLwvglP9G0LSGbjLwsOU3iYNkGVnqlWyzaVu1OLJcv+Zve - ev/LKeboG+9/YPd200Huv50rlwZjgmYokTkSILMQCozIZLQwoqlYbu7/Ru2OzL67f3rGhurP736N - 1U8fD0rhLknNQe1NpWFAYnNJqUhczi/fJBHDNEIYF2ueuK3aHTndtkYP5/T7p89Xz+Dn/+jG69Hm - Y7jpmqSa7hpYbZtQnbVCVnfphMoRFE7HwCh5uzm0VbszN3f3tD3pf3zh8sszfIVH+/HauHvs0TEs - AxaeWMzEmpOa6SXXIgEWxognrtxyHVZzGRaWW7U7swy93H/7fb47FeTPnXiL4hvtB90rmp4bm0Op - qzHXLG9z6AGJG43ZsKQTcjGSGWtI2lbtzghvrvGZ/G49eAveL40Hbbrk1BgLzGcrg6htmh5QhYcE - 2maHZAgno1sY6FbtjuROOlH6/atn90/9i2fP8n2/y8/W//ZhDXzPk4PotbXwJ7hR5wom1BxFzvM+ - mm5QOFqOdZqRt22Wrdo96Z1zynRVeioQITDVcfplpD3DtCQgRW9AF0gaSpug2Lp3vVW7J731iOgz - vZ+ieUOepoeBxD0zxrQyqILhLSZwmscQeOcu36o/bdXuRe/lff/Lt/3+/unzJy9PWfJe78BPK97b - bQeF0oB2wFAMRVE7p7UJXHQzjUdkoi0ZWIjHatbdlK3aI7B9+bScTm724TF4D81H7WyiENN/42Q4 - GGFUgKzzUoyhB6ZSUVUxYrdJc6t2V373+f7ViYNuff0b1H5uOeiENmgzkvZycO8RE7nitDBh2voi - OZ6pQ7IG1q2wrdp9gP3xxX/058vX88uOxgncvuxPcv3xl77c2D3WelCKTiNQzGFihZMZm+kMlgR+ - 3CimTGqw3HoWxq9JkbZq9+Z3kpvwNrQzcCmQjGgtKKqnZy2UY0IDGs1AB2zzAc41zdxuh23U7o7r - HL/gCrhACKWk8YMwRtNV1cFo71NkhQQtqW494BxNa4KIjdrdcZ3jCFwBF3FvhSad0QjlmVrGCbHK - 0BLXYA0DAGGgr9bjRu1OuO5ym8bZQ/zAGbje6MADsnfajirnOIpGFbuwjCHHHDonZSThHC+ZOJGU - Yk6At3KO27T7YPv3u/zDD/0uza/wxd2PJ2B7swM3bO+2HZRcgKlaWvOJFkPCSKMBDEvM96Zj5qpm - FHPqW7e3tmr/a9jmv5YTrt/+0/8HU+I+B5KMBAA= - headers: - Accept-Ranges: - - bytes - Access-Control-Allow-Origin: - - '*' - Cache-Control: - - max-age=300 - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Length: - - '29612' - Content-Security-Policy: - - default-src 'none'; style-src 'unsafe-inline'; sandbox - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 09 Feb 2023 12:50:13 GMT - ETag: - - W/"c394e8a37b4721b1e7b240bb2039b6575832e0a31ec551ae5d9959253b312c33" - Expires: - - Thu, 09 Feb 2023 12:55:13 GMT - Source-Age: - - '38' - Strict-Transport-Security: - - max-age=31536000 - Vary: - - Authorization,Accept-Encoding,Origin - Via: - - 1.1 varnish - X-Cache: - - HIT - X-Cache-Hits: - - '1' - X-Content-Type-Options: - - nosniff - X-Fastly-Request-ID: - - ffaa532786d7e54d0f4a5af6c3a6fd3e6ab4365c - X-Frame-Options: - - deny - X-GitHub-Request-Id: - - 43AC:4174:2F38D:861F4:63E4C08F - X-Served-By: - - cache-hhn-etou8220097-HHN - X-Timer: - - S1675947013.455878,VS0,VE1 - X-XSS-Protection: - - 1; mode=block - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0x49B35BE7D96888C02F342552aB218d859599aCeb", - "data": "0xa311c7c2000000000000000000000000e2e4f2a725e42d0f0ef6291f46c430f963482001"}, - "latest"], "id": 0}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '211' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x00000000000000000000000000000000000000000000000003c36acf48db0f54","id":0} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '103' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:50:13 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0x49B35BE7D96888C02F342552aB218d859599aCeb", - "data": "0x6ac0bf9c000000000000000000000000e2e4f2a725e42d0f0ef6291f46c430f963482001"}, - "latest"], "id": 1}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '211' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x0000000000000000000000000000000000000000000000000000000000000000","id":1} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '103' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:50:24 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0x49B35BE7D96888C02F342552aB218d859599aCeb", - "data": "0xd37c4d8b000000000000000000000000e2e4f2a725e42d0f0ef6291f46c430f9634820017355534400000000000000000000000000000000000000000000000000000000"}, - "latest"], "id": 2}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '275' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x000000000000000000000000000000000000000000004fbe3e248e8540d9fe42","id":2} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '103' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:50:34 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.25.1 - method: GET - uri: https://raw.githubusercontent.com/Synthetixio/synthetix-docs/master/content/addresses.md - response: - body: - string: !!binary | - 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 - FHPqW7e3tmr/a9jmv5YTrt/+0/8HU+I+B5KMBAA= - headers: - Accept-Ranges: - - bytes - Access-Control-Allow-Origin: - - '*' - Cache-Control: - - max-age=300 - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Length: - - '29612' - Content-Security-Policy: - - default-src 'none'; style-src 'unsafe-inline'; sandbox - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 09 Feb 2023 12:50:44 GMT - ETag: - - W/"c394e8a37b4721b1e7b240bb2039b6575832e0a31ec551ae5d9959253b312c33" - Expires: - - Thu, 09 Feb 2023 12:55:44 GMT - Source-Age: - - '103' - Strict-Transport-Security: - - max-age=31536000 - Vary: - - Authorization,Accept-Encoding,Origin - Via: - - 1.1 varnish - X-Cache: - - HIT - X-Cache-Hits: - - '1' - X-Content-Type-Options: - - nosniff - X-Fastly-Request-ID: - - 0145020897a01b944bedfb5125e20ea9fafbc142 - X-Frame-Options: - - deny - X-GitHub-Request-Id: - - 75AE:6031:740A9:E4DB4:63E4C553 - X-Served-By: - - cache-fra-eddf8230073-FRA - X-Timer: - - S1675947044.323496,VS0,VE1 - X-XSS-Protection: - - 1; mode=block - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0xE28b785ecc2Cb5FE949f5f31A5aEC3989f764838", - "data": "0xb410a034"}, "latest"], "id": 3}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '147' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x00000000000000000000000000000000000000000000000003782dace9d90000","id":3} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '103' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:50:44 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0x49B35BE7D96888C02F342552aB218d859599aCeb", - "data": "0xa5fdc5de000000000000000000000000e2e4f2a725e42d0f0ef6291f46c430f963482001"}, - "latest"], "id": 4}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '211' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x000000000000000000000000000000000000000000006fd1b549277fb5a24c3a","id":4} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '103' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:50:54 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.25.1 - method: GET - uri: https://raw.githubusercontent.com/Synthetixio/synthetix-docs/master/content/addresses.md - response: - body: - string: !!binary | - H4sIAAAAAAAAA+y9a3McN5bn/d6fguN+szMxbQMHwAHQ63EErt3e8S0s292zG088javEME1qyVLb - +vaLzKIupCh3TuxkZvVStiWzkH9WovJXAM4BDg7+1K7b2fnN2eFZO7s4vzmcXfWzdHFxVq4uD9ep - HG7Ofjk/PDu/nAXlxfV1uzycPXl5OV4ezn89u3l5c2g/f/LRR//yLz+265vzq8t/+Zc/nP2vv8En - Cj6B/++/PTscnt/84dNPn443eZE/KVc/f/r6l8+vPr159fOnh+vWPr39tX/+6KN/+qd/Oju/7Fdn - H3+dfj6/fHrmri7/Nm49bnDz8UcfnY1//vymXrX9rV1cPW/XZ61cHav0r/OFy/Rzu5k+0psav/lg - aXzy69bb+Ez17HB1ll9Ov3N+ffbXm6sX16X99ezJ1cV5PT+8POvnF+2TL/r8njfjPc+OiunBvbgZ - v92vrs9+fnFxOH9+MQovbw7pshxvfPc5ntXzPm44PcNx4eZw/aIcxq+m66cvfh6FN2e/P7t5UZ6d - pZuzv85V/uTm6uKv/3r21++vfmqXTw7p0OaSs3RZz/767fXVry/Ddw7IsfD3U/1uSb1+XDPcq/G2 - vY9P/+qhTFWbn9xcn+kB95YOL8YTGdrpQhs3+P1ZHp/mML9+Pt3r7DBq2g5n7ZOnn5z9Nbb27dV0 - 3+nTHyvzumiUzM9q+gy3X5vy8t/by7P29A/j+Ybv/3T7a/OnnF8foY9HePbxn8bHezkhnx/d2Zfn - lz+9om7Gd/O27nkw/+WtB1zS5VThVMajn6AMnoPS2f96pRjf78uf2vXf/VK+0v/+qP/nsxeH84vx - Lfjk7Mn5z88vXr79LF+/9/xQ33p2o46vbvO6hp+8/rp/cn41iadnmeZqjd9Lh/EVGZ8uXfySXt6M - b2Y9v27jnW/f9GKwH83zb8dW9uoZvL7/KAqj4PpmPIVPjo8qjufbfk2jym20huuXf6dCb57Bq6rN - n7/eq8Ab1YvL2q4vXo4vz1s3nDSX7XDzr1MzaNfHL89t4fEh5TbAtzu1/9fpCz/a8t+p4NOrcb/z - N/X86KPf/e7sK/PF11+H7z/66LNDyhft888O1+PPs89Hv9E++3T8ML14MjfX1y9NrdfjO3J8Pbqe - z+fqv/nns3eLpsL66he/a6O9DRLjd+vDws/SbVv5t4///3yRLn/6+OzZ6Gv+7ePFHWK+uMqvOsQ3 - D+TTezWYGv7H96s1FX72afr8/6J67fV3aVQqHd/+U/KrApaDojlHjTYU0kA4QxmVJAqTXBZW6pwU - +/jz5dqppu9W8oGq/6dIufPr8uL8YK9b+mkXUHcrcOT0btk6mHQHRqsNgnmOpDOhLVjlHJdCcq5Z - SWY8fdsnTEu1K2G6upj6let0Ea4LkD043a3BLah3C9chlRJhyTKahfClhRYVF05VKpUmziEtXqvm - CZ9ILdWuTurwbF9OR7Po48/fKVqHkSiKcZ5LdUxFmqwIVjhaeWLC19CMALDCdzMxWqpdm9FX6TI9 - 3affu1+H+6zeKl6HF0HZmFZIRFA8gicpBEcVwYYgUTlBKfGu4MRrqXYjXrOFfwrQXrsaD5B7fW2l - 5iZZEJSIwq0GTtFTwbmharSn3KWsnIPNAurc3BZq18b35NnV9WFXbnMN7gN7XbgOKRqhsEQJx8JA - wmhG0IslTDHU4982ClkSdG5oS7Wrk5q+vPvbGg+2r5UbljLUEOK7TIZQAlxLJ4WmmkI2ihHaVB2G - X7Wz8b5Quw2unQ2OPWDlJqxIslCtsqMCueStisKYsx0ii0h4VD2qCdZS7SawTqAr3AEXZYbSYeXF - pAy6MAx14gRXygbdkPIqh2VeMylzV7hQuw4un54//yqdXx7a5TRJuQOpezU4knqgcB1SJhMLnbqu - pS41R44SQdDIxPi3OWHiGInAz+bFUu1KpFo+uFSe7cLo1b1v6bz9cqUWhEBMksMcYFro4dNSRzUn - LpIKKisQiHFcInMLWqhdi8tFezp6E/P8+fXV39LFzS587tXhFacHilfiJXrFJkbHJYfx3SSJikGo - TE7zSaaIQDmwYeTNvBZqN+IVxohwOQ0JV9fDn9mB3t0KHNG9W7aSFRiFwkiQ9Z6z0pkqdKpNJoLD - MfpIxK6drnS2Ahdq1+L2/GoPS2K+76v2dPvjOiwC7ciJ1MknDJ3ITJhW4BLjnVYvqQBjWFazA7VU - uxKLeS3qizE8P71O07LifhNM76vKLbHfuLrSfEXkVFLFhdZCAJW1oyEDhupijEqjmQTXDQY5z1cs - 1K4DMdyU66tf3LNW9lkSuXP/217vftE6jFhmWjdCTKwKCDWuKyMSCcVF6risyovAaU0To6XalRhN - H+DP18Ma3gfRW7d/NS7dLVkHkKPGhDGSqGwbU2inOQcmkkIGTo0BqDLaJJduArRUuxKgX8uzdPm0 - 7b7A+HBFbqG999o6+JopKVQtFAXNM82i9IxWj2bCrbKKWiBEcDb3gUu16+L7bopm2JHafP8phMm3 - X7+9Pi9TFMUddO8RrMMPuQJFqoeapQTnCVWGuOAk9JRFjspKVMzMU4NLtevye9IOh4s2BU19eZ53 - 5HinHncJvnNppQmNJAzzMhIeqMgAITNEbgUySpIZcJgAGcrc9pZqV2a30yrXnfvfY7Xymtaw+CTr - oLQgffxXsMg4WeyZmwqUG5COCJyX+Zdq12W054h2PXV7sbXvWjEXs1t8OP9bu7lL7DdEK4VqNEMI - TnMVGL0UvgDnKIbRnoRiCiQo7jkRsw25VLsOw9sozB0I3t75SOqtFytZ9RY6U9q0wBUBpgzXgRmt - lSgVFRVMEkmhzaPWUu2qRHafeHqwHndobTUN5bSPvYtuBBLRq+aT3aBBZqUhghWSadqGhT8b/Au1 - q7Lba9B6+/Z3SK29okUp8ohpOFKsKy7BU5118lVQjEUqUrIMjcA8v7tQuxKgi/breb5oOzaruzW4 - xfRu4TqkihQyOZtYIYIgDL+YEQBATNo7GRlSqEp0MZFaql2J1Itpi8HNV+n6p3bYbwYx/Pz88PKh - utxaGL91eSX/mXEmpjUQNLoz0wWaUtBPAxN3PXVgrbec5ongpdp1EH5xc/NiWqDdfSh7uCJHgu+/ - tpL7zGjQzJCeCVrRHFYBhRjwSifWNUqoaNPRvF+qXQ/fLm3ueOM3eFadkVeUxEKC1JEzGJZfrazg - sP4oJ4rFCixpTt28lLxUuw6OL8//94vzmsb3cwckb25+xHL39Uqrj01P+wqk9iJVHmTXVQtqkVSm - h5MLZNh0rOIcJ7NUuzaa79ov6bruMVn4Th3ug3qreB1eXWokLElKOW+cDlObOGqwi8lWwMBD0giO - zE1pqXYdXl+lXaIEp9seqbz6aSVfV4lGQ4YYQUVukElvwGktaVTORBFFpkHKueEs1a4D4ut5Imbn - dax3K3GE9HD5OsikYVVplSWVTZDx5e9VZWAwrV2JSIzg0sjW8oRsqXYdZN9ctq/bwTx9ej0Fylxd - T+Fe302r5zuQe29djgB/8/JKu+mkrMR72QzQAaQkWovnoVBRqnQtUyZ6QuXn3XQLtdtwnA2tetxi - fQIo367OwzTvK1ZymPsw7kYfqKp1wcCwIkxuyERRigntpFBSWd3mEKil2m2A3vgQvzgBknM9Hkb4 - +tJaK5UYgRElQFGfKyEYbfRAafRMVSI5U4qrW1droXYldr9ctmGgXaSX31zOA0578fMe6B6oxi25 - 91xZaVdeo2hQSQRK1GQdyjG+MccpiiqtDDUiHxb9vHyyVLsOuDdpNXbAdTenx8ef33290lw8oTRJ - 1poSEmMerUYEWoQUtBhmdWwkdUgY57n4hdq10dz88MQ/EjxCmkxbAeUpaEkkEVA7r5FT5YVK4DlW - 0QU9bohcpl0Rz36rj/Pt3+Ky4u4szoeVh5I3Cpwh51LTxE3tgRkw2RKjoTKi591ZC7XrIPns5nm6 - PLs5vLxo//Zxubq4uv7D2e+MMf/97NB+Pfy+tnJ1jJP9w5Tupf3+8Oz66sXTZ7dP8PXj/+zT6X3G - u714/vkPN+3s7T5yKvt/mvY/WP94Y8yP4ZH0jRVqZGIKnuaSFpWr9MqwlEDGzhvgcMMyJ3JeOFmq - XRWNN4+ETGMYwLMiC+PD/o6GZSeZ1IIM/1dIKhkqRQw9Lmkt065K5ofHYk9ErhoQEkzUmiBDsJZy - Dr0kRhsZbq2ULCs7u1BLtWuSsd+7R0KmB6pyw8xsVcqAByO7huGqEtAQZNIametu7s2Watck4/4U - HwmZeceikjFKHKZ1oY3KxCFyXodB52UEaKo1Ou8aXqpdk4z/5vtHQoZKKoybJnMoARuFq0KFbi26 - DtXBGD+qRpmPSUgWatckE77/0yMhI5rkThOGPSu0XjZXSyaKJ4KShVgYNMNomdc/lmpXJvN4hhpK - ePOR1sTEMLNQcGXjsL9AZEMDKEcxSQJsDhpbql0Vzg/fPRIyXtLmYtTDFDbCtYrD/uJTZhAsgjAx - ONgpe9K85L5UuyaZP9pvHwkZLXuDYVsxThNxVfmMER0BaoD7ojr3xish4nEhcJl2TTL/49v/eCRk - ImbqEGTTYnRNrAxHvmirQCTCIHbSbWeNyNk8W6pdk8y/f/fnR0IGUCstEqtxmL4sEyljUcCqx2qo - 1aJLMKnrOc5/qXZNMl9+8fW/PxI02TouRMk8jofbeI6OW8m0JJUhGV3UaA6hhzBbzku1pziJfVwq - et/89e3V/9fnsP9xFpG+a6nOD2P/ZOuvq3JEdOflOph4YJnRZkkQbjQw5DQEGlAEWV2ITQDJhrU+ - 77pZql0L0xR6eszfsQuaN7d/ReduyUqdJkoaASixNCJO5hwSGQyygBa8Yw048kpnG3Cpdn1AP8LO - iH6EdyEdy1baFF8UDvNaoXA5MjpGKB2tReUk18YLWyUoAm0+qGCpdgtM++2nebAeD0FbfTcNVSCZ - sl63oNVoPI7SPqjQYRCGgpGhpnQUzybjUu2a7G78+c3h+jy/mCyQ3cjdqcXb3N65sJKhrx0Mj4pw - TJK52oRmHWhHRjS1RELlRDYW55FrqXYdak9Sb76V85+njOa7bBq4V4MjrQcKV9qDwz3CGIGs5Z5E - gnxKgs9tVCS6Now9UVVkQR7zQC/UrkRqyiV8fvn09ou800rgvVrc0nq3cKXgkzZagxCZy9I94aOZ - MAkyMRFRu2Ht6aKyiXKOm1yq3YbWPisd+9Kiw66jMCUkEIZiymNo4jIbqXA0Ik4KCNZ4ocdd8wu1 - K9E6f3rZ6gn0hQ/V45ba+y6ttF8HlAErtUt1mA2CUTesCY5tdHaAVMYoSJFEz0siS7UrsTukn958 - m598/RebLqb9znv4yO+tyy3D37q80mSwTaHWMTpJBmK0owCWUqOMEypkqI541DXQeQFlqXYLjuc7 - DW93KvEQtTWTfktCdC3eQONaM5IklaNf1AI7gVK0Ir44mo9Jv5dpN0G109i2I6phocsymojxKbCk - gypKCoe0MaslyULoKiOKeYllqXYLVDfGfPvlyfSP2zKTqaPoVI6OjTSrKBqQ0SuiQopoMtERY0I+ - z/Av1W7D7Kv/+fUjZeYdY8pJMSWM40XWVGPIMvApMjlwITUySpk9Lv8v1G7CbIxe7sX13/aYu3pP - TR4Cd+fiWmfBOCo4GI6KUY1KWaUDA9abNsw2ZjQJNoM8ngWzTLsJQffNF4+11VFHvZYdR3uSQpvR - //EkzDAwxgAmtJDMZOFFnWOil2o3YTYMkR8uz29+Sc9/pLszu1ObB1vffcFKq2jKy86oGI5jSZ4x - iKhS6olQWeRocMo6wSXOfehS7TY0f/juNPrQbVtfIVVpzd109FWgw5BXSvhIzXQuliTdaSmzKLHN - G/IXajfhFe0j7S9hGIMEUSCSQj1LDMcLxRG1oHTKoIWmMunyMaxnmXYTYn/85ps/PlJm2K2MJEgl - FEiOuRJqi8XacwwIxYjIo6Zynt9aqt2E2VdP4vePlJn2hDBXQKsgQ6KcGkW0gykjXZKEUYnesJzm - deyl2k2YfR2/PJ1ZyW2ZqdBVMWCKSaaHQnW3o8tzlAqcDv9hQkapyHEldKl2E2bfP/nSPFJmkdSm - pIwQdZAGh/8su7YGESIlUgwcaDyhc3q1pdpNmP3wxJ+Gxfi6Jg/a/W9fXGvexKIRtBnmjKgsTunU - YsXpNFwxLPlkmmMlaTjOmyzTbkLwL+aHVy7RHlFav1GbB0neF6zUhzICMeg4rHqip72sw632Y3AT - lvjhXNPGo/eizedBLdWuRPPF8+cXL5+UZ62+uNilGd6pwC2zd8pWwlRhmBxcqCoYxkailk13yWl2 - wGhITpWqaZkPAV2qXQnT9Bi/a7W1n/cZ3N6+/y2k+0UrJWIQjFGmTddIi5ZcMoFec6mYKlpxQQkV - Ddg8tbVUuyKjHw7ne+QOen3vt9i8erlS26GmNR4MVx2lClQCctKtUJSVLo1GE1NEN5v2S7Urcjlm - AdqHyyR4i8urlytxUcwMzzcz0L7Lae6vaiYVRxAALkKXKqbM5oXOpdqVudjr8/q07RaL/2A97vG6 - f2mlXS6xSu05BmtkZIL2xrWNw05XstRmsCigLep+PIt1mXYTdt9fffP8cP7z+c0eKSLfW5cHGd69 - vFKwgQ6J0ERAK8eoqJTrxDUJjFuhfe4QnGxczbsslmpX5jglIn7yLF3vYgK+U4l75O6Ur9Rt6uhG - PxhBt2GGl8KhEqcydiKUm8J1KDOKsxnZUu3KyPbvMB/sKtfuJLWkTapGnAamwfDANNFaMVGiDJis - YNPRkMf16aXalUntdfjW3Qrc47TyAVw8a5cEEtlpj4pQXahDwwp04pyqDQG8sOq4FXChdkVMe2Ud - /OrFxeHcXV1cDBjX6WL+3dsDGd5zZaVWxSFkbKqMgSjYadcfk5yN3kwrkSKPw3kSSYg5JehS7aq4 - dslEeDK0aFZQEWJnAHl0cOMv7IwFbbROw63iw4xnZDbyl2pXpbVLdsJTodUzAeKM7Lwpx5PI1jaC - pAudgOuCIEWFjHPbWqpdk9Y+gdynQosWSwhPqqnx+F3Qwk2DkhYhIGE2ORWcIHg8kHqpdk1a+2Qx - PBVaNotMRl8GZJh0BHwThmWjY6GcT4ORZXqYE0pNtJZq16S1T2bDU6ElhSGFimGWM2kMQ8tJxjTM - Ba+1jDphwdZ6mPduLtWuSWuffRKnQkt47iRwGxtLACp2EkBTEGZgkTQGopkkJB2PfV+oXZnW4x66 - iHQ0KOoYF0YWoaoswImEEMtoNaCtJ8ilmY96WqpdFdguWRFPhVZSgdHAHFPJeyQCjJ4AaBVNsKp7 - ppnBEmezcKl2TVr7ZEo8FVp1OjIr66pDo9glz4EoBRhQ1cid9rrCcInz3LaWatektU/2xFOhFWgp - wBgoARZMIdUIbWjXnhFBFejhXkVW6ByAsVS7Jq19MiqeCq1qGjqpC8dkmQVFXAIFQhNCUAsBumRP - GZt7wqXaNWntlGXxVHD5iDo7LjjNCk3iRRguieWMyyAZKUxlKIPNHKu2ULsmrn3O2joVWpQYEaXX - HkV2BeR48sg4554PEyIxminRIEU/pspepl2L1s2h/fykHaZcJ3uc+Hm3Aq/WS+6XrbQlhUBqnNhW - 6XQ6INENplw3bnhPekpkabhWVrp5ImOpdgtMX57n3UmNOjwE67Z4pfWtxLQJffi6NBXiqYY0BiWp - GBKuGMtGRUapnJ3jpdpVeR3S4cWOjWq+/R1Kr0tW2i+ksWgiooqqDNugGI5t2m/Xg2xkyjMviJT6 - GISxVLsOoO+vfmqX83LsnqFqX7anqbx8U5cjq4dKV5ptyjSLHhLNWnvFkudS10gcAMRBAJgSTNE6 - O1hLtWvz2mvV+D6lLfhoW4JXRgVmqqJFZ8oxRqcUYUL1YSoYMnzdMu9KXqpdn88uy8S74NFiOjWD - TuuEPVdhBZn28UiSpZyPIDZFFMaPW+0WatfHs8u68B54XAbtoXRwKCqzjVZCIpF9WNeUacIZ+OG8 - khnPUu3qePaZTd8DD48IGrkYJkCVgheqFdASaXAqNhuheC4w4Lzou1S7Op59Vn73wCOAa+xBJd5b - CrFRXjVnLBDiuQqoQRfK6nE/1VLt6nj2WerdA49kliZAzoaZ7CojkVLfR//lteSdM8mCsG5Y0POy - 7kLt6nj2WdvdA88wt0Trwx6mw89MjIgUtIMqfeSQW+u8SE3YcXfwUu0WeB7P8EM4GGkIgfE/1IIL - noqwTcrEFZImSNGoWJ/7t6Xa9Qntsnq7Bx4UqLxuUpDuODeRkK6EnDL39KxgODiETAsP81zPUu3q - ePZZrt1l+GlKeaqN1MNwpqUHgRrrsAKIEF02IaNg0hwzwyzVro5nn/XZXWzrGo3rlgpBuRuWsta0 - dylskbZjzDRqxZC2OVh5qXZ1PPssyO4yccAsNh2zrVAYJOIdc2CHyWzl+Mk66AGGWXac11moXR3P - Tiuwu/g+UnqeJNOioBGdY9Va0TS8T9aTBM01YLLHjKpLtavz2WfJdRfTTSTthvmFMKU+YpCZ0Nwb - HokCxkkYFhnjrM3rdku1K+G5TvVNJpQ98NypwC2id8pWMuFAA+CUR4zljplTJxShnFXa0VHJnHBA - CJ1DTJZq18H04/n14cVtVMBX6ebQrsvV85c74Hq4Ikds77+20hYaAqVx1T2XXkZD7fB2RCKcc0VE - ZUA8YaPzm028pdp18P35Oj1/3q7jeIRX13tgu1uBI653y1bqDKFP0T6Ym2cslWp1ycNT7Y1xlIy7 - FlXSA8PcGS7U/ucwjb9Svmiff/TR73539pX54uuvw/dnr3b8n/23L+GfP/ros6NkQvjZ4dnnX6ef - p825z+YXT65eXJc3L28P8Ty+/s98DfY//fNeDY5fhAcK/y+/CVfHZ3s4L5+8z8AUBhPrfBgmhEoI - sgqSdANVJqe4SgpSoFXz5MZS7Tpt151flxfnB3vd0k+7MLtbgSOyd8tWJ6YIi54O29GxhCWXbKyZ - TgvivFGi6jDzp7NByTEF5ELtSsReR9GFXY5/unP/W173i1bHxYgynmLrmvQmS3JZCSsVN0iGU4ZB - 0kwNp/MZa0u1a+P6Kl2mp/u0sft1uI/treLV0VERhsemJSQWuJRKKiMUSsPllEAVwAYYVmecB8yl - 2o3Q7ZXU4uGKvAfif5Xz9/dJZkOJACxeSQ6pOMlMqy2KLn3OMHjZrnD4FfPJygu1a5OczxXcFeFc - g/vsXheuDq1lnoWxJUg2BishGNWck6oZlsqSr1L64UDoOSpjqXZtaDtlGLxbgfvI/otyDf59Yh6o - Rm0UuibKGKdMhtEnQiLT0YXGsEaoKFWbee/BQu06xPxwub5K55eHdjmlpN4B2b0aHJk9ULg6NMGF - ogZYRPCUS+MkVi54J5m1KGXUXiISMc+RLdWuBK3lg0vl2S64Xt37FtTbL9c3RCTCsCeErDSWaYms - MKGVrsUaxzprw+8a5gUcTy1fqF0L0UV7Onod8/z59dXf0sUeM5nv1OEVsgeKV0cHo7XkQoLR0iid - stcUKA+q8QokEphCoCRn8wafpdqN0IUxeFyOAf9wdT2stR1A3q3AkeK7ZasjJNBlt4hWiIYlTYlY - KWDV2CkvQjIIw/pgyG7nzRZpV0J4ft3K4YsxfDy9Tofzq8v9HLn3VeW2Lf7G1fV7UzXFVws6CIWm - RQlu2o4gO8YmwaEc9mO1Lh/PY1uoXYfnMVuje9bKPjNed+5/2/7uF62Oq9QsPUmaIwADISrTBhto - O9kdqrMpUqRQOtsnS7Ur4Zo+wBuzew9gPz8/vLxXjVtu77myOj6nwnjoGjAQbgMtWfMmaBFM6jqG - M8m9oKnhPMG8VLsJvp2WyU8RISmIXJIwjHsTgEzJMlALjegEOk0kp4pSM7t1S7UrIrxdT9uV3W0d - 7oN7q3j9fpOFxqEk66VkBkf3l3QoWkw7Iorm1mNkrB6Thi7VrkTt1/IsXT5tu6/wPFyRW4jvvbY6 - yWE2QlMRi8WCSVreEIE4rlBK2YudkpQLOKb6Wqpdl+R3U5jRjgDn+9/l9rpo/SVVynKVGGWgYhiJ - ToFUrkXwmMkwRignJWnX4Jj/dZl2XVzTnvyL9nO7POyTMODBetzF986l1THGnoajJrpQnDdDIsTi - LGHDKGGoQEVBxh+h5mNIl2pXxrjTos+d+9/DttkSjwxRyUJ5F8TF2KBJVsEpqSk6RkEVgUIzM7sJ - S7Xr4tpzhLs3qG0zjgHPPE+hewlakNlIkXgsSmiLBCPJOU17mMJsRy7VroMotvbt1dUeHtztnY94 - 3nqx/toNk8NZFpGg5LJRroKk6EuWw/Gy2hoqsiS9zPvQlmpXhbP79OSD9bgDbofJSk6HzWA7cq3G - kNQhjAEpVq470GoayzlLhrLM3eBS7aoY9xq03r79HWjbDVnYSAUsvReWkA0zkEUq+JSTUueO0LKT - VYKfWS3VrsTqov16ni/ajo3tbg1uib1buH4Dk6O9EACmSKUKvFGEEtNEBSF7SxxAZqB9XtBZql0J - 2ovDi1Hpr9L1T+2wUy6cO3W4hXa/aP0FHEKzVMPLEiinpWqDTDMGodI2rHbFdMGqxNEhW6rdAtm3 - j5ZYbIQwLVqZjjvkpBbUrGkwFvzo5UjUo2UJczyafql2C2I/mr88VmS8dzEB8CJanDKXFxx/GKM8 - VGZ74NVaRDHHuS7VboDMfm0fLTGTSE25AlhHlOZaCgbctgKacc7KlKYte3I0FRdqtyC2S+KJkyAW - mlKEV2UqJZk4ljy1VUjjhj8mgUPyw222et5otVS7ATH/zR8f7Ug2nClGqw2CeY6kM6EtWOUcl0Jy - rllJRlhpZ3NxqXYLZP/hH+1IRgkjwlEleEVvlaEESY1Iso/KKAtaUeDa3eZkXqbdAlk6pL2RTXV4 - ANur4vVXqqf4AG/D6O6ch2FCkCSDEhY10UGZUHglkeo2r1Qv1G6BruXDd1Mc1N789mpylYGwVFbh - tGMdLA57wkgkqbuoqOYiE6p4ne39pdoNuO2TpewkiHU1pcf2cQxZJVJGKJG1T6vNTGEfw9UYyZJw - eNzzvVC7BbFd0mKdBLFUOVeSIQPFCeW8R6dlBk9rkxQ7BiiRMMT5RKOF2g2I7ZRM5iSQUQBVpFfW - FpHdMAstVTR7aWkvQQ4HOSmWh6ExWyILtRsg+8p8/8Wj9dGys+CnBJpcBIqWCJ1h9HkZlA2SZFEM - lzmGuWNcqt2C2W6R4g9V4wF4W0aI16x0Z71Mp+8R6SvXUlGuRZeyq9RQ5zjY4GxGLtVuwPCbPXIK - nkSj05E66IRIagvLbIxY0oSadDfMoKooaLN8jGazl71QuwGwJ998+ViJlTjM9j6aSJRqmuUYRqEW - GTGqnHQRnfBqp/Nz5ujUhdotiO13/tGD9XgA33/haUgLjMogRKTIGJMGzJQbiBmDWI2OTIDWXc+n - tcw95VLtBhh/+PqLvQnu1fCEmfo+QCqj7GCCJW30gQ168tQHMnwxm7Qsx5NcFmo3IPYX88fHSixT - Lh1qGxpQGoUETRKW2nSl1uTuiXeRheNi6FLtJsR+eKzEOGe8C6zV1gCqp0yU4yZIqiVJBC0jJCql - 6LyytlC7BbGvHu3kCAuVcBd65EVTJSFSnWlNTEhOHLFNOwNUHJMgLNWuQ+yLm5sXu/hpxxsfAb35 - ef3xSltCpRpuFKBy0knJBfUEpFAIVGuSrSDWzifFLdWuQ+bL8//94rymw9UedN7c/Ejo7uvVKVmh - tBluMLRh3Umjk5A1TWdr04xT+glALrUg86zHUu3alPbLtftOHe4z+6/LuLsg1oqHlv10wBgnQFuE - hDY3rVmvXTPCiKtS8eN2+KXaddB9lXZJIzjd9gjo1U/rRyxaZiQLgYwhJTPKyHSgLBjMIqUudJCB - hS75HIy/VLsOk28u29ftYJ4+vZ6Sh1xd77mU+d66HOn95uXVkRpOVFWNUKcCUdyiFGLKZO2EFcJj - JFYOgscg1KXabZDOg32dSezRWf5WdR4Ge1+xfqY6KsCAzyUgBCwkV6Zkj5XmrIjCyHkRcRiNc6a6 - hdqV2P5y2cbocpFefnP5KvHyHkwfqMYty/dcWX8zRuUJuRMSKShOy5TdhYtqIfHAa2Y8EgIe5gnJ - pdp1GH7brp/f/Ah+ekitfnNd2/UU3f9t+G6P+f/b2rwKZHlTp9vG+dvXN8hvLbRsyXGB0+k0gxJP - nhSnmBNMYCnARUjEH/NbL9Nuh/XbD1Qf3uxLUjDSciEEJTjZotJZZ6VyokMF7a1IPJF5gmWpdjuq - 33/z1QesDyeaAcKjgtJoA1Gp8FCC8o7WZlhnVFuLPB1PhV+q3Q7rD/4D1QdH1unwCFdTIMzx4rvX - PWuvlXSSK4GmMAbdH+Npl2q3o/qj+csHrA9OzCnSJaZIo+PWgh42z5Te0GEjUXIkHoYL2sUcT7ZU - ux3Wvzz5QPXBuM7SxBghp6RBlFCmJfe5MytpQJWJiyraUomYU80u1W5G1X5tP1B9cJm+T5lIpaKS - EsGZTK1KnRQGRSBL7bmlhUs2D6xLtdtR/d59oPpgyg5VWCRKEkK805rEoniSo58NXqrKqCAySopz - W12q3YzqtCnsA9aHT8Oz2NkUHWO1CEUphTwS1qVQPowGKSs6KWg9noa3TLsd1v/wH+ylh2ci7HBY - JCqtnYoZoGpMA50fg6ckFI0azqmkx3yMS7WbYQ3f/+kD1QenfhlnggNDNLoz0ycfpaBHRQV3PXVg - rbecZit4qXY7qj9894Hqg+EgXGiQw+TpyHmklAqmFeGNKJiSEes8rF6T1RxytVS7GdX45Td//oD1 - wSgFDQSGEaQEgFZBtClvEimMjOGyGx6IHK0Q+2wwLdVuh/X7D7OGD08GRyWn7bqaKSnJcElN1IZY - AUwP99R67QSLoMI8GbxQuxnVP9pvP1B9cCKCedep9kzLKAxqnPbWZw5Kjk41ZsF6YIwcI4qWajej - Om1a/ID1wdBY4TTz4KjW0zGy3YPpWnmDOVFCtGB50BuW7xwau1C7GdZ5Y+MHrg/ORUSlgRJLWJjW - XogKY7B0kjluBeGoGMFGQczhLUu1m3H9OpgPhvDDwYHoLKLWDMfI2ZEaleNg5GzTlDtk2hNBA52d - 1qXazbB+82Fofdi7GVass5UT0lWThWidMsgy7B5vFGfFc85YjLPBtFS7GdQn33z5geqDAYYhU1dE - 9JK6Hj3lCIqoFijLdDQ8qjFHBJiD0JZqN6P6w9dffKD64D7ZMTS2KfxIQp0ObU+qV2PzNEqKAU1a - KklBczzFZaF2M6p/MX/8QPXBHpgawerwOhXTtFLOdR79aPNWcIlZeFUjsOGTzj3wQu2GVH/4QPXh - rbVhAuJBRT4anW7cUxm5TC3SrpA5hr6L24iIhdpVqb59Ns5+ON+uxR2O9y+s75wmD6OF2VaHe4IQ - urRKOCZVRF187Ri85ErPZ9Ut1a4K8E1u71NokQ80wm0mAAGCakpXz2E0IguSc0kEy1AsM8ExhgZG - s5onABdqt8B2GtG9e1FjXdWCjAFI3xwEnsQUwVmtpoUroYwKzDR53HK7ULsFtROJ3t0Lm6cQi0xM - 0RxjLkQUSTSXQLRMJPGgS1We03mfxFLtFthOIzp3L2oRLVUoraCVkYqd8R518khYDbVnBsPfG63L - H+dxlmm3oHYi0bd7YUPGRZXSMhKQxOhqCRkCIyxzBpEgiupF0sfQ6YXaLbCdRnTtXtQUV5TkKKqz - pHEU1CYYZYEojWL8iDplRdrsByzVbkDtRKJnd7MiW3bWesWEn2KaaQbMysRhVogsuua2e0ehzMk2 - l2q3oHYa0bF7URNRAWGgVUzEEsoUZhKV1JGYxLz3ZFj3brSl2edeqN2A2qlEv+6GLQy/izJgTCJR - hUhReS9NxjFUUZmz8rpH1eYEB0u1W2A7kejW3Xy2ljqh1GirmGalec8jY7TZYVtQyXTp0vsq532X - S7VbYNvnaIR36vDQLOVWRyNE6ZkfHphrIRSnh6WokPvR79WA0jWdCFBh9NEDWKjdAN2JBB7v1uCE - K8YRg9JDoiHS6JNSejqeolNORQxYhr0x95NLtVtQO43A4r2oBSKgDzdMTOcuUUqEJEw2UCKjy04l - lSjnt21tqXYDaqcSOLybB5AFZYiysGFukBggIlMUDCdF0lAo4UxgU3L2ABZqt8B2GoHBe1Gj6GkJ - QcEwDjMFxylFBPSu0IAalRDDP+vHLnKpdgNqJxL4u1tbG/Y80UpV21NzzHlmGNcgSxgdoADFlAGa - j+dUL9VuQO1UAnv3wla0asCZlpQG36nJNCjrgdHp8E5RWKCg5DAy5nCUhdoNsJ1M4O5e3Ig0ClJo - WkY6nDIQOEyKjLqB56UVCBG84mFe2V6q3YDbqQTm7oWte8QpPlpRTXLiWkvGZKKKC5prb5Jzr6dc - w/MmiIXaDbCdRuDtXtB4FJ0jlVxBRqZ1nRaudRFEDjO/M0mATKm+5ynJpdoNoJ1IYO1e1JoAKaQh - XjaLhSmSMaJpYBhJmmaUMVK0x9ifpdotqO13IMmD9XgA36YHkhAtNTOpUkGVVVU5JyH6OpwxLnVg - ziZpuanzDOVS7RYYD+nQTiWOa67MQyAPWwXiaQXUOT6sfswsTpn1OQfmtCWgleAE+RjRtMlzroSF - 2s0onkZY1/4QfTJKORx9pGFJC0lFRTlcbGl45NAASyU00nlBdal2M4gnEuW1P0VNE1fEdhidpCNM - BuS8B0kikPEz9moMr5rPjvpS7WYUTyPo6wQgSlYDQ5sVAdBzgxLKi0pBu+yrG46eSFzOQXtLtZtB - PJEYsP0psspQDf+giCAKF7xTqTvD6UjeLEs3ROsx2ol58mWpdjOKpxEStj9EqbpjkIfVMlw/JhgI - rRGFSMpWDWPgcz10T2bvcKl2K4gnEiF2AhCzFI4rIYPiTnGgngOE0aC4NDJmwgrTqvl6XClapt0M - 4mkEjO0PMQYTdSNGyIaAXUKgSfTeBZFeGqja6EhCOO5tX6jdCuKpxI/tT7Fib0xYpTGmoDKAMRi4 - zAGkABfVcCloLGmet1mq3YziiYST7U/R0AKYae9keO2aVU975ayQjghOVM2KExZxTkmwVLsVxRMJ - UdofImGqOiI8quAZRGANlcBCPOeZoEY7DJjc3ewqLtVuBvE0IpZOAGLgyqnRlJpWXUhsildSis+U - o2AKBpthiMK85LRUuxXEUwlg2p8i15KQkJlQnAbtPDJpGZtOnkIr62hqyafoj+v0S7WbUTyNeKb9 - ITaJPvIKQnAnuZUcizDUdxWM4c2oiEJqirOXsVS7FcQTCW/aHyIPNHI+OkoPQclhaeoBKYSqVGmV - hiK7oJypNrfEhdqtIJ5KtNMJUNTVScrbdB5YEUo0m5wynALRSlOewAVppYVjf7pMuxXFkwl+2h9j - d1pXorzqHXVjlGgRJJOAQBjqmDQUBRrnefCl2q0wnkos1P4UWxLMUG0FcYIqRR2RjCdJB5Wm3fDo - uSG69HniZql2K4qnERq1P8MEWLQ0ZPylVNNMaoWtIcgp6gmhAHEEW5/djKXarRieSKTU/hBFTcNW - URwEhxaHH5GGuxBNqIwrkpmlSLTpbYa4VLsVxBPJOLg/xBJ5ElFrTUCp6byYKAyApMXRLngWBRjQ - BscMgwu1W0E8kQSD+0McQCRaA6Yw4cEGRoRSWRCqXQQh+2hiSofjxtyl2u0gnkQ+wf0hCtXk6CVD - A9Kpb5xHoT3zFZATL0bfyUcZK/F4ouIy7QYQT6Qn3S3c23g2vDqJJCGVjAG2KJwCNZz14IOe8+8Y - enQNF2o3oPbjefvl5lQiTufKPADwdfn6OXsc5dXidFqPVEXanAkqZqE2AzRKnYcL0cnxdK6l2s0o - nkbE6f4QJffOdcmRc66mg0CAVOJioIZ7xi1EDhSpOh4LvlC7GcQTiTjdnyInsokkBVcKdQkCCBO8 - qlBGxyhHMYJwTh+3hi7VbkbxNCJO94dIpsOztAI9OBghUdc87BLGJFRRBUvc06SkmUfFpdrNIJ5I - xOn+FFHPK0qSVVKp8I4oWXLnGiGhUEynBMqAmx38pdrNKJ5GxOkJQGSScVKapiJhgBCadAQE0OQY - 44WRAlRX4o9JJJdpt4J4IhGn+0NUQlZNKxZkSoNlik2B+GW0NFACCY9Ra4l5HhSXajeDeBoRp/tD - zMTQCgWV7dyT6ZRQAt4BEJfQ15aVzz274wEBS7VbQTyViNP9KYbEMfHak/Qgp72+3KYAVuJw5dF6 - RYiQRcJ8OOxS7WYUTyTidH+KaBKjksjsMbkOnCCbjtUW0/naREsVcAoKNvNS8FLtVhRPJOJ0f4ia - IStEjT6RWIrBTAnnK2MpFRRFeQKUB11xNm2WajeDeBoRp/tDpAIDVZYJkRnGzrJ244dcUoqMClG1 - 8IxRPe8TXqrdCuKpRJzuT5FoFCG2PAY0XXTuylNh5LR/m/LmEBgHWjU5OvwLtZtRPI2I0xOAqFDV - aY+aRcc7ZZZpaIZbCV0RCkrxwkWWc9jwUu1WEE8k4nR/iDRaxOlUnDqsFp1RxSI6Vi6rx2KI15oT - IdLcEpdqt4J4KhGn+1MsnkgZTFat25I1T2k47jBgeGk0UIzAUEsz+4pLtVtRPJmI0/0xjkdfxDSm - NceZVoxAi6PXFEoOF94awD460NsMbku1W2E8lYjT/SnSkEIVjLemPAhvJEs8AC0+aGw8lqQdR3rM - DLxUuxXF04g43Z8hB1ZroTIR2tgc92srhdHeIOIwVJTVpk4ZFuZlxYXarRieSMTp/hCxDRpVN9KH - 9akYM0JwlouxhQ1CSY7ucjoad54GX6rdCuKJxEntD3HYmkk0LQhkYCG1WlRxhCutldKMUNamSTU5 - 72tbqt0K4olEnO4PURtLu7YgMqPQ6TBaFBWJgMxcDcuTIieUaDbva1uq3Q7iSUSc7g8xEIFMNsZU - phMFJ6bjzNhoX1JZoqiiHKcDDm4Pqlik3QDiiTTC3ZKwd+Be1cxBDiOEUOqF81yyHjo1g4XA2KJK - x4j9hdpNqJ1Eq9uLGoCJogHE4atT0dOUWE96sFwTBM11lJRLbmeHfql2VWrf9F6epfNL3y7Sy1a/ - ua7t+lQCht+u082rij50vNb7dOvjthFpJiqy4QcaTqTWXhPHMm1IOi3c+yy7n1c1lmq3x30akcWn - TztoXS1Os96GN6VRtSamFKilUA4Fa7WCEKFnv2SpdnvaJxKCfPq4h6mjlI8mqcyJEqPNTrmKdZcQ - mQ8c5XjNKU3zfNBC7fa4TyNW+fRpg0GBQU+7AZSQarxkqih0yLOQBAY+7y09JrJeqt2e9okENZ8+ - 7ihrBySJR44hdWEUCKWtbtozJXXD6FrjjB5Pylym3R73aUQ/nz5tzjjBonUvKkkpMYKSRBHSmIpR - FOWKxgR9zjy4VLs57RMJkz592qpAAeSaN9OAGJUAuubBi5i4pYRH4zGXMg/cS7Xb0z6NeOrTp001 - H7djHkogQoAEEoHH1n0XMmERjAMwegxnWardnPapBF6fPu5em65qyoLXLVUKGEPWayWB9siIKBw1 - Gno8dnepdnvcJxKhffq44/Ch43QwaAIpS1bEVMI6kNKlVDJ56gtXnc99+VLt5rhPJJT79GkTLnig - hCVJIcNwrahu3VortQwpKKKpqhXinBxjqXZ72qcR8336tC0xRKgyGieNGIqRRFeeR6ccXREACbth - KhwT9S3Vbk77VILDTx935IQrsNwbIQY9TLpnZlslKgAT6CUURgnM06dLtdvjPo0o8tOnTZTmw5LW - BLBHQkkBCMrqqkeHjSHY6JA6yvIxynyZdnPaJxJu/g9A21oQCExPJjXxKlo6fkjaS8IRJWIEp1Ka - YyeXajenfSpx6aePu6PsPlEOnVFUKGC41FmACyCSR1Ra9OFH03mZe6l2c9wnE8B++rwpCtoUg1oK - tbpE1MMOI1UNw6s1JozuokePxzmWhdrNeZ9KpPvp47aRWcoiFdMR5QkpFdgBaQb0JGSCHUE7aHPz - XqrdHPdphMSfPuwKXNKBzTalWDDSMNDTgWeKIDgGLImghNBzeOBS7eawTyR2/vRpU6ZN1LUJ6hII - zfWgSSBII1AwPywyFmLmYZ4+XardnPaJBNmfPm0llBSGiBx4zTIBrRadYK55okffnIYFphg/7tde - qt2c9okEAp8+bU10QU2EwEFKaRMS44pJGSzIGlzMY1SW9Zjke6l2B9onEUB8+rS7stqPARmsNxHH - /0uWikUCmWtPfdV0mGBBlNkHW6hdlfa311e/vtwztni6/21dbkneK1k/+TeTXCIVw0CWwgrdaRDD - VeIYgCDTo1EGqnSZ41CWajdgtl+A8Akgs2iblTpooU0qgELnEJD0QDxRSnBUNio1+0JLtRsg2zHK - d39m2VJ00o7Gwn00NOF46iyW0lgIXCCZBjpkbjZyl2o3YLZfqO7+yLRvlGMWiCwrmA7IE0RADb5B - MixW7mzxTh9tl4XaDZDtGG+7P7MChBkKEbRyQU5b6KOsXBjehU6cedtjA8LnZrZUuwGz/YJm90fG - koAMVFGkqOp0UHoOWmfpRB+Eho0hE0k+z2HPS7XrI9sx8nV/ZERzYonRwxlvNCfGTAiM0aS7FsRm - SBgh5tuzmhdqN0C2X/jq/siG2UeIDLolFdU0eaILZ1F1Pgx4XhlRgjWGx8FsqXZ9ZHvGoO7PTKvi - spNASyEigEp0mvJkHjVh2o7/Ahqg7WiALNRuwGzHQNL9mVGmo+aBd9IoJbQMq5AnBtRZo6goo/0I - ZYXXt5PZi7TrM9sxGnR/ZGBZzrxMRynFImC0FQKaMhpCZ5ZWoJxLVY+rTUu1GyDbL6Rzf2RKmoBQ - hATijVUUrE8lJ8RSgCumOSeEqzrbjEu16yPbMy5zf2YgEQVICpQk1zuPKRNlvLYZxTA2qELkksY5 - tHapdgNm+wVX7o/MUdWnM8q8Z7ZUIigm6gxRdfR1nRgeqKYG3Bxjs1S7PrIdIyT3R0arqUpNx8cn - J1QitWsKyTs+3GZRErN62ISOH+2Phdr1ke0Z5rg/M0YNRaFdIiQilUGhLxKFnfaAmt4kScLoctzn - v1S7PrNdYxX3h0YktypS3ct05JGFlgWlnAXax+g08HhvR9vix7zzC7XrQ9sz4HB/Zk51V7Fb7qmo - XjouBJMMtKwhMinSFPQPzc25A5dq12e2X9Tg/sQ4h4xaMzlGp9S1Hx4y00lSgbIbG9CNq9GmPmdJ - WKhdn9iOoX/7IyPBEO21nLIO8aqEZqBa4TmqZl3UrTgDGOm8BLNUuz6yHeP39kfG2Xj8MPo4ZM4E - k6wgMXatkq7NCdSO0cDDMc34Uu36yHYMwtsfWS1WcaaKlrobwohQlFHehBG+j34wx1Al52n2ppdq - t0C2WyTd/sgE1zX72HPlMnuBTHfN+OjpgoKArEHXUUo5m/lLtSshmycYv3NA9iI13/wtTq9fbzC1 - SEg1rTCRoopdqULR1kg4VVJyZ5mXQmvLj1OLy7RrU7r54Yl/hKQKdlAdIjXMKRnJaCIqa6zToYik - ailoK6rqY06lZdoVScXWvr2aHss+nN5CtI1NkSgaDpxIY7geRvhkjgdae6G9CpL6cKU0b3PejKXa - deh8dvM8XZ7dHF5etH/7uFxdXF3/4ex3xpj/fnZovx5+X1u5uk6H86vLP5xdnF+23x+eXV+9ePrs - 9mG+JvHZp9P7jHd78fzzH27a2dud6FT2CBvoP1ZXejMFgj8+SoRY5UUSjZphIbrMGaeF28IZDquQ - lfH8sd12o0u1q1L60fzl8VGykDlYYNShKjmTPJxkiDHkLqRUEMcQ5lk1c1taql2Tkv3ePT5IoJXV - VgtJFBXQO2pUKfWqlC4oFDZNUffj1MdS7ZqQwvd/enyQAieiNhUF5CSFGI5V7cwxVGL0bhgwNZxy - 58793VLtqpB++O7xQYpjTKF6GAUQFE1BykLQC9UVzQja+s6wkySPuZAXateE9MXXjxBSYkYwFYwY - T5up6hjU2qjQHEvxkmdfBY6ubTbxl2rXhDStMj8+SkX4DCCpNgSHNU1AGU6MtiJoM5oKaKE9qWTO - cbZUuyaleV358WFS1PtuCqVUU1ZZFUCVD0br6SBdBsxK55GJeVPfUu2amJ588+UjhJQhStNUMSoE - xUFZ9BJrUIoBZssHjTzFrs2QFmrXhPTD1188PkhdzDl/TBKTr0NtCAnAOj2aRXUySSUijk5sjudd - qj3FmafjrO/7Jp1urz7Oiad/mJnh71qqxy2Ax8p/18bz+Vu73oHZ66ockd15uX7YostE6Cyb5N2P - QQzFcIedJkoRnCKlJOdeRDYvZy7VrkXsl3Rdw025vvrlR9iB0xc/P7+6PqR80e5W5Yjtt66uThEZ - I+PRE9UFJUJGhpFjxakJOV9IQRH6tK9sPiV5oXYLik8Oo5992nZpdA/U41UDfM+l9WeECwSv7bAj - TdROdK6wUSk8JyhBVZbDIAVmtnKWatfEeOPHx7k+zy+moXI3iHdq8TbCdy6sH2lQNVUSGZmP/CuN - 22KskmxYNaOByS4j58nA3A6XatcB+CT15ls5/zldfJUOz3aAd68GR3APFK7f6iiHyEd7Ei7QSKmU - oVI2bQyMhg7HTjKNxarZT1+qXQna+dPLVk8A3UP1uAX4vkvrrwEIpikvfZgonRcWpnM/YFgmxHHC - U4mFqWixzXHhS7UrYTykn84vn952Uk++/sufw/d/+uHy/OaX9PxHtgfPOxW6BflO2fr+o+faySlL - wZQlCUlJiL2Nl5VrINisxkg5Ho/zWajdguDk8XnzxQeCv8pAaSGEVyBZEJCgpy2DSgYMKKXMoLge - /sKcn2KpdiWC0xP9rtXWft7F6btz/1te94tWx2W0ltYjlyY0hNAJy5w27DaamixnVQUhBZtxLdWu - iOuHw/keUVyv7/0WplcvNwjlyZQrWtS0250NM6NgUYqbAohJFs5I1FCiOYbyLNOuiOgYj7U5oq/O - L2fX+/UvHVE9WLx+AJ62TNggvUallCMQGQchIFmgatprIbROrs2nnSzVrozMXp/Xp+37K5tu9nDG - H6zHW63toUsbJBTBTINDrQtCHiYGKsGJwE6gOmmzmk4lqsiOCUWWaVfG6Fs+PHmWrndl+LoS9wDe - KV+/EYoihI1cKc9cVshJpxBx/Nz8aGYyKEAa5DwTvVS7Mr3jjNOe6I41uMftTeH6njg69ASZ0piK - ZAwlK5xLHjivGlB14ASMOKY3W6hdGdowsg+7Nre5An8e7/LleLiH4Xq3w4vn9xC+V7N+Ji0pCTA9 - nDWftQxS9iJMLVnw0WUK7nTjwgg6Ly8s1a5IdK9I5K9eXBzO3dXFxeB0nS7m3701Yd5zZf3cCFwq - ZiRTvjomRPFytDLpOSU0DwcbRhMbRibMh60u1a5Kbp/o5FMkh2o0k+n4PNVQ6OFiZ+za6SiBBSqQ - QQPLj2crLtWuSW6fiOUTBMeB+hAVUo/AoqTAag9ESeUVBi0klpyZlvPwt1S7Jrh9ophPEFzTtTRD - xjAVQ3Tj2fOATIeCxLkgJ9s/QHJx3sa9VLsquF0im08QXA01k0y4iZEKEDlzixRlJKSN/xOKmhTa - 47xmsFS7Jrh9op1PEBzjBRiS3pvwQAWHLrFpTWP0lPAOinpuWc9H62SZdk1wO0VAnyA5ElFJ2Ygd - dn0ikmmHVDKj6GCg/bBFpCJ8DGezj7dQuya5vaKiTxBd59pRzbUYRqLVVAmRHEGPTinbGMWakDSv - jye9LtSuiW6fSOkTBEe4FSQJrWGKslU0UF4545pXFIhaBaMd8HrMDLRQuya4faKnTxBciRAojmGL - CR2Y43XYHoGS5jip1ookuQBgZp7FXKpdFdwu6TBOEJzvBipLpDKIShKvZFeGVGkMZu1qsDJPk1t2 - ArdUuxa4m0P7+Uk7HM4vn97sMpP5dgVezVzeL1t/dyqoLJVopYDLIoYxdnXRGTUiBce00sNq5IrN - syZLtVsQ+/I87w5t1OEhbrfF60c/91B1UbVppVCI0XBk5DlKqfjAI3VlKirG5tMPl2pXRXdIhxc7 - NrX59neAvS5Zv5mpwmkOUzJdySg31kTgwLIE21VNClBzNjyzuZkt1K7D6vurn9rlvHKyZ2TDm1oc - gd19vX72C13QGRDDdgiyoyeeMU5coE1bIRkHmnqBNh9SuVS7Nq69FnF2RmX6cLP+T3vv1mTXbeT5 - vvenUEy/zDx0HGQicevxOALXHseRLYVkuT2PuFKMpklNsdi2vv3BWrsk8VIUV8fxutBkyCHWxvqL - C96/ApAJJDIH5Tk6PKcoTEs5LQkt5OheK0MqwRBmPWrbqt0f1TmnNiejQphOFXihwDtBMDiBzFIM - 7WpNwzhnohChrhv9W7W7ozrnmObsQWWi5MwInL5T5AmA8eWaPiTCOc1pO7Shzpm6RUhu0+5O6pxz - mZNJxcqlFEl1aWRhtrHAyHYBEgpopTGQrg1GWw2Ljdr9SZ1yEHMyKZVHAjaqNg4kVpXdUMqoOcsZ - FpURphYSctyCxDdqdyd1zsnLyaRG5Dx3I6wZLFhtNYmcOJ8DJYaKxIIPc35rtw3fjdrdSZ101HIy - KqYzY7pHy1Tj1aualxQlMU7zTmoPLOmkTJdrnPhW7e6ozjpbOZmV4cqbCA10iY6SjuC8Y6GpLAFr - lgxQgMrrEdhW7e6szjlMOZmU1ChCk04UzZMraa5FZCxRq5ppOxembrJUsO6/b9XuTuqc05OzlyqO - xRiROrUwBDGvSSOXzRnJdQOubDZFjrVeyVbt/qROOS45e/bDsmTQEk2bakGNxjA2w4XysVqOmtB6 - R3WNudmq3YnUXW6/XKA8g9QbHXig9U7b/tsVodoAloEZJWvOoCilgdkOxJiqVesYGKP1MGurdh9i - /36Xf/ih36X57b24+/EEYm924Ebs3bb9ianSMSbbSITumuLoIbohlsDeQkuIvQ6UHyrrbtT+14jN - fy037377T//0z//8xb99Fb/58nf/9E+/ubUt+H5z//1v/5D/slyd+H798O2LV3f1l48PaZlun/8r - vwLn53N6qwe3X4JHGv9//hY8edHvnj19rz/gNRuDswadTeNe9CpZHV2gw4oxTzMSx5w91zG7VbvP - mPVP7+qrp/furuf/OIXXmx244Xq3bVdaoLkjywT3xSqWCVkUejplevppcSyh+c2IyNYtka3anWj9 - HEwR7+opZWre6sEDr3cb9x1eXEm3FLvzRkXsJMhr3hVqENS9RGgDuRG3nDEbtbsDOyVXzBvvfwfW - 3yUc59dRqYDTdQadEUguVXcjyBFglD7NfdVTnusbU2rdwt+q3RvV7/Pz/OScyfDtPryN7LXmXbFp - WYYXrhMNEeISAaCRKmtzlfI+WuBM1kBsTaW1VXsQtrPuhD7ekfcA/Hs5fL9OUcrBiCU2fQHosSNO - vy3P4cUQTESUpavqXVwN0a3avSl++/2Lu/tT8a09eJvbz437AmvIPGoZDGXJuIXaomZzCtRdDCJX - EYVgfo0i2KrdG9hJeWHe7MDbuP5OGWI+MEkCWesIIpsrV+XDTquQVTlteYY1SEGZSJsYb7nLt2n3 - oRWmD/z7/PT5fX+en9czZse3enDj9UjjrsBc6NKCQo/z21bCKwqWuvXT/mN9YAq2SpRhDVXcqt0J - WC/3PtfvT0H107sfIL3+cVc8lTMXvdU4YEgWPOvUOBlGqAUKo0Xvg4Jaiz1t1e6F51l/Mmca+8MP - dy/+Mz87Y3vynT78hOuR5l2xjekNDxBZ6SWBo6Xs8nSKWXTMdO6xVRYbpbzailu1B2GLc7F4Phf3 - 0xIhv9mBG8F323bFV2JqIpWemZQiGkoMRZPdM9dCk9JQ7UtE4jrqtmr3wvfDizNMw/W9P42uhx93 - RWKcMkG21EkK1hQbXLRSNBuqQfTMDzU08rRGU23V7oTk6V2v97+bK/iTW8mG83zn93XlAdyvPN13 - A8RM404r5EZn4aVUNK1yobVhDo1jGuaEpwxfD7G3avdheUs15b/v9Zyd4Dfe/zAVvt20KypUxIMT - 2PS007ME5ZhAnR2zoyehGxdiMIlwO7fZpt0J1fJ/4OFk65RV65fX/7RmvdmyK6c5KmQxSkLB7JmC - sBTDSLYzGNlOpzcL3uAhLHirdidOf6vf5+dP+umnLI935IHde5/tazZCYLGDyQOJl1o8TIMQp+2O - c7qblnykNgzebtdu1e5L8ZslauREeOv7l0Ryof/t67un9enzJ28SfI9gV4xejpgxA2adTQdAjgV0 - 8NRMmJ7YtBCXgnq0Dsat2n0xLhckn/W/9Of359zefLQfb4J859GuCC0F3edcqEyqSoqRwEjeAlfA - kUkQZsn8IfU6Erdqd0Z40h7/G+9/C9khO/rEkDvuBigyamLQ5FimaSgy6UUpSMFy62n1tbdq90V1 - 5mp3t8yFqfdverXPVq/6/ul/9pdvgvsV0b57/b4LJapWrHZF1JFEHJoYK7JpQ4Cei8pviQK3avdB - Ob+cr1+8OGOT/+HNN2CvfdjX+w4m28FjoEhWMa05JSA9TDHLmSa6zLJmfN0Q2ardFczpu1iP9uMN - aAfvaYnqNAKDpcCMli1FHapSS+hq78KCcHog58WvlaA2andFeNaC9vrr3wB2zHKmEmUesLE+JzQf - OAPXdQYNlRsAqVTlgvuHiiUbtTtxetb/9nQpZnDeIHuzBw+03m3c1/7QYjpaIDQ304xHy2NSda4/ - bvpiHLxM3TO0dEuSulG7E7BX969mp3+f7/6j35+3Kxn/8sP9j4/15cEI+bXH+5ofBrWSqsyBk91o - nHKcA6xKFU1FJQCFM8LcNlG2avch+buXL1+dwu724huoX37elQoXmSdUiksjBDfUO6pp+3HSWkzT - nfm5OnEIac2suVG7D5Uvn/7fV09bnvPOCWR+efmNzpuf9z2klkJW0GpObIaGiUa7JYJbWDfHAriW - hSMatJoWW7V7EzrvDs07fXib19/vJs0HpjsGFvyAzKmZmhhD1vy0IiRUECJ1QT4ijTUif6t2H2wn - VZX8pYjk36lm5K/zmLZ1TT1arNmLxC3w4AAMn+MCvCrDisp4S2uk21btPjz+sO4HnHzi8m4nbqwe - b993iSoaWdIoprcbnKxBRgDtWTVuSXkvtDCGY153C7dq9yH31fP+h35vnzy5W6I+XtwtkUzfLIe/ - JwB8b19uHH/18c47iqYQqiarRpwury/ElJmmOlmZDCKhURFMvO0obtMeg3M1ydot9ekFiL7enceh - vq3YN9YxAlWhGU8ZSXjRdVWsCSZYZkq6nLNAM82TNdZxo/YYri9DTGfcoX+0H4+T/PnRzucy3GWT - 0KJK0+zQsiqrUyerRFsKYTf0Q/LbNaet2p0Q/vV5n6bcs/zjV8/Xxai/+ssZBB/pxgPA9zzZlV9q - jgNyUUPqUpeRAjSplfXcYuEQNeu5DraGcW3V7sPv67sXf/vxvG3+9fU3UD//uO+il7wcyus0aLAg - uOAgEkTZNWmjqjZcqkLqtuht1O5D5jcvf8jPv3h5/+Oz/r/+W33x7MXdv37xz9ba//nFff/b/b+0 - Xl/c4tn+9YtnT5/3f7n//u7FqyffP3yRr+VOXf6e+be9+uG3373sX6xP4zd+uUO6tJ0Ffe3Ca+R/ - /rzv8QAMopqFKVqqyJjopJMVaqk/2YbmyauhhFn3vrZqdxyYJyV/PBHQYDSCsehRiqg0as0xTkOz - MCBFRWrpcw1At5Dybdo9AZ2T8/FEQFwhyIZcSie1a7p4SXF+407zmKySwiMU0uvNwq3aK06gtyRB - 75s7H55+cvOngyElLSkhGUpjSZosjVHMBK5qnXOj4cq0sAbKbtXuQ/+bntv6xZyfmOTnrtxwvfFx - 39VOq+mT6zimE8BAEHSi6dvlJXsTJyTS09SUeqW1VbsXrWUz+LRKzK+//idIb7bsG35OxnlfUuA8 - WSkFD4VhjriU/yGKCUU0jmB1F7Zq9+f0JzyZ1J/wXVa3tn1dCM5YZnNB4xpl9jHlqJjEQgA5kVSZ - kxvcrtlZt2qPoHVeAMOj/XiM3VHBDB5YbdIPllQAFGiIcwAWcmLD81CB5Fyq5DoxbtXuifBlePry - /u5pebWYK6cBfKMXr+N758G+l+819pwU66CwaEEcSGiAKkYEaRrjiljJZq2QvVW7U9mZPHro9elf - luwfp5ztvdWDh+Iz7zbue89UZmRL5V1twHXwWsMEwZFFYgaN4Eprr/p64rdVuxOwp0+e93YBbI/1 - 4wHe+x7tizB10ayWRkPH5khCaVoEDsqIHJDPcaRj5Gvy0K3anRC++uGHZz9+W7/v7dWzMxa7Nzvw - AO2dtn199C5KLlmWuTaprqvhc9VKKlOdXEawUutpJI6V1lbtXoW55rf5TW+9/+UU1+yN9/9Umuut - pn1RoWXOWmFrrwQ6a5HmqoSDoUFtuNORhiK+Rqds1e6I6qSUPz+/+zVEhyT6IbOkCHRzFEgZpx3B - gyUjpRrJoJ8GhYCuMt72O7Zqd8Rz2/A/B88ieA3PTx/3PWfzLEoiHB5kh5qHwJIzh6EZ8aBdVNrG - wtaqdlu1O+Nxd0/bk37aTsej/XgL29uPdkUYgFMopEJIwsrRHdJSyS4PUNXbYbB3wcOtiORW7SEI - //jiq1s+6DPOu9/bl0dRvvl434y6hMrVJW+WaMbO4aUEFw5Gj1wbRCWZzdTlLaPuRu3OOJeIq2+/ - z3enGIvvdOItgG+07xsnq6a3pchPA0KopRxXkNkwL6xFhVozI3vM9ZYDY6t2Z3Lnz6KPzp+HzZzJ - kAYHbcnfCSk6YtPcKMAGBmZtrBpqu91W3KrdGdhZl93e7MBbuI658FZLTU5GnK4wqOA0d705zoYy - QYCZc51Cpiyu69xW7Y60Too8OLyk/AeGmADIaGxKS0gkrz4nUtO4N720BtpPz3kuYjdoW7V7Qjsn - GuFi0JxSiooyQ3Mw0CePBMJobdp0wKb3jIQdkdZ5cat2T2jnVCO6GDQ9GEwPDITQfEkprlgnyXRq - nYcWVagejTC41pHaqt0L2lq6vd/fP33+5MRq8g8d+Gkxe7tt3zIMkkeA6U/DtN7JZkjJcWm4zC4G - KtBA8S7GOi9u1R5B65y0P+/04TFmR6T7Eeg5N42prrGRYYoP6bSwjnEujOmsO0k01gs8W7W7YpuW - 2asTh9j6+jdg/dyy76YwrBXHRZKuMQmDrDY0nOoxiqUEOcw/WRu3GLuN2p1Ktf1cw+7M/ccv+5Nc - f3y7vt5jrfvebNSE3oAVAZ2PgLhk6DFqgIKmgcklFZNtt6j/rdq9sf0jlpf/wN2aaSgQAkcptKxE - rCi5JIh0spAeNQCESkqsibS2anen9A9YWv4Du1HOCU1FqlQFOfKMyEgUCsBygqykGlo5sxrxW7W7 - U/oHrCv6AYMiMe+z60aVpLmu05tKTCuGEVT0nLGUlK5hjezYqt2J0idRU/QDY6rngiYzw6ix0Ywk - 2yIkWXkuMEdQ5FIusaTrmNqo3YfWn57e3b96cD1/n6fldVdf/HBGXdHHO3Kj9/5n+56wDFmMbNhV - FkEtVdECWlMFIog5803nahALfL3CtFW7D8VPoyrsr9PK0iipGeOCeHddhGCWvQuFSgdj0kgmB8nM - eh62Vftfo/WbdyvCfvHTceAX//1L/B+f68PuUB/2X178dOL6vmHchAAuQALPqJtcbtt7sAOEUtO9 - RgaoDJj1ivdW7U4Fv85OYX5godgPYvt48kt+MgVIP8hsfuEovKHBHWQnXQmC88qcDENMN5urtpzL - iIfUatu0ezP7hCqRfpDftFTY0EhEXqPITBMOwTpUFHW55atkU1z2dTtsq/Ygfp9gSdIP4rTSzZHk - HbombBODxxwxIMleJ6bKk0rKiFuxt63avXF+ErVJP2yzZFLgAYfqo6ncHGNSRF5VJ6Eyq1xWWErx - rTbLRu3e5P7xi5R+EBvNVaxDF8NAl1Eb1L55l6ankb0xbBooXKtY7BrEvFG7U1GxT6ta6YfJoTDL - fSiysJyhWi2FpDGACCpXCUhC4tOPX8lt1O5E7h+5bOkHOSHImNeVSAjJrejAEeekx5TQgtXZo8mF - 3ZJibNXuxekTrF/6YX4KRPBaWVNNNhYyQ0lAjCMTiRIzPIKVwtzqv23THsTv9BIQBxYy/SBHM9cp - PW0OaJqV0pXkwRrljVRdkaxZZWzg66185kbtThw/l8/cCrUEr3ii5eJ9sbVzSz1G1NOcZF0zwSck - mblet1y2aneqfPSp1NH8IDNpDCrfsglDS06S8rBeBSvYUlHAJZ759OBg3GoMbNPuxOz+3IKaSxmI - R6pqPtZ8DDottMWUWLRLVF5hpQNrQxmnCPwYev6gUvfrjdSt2n0LjZ2+QX1ijc0P4kytzIGkAJUM - xZuAFKQuqNAJapGyVjnPSbHeUpFu0+6L8xLFNt+E93PTQRueEpwSpATjoiLrAzsXERhD14thnlcY - SNXfwmu3afdl9slW1vwgy8rMMNOjE0kpBJhmJqWQkI/kfeMlRsjFkV2vKG/V7szyH73E5geZ9SAC - YBV2YkgcW5RM+6QpyXVLky8ue7L6VqJio3ZfZqfW2nyT1ZFn6JIUzv/J+Z1LxCK7SBly0oZjoYnE - NciG1rG1VbtTTbJ/zEKaWzbG3LQmlFfTCxsotdJdSp1lZrJxz+W0K5hC8bAxtkm7K6HTt1NOq6j5 - QZaNAVMilxbmCGJM1mn9E2tdolhShcqmbOFerZtkW7W7svwHL635YTMyWcOWUGhPQxAqYVgLJKZd - YZTnyOX8x3B2OzffqN0J2KdVY/PDPrj2dswJcPAINXcmuEvMt+IExlSgilZtCVrdUhxu0+5E7vUK - ltb+KZ7B7vU+PJB7u+kggyQuoQlYqmoV5p855DmOvJ4OmILWbXZZih7XxGtbtUdw+/rTxmanzaF1 - U0M4UMoOx6ty3A4NwkulkwQNGeQ6UW7VHoHtT/bPnzS3KvOAJKCgRDmtR6+CqzwxxsIAQYoZGzu4 - dqvIuU17ADf3B/dJY+NJykGaF22ljNWVxLkWUYQhvdBQkSvdtFtXt63aI7CdclPyOthwEIIS6JSf - bpjUIVrJLDhuglQGVZ72vsW05j3fqj0AW/jq3z7t1a1O/6s0Qoc1G+GbXK78ADXLQ6IqDHHpleLm - tgO5TXsEt/8TPu3VDRArZBEZECuWLbGTmYhAl6Z5NF2U6bDh7erQVu0R3PJ9Ppvb0odH2P3UfNQy - ZzsXfvQ5kljKLa/J5w0Cd9Z5QZZpasKN2zK3TXsAv3Ouml9n2LEArDKOuc250BvtObdGdGFymTCw - TBKmhFss2FbtEdi+++aTxmbbHCAovHay28ixcpeibl3U5fa/MiAN883dfLiN2gOwffm7P/y/nzQ3 - pgDUtONRm4K2D500714sEVtD92IglEjU1i2TrdoDuP3e/vF3n7Y7ELUZcgALDfsSdk4MjM6yTPMw - guy8GgekbmF5W7VHgDstzvKxbjxC8PD4ykpoWtO0hDNnVdVySY6WXcmcOHTOSuPC1bZeMtiqPQDk - t199eTbEkze/RpA2kOrc8Gns4zT0Cw6VmdCaKS9JC54t3Da/tmmPwHZe4sRH+/EIw797GsUPL4Kt - 9Wl4AHlemvXO8OKgcS2ZyGkMZCZrYW7JALZqD2D53R9+dzbGU4cgkR2KSzJCEGWFMgYQ3rHoOjat - 5gLnPehbVaSt2gOw/dn+2yeNTZvEpTC897DOfsS7Bt9Vk5x3EPMZKup9XfC2ag/B9t0njQ0HdO2U - iWZ63MUM4pZYkzAyJSJZeU9+wK20xFbtEdh+/2k75ix2rBiXgKAlcUbWUjrHucI0R5I0Ojk+Qdxu - H2/V7oPtdy9fvjrFM7i9+Ebpl58PSmhjFptdtGbstAELJ0F8SdTMafraOhSPqvm5PK0JbTZq98Hz - 5dP/++ppy/cvzkD0y8sfksu+8fkgVJ0Rck5OuMLml54dCsAGMo0aKBS5FPkYsFqJW7V7ozov4eI7 - fXgb3N877eKHD3Sq9CxrwyQhk9MVU1GJAjAdZq5Y1FZbxpRbE59s1e7D76Syp79UOf27FjX98G3F - kXkgSFylaZzXudCgnCZfitOGYI3cNP2Mln2NI9mq3QfMV8/7H/q9ffLkbrkF/uJuyXXwzXIt9wRa - 7+3LDeGvPj4qjLILKX0yEU1n2o7kkOfS+TQLpxkxUU3/GQTewii3aY/huloB7VYf5AJoX+/O43Tf - Vhx0359RNYREmkqWQXhSzSjTdDepCpSgSAWp1z2wrdqdAP/1eZ8rzrP841fPT6wb+Fg3HoC+58lB - po3wyHomqaSMPAoWqAcwiluthWAODc2JVqy3VLdq9wH5db/74eWfMCzfVG9f3bV+t4Q9fx2/+foE - ng+9eQhveK1PD8P0158fFQeRtIjNGzn9BIOUiRvBeh05DitwfiTMTshbHMQ27XFsv/6M9lcW2KUC - jNZcFKGMYkNOjz21ojXZ1AEIGK9Aft2S2ao9Du0fv/r9Z7bvZ6uGkktohOVg2vRHZCDGlst4SBKq - 5iidRL3GwWzVHsf2u/AZ7fv9HdSBARaugBTDzJCW4rt6TrlUZJGag2+iryk+tmqPQ/sn++fPbN/L - 1iuWazXC66JBEueNS8EiFh1ZZY5YRz8aW4s8bNUex/bP335G+/60BCn75uZCqTmXKGSIXHEXFACb - y6cjk0pTENf9o63aw9C6P7jPaN9/kixl76Za0k0VY2pUbS6jenLLUmehQQ2j3EOiz43a49D+0X9G - +160DltGxTQ0HgE1VylxabXQRYJxKOckbCGqdRNqq/YwtMvlmc9s359cy+s6XRqpwATu6rKHFIch - noKFokqvASMrbrWRt2qPY/t/wmdD6lf8nyUR9hx73nOntRkpAe98WU8BjRJLIhkB5nYPYKv2MLbx - j//7M9pfyYkHsoasutBMB6TkQBZaxqVKTsUkuaxiDspbTrxt2uPQfvfNZ7Tv32w0DVJubA425qrL - PU0PNXIyoGSoqVEk1LHdNhs3ag9Dm7786t8/s33/jDxNI2pMhQHgVJ1+DASpcTBVNRe6k7OpcbVW - bt2qPY7tHz9vNv6K/wNMyailElJWROIiS2uGdlmZuYAqVrNsHFbXdqv2MLT/5r7+jPa9aBVomh4M - 69MyIqY7l27Ot8hBMN1EAWReKC7XZIpbtYehXa7nfWb7/tjOIaoUthYuhI8TmAzYebIBvOxdA1DN - Hm6V1bZqD2O7XuH7DPf9243NaM2QKcZatTIuOxIpGyNK88IV4IZEjrf0cVu1h8H9Q7SfzeRfMZOr - CqhbmJOt1Ew5F5eiam7OtFppKJlr7cCbdVNqq/Ywtl99Xm5/ZUr21oDDgZaRSmgwNOUxxpaAaUVV - Jek92Vvu8I3aw8h++9WXn9G+P9rNNBSkXVOyMCOZaqimiwpCZCwVoejYlYrrartVexja7/7wu89o - 328kqyUrLqLshnhTNQNanNYwlxntEMmoIoiX1f/Zqj0M7Z/tv31G+/5gCyGEMTmTdcxQqsS7UdOd - WQ55AqtlOrKqZ1p3LbZqD0T73We079+QAtGkEct+MJvzqghqqZhJaLmPvFJHKobZhxCpjdpd0b5e - z+Q8pq/34g2Ybz847AacCRISaj9dUiOzATU0KOiEXo4ahYdUen64AbdJuyvFX5ItX2FsPjIcDzSJ - /AhNNG+AM2arRKmQCZ5RSmGC8AKdBn2r1LFVewS7a0QVn4pOltZhLnBSSsiRK0dSMu6YzMCFygEV - NeX0GvK/VXsEuotEDZ/KDrWYnsXQEUJmnBQoJ6WLc3RJrshCyUwHe8tPv1V7BLtrRAWfio4x52ko - mVnHMf3DUuMEJJVkmrei2JwUpRe3elRbtUegu0jU77mrnVA4DQ7QqLTCPGLFlhbvgMsISnSpJarO - VnZbtUewu0ZU76noiOe25E4btgYrYsugBVIyo0I1XDREk5BgnTG3ag9Ad5Go3VPRla6txmlfKA6x - LwfOySTmlCoohiaJXiiD5lZ/eKP2CHTXiMo9Fd0QgfuudVRFecG1qHoI6WvFObCWCD0DiSCuKZi3 - ag9Ad5Wo23P9A2XmwiXnTMfyNDQwMK7CCGxJHaoFZ8CNperXGXOr9gh2F4mqPZVdH1kKjSbKzFPA - npgsgQPmEKYP5wgGcln5ei90q/YIduekrn+nD4/tcB6aur5qzXwjTj1o4tzojBGZ116CmpyMR2mY - xfXof6v2AH4XiXo+d8mbFmJCFJlMblxNgwRcMcSZi1VpRiRJUYQV3VbtEeiuEdV8ro9g81yldC9Q - SSkFXFlBRnLXIcUhwPNYCGg9TtiqPQDdVaKWT2XnFFNdE3bXjIktMEqSi+ljJ60EL6kQJhSwZqLZ - qj2C3TWikk9Fp1Giy6EFIYkKw8FBdQs2UBTVLccCpozGyi2sfJv2AHQXiTo+FV1zDEbroCtECpVJ - KJ2bQCKCm842ciOqBbXe9tiqPQDdVaKKT2UntG9YQYFIsigJVGJfsulxTc3IlKxQoCquiQq2ag9g - d5mo4XNNFZOpgZ7zXyOteeda9grWFCFLp9JZVL1N93s1VTZqD4B3lajgc9lhs66Rbb5Y3zEAyxqT - yciz5k1JJYx22NZThK3aA9hdI+r3XEsFmIFBbI4kG/REITkq7UnJJEoUukZjSKhb4vqN2gPIXSSq - 99xjVxRSFuONKMYWEQkFSj9IgrXC8umF8zQNkHXC3Ko9At151Voe7ccjDI+v1lKjTEqXUg3TTBso - UnEMqLrweTp2SzgRJYPrzvRW7REs7/N9v0rU2NqZx2jeHxr7pwzZ1IyjCSWCJMFGAtBDEsM6hFmS - raAsqwOxVXsYymsEkV2EZC6RFcUY5yErZjJkjH4OPV+Lk5KMNUaBMasXv1V7GMmLxJRdBOVSZAJd - k0EODdMtj85QyVwpbTOvqgrkDoJZ59et2sNQXiPE7CIkhyYOyJXoBZ1zLRIPkknjba2UWQYhm2y3 - QblVexjJi0ScXQSlaqRYwSo1CwPQmA4aopwzZ2XMGjWsKDzjGq67VXsYymsEoF2E5IAk9BDZWmQB - hJBdeiE8J+YqjiLzMAOGWV2RrdqjSF4kHu0iJEOB0ruyijKP0zBtWXNlTNJiLn5WD2OJKS3XMblV - exjJa4SnXYRk0eihGjJgBZqkrJuIrGzT9eeqh9BRN83Temq/VXsUyatEq10EZRBLNdZkRBOGRZ09 - R6WIETe+Gph/0JK+SK1XkrZqD0N5keC1i6AUwmkhBQ+JdzFKRlY5UOMqBswWuIikLCi6VSXZpj0K - 5UVioS5CkuemZQcx1zyFkpJo5JVEoYwmIwMq01XkfL3juVV7GMlrhEZdhGR0MvOs5rTp5+DyQ/eB - k1VFUkimT5fD9NZvfshW7VEkrxIpdRGU0AOLTMqaHGOpDSdxGB1dhEiCMcGHCpzRinKr9jCU1wic - ughJZDBKFSFJCzhnx8CA14GWcJlBuVC6GydvOf62ao8ieZE4qouQDORElyOYIOJ0Mwz6xIIVTkjF - 0IoESMK4utaY3ao9iuRVwqougrIxZayRuJxtZKm6XTx8LFqGqMmawYSi5sqaeGar9iiUl4myugjL - DnrJDyM0CxIqBNKNelSBxBJQpbSCttTgXpfKrdqjWF4l6OoiKGOKTaDuAiSMiFJyHBnACEtZNmmw - +iJlWE+3tmqPQnmNGKyLgJSlaASllF7KFuZqjJ2AnNB9KaallqjHmmW/XVDcqD0K5EVCsi5CEkdn - 2ksTdJ6YZKHIdCWVWIzZMMNQiIGabubrRu1RJC+SV/EiJE0LPAjh5hoYgOs4XUIrwUBQuuQhsVdA - Rrdke1u1R5G8SBrFi5DM3FAnDIZn7Ux0lJTQS1ykMs2CYH46GirldUxu1R5H8hJZEy9Cci52Akjz - xofmijlfjASlmfCdu2mOzmUwB8tWl3Kr9gCSF5lYT41aBqlADzMEqpAhGCGTsIlybNOPMMqw2FBL - tg7CrdoD0P3paf/ry6tEuq6deYTiz+0HrYxMC2Q64+DGslqsANRFcRkZwRjC85b6cGsqlK3aw1Be - I9L1IiQlVxLHUuumKaa5nh4Ez7h4iEGnIaukkHjkK8mt2sNIXiTS9SIou69cTf++9UyUqg8OlK+V - r7Zn7aJiKRbsrcTGRu1hKK8R6XoRkq44T413S4bIZN6kASGRopqTJXRQI6lQwhrpulV7GMmLRLpe - BGWSzRoCrVJSRI7bOlKR1JZAOaYSCk6Md75GfWzVHobyGpGuFyFpUmwMHVbShbwLBhmqGsD7GAQa - xiIK6Z1dbZ6N2qNIXiTS9SIk5wCjUKvKGRF01IyWKzssLzGPLHHNVJXGsDUH41btYSSvEel6EZLz - m6ckphkjnZOjO2UDAVq9BJpTi9h6Vz4YfStis017FMmrRLpeBKWsipuCPivurDHTt9DMcqm6aUVR - TZ2rwTytFwm2ag9DeZFI14ugFLV5JT0jYi1Kn82AVo0cSTrynBfqYkiR1rOsrdqjUF4k0vUiJJfz - YQHKQJojy08vI6hslQyuMiU0Vs6RRUW3/H8btYeRvEak60VIOpx+YmXamelKgOJahU5DZwXThoEe - ZDFcQllXyq3ao0heJdL1IigzEpc8s0qSL1XIhWE2VU9uDC4tQ00KAt3ylG3VHobyGpGuFyGZSqQl - 39gSZEWWLAIC01IiBxTeGIeWI5Y1R+dW7VEkLxLpehGSkhWhsgja64w6dzHNUYbkFDndRgIDsxXV - bRt9o/YokleJdL0ISoQqsICzPnAu0xAiMBiZd4mevAlKKEAn1+l1q/YolJeJdL0IS2ErAbSJKXhJ - VRk2uh7ENElFSbviPZgW1iPnrdqjWF4l0vUiKEvD6enbzpmVTjCURqrcTY4GjdVSVEStFTe3PC7b - tEehvEak60VADs2ZAA2lo1aDp9IyNIougFRF6x64CUt61lsal23ao0BeJNL1IiQxB2MEG7LPiXOp - R+RGdGqOOYZRLIFzlHnSah2SW7VHkbxIQNZFSDbmhOR6DqYBrIwSLYGRhhEjqsZww7RtvIjb7Z5t - 2qNIXiTS9SIkkQk/5uImGwuIXqQapKYkBzdJFuJLlPL0HW/FNDdqjyN5iUjXi5Bkc5AxHpSUQzHU - vNaGMsjMQXE1Pf4hvfZGrVkGtmoPIHmR4XhuNnrJ4yBqgDHlEgb3ZSjJQaIgJpUDAdh1W1Mrb9Ue - gu4S4+/cQnGkYkThNIEwfQjgAw1Q0aSbMU5Oa1OUKtZ4na3aXdF9NUb9Pj99Hvqz/GNvX921fneV - aOXX+/Typ44+Vo/sfbqDPBJe5bRMWeyYjIZp1ignI5iqpqEqeLPdAJbWVo9ko/Z45tcIa/5YkMsx - l0bPwfGMlKZ/yaufHiYLYmId3SzljjGs9UK2ao9HfpH454+EuTJKkGNqsMw0yBb49GBQzyEsuAqo - GEdGIppbeu5t2uOZXyNQ+iNB3qZ7SoaNYLpjfGhasopIkRoiy5UPX3gX2q+n3lu1xyO/SET1R8J8 - GmAgpFYocg/IivDTL+o8zgU6EedzweY6c70Gz2/VHs/8GqHXHwnyoiATVAdOdxYlc1qwTHxJy8ZR - Rs1Gz7L1dftqq/Zw5BeJ0f5IkHvd56jFzisVtJy3IsA2L/UctYSTpC7QzO04aKv2eOTXCOb+SJAb - zsWwRRCQQiks+doF55yEyK12iwUJwKyu+Vbt4civEvX9kTCXhqzkS2YiQA4p5QRVUi3WGTkq67qR - UKrjuh2zUXs884uEh38kzJlmrHfN5wAFE7GRypHzztmQmnht2Umlxm0Lbqv2cOYXiSP/SJCT7yxw - YWvUumstjCm8ZhG8BM7QBInEUNG6A7dVezzyawScfyTIwSQTFO/ERDC8FqUCxyWTcsChSPlkJJfV - uNVN26g9HPlVItM/EuZtiVluwUIxxVQpVZfJ+8I8M8VzGbp0pN3NNd+qPZ75NULYPxLkVWBWQSjH - o0u9CyzK6WrMiNwWKT1zbUBqq2u+VXs48ovEun8kyLuS2CrSXIe14HOtVgOyUK0kiaqrEFmPy5Hp - modko/Zw5FcJiv9ImMc87TBLOqBhi/dFuuTlHkNXhiBIr2WMwsvVgNuqPZz5ZaLnPxLoBoMXgkTQ - qZc5iCFMgtihTIdbSDYXaiY5N+vt0K3aw6FfJcz+I2EuTBBVAglJErsOIkehknSMEB2vMmiJJqU1 - d8ZW7eHMrxGP/5EQ75JKLyjBC++sVRKmSaZSK6CyNEwWYEErs27BbdUeTvwigfsfCXIyUjUwkxRn - BX0AzZt15KQn5rSas3jAXvKai2Or9nDkF4nw/0iQs24sB86FnUN1ybmqjTZK8GmjZQtgTPSja7Ne - YN2qPRz5RWKPPxLkLgIloul+helgGyYYmMHk9LuVqZJ1EsBQivUIdav2BOSXiFn+SJALUaZ3xbR0 - lo+lpIuixGHECIpCNBWYU0LfsoBs1e6K/Ou7F3/78cxw5uX9D315wPlWy0ElJ2mOL5jek2UuCNVs - FQZAaZHQar6ceExTW+MKbqv2AHDnxSRfhFsfgyvehwtcoOCQpGZCCWWknTOqmuZyZNzAesqxVXsA - txMDiy8CrvpWBUEG9JYLgyAN8DotHe6ZZs0ImLYtpzULxFbtAeDOiw6+CDcjitIdI1NsqVqmlKDB - mdZx6KxxieK2RUVa7z9u1R7A7cQQ34uA60CMC2kdJCaE7gyZBOaNl67WZi2lECIOuhWl26Y9ANx5 - cboX4WZ8nAxkFpIP0LZbFrVJxJRjBRSwxIwwQt5KQWzU7s/txGDbi3Djc9ZTyLgOpIqNRvkchfSs - W60SZjGYD5rr1fvbqj2A23kRsxfh1oQmipYrBpkEUx5VL1VEZxXnEWxGA8LxdW9uq3Z/bmeGvV4E - HLcUBEosc6WSimUmhWDJDzUtw9qIaU7c8bS6Alu1B4A7MXb1IuCKUV1LnTkxZxnzMNcwVZGTNwlU - 9QSODSlXk3Krdn9wJwagXoQbADhbamtSFnCSWWQgMGPggcnGZdJOKMbXMsdbtQdwOy+K9CLcjBdk - DJklYbSInEvUVmvFKhM2JaaVLmCFLDeLcpt2f25nhoJeBFxNds57whQhImSoGlmnINFKb2lMN40J - xO7WFW6r9gBw58VzXoTbnNgkCjTVj6T5EFpGR7obpXviRU67n+p03NYsmVu1+3M7MSjzItwEJ9Dg - uCotpxYgogZGrgqYzvRyg5n1aX/IW5qhjdr9uZ0ZWXkRcBIIWh2J01y6EDp48q0AiJYDTotfCjlk - TGspqa3a/cGdGh55EXKquJiRaWMaX2sJNa3U4JgHOF8EiiyGTzfve6t2f3JnxjheBNwQjC/RClpQ - EdOrBiOQUDQqEqosJRNjqP0t4c9G7f7gzgtUvAi2OeVJRIwhZI1GCpuZnv+MuXoZ1EPXkoVBtLdI - tG3a/bGdGG14EW4SmdTdBR9Ldaw7oym7ETNVNYxFmqY/68yvySu3avfndmLI4EW45QTgaI4YFCYo - 2zkkQ2LZJwaX1TQilz3kuaCttWU2avfndmLc30W4KR0A+Rwrhuul6ESQAiNmbXjwS0YbL6NZSgGt - dslG7RHcTgveuwi36jlgEi5X8Fx6r5gttUQlQzfAJed2aJ1uhwJbtTtxW/dKev/6xfLdnAPsNVIH - miBpmhMCs/SSeW3ARS7CtAsTJErCKF60bulWY3Srdh9Ev3n5Q37+xcv7H5/1//Xf6otnL+7+9Yt/ - ttb+zy/u+9/u/6X1+uIu3z998fxfv3j29Hn/l/vv7168evL9wzf6M47f/D/L3zP/tlc//Pa7l/2L - 27b0Nx7ZfDLbzqK/duG1X4GfPx+UWT2KGIwSRmbNpY7ORCIHgycUDqMGrklwtt5226rdcagulYI/ - VVK8qqxUQEwVUFH3vTrF+FAklyIUrBVgMt4qOG3U7kkq/vF/f6KkZOVaSNK6S0leFsY1szYOlwJU - 1LVJharf8nNu1V5xbn353bfh/dPqw9NPd2rtLkdrg0EuJQgxfQqi3LyoQCZpOa2dHABu1utW7T6/ - Bt/03G6Bf7fOf9Pnl/Sf/e4EcD935cbtjY8HHdSmqskYbEkstwCNUpr4UsUQWGSE07vAJfB5dRa3 - avfC9td81+LLevfir3/CE2D97i8/vLi7z+VZf7MrN3a/9vSgSqTSG7QNYGSpiipSixwKcZFKNBwr - I+OkYmusxFbtESi/vZ/T7pN+yvB7pB8/DcX3PDroKqc3bIkUy1AVSEFMLImyUDAj1JLylEnwboz1 - wvZW7Z4sX4anL+/vnpZXy/J5Gsk3evE6x3ceHBR1Nq1RttSdbM0qn/hc90QyliQnRoFKFo111CvF - rdp9KH6bRw+9Pv1Lfvb7fP/9CQTf6sGN3iONBxm1rnAHek1HOte8Oaq4MokRC9UBLNdNWjbBr/GC - W7U7kXv65HlvF+D3WD8eKL7v0UEsG3YLwvglP9G0LSGbjLwsOU3iYNkGVnqlWyzaVu1OLJcv+Zve - ev/LKeboG+9/YPd200Huv50rlwZjgmYokTkSILMQCozIZLQwoqlYbu7/Ru2OzL67f3rGhurP736N - 1U8fD0rhLknNQe1NpWFAYnNJqUhczi/fJBHDNEIYF2ueuK3aHTndtkYP5/T7p89Xz+Dn/+jG69Hm - Y7jpmqSa7hpYbZtQnbVCVnfphMoRFE7HwCh5uzm0VbszN3f3tD3pf3zh8sszfIVH+/HauHvs0TEs - AxaeWMzEmpOa6SXXIgEWxognrtxyHVZzGRaWW7U7swy93H/7fb47FeTPnXiL4hvtB90rmp4bm0Op - qzHXLG9z6AGJG43ZsKQTcjGSGWtI2lbtzghvrvGZ/G49eAveL40Hbbrk1BgLzGcrg6htmh5QhYcE - 2maHZAgno1sY6FbtjuROOlH6/atn90/9i2fP8n2/y8/W//ZhDXzPk4PotbXwJ7hR5wom1BxFzvM+ - mm5QOFqOdZqRt22Wrdo96Z1zynRVeioQITDVcfplpD3DtCQgRW9AF0gaSpug2Lp3vVW7J731iOgz - vZ+ieUOepoeBxD0zxrQyqILhLSZwmscQeOcu36o/bdXuRe/lff/Lt/3+/unzJy9PWfJe78BPK97b - bQeF0oB2wFAMRVE7p7UJXHQzjUdkoi0ZWIjHatbdlK3aI7B9+bScTm724TF4D81H7WyiENN/42Q4 - GGFUgKzzUoyhB6ZSUVUxYrdJc6t2V373+f7ViYNuff0b1H5uOeiENmgzkvZycO8RE7nitDBh2voi - OZ6pQ7IG1q2wrdp9gP3xxX/058vX88uOxgncvuxPcv3xl77c2D3WelCKTiNQzGFihZMZm+kMlgR+ - 3CimTGqw3HoWxq9JkbZq9+Z3kpvwNrQzcCmQjGgtKKqnZy2UY0IDGs1AB2zzAc41zdxuh23U7o7r - HL/gCrhACKWk8YMwRtNV1cFo71NkhQQtqW494BxNa4KIjdrdcZ3jCFwBF3FvhSad0QjlmVrGCbHK - 0BLXYA0DAGGgr9bjRu1OuO5ym8bZQ/zAGbje6MADsnfajirnOIpGFbuwjCHHHDonZSThHC+ZOJGU - Yk6At3KO27T7YPv3u/zDD/0uza/wxd2PJ2B7swM3bO+2HZRcgKlaWvOJFkPCSKMBDEvM96Zj5qpm - FHPqW7e3tmr/a9jmv5YTrt/+0/8HU+I+B5KMBAA= - headers: - Accept-Ranges: - - bytes - Access-Control-Allow-Origin: - - '*' - Cache-Control: - - max-age=300 - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Length: - - '29612' - Content-Security-Policy: - - default-src 'none'; style-src 'unsafe-inline'; sandbox - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 09 Feb 2023 12:51:04 GMT - ETag: - - W/"c394e8a37b4721b1e7b240bb2039b6575832e0a31ec551ae5d9959253b312c33" - Expires: - - Thu, 09 Feb 2023 12:56:04 GMT - Source-Age: - - '124' - Strict-Transport-Security: - - max-age=31536000 - Vary: - - Authorization,Accept-Encoding,Origin - Via: - - 1.1 varnish - X-Cache: - - HIT - X-Cache-Hits: - - '1' - X-Content-Type-Options: - - nosniff - X-Fastly-Request-ID: - - 10543b87e245d5a38f20894f901f8717e03fde9b - X-Frame-Options: - - deny - X-GitHub-Request-Id: - - 75AE:6031:740A9:E4DB4:63E4C553 - X-Served-By: - - cache-fra-eddf8230090-FRA - X-Timer: - - S1675947065.967979,VS0,VE1 - X-XSS-Protection: - - 1; mode=block - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0x6330D5F08f51057F36F46d6751eCDc0c65Ef7E9e", - "data": "0x326a3cfb000000000000000000000000e2e4f2a725e42d0f0ef6291f46c430f963482001"}, - "latest"], "id": 5}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '211' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x0000000000000000000000000000000000000000000027d7cdc88e3896d9c0a6","id":5} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '103' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:51:05 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.25.1 - method: GET - uri: https://raw.githubusercontent.com/Synthetixio/synthetix-docs/master/content/addresses.md - response: - body: - string: !!binary | - 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 - FHPqW7e3tmr/a9jmv5YTrt/+0/8HU+I+B5KMBAA= - headers: - Accept-Ranges: - - bytes - Access-Control-Allow-Origin: - - '*' - Cache-Control: - - max-age=300 - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Length: - - '29612' - Content-Security-Policy: - - default-src 'none'; style-src 'unsafe-inline'; sandbox - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 09 Feb 2023 12:51:15 GMT - ETag: - - W/"c394e8a37b4721b1e7b240bb2039b6575832e0a31ec551ae5d9959253b312c33" - Expires: - - Thu, 09 Feb 2023 12:56:15 GMT - Source-Age: - - '100' - Strict-Transport-Security: - - max-age=31536000 - Vary: - - Authorization,Accept-Encoding,Origin - Via: - - 1.1 varnish - X-Cache: - - HIT - X-Cache-Hits: - - '1' - X-Content-Type-Options: - - nosniff - X-Fastly-Request-ID: - - 9ca0ff1e2e08357d126c7a69e03133149fab2060 - X-Frame-Options: - - deny - X-GitHub-Request-Id: - - 43AC:4174:2F38D:861F4:63E4C08F - X-Served-By: - - cache-hhn-etou8220034-HHN - X-Timer: - - S1675947075.371508,VS0,VE1 - X-XSS-Protection: - - 1; mode=block - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0xD3739A5F06747e148E716Dcb7147B9BA15b70fcc", - "data": "0x33140016000000000000000000000000e2e4f2a725e42d0f0ef6291f46c430f963482001"}, - "latest"], "id": 6}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '211' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x00000000000000000000000000000000000000000000000871d097790e1bd64b00000000000000000000000000000000000000000000004d89fd68d25ae37e1e0000000000000000000000000000000000000000000000898c0b8ccadfcf1cc0000000000000000000000000000000000000000000000053e859f782e18928b8","id":6} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '295' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:51:15 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0x49B35BE7D96888C02F342552aB218d859599aCeb", - "data": "0x326080397355534400000000000000000000000000000000000000000000000000000000"}, - "latest"], "id": 7}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '211' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x000000000000000000000000dfa2d3a0d32f870d87f8a0d7aa6b9cdeb7bc5adb","id":7} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '103' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:51:25 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0xDfA2d3a0d32F870D87f8A0d7AA6b9CdEB7bc5AdB", - "data": "0xec556889"}, "latest"], "id": 8}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '147' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x0000000000000000000000008c6f28f2f1a3c87f0f938b96d27520d9751ec8d9","id":8} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '103' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:51:36 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -- request: - body: '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"to": "0x49B35BE7D96888C02F342552aB218d859599aCeb", - "data": "0xec556889"}, "latest"], "id": 9}' - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Content-Length: - - '147' - Content-Type: - - application/json - User-Agent: - - Web3.py/5.20.0/ - method: POST - uri: https://mainnet.optimism.io/ - response: - body: - string: '{"jsonrpc":"2.0","result":"0x0000000000000000000000008700daec35af8ff88c16bdf0418774cb3d7599b4","id":9} - - ' - headers: - Alt-Svc: - - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 - Content-Length: - - '103' - content-type: - - application/json - date: - - Thu, 09 Feb 2023 12:51:46 GMT - vary: - - Origin - via: - - 1.1 google - x-proxyd-cache-status: - - MISS - status: - code: 200 - message: OK -version: 1 diff --git a/blockapi/test/v2/api/synthetix/data/contracts.md b/blockapi/test/v2/api/synthetix/data/contracts.md deleted file mode 100644 index 17e552d3..00000000 --- a/blockapi/test/v2/api/synthetix/data/contracts.md +++ /dev/null @@ -1,4021 +0,0 @@ -Here is the list of all contracts within the current Synthetix system. - -**Version**: [v2.82.2](https://github.com/Synthetixio/synthetix/tree/v2.82.2) - -!!! info "Naming Conventions" - - Within the developer ecosystem, the names of Synthetix contracts are referred to by their `source` Solidity file.If the same source is used for multiple instances of contracts with different constructor arguments - such as `Synth.sol`, `TokenState.sol` and `ProxyERC20.sol` - then the convention is to suffix the name of the differing feature to the end - be it the proxy target e.g. `FeePool` for `ProxyFeePool` or the synth currencyKey eg: `sETH` for `SynthsETH` - -!!! tip "Handy Contract Links" - - All of the below contracts can be accessed by our [contract linker](https://github.com/Synthetixio/contract-linker) utility. Simply suffix the contract name to the end of https://contracts.synthetix.io to get a link that will always redirect to the latest version of the contract on Etherscan. - - For example, try https://contracts.synthetix.io/Synthetix to get linked to the latest Synthetix underlying. - - For testnets, insert the testnet name before the contract, as in https://contracts.synthetix.io/goerli/Synthetix - -## MAINNET - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameSourceAddress
AddressResolverAddressResolver.sol0x823bE81bbF96BEc0e25CA13170F5AaCb5B79ba83 -
CircuitBreakerCircuitBreaker.sol0x9f231dBE53D460f359B2B8CC47574493caA5B7Bf -
CollateralErc20CollateralErc20.sol0xaa03aB31b55DceEeF845C8d17890CC61cD98eD04 -
CollateralEthCollateralEth.sol0x5c8344bcdC38F1aB5EB5C1d4a35DdEeA522B5DfA -
CollateralManagerCollateralManager.sol0x067e398605E84F2D0aEEC1806e62768C5110DCc6 -
CollateralManagerStateCollateralManagerState.sol0x573E5105c4B92416D1544A188F1bf77d442Bb52d -
CollateralShortCollateralShort.sol0x1F2c3a1046c32729862fcB038369696e3273a516 -
CollateralStateErc20CollateralState.sol0x8A1A00Df7aA0102497C7591912bA8301e8dB8CdB -
CollateralStateEthCollateralState.sol0xbe5B5a7c198bC156474ed5c33CBf2F3F604F8fF8 -
CollateralStateShortCollateralState.sol0x13A114a3Fa8A6CE03a0C5488BE9e614d78eDdb0c -
DappMaintenanceDappMaintenance.sol0xAb0B2f1Cf979cdbF4676251F35353eC5AF2732Dd -
DebtCacheDebtCache.sol0x1620Aa736939597891C1940CF0d28b82566F9390 -
DelegateApprovalsDelegateApprovals.sol0x15fd6e554874B9e70F832Ed37f231Ac5E142362f -
DelegateApprovalsEternalStorageEternalStorage.sol0x8F586F063ffbb89b186C8e604FC6614766f9C9d1 -
DepotDepot.sol0xE1f64079aDa6Ef07b03982Ca34f1dD7152AA3b86 -
DirectIntegrationManagerDirectIntegrationManager.sol0x5F41718459955217df6A02AA8f5C19614ECfA6E7 -
EscrowCheckerEscrowChecker.sol0x3b399e00AFd8201ACf8A5a0EcCF1C47d8D5E41da -
EtherWrapperEtherWrapper.sol0xC1AAE9d18bBe386B102435a8632C8063d31e747C -
ExchangeCircuitBreakerExchangeCircuitBreaker.sol0xeAcaEd9581294b1b5cfb6B941d4B8B81B2005437 -
ExchangeRatesExchangeRatesWithDexPricing.sol0x648280dD2db772CD018A0CEC72fab5bF8B7683AB -
ExchangeSettlementLibExchangeSettlementLib.sol0xAa5A3D7F04E15b22Eb3664B56310aA18A3527Ec7 -
ExchangeStateExchangeState.sol0x545973f28950f50fc6c7F52AAb4Ad214A27C0564 -
ExchangerExchangerWithFeeRecAlternatives.sol0xaeA0065E146FD75Dc24465961a583827284D405a -
FeePoolFeePool.sol0x3B2f389AeE480238A49E3A9985cd6815370712eB -
FeePoolEternalStorageFeePoolEternalStorage.sol0xC9DFff5fA5605fd94F8B7927b892F2B57391e8bB -
FeePoolStateFeePoolState.sol0x11164F6a47C3f8472D19b9aDd516Fc780cb7Ee02 -
FlexibleStorageFlexibleStorage.sol0xc757aCBa3c0506218b3022266a9DC7F3612d85f5 -
FuturesMarketManagerEmptyFuturesMarketManager.sol0xe343542366A9f3Af56Acc6D68154Cfaf23efeba6 -
IssuanceEternalStorageIssuanceEternalStorage.sol0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64 -
IssuerIssuer.sol0x5810Fc0E79F4323B2dd3c638914083Fd23a941C0 -
LiquidatorLiquidator.sol0x8e9757479D5ad4E7f9d951B60d39F5220b893d6c -
LiquidatorRewardsLiquidatorRewards.sol0xf79603a71144e415730C1A6f57F366E4Ea962C00 -
MathMath.sol0x385e1Eb2FF28F4A637DA2C9971F8CAF5F5b1E77c -
NativeEtherWrapperNativeEtherWrapper.sol0x7A3d898b717e50a96fd8b232E9d15F0A547A7eeb -
OneNetAggregatorDebtRatioOneNetAggregatorDebtRatio.sol0x977d0DD7eA212E9ca1dcD4Ec15cd7Ceb135fa68D -
OneNetAggregatorIssuedSynthsOneNetAggregatorIssuedSynths.sol0xcf1405b18dBCEA2893Abe635c88359C75878B9e1 -
OneNetAggregatorsDEFIOneNetAggregatorsDEFI.sol0x646F23085281Dbd006FBFD211FD38d0743884864 -
OwnerRelayOnEthereumOwnerRelayOnEthereum.sol0x0e16A6876210841577b233C4165d7B7EdF640b8a -
ProxyERC20ProxyERC20.sol0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F -
ProxyERC20sUSDProxyERC20.sol0x57Ab1ec28D129707052df4dF418D58a2D46d5f51 -
ProxyFeePoolProxy.sol0xb440DD674e1243644791a4AdfE3A2AbB0A92d309 -
ProxySynthetixUse ProxyERC20Proxy.sol0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F -
ProxysAAVEProxyERC20.sol0xd2dF355C19471c8bd7D8A3aa27Ff4e26A21b4076 -
ProxysADAProxyERC20.sol0xe36E2D3c7c34281FA3bC737950a68571736880A1 -
ProxysAUDProxyERC20.sol0xF48e200EAF9906362BB1442fca31e0835773b8B4 -
ProxysBTCProxyERC20.sol0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6 -
ProxysCHFProxyERC20.sol0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d -
ProxysDOTProxyERC20.sol0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6 -
ProxysETHProxyERC20.sol0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb -
ProxysETHBTCProxyERC20.sol0x104eDF1da359506548BFc7c25bA1E28C16a70235 -
ProxysEURProxyERC20.sol0xD71eCFF9342A5Ced620049e616c5035F1dB98620 -
ProxysGBPProxyERC20.sol0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F -
ProxysJPYProxyERC20.sol0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d -
ProxysKRWProxyERC20.sol0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B -
ProxysLINKProxyERC20.sol0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6 -
ProxysUSDUse ProxyERC20sUSDProxy.sol0x57Ab1ec28D129707052df4dF418D58a2D46d5f51 -
ReadProxyAddressResolverReadProxy.sol0x4E3b31eB0E5CB73641EE1E65E7dCEFe520bA3ef2 -
RewardEscrowRewardEscrow.sol0xb671F2210B1F6621A2607EA63E6B2DC3e2464d1F -
RewardEscrowV2RewardEscrowV2.sol0xAc86855865CbF31c8f9FBB68C749AD5Bd72802e3 -
RewardEscrowV2StorageRewardEscrowV2Storage.sol0x182738BD9eE9810BC11f1c81b07Ec6F3691110BB -
RewardsDistributionRewardsDistribution.sol0x29C295B046a73Cde593f21f63091B072d407e3F2 -
SafeDecimalMathSafeDecimalMath.sol0x84D626B2BB4D0F064067e4BF80FCe7055d8F3E7B -
ShortingRewardssBTCShortingRewards.sol0xCed4055b47cfD0421f3727a35F69CE659c8bAF7a -
ShortingRewardssETHShortingRewards.sol0x12DC1273915A16ab8BD47bA7866B240c253e4c12 -
SignedSafeDecimalMathSignedSafeDecimalMath.sol0x728A2B79Cad691531CC1146eF802617FF50c7095 -
StakingRewardsSNXBalancerStakingRewardsSNXBalancer.sol0xFBaEdde70732540cE2B11A8AC58Eb2dC0D69dE10 -
StakingRewardsiBTCStakingRewards.sol0x167009dcDA2e49930a71712D956f02cc980DcC1b -
StakingRewardsiETHStakingRewards.sol0x3f27c540ADaE3a9E8c875C61e3B970b559d7F65d -
StakingRewardssAAPLBalancerStakingRewards.sol0x7af65f1740c0eB816A27FD808EaF6Ab09F6Fa646 -
StakingRewardssAMZNBalancerStakingRewards.sol0xDC338C7544654c7dadFEb7E44076E457963113B0 -
StakingRewardssBTCCurveStakingRewardssBTCCurve.sol0x13C1542A468319688B89E323fe9A3Be3A90EBb27 -
StakingRewardssCOINBalancerStakingRewards.sol0x1C1D97f6338759AB814a5A717aE359573Ab5D5d4 -
StakingRewardssETHUniswapV1StakingRewardssETHUniswapV1.sol0x48D7f315feDcaD332F68aafa017c7C158BC54760 -
StakingRewardssEURCurveStakingRewards.sol0xc0d8994Cd78eE1980885DF1A0C5470fC977b5cFe -
StakingRewardssFBBalancerStakingRewards.sol0x26Fa0665660c1D3a3666584669511d3c66Ad37Cb -
StakingRewardssGOOGBalancerStakingRewards.sol0x6fB7F0E78582746bd01BcB6dfbFE62cA5F4F9175 -
StakingRewardssMSFTBalancerStakingRewards.sol0x9D003Cc298E7Ea141A809C241C0a703176DA3ba3 -
StakingRewardssNFLXBalancerStakingRewards.sol0x8Ef8cA2AcAaAfEc19fB366C11561718357F780F2 -
StakingRewardssTSLABalancerStakingRewards.sol0xF0de877F2F9E7A60767f9BA662F10751566AD01c -
StakingRewardssUSDCurveStakingRewardssUSDCurve.sol0xDCB6A51eA3CA5d3Fd898Fd6564757c7aAeC3ca92 -
StakingRewardssXAUUniswapV2StakingRewardssXAUUniswapV2.sol0x8302FE9F0C509a996573D3Cc5B0D5D51e4FDD5eC -
SupplyScheduleSupplySchedule.sol0x8d203C458d536Fe0F97e9f741bC231EaC8cd91cf -
SynthRedeemerSynthRedeemer.sol0xe533139Af961c9747356D947838c98451015e234 -
SynthUtilSynthUtil.sol0x81Aee4EA48f678E172640fB5813cf7A96AFaF6C3 -
SynthetixSynthetix.sol0x883A0E7b329Df75476d9378462522CF2f78Fab3d -
SynthetixBridgeEscrowSynthetixBridgeEscrow.sol0x5Fd79D46EBA7F351fe49BFF9E87cdeA6c821eF9f -
SynthetixBridgeToOptimismSynthetixBridgeToOptimism.sol0x39Ea01a0298C315d149a490E34B59Dbf2EC7e48F -
SynthetixDebtShareSynthetixDebtShare.sol0x89FCb32F29e509cc42d0C8b6f058C993013A843F -
SynthetixEscrowSynthetixEscrow.sol0x971e78e0C92392A4E39099835cF7E6aB535b2227 -
SynthetixStateSynthetixState.sol0x4b9Ca5607f1fF8019c1C6A3c2f0CC8de622D5B82 -
SynthsAAVEMultiCollateralSynth.sol0x942Eb6e8c029EB22103743C99985aF4F4515a559 -
SynthsADAMultiCollateralSynth.sol0x91b82d62Ff322b8e02b86f33E9A99a813437830d -
SynthsAUDMultiCollateralSynth.sol0xfb020CA7f4e8C4a5bBBe060f59a249c6275d2b69 -
SynthsBTCMultiCollateralSynth.sol0x1cB004a8e84a5CE95C1fF895EE603BaC8EC506c7 -
SynthsCHFMultiCollateralSynth.sol0xBb5b03E920cF702De5A3bA9Fc1445aF4B3919c88 -
SynthsDOTMultiCollateralSynth.sol0x75A0c1597137AA36B40b6a515D997F9a6c6eefEB -
SynthsETHMultiCollateralSynth.sol0x5D4C724BFe3a228Ff0E29125Ac1571FE093700a4 -
SynthsETHBTCMultiCollateralSynth.sol0x07C1E81C345A7c58d7c24072EFc5D929BD0647AD -
SynthsEURMultiCollateralSynth.sol0xa8E31E3C38aDD6052A9407298FAEB8fD393A6cF9 -
SynthsGBPMultiCollateralSynth.sol0xdc883b9d9Ee16f74bE08826E68dF4C9D9d26e8bD -
SynthsJPYMultiCollateralSynth.sol0xE1cc2332852B2Ac0dA59A1f9D3051829f4eF3c1C -
SynthsKRWMultiCollateralSynth.sol0xdAe6C79c46aB3B280Ca28259000695529cbD1339 -
SynthsLINKMultiCollateralSynth.sol0xDF69bC4541b86Aa4c5A470B4347E730c38b2c3B2 -
SynthsUSDMultiCollateralSynth.sol0x10A5F7D9D65bCc2734763444D4940a31b109275f -
SystemSettingsSystemSettings.sol0x202ae40Bed1640b09e2AF7aC5719D129A498B7C8 -
SystemSettingsLibSystemSettingsLib.sol0x4a39AEf2281ac0D192a9c4783604833bA8F31174 -
SystemStatusSystemStatus.sol0x696c905F8F8c006cA46e9808fE7e00049507798F -
TokenStateSynthetixLegacyTokenState.sol0x5b1b5fEa1b99D83aD479dF0C222F0492385381dD -
TokenStatesAAVETokenState.sol0x9BcED8A8E3Ad81c9b146FFC880358f734A06f7c0 -
TokenStatesADATokenState.sol0x9956c5019a24fbd5B506AD070b771577bAc5c343 -
TokenStatesAUDTokenState.sol0xCb29D2cf2C65d3Be1d00F07f3441390432D55203 -
TokenStatesBTCTokenState.sol0x4F6296455F8d754c19821cF1EC8FeBF2cD456E67 -
TokenStatesCHFTokenState.sol0x52496fE8a4feaEFe14d9433E00D48E6929c13deC -
TokenStatesDOTTokenState.sol0x73B1a2643507Cd30F11Dfcf2D974f4373E5BC077 -
TokenStatesETHTokenState.sol0x34A5ef81d18F3a305aE9C2d7DF42beef4c79031c -
TokenStatesETHBTCTokenState.sol0x042A7A0022A7695454ac5Be77a4860e50c9683fC -
TokenStatesEURTokenState.sol0x6568D9e750fC44AF00f857885Dfb8281c00529c4 -
TokenStatesGBPTokenState.sol0x7e88D19A79b291cfE5696d496055f7e57F537A75 -
TokenStatesJPYTokenState.sol0x4dFACfB15514C21c991ff75Bc7Bf6Fb1F98361ed -
TokenStatesKRWTokenState.sol0x93B6e9FbBd2c32a0DC3C2B943B7C3CBC2fE23730 -
TokenStatesLINKTokenState.sol0x577D4a7395c6A5f46d9981a5F83fa7294926aBB0 -
TokenStatesUSDTokenState.sol0x05a9CBe762B36632b3594DA4F082340E0e5343e8 -
TradingRewardsTradingRewards.sol0x62922670313bf6b41C580143d1f6C173C5C20019 -
VirtualSynthMastercopyVirtualSynthMastercopy.sol0xf02ce48fD47D7FA1B7a45a0444805d320D035775 -
WrapperFactoryWrapperFactory.sol0x02f9bC46beD33acdB9cb002fe346734CeF8a9480 -
- -## MAINNET Optimism (L2) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameSourceAddress
AddressResolverAddressResolver.sol0x95A6a3f44a70172E7d50a9e28c85Dfd712756B8C -
CircuitBreakerCircuitBreaker.sol0x803FD1d99C3a6cbcbABAB79C44e108dC2fb67102 -
CollateralEthCollateralEth.sol0x308AD16ef90fe7caCb85B784A603CB6E71b1A41a -
CollateralManagerCollateralManager.sol0x15E7D4972a3E477878A5867A47617122BE2d1fF0 -
CollateralManagerStateCollateralManagerState.sol0xbA10526cD8742acC73AedeF5f7Dbb2477Bf86922 -
CollateralShortCollateralShort.sol0xeb4b5ABcE7310855319440d936cd3aDd77DFA193 -
CollateralUtilCollateralUtil.sol0xD21969A86Ce5c41aAb2D492a0F802AA3e015cd9A -
DappMaintenanceDappMaintenance.sol0x54581A23F62D147AC76d454f0b3eF77F9D766058 -
DebtCacheDebtCache.sol0x17628A557d1Fc88D1c35989dcBAC3f3e275E2d2B -
DelegateApprovalsDelegateApprovals.sol0x2A23bc0EA97A89abD91214E8e4d20F02Fe14743f -
DelegateApprovalsEternalStorageEternalStorage.sol0x02f7fB66B55e6ca476d126d96f14c5732Eeb4363 -
DirectIntegrationManagerDirectIntegrationManager.sol0x186c50515e6Ee95cEC381d7f6Fe72C67085dBCb4 -
EscrowCheckerEscrowChecker.sol0xcdb7D0a946223255d39A6e29B54f08f3291cc118 -
EtherCollateralEmptyEtherCollateral.sol0xC8E91c926E04BE1cb94e51c5379d14774D51ae6C -
EtherCollateralsUSDEmptyEtherCollateral.sol0xC0c66470E766AE2026E6695966C56C90741811AA -
EtherWrapperEmptyEtherWrapper.sol0xc3Ee42caBD773A608fa9Ec951982c94BD6F33d59 -
ExchangeCircuitBreakerExchangeCircuitBreaker.sol0x7322e8F6cB6c6a7B4e6620C486777fcB9Ea052a4 -
ExchangeRatesExchangeRates.sol0x913bd76F7E1572CC8278CeF2D6b06e2140ca9Ce2 -
ExchangeSettlementLibExchangeSettlementLib.sol0xFfa3635f5844eA0F2FcCB03cb936828F508F558b -
ExchangeStateExchangeState.sol0x7EF87c14f50CFFe2e73d2C87916C3128c56593A8 -
ExchangerExchanger.sol0x24b4b6703a2eE7bA75a4Fc859B606F0bbaeef4EA -
FeePoolFeePool.sol0xD3739A5F06747e148E716Dcb7147B9BA15b70fcc -
FeePoolEternalStorageFeePoolEternalStorage.sol0x41140Bf6498a36f2E44eFd49f21dAe3bbb7367c8 -
FeePoolStateFeePoolState.sol0x6e0d26cffc3a63d763F1546f749bf62ebC7d72D8 -
FlexibleStorageFlexibleStorage.sol0x47649022380d182DA8010Ae5d257fea4227b21ff -
FuturesMarketAAVEFuturesMarket.sol0x001b7876F567f0b3A639332Ed1e363839c6d85e2 -
FuturesMarketAPEFuturesMarket.sol0xFe00395ec846240dc693e92AB2Dd720F94765Aa3 -
FuturesMarketAVAXFuturesMarket.sol0x4ff54624D5FB61C34c634c3314Ed3BfE4dBB665a -
FuturesMarketBNBFuturesMarket.sol0x4Aa0dabd22BC0894975324Bec293443c8538bD08 -
FuturesMarketBTCFuturesMarket.sol0xEe8804d8Ad10b0C3aD1Bd57AC3737242aD24bB95 -
FuturesMarketDOGEFuturesMarket.sol0x9f231dBE53D460f359B2B8CC47574493caA5B7Bf -
FuturesMarketDYDXFuturesMarket.sol0x10305C1854d6DB8A1060dF60bDF8A8B2981249Cf -
FuturesMarketDataFuturesMarketData.sol0xC51aeDBEC3aCD26650a7E85B6909E8AEc4d0F19e -
FuturesMarketDebtRatioFuturesMarket.sol0xd325B17d5C9C3f2B6853A760afCF81945b0184d3 -
FuturesMarketETHFuturesMarket.sol0xf86048DFf23cF130107dfB4e6386f574231a5C65 -
FuturesMarketEURFuturesMarket.sol0xad44873632840144fFC97b2D1de716f6E2cF0366 -
FuturesMarketLINKFuturesMarket.sol0x1228c7D8BBc5bC53DB181bD7B1fcE765aa83bF8A -
FuturesMarketMATICFuturesMarket.sol0xbCB2D435045E16B059b2130b28BE70b5cA47bFE5 -
FuturesMarketManagerFuturesMarketManager.sol0xdb89f3fc45A707Dd49781495f77f8ae69bF5cA6e -
FuturesMarketOPFuturesMarket.sol0x9F1C2f0071Bc3b31447AEda9fA3A68d651eB4632 -
FuturesMarketSOLFuturesMarket.sol0xcF853f7f8F78B2B801095b66F8ba9c5f04dB1640 -
FuturesMarketSettingsFuturesMarketSettings.sol0xaE55F163337A2A46733AA66dA9F35299f9A46e9e -
FuturesMarketUNIFuturesMarket.sol0x5Af0072617F7f2AEB0e314e2faD1DE0231Ba97cD -
FuturesMarketXAGFuturesMarket.sol0xb147C69BEe211F57290a6cde9d1BAbfD0DCF3Ea3 -
FuturesMarketXAUFuturesMarket.sol0x4434f56ddBdE28fab08C4AE71970a06B300F8881 -
FuturesMarketXMRFuturesMarket.sol0x3Ed04CEfF4c91872F19b1da35740C0Be9CA21558 -
IssuerIssuer.sol0x59B01789bF268C7C77451D02758621990bB50BBF -
LiquidatorLiquidator.sol0xB589Af3f2e3377A9a57da74bE1b6598926479505 -
LiquidatorRewardsLiquidatorRewards.sol0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4 -
MathMath.sol0x0B3A73EE0740b3130e40B2A6b5aaf59E7E3Ef74c -
OneNetAggregatorDebtRatioOneNetAggregatorDebtRatio.sol0xA408d8e01C8E084B67559226C5B55D6F0B7074e2 -
OneNetAggregatorIssuedSynthsOneNetAggregatorIssuedSynths.sol0xe152A2DbcE62E6c0bd387fFd1bb8086F44c5Fd04 -
OwnerRelayOnOptimismOwnerRelayOnOptimism.sol0x6d4a64C57612841c2C6745dB2a4E4db34F002D20 -
PerpsV2DelayedOrderAAVEPERPPerpsV2MarketDelayedOrders.sol0x95597eaC456983645d4aD0cC83C5356cc245Ea0D -
PerpsV2DelayedOrderAPEPERPPerpsV2MarketDelayedOrders.sol0x70aEA7B455510640217CBCB78C5f2d29DB5a4a01 -
PerpsV2DelayedOrderATOMPERPPerpsV2MarketDelayedOrders.sol0xC0204F82ce1e25d15D2cE8DC1deA3f319BB64a8F -
PerpsV2DelayedOrderAUDPERPPerpsV2MarketDelayedOrders.sol0x6B9cbCdaE03C4cDfD9fb9D987C74856Ac332fDCf -
PerpsV2DelayedOrderAVAXPERPPerpsV2MarketDelayedOrders.sol0x580f76aF1FC4BB29F0032EeC6e0F7460D26b5f56 -
PerpsV2DelayedOrderAXSPERPPerpsV2MarketDelayedOrders.sol0xfce521766201013974Dbf3B71E68b0CF8FBcd05B -
PerpsV2DelayedOrderBNBPERPPerpsV2MarketDelayedOrders.sol0xaf476d7817105437aed79a86E802b79D4B1c473F -
PerpsV2DelayedOrderBTCPERPPerpsV2MarketDelayedOrders.sol0xD8c3F087000DC990Fc84a776aED78d31507F716B -
PerpsV2DelayedOrderDOGEPERPPerpsV2MarketDelayedOrders.sol0x62B6f3733AB95Ec88864F03f758DE4377d6C751d -
PerpsV2DelayedOrderDYDXPERPPerpsV2MarketDelayedOrders.sol0x9B20476899C8Fb22d96af37D2017016A80647159 -
PerpsV2DelayedOrderETHPERPPerpsV2MarketDelayedOrders.sol0xe343542366A9f3Af56Acc6D68154Cfaf23efeba6 -
PerpsV2DelayedOrderEURPERPPerpsV2MarketDelayedOrders.sol0x3459276E8f644F111539804e08253799b176Ab83 -
PerpsV2DelayedOrderFLOWPERPPerpsV2MarketDelayedOrders.sol0xB9202087852298E5e2ebC0c30758fA4E07faf6fB -
PerpsV2DelayedOrderFTMPERPPerpsV2MarketDelayedOrders.sol0x7F87AEc4938770e52AF9A0B5239521BD9C53F28E -
PerpsV2DelayedOrderGBPPERPPerpsV2MarketDelayedOrders.sol0xf3DCf19D397F5A696A106b4287379Fb53fE33005 -
PerpsV2DelayedOrderLINKPERPPerpsV2MarketDelayedOrders.sol0x45C93D2C1994a70fD2Af98DA6ba100953b96A768 -
PerpsV2DelayedOrderMATICPERPPerpsV2MarketDelayedOrders.sol0xDF89210B03E319B08EC0cC73C4B50468306e1252 -
PerpsV2DelayedOrderNEARPERPPerpsV2MarketDelayedOrders.sol0xF6CB6699367F8f61A8bF504CBe914C639D051E19 -
PerpsV2DelayedOrderOPPERPPerpsV2MarketDelayedOrders.sol0x3c30CBd400f8e7c099ab27cF28DA843cD4433FFE -
PerpsV2DelayedOrderSOLPERPPerpsV2MarketDelayedOrders.sol0xAEb1Cc5FD71CfFD1462808eE13b1051196bF6224 -
PerpsV2DelayedOrderUNIPERPPerpsV2MarketDelayedOrders.sol0xcC0ceC53572d4e10a8fdABb468356287B170c6A9 -
PerpsV2DelayedOrderXAGPERPPerpsV2MarketDelayedOrders.sol0x31A53d5238391d1449b443eDB5476b5D8dF23239 -
PerpsV2DelayedOrderXAUPERPPerpsV2MarketDelayedOrders.sol0x5AE6b5DD28F44689e4D17F47aeF1f863C36Df556 -
PerpsV2ExchangeRatePerpsV2ExchangeRate.sol0x4aD2d14Bed21062Ef7B85C378F69cDdf6ED7489C -
PerpsV2MarketAAVEPERPPerpsV2Market.sol0x722E8e89dD4217FB27447053b2cB3AEC336A2F1f -
PerpsV2MarketAPEPERPPerpsV2Market.sol0x3f8dc633227DeC2E4a52cE8dB91c4858A8E3Ae78 -
PerpsV2MarketATOMPERPPerpsV2Market.sol0xD12Fc7a381bFFbc05c709472097a0a4E9cd8D410 -
PerpsV2MarketAUDPERPPerpsV2Market.sol0xF6B1867B51d30d6f34fF9aD603dEdfb32bF6322D -
PerpsV2MarketAVAXPERPPerpsV2Market.sol0x6345d77B30E60FFCdcEb2E303b432F0665dD5a9f -
PerpsV2MarketAXSPERPPerpsV2Market.sol0x84810bF5dCB0e4651Ba2848E08965a2869ab80e6 -
PerpsV2MarketBNBPERPPerpsV2Market.sol0x7ebCBBD835D17661b26b8AFAe75b5f94BfDC12cA -
PerpsV2MarketBTCPERPPerpsV2Market.sol0x5F8203298Fa0B01386b0F879F0Aa3DDD0470C896 -
PerpsV2MarketDOGEPERPPerpsV2Market.sol0x5E744132337608c075d4fce7F32F17bb8D9fF8ec -
PerpsV2MarketDYDXPERPPerpsV2Market.sol0x3eaf011A9B8393ceDD4F331eB5dD1739cf7DDd71 -
PerpsV2MarketDataPerpsV2MarketData.sol0xF7D3D05cCeEEcC9d77864Da3DdE67Ce9a0215A9D -
PerpsV2MarketETHPERPPerpsV2Market.sol0x35CcAC0A67D2a1EF1FDa8898AEcf1415FE6cf94c -
PerpsV2MarketEURPERPPerpsV2Market.sol0xE052f0E650C3a11057037e285b6CbC8a8a144A9D -
PerpsV2MarketFLOWPERPPerpsV2Market.sol0x7b513667c34130FE2F63812A40c71Ec104356e87 -
PerpsV2MarketFTMPERPPerpsV2Market.sol0x16D1cEE82608b12C4116626DCc1E69685561bf4c -
PerpsV2MarketGBPPERPPerpsV2Market.sol0x73230988dBfaeC3CD3A34927cE57052838A21bc8 -
PerpsV2MarketLINKPERPPerpsV2Market.sol0xc98e2439711EDf1Ab1E8BD23133145c3E1287f94 -
PerpsV2MarketMATICPERPPerpsV2Market.sol0x07A82aEe97F1011256A9Db69e2D4cec2EF2D84EC -
PerpsV2MarketNEARPERPPerpsV2Market.sol0xfD66B08E8190ba4997337a18451bdfe744D92155 -
PerpsV2MarketOPPERPPerpsV2Market.sol0x4F5f4617482b6399d63329c5070E6f37020dE286 -
PerpsV2MarketSOLPERPPerpsV2Market.sol0xe52757A0D7eB6c380b6F6Ae2A30a91b67FF16B9C -
PerpsV2MarketSettingsPerpsV2MarketSettings.sol0x09793Aad1518B8d8CC72FDd356479E3CBa7B4Ad1 -
PerpsV2MarketStateAAVEPERPPerpsV2MarketState.sol0x9821CC43096b3F35744423C9B029854064dfe9Ab -
PerpsV2MarketStateAPEPERPPerpsV2MarketState.sol0xDaA88C67eBA3a95715d678557A4F42e26cd01F1A -
PerpsV2MarketStateATOMPERPPerpsV2MarketState.sol0x91a480Bf2518C037E644fE70F207E66fdAA4d948 -
PerpsV2MarketStateAUDPERPPerpsV2MarketState.sol0x973dE36Bb8022942e2658D5d129CbDdCF105a470 -
PerpsV2MarketStateAVAXPERPPerpsV2MarketState.sol0x3d368332c5E5c454f179f36e716b7cfA09906454 -
PerpsV2MarketStateAXSPERPPerpsV2MarketState.sol0x78fC32b982F5f35325996655a8Bd92715CfEfD06 -
PerpsV2MarketStateBNBPERPPerpsV2MarketState.sol0x7b75C4857E84C8421D422E06447A7Fb03c398eDd -
PerpsV2MarketStateBTCPERPPerpsV2MarketState.sol0xFEAF9e0A57e626f72E1a5fff507D7A2d9A9F0EE9 -
PerpsV2MarketStateDOGEPERPPerpsV2MarketState.sol0xd6fe35B896FaE8b22AA6E47bE2752CF87eB1FcaC -
PerpsV2MarketStateDYDXPERPPerpsV2MarketState.sol0xA1c26b1ff002993dD1fd43c0f662C5d93cC5B66E -
PerpsV2MarketStateETHPERPPerpsV2MarketState.sol0x038dC05D68ED32F23e6856c0D44b0696B325bfC8 -
PerpsV2MarketStateEURPERPPerpsV2MarketState.sol0x0E48C8662e98f576e84d0ccDb146538269653225 -
PerpsV2MarketStateFLOWPERPPerpsV2MarketState.sol0x49700Eb35841E9CD637B3352A26B7d685aDaFD94 -
PerpsV2MarketStateFTMPERPPerpsV2MarketState.sol0xe76DF4d2554C74B746c5A1Df8EAA4eA8F657916d -
PerpsV2MarketStateGBPPERPPerpsV2MarketState.sol0x4E1F44E48D2E87E279d25EEd88ced1Ec7f51438e -
PerpsV2MarketStateLINKPERPPerpsV2MarketState.sol0x49dC714eaD0cc585eBaC8A412098914a2CE7B7B2 -
PerpsV2MarketStateMATICPERPPerpsV2MarketState.sol0xfC99d08D8ff69e31095E7372620369Fa92c82960 -
PerpsV2MarketStateNEARPERPPerpsV2MarketState.sol0xea53A19B50C51881C0734a7169Fe9C6E44A09cf9 -
PerpsV2MarketStateOPPERPPerpsV2MarketState.sol0xa26c97A0c9788e937986ee6276f3762c20C06ef5 -
PerpsV2MarketStateSOLPERPPerpsV2MarketState.sol0x5da48D842542eF497ad68FAEd3480b3B1609Afe5 -
PerpsV2MarketStateUNIPERPPerpsV2MarketState.sol0xcF4a5F99902887d6CF5A2271cC1f54b5c2321e29 -
PerpsV2MarketStateXAGPERPPerpsV2MarketState.sol0x90276BA2Ac35D2BE30588b5019CF257f80b89E71 -
PerpsV2MarketStateXAUPERPPerpsV2MarketState.sol0x58e7da4Ee20f1De44F59D3Dd2640D5D844e443cF -
PerpsV2MarketUNIPERPPerpsV2Market.sol0x4AD314a760a6173326eF5C828f51EDE93b432A12 -
PerpsV2MarketViewsAAVEPERPPerpsV2MarketViews.sol0x8C14dB69b1778c7Bbb0683B2deA21F79b9B5f059 -
PerpsV2MarketViewsAPEPERPPerpsV2MarketViews.sol0x74DCCf74644485A6920d0CFE1A4D34B2F4216181 -
PerpsV2MarketViewsATOMPERPPerpsV2MarketViews.sol0x407e5a7548869cE520354d8EcA127754625CC9c8 -
PerpsV2MarketViewsAUDPERPPerpsV2MarketViews.sol0x002089829127A5769db0D53372d5d53a4D1a87A2 -
PerpsV2MarketViewsAVAXPERPPerpsV2MarketViews.sol0x69d255473d0d15DC087cbf4962a65839aa28A2C5 -
PerpsV2MarketViewsAXSPERPPerpsV2MarketViews.sol0x637340ce915a6E2EEe7C02521aC334c30c219d0D -
PerpsV2MarketViewsBNBPERPPerpsV2MarketViews.sol0x857d91d6c63892B383CF10cd15285604FF9976b8 -
PerpsV2MarketViewsBTCPERPPerpsV2MarketViews.sol0xb0A1d2c68Bf4D0980402DC220Ca6Ddeb8DbfbC56 -
PerpsV2MarketViewsDOGEPERPPerpsV2MarketViews.sol0xEa46a4dfa7D2767FF4BaE2B76F5C6BD80057c723 -
PerpsV2MarketViewsDYDXPERPPerpsV2MarketViews.sol0x6Aa31707bD6aCf24063A806570160978E62752A0 -
PerpsV2MarketViewsETHPERPPerpsV2MarketViews.sol0x9363c080Ca0B16EAD12Fd33aac65c8D0214E9d6D -
PerpsV2MarketViewsEURPERPPerpsV2MarketViews.sol0x156E18B355b36Ff3b9Cb36bcaaF3155d95D3319A -
PerpsV2MarketViewsFLOWPERPPerpsV2MarketViews.sol0x0965EFeb0579c9bf8D15A77A4F14eC623421d902 -
PerpsV2MarketViewsFTMPERPPerpsV2MarketViews.sol0x0868d8421B6C4f13B392eA4B72f8012884c45b74 -
PerpsV2MarketViewsGBPPERPPerpsV2MarketViews.sol0x1FB664858da319b68Fc5f6d47dD6cA0D994055a2 -
PerpsV2MarketViewsLINKPERPPerpsV2MarketViews.sol0xcD077EAb8efBcb94aa04F2055D7A9216F23697A6 -
PerpsV2MarketViewsMATICPERPPerpsV2MarketViews.sol0xF23c5eC62eC4398302eFd84587eb8BA26f21B155 -
PerpsV2MarketViewsNEARPERPPerpsV2MarketViews.sol0x1EaEd534ee8D25DA73a4E21cDE96e4Fca9C46187 -
PerpsV2MarketViewsOPPERPPerpsV2MarketViews.sol0x423ddc17a01e3E44A0Bd125eC2F645b8B9Ad3259 -
PerpsV2MarketViewsSOLPERPPerpsV2MarketViews.sol0x6eE44d9e0f868833A5543bcABc3Bd1a7d843eDB8 -
PerpsV2MarketViewsUNIPERPPerpsV2MarketViews.sol0xda3a5e9502b23Eaedc8cC048998893013e09787d -
PerpsV2MarketViewsXAGPERPPerpsV2MarketViews.sol0x9AB1f9B25b312f162e815a027b4805516401093e -
PerpsV2MarketViewsXAUPERPPerpsV2MarketViews.sol0xE05637e338b11640C51766304878B08181463413 -
PerpsV2MarketXAGPERPPerpsV2Market.sol0xcf24D8db427325011D5CD473fEf1A8B056FeF8a9 -
PerpsV2MarketXAUPERPPerpsV2Market.sol0x22AF5e22F07715fa2e267D2B49062949F71474B6 -
PerpsV2OffchainDelayedOrderAAVEPERPPerpsV2MarketDelayedOrdersOffchain.sol0x2BF61b08F3e8DA40799D90C3b1e60f1c4DDb7fDA -
PerpsV2OffchainDelayedOrderAPEPERPPerpsV2MarketDelayedOrdersOffchain.sol0xE99dB61288A4e8968ee58C03cc142c6ddB500598 -
PerpsV2OffchainDelayedOrderATOMPERPPerpsV2MarketDelayedOrdersOffchain.sol0x14688DFAa8b4085DA485579f72F3DE467485411a -
PerpsV2OffchainDelayedOrderAUDPERPPerpsV2MarketDelayedOrdersOffchain.sol0x2A656E9618185782A638c86C64b5702854DDB11A -
PerpsV2OffchainDelayedOrderAVAXPERPPerpsV2MarketDelayedOrdersOffchain.sol0xF7df260a4F46Eaf5A82589B9e9D3879e6FCee431 -
PerpsV2OffchainDelayedOrderAXSPERPPerpsV2MarketDelayedOrdersOffchain.sol0x43406c99fc8a7776F2870800e38FF5c8Cc96a2fE -
PerpsV2OffchainDelayedOrderBNBPERPPerpsV2MarketDelayedOrdersOffchain.sol0x8c2c26494eAe20A8a22f94ED5Fa4B104FAD6bcca -
PerpsV2OffchainDelayedOrderBTCPERPPerpsV2MarketDelayedOrdersOffchain.sol0x194ffc3D2cE0552720F24FefDf57a6c534223174 -
PerpsV2OffchainDelayedOrderDOGEPERPPerpsV2MarketDelayedOrdersOffchain.sol0xfde9d8F4d2fB18823363fdd0E1fF305c4696A19D -
PerpsV2OffchainDelayedOrderDYDXPERPPerpsV2MarketDelayedOrdersOffchain.sol0xF612F3098a277cb80Ad03f20cf7787aD1Dc48f4a -
PerpsV2OffchainDelayedOrderETHPERPPerpsV2MarketDelayedOrdersOffchain.sol0x0454E103a712b257819efBBB797EaE80918dd2FF -
PerpsV2OffchainDelayedOrderEURPERPPerpsV2MarketDelayedOrdersOffchain.sol0xB0A058c7781F6EcA709d4b469FCc522a6fA38E60 -
PerpsV2OffchainDelayedOrderFLOWPERPPerpsV2MarketDelayedOrdersOffchain.sol0xF40482B4DA5509d6a9fb3Bed08E2356D72c31028 -
PerpsV2OffchainDelayedOrderFTMPERPPerpsV2MarketDelayedOrdersOffchain.sol0x08941749026fF010c22E8B9d93a76EEBFC61C13b -
PerpsV2OffchainDelayedOrderGBPPERPPerpsV2MarketDelayedOrdersOffchain.sol0x0BB25623946960D8FB1696a9D70466766F2C8aa7 -
PerpsV2OffchainDelayedOrderLINKPERPPerpsV2MarketDelayedOrdersOffchain.sol0xf67fDa142f31686523D2b52CE25aD66895f23116 -
PerpsV2OffchainDelayedOrderMATICPERPPerpsV2MarketDelayedOrdersOffchain.sol0x1651e832dcc1B9cF697810d822aee35A9f5fFD64 -
PerpsV2OffchainDelayedOrderNEARPERPPerpsV2MarketDelayedOrdersOffchain.sol0xBF3B13F155070a61156f261b26D0Eb06f629C2e6 -
PerpsV2OffchainDelayedOrderOPPERPPerpsV2MarketDelayedOrdersOffchain.sol0xd2471115Be883EA7A32907D78062C323a5E85593 -
PerpsV2OffchainDelayedOrderSOLPERPPerpsV2MarketDelayedOrdersOffchain.sol0x139AF9de51Ca2594911502E7A5653D4693EFb4ED -
PerpsV2OffchainDelayedOrderUNIPERPPerpsV2MarketDelayedOrdersOffchain.sol0x85875A05bE4db7a21dB6C53CeD09b06a5aD83402 -
PerpsV2OffchainDelayedOrderXAGPERPPerpsV2MarketDelayedOrdersOffchain.sol0x909c690556D8389AEa348377EB27dECFb1b27d29 -
PerpsV2OffchainDelayedOrderXAUPERPPerpsV2MarketDelayedOrdersOffchain.sol0xf8B9Dd242BDAF6242cb783F02b49D1Dd9126DE5c -
PerpsV2ProxyAAVEPERPProxyPerpsV2.sol0x5374761526175B59f1E583246E20639909E189cE -
PerpsV2ProxyAPEPERPProxyPerpsV2.sol0x5B6BeB79E959Aac2659bEE60fE0D0885468BF886 -
PerpsV2ProxyATOMPERPProxyPerpsV2.sol0xbB16C7B3244DFA1a6BF83Fcce3EE4560837763CD -
PerpsV2ProxyAUDPERPProxyPerpsV2.sol0x9De146b5663b82F44E5052dEDe2aA3Fd4CBcDC99 -
PerpsV2ProxyAVAXPERPProxyPerpsV2.sol0xc203A12F298CE73E44F7d45A4f59a43DBfFe204D -
PerpsV2ProxyAXSPERPProxyPerpsV2.sol0x3a52b21816168dfe35bE99b7C5fc209f17a0aDb1 -
PerpsV2ProxyBNBPERPProxyPerpsV2.sol0x0940B0A96C5e1ba33AEE331a9f950Bb2a6F2Fb25 -
PerpsV2ProxyBTCPERPProxyPerpsV2.sol0x59b007E9ea8F89b069c43F8f45834d30853e3699 -
PerpsV2ProxyDOGEPERPProxyPerpsV2.sol0x98cCbC721cc05E28a125943D69039B39BE6A21e9 -
PerpsV2ProxyDYDXPERPProxyPerpsV2.sol0x139F94E4f0e1101c1464a321CBA815c34d58B5D9 -
PerpsV2ProxyETHPERPProxyPerpsV2.sol0x2B3bb4c683BFc5239B029131EEf3B1d214478d93 -
PerpsV2ProxyEURPERPProxyPerpsV2.sol0x87AE62c5720DAB812BDacba66cc24839440048d1 -
PerpsV2ProxyFLOWPERPProxyPerpsV2.sol0x27665271210aCff4Fab08AD9Bb657E91866471F0 -
PerpsV2ProxyFTMPERPProxyPerpsV2.sol0xC18f85A6DD3Bcd0516a1CA08d3B1f0A4E191A2C4 -
PerpsV2ProxyGBPPERPProxyPerpsV2.sol0x1dAd8808D8aC58a0df912aDC4b215ca3B93D6C49 -
PerpsV2ProxyLINKPERPProxyPerpsV2.sol0x31A1659Ca00F617E86Dc765B6494Afe70a5A9c1A -
PerpsV2ProxyMATICPERPProxyPerpsV2.sol0x074B8F19fc91d6B2eb51143E1f186Ca0DDB88042 -
PerpsV2ProxyNEARPERPProxyPerpsV2.sol0xC8fCd6fB4D15dD7C455373297dEF375a08942eCe -
PerpsV2ProxyOPPERPProxyPerpsV2.sol0x442b69937a0daf9D46439a71567fABE6Cb69FBaf -
PerpsV2ProxySOLPERPProxyPerpsV2.sol0x0EA09D97b4084d859328ec4bF8eBCF9ecCA26F1D -
PerpsV2ProxyUNIPERPProxyPerpsV2.sol0x4308427C463CAEAaB50FFf98a9deC569C31E4E87 -
PerpsV2ProxyXAGPERPProxyPerpsV2.sol0xdcB8438c979fA030581314e5A5Df42bbFEd744a0 -
PerpsV2ProxyXAUPERPProxyPerpsV2.sol0x549dbDFfbd47bD5639f9348eBE82E63e2f9F777A -
ProxyERC20ProxyERC20.sol0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4 -
ProxyERC20sUSDProxyERC20.sol0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9 -
ProxyFeePoolProxy.sol0x4a16A42407AA491564643E1dfc1fd50af29794eF -
ProxySynthetixUse ProxyERC20ProxyERC20.sol0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4 -
ProxysAAVEProxyERC20.sol0x00B8D5a5e1Ac97Cb4341c4Bc4367443c8776e8d9 -
ProxysAVAXProxyERC20.sol0xB2b42B231C68cbb0b4bF2FFEbf57782Fd97D3dA4 -
ProxysBTCProxyERC20.sol0x298B9B95708152ff6968aafd889c6586e9169f1D -
ProxysETHProxyERC20.sol0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49 -
ProxysEURProxyERC20.sol0xFBc4198702E81aE77c06D58f81b629BDf36f0a71 -
ProxysINRProxyERC20.sol0xa3A538EA5D5838dC32dde15946ccD74bDd5652fF -
ProxysLINKProxyERC20.sol0xc5Db22719A06418028A40A9B5E9A7c02959D0d08 -
ProxysMATICProxyERC20.sol0x81DDfAc111913d3d5218DEA999216323B7CD6356 -
ProxysSOLProxyERC20.sol0x8b2F7Ae8cA8EE8428B6D76dE88326bB413db2766 -
ProxysUNIProxyERC20.sol0xf5a6115Aa582Fd1BEEa22BC93B7dC7a785F60d03 -
ProxysUSDUse ProxyERC20sUSDProxyERC20.sol0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9 -
ReadProxyAddressResolverReadProxy.sol0x1Cb059b7e74fD21665968C908806143E744D5F30 -
RewardEscrowV2ImportableRewardEscrowV2.sol0x6330D5F08f51057F36F46d6751eCDc0c65Ef7E9e -
RewardEscrowV2StorageRewardEscrowV2Storage.sol0x0c2ED9B23BAF9C5f486e175D406728d3bE46d2A6 -
RewardsDistributionRewardsDistribution.sol0x5d9187630E99dBce4BcAB8733B76757f7F44aA2e -
SafeDecimalMathSafeDecimalMath.sol0x0142F40c25CE1F1177Ed131101FA19217396cB88 -
SignedSafeDecimalMathSignedSafeDecimalMath.sol0x253914cf059f4c3E277c28060C404acFc38FB6e2 -
StakingRewardsSNXWETHUniswapV3StakingRewards.sol0xfD49C7EE330fE060ca66feE33d49206eB96F146D -
StakingRewardssUSDDAIUniswapV3StakingRewards.sol0x7E11c004d20b502729918687E6E6777b28499085 -
SynthRedeemerSynthRedeemer.sol0xA997BD647AEe62Ef03b41e6fBFAdaB43d8E57535 -
SynthUtilSynthUtil.sol0x87b1481c82913301Fc6c884Ac266a7c430F92cFA -
SynthetixMintableSynthetix.sol0x49B35BE7D96888C02F342552aB218d859599aCeb -
SynthetixBridgeToBaseSynthetixBridgeToBase.sol0x136b1EC699c62b0606854056f02dC7Bb80482d63 -
SynthetixDebtShareSynthetixDebtShare.sol0x45c55BF488D3Cb8640f12F63CbeDC027E8261E79 -
SynthetixEscrowSynthetixEscrow.sol0x06C6D063896ac733673c4474E44d9268f2402A55 -
SynthetixStateSynthetixStateWithLimitedSetup.sol0x9770239D49Db97E77fc5Adcb5413654C9e45A510 -
SynthsAAVEMultiCollateralSynth.sol0x34783A738DdC355cD7c737D4101b20622681332a -
SynthsAVAXMultiCollateralSynth.sol0x368A5126fF8e659004b6f9C9F723E15632e2B428 -
SynthsBTCMultiCollateralSynth.sol0x421DEF861D623F7123dfE0878D86E9576cbb3975 -
SynthsETHMultiCollateralSynth.sol0xe9dceA0136FEFC76c4E639Ec60CCE70482E2aCF7 -
SynthsEURMultiCollateralSynth.sol0xdEdb0b04AFF1525bb4B6167F00e61601690c1fF2 -
SynthsINRMultiCollateralSynth.sol0x34c2360ffe5D21542f76e991FFD104f281D4B3fb -
SynthsLINKMultiCollateralSynth.sol0x0F6877e0Bb54a0739C6173A814B39D5127804123 -
SynthsMATICMultiCollateralSynth.sol0xf49C194954b6B91855aC06D6C88Be316da60eD96 -
SynthsSOLMultiCollateralSynth.sol0x04B50a5992Ea2281E14d43494d656698EA9C24dD -
SynthsUNIMultiCollateralSynth.sol0xcF2E165D2359E3C4dFF1E10eC40dBB5a745223A9 -
SynthsUSDMultiCollateralSynth.sol0xDfA2d3a0d32F870D87f8A0d7AA6b9CdEB7bc5AdB -
SystemSettingsSystemSettings.sol0xE28b785ecc2Cb5FE949f5f31A5aEC3989f764838 -
SystemSettingsLibSystemSettingsLib.sol0x6fEd9c8de9886557AA7F4bF7784Cb579d38F833c -
SystemStatusSystemStatus.sol0xE8c41bE1A167314ABAF2423b72Bf8da826943FFD -
TokenStateSynthetixTokenState.sol0xB9c6CA25452E7f6D0D3340CE1e9B573421afc2eE -
TokenStatesAAVETokenState.sol0xAf918f4a72BC34E59dFaF65866feC87947F1f590 -
TokenStatesAVAXTokenState.sol0x2114d1C571CB541f3416a65f8BccFf9BB9E55Dc5 -
TokenStatesBTCTokenState.sol0xA9E630952522E3F110322711F424528Af894e307 -
TokenStatesETHTokenState.sol0xEc3665F7e696b0Ad0D04Ae5161b18782D48cd1fd -
TokenStatesEURTokenState.sol0x7afF10fc89B162c7aBf77974d190E7959cb456f5 -
TokenStatesINRTokenState.sol0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6 -
TokenStatesLINKTokenState.sol0x08a008eEA07d3cC7ca1913EEC3468C10F8F79e6A -
TokenStatesMATICTokenState.sol0x937C9E1d18bEB4F8E1BCB0Dd7a612ca6012517a3 -
TokenStatesSOLTokenState.sol0x6825Dd6B5b83FBbFF1049A44dc808A10fe9a6719 -
TokenStatesUNITokenState.sol0xf32b995Fe4dDf540C848236dB9638d137Aa9b6ff -
TokenStatesUSDTokenState.sol0x92bAc115d89cA17fd02Ed9357CEcA32842ACB4c2 -
TradingRewardsTradingRewards.sol0x2DcAD1A019fba8301b77810Ae14007cc88ED004B -
WrapperFactoryWrapperFactory.sol0x27be2EFAd45DeBd732C1EBf5C9F7b49D498D4a93 -
- -## GOERLI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameSourceAddress
AddressResolverAddressResolver.sol0x0C80ff30d1e09135ec60cfe52B2c2EaE1B2f42AB -
CircuitBreakerCircuitBreaker.sol0x183B4A053CbA70a420E581918008Ef8e65d95E05 -
CollateralErc20CollateralErc20.sol0x0376Bdaf9C97E2e454C83e728154eC621df23958 -
CollateralEthCollateralEth.sol0x7D2bEB18a21468808E16fD1fbe9637eFa98D0777 -
CollateralManagerCollateralManager.sol0x86bfC5Be44f5DE1673824c0d0d1CCEA1306cD40e -
CollateralManagerStateCollateralManagerState.sol0x66f040F0ba81eEe22EcAa8a20219E226be7cCBE3 -
CollateralShortCollateralShort.sol0x6d20C286D94a603A1cdE80D1f8e5f44Bc22550C0 -
CollateralUtilCollateralUtil.sol0x814AAB41E07D2c3fA53C0c6f3002cD654a4489EE -
DappMaintenanceDappMaintenance.sol0xBDe6A172C2a4475C74DA4eAC3950ef2FDAc626Dc -
DebtCacheDebtCache.sol0xc30BECA82f1f60DC0e4d3490428525985eef4D74 -
DelegateApprovalsDelegateApprovals.sol0xf053f15a780C40A4aBa0E50EB09e3C2dc0Ed4Fae -
DelegateApprovalsEternalStorageEternalStorage.sol0xbEFd5Fbea0665E94F025d6eC0BdDd6694ce947F4 -
DepotDepot.sol0x9B79D6dFe4650d70f35dbb80f7d1EC0Cf7f823Fd -
DirectIntegrationManagerDirectIntegrationManager.sol0x79654872398a5C667455058890B29B081Ed47939 -
EscrowCheckerEscrowChecker.sol0x2743DB52d841Ea617B0528aB0AfeF58d355f0621 -
EtherWrapperEtherWrapper.sol0x4556b9761b2aC071D1665FAe01faA255a53d1307 -
ExchangeCircuitBreakerExchangeCircuitBreaker.sol0xf1D0Ee19af243bcbC140A2259290B490E4df92A9 -
ExchangeRatesExchangeRatesWithDexPricing.sol0xC6fEa2a12a8a9e11232b18DC4d9D525F02180247 -
ExchangeSettlementLibExchangeSettlementLib.sol0xA4D8e25579Fc765fF1963dD37132061599C61689 -
ExchangeStateExchangeState.sol0x4023B3Bf1749725584B0a467406C5bb24DA3AC4e -
ExchangerExchangerWithFeeRecAlternatives.sol0x6Ce575c870ce744e245Ef8400b6d89412C35c328 -
FeePoolFeePool.sol0x9D9aAf3ED4E4A708834F148f9b9d0d12Ba0a8034 -
FeePoolEternalStorageFeePoolEternalStorage.sol0x5cB8210159f486dFE8Dc779357ee5A15B8f233bC -
FeePoolStateFeePoolState.sol0x7F4a3D2d0e45ECD301Be8a181c3911677c353C85 -
FlexibleStorageFlexibleStorage.sol0x485f9215839a122A3EF7c412B25931C6FeC02A45 -
FuturesMarketManagerEmptyFuturesMarketManager.sol0x6928767b677aBfd34aEF4ac67E9c275125B95907 -
IssuerIssuer.sol0x35a3F27736955394ee27Ce5348854670CE8D31DF -
LiquidatorLiquidator.sol0xc656c18721594f9E98B0C805AB9c21Bda5B44f4C -
LiquidatorRewardsLiquidatorRewards.sol0x601A1Cf1a34d9cF0020dCCD361c155Fe54CE24fB -
MathMath.sol0xee5cFeEA2caC5F3A13DB1193c211C7bfA5c03dF0 -
NativeEtherWrapperNativeEtherWrapper.sol0x3b820F825088DB6cD6E118C0c9B39755859932a9 -
OneNetAggregatorDebtRatioOneNetAggregatorDebtRatio.sol0x409b427d6c8227eeCb4079EF74A6F9224297E19E -
OneNetAggregatorIssuedSynthsOneNetAggregatorIssuedSynths.sol0xBE14c5803Fa245C5e8c70d5050a076Baaa52956c -
OneNetAggregatorsDEFIOneNetAggregatorsDEFI.sol0xA43Ba9F2A27F5Fe86c7A8Fe4A75d42F4d2Cf6358 -
OwnerRelayOnEthereumOwnerRelayOnEthereum.sol0xFdB31235cDFe68bfFD1d687AC3A2b31E80eacf0d -
ProxyFeePoolProxy.sol0x4FC6f7C8Ff4f0D535315F1E6e84897c89367b47E -
ProxySynthetixUse ProxyERC20ProxyERC20.sol0x51f44ca59b867E005e48FA573Cb8df83FC7f7597 -
ProxysBTCProxyERC20.sol0xf04fD9A2C265E7828832E9EFb01474b686CacD14 -
ProxysETHProxyERC20.sol0x37216d2366B68Bd8bC64Eb01B83EFA765C21b483 -
ProxysUSDUse ProxyERC20sUSDProxyERC20.sol0xB1f664162c0269A469a699709D37cc5739379dD1 -
ReadProxyAddressResolverReadProxy.sol0x58719E8Ef4d201541e44505a2ACB3424481d6681 -
RewardEscrowRewardEscrow.sol0x249BCCbFD33FA6653Db02aE2349444EF25E9B41d -
RewardEscrowV2RewardEscrowV2.sol0x4300a068B3826aCEFaE7062b411aF467a34Bf3A6 -
RewardEscrowV2StorageRewardEscrowV2Storage.sol0xC10cd6Cf0F7D12529433110DaF0fC3Dc14669961 -
RewardsDistributionRewardsDistribution.sol0x882eaF70e172b8543145811c5fE169d03740ba9a -
SafeDecimalMathSafeDecimalMath.sol0xb6a200136891Be1C881431320E4092953788C7e0 -
SignedSafeDecimalMathSignedSafeDecimalMath.sol0xbFe5dA86981e2dB461bd85D31795aD233748EE32 -
SupplyScheduleSupplySchedule.sol0x3e5baba6b1467e8c93294F7a4cdA8fDA688E9Bf2 -
SynthRedeemerSynthRedeemer.sol0x32A0BAA5Acec418a85Fd032f0292893B8E4f743B -
SynthUtilSynthUtil.sol0x492395BA6866EF703DA49667fF92Cb8551e7a2D1 -
SynthetixSynthetix.sol0xFC0E6442fC16e1caf52baa31f8043D8BE78AEb0D -
SynthetixBridgeEscrowSynthetixBridgeEscrow.sol0xD134Db47DDF5A6feB245452af17cCAf92ee53D3c -
SynthetixBridgeToOptimismSynthetixBridgeToOptimism.sol0x1427Bc44755d9Aa317535B1feE38922760Aa4e65 -
SynthetixDebtShareSynthetixDebtShare.sol0x671C874C43B571878D6a90C5AA27288096eEac21 -
SynthetixEscrowSynthetixEscrow.sol0xD1F9481B1df0401FEB40667b10f2D0AAEc81cd34 -
SynthetixStateSynthetixState.sol0xcbcFB6E2d8517DB83BedB30f79D5197607207A2c -
SynthsBTCMultiCollateralSynth.sol0xD511a29AFF50503cCaF476EF9ebdd18Cbab1422c -
SynthsETHMultiCollateralSynth.sol0xB7774b79f83191eFF5F159889d1e7A5A242e2244 -
SynthsUSDMultiCollateralSynth.sol0x8f01E7815583C5Be70e4608Fde3DdE7DcC29592f -
SystemSettingsSystemSettings.sol0x063E110E614474Aa1FFB36936aBED4b1d173e5fc -
SystemSettingsLibSystemSettingsLib.sol0x52C339d07e82d49073f6B85AB033599e0eB644f9 -
SystemStatusSystemStatus.sol0x31541f35F6Bd061f4A894fB7eEE565f81EE50df3 -
TokenStateSynthetixLegacyTokenState.sol0xe842C91A5D2BCE122d89497f171d81067255Ad0d -
TokenStatesBTCTokenState.sol0xA8Fd421326586c440b76aC07B6b48fcD11Dc475e -
TokenStatesETHTokenState.sol0x6BB584b67Fc54B4C0449625711A341a767f87B94 -
TokenStatesUSDTokenState.sol0x5F0CCaBe97bF838c777F08702E17EC300FF78cD0 -
TradingRewardsTradingRewards.sol0x6eab29a0904d0fd964AdE1F6c3ab1584E36602aE -
VirtualSynthMastercopyVirtualSynthMastercopy.sol0x1f6b96d2e7a5D70777D2A9c52215044FB3f40D37 -
WrapperFactoryWrapperFactory.sol0xa69768003543eBe5DD91E787278D99FfF9aD6095 -
- -## GOERLI Optimism (L2) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameSourceAddress
AddressResolverAddressResolver.sol0x1d551351613a28d676BaC1Af157799e201279198 -
CircuitBreakerCircuitBreaker.sol0x5cB8210159f486dFE8Dc779357ee5A15B8f233bC -
CollateralEthCollateralEth.sol0x35725C94f3B1aB6BbD533c0B6Df525537d422c5F -
CollateralManagerCollateralManager.sol0x0440f82444C825a0842f50e1c25cb68676d736e3 -
CollateralManagerStateCollateralManagerState.sol0xA6B255CB2Bd5Ad5f3EaE2D246ec1c2c3F7F79574 -
CollateralShortCollateralShort.sol0x1a471C12f7efd7adB0065E3c7e457a0c36c13490 -
CollateralUtilCollateralUtil.sol0x4BbDe1e5f91e6E8928CdCBF800aC990015387EbA -
DappMaintenanceDappMaintenance.sol0x4259a2004A1E110A86564ff1441c37F1461F344F -
DebtCacheDebtCache.sol0x216EaF79575563A5e13227ad075850cDeb004083 -
DelegateApprovalsDelegateApprovals.sol0x2715DC87A9c9a9A1a02641403205F4F093E1A659 -
DelegateApprovalsEternalStorageEternalStorage.sol0x9800812f1d80bbe763DA97C967e746ca7a2d1Ccd -
DirectIntegrationManagerDirectIntegrationManager.sol0xbDC73F42943bAce3A4eEE280650e80531Cc6a38C -
EscrowCheckerEscrowChecker.sol0x69927Cda9Df863464afAC7DA506928BF3a3ec11f -
EtherWrapperEmptyEtherWrapper.sol0x858A2FF0EAe5fcb0be10df79B741Cff89B77FeCB -
ExchangeCircuitBreakerExchangeCircuitBreaker.sol0xFdb50671276DbC9D24D68b272B54dE4a87aaCc6c -
ExchangeRatesExchangeRates.sol0x061B75475035c20ef2e35E1002Beb90C3c1f24cC -
ExchangeSettlementLibExchangeSettlementLib.sol0xc09f90045F772117634FDF23fFCCd3bEE1abB4AD -
ExchangeStateExchangeState.sol0xeD5D12c5A772F32dE608CF84F671C123e132FA80 -
ExchangerExchanger.sol0x164724726608622b6e5Fa1aF8932b45A7Bd1a94D -
FeePoolFeePool.sol0x216B2767C7E28f26878e668a6a06d3C364dE0725 -
FeePoolEternalStorageFeePoolEternalStorage.sol0xd01075abdD086006c85840de62544506d7Ab3C79 -
FeePoolStateFeePoolState.sol0x0FA904962C4f5427590dD4517697C32363639303 -
FlexibleStorageFlexibleStorage.sol0x88CAf687f3E1cae053BF0CdbB52EFb1c5dcAbD87 -
FuturesMarketAAVEFuturesMarket.sol0x1E246e2bc7dc1e2baDa90dC824c71deAaBa65eE2 -
FuturesMarketAPEFuturesMarket.sol0xA7C788d7f5B177AfB3c7B3Af815C678F6181a163 -
FuturesMarketAVAXFuturesMarket.sol0xc6af1F51b262616BC7DBc3F000Df154709AEe1Bd -
FuturesMarketBNBFuturesMarket.sol0x3F66f483b8A66EcBbF3385E5Df6C581c2378d8B7 -
FuturesMarketBTCFuturesMarket.sol0x2f421752B7C07268DEA60A1B39D67927a5abA2F6 -
FuturesMarketDOGEFuturesMarket.sol0xc006bd42B2ca95Cd640D314dA3DF4c59436C7739 -
FuturesMarketDYDXFuturesMarket.sol0x122c1a5E0140bA0E3c7a44418bd83E9e5b049295 -
FuturesMarketDataFuturesMarketData.sol0x3FAe35Cfea950Fada314589213BABC54A084d5Bf -
FuturesMarketETHFuturesMarket.sol0x0D10c032ad006C98C33A95e59ab3BA2b0849bD59 -
FuturesMarketEURFuturesMarket.sol0xAd4d525C8B6eAE32c3BFE8de5c7f87791690CdB3 -
FuturesMarketLINKFuturesMarket.sol0x071171c2289b2Aef8F83eC50650f8eb91DbE44d2 -
FuturesMarketMATICFuturesMarket.sol0xE89f6f10Dd2e200440198a6b773E16e3c9B1478C -
FuturesMarketManagerFuturesMarketManager.sol0xc429dd84c9a9a7c786764c7dcaF31e30bd35BcdF -
FuturesMarketSOLFuturesMarket.sol0xc6fD6AD47e393a44283Eb2f7a058807C64853aA1 -
FuturesMarketSettingsFuturesMarketSettings.sol0x0dde87714C3bdACB93bB1d38605aFff209a85998 -
FuturesMarketUNIFuturesMarket.sol0x44Af736495544a726ED15CB0EBe2d87a6bCC1832 -
FuturesMarketXAGFuturesMarket.sol0x89F36593eeD8807C43e81Ce7d633e15365274eeF -
FuturesMarketXAUFuturesMarket.sol0x2f1e8B79E9032b9f43A40d61fa4F446c3eFCf165 -
FuturesMarketXMRFuturesMarket.sol0x0Ee2c2E01072c5Fa866BB3372Fe81698FB3165bA -
IssuerIssuer.sol0x59bd355dd9A853b345434474341178DbC27dC7a6 -
LiquidatorLiquidator.sol0x5e042334B5Bb0434aB2512d16FfcD4Db61F94f18 -
LiquidatorRewardsLiquidatorRewards.sol0x1c6C0a89064206e397E75b11Bcd370E8A8A007B4 -
MathMath.sol0x6fa3D41F37F544c6982693eFEe8B0d4BD88986ed -
OneNetAggregatorDebtRatioOneNetAggregatorDebtRatio.sol0x88e566CF9E29e08AfFB23abe3E9065bD88ACB152 -
OneNetAggregatorIssuedSynthsOneNetAggregatorIssuedSynths.sol0x904c9424484ba6D5C47d979d8e9Fc5261747D681 -
OwnerRelayOnOptimismOwnerRelayOnOptimism.sol0x55C20ea46766E3E50D4eD1973A88550B2949825c -
PerpsV2DelayedOrderAAVEPERPPerpsV2MarketDelayedOrders.sol0x3FF85EdC96341924a43950ecfaEfA52a4342aB56 -
PerpsV2DelayedOrderAPEPERPPerpsV2MarketDelayedOrders.sol0x844f98835b57970f6a86Fdb884AFe114103c14C5 -
PerpsV2DelayedOrderATOMPERPPerpsV2MarketDelayedOrders.sol0x87f762c3BA319d1c66D4006a062461c8326B6289 -
PerpsV2DelayedOrderAUDPERPPerpsV2MarketDelayedOrders.sol0x628D012b3714702a024317584194b6b6831Cd5eB -
PerpsV2DelayedOrderAVAXPERPPerpsV2MarketDelayedOrders.sol0xC70acc95C8b816433d3650E2b8E0c0B40e2Cfd0E -
PerpsV2DelayedOrderAXSPERPPerpsV2MarketDelayedOrders.sol0xeFaCdB4108336256DE373BD7110141B49Fbd71E4 -
PerpsV2DelayedOrderBNBPERPPerpsV2MarketDelayedOrders.sol0x466ee9cA48d7b99cE7dd1c856Da68a5817f97B4F -
PerpsV2DelayedOrderBTCPERPPerpsV2MarketDelayedOrders.sol0xB2da27081d3E12837FF36A858b619B26C70A1E72 -
PerpsV2DelayedOrderDOGEPERPPerpsV2MarketDelayedOrders.sol0xFC8c8836719D3Bc6174Ef943FDA1b7becD2E0bB9 -
PerpsV2DelayedOrderDYDXPERPPerpsV2MarketDelayedOrders.sol0x8bDe1A85CC3B889fFF13e3083312975266051959 -
PerpsV2DelayedOrderETHPERPPerpsV2MarketDelayedOrders.sol0xFd16cDa7e5808D24FB16b419D37FB7EF636c51b7 -
PerpsV2DelayedOrderEURPERPPerpsV2MarketDelayedOrders.sol0x39d1Fad09590BcBaeF683E349176DcFd4E428Ed6 -
PerpsV2DelayedOrderFLOWPERPPerpsV2MarketDelayedOrders.sol0x82704d07Df11B7c1411D682f07c8358e4BAFd37e -
PerpsV2DelayedOrderFTMPERPPerpsV2MarketDelayedOrders.sol0x41076E867566c22435a6A9f8Ba7997570ca6d314 -
PerpsV2DelayedOrderGBPPERPPerpsV2MarketDelayedOrders.sol0x71848580eB88408e36B590231508d5b120C57360 -
PerpsV2DelayedOrderLINKPERPPerpsV2MarketDelayedOrders.sol0x0f5c65Acb355CE08e6D2e3FAD1C6ee8114caC15F -
PerpsV2DelayedOrderMATICPERPPerpsV2MarketDelayedOrders.sol0xed988020700dcA6EE128Fa995bdC5Bb13945aE03 -
PerpsV2DelayedOrderNEARPERPPerpsV2MarketDelayedOrders.sol0x3c7D28dD8586807BBED246B2318781ba388B1C92 -
PerpsV2DelayedOrderOPPERPPerpsV2MarketDelayedOrders.sol0x0CA91B2f2A047F292Dd7C2EEdF10874c7F6CC4AC -
PerpsV2DelayedOrderSOLPERPPerpsV2MarketDelayedOrders.sol0x99d2548Bd76b09607d27E42155a2bc21b8Ee77EF -
PerpsV2DelayedOrderUNIPERPPerpsV2MarketDelayedOrders.sol0x774506226e943d7ca12A271836a2Af5F97b543b4 -
PerpsV2DelayedOrderXAGPERPPerpsV2MarketDelayedOrders.sol0x655599aa4AB094Fc43e9708d81d3D0cb8677ea4e -
PerpsV2DelayedOrderXAUPERPPerpsV2MarketDelayedOrders.sol0x815d6956b4105a25D7E89242A3CE3c4e24b90A89 -
PerpsV2ExchangeRatePerpsV2ExchangeRate.sol0x59b9D61F28C6D296a917f8171e42C6fcE5C1Fbea -
PerpsV2MarketAAVEPERPPerpsV2Market.sol0x9CfDd5dC91300Ac62672053a26659D5C52B81880 -
PerpsV2MarketAPEPERPPerpsV2Market.sol0x6bde143e6661aE37B46603B06a1357aD274d7B8c -
PerpsV2MarketATOMPERPPerpsV2Market.sol0x285Bd7f8E1Da034717B66BEd5d6374A1ba08DA87 -
PerpsV2MarketAUDPERPPerpsV2Market.sol0x00BC4f76a0e2f8BdbcE85B676083db706726C5AD -
PerpsV2MarketAVAXPERPPerpsV2Market.sol0x95729171827872afEc2dF8d8136E175e68627e0D -
PerpsV2MarketAXSPERPPerpsV2Market.sol0x43ad429dfAcDA5Eda18524F9fc1c935d229F2417 -
PerpsV2MarketBNBPERPPerpsV2Market.sol0xbe8A82d7B731Ee2243F9F0B77b25f8462C57929C -
PerpsV2MarketBTCPERPPerpsV2Market.sol0xf5D3Ce88E7b7C5385c8f56Ccc2DA53e3091F41Ef -
PerpsV2MarketDOGEPERPPerpsV2Market.sol0x6798726F240a6722D037DfD001988530139A4cC7 -
PerpsV2MarketDYDXPERPPerpsV2Market.sol0xefa65829E6a3FD2eF06bD312aDDe66B41f236c35 -
PerpsV2MarketDataPerpsV2MarketData.sol0xc880Cd434eD843398a2E20C8C617E6a9C2690A23 -
PerpsV2MarketETHPERPPerpsV2Market.sol0xf935F225a49ad37be81Bb9430BEc780446474E13 -
PerpsV2MarketEURPERPPerpsV2Market.sol0x4AaA4c8eb1c4777137A54963Be1FEf51C3Eb4149 -
PerpsV2MarketFLOWPERPPerpsV2Market.sol0xB707e842eBd99EdD04F635862F8753bFb42F2511 -
PerpsV2MarketFTMPERPPerpsV2Market.sol0x8262BaDdD5644b02f317eA1AD4E5cBC52B9bfd0b -
PerpsV2MarketGBPPERPPerpsV2Market.sol0xdB01fde18c1E4Dc061be39D45E1B4622395cA176 -
PerpsV2MarketLINKPERPPerpsV2Market.sol0x58Cd2c1715F6b7614bEe6982384d96FFA5717c2E -
PerpsV2MarketMATICPERPPerpsV2Market.sol0x49a4d182f3d4883e386ec1A9b56be4be0E7ed001 -
PerpsV2MarketNEARPERPPerpsV2Market.sol0x42dABd4AdCbACe2D10a82F9a23a83d767598B2dD -
PerpsV2MarketOPPERPPerpsV2Market.sol0x81091f40f3dAD80a863278C476F5bE58cE99457F -
PerpsV2MarketSOLPERPPerpsV2Market.sol0x02566b9C95b9Ab5E42526Cf461AA5A3F223F95c1 -
PerpsV2MarketSettingsPerpsV2MarketSettings.sol0xcE6F78bbc9080891b6732D27e5Ca7e866594F927 -
PerpsV2MarketStateAAVEPERPPerpsV2MarketState.sol0x794AFd9B432DE16450fF118f6402cf591E7226b6 -
PerpsV2MarketStateAPEPERPPerpsV2MarketState.sol0xabE0b70033Da709a1a2ECF78CcbB6649A997199b -
PerpsV2MarketStateATOMPERPPerpsV2MarketState.sol0xbd352Bd6D6f81395EB94ba3778Aa3c7c523B1D97 -
PerpsV2MarketStateAUDPERPPerpsV2MarketState.sol0xf84312375eb2BBBdE43D6069CAcc4a0a156d6d9b -
PerpsV2MarketStateAVAXPERPPerpsV2MarketState.sol0x7d470b2c680Df1299e181E6a2Ec00A97fA5b3a2c -
PerpsV2MarketStateAXSPERPPerpsV2MarketState.sol0xf1F58f5aAA20D1556e6C55C340Bc2fb6af9f1f91 -
PerpsV2MarketStateBNBPERPPerpsV2MarketState.sol0xDb1bee7A74a3E9B4da83799F85Aa3A8f9A40786c -
PerpsV2MarketStateBTCPERPPerpsV2MarketState.sol0xb82C1c9491A529F7AB9B4A6d42537eDDe28d83F3 -
PerpsV2MarketStateDOGEPERPPerpsV2MarketState.sol0xD51d38F95d590E8aC327740439Cc914394076E70 -
PerpsV2MarketStateDYDXPERPPerpsV2MarketState.sol0x55B85653DF3e5fba20c314d37ED2aA135E47A174 -
PerpsV2MarketStateETHPERPPerpsV2MarketState.sol0x3ad86e158377264F5d4C7625798496D279e7E33a -
PerpsV2MarketStateEURPERPPerpsV2MarketState.sol0xEB6a3a7d38Cd37Cf8ef2158c247249e6809ede2c -
PerpsV2MarketStateFLOWPERPPerpsV2MarketState.sol0x1eD0E066cFB00FdfB62f98EBE1E450053f7D304c -
PerpsV2MarketStateFTMPERPPerpsV2MarketState.sol0x201fbc5DF6A12e7ED013cf2A4272643578e9B660 -
PerpsV2MarketStateGBPPERPPerpsV2MarketState.sol0xD4B5e6fD9D5E2C192CF0DA5B56702A5F12459Bc8 -
PerpsV2MarketStateLINKPERPPerpsV2MarketState.sol0xd079A9622ECFa67eAA4072b86DE84A9f0574dBbe -
PerpsV2MarketStateMATICPERPPerpsV2MarketState.sol0xe184b90580D61c1D48d4eE7D4583e37871d4117c -
PerpsV2MarketStateNEARPERPPerpsV2MarketState.sol0xEFEd528e5161fE26632fa1195A4a6d692cCb66D7 -
PerpsV2MarketStateOPPERPPerpsV2MarketState.sol0x6bb821777814C5ac99A663B58e816479a4dca6e7 -
PerpsV2MarketStateSOLPERPPerpsV2MarketState.sol0x2fe08C69D8ab826b4E08c47F0EEa9090255f2840 -
PerpsV2MarketStateUNIPERPPerpsV2MarketState.sol0x9dD3D55Be18D138E304A6191D78baf62ec12044e -
PerpsV2MarketStateXAGPERPPerpsV2MarketState.sol0xa394e42D93a8B9EB4F758566b79dA150CA5B7Fa0 -
PerpsV2MarketStateXAUPERPPerpsV2MarketState.sol0xc9951483d3f8370BCb9617805Ce3B7873B5aDA08 -
PerpsV2MarketUNIPERPPerpsV2Market.sol0x16718f9f527Da1D956F5AF4aEd3789790Ed28600 -
PerpsV2MarketViewsAAVEPERPPerpsV2MarketViews.sol0x9085208a2f39A0cbA5128b736E041ff5C3dFefBf -
PerpsV2MarketViewsAPEPERPPerpsV2MarketViews.sol0x63762f7997d708388163a2161fD8Ff6c64DF3E3f -
PerpsV2MarketViewsATOMPERPPerpsV2MarketViews.sol0xeCc3728edea44FcCDB17Ccc32ec12ce5c2bbA1A3 -
PerpsV2MarketViewsAUDPERPPerpsV2MarketViews.sol0xBbBC4d3eA49449a3d6915624E7C3d1e17fF7DbDb -
PerpsV2MarketViewsAVAXPERPPerpsV2MarketViews.sol0xF6dA94187FF744B3AcfFb64d5Aa307F253403e34 -
PerpsV2MarketViewsAXSPERPPerpsV2MarketViews.sol0x9FEd02B2c48b4CBD92027cD1CCED52900E256CBA -
PerpsV2MarketViewsBNBPERPPerpsV2MarketViews.sol0x87F4Dcc7aa2218E804a2EC0a42530F3807c6990C -
PerpsV2MarketViewsBTCPERPPerpsV2MarketViews.sol0x9904F58ed6BB6feB7AD412A81F584dE2dee7CD98 -
PerpsV2MarketViewsDOGEPERPPerpsV2MarketViews.sol0x6c739b2Ca73BA9981680A367e9db74cFe37f0C41 -
PerpsV2MarketViewsDYDXPERPPerpsV2MarketViews.sol0x5cdC76C0440dE6Ca9f1dc96fF6B4C33b4e5f65F7 -
PerpsV2MarketViewsETHPERPPerpsV2MarketViews.sol0xfa1151791F9dbCd3eD7aA76DBc07582c3320E743 -
PerpsV2MarketViewsEURPERPPerpsV2MarketViews.sol0xB2bBCc08B930717387De4f8a713801eD6b9361b8 -
PerpsV2MarketViewsFLOWPERPPerpsV2MarketViews.sol0xa24363a0c463682f590AFcC4Bff36A028471D476 -
PerpsV2MarketViewsFTMPERPPerpsV2MarketViews.sol0xFbE4FFA5e1844A4A2121086623125C99B2A322b9 -
PerpsV2MarketViewsGBPPERPPerpsV2MarketViews.sol0x60b57a5D8C8a28ae5A36024B74B8dfF19128a27f -
PerpsV2MarketViewsLINKPERPPerpsV2MarketViews.sol0x21c52b1BACD336Ff55D01fa3e62C4C9D75712B66 -
PerpsV2MarketViewsMATICPERPPerpsV2MarketViews.sol0x5Ac411d21cDC64c790fe8f4084674F8BbCC19dD0 -
PerpsV2MarketViewsNEARPERPPerpsV2MarketViews.sol0xbd2998Ae30A6B5026967ae9aE929A865c2288739 -
PerpsV2MarketViewsOPPERPPerpsV2MarketViews.sol0xf8305181be287f3Fbda1d4EBD167b88eD39D2c17 -
PerpsV2MarketViewsSOLPERPPerpsV2MarketViews.sol0x2aD9950f6e4118462BfEB70A602E5EB4F4a3F879 -
PerpsV2MarketViewsUNIPERPPerpsV2MarketViews.sol0xd0B56389D2f10bfbEA4196904044c993908Ad3b5 -
PerpsV2MarketViewsXAGPERPPerpsV2MarketViews.sol0x205Cf8876d0D22C5FcD684F6f39F6b43D3D5A217 -
PerpsV2MarketViewsXAUPERPPerpsV2MarketViews.sol0x063803D766f70283ccd26D6a317375C9f6C8C97a -
PerpsV2MarketXAGPERPPerpsV2Market.sol0x563Ef44d12EFabDf3Cbf76316254067B1512e8dF -
PerpsV2MarketXAUPERPPerpsV2Market.sol0x647EE25B84159ef513f2914b848d99B62c15bc54 -
PerpsV2OffchainDelayedOrderAAVEPERPPerpsV2MarketDelayedOrdersOffchain.sol0xf3c60f60Ee2F981f107B6E19c784653dAe912bdd -
PerpsV2OffchainDelayedOrderAPEPERPPerpsV2MarketDelayedOrdersOffchain.sol0xf6f173C31B3a24Fbe23cC7f30D5F98fe929172DE -
PerpsV2OffchainDelayedOrderATOMPERPPerpsV2MarketDelayedOrdersOffchain.sol0x79754B07f0a0816dD32f128f10537D27032045E9 -
PerpsV2OffchainDelayedOrderAUDPERPPerpsV2MarketDelayedOrdersOffchain.sol0xdfbE490fD9eB03f842CF065Fd220ac3fCb3e58C8 -
PerpsV2OffchainDelayedOrderAVAXPERPPerpsV2MarketDelayedOrdersOffchain.sol0x14b1568725aeD20b5CD76e3E784F43310738a38b -
PerpsV2OffchainDelayedOrderAXSPERPPerpsV2MarketDelayedOrdersOffchain.sol0xb71a41cB1B8e0E60B850a43249e326E80fea6de5 -
PerpsV2OffchainDelayedOrderBNBPERPPerpsV2MarketDelayedOrdersOffchain.sol0xC8e7252e3c4b2A33db51AdC68331423268b1d939 -
PerpsV2OffchainDelayedOrderBTCPERPPerpsV2MarketDelayedOrdersOffchain.sol0x9335fAb54147265A4Cce5333455adceA2b241194 -
PerpsV2OffchainDelayedOrderDOGEPERPPerpsV2MarketDelayedOrdersOffchain.sol0x694A632cCb1231FFaF1c64cbAB96fc0e8d4577e2 -
PerpsV2OffchainDelayedOrderDYDXPERPPerpsV2MarketDelayedOrdersOffchain.sol0x0800ee8341119E2d47aE33e30f6843cdaB677f54 -
PerpsV2OffchainDelayedOrderETHPERPPerpsV2MarketDelayedOrdersOffchain.sol0x4Ce0D35AcE88e88599b3ca5DC613029D6240274d -
PerpsV2OffchainDelayedOrderEURPERPPerpsV2MarketDelayedOrdersOffchain.sol0x19F9D73e405D93cb77D327249D2f747CF9636c9B -
PerpsV2OffchainDelayedOrderFLOWPERPPerpsV2MarketDelayedOrdersOffchain.sol0xd1210dDA1b9b9c667e6FCCb0C09bC36De6B48B8b -
PerpsV2OffchainDelayedOrderFTMPERPPerpsV2MarketDelayedOrdersOffchain.sol0xc52a7D57B3EBFee52b7B8c99fE3Ab66C0Bdf1Fd5 -
PerpsV2OffchainDelayedOrderGBPPERPPerpsV2MarketDelayedOrdersOffchain.sol0xe762dc242408530D37f1a57dbF627e7DE0eE8415 -
PerpsV2OffchainDelayedOrderLINKPERPPerpsV2MarketDelayedOrdersOffchain.sol0xEa599A48D290123148ba9128e7941D6C86EE5C6d -
PerpsV2OffchainDelayedOrderMATICPERPPerpsV2MarketDelayedOrdersOffchain.sol0x92DC5545D8Febc241D7942e1bB9656009b063393 -
PerpsV2OffchainDelayedOrderNEARPERPPerpsV2MarketDelayedOrdersOffchain.sol0x59D5c61456462e8D5aE57F6B0422B3c6D8629FFC -
PerpsV2OffchainDelayedOrderOPPERPPerpsV2MarketDelayedOrdersOffchain.sol0xe64beb261C5CBAA761c997Fdb17a6906b10D8792 -
PerpsV2OffchainDelayedOrderSOLPERPPerpsV2MarketDelayedOrdersOffchain.sol0x4967d1987930b2CD183dAB4B6C40B8745DD2eba1 -
PerpsV2OffchainDelayedOrderUNIPERPPerpsV2MarketDelayedOrdersOffchain.sol0x0e9A31335A17a7Da18989753290aA1199ECfe89f -
PerpsV2OffchainDelayedOrderXAGPERPPerpsV2MarketDelayedOrdersOffchain.sol0xBE14F44dc2DE3A905019f06e5279c60e45102659 -
PerpsV2OffchainDelayedOrderXAUPERPPerpsV2MarketDelayedOrdersOffchain.sol0x55b86E086BA3f80D674F31fEE174DE9c10B758b8 -
PerpsV2ProxyAAVEPERPProxyPerpsV2.sol0x3410215D8A0BD57dAc5911785F2A832402D5c828 -
PerpsV2ProxyAPEPERPProxyPerpsV2.sol0xeff373efBD352531F680575796AE14764bE0391B -
PerpsV2ProxyATOMPERPProxyPerpsV2.sol0xcCdc541a12CA359216913c1893C080d951874346 -
PerpsV2ProxyAUDPERPProxyPerpsV2.sol0x95b78e2E07090587754f3088Ef8a8232f1Ab7E47 -
PerpsV2ProxyAVAXPERPProxyPerpsV2.sol0xe140356AB1F0558e020610C9C6BccdAA4FDDE2f4 -
PerpsV2ProxyAXSPERPProxyPerpsV2.sol0x9CE0556a563f18AeA0E89F407B0b1710F095956f -
PerpsV2ProxyBNBPERPProxyPerpsV2.sol0x307072038D47bAE97CaE56C0eA87F2a5f0CD8389 -
PerpsV2ProxyBTCPERPProxyPerpsV2.sol0xd5844EA3701a4507C27ebc5EBA733E1Aa2915B31 -
PerpsV2ProxyDOGEPERPProxyPerpsV2.sol0x3A4D5262b10C670a06550FCf7346cd408343B3FB -
PerpsV2ProxyDYDXPERPProxyPerpsV2.sol0xb97e868a340BA00C10557c234C9F17cC41B0f667 -
PerpsV2ProxyETHPERPProxyPerpsV2.sol0x111BAbcdd66b1B60A20152a2D3D06d36F8B5703c -
PerpsV2ProxyEURPERPProxyPerpsV2.sol0x9C54994933205E33628A8870c05AFF0878b1A56b -
PerpsV2ProxyFLOWPERPProxyPerpsV2.sol0xcFA34059b55E1a1c820e4D62A6CA4f8e00522eBB -
PerpsV2ProxyFTMPERPProxyPerpsV2.sol0x70362529cCfF83f586EB48e978eF3b60384cE050 -
PerpsV2ProxyGBPPERPProxyPerpsV2.sol0x534181B37bdaFdD1E28104Bc5117184F40e1056F -
PerpsV2ProxyLINKPERPProxyPerpsV2.sol0x6141dcfF3494921e1C4Cdb115daD20C6656f6EFA -
PerpsV2ProxyMATICPERPProxyPerpsV2.sol0x7bBEa20899d358ed6d877f32af1BCb525a5fCF31 -
PerpsV2ProxyNEARPERPProxyPerpsV2.sol0xf503e527854b510C1952425d4b61c6bba40028CE -
PerpsV2ProxyOPPERPProxyPerpsV2.sol0x4926222EDDa82965Aa08080f281928f8cba5922A -
PerpsV2ProxySOLPERPProxyPerpsV2.sol0x62068eBDCEbcB0eB984aBfEa4c7f9A244050e0Ca -
PerpsV2ProxyUNIPERPProxyPerpsV2.sol0xaF11B4281259D7Ae31F945a2911Ba75347C2799d -
PerpsV2ProxyXAGPERPProxyPerpsV2.sol0x78D1232449387571D652E2a893DC0feaC6E92436 -
PerpsV2ProxyXAUPERPProxyPerpsV2.sol0xcC312F5Bac1C36CC70AbcbE76De913633Af88FFB -
ProxyFeePoolProxy.sol0x4Fa8252a6C60C891BE35Db51F1F4F5973b88dF98 -
ProxySynthetixUse ProxyERC20ProxyERC20.sol0x2E5ED97596a8368EB9E44B1f3F25B2E813845303 -
ProxysBTCProxyERC20.sol0x23c7a77D22Fc1274eCecB703f74699500db106E6 -
ProxysETHProxyERC20.sol0x6c3856488e664C6b0380AAEfBFD1c28cd6727eC8 -
ProxysUSDUse ProxyERC20sUSDProxyERC20.sol0xeBaEAAD9236615542844adC5c149F86C36aD1136 -
ReadProxyAddressResolverReadProxy.sol0x9Fc84992dF5496797784374B810E04238728743d -
RewardEscrowV2ImportableRewardEscrowV2.sol0xF6C92Ad11fa67b7b685aDb435FbE932c049B670c -
RewardEscrowV2StorageRewardEscrowV2Storage.sol0x0C90f734a1c716540549D22509578331061CBff2 -
RewardsDistributionRewardsDistribution.sol0xb12704F8BddA7CF3eBa5F9A463404D4ba5d0e282 -
SafeDecimalMathSafeDecimalMath.sol0x6Bb3B18694A6849654379F040DcB112E07da9DC7 -
SignedSafeDecimalMathSignedSafeDecimalMath.sol0x6d2eA159C128eC361a9a23b1456Ef0aAD0bec46b -
SynthRedeemerSynthRedeemer.sol0x2A8338199D802620B4516a557195a498595d7Eb6 -
SynthUtilSynthUtil.sol0xC647DecC9c4f9162dBF77E4367199F5ED0950355 -
SynthetixMintableSynthetix.sol0x8cF677281A8Ad57e0db4A8e6B57aE17211f97689 -
SynthetixBridgeToBaseSynthetixBridgeToBase.sol0xD2b3F0Ea40dB68088415412b0043F37B3088836D -
SynthetixDebtShareSynthetixDebtShare.sol0x3c710172e7f95aCAaDeD243982a90F8F235fF9f1 -
SynthetixEscrowSynthetixEscrow.sol0xFaFd00D0CaA6D5cd5161c5C1F18AaB24942aCAFA -
SynthsBTCMultiCollateralSynth.sol0xFdB84151Bfc76857398BC3efd8d1b32A32c571f2 -
SynthsETHMultiCollateralSynth.sol0x7D442107e2AD048C02F06332C918b1F81bd6850d -
SynthsUSDMultiCollateralSynth.sol0xfDa54191F3C0999dbf4c193dEF1B83EDD3e3Ba39 -
SystemSettingsSystemSettings.sol0x418B1025f74E8BB889D35e9F37205d587743Ec9b -
SystemSettingsLibSystemSettingsLib.sol0x6B2554A8349319597D1a8a36DeeD07Fb7c70400d -
SystemStatusSystemStatus.sol0x9D89fF8C6f3CC22F4BbB859D0F85FB3a4e1FA916 -
TokenStateSynthetixLegacyTokenState.sol0xB9525040A5B6a2d9e013240397079Fd1320559C4 -
TokenStatesBTCTokenState.sol0x716044850a48DeD57B0581298018D2d8502B1091 -
TokenStatesETHTokenState.sol0x1557769Cf42EE9e7c8D98CCFE0b454c2DEC125B6 -
TokenStatesUSDTokenState.sol0x43CA5848a2957C0718D240c02A4381A90111591e -
TradingRewardsTradingRewards.sol0x08fb827Ee5A00232aDe347964225Ba4344665eD5 -
WrapperFactoryWrapperFactory.sol0x507cbddCF4e01396981190F0Ced8Ea37ca25b452 -
\ No newline at end of file diff --git a/blockapi/test/v2/api/synthetix/test_synthetix.py b/blockapi/test/v2/api/synthetix/test_synthetix.py deleted file mode 100644 index 8c73b5bf..00000000 --- a/blockapi/test/v2/api/synthetix/test_synthetix.py +++ /dev/null @@ -1,166 +0,0 @@ -from decimal import Decimal -from unittest.mock import patch - -import pytest - -from blockapi.test.v2.api.conftest import read_file -from blockapi.v2.api.synthetix import ( - SynthetixMainnetApi, - SynthetixOptimismApi, - snx_contract_address, -) -from blockapi.v2.models import AssetType, BalanceItem, Blockchain, Coin - -test_address = '0xE2e4F2A725E42D0F0EF6291F46c430F963482001' -contract_name = 'Synthetix' - - -def mock_redirect(requests_mock, source, target, text): - requests_mock.get(source, status_code=302, headers={'location': target}) - requests_mock.get(target, text=text) - - -def test_snx_contract_address_mainnet(requests_mock): - mock_redirect( - requests_mock, - source='https://contracts.synthetix.io/Synthetix', - target='https://etherscan.io/address/0x08F30Ecf2C15A783083ab9D5b9211c22388d0564', - text='', - ) - - assert ( - snx_contract_address(contract_name) - == '0x08F30Ecf2C15A783083ab9D5b9211c22388d0564' - ) - - -def test_snx_contract_address_optimism(requests_mock): - text = read_file('synthetix/data/contracts.md') - requests_mock.get( - 'https://raw.githubusercontent.com/Synthetixio/synthetix-docs/master/content/addresses.md', - text=text, - ) - - assert ( - snx_contract_address(contract_name, 'optimism') - == '0x49B35BE7D96888C02F342552aB218d859599aCeb' - ) - - -def test_invalid_contract_raises(requests_mock): - requests_mock.get('https://contracts.synthetix.io/abc', status_code=404) - - with pytest.raises(ValueError, match='Contract abc not found'): - snx_contract_address('abc') - - -def test_invalid_contract_optimism_raises(requests_mock): - text = read_file('synthetix/data/contracts.md') - requests_mock.get( - 'https://raw.githubusercontent.com/Synthetixio/synthetix-docs/master/content/addresses.md', - text=text, - ) - - with pytest.raises(ValueError, match='Contract abc not found'): - snx_contract_address('abc', 'optimism') - - -def test_create_with_custom_api(): - api = SynthetixMainnetApi(api_url='http://localhost:1234/') - assert api.w3.provider.endpoint_uri == 'http://localhost:1234/' - - -def test_create_with_custom_optimism_api(): - api = SynthetixOptimismApi(api_url='http://localhost:1234/') - assert api.w3.provider.endpoint_uri == 'http://localhost:1234/' - - -@pytest.mark.skip("For some reason VCR cassette doesn't work properly") -@pytest.mark.vcr() -def test_synthetix_optimism_api(): - api = SynthetixOptimismApi(api_url='https://mainnet.optimism.io/') - balances = api.get_balance(test_address) - - assert balances == [ - BalanceItem( - balance=Decimal('376576.311381339269627458'), - balance_raw=Decimal('376576311381339269627458'), - raw={}, - coin=Coin( - symbol='sUSD', - name='sUSD', - decimals=18, - blockchain=Blockchain.OPTIMISM, - address='0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9', - standards=None, - protocol_id=None, - info=None, - ), - asset_type=AssetType.DEBT, - ), - BalanceItem( - balance=Decimal('528051.112125559541484602'), - balance_raw=Decimal('528051112125559541484602'), - raw={}, - coin=Coin( - symbol='SNX', - name='SNX', - decimals=18, - blockchain=Blockchain.OPTIMISM, - address='0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', - standards=None, - protocol_id=None, - info=None, - ), - asset_type=AssetType.STAKED, - ), - BalanceItem( - balance=Decimal('188153.171065910534455462'), - balance_raw=Decimal('188153171065910534455462'), - raw={}, - coin=Coin( - symbol='SNX', - name='SNX', - decimals=18, - blockchain=Blockchain.OPTIMISM, - address='0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', - standards=None, - protocol_id=None, - info=None, - ), - asset_type=AssetType.VESTING, - ), - ] - - -@pytest.fixture() -def mocked_get_synth_contract(): - with patch( - 'blockapi.v2.api.synthetix.synthetix.SynthetixApi._get_synth_contract' - ) as patched: - patched.return_value = '0x0000000000000000000000000000000000000000' - yield patched - - -def test_yield_balances_from_staking(mocked_get_synth_contract): - api = SynthetixMainnetApi(api_url='http://localhost:1234/') - staking = { - 'transferable': Decimal(10), - 'debt': Decimal(10), - 'staked': Decimal(10), - 'vesting': Decimal(8), - 'collateral': Decimal(100), - 'rewards': { - 'exchange': Decimal(2), - 'staking': Decimal(3), - }, - 'liquidation_reward': Decimal(3), - } - - balances = list(api.yield_balances_from_staking(staking)) - - assert balances[2].asset_type == AssetType.STAKED - assert balances[2].balance_raw == Decimal(89) - - assert balances[3].asset_type == AssetType.PRICED_VESTING - assert balances[3].balance_raw == Decimal(8) diff --git a/blockapi/test/v2/test_data.py b/blockapi/test/v2/test_data.py index 1901ce8e..cf58182b 100644 --- a/blockapi/test/v2/test_data.py +++ b/blockapi/test/v2/test_data.py @@ -10,7 +10,6 @@ EthplorerApi, KusamaSubscanApi, OptimismEtherscanApi, - PerpetualApi, PolkadotSubscanApi, SolanaApi, SubscanApi, @@ -32,7 +31,6 @@ from blockapi.v2.api.covalenth.palm import PalmCovalentApi from blockapi.v2.api.covalenth.polygon import PolygonCovalentApi from blockapi.v2.api.covalenth.rsk import RskCovalentApi -from blockapi.v2.api.synthetix import SynthetixApi # TODO create method for auto loading all classes from blockapi.v2.base import BalanceMixin, IBalance @@ -93,8 +91,6 @@ PolkadotSubscanApi, KusamaSubscanApi, CosmosApi, - SynthetixApi, - PerpetualApi, BlockchairBitcoinApi, ] @@ -187,8 +183,6 @@ def yield_api_balance_classes(): CosmosApiBase, CovalentApiBase, DebankApi, - PerpetualApi, - SynthetixApi, SubscanApi, TrezorApi, ), diff --git a/blockapi/test/v2/test_enumerate_classes.py b/blockapi/test/v2/test_enumerate_classes.py index 5a878389..60334e7c 100644 --- a/blockapi/test/v2/test_enumerate_classes.py +++ b/blockapi/test/v2/test_enumerate_classes.py @@ -5,7 +5,7 @@ yield_api_balance_classes, yield_covalent_api_classes, ) -from blockapi.v2.api import DebankApi, EthplorerApi, PerpetualApi +from blockapi.v2.api import DebankApi, EthplorerApi from blockapi.v2.api.covalenth.arbitrum import ArbitrumCovalentApi from blockapi.v2.api.covalenth.astar import AstarCovalentApi from blockapi.v2.api.covalenth.avalanche import AvalancheCovalentApi @@ -20,7 +20,6 @@ from blockapi.v2.api.covalenth.palm import PalmCovalentApi from blockapi.v2.api.covalenth.polygon import PolygonCovalentApi from blockapi.v2.api.covalenth.rsk import RskCovalentApi -from blockapi.v2.api.synthetix import SynthetixApi def test_enumerate_subclasses(): @@ -29,8 +28,6 @@ def test_enumerate_subclasses(): assert classes assert EthplorerApi.__name__ in classes assert DebankApi.__name__ not in classes - assert PerpetualApi.__name__ not in classes - assert SynthetixApi.__name__ not in classes for cls in classes: assert 'Base' not in cls diff --git a/blockapi/v2/api/__init__.py b/blockapi/v2/api/__init__.py index 7147f275..be05736c 100644 --- a/blockapi/v2/api/__init__.py +++ b/blockapi/v2/api/__init__.py @@ -12,7 +12,6 @@ from blockapi.v2.api.haskoin import HaskoinApi from blockapi.v2.api.litecoinspace import LitecoinSpaceApi from blockapi.v2.api.optimistic_etherscan import OptimismEtherscanApi -from blockapi.v2.api.perpetual import PerpetualApi, perp_contract_address from blockapi.v2.api.solana import SolanaApi, SolscanApi from blockapi.v2.api.subscan import KusamaSubscanApi, PolkadotSubscanApi, SubscanApi from blockapi.v2.api.terra import TerraApi diff --git a/blockapi/v2/api/perpetual/__init__.py b/blockapi/v2/api/perpetual/__init__.py deleted file mode 100644 index f8322f7e..00000000 --- a/blockapi/v2/api/perpetual/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from blockapi.v2.api.perpetual.perpetual import PerpetualApi, perp_contract_address diff --git a/blockapi/v2/api/perpetual/perp_abi.py b/blockapi/v2/api/perpetual/perp_abi.py deleted file mode 100644 index f8260787..00000000 --- a/blockapi/v2/api/perpetual/perp_abi.py +++ /dev/null @@ -1,264 +0,0 @@ -rewards_abi = [ - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "_claimant", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "_balance", - "type": "uint256", - }, - ], - "name": "Claimed", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "previousOwner", - "type": "address", - }, - { - "indexed": True, - "internalType": "address", - "name": "newOwner", - "type": "address", - }, - ], - "name": "OwnershipTransferred", - "type": "event", - }, - { - "inputs": [], - "name": "candidate", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_liquidityProvider", - "type": "address", - }, - {"internalType": "uint256", "name": "_begin", "type": "uint256"}, - {"internalType": "uint256", "name": "_end", "type": "uint256"}, - ], - "name": "claimStatus", - "outputs": [{"internalType": "bool[]", "name": "", "type": "bool[]"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [ - {"internalType": "address", "name": "_account", "type": "address"}, - {"internalType": "uint256", "name": "_week", "type": "uint256"}, - { - "internalType": "uint256", - "name": "_claimedBalance", - "type": "uint256", - }, - { - "internalType": "bytes32[]", - "name": "_merkleProof", - "type": "bytes32[]", - }, - ], - "name": "claimWeek", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function", - }, - { - "inputs": [ - {"internalType": "address", "name": "_account", "type": "address"}, - { - "components": [ - { - "internalType": "uint256", - "name": "week", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256", - }, - { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]", - }, - ], - "internalType": "struct MerkleRedeemUpgradeSafe.Claim[]", - "name": "_claims", - "type": "tuple[]", - }, - ], - "name": "claimWeeks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function", - }, - { - "inputs": [ - {"internalType": "uint256", "name": "", "type": "uint256"}, - {"internalType": "address", "name": "", "type": "address"}, - ], - "name": "claimed", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [], - "name": "getLengthOfMerkleRoots", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "_token", - "type": "address", - }, - { - "internalType": "uint256", - "name": "_vestingPeriod", - "type": "uint256", - }, - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function", - }, - { - "inputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "name": "merkleRootIndexes", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "name": "merkleRootTimestampMap", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [ - {"internalType": "uint256", "name": "_begin", "type": "uint256"}, - {"internalType": "uint256", "name": "_end", "type": "uint256"}, - ], - "name": "merkleRoots", - "outputs": [{"internalType": "bytes32[]", "name": "", "type": "bytes32[]"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [], - "name": "owner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function", - }, - { - "inputs": [ - {"internalType": "uint256", "name": "_week", "type": "uint256"}, - { - "internalType": "bytes32", - "name": "_merkleRoot", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "_totalAllocation", - "type": "uint256", - }, - ], - "name": "seedAllocations", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function", - }, - { - "inputs": [{"internalType": "address", "name": "newOwner", "type": "address"}], - "name": "setOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function", - }, - { - "inputs": [], - "name": "token", - "outputs": [{"internalType": "contract IERC20", "name": "", "type": "address"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [], - "name": "updateOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function", - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_liquidityProvider", - "type": "address", - }, - {"internalType": "uint256", "name": "_week", "type": "uint256"}, - { - "internalType": "uint256", - "name": "_claimedBalance", - "type": "uint256", - }, - { - "internalType": "bytes32[]", - "name": "_merkleProof", - "type": "bytes32[]", - }, - ], - "name": "verifyClaim", - "outputs": [{"internalType": "bool", "name": "valid", "type": "bool"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [], - "name": "vestingPeriod", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "stateMutability": "view", - "type": "function", - }, - { - "inputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "name": "weekMerkleRoots", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "stateMutability": "view", - "type": "function", - }, -] diff --git a/blockapi/v2/api/perpetual/perpetual.py b/blockapi/v2/api/perpetual/perpetual.py deleted file mode 100644 index 468347af..00000000 --- a/blockapi/v2/api/perpetual/perpetual.py +++ /dev/null @@ -1,253 +0,0 @@ -from datetime import datetime -from decimal import Decimal -from functools import lru_cache -from logging import getLogger -from typing import Callable, Dict, Iterable, List, Optional, Tuple - -import requests -from eth_typing import ChecksumAddress -from requests import HTTPError -from typing_extensions import TypedDict -from web3 import Web3 - -from blockapi.utils.num import safe_opt_decimal -from blockapi.v2.api.perpetual.perp_abi import rewards_abi -from blockapi.v2.api.web3_utils import easy_call, get_eth_client -from blockapi.v2.base import ( - ApiOptions, - BalanceMixin, - CustomizableBlockchainApi, - IBalance, - ISleepProvider, -) -from blockapi.v2.coins import COIN_PERP -from blockapi.v2.models import ( - AssetType, - BalanceItem, - Blockchain, - FetchResult, - ParseResult, -) - -logger = getLogger(__name__) - - -def perp_contract_address(contract_name: str) -> ChecksumAddress: - """ - Get PERP contract address by name. - """ - l1 = perp_contracts()['layers']['layer1'] - l1_c = l1['contracts'] - - contract_map = { - 'PERP': l1['externalContracts']['perp'], - 'sPERP': l1_c['StakedPerpToken']['address'], - 'staking_rewards': l1_c['PerpStakingRewardNoVesting']['address'], - 'vesting_rewards': l1_c['PerpStakingRewardVesting']['address'], - } - - if contract_name not in contract_map: - raise ValueError('Invalid contract name.') - - contract_address = contract_map[contract_name] - return Web3.to_checksum_address(contract_address) - - -@lru_cache() -def perp_contracts() -> dict: - response = requests.get('https://metadata.perp.exchange/production.json') - return response.json() - - -class PerpSnapshot(TypedDict): - epoch: int - weekStart: str - weekEnd: str - redeemableUntil: int - totalRewardPerp: str - hash: str - - -class PerpReward(TypedDict): - totalRewardPerp: str - areaFactor: str - - -class PerpOffChainStorage: - """ - Perp Off-chain storage for staking rewards, ... . - """ - - base_url = 'https://s3.amazonaws.com/staking.perp.fi/production' - snapshot_urls = { - 'immediate': '/snapshot-immediate.json', - 'vesting': '/snapshot-vesting.json', - } - epoch_rewards_link = '/{epoch}/{hash}.json' - - @classmethod - def get_epoch_snapshots(cls, snapshot_type: str) -> List[PerpSnapshot]: - """ - Load epoch (weekly) immediate or vesting snapshots. - """ - url = f"{cls.base_url}{cls.snapshot_urls[snapshot_type]}" - response = requests.get(url) - snapshots = response.json() - - for epoch, snapshot in snapshots.items(): - snapshot.update({'epoch': int(epoch)}) - - return sorted(snapshots.values(), key=lambda i: i['epoch']) - - @classmethod - @lru_cache(maxsize=128) - def get_rewards(cls, epoch: int, hash_: str) -> Dict[str, PerpReward]: - """ - Load perp rewards for whole epoch. - """ - url = ( - f'{cls.base_url}' - f'{cls.epoch_rewards_link.format(epoch=epoch, hash=hash_)}' - ) - - result = requests.get(url) - - try: - return result.json() - except requests.JSONDecodeError as e: - logger.error(f"Request parsing to json failed: %s", result.text) - raise e - - -class PerpProtocol: - """ - Documentation how to get rewards and vesting. - https://docs.google.com/document/d/1E2k8Ad2POodLWWyeklif0tx0-CVy_41_ONAS8n9RN68/edit - """ - - reward_contract = '0xc2a9e84D77f4B534F049b593C282c5c91F24808A' - vesting_contract = '0x49a4B8431Fc24BE4b22Fb07D1683E2c52bC56088' - - def __init__(self, address: str, api_url: str): - self.address = address - self.w3 = get_eth_client(api_url=api_url) - - def fetch(self): - staking_claimable = self._fetch_staking_claimable_rewards() - vesting_claimable, vesting_locked = self._fetch_staking_vesting_rewards() - return dict( - staking_claimable=str(staking_claimable) if staking_claimable else None, - vesting_claimable=str(vesting_claimable) if vesting_claimable else None, - vesting_locked=str(vesting_locked) if vesting_locked else None, - ) - - def _fetch_staking_claimable_rewards(self) -> Decimal: - """ - Fetch claimable staking rewards. - """ - snapshots = self._fetch_non_claimed_snapshots('immediate', 'staking_rewards') - return self._get_total_reward(snapshots) - - def _fetch_staking_vesting_rewards(self) -> Tuple[Decimal, Decimal]: - """ - Fetch staking vesting rewards, both claimable and locked. - """ - snapshots = self._fetch_non_claimed_snapshots('vesting', 'vesting_rewards') - - current_ts = datetime.utcnow().timestamp() - - claimable = self._get_total_reward( - snapshots, lambda s: current_ts > s['redeemableUntil'] - ) - locked = self._get_total_reward( - snapshots, lambda s: current_ts < s['redeemableUntil'] - ) - - return claimable, locked - - def _fetch_non_claimed_snapshots( - self, snapshot_type: str, contract_name: str - ) -> List[PerpSnapshot]: - """ - Fetch snapshots and claims for address. - """ - snapshots = PerpOffChainStorage.get_epoch_snapshots(snapshot_type) - rewards_contract = self.w3.eth.contract( - perp_contract_address(contract_name), abi=rewards_abi - ) - - start, end = snapshots[0]['epoch'], snapshots[-1]['epoch'] - claims = easy_call( - rewards_contract, - 'claimStatus', - *[self.address, start, end], - ) - - return [snapshot for snapshot, claimed in zip(snapshots, claims) if not claimed] - - def _get_total_reward( - self, - snapshots: List[PerpSnapshot], - snapshot_filter: Optional[Callable] = None, - ) -> Decimal: - """ - Get perp total staking reward. - """ - rewards = ( - self._get_reward(s) - for s in snapshots - if snapshot_filter is None or snapshot_filter(s) - ) - return sum(rewards) or Decimal(0) - - def _get_reward(self, snapshot: PerpSnapshot) -> Decimal: - """ - Get single epoch's reward. - """ - rewards = PerpOffChainStorage.get_rewards(snapshot['epoch'], snapshot['hash']) - return safe_opt_decimal( - rewards[self.address]['totalRewardPerp'] - if self.address in rewards - else None - ) - - -class PerpetualApi(CustomizableBlockchainApi, BalanceMixin): - coin = COIN_PERP - api_options = ApiOptions( - blockchain=Blockchain.ETHEREUM, base_url=None, rate_limit=0.2 - ) - - def __init__(self, base_url: str, sleep_provider: ISleepProvider = None) -> None: - super().__init__(base_url=base_url, sleep_provider=sleep_provider) - - def fetch_balances(self, address: str) -> FetchResult: - try: - data = PerpProtocol(address, api_url=self.base_url).fetch() - return FetchResult(status_code=200, data=data) - except HTTPError as e: - return FetchResult(status_code=e.response.status_code, errors=[str(e)]) - - def parse_balances(self, fetch_result: FetchResult) -> ParseResult: - return ParseResult(data=list(self.yield_balances(fetch_result))) - - def yield_balances(self, fetch_result: FetchResult) -> Iterable[BalanceItem]: - v_locked = Decimal(fetch_result.data.get('vesting_locked', 0)) - s_claimable = Decimal(fetch_result.data.get('staking_claimable', 0)) - v_claimable = Decimal(fetch_result.data.get('vesting_claimable', 0)) - claimable = s_claimable + v_claimable - - if claimable > Decimal(0): - yield self._create_balance(AssetType.CLAIMABLE, claimable) - - if v_locked: - yield self._create_balance(AssetType.VESTING, v_locked) - - @staticmethod - def _create_balance(asset_type: AssetType, amount: Decimal) -> BalanceItem: - return BalanceItem.from_api( - balance_raw=amount, - coin=COIN_PERP, - asset_type=asset_type, - raw={}, - ) diff --git a/blockapi/v2/api/synthetix/__init__.py b/blockapi/v2/api/synthetix/__init__.py deleted file mode 100644 index 2f24ba08..00000000 --- a/blockapi/v2/api/synthetix/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from blockapi.v2.api.synthetix.synthetix import ( - SynthetixApi, - SynthetixMainnetApi, - SynthetixOptimismApi, - snx_contract_address, - snx_optimism_contract_address, -) diff --git a/blockapi/v2/api/synthetix/synthetix.py b/blockapi/v2/api/synthetix/synthetix.py deleted file mode 100644 index 2a89480b..00000000 --- a/blockapi/v2/api/synthetix/synthetix.py +++ /dev/null @@ -1,431 +0,0 @@ -import logging -from abc import ABC -from decimal import Decimal -from functools import lru_cache -from typing import Dict, Iterable, List - -import requests -from bs4 import BeautifulSoup -from eth_typing import ChecksumAddress -from marko import Markdown -from marko.block import Heading, HTMLBlock -from typing_extensions import TypedDict -from web3 import Web3 - -from blockapi.utils.num import raw_to_decimals, safe_decimal, to_decimal -from blockapi.v2.api.synthetix.synthetix_abi import ( - erc20_abi, - exchangerates_abi, - feepool_abi, - liquidator_rewards_abi, - rewards_escrow_v2_abi, - synthetix_abi, - system_settings_abi, -) -from blockapi.v2.api.web3_utils import ( - easy_call, - ensure_checksum_address, - get_eth_client, -) -from blockapi.v2.base import CustomizableBlockchainApi, IBalance, ISleepProvider -from blockapi.v2.coins import COIN_SNX -from blockapi.v2.models import ApiOptions, AssetType, BalanceItem, Blockchain, Coin - -logger = logging.getLogger(__name__) - - -class CollateralizationStats(TypedDict): - collateralization_ratio: Decimal - collateralization_ratio_perc: Decimal - - -class WeeklyReward(TypedDict): - exchange: Decimal - staking: Decimal - - -class Staking(CollateralizationStats): - transferable: Decimal - debt: Decimal - staked: Decimal - vesting: Decimal - collateral: Decimal - rewards: WeeklyReward - liquidation_reward: Decimal - - -class Synth(TypedDict): - symbol: str - contract_address: str - - -# noinspection PyBroadException -@lru_cache(maxsize=128) -def snx_contract_address( - contract_name: str, network: str = "mainnet" -) -> ChecksumAddress: - """ - Dynamically converts Synthetix contract name into its - Ethereum address. - """ - if network == 'optimism': - return snx_optimism_contract_address(contract_name) - - base = "https://contracts.synthetix.io" - url = ( - f"{base}/{contract_name}" - if network == "mainnet" - else f"{base}/{network}/{contract_name}" - ) - - result = requests.get(url) - - # contract address is obtained from redirected etherscan url, - # as last 42 characters - try: - contract_address = result.url[-42:] - return Web3.to_checksum_address(contract_address) - except Exception: - raise ValueError(f'Contract {contract_name} not found.') - - -# noinspection PyBroadException -def snx_optimism_contract_address( - contract_name: str, -) -> ChecksumAddress: - """ - Dynamically converts Synthetix contract name into its - Ethereum address on Optimism L2. - """ - try: - response = requests.get( - 'https://raw.githubusercontent.com/Synthetixio/synthetix-docs/master/content/addresses.md' - ) - md = Markdown().parse(response.text) - - # find table with Optimism contracts - html_tab_raw = None - return_table = False - for child in md.children: - if return_table and type(child) is HTMLBlock: - html_tab_raw = child.children - break - elif ( - type(child) is Heading - and child.children[0].children == 'MAINNET Optimism (L2)' - ): - return_table = True - - table = BeautifulSoup(html_tab_raw, 'lxml') - row = table.find('td', text=contract_name).parent - return Web3.to_checksum_address(row.contents[5].text.strip()) - - except Exception: - raise ValueError(f'Contract {contract_name} not found.') - - -class SynthetixApi(CustomizableBlockchainApi, IBalance, ABC): - decimals: Decimal = Decimal('18') - coin = COIN_SNX - - def __init__( - self, network: str, api_url: str, sleep_provider: ISleepProvider = None - ): - super().__init__(base_url=api_url, sleep_provider=sleep_provider) - self.network = network - self.w3 = get_eth_client(api_url) - - def get_balance(self, address: str) -> List[BalanceItem]: - address = ensure_checksum_address(address) - return list(self.yield_balances(address)) - - def yield_balances(self, address) -> Iterable[BalanceItem]: - """ - Fetch all balances for snx and synth tokens. - """ - logger.info("Called Synthetix.yield_balances for address: %s", address) - - staking = self.fetch_staking(address) - return self.yield_balances_from_staking(staking=staking) - - def yield_balances_from_staking(self, staking: Staking) -> Iterable[BalanceItem]: - if staking['transferable']: - yield self._create_balance( - 'SNX', - AssetType.AVAILABLE, - staking['transferable'], - is_wallet=True, - ) - - if staking['debt']: - yield self._create_balance('sUSD', AssetType.DEBT, staking['debt']) - - if staking['collateral']: - stake_balance = ( - staking['collateral'] - - staking['vesting'] - - staking['liquidation_reward'] - ) - - yield self._create_balance('SNX', AssetType.STAKED, stake_balance) - - if staking['vesting']: - yield self._create_balance( - 'SNX', AssetType.PRICED_VESTING, staking['vesting'] - ) - - if staking['rewards']['exchange']: - yield self._create_balance( - 'sUSD', AssetType.REWARDS, staking['rewards']['exchange'] - ) - - if staking['rewards']['staking']: - yield self._create_balance( - 'SNX', AssetType.REWARDS, staking['rewards']['staking'] - ) - - if staking['liquidation_reward']: - yield self._create_balance( - 'SNX', AssetType.LIQUIDATION_REWARDS, staking['liquidation_reward'] - ) - - def _create_balance( - self, - symbol: str, - asset_type: AssetType, - balance_raw: Decimal, - is_wallet: bool = False, - ) -> BalanceItem: - """ - Create balance item. - """ - coin = self._get_coin(symbol) - - return BalanceItem( - balance_raw=balance_raw, - balance=balance_raw * pow(10, -self.decimals), - coin=coin, - asset_type=asset_type, - is_wallet=is_wallet, - raw={}, - ) - - def _get_coin(self, symbol: str) -> Coin: - return Coin( - symbol=symbol, - blockchain=self.api_options.blockchain, - name=symbol, - decimals=int(self.decimals), - address=self._get_synth_contract(symbol), - ) - - # noinspection PyTypeChecker - def fetch_staking(self, address: str) -> Staking: - """ - Fetch Synthetix staking info. - """ - ratio = self.get_collateralization_ratio(address) - - return { - **ratio, - 'transferable': self.get_snx_transferable_amount(address), - 'debt': self.get_total_debt_owed(address), - 'staked': self.compute_snx_staked_amount(address), - 'vesting': self.get_total_escrowed_amount(address), - 'collateral': self.get_collateral(address), - 'rewards': self.get_fees_and_rewards(address), - 'liquidation_reward': self.get_liquidation_reward(address), - } - - def get_snx_transferable_amount(self, address: str) -> Decimal: - """ - Returns total amount of unlocked SNX tokens. - """ - snx_contract = self.w3.eth.contract( - snx_contract_address('Synthetix', self.network), abi=synthetix_abi - ) - amount = easy_call(snx_contract, 'transferableSynthetix', address) - return to_decimal(amount) - - def get_total_debt_owed(self, address: str) -> Decimal: - """ - Returns total debt owed in sUSD. - """ - snx_contract = self.w3.eth.contract( - snx_contract_address('Synthetix', self.network), abi=synthetix_abi - ) - debt = easy_call(snx_contract, 'debtBalanceOf', address, b'sUSD') - return to_decimal(debt) - - @lru_cache(maxsize=128) - def get_collateralization_ratio(self, address) -> CollateralizationStats: - """ - Returns collateralization ratio in %. - """ - snx_contract = self.w3.eth.contract( - snx_contract_address('Synthetix', self.network), abi=synthetix_abi - ) - c_ratio = easy_call(snx_contract, 'collateralisationRatio', address) - if c_ratio: - ratio = raw_to_decimals(c_ratio, int(self.decimals)) - return { - 'collateralization_ratio': ratio, - 'collateralization_ratio_perc': 1 / ratio * 100, - } - else: - return { - 'collateralization_ratio': Decimal("0"), - 'collateralization_ratio_perc': Decimal("0"), - } - - @lru_cache(maxsize=512) - def get_collateral(self, address: str) -> Decimal: - """ - Return collateral. - """ - snx_contract = self.w3.eth.contract( - snx_contract_address('Synthetix', self.network), abi=synthetix_abi - ) - collateral = easy_call(snx_contract, 'collateral', address) - return to_decimal(collateral) - - def compute_snx_staked_amount(self, address: str) -> Decimal: - """ - Return total staked snx amount. - """ - system_contract = self.w3.eth.contract( - snx_contract_address('SystemSettings', self.network), - abi=system_settings_abi, - ) - i_ratio = easy_call(system_contract, 'issuanceRatio') - i_ratio = raw_to_decimals(i_ratio, int(self.decimals)) - - collateral = self.get_collateral(address) - collateralization_ratio = self.get_collateralization_ratio(address)[ - "collateralization_ratio" - ] - - return collateral * min(Decimal("1"), collateralization_ratio / i_ratio) - - def get_fees_and_rewards(self, address: str) -> WeeklyReward: - """ - Returns the available Synth exchange rewards (fees, in sUSD) - and SNX staking rewards (in SNX) as tuple. - """ - fee_pool_contract = self.w3.eth.contract( - snx_contract_address('FeePool', self.network), abi=feepool_abi - ) - fees = easy_call(fee_pool_contract, 'feesAvailable', address) - - return {"exchange": to_decimal(fees[0]), "staking": to_decimal(fees[1])} - - def get_liquidation_reward(self, address: str) -> Decimal: - """ - Returns liquidation reward. - """ - liq_rewards_contract = self.w3.eth.contract( - snx_contract_address('LiquidatorRewards', self.network), - abi=liquidator_rewards_abi, - ) - fee = easy_call(liq_rewards_contract, 'earned', address) - - return to_decimal(fee) - - @lru_cache() - def _get_synth_contract(self, symbol: str) -> str: - """ - Get synth contract address. - """ - snx_contract = self.w3.eth.contract( - snx_contract_address('Synthetix', self.network), abi=synthetix_abi - ) - - if symbol == 'SNX': - synth_addr = easy_call(snx_contract, 'proxy') - else: - synth_contract_addr = Web3.to_checksum_address( - easy_call(snx_contract, 'synths', symbol.encode()) - ) - synth_contract = self.w3.eth.contract(synth_contract_addr, abi=erc20_abi) - synth_addr = easy_call(synth_contract, 'proxy') - - return synth_addr - - def get_total_escrowed_amount(self, address: str) -> Decimal: - """ - Return number of SNX tokens escrowed. - """ - rewards_escrow_contract = self.w3.eth.contract( - snx_contract_address('RewardEscrowV2', self.network), - abi=rewards_escrow_v2_abi, - ) - total_escrowed = easy_call( - rewards_escrow_contract, - "totalEscrowedAccountBalance", - address, - ) - - return to_decimal(total_escrowed) - - def get_token_xchg_rates(self, synths: List[Synth]) -> Dict: - """ - Reads Synthetix tokens exchange rates needed for further - calculations. - """ - xchg_contract = self.w3.eth.contract( - snx_contract_address('ExchangeRates', self.network), - abi=exchangerates_abi, - ) - xchg_rates = {} - - for synth in synths: - symbol = ( - synth['symbol'][0].lower() + synth['symbol'][1:4] - if len(synth['symbol']) >= 4 - else synth['symbol'] - ) - - xchg_rates[synth['contract_address']] = raw_to_decimals( - easy_call( - xchg_contract, - 'rateForCurrency', - symbol.encode('utf-8'), - ), - decimals=int(self.decimals), - ) - - xchg_rates['XDR'] = safe_decimal( - easy_call(xchg_contract, 'effectiveValue', b'XDR', 1, b'sUSD') - ) - - return xchg_rates - - -class SynthetixMainnetApi(SynthetixApi): - api_options = ApiOptions( - blockchain=Blockchain.ETHEREUM, base_url=None, rate_limit=1 - ) - - def __init__( - self, - api_url: str, - sleep_provider: ISleepProvider = None, - ): - super().__init__( - network="mainnet", api_url=api_url, sleep_provider=sleep_provider - ) - - -class SynthetixOptimismApi(SynthetixApi): - api_options = ApiOptions( - blockchain=Blockchain.OPTIMISM, base_url=None, rate_limit=1 - ) - - def __init__( - self, - api_url: str, - sleep_provider: ISleepProvider = None, - ): - super().__init__( - network='optimism', api_url=api_url, sleep_provider=sleep_provider - ) diff --git a/blockapi/v2/api/synthetix/synthetix_abi.py b/blockapi/v2/api/synthetix/synthetix_abi.py deleted file mode 100644 index cc9a925e..00000000 --- a/blockapi/v2/api/synthetix/synthetix_abi.py +++ /dev/null @@ -1,5780 +0,0 @@ -synthetix_abi = [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_proxy", - "type": "address", - }, - { - "internalType": "contract TokenState", - "name": "_tokenState", - "type": "address", - }, - {"internalType": "address", "name": "_owner", "type": "address"}, - { - "internalType": "uint256", - "name": "_totalSupply", - "type": "uint256", - }, - { - "internalType": "address", - "name": "_resolver", - "type": "address", - }, - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "constructor", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "snxRedeemed", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "amountLiquidated", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "address", - "name": "liquidator", - "type": "address", - }, - ], - "name": "AccountLiquidated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "owner", - "type": "address", - }, - { - "indexed": True, - "internalType": "address", - "name": "spender", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "value", - "type": "uint256", - }, - ], - "name": "Approval", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "amount", - "type": "uint256", - }, - ], - "name": "ExchangeRebate", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "amount", - "type": "uint256", - }, - ], - "name": "ExchangeReclaim", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "bytes32", - "name": "trackingCode", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "bytes32", - "name": "toCurrencyKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "toAmount", - "type": "uint256", - }, - ], - "name": "ExchangeTracking", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "oldOwner", - "type": "address", - }, - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - }, - ], - "name": "OwnerChanged", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - } - ], - "name": "OwnerNominated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "proxyAddress", - "type": "address", - } - ], - "name": "ProxyUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newBeneficiary", - "type": "address", - } - ], - "name": "SelfDestructBeneficiaryUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "selfDestructDelay", - "type": "uint256", - } - ], - "name": "SelfDestructInitiated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [], - "name": "SelfDestructTerminated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "beneficiary", - "type": "address", - } - ], - "name": "SelfDestructed", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "bytes32", - "name": "fromCurrencyKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "fromAmount", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "bytes32", - "name": "toCurrencyKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "toAmount", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "address", - "name": "toAddress", - "type": "address", - }, - ], - "name": "SynthExchange", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newTokenState", - "type": "address", - } - ], - "name": "TokenStateUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "from", - "type": "address", - }, - { - "indexed": True, - "internalType": "address", - "name": "to", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "value", - "type": "uint256", - }, - ], - "name": "Transfer", - "type": "event", - }, - { - "constant": True, - "inputs": [], - "name": "DECIMALS", - "outputs": [{"internalType": "uint8", "name": "", "type": "uint8"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_ADDRESSES_FROM_RESOLVER", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "SELFDESTRUCT_DELAY", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "TOKEN_NAME", - "outputs": [{"internalType": "string", "name": "", "type": "string"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "TOKEN_SYMBOL", - "outputs": [{"internalType": "string", "name": "", "type": "string"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "owner", "type": "address"}, - {"internalType": "address", "name": "spender", "type": "address"}, - ], - "name": "allowance", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "anySynthOrSNXRateIsInvalid", - "outputs": [{"internalType": "bool", "name": "anyRateInvalid", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "spender", "type": "address"}, - {"internalType": "uint256", "name": "value", "type": "uint256"}, - ], - "name": "approve", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "availableCurrencyKeys", - "outputs": [{"internalType": "bytes32[]", "name": "", "type": "bytes32[]"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "availableSynthCount", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "uint256", "name": "index", "type": "uint256"}], - "name": "availableSynths", - "outputs": [{"internalType": "contract ISynth", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "balanceOf", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}], - "name": "burnSynths", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "burnForAddress", - "type": "address", - }, - {"internalType": "uint256", "name": "amount", "type": "uint256"}, - ], - "name": "burnSynthsOnBehalf", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "burnSynthsToTarget", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "burnForAddress", - "type": "address", - } - ], - "name": "burnSynthsToTargetOnBehalf", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "collateral", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "_issuer", "type": "address"}], - "name": "collateralisationRatio", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - ], - "name": "debtBalanceOf", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "decimals", - "outputs": [{"internalType": "uint8", "name": "", "type": "uint8"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - {"internalType": "uint256", "name": "amount", "type": "uint256"}, - ], - "name": "emitExchangeRebate", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - {"internalType": "uint256", "name": "amount", "type": "uint256"}, - ], - "name": "emitExchangeReclaim", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "trackingCode", - "type": "bytes32", - }, - { - "internalType": "bytes32", - "name": "toCurrencyKey", - "type": "bytes32", - }, - {"internalType": "uint256", "name": "toAmount", "type": "uint256"}, - ], - "name": "emitExchangeTracking", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - { - "internalType": "bytes32", - "name": "fromCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "fromAmount", - "type": "uint256", - }, - { - "internalType": "bytes32", - "name": "toCurrencyKey", - "type": "bytes32", - }, - {"internalType": "uint256", "name": "toAmount", "type": "uint256"}, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - }, - ], - "name": "emitSynthExchange", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "sourceCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "sourceAmount", - "type": "uint256", - }, - { - "internalType": "bytes32", - "name": "destinationCurrencyKey", - "type": "bytes32", - }, - ], - "name": "exchange", - "outputs": [ - { - "internalType": "uint256", - "name": "amountReceived", - "type": "uint256", - } - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "exchangeForAddress", - "type": "address", - }, - { - "internalType": "bytes32", - "name": "sourceCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "sourceAmount", - "type": "uint256", - }, - { - "internalType": "bytes32", - "name": "destinationCurrencyKey", - "type": "bytes32", - }, - ], - "name": "exchangeOnBehalf", - "outputs": [ - { - "internalType": "uint256", - "name": "amountReceived", - "type": "uint256", - } - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "exchangeForAddress", - "type": "address", - }, - { - "internalType": "bytes32", - "name": "sourceCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "sourceAmount", - "type": "uint256", - }, - { - "internalType": "bytes32", - "name": "destinationCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "address", - "name": "originator", - "type": "address", - }, - { - "internalType": "bytes32", - "name": "trackingCode", - "type": "bytes32", - }, - ], - "name": "exchangeOnBehalfWithTracking", - "outputs": [ - { - "internalType": "uint256", - "name": "amountReceived", - "type": "uint256", - } - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "sourceCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "sourceAmount", - "type": "uint256", - }, - { - "internalType": "bytes32", - "name": "destinationCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "address", - "name": "originator", - "type": "address", - }, - { - "internalType": "bytes32", - "name": "trackingCode", - "type": "bytes32", - }, - ], - "name": "exchangeWithTracking", - "outputs": [ - { - "internalType": "uint256", - "name": "amountReceived", - "type": "uint256", - } - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "getResolverAddressesRequired", - "outputs": [ - { - "internalType": "bytes32[24]", - "name": "addressesRequired", - "type": "bytes32[24]", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "initiateSelfDestruct", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "initiationTime", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "integrationProxy", - "outputs": [{"internalType": "contract Proxy", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "contract AddressResolver", - "name": "_resolver", - "type": "address", - } - ], - "name": "isResolverCached", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "isWaitingPeriod", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "issueMaxSynths", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "issueForAddress", - "type": "address", - } - ], - "name": "issueMaxSynthsOnBehalf", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}], - "name": "issueSynths", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "issueForAddress", - "type": "address", - }, - {"internalType": "uint256", "name": "amount", "type": "uint256"}, - ], - "name": "issueSynthsOnBehalf", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - { - "internalType": "uint256", - "name": "susdAmount", - "type": "uint256", - }, - ], - "name": "liquidateDelinquentAccount", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "maxIssuableSynths", - "outputs": [ - { - "internalType": "uint256", - "name": "maxIssuable", - "type": "uint256", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "messageSender", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "mint", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "name", - "outputs": [{"internalType": "string", "name": "", "type": "string"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "_owner", "type": "address"}], - "name": "nominateNewOwner", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "nominatedOwner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "owner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "proxy", - "outputs": [{"internalType": "contract Proxy", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "remainingIssuableSynths", - "outputs": [ - { - "internalType": "uint256", - "name": "maxIssuable", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "alreadyIssued", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "totalSystemDebt", - "type": "uint256", - }, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolver", - "outputs": [ - { - "internalType": "contract AddressResolver", - "name": "", - "type": "address", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "name": "resolverAddressesRequired", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "sUSD", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "selfDestruct", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "selfDestructBeneficiary", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "selfDestructInitiated", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address payable", - "name": "_integrationProxy", - "type": "address", - } - ], - "name": "setIntegrationProxy", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "sender", "type": "address"}], - "name": "setMessageSender", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address payable", - "name": "_proxy", - "type": "address", - } - ], - "name": "setProxy", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "contract AddressResolver", - "name": "_resolver", - "type": "address", - } - ], - "name": "setResolverAndSyncCache", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address", - } - ], - "name": "setSelfDestructBeneficiary", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "contract TokenState", - "name": "_tokenState", - "type": "address", - } - ], - "name": "setTokenState", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "settle", - "outputs": [ - { - "internalType": "uint256", - "name": "reclaimed", - "type": "uint256", - }, - {"internalType": "uint256", "name": "refunded", "type": "uint256"}, - { - "internalType": "uint256", - "name": "numEntriesSettled", - "type": "uint256", - }, - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "symbol", - "outputs": [{"internalType": "string", "name": "", "type": "string"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "synths", - "outputs": [{"internalType": "contract ISynth", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "address", - "name": "synthAddress", - "type": "address", - } - ], - "name": "synthsByAddress", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "terminateSelfDestruct", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "tokenState", - "outputs": [ - { - "internalType": "contract TokenState", - "name": "", - "type": "address", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "totalIssuedSynths", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "totalIssuedSynthsExcludeEtherCollateral", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "totalSupply", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "to", "type": "address"}, - {"internalType": "uint256", "name": "value", "type": "uint256"}, - ], - "name": "transfer", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "from", "type": "address"}, - {"internalType": "address", "name": "to", "type": "address"}, - {"internalType": "uint256", "name": "value", "type": "uint256"}, - ], - "name": "transferFrom", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "transferableSynthetix", - "outputs": [ - { - "internalType": "uint256", - "name": "transferable", - "type": "uint256", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, -] - -feepool_abi = [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_proxy", - "type": "address", - }, - {"internalType": "address", "name": "_owner", "type": "address"}, - { - "internalType": "address", - "name": "_resolver", - "type": "address", - }, - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "constructor", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "feePeriodId", - "type": "uint256", - } - ], - "name": "FeePeriodClosed", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "sUSDAmount", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "snxRewards", - "type": "uint256", - }, - ], - "name": "FeesClaimed", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "debtRatio", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "debtEntryIndex", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "feePeriodStartingDebtIndex", - "type": "uint256", - }, - ], - "name": "IssuanceDebtRatioEntry", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "oldOwner", - "type": "address", - }, - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - }, - ], - "name": "OwnerChanged", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - } - ], - "name": "OwnerNominated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "proxyAddress", - "type": "address", - } - ], - "name": "ProxyUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newBeneficiary", - "type": "address", - } - ], - "name": "SelfDestructBeneficiaryUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "selfDestructDelay", - "type": "uint256", - } - ], - "name": "SelfDestructInitiated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [], - "name": "SelfDestructTerminated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "beneficiary", - "type": "address", - } - ], - "name": "SelfDestructed", - "type": "event", - }, - { - "constant": True, - "inputs": [], - "name": "FEE_ADDRESS", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "FEE_PERIOD_LENGTH", - "outputs": [{"internalType": "uint8", "name": "", "type": "uint8"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_ADDRESSES_FROM_RESOLVER", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "SELFDESTRUCT_DELAY", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - { - "internalType": "uint256", - "name": "debtRatio", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "debtEntryIndex", - "type": "uint256", - }, - ], - "name": "appendAccountIssuanceRecord", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - {"internalType": "uint256", "name": "quantity", "type": "uint256"}, - ], - "name": "appendVestingEntry", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "claimFees", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "claimingForAddress", - "type": "address", - } - ], - "name": "claimOnBehalf", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "closeCurrentFeePeriod", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - {"internalType": "uint256", "name": "period", "type": "uint256"}, - ], - "name": "effectiveDebtRatioForPeriod", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "feePeriodDuration", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "feesAvailable", - "outputs": [ - {"internalType": "uint256", "name": "", "type": "uint256"}, - {"internalType": "uint256", "name": "", "type": "uint256"}, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "feesByPeriod", - "outputs": [ - { - "internalType": "uint256[2][2]", - "name": "results", - "type": "uint256[2][2]", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "address", - "name": "_claimingAddress", - "type": "address", - } - ], - "name": "getLastFeeWithdrawal", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "getPenaltyThresholdRatio", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "getResolverAddressesRequired", - "outputs": [ - { - "internalType": "bytes32[24]", - "name": "addressesRequired", - "type": "bytes32[24]", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "uint256", - "name": "feePeriodIndex", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "feePeriodId", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "startingDebtIndex", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "startTime", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "feesToDistribute", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "feesClaimed", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "rewardsToDistribute", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "rewardsClaimed", - "type": "uint256", - }, - ], - "name": "importFeePeriod", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "initiateSelfDestruct", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "initiationTime", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "integrationProxy", - "outputs": [{"internalType": "contract Proxy", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "isFeesClaimable", - "outputs": [{"internalType": "bool", "name": "feesClaimable", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "contract AddressResolver", - "name": "_resolver", - "type": "address", - } - ], - "name": "isResolverCached", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "issuanceRatio", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "messageSender", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "_owner", "type": "address"}], - "name": "nominateNewOwner", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "nominatedOwner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "owner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "proxy", - "outputs": [{"internalType": "contract Proxy", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "uint256", "name": "index", "type": "uint256"}], - "name": "recentFeePeriods", - "outputs": [ - { - "internalType": "uint64", - "name": "feePeriodId", - "type": "uint64", - }, - { - "internalType": "uint64", - "name": "startingDebtIndex", - "type": "uint64", - }, - {"internalType": "uint64", "name": "startTime", "type": "uint64"}, - { - "internalType": "uint256", - "name": "feesToDistribute", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "feesClaimed", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "rewardsToDistribute", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "rewardsClaimed", - "type": "uint256", - }, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}], - "name": "recordFeePaid", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolver", - "outputs": [ - { - "internalType": "contract AddressResolver", - "name": "", - "type": "address", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "name": "resolverAddressesRequired", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "selfDestruct", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "selfDestructBeneficiary", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "selfDestructInitiated", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address payable", - "name": "_integrationProxy", - "type": "address", - } - ], - "name": "setIntegrationProxy", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "sender", "type": "address"}], - "name": "setMessageSender", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address payable", - "name": "_proxy", - "type": "address", - } - ], - "name": "setProxy", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "contract AddressResolver", - "name": "_resolver", - "type": "address", - } - ], - "name": "setResolverAndSyncCache", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}], - "name": "setRewardsToDistribute", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address", - } - ], - "name": "setSelfDestructBeneficiary", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "setupExpiryTime", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "targetThreshold", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "terminateSelfDestruct", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "totalFeesAvailable", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "totalRewardsAvailable", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, -] - -exchangerates_abi = [ - { - "inputs": [ - {"internalType": "address", "name": "_owner", "type": "address"}, - {"internalType": "address", "name": "_oracle", "type": "address"}, - { - "internalType": "address", - "name": "_resolver", - "type": "address", - }, - { - "internalType": "bytes32[]", - "name": "_currencyKeys", - "type": "bytes32[]", - }, - { - "internalType": "uint256[]", - "name": "_newRates", - "type": "uint256[]", - }, - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "constructor", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "address", - "name": "aggregator", - "type": "address", - }, - ], - "name": "AggregatorAdded", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "address", - "name": "aggregator", - "type": "address", - }, - ], - "name": "AggregatorRemoved", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "entryPoint", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "upperLimit", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "lowerLimit", - "type": "uint256", - }, - ], - "name": "InversePriceConfigured", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "rate", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "address", - "name": "initiator", - "type": "address", - }, - ], - "name": "InversePriceFrozen", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newOracle", - "type": "address", - } - ], - "name": "OracleUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "oldOwner", - "type": "address", - }, - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - }, - ], - "name": "OwnerChanged", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - } - ], - "name": "OwnerNominated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "RateDeleted", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32[]", - "name": "currencyKeys", - "type": "bytes32[]", - }, - { - "indexed": False, - "internalType": "uint256[]", - "name": "newRates", - "type": "uint256[]", - }, - ], - "name": "RatesUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newBeneficiary", - "type": "address", - } - ], - "name": "SelfDestructBeneficiaryUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "selfDestructDelay", - "type": "uint256", - } - ], - "name": "SelfDestructInitiated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [], - "name": "SelfDestructTerminated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "beneficiary", - "type": "address", - } - ], - "name": "SelfDestructed", - "type": "event", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_ADDRESSES_FROM_RESOLVER", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "SELFDESTRUCT_DELAY", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "internalType": "address", - "name": "aggregatorAddress", - "type": "address", - }, - ], - "name": "addAggregator", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "name": "aggregatorKeys", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "aggregatorWarningFlags", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "name": "aggregators", - "outputs": [ - { - "internalType": "contract AggregatorInterface", - "name": "", - "type": "address", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32[]", - "name": "currencyKeys", - "type": "bytes32[]", - } - ], - "name": "anyRateIsInvalid", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "canFreezeRate", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "address", - "name": "aggregator", - "type": "address", - } - ], - "name": "currenciesUsingAggregator", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "currencies", - "type": "bytes32[]", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "name": "currentRoundForRate", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "deleteRate", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "sourceCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "sourceAmount", - "type": "uint256", - }, - { - "internalType": "bytes32", - "name": "destinationCurrencyKey", - "type": "bytes32", - }, - ], - "name": "effectiveValue", - "outputs": [{"internalType": "uint256", "name": "value", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "sourceCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "sourceAmount", - "type": "uint256", - }, - { - "internalType": "bytes32", - "name": "destinationCurrencyKey", - "type": "bytes32", - }, - ], - "name": "effectiveValueAndRates", - "outputs": [ - {"internalType": "uint256", "name": "value", "type": "uint256"}, - { - "internalType": "uint256", - "name": "sourceRate", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "destinationRate", - "type": "uint256", - }, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "sourceCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "sourceAmount", - "type": "uint256", - }, - { - "internalType": "bytes32", - "name": "destinationCurrencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "roundIdForSrc", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "roundIdForDest", - "type": "uint256", - }, - ], - "name": "effectiveValueAtRound", - "outputs": [{"internalType": "uint256", "name": "value", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "freezeRate", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "getCurrentRoundId", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "startingRoundId", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "startingTimestamp", - "type": "uint256", - }, - {"internalType": "uint256", "name": "timediff", "type": "uint256"}, - ], - "name": "getLastRoundIdBeforeElapsedSecs", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "getResolverAddressesRequired", - "outputs": [ - { - "internalType": "bytes32[24]", - "name": "addressesRequired", - "type": "bytes32[24]", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "initiateSelfDestruct", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "initiationTime", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "name": "inversePricing", - "outputs": [ - { - "internalType": "uint256", - "name": "entryPoint", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "upperLimit", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "lowerLimit", - "type": "uint256", - }, - { - "internalType": "bool", - "name": "frozenAtUpperLimit", - "type": "bool", - }, - { - "internalType": "bool", - "name": "frozenAtLowerLimit", - "type": "bool", - }, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "name": "invertedKeys", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "contract AddressResolver", - "name": "_resolver", - "type": "address", - } - ], - "name": "isResolverCached", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "lastRateUpdateTimes", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32[]", - "name": "currencyKeys", - "type": "bytes32[]", - } - ], - "name": "lastRateUpdateTimesForCurrencies", - "outputs": [{"internalType": "uint256[]", "name": "", "type": "uint256[]"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "_owner", "type": "address"}], - "name": "nominateNewOwner", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "nominatedOwner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "oracle", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "owner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - {"internalType": "uint256", "name": "roundId", "type": "uint256"}, - ], - "name": "rateAndTimestampAtRound", - "outputs": [ - {"internalType": "uint256", "name": "rate", "type": "uint256"}, - {"internalType": "uint256", "name": "time", "type": "uint256"}, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "rateAndUpdatedTime", - "outputs": [ - {"internalType": "uint256", "name": "rate", "type": "uint256"}, - {"internalType": "uint256", "name": "time", "type": "uint256"}, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "rateForCurrency", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "rateIsFlagged", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "rateIsFrozen", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "rateIsInvalid", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "rateIsStale", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "rateStalePeriod", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32[]", - "name": "currencyKeys", - "type": "bytes32[]", - } - ], - "name": "ratesAndInvalidForCurrencies", - "outputs": [ - { - "internalType": "uint256[]", - "name": "rates", - "type": "uint256[]", - }, - {"internalType": "bool", "name": "anyRateInvalid", "type": "bool"}, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "numRounds", - "type": "uint256", - }, - ], - "name": "ratesAndUpdatedTimeForCurrencyLastNRounds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "rates", - "type": "uint256[]", - }, - { - "internalType": "uint256[]", - "name": "times", - "type": "uint256[]", - }, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32[]", - "name": "currencyKeys", - "type": "bytes32[]", - } - ], - "name": "ratesForCurrencies", - "outputs": [{"internalType": "uint256[]", "name": "", "type": "uint256[]"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "removeAggregator", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "removeInversePricing", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolver", - "outputs": [ - { - "internalType": "contract AddressResolver", - "name": "", - "type": "address", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "name": "resolverAddressesRequired", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "selfDestruct", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "selfDestructBeneficiary", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "selfDestructInitiated", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "entryPoint", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "upperLimit", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "lowerLimit", - "type": "uint256", - }, - { - "internalType": "bool", - "name": "freezeAtUpperLimit", - "type": "bool", - }, - { - "internalType": "bool", - "name": "freezeAtLowerLimit", - "type": "bool", - }, - ], - "name": "setInversePricing", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "_oracle", "type": "address"}], - "name": "setOracle", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "contract AddressResolver", - "name": "_resolver", - "type": "address", - } - ], - "name": "setResolverAndSyncCache", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address payable", - "name": "_beneficiary", - "type": "address", - } - ], - "name": "setSelfDestructBeneficiary", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "terminateSelfDestruct", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32[]", - "name": "currencyKeys", - "type": "bytes32[]", - }, - { - "internalType": "uint256[]", - "name": "newRates", - "type": "uint256[]", - }, - {"internalType": "uint256", "name": "timeSent", "type": "uint256"}, - ], - "name": "updateRates", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, -] - -system_settings_abi = [ - { - "inputs": [ - {"internalType": "address", "name": "_owner", "type": "address"}, - { - "internalType": "address", - "name": "_resolver", - "type": "address", - }, - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "constructor", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "flags", - "type": "address", - } - ], - "name": "AggregatorWarningFlagsUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "name", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "address", - "name": "destination", - "type": "address", - }, - ], - "name": "CacheUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "enum MixinSystemSettings.CrossDomainMessageGasLimits", - "name": "gasLimitType", - "type": "uint8", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "newLimit", - "type": "uint256", - }, - ], - "name": "CrossDomainMessageGasLimitChanged", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "debtSnapshotStaleTime", - "type": "uint256", - } - ], - "name": "DebtSnapshotStaleTimeUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "synthKey", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "newExchangeFeeRate", - "type": "uint256", - }, - ], - "name": "ExchangeFeeUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newFeePeriodDuration", - "type": "uint256", - } - ], - "name": "FeePeriodDurationUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newRatio", - "type": "uint256", - } - ], - "name": "IssuanceRatioUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newDelay", - "type": "uint256", - } - ], - "name": "LiquidationDelayUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newPenalty", - "type": "uint256", - } - ], - "name": "LiquidationPenaltyUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newRatio", - "type": "uint256", - } - ], - "name": "LiquidationRatioUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "minimumStakeTime", - "type": "uint256", - } - ], - "name": "MinimumStakeTimeUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "oldOwner", - "type": "address", - }, - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - }, - ], - "name": "OwnerChanged", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - } - ], - "name": "OwnerNominated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "threshold", - "type": "uint256", - } - ], - "name": "PriceDeviationThresholdUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "rateStalePeriod", - "type": "uint256", - } - ], - "name": "RateStalePeriodUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newTargetThreshold", - "type": "uint256", - } - ], - "name": "TargetThresholdUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bool", - "name": "enabled", - "type": "bool", - } - ], - "name": "TradingRewardsEnabled", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "waitingPeriodSecs", - "type": "uint256", - } - ], - "name": "WaitingPeriodSecsUpdated", - "type": "event", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_CROSS_DOMAIN_GAS_LIMIT", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_EXCHANGE_FEE_RATE", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_FEE_PERIOD_DURATION", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_ISSUANCE_RATIO", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_LIQUIDATION_DELAY", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_LIQUIDATION_PENALTY", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_LIQUIDATION_RATIO", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_MINIMUM_STAKE_TIME", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MAX_TARGET_THRESHOLD", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MIN_CROSS_DOMAIN_GAS_LIMIT", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MIN_FEE_PERIOD_DURATION", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "MIN_LIQUIDATION_DELAY", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "RATIO_FROM_TARGET_BUFFER", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "aggregatorWarningFlags", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "enum MixinSystemSettings.CrossDomainMessageGasLimits", - "name": "gasLimitType", - "type": "uint8", - } - ], - "name": "crossDomainMessageGasLimit", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "debtSnapshotStaleTime", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - { - "internalType": "bytes32", - "name": "currencyKey", - "type": "bytes32", - } - ], - "name": "exchangeFeeRate", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "feePeriodDuration", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "isResolverCached", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "issuanceRatio", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "liquidationDelay", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "liquidationPenalty", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "liquidationRatio", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "minimumStakeTime", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "_owner", "type": "address"}], - "name": "nominateNewOwner", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "nominatedOwner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "owner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "priceDeviationThresholdFactor", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "rateStalePeriod", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "rebuildCache", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolver", - "outputs": [ - { - "internalType": "contract AddressResolver", - "name": "", - "type": "address", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolverAddressesRequired", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "addresses", - "type": "bytes32[]", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "_flags", "type": "address"}], - "name": "setAggregatorWarningFlags", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "enum MixinSystemSettings.CrossDomainMessageGasLimits", - "name": "_gasLimitType", - "type": "uint8", - }, - { - "internalType": "uint256", - "name": "_crossDomainMessageGasLimit", - "type": "uint256", - }, - ], - "name": "setCrossDomainMessageGasLimit", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "_seconds", "type": "uint256"}], - "name": "setDebtSnapshotStaleTime", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bytes32[]", - "name": "synthKeys", - "type": "bytes32[]", - }, - { - "internalType": "uint256[]", - "name": "exchangeFeeRates", - "type": "uint256[]", - }, - ], - "name": "setExchangeFeeRateForSynths", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "uint256", - "name": "_feePeriodDuration", - "type": "uint256", - } - ], - "name": "setFeePeriodDuration", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "uint256", - "name": "_issuanceRatio", - "type": "uint256", - } - ], - "name": "setIssuanceRatio", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "time", "type": "uint256"}], - "name": "setLiquidationDelay", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "penalty", "type": "uint256"}], - "name": "setLiquidationPenalty", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "uint256", - "name": "_liquidationRatio", - "type": "uint256", - } - ], - "name": "setLiquidationRatio", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "_seconds", "type": "uint256"}], - "name": "setMinimumStakeTime", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "uint256", - "name": "_priceDeviationThresholdFactor", - "type": "uint256", - } - ], - "name": "setPriceDeviationThresholdFactor", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "period", "type": "uint256"}], - "name": "setRateStalePeriod", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "_percent", "type": "uint256"}], - "name": "setTargetThreshold", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "bool", - "name": "_tradingRewardsEnabled", - "type": "bool", - } - ], - "name": "setTradingRewardsEnabled", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "uint256", - "name": "_waitingPeriodSecs", - "type": "uint256", - } - ], - "name": "setWaitingPeriodSecs", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "targetThreshold", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "tradingRewardsEnabled", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "waitingPeriodSecs", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, -] - -erc20_abi = [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_proxy", - "type": "address", - }, - { - "internalType": "contract TokenState", - "name": "_tokenState", - "type": "address", - }, - {"internalType": "string", "name": "_tokenName", "type": "string"}, - { - "internalType": "string", - "name": "_tokenSymbol", - "type": "string", - }, - {"internalType": "address", "name": "_owner", "type": "address"}, - { - "internalType": "bytes32", - "name": "_currencyKey", - "type": "bytes32", - }, - { - "internalType": "uint256", - "name": "_totalSupply", - "type": "uint256", - }, - { - "internalType": "address", - "name": "_resolver", - "type": "address", - }, - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "constructor", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "owner", - "type": "address", - }, - { - "indexed": True, - "internalType": "address", - "name": "spender", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "value", - "type": "uint256", - }, - ], - "name": "Approval", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "value", - "type": "uint256", - }, - ], - "name": "Burned", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "name", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "address", - "name": "destination", - "type": "address", - }, - ], - "name": "CacheUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "value", - "type": "uint256", - }, - ], - "name": "Issued", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "oldOwner", - "type": "address", - }, - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - }, - ], - "name": "OwnerChanged", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - } - ], - "name": "OwnerNominated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "proxyAddress", - "type": "address", - } - ], - "name": "ProxyUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newTokenState", - "type": "address", - } - ], - "name": "TokenStateUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "from", - "type": "address", - }, - { - "indexed": True, - "internalType": "address", - "name": "to", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "value", - "type": "uint256", - }, - ], - "name": "Transfer", - "type": "event", - }, - { - "constant": True, - "inputs": [], - "name": "DECIMALS", - "outputs": [{"internalType": "uint8", "name": "", "type": "uint8"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "FEE_ADDRESS", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "owner", "type": "address"}, - {"internalType": "address", "name": "spender", "type": "address"}, - ], - "name": "allowance", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "spender", "type": "address"}, - {"internalType": "uint256", "name": "value", "type": "uint256"}, - ], - "name": "approve", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "balanceOf", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - {"internalType": "uint256", "name": "amount", "type": "uint256"}, - ], - "name": "burn", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "currencyKey", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "decimals", - "outputs": [{"internalType": "uint8", "name": "", "type": "uint8"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "integrationProxy", - "outputs": [{"internalType": "contract Proxy", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "isResolverCached", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - {"internalType": "uint256", "name": "amount", "type": "uint256"}, - ], - "name": "issue", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "messageSender", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "name", - "outputs": [{"internalType": "string", "name": "", "type": "string"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "_owner", "type": "address"}], - "name": "nominateNewOwner", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "nominatedOwner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "owner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "proxy", - "outputs": [{"internalType": "contract Proxy", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "rebuildCache", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolver", - "outputs": [ - { - "internalType": "contract AddressResolver", - "name": "", - "type": "address", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolverAddressesRequired", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "addresses", - "type": "bytes32[]", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address payable", - "name": "_integrationProxy", - "type": "address", - } - ], - "name": "setIntegrationProxy", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "sender", "type": "address"}], - "name": "setMessageSender", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address payable", - "name": "_proxy", - "type": "address", - } - ], - "name": "setProxy", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "contract TokenState", - "name": "_tokenState", - "type": "address", - } - ], - "name": "setTokenState", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}], - "name": "setTotalSupply", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "symbol", - "outputs": [{"internalType": "string", "name": "", "type": "string"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "tokenState", - "outputs": [ - { - "internalType": "contract TokenState", - "name": "", - "type": "address", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "totalSupply", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "to", "type": "address"}, - {"internalType": "uint256", "name": "value", "type": "uint256"}, - ], - "name": "transfer", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "to", "type": "address"}, - {"internalType": "uint256", "name": "value", "type": "uint256"}, - ], - "name": "transferAndSettle", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "from", "type": "address"}, - {"internalType": "address", "name": "to", "type": "address"}, - {"internalType": "uint256", "name": "value", "type": "uint256"}, - ], - "name": "transferFrom", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "from", "type": "address"}, - {"internalType": "address", "name": "to", "type": "address"}, - {"internalType": "uint256", "name": "value", "type": "uint256"}, - ], - "name": "transferFromAndSettle", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "transferableSynths", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, -] - -rewards_escrow_v2_abi = [ - { - "inputs": [ - {"internalType": "address", "name": "_owner", "type": "address"}, - { - "internalType": "address", - "name": "_resolver", - "type": "address", - }, - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "constructor", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "accountToMerge", - "type": "address", - }, - { - "indexed": False, - "internalType": "address", - "name": "destinationAddress", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "escrowAmountMerged", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256[]", - "name": "entryIDs", - "type": "uint256[]", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "time", - "type": "uint256", - }, - ], - "name": "AccountMerged", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newDuration", - "type": "uint256", - } - ], - "name": "AccountMergingDurationUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "time", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "endTime", - "type": "uint256", - }, - ], - "name": "AccountMergingStarted", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256[]", - "name": "entryIDs", - "type": "uint256[]", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "escrowedAmountMigrated", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "time", - "type": "uint256", - }, - ], - "name": "BurnedForMigrationToL2", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "name", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "address", - "name": "destination", - "type": "address", - }, - ], - "name": "CacheUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "entryID", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "escrowAmount", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "endTime", - "type": "uint256", - }, - ], - "name": "ImportedVestingEntry", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "time", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "escrowAmount", - "type": "uint256", - }, - ], - "name": "ImportedVestingSchedule", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newDuration", - "type": "uint256", - } - ], - "name": "MaxAccountMergingDurationUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newDuration", - "type": "uint256", - } - ], - "name": "MaxEscrowDurationUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "uint256", - "name": "newAmount", - "type": "uint256", - } - ], - "name": "MigrateEntriesThresholdAmountUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "escrowedAmount", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "vestedAmount", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "time", - "type": "uint256", - }, - ], - "name": "MigratedAccountEscrow", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "account", - "type": "address", - }, - { - "indexed": False, - "internalType": "address", - "name": "destination", - "type": "address", - }, - ], - "name": "NominateAccountToMerge", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "oldOwner", - "type": "address", - }, - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - }, - ], - "name": "OwnerChanged", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - } - ], - "name": "OwnerNominated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "beneficiary", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "time", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "value", - "type": "uint256", - }, - ], - "name": "Vested", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "beneficiary", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "time", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "value", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "duration", - "type": "uint256", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "entryID", - "type": "uint256", - }, - ], - "name": "VestingEntryCreated", - "type": "event", - }, - { - "constant": False, - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "accountMergingDuration", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "accountMergingIsOpen", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "accountMergingStartTime", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "", "type": "address"}, - {"internalType": "uint256", "name": "", "type": "uint256"}, - ], - "name": "accountVestingEntryIDs", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - {"internalType": "uint256", "name": "quantity", "type": "uint256"}, - {"internalType": "uint256", "name": "duration", "type": "uint256"}, - ], - "name": "appendVestingEntry", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "balanceOf", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - { - "internalType": "uint256[]", - "name": "entryIDs", - "type": "uint256[]", - }, - ], - "name": "burnForMigration", - "outputs": [ - { - "internalType": "uint256", - "name": "escrowedAccountBalance", - "type": "uint256", - }, - { - "components": [ - { - "internalType": "uint64", - "name": "endTime", - "type": "uint64", - }, - { - "internalType": "uint256", - "name": "escrowAmount", - "type": "uint256", - }, - ], - "internalType": "struct VestingEntries.VestingEntry[]", - "name": "vestingEntries", - "type": "tuple[]", - }, - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "beneficiary", - "type": "address", - }, - {"internalType": "uint256", "name": "deposit", "type": "uint256"}, - {"internalType": "uint256", "name": "duration", "type": "uint256"}, - ], - "name": "createEscrowEntry", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - {"internalType": "uint256", "name": "index", "type": "uint256"}, - {"internalType": "uint256", "name": "pageSize", "type": "uint256"}, - ], - "name": "getAccountVestingEntryIDs", - "outputs": [{"internalType": "uint256[]", "name": "", "type": "uint256[]"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - {"internalType": "uint256", "name": "entryID", "type": "uint256"}, - ], - "name": "getVestingEntry", - "outputs": [ - {"internalType": "uint64", "name": "endTime", "type": "uint64"}, - { - "internalType": "uint256", - "name": "escrowAmount", - "type": "uint256", - }, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - {"internalType": "uint256", "name": "entryID", "type": "uint256"}, - ], - "name": "getVestingEntryClaimable", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - { - "internalType": "uint256[]", - "name": "entryIDs", - "type": "uint256[]", - }, - ], - "name": "getVestingQuantity", - "outputs": [{"internalType": "uint256", "name": "total", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "account", "type": "address"}, - {"internalType": "uint256", "name": "index", "type": "uint256"}, - {"internalType": "uint256", "name": "pageSize", "type": "uint256"}, - ], - "name": "getVestingSchedules", - "outputs": [ - { - "components": [ - { - "internalType": "uint64", - "name": "endTime", - "type": "uint64", - }, - { - "internalType": "uint256", - "name": "escrowAmount", - "type": "uint256", - }, - { - "internalType": "uint256", - "name": "entryID", - "type": "uint256", - }, - ], - "internalType": "struct VestingEntries.VestingEntryWithID[]", - "name": "", - "type": "tuple[]", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - {"internalType": "address", "name": "", "type": "address"}, - {"internalType": "uint256", "name": "", "type": "uint256"}, - { - "components": [ - { - "internalType": "uint64", - "name": "endTime", - "type": "uint64", - }, - { - "internalType": "uint256", - "name": "escrowAmount", - "type": "uint256", - }, - ], - "internalType": "struct VestingEntries.VestingEntry[]", - "name": "", - "type": "tuple[]", - }, - ], - "name": "importVestingEntries", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]", - }, - { - "internalType": "uint256[]", - "name": "escrowAmounts", - "type": "uint256[]", - }, - ], - "name": "importVestingSchedule", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "isResolverCached", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "maxAccountMergingDuration", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "max_duration", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "accountToMerge", - "type": "address", - }, - { - "internalType": "uint256[]", - "name": "entryIDs", - "type": "uint256[]", - }, - ], - "name": "mergeAccount", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]", - }, - { - "internalType": "uint256[]", - "name": "escrowBalances", - "type": "uint256[]", - }, - { - "internalType": "uint256[]", - "name": "vestedBalances", - "type": "uint256[]", - }, - ], - "name": "migrateAccountEscrowBalances", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "migrateEntriesThresholdAmount", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "address", - "name": "addressToMigrate", - "type": "address", - } - ], - "name": "migrateVestingSchedule", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "nextEntryId", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "nominateAccountToMerge", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "_owner", "type": "address"}], - "name": "nominateNewOwner", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "nominatedOwner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "", "type": "address"}], - "name": "nominatedReceiver", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "numVestingEntries", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "owner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "rebuildCache", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolver", - "outputs": [ - { - "internalType": "contract AddressResolver", - "name": "", - "type": "address", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolverAddressesRequired", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "addresses", - "type": "bytes32[]", - } - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "duration", "type": "uint256"}], - "name": "setAccountMergingDuration", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "duration", "type": "uint256"}], - "name": "setMaxAccountMergingWindow", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "duration", "type": "uint256"}], - "name": "setMaxEscrowDuration", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "amount", "type": "uint256"}], - "name": "setMigrateEntriesThresholdAmount", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "setupExpiryTime", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "startMergingWindow", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "", "type": "address"}], - "name": "totalBalancePendingMigration", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "", "type": "address"}], - "name": "totalEscrowedAccountBalance", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "totalEscrowedBalance", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "", "type": "address"}], - "name": "totalVestedAccountBalance", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [ - { - "internalType": "uint256[]", - "name": "entryIDs", - "type": "uint256[]", - } - ], - "name": "vest", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [ - {"internalType": "address", "name": "", "type": "address"}, - {"internalType": "uint256", "name": "", "type": "uint256"}, - ], - "name": "vestingSchedules", - "outputs": [ - {"internalType": "uint64", "name": "endTime", "type": "uint64"}, - { - "internalType": "uint256", - "name": "escrowAmount", - "type": "uint256", - }, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, -] - -liquidator_rewards_abi = [ - { - "inputs": [ - {"internalType": "address", "name": "_owner", "type": "address"}, - {"internalType": "address", "name": "_resolver", "type": "address"}, - ], - "payable": False, - "stateMutability": "nonpayable", - "type": "constructor", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "bytes32", - "name": "name", - "type": "bytes32", - }, - { - "indexed": False, - "internalType": "address", - "name": "destination", - "type": "address", - }, - ], - "name": "CacheUpdated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "oldOwner", - "type": "address", - }, - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - }, - ], - "name": "OwnerChanged", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": False, - "internalType": "address", - "name": "newOwner", - "type": "address", - } - ], - "name": "OwnerNominated", - "type": "event", - }, - { - "anonymous": False, - "inputs": [ - { - "indexed": True, - "internalType": "address", - "name": "user", - "type": "address", - }, - { - "indexed": False, - "internalType": "uint256", - "name": "reward", - "type": "uint256", - }, - ], - "name": "RewardPaid", - "type": "event", - }, - { - "constant": True, - "inputs": [], - "name": "CONTRACT_NAME", - "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "accumulatedRewardsPerShare", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "earned", - "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "", "type": "address"}], - "name": "entries", - "outputs": [ - {"internalType": "uint128", "name": "claimable", "type": "uint128"}, - { - "internalType": "uint128", - "name": "entryAccumulatedRewards", - "type": "uint128", - }, - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "getReward", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [{"internalType": "address", "name": "", "type": "address"}], - "name": "initiated", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "isResolverCached", - "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "_owner", "type": "address"}], - "name": "nominateNewOwner", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "nominatedOwner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "uint256", "name": "reward", "type": "uint256"}], - "name": "notifyRewardAmount", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "owner", - "outputs": [{"internalType": "address", "name": "", "type": "address"}], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [], - "name": "rebuildCache", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolver", - "outputs": [ - {"internalType": "contract AddressResolver", "name": "", "type": "address"} - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": True, - "inputs": [], - "name": "resolverAddressesRequired", - "outputs": [ - {"internalType": "bytes32[]", "name": "addresses", "type": "bytes32[]"} - ], - "payable": False, - "stateMutability": "view", - "type": "function", - }, - { - "constant": False, - "inputs": [{"internalType": "address", "name": "account", "type": "address"}], - "name": "updateEntry", - "outputs": [], - "payable": False, - "stateMutability": "nonpayable", - "type": "function", - }, -] diff --git a/blockapi/v2/api/web3_utils.py b/blockapi/v2/api/web3_utils.py deleted file mode 100644 index 296cf531..00000000 --- a/blockapi/v2/api/web3_utils.py +++ /dev/null @@ -1,142 +0,0 @@ -import functools -import logging -import os -from typing import List, Optional, Tuple, Union - -from web3 import Web3 -from web3.contract import Contract -from web3.types import BlockIdentifier - -_web3_patched = False -LATEST_BLOCK: BlockIdentifier = "latest" - -logger = logging.getLogger(__name__) - -env_variables = os.environ - - -def easy_call( - contract: Contract, - function_name: str, - *f_args: Union[bytes, int, str, List[str], Tuple[str]], - block: Optional[BlockIdentifier] = None, -) -> Union[int, str, dict, List[dict]]: - """ - Call smart contract function, handle errors and structure results. - Args: - contract: web3 smart contract object - function_name: name of function to call - f_args: function arguments - block: block for which function is called - - Returns (int, str, dict or List[dict]): - Parsed result. - """ - if not block: - block = LATEST_BLOCK - - # TODO add errors handling - f = getattr(contract.functions, function_name) - try: - raw = f(*f_args).call(block_identifier=block) - except Exception as e: - logging.error( - "Failed to call function: %s, on contract: %s", - function_name, - contract.address, - ) - raise e - - result = map_struct(raw, contract.abi, function_name) - return result - - -def get_eth_client( - api_url: Optional[str] = None, -) -> Web3: - """ - Get web3 client. - Args: - api_url (string): Full API URL - """ - return Web3(Web3.HTTPProvider(api_url)) - - -def map_struct(raw_result, abi, func_name): - """ - Map raw result from smart contract to structured dict (or list - of dicts). - Args: - raw_result (tuple or [tuple]): result from smart contract's call - abi (dict): ABI definition of whole smart contract - func_name (str): name of used func - - Returns (dict or [dict]): - Structured result/s - """ - func_abi = next(a for a in abi if a.get('name') == func_name) - components = create_components(func_abi['outputs']) - component = components[0] if isinstance(components, list) else components - - return ( - [map_sub_item(i, component) for i in raw_result] - if isinstance(raw_result, list) - else map_sub_item(raw_result, component) - ) - - -def map_sub_item(item, component): - """ - Map component's names to item. - """ - if not component: - return item - - sub = {} - for i, c in zip(item, component.items()): - key, sub_component = c - - if isinstance(i, list): - sub[key] = [] - for j in i: - sub[key].append(map_sub_item(j, sub_component)) - else: - sub[key] = map_sub_item(i, sub_component) - - return sub - - -def create_components(abi_outputs): - """ - Create simple component as nested dict with attributes' names. - Values of keys are dicts (nested dicts) or None values (if there - is no more nested item). - """ - return [create_component(o) for o in abi_outputs] - - -def create_component(item): - """ - Create single component from raw_item. - If there is no nested component, nothing is returned. - """ - if item.get('components'): - return {c['name']: create_component(c) for c in item['components']} - - -def to_checksum_address(func): - """ - A decorator, which converts input argument representing an Ethereum address - into its check-summed version. This decorator can be used for class methods - with address as the first positional argument. - """ - - @functools.wraps(func) - def inner(self, address, *args, **kwargs): - return func(self, Web3.to_checksum_address(address), *args, **kwargs) - - return inner - - -def ensure_checksum_address(address: Optional[str]) -> Optional[str]: - return Web3.to_checksum_address(address) if address is not None else None diff --git a/blockapi/v2/coins.py b/blockapi/v2/coins.py index d672ad58..e8aeff03 100644 --- a/blockapi/v2/coins.py +++ b/blockapi/v2/coins.py @@ -431,15 +431,6 @@ info=CoinInfo(coingecko_id=CoingeckoId.DOGECOIN), ) -COIN_SNX = Coin( - symbol='SNX', - name='Synthetix', - decimals=18, - address='0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f', - blockchain=Blockchain.ETHEREUM, - info=CoinInfo(coingecko_id=CoingeckoId.SYNTHETIX), -) - COIN_CANTO = Coin( symbol='CANTO', diff --git a/blockapi/v2/models.py b/blockapi/v2/models.py index 3deee92e..8308d377 100644 --- a/blockapi/v2/models.py +++ b/blockapi/v2/models.py @@ -473,7 +473,6 @@ class CoingeckoId(str, Enum): SOLANA = 'solana' SONGBIRD = 'songbird' SUI = 'sui' - SYNTHETIX = 'havven' TELOS = 'telos' USDC = 'usd-coin' WANCHAIN = 'wanchain' diff --git a/setup.py b/setup.py index e8e03797..8fb7848d 100644 --- a/setup.py +++ b/setup.py @@ -20,18 +20,15 @@ install_requires=[ 'requests>=2.28,<3.0', 'python-dateutil>=2.8.0', + 'cytoolz>=0.12.0', + 'eth-utils>=2.0.0', 'coinaddrng==1.1.1', - 'web3>=5.2.2,<8.0.0', - 'bs4>=0.0.1', - 'lxml>=4.4.1', 'pydantic>=1.10.2', - 'marko>=1.3.0,<2.0.0', 'fake_useragent>=1.1.3', 'pytest', 'pytest-vcr', 'requests_mock>=1.9.3', 'attrs>=17.4.0,<23.0.0', - 'solders>=0.22.0', 'base58>=2.1.0', # vcrpy incompatible with 3.14, remove once vcrpy>8.1.1 is out 'aiohttp<3.14',