UNPKG

@dolomite-exchange/dolomite-margin

Version:

Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol

463 lines 148 kB
{ "contractName": "TestWETH", "abi": [ { "inputs": [ { "internalType": "string", "name": "__name", "type": "string" }, { "internalType": "string", "name": "__symbol", "type": "string" } ], "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": "dst", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "wad", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Issue", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "src", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "wad", "type": "uint256" } ], "name": "Withdrawal", "type": "event" }, { "payable": true, "stateMutability": "payable", "type": "fallback" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_target", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "addBalance", "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": "who", "type": "address" } ], "name": "balanceOf", "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": "uint256", "name": "amount", "type": "uint256" } ], "name": "issue", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "who", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "issueTo", "outputs": [], "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": "_target", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "setBalance", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bool", "name": "_shouldRevertNameCall", "type": "bool" } ], "name": "setShouldRevertNameCall", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "shouldRevertNameCall", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": false, "inputs": [], "name": "deposit", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "wad", "type": "uint256" } ], "name": "withdraw", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"__name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"__symbol\",\"type\":\"string\"}],\"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\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Issue\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"addBalance\",\"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\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"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\":[],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issue\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issueTo\",\"outputs\":[],\"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\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_shouldRevertNameCall\",\"type\":\"bool\"}],\"name\":\"setShouldRevertNameCall\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"shouldRevertNameCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestWETH.sol\":\"TestWETH\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IWETH.sol\":{\"keccak256\":\"0xe85314496167d5a47ea89275d8cdbe53f00927bf933242f67f2acc4126edda0d\",\"urls\":[\"bzz-raw://5b16b1b7602e31c1243f2514bf4bff17d2fc0de0843ad7de6548545d954e4650\",\"dweb:/ipfs/QmcQWaEdqTfkDhHxbFdJX2ytwFtoUGNWCRk1w8DhFhsuf7\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/CustomTestToken.sol\":{\"keccak256\":\"0x2580ad1d4b6092a9f0a8ff20dd4bbdc7fc98bdfb44ff840c873fa6a7a9a6e8ad\",\"urls\":[\"bzz-raw://eeae34f2a35d92dc9e2a39d3d8e128377897907de527d6c56471dbc9ca7867ec\",\"dweb:/ipfs/QmcD4MfP5MCPQSmv8FFDScjiL9Yw724EyFqnyqgKzJqg74\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestToken.sol\":{\"keccak256\":\"0xfbf238308c7b72cfc85387bdcf3a88145ab193c82268bed81f6eeea470c8e1bb\",\"urls\":[\"bzz-raw://ee425eb5d26cf169e6fc1ec50c66a59596bb4af77c9b190e5d8b3a0abd26efa1\",\"dweb:/ipfs/QmRKFYpuX7Q3pJ3UuLMcAHJ8SF1Gegp7Q99r2wZo57hDrR\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestWETH.sol\":{\"keccak256\":\"0x3fa76b3879117fe835fceb1132308b0b570d98ccb85ac6f3b52ffa2330e13689\",\"urls\":[\"bzz-raw://3de8d4109abd8c0012de58847b4324909092ff56d87a2733aeecae9cdfcc0892\",\"dweb:/ipfs/QmbjPiYmn1nRUEA7jmhzU1KKoHNH8SCYsRSc11PQq8VsuK\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11\",\"urls\":[\"bzz-raw://03335b7b07c7c8c8d613cfdd8ec39a0b5ec133ee510bf2fe6cc5a496767bef4b\",\"dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf\"]}},\"version\":1}", "bytecode": "0x60806040523480156200001157600080fd5b506040516200162238038062001622833981016040819052620000349162000187565b8181601282600490805190602001906200005092919062000086565b5081516200006690600590602085019062000086565b506006805460ff191660ff92909216919091179055506200027792505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000c957805160ff1916838001178555620000f9565b82800160010185558215620000f9579182015b82811115620000f9578251825591602001919060010190620000dc565b50620001079291506200010b565b5090565b6200012891905b8082111562000107576000815560010162000112565b90565b600082601f8301126200013d57600080fd5b8151620001546200014e826200021c565b620001f5565b915080825260208301602083018583830111156200017157600080fd5b6200017e83828462000244565b50505092915050565b600080604083850312156200019b57600080fd5b82516001600160401b03811115620001b257600080fd5b620001c0858286016200012b565b92505060208301516001600160401b03811115620001dd57600080fd5b620001eb858286016200012b565b9150509250929050565b6040518181016001600160401b03811182821017156200021457600080fd5b604052919050565b60006001600160401b038211156200023357600080fd5b506020601f91909101601f19160190565b60005b838110156200026157818101518382015260200162000247565b8381111562000271576000848401525b50505050565b61139b80620002876000396000f3fe60806040526004361061010e5760003560e01c8063313ce567116100a5578063b6169b9c11610074578063d0e30db011610059578063d0e30db01461010e578063dd62ed3e146102de578063e30443bc146102fe5761010e565b8063b6169b9c1461029e578063cc872b66146102be5761010e565b8063313ce5671461022757806370a082311461024957806395d89b4114610269578063a9059cbb1461027e5761010e565b80631e929ac3116100e15780631e929ac3146101b257806321e5383a146101c757806323b872dd146101e75780632e1a7d4d146102075761010e565b806306fdde0314610118578063095ea7b3146101435780631207f0c11461017057806318160ddd14610190575b61011661031e565b005b34801561012457600080fd5b5061012d61036f565b60405161013a91906111d9565b60405180910390f35b34801561014f57600080fd5b5061016361015e366004610e55565b610466565b60405161013a91906111cb565b34801561017c57600080fd5b5061011661018b366004610e55565b6104de565b34801561019c57600080fd5b506101a5610591565b60405161013a919061127a565b3480156101be57600080fd5b50610163610597565b3480156101d357600080fd5b506101166101e2366004610e55565b6105a0565b3480156101f357600080fd5b50610163610202366004610e08565b61068e565b34801561021357600080fd5b50610116610222366004610ea3565b610896565b34801561023357600080fd5b5061023c610956565b60405161013a9190611288565b34801561025557600080fd5b506101a5610264366004610da8565b61095f565b34801561027557600080fd5b5061012d610987565b34801561028a57600080fd5b50610163610299366004610e55565b610a06565b3480156102aa57600080fd5b506101166102b9366004610e85565b610b0a565b3480156102ca57600080fd5b506101166102d9366004610ea3565b610b3b565b3480156102ea57600080fd5b506101a56102f9366004610dce565b610b48565b34801561030a57600080fd5b50610116610319366004610e55565b610b80565b336000818152600160205260409081902080543490810190915590517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c916103659161127a565b60405180910390a2565b60035460609060ff16156103b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af906111ea565b60405180910390fd5b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561045c5780601f106104315761010080835404028352916020019161045c565b820191906000526020600020905b81548152906001019060200180831161043f57829003601f168201915b5050505050905090565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104cc90869061127a565b60405180910390a35060015b92915050565b6000546104f1908263ffffffff610bd716565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054610529908263ffffffff610bd716565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260409081902092909255905130907f4b2682685b046a3dae8e75ff49b82fa703e366056a43c6a791411011134f4f5d9061058590859061127a565b60405180910390a35050565b60005490565b60035460ff1681565b60006105ab8361095f565b90508081830110156105e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061126a565b6105f9818363ffffffff610bd716565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604081209190915554610633908363ffffffff610bd716565b600090815560405173ffffffffffffffffffffffffffffffffffffffff851691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061068190869061127a565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120548211156106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061125a565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054821115610757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061123a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205461078d908363ffffffff610bd716565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908616815220546107cf908363ffffffff610c1d16565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320939093556002815282822033835290522054610819908363ffffffff610c1d16565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602090815260408083203384529091529081902093909355915190851691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061088490869061127a565b60405180910390a35060019392505050565b336000908152600160205260409020548111156108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061124a565b33600081815260016020526040902080548390039055610905908263ffffffff610c5f16565b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658260405161094b919061127a565b60405180910390a250565b60065460ff1690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561045c5780601f106104315761010080835404028352916020019161045c565b33600090815260016020526040812054821115610a4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af906111fa565b33600090815260016020526040902054610a6f908363ffffffff610c1d16565b336000908152600160205260408082209290925573ffffffffffffffffffffffffffffffffffffffff851681522054610aae908363ffffffff610bd716565b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104cc90869061127a565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b610b4533826104de565b50565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260016020526040808220849055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061058590859061127a565b600082820183811015610c16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061120a565b9392505050565b6000610c1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d41565b80471015610c99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061122a565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610cbf906111c0565b60006040518083038185875af1925050503d8060008114610cfc576040519150601f19603f3d011682016040523d82523d6000602084013e610d01565b606091505b5050905080610d3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061121a565b505050565b60008184841115610d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af91906111d9565b505050900390565b80356104d881611332565b80356104d881611346565b80356104d88161134f565b600060208284031215610dba57600080fd5b6000610dc68484610d87565b949350505050565b60008060408385031215610de157600080fd5b6000610ded8585610d87565b9250506020610dfe85828601610d87565b9150509250929050565b600080600060608486031215610e1d57600080fd5b6000610e298686610d87565b9350506020610e3a86828701610d87565b9250506040610e4b86828701610d9d565b9150509250925092565b60008060408385031215610e6857600080fd5b6000610e748585610d87565b9250506020610dfe85828601610d9d565b600060208284031215610e9757600080fd5b6000610dc68484610d92565b600060208284031215610eb557600080fd5b6000610dc68484610d9d565b610eca816112b3565b82525050565b6000610edb82611296565b610ee5818561129f565b9350610ef58185602086016112da565b610efe8161130a565b9093019392505050565b6000610f15601d8361129f565b7f54657374546f6b656e3a206e616d652063616c6c207265766572746564000000815260200192915050565b6000610f4e60168361129f565b7f546f6b656e3a205472616e73666572206661696c656400000000000000000000815260200192915050565b6000610f87601b8361129f565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000610fc0603a8361129f565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d61792068617665207265766572746564000000000000602082015260400192915050565b600061101f601d8361129f565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000815260200192915050565b600061105860258361129f565b7f237472616e7366657246726f6d3a20494e53554646494349454e545f414c4c4f81527f57414e4345000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006110b760288361129f565b7f54657374574554483a3a77697468647261773a20494e53554646494349454e5481527f5f42414c414e4345000000000000000000000000000000000000000000000000602082015260400192915050565b600061111660238361129f565b7f237472616e7366657246726f6d3a20494e53554646494349454e545f42414c4181527f4e43450000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006104d860008361129a565b6000611182600d8361129f565b7f494e56414c49445f56414c554500000000000000000000000000000000000000815260200192915050565b610eca816112d1565b610eca816112d4565b60006104d882611168565b602081016104d88284610ec1565b60208082528101610c168184610ed0565b602080825281016104d881610f08565b602080825281016104d881610f41565b602080825281016104d881610f7a565b602080825281016104d881610fb3565b602080825281016104d881611012565b602080825281016104d88161104b565b602080825281016104d8816110aa565b602080825281016104d881611109565b602080825281016104d881611175565b602081016104d882846111ae565b602081016104d882846111b7565b5190565b919050565b90815260200190565b60006104d8826112b8565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b60ff1690565b60005b838110156112f55781810151838201526020016112dd565b83811115611304576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b61133b816112a8565b8114610b4557600080fd5b61133b816112b3565b61133b816112d156fea365627a7a723158208698957312659699beaa26b9502079af9f919645eb56fae7a74c61ca36982f9f6c6578706572696d656e74616cf564736f6c63430005100040", "deployedBytecode": "0x60806040526004361061010e5760003560e01c8063313ce567116100a5578063b6169b9c11610074578063d0e30db011610059578063d0e30db01461010e578063dd62ed3e146102de578063e30443bc146102fe5761010e565b8063b6169b9c1461029e578063cc872b66146102be5761010e565b8063313ce5671461022757806370a082311461024957806395d89b4114610269578063a9059cbb1461027e5761010e565b80631e929ac3116100e15780631e929ac3146101b257806321e5383a146101c757806323b872dd146101e75780632e1a7d4d146102075761010e565b806306fdde0314610118578063095ea7b3146101435780631207f0c11461017057806318160ddd14610190575b61011661031e565b005b34801561012457600080fd5b5061012d61036f565b60405161013a91906111d9565b60405180910390f35b34801561014f57600080fd5b5061016361015e366004610e55565b610466565b60405161013a91906111cb565b34801561017c57600080fd5b5061011661018b366004610e55565b6104de565b34801561019c57600080fd5b506101a5610591565b60405161013a919061127a565b3480156101be57600080fd5b50610163610597565b3480156101d357600080fd5b506101166101e2366004610e55565b6105a0565b3480156101f357600080fd5b50610163610202366004610e08565b61068e565b34801561021357600080fd5b50610116610222366004610ea3565b610896565b34801561023357600080fd5b5061023c610956565b60405161013a9190611288565b34801561025557600080fd5b506101a5610264366004610da8565b61095f565b34801561027557600080fd5b5061012d610987565b34801561028a57600080fd5b50610163610299366004610e55565b610a06565b3480156102aa57600080fd5b506101166102b9366004610e85565b610b0a565b3480156102ca57600080fd5b506101166102d9366004610ea3565b610b3b565b3480156102ea57600080fd5b506101a56102f9366004610dce565b610b48565b34801561030a57600080fd5b50610116610319366004610e55565b610b80565b336000818152600160205260409081902080543490810190915590517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c916103659161127a565b60405180910390a2565b60035460609060ff16156103b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af906111ea565b60405180910390fd5b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561045c5780601f106104315761010080835404028352916020019161045c565b820191906000526020600020905b81548152906001019060200180831161043f57829003601f168201915b5050505050905090565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104cc90869061127a565b60405180910390a35060015b92915050565b6000546104f1908263ffffffff610bd716565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054610529908263ffffffff610bd716565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260409081902092909255905130907f4b2682685b046a3dae8e75ff49b82fa703e366056a43c6a791411011134f4f5d9061058590859061127a565b60405180910390a35050565b60005490565b60035460ff1681565b60006105ab8361095f565b90508081830110156105e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061126a565b6105f9818363ffffffff610bd716565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604081209190915554610633908363ffffffff610bd716565b600090815560405173ffffffffffffffffffffffffffffffffffffffff851691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061068190869061127a565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120548211156106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061125a565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054821115610757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061123a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205461078d908363ffffffff610bd716565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908616815220546107cf908363ffffffff610c1d16565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320939093556002815282822033835290522054610819908363ffffffff610c1d16565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602090815260408083203384529091529081902093909355915190851691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061088490869061127a565b60405180910390a35060019392505050565b336000908152600160205260409020548111156108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061124a565b33600081815260016020526040902080548390039055610905908263ffffffff610c5f16565b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658260405161094b919061127a565b60405180910390a250565b60065460ff1690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561045c5780601f106104315761010080835404028352916020019161045c565b33600090815260016020526040812054821115610a4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af906111fa565b33600090815260016020526040902054610a6f908363ffffffff610c1d16565b336000908152600160205260408082209290925573ffffffffffffffffffffffffffffffffffffffff851681522054610aae908363ffffffff610bd716565b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104cc90869061127a565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b610b4533826104de565b50565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260016020526040808220849055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061058590859061127a565b600082820183811015610c16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061120a565b9392505050565b6000610c1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d41565b80471015610c99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061122a565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610cbf906111c0565b60006040518083038185875af1925050503d8060008114610cfc576040519150601f19603f3d011682016040523d82523d6000602084013e610d01565b606091505b5050905080610d3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af9061121a565b505050565b60008184841115610d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af91906111d9565b505050900390565b80356104d881611332565b80356104d881611346565b80356104d88161134f565b600060208284031215610dba57600080fd5b6000610dc68484610d87565b949350505050565b60008060408385031215610de157600080fd5b6000610ded8585610d87565b9250506020610dfe85828601610d87565b9150509250929050565b600080600060608486031215610e1d57600080fd5b6000610e298686610d87565b9350506020610e3a86828701610d87565b9250506040610e4b86828701610d9d565b9150509250925092565b60008060408385031215610e6857600080fd5b6000610e748585610d87565b9250506020610dfe85828601610d9d565b600060208284031215610e9757600080fd5b6000610dc68484610d92565b600060208284031215610eb557600080fd5b6000610dc68484610d9d565b610eca816112b3565b82525050565b6000610edb82611296565b610ee5818561129f565b9350610ef58185602086016112da565b610efe8161130a565b9093019392505050565b6000610f15601d8361129f565b7f54657374546f6b656e3a206e616d652063616c6c207265766572746564000000815260200192915050565b6000610f4e60168361129f565b7f546f6b656e3a205472616e73666572206661696c656400000000000000000000815260200192915050565b6000610f87601b8361129f565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000610fc0603a8361129f565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d61792068617665207265766572746564000000000000602082015260400192915050565b600061101f601d8361129f565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000815260200192915050565b600061105860258361129f565b7f237472616e7366657246726f6d3a20494e53554646494349454e545f414c4c4f81527f57414e4345000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006110b760288361129f565b7f54657374574554483a3a77697468647261773a20494e53554646494349454e5481527f5f42414c414e4345000000000000000000000000000000000000000000000000602082015260400192915050565b600061111660238361129f565b7f237472616e7366657246726f6d3a20494e53554646494349454e545f42414c4181527f4e43450000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006104d860008361129a565b6000611182600d8361129f565b7f494e56414c49445f56414c554500000000000000000000000000000000000000815260200192915050565b610eca816112d1565b610eca816112d4565b60006104d882611168565b602081016104d88284610ec1565b60208082528101610c168184610ed0565b602080825281016104d881610f08565b602080825281016104d881610f41565b602080825281016104d881610f7a565b602080825281016104d881610fb3565b602080825281016104d881611012565b602080825281016104d88161104b565b602080825281016104d8816110aa565b602080825281016104d881611109565b602080825281016104d881611175565b602081016104d882846111ae565b602081016104d882846111b7565b5190565b919050565b90815260200190565b60006104d8826112b8565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b60ff1690565b60005b838110156112f55781810151838201526020016112dd565b83811115611304576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b61133b816112a8565b8114610b4557600080fd5b61133b816112b3565b61133b816112d156fea365627a7a723158208698957312659699beaa26b9502079af9f919645eb56fae7a74c61ca36982f9f6c6578706572696d656e74616cf564736f6c63430005100040", "sourceMap": "841:807:141:-;;;1037:127;8:9:-1;5:2;;;30:1;27;20:12;5:2;1037:127:141;;;;;;;;;;;;;;;;;;;;;1133:6;1141:8;1151:2;963:6:105;955:5;:14;;;;;;;;;;;;:::i;:::-;-1:-1:-1;979:18:105;;;;:7;;:18;;;;;:::i;:::-;-1:-1:-1;1007:9:105;:22;;-1:-1:-1;;1007:22:105;;;;;;;;;;;;-1:-1:-1;841:807:141;;-1:-1:-1;;;841:807:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;841:807:141;;;-1:-1:-1;841:807:141;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;6:444:-1:-;;119:3;112:4;104:6;100:17;96:27;86:2;;137:1;134;127:12;86:2;167:6;161:13;189:65;204:49;246:6;204:49;;;189:65;;;180:74;;274:6;267:5;260:21;310:4;302:6;298:17;343:4;336:5;332:16;378:3;369:6;364:3;360:16;357:25;354:2;;;395:1;392;385:12;354:2;405:39;437:6;432:3;427;405:39;;;79:371;;;;;;;;458:597;;;610:2;598:9;589:7;585:23;581:32;578:2;;;626:1;623;616:12;578:2;661:24;;-1:-1;;;;;694:30;;691:2;;;737:1;734;727:12;691:2;757:74;823:7;814:6;803:9;799:22;757:74;;;747:84;;640:197;889:2;878:9;874:18;868:25;-1:-1;;;;;905:6;902:30;899:2;;;945:1;942;935:12;899:2;965:74;1031:7;1022:6;1011:9;1007:22;965:74;;;955:84;;847:198;572:483;;;;;;1062:256;1124:2;1118:9;1150:17;;;-1:-1;;;;;1210:34;;1246:22;;;1207:62;1204:2;;;1282:1;1279;1272:12;1204:2;1298;1291:22;1102:216;;-1:-1;1102:216;1325:322;;-1:-1;;;;;1461:6;1458:30;1455:2;;;1501:1;1498;1491:12;1455:2;-1:-1;1632:4;1568;1545:17;;;;-1:-1;;1541:33;1622:15;;1392:255;1655:268;1720:1;1727:101;1741:6;1738:1;1735:13;1727:101;;;1808:11;;;1802:18;1789:11;;;1782:39;1763:2;1756:10;1727:101;;;1843:6;1840:1;1837:13;1834:2;;;1908:1;1899:6;1894:3;1890:16;1883:27;1834:2;1704:219;;;;;;841:807:141;;;;;;", "deployedSourceMap": "841:807:141:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1208:9;:7;:9::i;:::-;841:807;1133:180:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1133:180:105;;;:::i;:::-;;;;;;;;;;;;;;;;3746:242:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3746:242:139;;;;;;;;:::i;:::-;;;;;;;;1918:196;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1918:196:139;;;;;;;;:::i;2120:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2120:83:139;;;:::i;:::-;;;;;;;;1009:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1009:32:139;;;:::i;1550:362::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1550:362:139;;;;;;;;:::i;3191:549::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3191:549:139;;;;;;;;:::i;1365:281:141:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1365:281:141;;;;;;;;:::i;1319:81:105:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1319:81:105;;;:::i;:::-;;;;;;;;2209:99:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2209:99:139;;;;;;;;:::i;1042:85:105:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1042:85:105;;;:::i;2811:374:139:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2811:374:139;;;;;;;;:::i;1415:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1415:129:139;;;;;;;;:::i;1164:82::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1164:82:139;;;;;;;;:::i;2314:128::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2314:128:139;;;;;;;;:::i;1252:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1252:157:139;;;;;;;;:::i;1230:129:141:-;1283:10;1274:20;;;;:8;:20;;;;;;;:33;;1298:9;1274:33;;;;;;1322:30;;;;;;;;;;;;;;;;1230:129::o;1133:180:105:-;1199:20;;1170:13;;1199:20;;1195:90;;;1235:39;;;;;;;;;;;;;;;;;;;1195:90;1301:5;1294:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1301:5;1294:12;;1301:5;1294:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1133:180;:::o;3746:242:139:-;3835:10;3811:4;3827:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:36;;;3878:82;3811:4;;3827:28;;3878:82;;;;3858:5;;3878:82;;;;;;;;;;-1:-1:-1;3977:4:139;3746:242;;;;;:::o;1918:196::-;1990:6;;:18;;2001:6;1990:18;:10;:18;:::i;:::-;1981:6;:27;;;2034:13;;;;;:8;:13;;;;;;:25;;2052:6;2034:25;:17;:25;:::i;:::-;2018:13;;;;;;;:8;:13;;;;;;;:41;;;;2074:33;;2088:4;;2074:33;;;;2100:6;;2074:33;;;;;;;;;;1918:196;;:::o;2120:83::-;2164:7;2190:6;2120:83;:::o;1009:32::-;;;;;;:::o;1550:362::-;1650:19;1672:18;1682:7;1672:9;:18::i;:::-;1650:40;;1732:11;1717;1708:6;:20;:35;;1700:61;;;;;;;;;;;;;;1791:23;:11;1807:6;1791:23;:15;:23;:::i;:::-;1771:17;;;;;;;:8;:17;;;;;:43;;;;1833:6;:18;;1844:6;1833:18;:10;:18;:::i;:::-;1824:6;:27;;;1866:39;;;;;;1824:6;1866:39;;;;1898:6;;1866:39;;;;;;;;;;1550:362;;;:::o;3191:549::-;3294:14;;;3270:4;3294:14;;;:8;:14;;;;;;:23;-1:-1:-1;3294:23:139;3286:71;;;;;;;;;;;;;;3375:13;;;;;;;:7;:13;;;;;;;;3389:10;3375:25;;;;;;;;:34;-1:-1:-1;3375:34:139;3367:84;;;;;;;;;;;;;;3477:12;;;;;;;:8;:12;;;;;;:23;;3494:5;3477:23;:16;:23;:::i;:::-;3462:12;;;;;;;;:8;:12;;;;;;:38;;;;3527:14;;;;;;;:25;;3546:5;3527:25;:18;:25;:::i;:::-;3510:14;;;;;;;:8;:14;;;;;;;;:42;;;;3590:7;:13;;;;;3604:10;3590:25;;;;;;:36;;3620:5;3590:36;:29;:36;:::i;:::-;3562:13;;;;;;;;:7;:13;;;;;;;;3576:10;3562:25;;;;;;;;;:64;;;;3641:71;;;;;;3562:13;3641:71;;;;3697:5;;3641:71;;;;;;;;;;-1:-1:-1;3729:4:139;3191:549;;;;;:::o;1365:281:141:-;1440:10;1431:20;;;;:8;:20;;;;;;:27;-1:-1:-1;1431:27:141;1410:114;;;;;;;;;;;;;;1544:10;1535:20;;;;:8;:20;;;;;:27;;;;;;;1572:25;;1559:3;1572:25;:20;:25;:::i;:::-;1623:10;1612:27;;;1635:3;1612:27;;;;;;;;;;;;;;;1365:281;:::o;1319:81:105:-;1384:9;;;;1319:81;:::o;2209:99:139:-;2288:13;;2262:7;2288:13;;;:8;:13;;;;;;;2209:99::o;1042:85:105:-;1113:7;1106:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1081:13;;1106:14;;1113:7;;1106:14;;1113:7;1106:14;;;;;;;;;;;;;;;;;;;;;;;;2811:374:139;2905:10;2872:4;2896:20;;;:8;:20;;;;;;:29;-1:-1:-1;2896:29:139;2888:64;;;;;;;;;;;;;;2995:10;2986:20;;;;:8;:20;;;;;;:31;;3011:5;2986:31;:24;:31;:::i;:::-;2972:10;2963:20;;;;:8;:20;;;;;;:54;;;;:20;3042:12;;;;;;:23;;3059:5;3042:23;:16;:23;:::i;:::-;3027:12;;;;;;;:8;:12;;;;;;;:38;;;;3080:77;;3102:10;;3080:77;;;;3142:5;;3080:77;;1415:129;1493:20;:44;;;;;;;;;;;;;1415:129::o;1164:82::-;1212:27;1220:10;1232:6;1212:7;:27::i;:::-;1164:82;:::o;2314:128::-;2412:14;;;;2386:7;2412:14;;;:7;:14;;;;;;;;:23;;;;;;;;;;;;;2314:128::o;1252:157::-;1322:17;;;;;;;:8;:17;;;;;;:26;;;1363:39;;;;;1342:6;;1363:39;;834:176:150;892:7;923:5;;;946:6;;;;938:46;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:150:o;1274:134::-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;2587:365:154:-;2701:6;2676:21;:31;;2668:73;;;;;;;;;;;;;;2807:12;2825:9;:14;;2846:6;2825:32;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2806:51:154;;;2875:7;2867:78;;;;;;;;;;;;;;2587:365;;;:::o;1732:187:150:-;1818:7;1853:12;1845:6;;;;1837:29;;;;;;;;;;;;;;;-1:-1:-1;;;1888:5:150;;;1732:187::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:124;206:20;;231:30;206:20;231:30;;273:130;340:20;;365:33;340:20;365:33;;410:241;;514:2;502:9;493:7;489:23;485:32;482:2;;;530:1;527;520:12;482:2;565:1;582:53;627:7;607:9;582:53;;;572:63;476:175;-1:-1;;;;476:175;658:366;;;779:2;767:9;758:7;754:23;750:32;747:2;;;795:1;792;785:12;747:2;830:1;847:53;892:7;872:9;847:53;;;837:63;;809:97;937:2;955:53;1000:7;991:6;980:9;976:22;955:53;;;945:63;;916:98;741:283;;;;;;1031:491;;;;1169:2;1157:9;1148:7;1144:23;1140:32;1137:2;;;1185:1;1182;1175:12;1137:2;1220:1;1237:53;1282:7;1262:9;1237:53;;;1227:63;;1199:97;1327:2;1345:53;1390:7;1381:6;1370:9;1366:22;1345:53;;;1335:63;;1306:98;1435:2;1453:53;1498:7;1489:6;1478:9;1474:22;1453:53;;;1443:63;;1414:98;1131:391;;;;;;1529:366;;;1650:2;1638:9;1629:7;1625:23;1621:32;1618:2;;;1666:1;1663;1656:12;1618:2;1701:1;1718:53;1763:7;1743:9;1718:53;;;1708:63;;1680:97;1808:2;1826:53;1871:7;1862:6;1851:9;1847:22;1826:53;;1902:235;;2003:2;1991:9;1982:7;1978:23;1974:32;1971:2;;;2019:1;2016;2009:12;1971:2;2054:1;2071:50;2113:7;2093:9;2071:50;;2144:241;;2248:2;2236:9;2227:7;2223:23;2219:32;2216:2;;;2264:1;2261;2254:12;2216:2;2299:1;2316:53;2361:7;2341:9;2316:53;;2392:104;2469:21;2484:5;2469:21;;;2464:3;2457:34;2451:45;;;2503:347;;2615:39;2648:5;2615:39;;;2666:71;2730:6;2725:3;2666:71;;;2659:78;;2742:52;2787:6;2782:3;2775:4;2768:5;2764:16;2742:52;;;2815:29;2837:6;2815:29;;;2806:39;;;;2595:255;-1:-1;;;2595:255;2858:329;;3018:67;3082:2;3077:3;3018:67;;;3118:31;3098:52;;3178:2;3169:12;;3004:183;-1:-1;;3004:183;3196:322;;3356:67;3420:2;3415:3;3356:67;;;3456:24;3436:45;;3509:2;3500:12;;3342:176;-1:-1;;3342:176;3527:327;;3687:67;3751:2;3746:3;3687:67;;;3787:29;3767:50;;3845:2;3836:12;;3673:181;-1:-1;;3673:181;3863:395;;4023:67;4087:2;4082:3;4023:67;;;4123:34;4103:55;;4192:28;4187:2;4178:12;;4171:50;4249:2;4240:12;;4009:249;-1:-1;;4009:249;4267:329;;4427:67;4491:2;4486:3;4427:67;;;4527:31;4507:52;;4587:2;4578:12;;4413:183;-1:-1;;4413:183;4605:374;;4765:67;4829:2;4824:3;4765:67;;;4865:34;4845:55;;4934:7;4929:2;4920:12;;4913:29;4970:2;4961:12;;4751:228;-1:-1;;4751:228;4988:377;;5148:67;5212:2;5207:3;5148:67;;;5248:34;5228:55;;5317:10;5312:2;5303:12;;5296:32;5356:2;5347:12;;5134:231;-1:-1;;5134:231;5374:372;;5534:67;5598:2;5593:3;5534:67;;;5634:34;5614:55;;5703:5;5698:2;5689:12;;5682:27;5737:2;5728:12;;5520:226;-1:-1;;5520:226;5755:296;;5932:83;6013:1;6008:3;5932:83;;6060:313;;6220:67;6284:2;6279:3;6220:67;;;6320:15;6300:36;;6364:2;6355:12;;6206:167;-1:-1;;6206:167;6381:113;6464:24;6482:5;6464:24;;6501:107;6580:22;6596:5;6580:22;;6615:370;;6813:147;6956:3;6813:147;;6992:201;7104:2;7089:18;;7118:65;7093:9;7156:6;7118:65;;7200:301;7338:2;7352:47;;;7323:18;;7413:78;7323:18;7477:6;7413:78;;7508:407;7699:2;7713:47;;;7684:18;;7774:131;7684:18;7774:131;;7922:407;8113:2;8127:47;;;8098:18;;8188:131;8098:18;8188:131;;8336:407;8527:2;8541:47;;;8512:18;;8602:131;8512:18;8602:131;;8750:407;8941:2;8955:47;;;8926:18;;9016:131;8926:18;9016:131;;9164:407;9355:2;9369:47;;;9340:18;;9430:131;9340:18;9430:131;;9578:407;9769:2;9783:47;;;9754:18;;9844:131;9754:18;9844:131;;9992:407;10183:2;10197:47;;;10168:18;;10258:131;10168:18;10258:131;;10406:407;10597:2;10611:47;;;10582:18;;10672:131;10582:18;10672:131;;10820:407;11011:2;11025:47;;;10996:18;;11086:131;10996:18;11086:131;;11234:213;11352:2;11337:18;;11366:71;11341:9;11410:6;11366:71;;11454:205;11568:2;11553:18;;11582:67;11557:9;11622:6;11582:67;;11666