diff --git a/packages/contracts/hardhat.config.ts b/packages/contracts/hardhat.config.ts index 3f4057d..c1dab02 100644 --- a/packages/contracts/hardhat.config.ts +++ b/packages/contracts/hardhat.config.ts @@ -10,7 +10,7 @@ import type { HttpNetworkUserConfig } from "hardhat/types"; dotenv.config(); const { INFURA_KEY, MNEMONIC, ETHERSCAN_API_KEY, PK } = process.env; -import "./src/tasks/setup"; +import "./tasks/setup"; import "./tasks/mastercopy-deploy"; import "./tasks/mastercopy-extract"; import "./tasks/mastercopy-verify"; diff --git a/packages/contracts/mastercopies.json b/packages/contracts/mastercopies.json index de23c1c..9a4322c 100644 --- a/packages/contracts/mastercopies.json +++ b/packages/contracts/mastercopies.json @@ -9,13 +9,7 @@ "address": "0xc67f5aD16f91BAf6839BBBbf98549453b1B02C68", "bytecode": "0x60806040523480156200001157600080fd5b50604051620046ba380380620046ba8339818101604052810190620000379190620008c0565b6001606981905550600085858585856040516020016200005c95949392919062000a1c565b60405160208183030381529060405290506200007e816200008a60201b60201c565b50505050505062000cce565b600080600080600085806020019051810190620000a8919062000838565b94509450945094509450620000c26200031f60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012c9062000b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019f9062000a9b565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002bd856200041e60201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b6e848bcb9ab7cb2c546075f85f11bb4e96cbcbcb49aab03e65f45c33c621360405160405180910390a3505050505050565b600060019054906101000a900460ff168062000346575060008054906101000a900460ff16155b62000388576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620003d9576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620003e96200053460201b60201c565b620003f96200061360201b60201c565b80156200041b5760008060016101000a81548160ff0219169083151502179055505b50565b6200042e6200071260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004546200071a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a49062000adf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005179062000a79565b60405180910390fd5b62000531816200074460201b60201c565b50565b600060019054906101000a900460ff16806200055b575060008054906101000a900460ff16155b6200059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005949062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620005ee576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015620006105760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806200063a575060008054906101000a900460ff16155b6200067c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006739062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620006cd576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620006ed620006e16200071260201b60201c565b6200074460201b60201c565b80156200070f5760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200081b8162000c9a565b92915050565b600081519050620008328162000cb4565b92915050565b600080600080600060a0868803121562000857576200085662000b7c565b5b6000620008678882890162000821565b95505060206200087a8882890162000821565b94505060406200088d8882890162000821565b9350506060620008a08882890162000821565b9250506080620008b38882890162000821565b9150509295509295909350565b600080600080600060a08688031215620008df57620008de62000b7c565b5b6000620008ef888289016200080a565b955050602062000902888289016200080a565b945050604062000915888289016200080a565b935050606062000928888289016200080a565b92505060806200093b888289016200080a565b9150509295509295909350565b620009538162000b34565b82525050565b60006200096860268362000b23565b9150620009758262000b81565b604082019050919050565b60006200098f601e8362000b23565b91506200099c8262000bd0565b602082019050919050565b6000620009b6602e8362000b23565b9150620009c38262000bf9565b604082019050919050565b6000620009dd60208362000b23565b9150620009ea8262000c48565b602082019050919050565b600062000a04601e8362000b23565b915062000a118262000c71565b602082019050919050565b600060a08201905062000a33600083018862000948565b62000a42602083018762000948565b62000a51604083018662000948565b62000a60606083018562000948565b62000a6f608083018462000948565b9695505050505050565b6000602082019050818103600083015262000a948162000959565b9050919050565b6000602082019050818103600083015262000ab68162000980565b9050919050565b6000602082019050818103600083015262000ad881620009a7565b9050919050565b6000602082019050818103600083015262000afa81620009ce565b9050919050565b6000602082019050818103600083015262000b1c81620009f5565b9050919050565b600082825260208201905092915050565b600062000b418262000b5c565b9050919050565b600062000b558262000b5c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b62000ca58162000b34565b811462000cb157600080fd5b50565b62000cbf8162000b48565b811462000ccb57600080fd5b50565b6139dc8062000cde6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063b68877101161007c578063b6887710146102ee578063c91063891461031e578063d4b839921461033c578063e19a9dd91461035a578063ef96880414610376578063f2fde38b1461039257610137565b80638da5cb5b1461025e5780639358928b1461027c578063a4f9edbf1461029a578063ac346e89146102b6578063af20af8a146102d257610137565b8063715018a6116100ff578063715018a6146101e0578063776d1a01146101ea5780637c89d2f0146102065780637ceab3b114610224578063826bec451461024257610137565b806301ffc9a71461013c57806302ada99c1461016c578063086cfca8146101885780632b112e49146101a45780635aef7de6146101c2575b600080fd5b61015660048036038101906101519190612778565b6103ae565b6040516101639190612e01565b60405180910390f35b61018660048036038101906101819190612656565b610410565b005b6101a2600480360381019061019d9190612656565b6104d0565b005b6101ac610612565b6040516101b991906130f8565b60405180910390f35b6101ca6106b9565b6040516101d79190612c81565b60405180910390f35b6101e86106df565b005b61020460048036038101906101ff9190612656565b610767565b005b61020e6108a9565b60405161021b9190612e7b565b60405180910390f35b61022c6108cf565b6040516102399190612c81565b60405180910390f35b61025c600480360381019061025791906126fe565b6108f5565b005b610266610ad3565b6040516102739190612c81565b60405180910390f35b610284610afd565b6040516102919190612e60565b60405180910390f35b6102b460048036038101906102af91906127a5565b610b23565b005b6102d060048036038101906102cb91906126fe565b610da0565b005b6102ec60048036038101906102e7919061281b565b610f7d565b005b61030860048036038101906103039190612656565b61128f565b6040516103159190612e01565b60405180910390f35b6103266112af565b6040516103339190612c81565b60405180910390f35b6103446112d9565b6040516103519190612c81565b60405180910390f35b610374600480360381019061036f9190612656565b6112ff565b005b610390600480360381019061038b9190612656565b611535565b005b6103ac60048036038101906103a79190612656565b6115f5565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610409575063af20af8a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6104186116ed565b73ffffffffffffffffffffffffffffffffffffffff16610436610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048390612f98565b60405180910390fd5b80606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6104d86116ed565b73ffffffffffffffffffffffffffffffffffffffff166104f6610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461054c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054390612f98565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b6000606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4ce63c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561067c57600080fd5b505afa158015610690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b491906127ee565b905090565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6106e76116ed565b73ffffffffffffffffffffffffffffffffffffffff16610705610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290612f98565b60405180910390fd5b61076560006116f5565b565b61076f6116ed565b73ffffffffffffffffffffffffffffffffffffffff1661078d610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90612f98565b60405180910390fd5b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108fd6116ed565b73ffffffffffffffffffffffffffffffffffffffff1661091b610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612f98565b60405180910390fd5b60005b828290508160ff161015610ace576068600084848460ff1681811061099c5761099b6134a6565b5b90506020020160208101906109b19190612656565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090612fd8565b60405180910390fd5b60016068600085858560ff16818110610a5557610a546134a6565b5b9050602002016020810190610a6a9190612656565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ac6906133ef565b915050610974565b505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600085806020019051810190610b3f9190612683565b94509450945094509450610b516117bb565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890612fb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890612f38565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d3e856115f5565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b6e848bcb9ab7cb2c546075f85f11bb4e96cbcbcb49aab03e65f45c33c621360405160405180910390a3505050505050565b610da86116ed565b73ffffffffffffffffffffffffffffffffffffffff16610dc6610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390612f98565b60405180910390fd5b60005b828290508160ff161015610f78576068600084848460ff16818110610e4757610e466134a6565b5b9050602002016020810190610e5c9190612656565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda90612eb8565b60405180910390fd5b60006068600085858560ff16818110610eff57610efe6134a6565b5b9050602002016020810190610f149190612656565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f70906133ef565b915050610e1f565b505050565b60026069541415610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba906130b8565b60405180910390fd5b600260698190555082606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016110279190612c81565b60206040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107791906127ee565b10156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90613018565b60405180910390fd5b60005b828290508160ff16101561119757606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683838360ff16818110611118576111176134a6565b5b905060200201602081019061112d9190612656565b73ffffffffffffffffffffffffffffffffffffffff161415611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b90613058565b60405180910390fd5b808061118f906133ef565b9150506110bb565b506000836111a3610612565b6040516020016111b4929190613113565b604051602081830303815290604052905061123633606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166118a4909392919063ffffffff16565b611281838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508261192d565b506001606981905550505050565b60686020528060005260406000206000915054906101000a900460ff1681565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113076116ed565b73ffffffffffffffffffffffffffffffffffffffff16611325610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290612f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611498578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016114089190612e45565b60206040518083038186803b15801561142057600080fd5b505afa158015611434573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611458919061274b565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90612ff8565b60405180910390fd5b5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161152a9190612c81565b60405180910390a150565b61153d6116ed565b73ffffffffffffffffffffffffffffffffffffffff1661155b610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890612f98565b60405180910390fd5b80606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115fd6116ed565b73ffffffffffffffffffffffffffffffffffffffff1661161b610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890612f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890612ef8565b60405180910390fd5b6116ea816116f5565b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff16806117e1575060008054906101000a900460ff16155b611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790612f58565b60405180910390fd5b60008060019054906101000a900460ff161590508015611870576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611878611c7b565b611880611d54565b80156118a15760008060016101000a81548160ff0219169083151502179055505b50565b611927846323b872dd60e01b8585856040516024016118c593929190612c9c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e3d565b50505050565b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163111156119bc576119bb336119b6606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163184611f04565b611f42565b5b60008060005b84518160ff161015611c315760686000868360ff16815181106119e8576119e76134a6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90613098565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611aa557611aa46134a6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1611611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa906130d8565b60405180910390fd5b848160ff1681518110611b1957611b186134a6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a08231606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611b7b9190612c81565b60206040518083038186803b158015611b9357600080fd5b505afa158015611ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcb91906127ee565b9150611bfe858260ff1681518110611be657611be56134a6565b5b602002602001015133611bf98588611f04565b611fc7565b848160ff1681518110611c1457611c136134a6565b5b602002602001015192508080611c29906133ef565b9150506119c2565b503373ffffffffffffffffffffffffffffffffffffffff167f19713765ac35da5948240df5d5347716cd4dc3815a2890a3c94df4a1e745136a60405160405180910390a250505050565b600060019054906101000a900460ff1680611ca1575060008054906101000a900460ff16155b611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790612f58565b60405180910390fd5b60008060019054906101000a900460ff161590508015611d30576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611d515760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611d7a575060008054906101000a900460ff16155b611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090612f58565b60405180910390fd5b60008060019054906101000a900460ff161590508015611e09576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611e19611e146116ed565b6116f5565b8015611e3a5760008060016101000a81548160ff0219169083151502179055505b50565b6000611e9f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120779092919063ffffffff16565b9050600081511115611eff5780806020019051810190611ebf919061274b565b611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590613078565b60405180910390fd5b5b505050565b600080600083806020019051810190611f1d919061287b565b91509150808583611f2e9190613206565b611f3891906131d5565b9250505092915050565b611f8482826040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250600061208f565b611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba90612f78565b60405180910390fd5b5050565b600063a9059cbb8383604051602401611fe1929190612cd3565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061203284600083600061208f565b612071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206890612ed8565b60405180910390fd5b50505050565b60606120868484600085612384565b90509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c157606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528686868660008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b815260040161218e9b9a99989796959493929190612d48565b600060405180830381600087803b1580156121a857600080fd5b505af11580156121bc573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b81526004016122229493929190612cfc565b602060405180830381600087803b15801561223c57600080fd5b505af1158015612250573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612274919061274b565b9050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237c57606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401612349929190612e1c565b600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b505050505b949350505050565b6060824710156123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090612f18565b60405180910390fd5b6123d285612498565b612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240890613038565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161243a9190612c6a565b60006040518083038185875af1925050503d8060008114612477576040519150601f19603f3d011682016040523d82523d6000602084013e61247c565b606091505b509150915061248c8282866124ab565b92505050949350505050565b600080823b905060008111915050919050565b606083156124bb5782905061250b565b6000835111156124ce5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125029190612e96565b60405180910390fd5b9392505050565b600061252561252084613161565b61313c565b90508281526020810184848401111561254157612540613513565b5b61254c84828561337c565b509392505050565b60008135905061256381613933565b92915050565b6000815190506125788161394a565b92915050565b60008083601f84011261259457612593613509565b5b8235905067ffffffffffffffff8111156125b1576125b0613504565b5b6020830191508360208202830111156125cd576125cc61350e565b5b9250929050565b6000815190506125e381613961565b92915050565b6000813590506125f881613978565b92915050565b600082601f83011261261357612612613509565b5b8135612623848260208601612512565b91505092915050565b60008135905061263b8161398f565b92915050565b6000815190506126508161398f565b92915050565b60006020828403121561266c5761266b61351d565b5b600061267a84828501612554565b91505092915050565b600080600080600060a0868803121561269f5761269e61351d565b5b60006126ad88828901612569565b95505060206126be88828901612569565b94505060406126cf88828901612569565b93505060606126e088828901612569565b92505060806126f188828901612569565b9150509295509295909350565b600080602083850312156127155761271461351d565b5b600083013567ffffffffffffffff81111561273357612732613518565b5b61273f8582860161257e565b92509250509250929050565b6000602082840312156127615761276061351d565b5b600061276f848285016125d4565b91505092915050565b60006020828403121561278e5761278d61351d565b5b600061279c848285016125e9565b91505092915050565b6000602082840312156127bb576127ba61351d565b5b600082013567ffffffffffffffff8111156127d9576127d8613518565b5b6127e5848285016125fe565b91505092915050565b6000602082840312156128045761280361351d565b5b600061281284828501612641565b91505092915050565b6000806000604084860312156128345761283361351d565b5b60006128428682870161262c565b935050602084013567ffffffffffffffff81111561286357612862613518565b5b61286f8682870161257e565b92509250509250925092565b600080604083850312156128925761289161351d565b5b60006128a085828601612641565b92505060206128b185828601612641565b9150509250929050565b6128c481613272565b82525050565b6128d381613260565b82525050565b6128e281613284565b82525050565b6128f181613290565b82525050565b6129008161329a565b82525050565b600061291182613192565b61291b81856131a8565b935061292b81856020860161338b565b61293481613522565b840191505092915050565b600061294a82613192565b61295481856131b9565b935061296481856020860161338b565b80840191505092915050565b61297981613310565b82525050565b61298881613334565b82525050565b61299781613358565b82525050565b6129a68161336a565b82525050565b60006129b78261319d565b6129c181856131c4565b93506129d181856020860161338b565b6129da81613522565b840191505092915050565b60006129f26010836131c4565b91506129fd82613533565b602082019050919050565b6000612a156017836131c4565b9150612a208261355c565b602082019050919050565b6000612a386026836131c4565b9150612a4382613585565b604082019050919050565b6000612a5b6026836131c4565b9150612a66826135d4565b604082019050919050565b6000612a7e601e836131c4565b9150612a8982613623565b602082019050919050565b6000612aa1602e836131c4565b9150612aac8261364c565b604082019050919050565b6000612ac4601e836131c4565b9150612acf8261369b565b602082019050919050565b6000612ae76020836131c4565b9150612af2826136c4565b602082019050919050565b6000612b0a601e836131c4565b9150612b15826136ed565b602082019050919050565b6000612b2d6014836131c4565b9150612b3882613716565b602082019050919050565b6000612b506020836131c4565b9150612b5b8261373f565b602082019050919050565b6000612b736028836131c4565b9150612b7e82613768565b604082019050919050565b6000612b96601d836131c4565b9150612ba1826137b7565b602082019050919050565b6000612bb96022836131c4565b9150612bc4826137e0565b604082019050919050565b6000612bdc602a836131c4565b9150612be78261382f565b604082019050919050565b6000612bff600c836131c4565b9150612c0a8261387e565b602082019050919050565b6000612c22601f836131c4565b9150612c2d826138a7565b602082019050919050565b6000612c456030836131c4565b9150612c50826138d0565b604082019050919050565b612c64816132f9565b82525050565b6000612c76828461293f565b915081905092915050565b6000602082019050612c9660008301846128ca565b92915050565b6000606082019050612cb160008301866128ca565b612cbe60208301856128ca565b612ccb6040830184612c5b565b949350505050565b6000604082019050612ce860008301856128ca565b612cf56020830184612c5b565b9392505050565b6000608082019050612d1160008301876128ca565b612d1e6020830186612c5b565b8181036040830152612d308185612906565b9050612d3f606083018461298e565b95945050505050565b600061016082019050612d5e600083018e6128ca565b612d6b602083018d612c5b565b8181036040830152612d7d818c612906565b9050612d8c606083018b61298e565b612d99608083018a61299d565b612da660a083018961299d565b612db360c083018861299d565b612dc060e08301876128ca565b612dce6101008301866128bb565b818103610120830152612de18185612906565b9050612df16101408301846128ca565b9c9b505050505050505050505050565b6000602082019050612e1660008301846128d9565b92915050565b6000604082019050612e3160008301856128e8565b612e3e60208301846128d9565b9392505050565b6000602082019050612e5a60008301846128f7565b92915050565b6000602082019050612e756000830184612970565b92915050565b6000602082019050612e90600083018461297f565b92915050565b60006020820190508181036000830152612eb081846129ac565b905092915050565b60006020820190508181036000830152612ed1816129e5565b9050919050565b60006020820190508181036000830152612ef181612a08565b9050919050565b60006020820190508181036000830152612f1181612a2b565b9050919050565b60006020820190508181036000830152612f3181612a4e565b9050919050565b60006020820190508181036000830152612f5181612a71565b9050919050565b60006020820190508181036000830152612f7181612a94565b9050919050565b60006020820190508181036000830152612f9181612ab7565b9050919050565b60006020820190508181036000830152612fb181612ada565b9050919050565b60006020820190508181036000830152612fd181612afd565b9050919050565b60006020820190508181036000830152612ff181612b20565b9050919050565b6000602082019050818103600083015261301181612b43565b9050919050565b6000602082019050818103600083015261303181612b66565b9050919050565b6000602082019050818103600083015261305181612b89565b9050919050565b6000602082019050818103600083015261307181612bac565b9050919050565b6000602082019050818103600083015261309181612bcf565b9050919050565b600060208201905081810360008301526130b181612bf2565b9050919050565b600060208201905081810360008301526130d181612c15565b9050919050565b600060208201905081810360008301526130f181612c38565b9050919050565b600060208201905061310d6000830184612c5b565b92915050565b60006040820190506131286000830185612c5b565b6131356020830184612c5b565b9392505050565b6000613146613157565b905061315282826133be565b919050565b6000604051905090565b600067ffffffffffffffff82111561317c5761317b6134d5565b5b61318582613522565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006131e0826132f9565b91506131eb836132f9565b9250826131fb576131fa613448565b5b828204905092915050565b6000613211826132f9565b915061321c836132f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561325557613254613419565b5b828202905092915050565b600061326b826132d9565b9050919050565b600061327d826132d9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506132d48261391f565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061331b82613322565b9050919050565b600061332d826132d9565b9050919050565b600061333f82613346565b9050919050565b6000613351826132d9565b9050919050565b6000613363826132c6565b9050919050565b6000613375826132f9565b9050919050565b82818337600083830152505050565b60005b838110156133a957808201518184015260208101905061338e565b838111156133b8576000848401525b50505050565b6133c782613522565b810181811067ffffffffffffffff821117156133e6576133e56134d5565b5b80604052505050565b60006133fa82613303565b915060ff82141561340e5761340d613419565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f546f6b656e206e6f742064656e69656400000000000000000000000000000000600082015250565b7f4572726f72206f6e20746f6b656e207472616e73666572000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4572726f72206f6e206e6174697665206173736574207472616e736665720000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f546f6b656e20616c72656164792064656e696564000000000000000000000000600082015250565b7f477561726420646f6573206e6f7420696d706c656d656e742049455243313635600082015250565b7f416d6f756e7420746f2072656465656d2069732067726561746572207468616e60008201527f2062616c616e6365000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f44657369676e6174656420746f6b656e2063616e27742062652072656465656d60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f44656e69656420746f6b656e0000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f746f6b656e735b5d206973206f7574206f66206f72646572206f7220636f6e7460008201527f61696e732061206475706c696361746500000000000000000000000000000000602082015250565b600281106139305761392f613477565b5b50565b61393c81613260565b811461394757600080fd5b50565b61395381613272565b811461395e57600080fd5b50565b61396a81613284565b811461397557600080fd5b50565b6139818161329a565b811461398c57600080fd5b50565b613998816132f9565b81146139a357600080fd5b5056fea26469706673582212208c65cc2f2a81895da88aec1d287825dfca91c2a1e56b0960e857a8827a2d7fc264736f6c63430008060033", "constructorArgs": { - "types": [ - "address", - "address", - "address", - "address", - "address" - ], + "types": ["address", "address", "address", "address", "address"], "values": [ "0x0000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000001", @@ -562,9 +556,7 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { @@ -582,13 +574,7 @@ "address": "0x3ed380a282aDfA3460da28560ebEB2F6D967C9f5", "bytecode": "0x60806040523480156200001157600080fd5b50604051620046ba380380620046ba8339818101604052810190620000379190620008c0565b6001606981905550600085858585856040516020016200005c95949392919062000a1c565b60405160208183030381529060405290506200007e816200008a60201b60201c565b50505050505062000cce565b600080600080600085806020019051810190620000a8919062000838565b94509450945094509450620000c26200031f60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012c9062000b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019f9062000a9b565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002bd856200041e60201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b6e848bcb9ab7cb2c546075f85f11bb4e96cbcbcb49aab03e65f45c33c621360405160405180910390a3505050505050565b600060019054906101000a900460ff168062000346575060008054906101000a900460ff16155b62000388576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620003d9576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620003e96200053460201b60201c565b620003f96200061360201b60201c565b80156200041b5760008060016101000a81548160ff0219169083151502179055505b50565b6200042e6200071260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004546200071a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a49062000adf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005179062000a79565b60405180910390fd5b62000531816200074460201b60201c565b50565b600060019054906101000a900460ff16806200055b575060008054906101000a900460ff16155b6200059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005949062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620005ee576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015620006105760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806200063a575060008054906101000a900460ff16155b6200067c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006739062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620006cd576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620006ed620006e16200071260201b60201c565b6200074460201b60201c565b80156200070f5760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200081b8162000c9a565b92915050565b600081519050620008328162000cb4565b92915050565b600080600080600060a0868803121562000857576200085662000b7c565b5b6000620008678882890162000821565b95505060206200087a8882890162000821565b94505060406200088d8882890162000821565b9350506060620008a08882890162000821565b9250506080620008b38882890162000821565b9150509295509295909350565b600080600080600060a08688031215620008df57620008de62000b7c565b5b6000620008ef888289016200080a565b955050602062000902888289016200080a565b945050604062000915888289016200080a565b935050606062000928888289016200080a565b92505060806200093b888289016200080a565b9150509295509295909350565b620009538162000b34565b82525050565b60006200096860268362000b23565b9150620009758262000b81565b604082019050919050565b60006200098f601e8362000b23565b91506200099c8262000bd0565b602082019050919050565b6000620009b6602e8362000b23565b9150620009c38262000bf9565b604082019050919050565b6000620009dd60208362000b23565b9150620009ea8262000c48565b602082019050919050565b600062000a04601e8362000b23565b915062000a118262000c71565b602082019050919050565b600060a08201905062000a33600083018862000948565b62000a42602083018762000948565b62000a51604083018662000948565b62000a60606083018562000948565b62000a6f608083018462000948565b9695505050505050565b6000602082019050818103600083015262000a948162000959565b9050919050565b6000602082019050818103600083015262000ab68162000980565b9050919050565b6000602082019050818103600083015262000ad881620009a7565b9050919050565b6000602082019050818103600083015262000afa81620009ce565b9050919050565b6000602082019050818103600083015262000b1c81620009f5565b9050919050565b600082825260208201905092915050565b600062000b418262000b5c565b9050919050565b600062000b558262000b5c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b62000ca58162000b34565b811462000cb157600080fd5b50565b62000cbf8162000b48565b811462000ccb57600080fd5b50565b6139dc8062000cde6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063b68877101161007c578063b6887710146102ee578063c91063891461031e578063d4b839921461033c578063e19a9dd91461035a578063ef96880414610376578063f2fde38b1461039257610137565b80638da5cb5b1461025e5780639358928b1461027c578063a4f9edbf1461029a578063ac346e89146102b6578063af20af8a146102d257610137565b8063715018a6116100ff578063715018a6146101e0578063776d1a01146101ea5780637c89d2f0146102065780637ceab3b114610224578063826bec451461024257610137565b806301ffc9a71461013c57806302ada99c1461016c578063086cfca8146101885780632b112e49146101a45780635aef7de6146101c2575b600080fd5b61015660048036038101906101519190612778565b6103ae565b6040516101639190612e01565b60405180910390f35b61018660048036038101906101819190612656565b610410565b005b6101a2600480360381019061019d9190612656565b6104d0565b005b6101ac610612565b6040516101b991906130f8565b60405180910390f35b6101ca6106b9565b6040516101d79190612c81565b60405180910390f35b6101e86106df565b005b61020460048036038101906101ff9190612656565b610767565b005b61020e6108a9565b60405161021b9190612e7b565b60405180910390f35b61022c6108cf565b6040516102399190612c81565b60405180910390f35b61025c600480360381019061025791906126fe565b6108f5565b005b610266610ad3565b6040516102739190612c81565b60405180910390f35b610284610afd565b6040516102919190612e60565b60405180910390f35b6102b460048036038101906102af91906127a5565b610b23565b005b6102d060048036038101906102cb91906126fe565b610da0565b005b6102ec60048036038101906102e7919061281b565b610f7d565b005b61030860048036038101906103039190612656565b61128f565b6040516103159190612e01565b60405180910390f35b6103266112af565b6040516103339190612c81565b60405180910390f35b6103446112d9565b6040516103519190612c81565b60405180910390f35b610374600480360381019061036f9190612656565b6112ff565b005b610390600480360381019061038b9190612656565b611535565b005b6103ac60048036038101906103a79190612656565b6115f5565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610409575063af20af8a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6104186116ed565b73ffffffffffffffffffffffffffffffffffffffff16610436610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048390612f98565b60405180910390fd5b80606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6104d86116ed565b73ffffffffffffffffffffffffffffffffffffffff166104f6610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461054c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054390612f98565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b6000606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4ce63c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561067c57600080fd5b505afa158015610690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b491906127ee565b905090565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6106e76116ed565b73ffffffffffffffffffffffffffffffffffffffff16610705610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290612f98565b60405180910390fd5b61076560006116f5565b565b61076f6116ed565b73ffffffffffffffffffffffffffffffffffffffff1661078d610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90612f98565b60405180910390fd5b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108fd6116ed565b73ffffffffffffffffffffffffffffffffffffffff1661091b610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612f98565b60405180910390fd5b60005b828290508160ff161015610ace576068600084848460ff1681811061099c5761099b6134a6565b5b90506020020160208101906109b19190612656565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090612fd8565b60405180910390fd5b60016068600085858560ff16818110610a5557610a546134a6565b5b9050602002016020810190610a6a9190612656565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ac6906133ef565b915050610974565b505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600085806020019051810190610b3f9190612683565b94509450945094509450610b516117bb565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890612fb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890612f38565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d3e856115f5565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b6e848bcb9ab7cb2c546075f85f11bb4e96cbcbcb49aab03e65f45c33c621360405160405180910390a3505050505050565b610da86116ed565b73ffffffffffffffffffffffffffffffffffffffff16610dc6610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390612f98565b60405180910390fd5b60005b828290508160ff161015610f78576068600084848460ff16818110610e4757610e466134a6565b5b9050602002016020810190610e5c9190612656565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda90612eb8565b60405180910390fd5b60006068600085858560ff16818110610eff57610efe6134a6565b5b9050602002016020810190610f149190612656565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f70906133ef565b915050610e1f565b505050565b60026069541415610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba906130b8565b60405180910390fd5b600260698190555082606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016110279190612c81565b60206040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107791906127ee565b10156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90613018565b60405180910390fd5b60005b828290508160ff16101561119757606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683838360ff16818110611118576111176134a6565b5b905060200201602081019061112d9190612656565b73ffffffffffffffffffffffffffffffffffffffff161415611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b90613058565b60405180910390fd5b808061118f906133ef565b9150506110bb565b506000836111a3610612565b6040516020016111b4929190613113565b604051602081830303815290604052905061123633606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166118a4909392919063ffffffff16565b611281838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508261192d565b506001606981905550505050565b60686020528060005260406000206000915054906101000a900460ff1681565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113076116ed565b73ffffffffffffffffffffffffffffffffffffffff16611325610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290612f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611498578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016114089190612e45565b60206040518083038186803b15801561142057600080fd5b505afa158015611434573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611458919061274b565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90612ff8565b60405180910390fd5b5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161152a9190612c81565b60405180910390a150565b61153d6116ed565b73ffffffffffffffffffffffffffffffffffffffff1661155b610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890612f98565b60405180910390fd5b80606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115fd6116ed565b73ffffffffffffffffffffffffffffffffffffffff1661161b610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890612f98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890612ef8565b60405180910390fd5b6116ea816116f5565b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff16806117e1575060008054906101000a900460ff16155b611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790612f58565b60405180910390fd5b60008060019054906101000a900460ff161590508015611870576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611878611c7b565b611880611d54565b80156118a15760008060016101000a81548160ff0219169083151502179055505b50565b611927846323b872dd60e01b8585856040516024016118c593929190612c9c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e3d565b50505050565b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163111156119bc576119bb336119b6606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163184611f04565b611f42565b5b60008060005b84518160ff161015611c315760686000868360ff16815181106119e8576119e76134a6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90613098565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611aa557611aa46134a6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1611611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa906130d8565b60405180910390fd5b848160ff1681518110611b1957611b186134a6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a08231606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611b7b9190612c81565b60206040518083038186803b158015611b9357600080fd5b505afa158015611ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcb91906127ee565b9150611bfe858260ff1681518110611be657611be56134a6565b5b602002602001015133611bf98588611f04565b611fc7565b848160ff1681518110611c1457611c136134a6565b5b602002602001015192508080611c29906133ef565b9150506119c2565b503373ffffffffffffffffffffffffffffffffffffffff167f19713765ac35da5948240df5d5347716cd4dc3815a2890a3c94df4a1e745136a60405160405180910390a250505050565b600060019054906101000a900460ff1680611ca1575060008054906101000a900460ff16155b611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790612f58565b60405180910390fd5b60008060019054906101000a900460ff161590508015611d30576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611d515760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611d7a575060008054906101000a900460ff16155b611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090612f58565b60405180910390fd5b60008060019054906101000a900460ff161590508015611e09576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611e19611e146116ed565b6116f5565b8015611e3a5760008060016101000a81548160ff0219169083151502179055505b50565b6000611e9f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120779092919063ffffffff16565b9050600081511115611eff5780806020019051810190611ebf919061274b565b611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590613078565b60405180910390fd5b5b505050565b600080600083806020019051810190611f1d919061287b565b91509150808583611f2e9190613206565b611f3891906131d5565b9250505092915050565b611f8482826040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250600061208f565b611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba90612f78565b60405180910390fd5b5050565b600063a9059cbb8383604051602401611fe1929190612cd3565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905061203284600083600061208f565b612071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206890612ed8565b60405180910390fd5b50505050565b60606120868484600085612384565b90509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c157606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528686868660008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b815260040161218e9b9a99989796959493929190612d48565b600060405180830381600087803b1580156121a857600080fd5b505af11580156121bc573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b81526004016122229493929190612cfc565b602060405180830381600087803b15801561223c57600080fd5b505af1158015612250573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612274919061274b565b9050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237c57606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401612349929190612e1c565b600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b505050505b949350505050565b6060824710156123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090612f18565b60405180910390fd5b6123d285612498565b612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240890613038565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161243a9190612c6a565b60006040518083038185875af1925050503d8060008114612477576040519150601f19603f3d011682016040523d82523d6000602084013e61247c565b606091505b509150915061248c8282866124ab565b92505050949350505050565b600080823b905060008111915050919050565b606083156124bb5782905061250b565b6000835111156124ce5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125029190612e96565b60405180910390fd5b9392505050565b600061252561252084613161565b61313c565b90508281526020810184848401111561254157612540613513565b5b61254c84828561337c565b509392505050565b60008135905061256381613933565b92915050565b6000815190506125788161394a565b92915050565b60008083601f84011261259457612593613509565b5b8235905067ffffffffffffffff8111156125b1576125b0613504565b5b6020830191508360208202830111156125cd576125cc61350e565b5b9250929050565b6000815190506125e381613961565b92915050565b6000813590506125f881613978565b92915050565b600082601f83011261261357612612613509565b5b8135612623848260208601612512565b91505092915050565b60008135905061263b8161398f565b92915050565b6000815190506126508161398f565b92915050565b60006020828403121561266c5761266b61351d565b5b600061267a84828501612554565b91505092915050565b600080600080600060a0868803121561269f5761269e61351d565b5b60006126ad88828901612569565b95505060206126be88828901612569565b94505060406126cf88828901612569565b93505060606126e088828901612569565b92505060806126f188828901612569565b9150509295509295909350565b600080602083850312156127155761271461351d565b5b600083013567ffffffffffffffff81111561273357612732613518565b5b61273f8582860161257e565b92509250509250929050565b6000602082840312156127615761276061351d565b5b600061276f848285016125d4565b91505092915050565b60006020828403121561278e5761278d61351d565b5b600061279c848285016125e9565b91505092915050565b6000602082840312156127bb576127ba61351d565b5b600082013567ffffffffffffffff8111156127d9576127d8613518565b5b6127e5848285016125fe565b91505092915050565b6000602082840312156128045761280361351d565b5b600061281284828501612641565b91505092915050565b6000806000604084860312156128345761283361351d565b5b60006128428682870161262c565b935050602084013567ffffffffffffffff81111561286357612862613518565b5b61286f8682870161257e565b92509250509250925092565b600080604083850312156128925761289161351d565b5b60006128a085828601612641565b92505060206128b185828601612641565b9150509250929050565b6128c481613272565b82525050565b6128d381613260565b82525050565b6128e281613284565b82525050565b6128f181613290565b82525050565b6129008161329a565b82525050565b600061291182613192565b61291b81856131a8565b935061292b81856020860161338b565b61293481613522565b840191505092915050565b600061294a82613192565b61295481856131b9565b935061296481856020860161338b565b80840191505092915050565b61297981613310565b82525050565b61298881613334565b82525050565b61299781613358565b82525050565b6129a68161336a565b82525050565b60006129b78261319d565b6129c181856131c4565b93506129d181856020860161338b565b6129da81613522565b840191505092915050565b60006129f26010836131c4565b91506129fd82613533565b602082019050919050565b6000612a156017836131c4565b9150612a208261355c565b602082019050919050565b6000612a386026836131c4565b9150612a4382613585565b604082019050919050565b6000612a5b6026836131c4565b9150612a66826135d4565b604082019050919050565b6000612a7e601e836131c4565b9150612a8982613623565b602082019050919050565b6000612aa1602e836131c4565b9150612aac8261364c565b604082019050919050565b6000612ac4601e836131c4565b9150612acf8261369b565b602082019050919050565b6000612ae76020836131c4565b9150612af2826136c4565b602082019050919050565b6000612b0a601e836131c4565b9150612b15826136ed565b602082019050919050565b6000612b2d6014836131c4565b9150612b3882613716565b602082019050919050565b6000612b506020836131c4565b9150612b5b8261373f565b602082019050919050565b6000612b736028836131c4565b9150612b7e82613768565b604082019050919050565b6000612b96601d836131c4565b9150612ba1826137b7565b602082019050919050565b6000612bb96022836131c4565b9150612bc4826137e0565b604082019050919050565b6000612bdc602a836131c4565b9150612be78261382f565b604082019050919050565b6000612bff600c836131c4565b9150612c0a8261387e565b602082019050919050565b6000612c22601f836131c4565b9150612c2d826138a7565b602082019050919050565b6000612c456030836131c4565b9150612c50826138d0565b604082019050919050565b612c64816132f9565b82525050565b6000612c76828461293f565b915081905092915050565b6000602082019050612c9660008301846128ca565b92915050565b6000606082019050612cb160008301866128ca565b612cbe60208301856128ca565b612ccb6040830184612c5b565b949350505050565b6000604082019050612ce860008301856128ca565b612cf56020830184612c5b565b9392505050565b6000608082019050612d1160008301876128ca565b612d1e6020830186612c5b565b8181036040830152612d308185612906565b9050612d3f606083018461298e565b95945050505050565b600061016082019050612d5e600083018e6128ca565b612d6b602083018d612c5b565b8181036040830152612d7d818c612906565b9050612d8c606083018b61298e565b612d99608083018a61299d565b612da660a083018961299d565b612db360c083018861299d565b612dc060e08301876128ca565b612dce6101008301866128bb565b818103610120830152612de18185612906565b9050612df16101408301846128ca565b9c9b505050505050505050505050565b6000602082019050612e1660008301846128d9565b92915050565b6000604082019050612e3160008301856128e8565b612e3e60208301846128d9565b9392505050565b6000602082019050612e5a60008301846128f7565b92915050565b6000602082019050612e756000830184612970565b92915050565b6000602082019050612e90600083018461297f565b92915050565b60006020820190508181036000830152612eb081846129ac565b905092915050565b60006020820190508181036000830152612ed1816129e5565b9050919050565b60006020820190508181036000830152612ef181612a08565b9050919050565b60006020820190508181036000830152612f1181612a2b565b9050919050565b60006020820190508181036000830152612f3181612a4e565b9050919050565b60006020820190508181036000830152612f5181612a71565b9050919050565b60006020820190508181036000830152612f7181612a94565b9050919050565b60006020820190508181036000830152612f9181612ab7565b9050919050565b60006020820190508181036000830152612fb181612ada565b9050919050565b60006020820190508181036000830152612fd181612afd565b9050919050565b60006020820190508181036000830152612ff181612b20565b9050919050565b6000602082019050818103600083015261301181612b43565b9050919050565b6000602082019050818103600083015261303181612b66565b9050919050565b6000602082019050818103600083015261305181612b89565b9050919050565b6000602082019050818103600083015261307181612bac565b9050919050565b6000602082019050818103600083015261309181612bcf565b9050919050565b600060208201905081810360008301526130b181612bf2565b9050919050565b600060208201905081810360008301526130d181612c15565b9050919050565b600060208201905081810360008301526130f181612c38565b9050919050565b600060208201905061310d6000830184612c5b565b92915050565b60006040820190506131286000830185612c5b565b6131356020830184612c5b565b9392505050565b6000613146613157565b905061315282826133be565b919050565b6000604051905090565b600067ffffffffffffffff82111561317c5761317b6134d5565b5b61318582613522565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006131e0826132f9565b91506131eb836132f9565b9250826131fb576131fa613448565b5b828204905092915050565b6000613211826132f9565b915061321c836132f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561325557613254613419565b5b828202905092915050565b600061326b826132d9565b9050919050565b600061327d826132d9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506132d48261391f565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061331b82613322565b9050919050565b600061332d826132d9565b9050919050565b600061333f82613346565b9050919050565b6000613351826132d9565b9050919050565b6000613363826132c6565b9050919050565b6000613375826132f9565b9050919050565b82818337600083830152505050565b60005b838110156133a957808201518184015260208101905061338e565b838111156133b8576000848401525b50505050565b6133c782613522565b810181811067ffffffffffffffff821117156133e6576133e56134d5565b5b80604052505050565b60006133fa82613303565b915060ff82141561340e5761340d613419565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f546f6b656e206e6f742064656e69656400000000000000000000000000000000600082015250565b7f4572726f72206f6e20746f6b656e207472616e73666572000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4572726f72206f6e206e6174697665206173736574207472616e736665720000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f546f6b656e20616c72656164792064656e696564000000000000000000000000600082015250565b7f477561726420646f6573206e6f7420696d706c656d656e742049455243313635600082015250565b7f416d6f756e7420746f2072656465656d2069732067726561746572207468616e60008201527f2062616c616e6365000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f44657369676e6174656420746f6b656e2063616e27742062652072656465656d60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f44656e69656420746f6b656e0000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f746f6b656e735b5d206973206f7574206f66206f72646572206f7220636f6e7460008201527f61696e732061206475706c696361746500000000000000000000000000000000602082015250565b600281106139305761392f613477565b5b50565b61393c81613260565b811461394757600080fd5b50565b61395381613272565b811461395e57600080fd5b50565b61396a81613284565b811461397557600080fd5b50565b6139818161329a565b811461398c57600080fd5b50565b613998816132f9565b81146139a357600080fd5b5056fea26469706673582212208c65cc2f2a81895da88aec1d287825dfca91c2a1e56b0960e857a8827a2d7fc264736f6c63430008060033", "constructorArgs": { - "types": [ - "address", - "address", - "address", - "address", - "address" - ], + "types": ["address", "address", "address", "address", "address"], "values": [ "0x0000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000001", @@ -1135,9 +1121,7 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { @@ -1157,13 +1141,7 @@ "address": "0xD3579C14a4181EfC3DF35C3103D20823A8C8d718", "bytecode": "0x60806040523480156200001157600080fd5b5060405162004055380380620040558339818101604052810190620000379190620008c0565b6001606981905550600085858585856040516020016200005c95949392919062000a1c565b60405160208183030381529060405290506200007e816200008a60201b60201c565b50505050505062000cce565b600080600080600085806020019051810190620000a8919062000838565b94509450945094509450620000c26200031f60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012c9062000b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019f9062000a9b565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002bd856200041e60201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b6e848bcb9ab7cb2c546075f85f11bb4e96cbcbcb49aab03e65f45c33c621360405160405180910390a3505050505050565b600060019054906101000a900460ff168062000346575060008054906101000a900460ff16155b62000388576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620003d9576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620003e96200053460201b60201c565b620003f96200061360201b60201c565b80156200041b5760008060016101000a81548160ff0219169083151502179055505b50565b6200042e6200071260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004546200071a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a49062000adf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005179062000a79565b60405180910390fd5b62000531816200074460201b60201c565b50565b600060019054906101000a900460ff16806200055b575060008054906101000a900460ff16155b6200059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005949062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620005ee576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015620006105760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806200063a575060008054906101000a900460ff16155b6200067c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006739062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620006cd576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620006ed620006e16200071260201b60201c565b6200074460201b60201c565b80156200070f5760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200081b8162000c9a565b92915050565b600081519050620008328162000cb4565b92915050565b600080600080600060a0868803121562000857576200085662000b7c565b5b6000620008678882890162000821565b95505060206200087a8882890162000821565b94505060406200088d8882890162000821565b9350506060620008a08882890162000821565b9250506080620008b38882890162000821565b9150509295509295909350565b600080600080600060a08688031215620008df57620008de62000b7c565b5b6000620008ef888289016200080a565b955050602062000902888289016200080a565b945050604062000915888289016200080a565b935050606062000928888289016200080a565b92505060806200093b888289016200080a565b9150509295509295909350565b620009538162000b34565b82525050565b60006200096860268362000b23565b9150620009758262000b81565b604082019050919050565b60006200098f601e8362000b23565b91506200099c8262000bd0565b602082019050919050565b6000620009b6602e8362000b23565b9150620009c38262000bf9565b604082019050919050565b6000620009dd60208362000b23565b9150620009ea8262000c48565b602082019050919050565b600062000a04601e8362000b23565b915062000a118262000c71565b602082019050919050565b600060a08201905062000a33600083018862000948565b62000a42602083018762000948565b62000a51604083018662000948565b62000a60606083018562000948565b62000a6f608083018462000948565b9695505050505050565b6000602082019050818103600083015262000a948162000959565b9050919050565b6000602082019050818103600083015262000ab68162000980565b9050919050565b6000602082019050818103600083015262000ad881620009a7565b9050919050565b6000602082019050818103600083015262000afa81620009ce565b9050919050565b6000602082019050818103600083015262000b1c81620009f5565b9050919050565b600082825260208201905092915050565b600062000b418262000b5c565b9050919050565b600062000b558262000b5c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b62000ca58162000b34565b811462000cb157600080fd5b50565b62000cbf8162000b48565b811462000ccb57600080fd5b50565b6133778062000cde6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063b68877101161007c578063b6887710146102ee578063c91063891461031e578063d4b839921461033c578063e19a9dd91461035a578063ef96880414610376578063f2fde38b1461039257610137565b80638da5cb5b1461025e5780639358928b1461027c578063a4f9edbf1461029a578063ac346e89146102b6578063af20af8a146102d257610137565b8063768b5fd5116100ff578063768b5fd5146101ce578063776d1a01146101ea5780637ceab3b1146102065780637de1e53614610224578063826bec451461024257610137565b806301ffc9a71461013c578063086cfca81461016c5780632b112e49146101885780635aef7de6146101a6578063715018a6146101c4575b600080fd5b610156600480360381019061015191906124d7565b6103ae565b6040516101639190612a13565b60405180910390f35b61018660048036038101906101819190612388565b610410565b005b610190610552565b60405161019d9190612c68565b60405180910390f35b6101ae6105f9565b6040516101bb9190612893565b60405180910390f35b6101cc61061f565b005b6101e860048036038101906101e39190612388565b6106a7565b005b61020460048036038101906101ff9190612388565b610767565b005b61020e6108a9565b60405161021b9190612893565b60405180910390f35b61022c6108cf565b6040516102399190612a8d565b60405180910390f35b61025c6004803603810190610257919061245d565b6108f5565b005b610266610ad3565b6040516102739190612893565b60405180910390f35b610284610afd565b6040516102919190612a72565b60405180910390f35b6102b460048036038101906102af9190612504565b610b23565b005b6102d060048036038101906102cb919061245d565b610da0565b005b6102ec60048036038101906102e7919061257a565b610f7d565b005b61030860048036038101906103039190612388565b6112b2565b6040516103159190612a13565b60405180910390f35b6103266112d2565b6040516103339190612893565b60405180910390f35b6103446112fc565b6040516103519190612893565b60405180910390f35b610374600480360381019061036f9190612388565b611322565b005b610390600480360381019061038b9190612388565b611558565b005b6103ac60048036038101906103a79190612388565b611618565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610409575063af20af8a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610418611710565b73ffffffffffffffffffffffffffffffffffffffff16610436610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048390612b68565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b6000606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4ce63c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bc57600080fd5b505afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f4919061254d565b905090565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610627611710565b73ffffffffffffffffffffffffffffffffffffffff16610645610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461069b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069290612b68565b60405180910390fd5b6106a56000611718565b565b6106af611710565b73ffffffffffffffffffffffffffffffffffffffff166106cd610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a90612b68565b60405180910390fd5b80606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61076f611710565b73ffffffffffffffffffffffffffffffffffffffff1661078d610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90612b68565b60405180910390fd5b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108fd611710565b73ffffffffffffffffffffffffffffffffffffffff1661091b610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612b68565b60405180910390fd5b60005b828290508160ff161015610ace576068600084848460ff1681811061099c5761099b612f7d565b5b90506020020160208101906109b19190612388565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090612ba8565b60405180910390fd5b60016068600085858560ff16818110610a5557610a54612f7d565b5b9050602002016020810190610a6a9190612388565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ac690612ec6565b915050610974565b505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600085806020019051810190610b3f91906123e2565b94509450945094509450610b516117de565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890612b88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890612b08565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d3e85611618565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b6e848bcb9ab7cb2c546075f85f11bb4e96cbcbcb49aab03e65f45c33c621360405160405180910390a3505050505050565b610da8611710565b73ffffffffffffffffffffffffffffffffffffffff16610dc6610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390612b68565b60405180910390fd5b60005b828290508160ff161015610f78576068600084848460ff16818110610e4757610e46612f7d565b5b9050602002016020810190610e5c9190612388565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda90612aa8565b60405180910390fd5b60006068600085858560ff16818110610eff57610efe612f7d565b5b9050602002016020810190610f149190612388565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f7090612ec6565b915050610e1f565b505050565b60026069541415610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90612c28565b60405180910390fd5b60026069819055503373ffffffffffffffffffffffffffffffffffffffff16606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b815260040161103d9190612c68565b60206040518083038186803b15801561105557600080fd5b505afa158015611069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108d91906123b5565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90612be8565b60405180910390fd5b6000606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4ce63c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561114d57600080fd5b505afa158015611161573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611185919061254d565b6040516020016111959190612c68565b6040516020818303038152906040529050606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518463ffffffff1660e01b8152600401611227939291906128ae565b600060405180830381600087803b15801561124157600080fd5b505af1158015611255573d6000803e3d6000fd5b505050506112a4838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050826118c7565b506001606981905550505050565b60686020528060005260406000206000915054906101000a900460ff1681565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61132a611710565b73ffffffffffffffffffffffffffffffffffffffff16611348610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139590612b68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114bb578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161142b9190612a57565b60206040518083038186803b15801561144357600080fd5b505afa158015611457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147b91906124aa565b6114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190612bc8565b60405180910390fd5b5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161154d9190612893565b60405180910390a150565b611560611710565b73ffffffffffffffffffffffffffffffffffffffff1661157e610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90612b68565b60405180910390fd5b80606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611620611710565b73ffffffffffffffffffffffffffffffffffffffff1661163e610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b90612b68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90612ae8565b60405180910390fd5b61170d81611718565b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff1680611804575060008054906101000a900460ff16155b611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90612b28565b60405180910390fd5b60008060019054906101000a900460ff161590508015611893576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61189b611c15565b6118a3611cee565b80156118c45760008060016101000a81548160ff0219169083151502179055505b50565b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163111156119565761195533611950606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163184611dd7565b611e05565b5b60008060005b84518160ff161015611bcb5760686000868360ff168151811061198257611981612f7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990612c08565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611a3f57611a3e612f7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1611611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490612c48565b60405180910390fd5b848160ff1681518110611ab357611ab2612f7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a08231606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611b159190612893565b60206040518083038186803b158015611b2d57600080fd5b505afa158015611b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b65919061254d565b9150611b98858260ff1681518110611b8057611b7f612f7d565b5b602002602001015133611b938588611dd7565b611e8a565b848160ff1681518110611bae57611bad612f7d565b5b602002602001015192508080611bc390612ec6565b91505061195c565b503373ffffffffffffffffffffffffffffffffffffffff167f19713765ac35da5948240df5d5347716cd4dc3815a2890a3c94df4a1e745136a60405160405180910390a250505050565b600060019054906101000a900460ff1680611c3b575060008054906101000a900460ff16155b611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190612b28565b60405180910390fd5b60008060019054906101000a900460ff161590508015611cca576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611ceb5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611d14575060008054906101000a900460ff16155b611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90612b28565b60405180910390fd5b60008060019054906101000a900460ff161590508015611da3576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611db3611dae611710565b611718565b8015611dd45760008060016101000a81548160ff0219169083151502179055505b50565b60008082806020019051810190611dee919061254d565b90508084611dfc9190612d06565b91505092915050565b611e4782826040518060400160405280600281526020017f30780000000000000000000000000000000000000000000000000000000000008152506000611f3a565b611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90612b48565b60405180910390fd5b5050565b600063a9059cbb8383604051602401611ea49291906128e5565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050611ef5846000836000611f3a565b611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90612ac8565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461206c57606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528686868660008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b81526004016120399b9a9998979695949392919061295a565b600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b81526004016120cd949392919061290e565b602060405180830381600087803b1580156120e757600080fd5b505af11580156120fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211f91906124aa565b9050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222757606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b81526004016121f4929190612a2e565b600060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b505050505b949350505050565b600061224261223d84612ca8565b612c83565b90508281526020810184848401111561225e5761225d612fea565b5b612269848285612e53565b509392505050565b600081359050612280816132ce565b92915050565b600081519050612295816132ce565b92915050565b6000815190506122aa816132e5565b92915050565b60008083601f8401126122c6576122c5612fe0565b5b8235905067ffffffffffffffff8111156122e3576122e2612fdb565b5b6020830191508360208202830111156122ff576122fe612fe5565b5b9250929050565b600081519050612315816132fc565b92915050565b60008135905061232a81613313565b92915050565b600082601f83011261234557612344612fe0565b5b813561235584826020860161222f565b91505092915050565b60008135905061236d8161332a565b92915050565b6000815190506123828161332a565b92915050565b60006020828403121561239e5761239d612ff4565b5b60006123ac84828501612271565b91505092915050565b6000602082840312156123cb576123ca612ff4565b5b60006123d984828501612286565b91505092915050565b600080600080600060a086880312156123fe576123fd612ff4565b5b600061240c8882890161229b565b955050602061241d8882890161229b565b945050604061242e8882890161229b565b935050606061243f8882890161229b565b92505060806124508882890161229b565b9150509295509295909350565b6000806020838503121561247457612473612ff4565b5b600083013567ffffffffffffffff81111561249257612491612fef565b5b61249e858286016122b0565b92509250509250929050565b6000602082840312156124c0576124bf612ff4565b5b60006124ce84828501612306565b91505092915050565b6000602082840312156124ed576124ec612ff4565b5b60006124fb8482850161231b565b91505092915050565b60006020828403121561251a57612519612ff4565b5b600082013567ffffffffffffffff81111561253857612537612fef565b5b61254484828501612330565b91505092915050565b60006020828403121561256357612562612ff4565b5b600061257184828501612373565b91505092915050565b60008060006040848603121561259357612592612ff4565b5b60006125a18682870161235e565b935050602084013567ffffffffffffffff8111156125c2576125c1612fef565b5b6125ce868287016122b0565b92509250509250925092565b6125e381612d49565b82525050565b6125f281612d37565b82525050565b61260181612d5b565b82525050565b61261081612d67565b82525050565b61261f81612d71565b82525050565b600061263082612cd9565b61263a8185612ce4565b935061264a818560208601612e62565b61265381612ff9565b840191505092915050565b61266781612de7565b82525050565b61267681612e0b565b82525050565b61268581612e2f565b82525050565b61269481612e41565b82525050565b60006126a7601083612cf5565b91506126b28261300a565b602082019050919050565b60006126ca601783612cf5565b91506126d582613033565b602082019050919050565b60006126ed602683612cf5565b91506126f88261305c565b604082019050919050565b6000612710601e83612cf5565b915061271b826130ab565b602082019050919050565b6000612733602e83612cf5565b915061273e826130d4565b604082019050919050565b6000612756601e83612cf5565b915061276182613123565b602082019050919050565b6000612779602083612cf5565b91506127848261314c565b602082019050919050565b600061279c601e83612cf5565b91506127a782613175565b602082019050919050565b60006127bf601483612cf5565b91506127ca8261319e565b602082019050919050565b60006127e2602083612cf5565b91506127ed826131c7565b602082019050919050565b6000612805601983612cf5565b9150612810826131f0565b602082019050919050565b6000612828600c83612cf5565b915061283382613219565b602082019050919050565b600061284b601f83612cf5565b915061285682613242565b602082019050919050565b600061286e603083612cf5565b91506128798261326b565b604082019050919050565b61288d81612dd0565b82525050565b60006020820190506128a860008301846125e9565b92915050565b60006060820190506128c360008301866125e9565b6128d060208301856125e9565b6128dd6040830184612884565b949350505050565b60006040820190506128fa60008301856125e9565b6129076020830184612884565b9392505050565b600060808201905061292360008301876125e9565b6129306020830186612884565b81810360408301526129428185612625565b9050612951606083018461267c565b95945050505050565b600061016082019050612970600083018e6125e9565b61297d602083018d612884565b818103604083015261298f818c612625565b905061299e606083018b61267c565b6129ab608083018a61268b565b6129b860a083018961268b565b6129c560c083018861268b565b6129d260e08301876125e9565b6129e06101008301866125da565b8181036101208301526129f38185612625565b9050612a036101408301846125e9565b9c9b505050505050505050505050565b6000602082019050612a2860008301846125f8565b92915050565b6000604082019050612a436000830185612607565b612a5060208301846125f8565b9392505050565b6000602082019050612a6c6000830184612616565b92915050565b6000602082019050612a87600083018461265e565b92915050565b6000602082019050612aa2600083018461266d565b92915050565b60006020820190508181036000830152612ac18161269a565b9050919050565b60006020820190508181036000830152612ae1816126bd565b9050919050565b60006020820190508181036000830152612b01816126e0565b9050919050565b60006020820190508181036000830152612b2181612703565b9050919050565b60006020820190508181036000830152612b4181612726565b9050919050565b60006020820190508181036000830152612b6181612749565b9050919050565b60006020820190508181036000830152612b818161276c565b9050919050565b60006020820190508181036000830152612ba18161278f565b9050919050565b60006020820190508181036000830152612bc1816127b2565b9050919050565b60006020820190508181036000830152612be1816127d5565b9050919050565b60006020820190508181036000830152612c01816127f8565b9050919050565b60006020820190508181036000830152612c218161281b565b9050919050565b60006020820190508181036000830152612c418161283e565b9050919050565b60006020820190508181036000830152612c6181612861565b9050919050565b6000602082019050612c7d6000830184612884565b92915050565b6000612c8d612c9e565b9050612c998282612e95565b919050565b6000604051905090565b600067ffffffffffffffff821115612cc357612cc2612fac565b5b612ccc82612ff9565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612d1182612dd0565b9150612d1c83612dd0565b925082612d2c57612d2b612f1f565b5b828204905092915050565b6000612d4282612db0565b9050919050565b6000612d5482612db0565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050612dab826132ba565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612df282612df9565b9050919050565b6000612e0482612db0565b9050919050565b6000612e1682612e1d565b9050919050565b6000612e2882612db0565b9050919050565b6000612e3a82612d9d565b9050919050565b6000612e4c82612dd0565b9050919050565b82818337600083830152505050565b60005b83811015612e80578082015181840152602081019050612e65565b83811115612e8f576000848401525b50505050565b612e9e82612ff9565b810181811067ffffffffffffffff82111715612ebd57612ebc612fac565b5b80604052505050565b6000612ed182612dda565b915060ff821415612ee557612ee4612ef0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f546f6b656e206e6f742064656e69656400000000000000000000000000000000600082015250565b7f4572726f72206f6e20746f6b656e207472616e73666572000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4572726f72206f6e206e6174697665206173736574207472616e736665720000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f546f6b656e20616c72656164792064656e696564000000000000000000000000600082015250565b7f477561726420646f6573206e6f7420696d706c656d656e742049455243313635600082015250565b7f4f6e6c7920746f6b656e206f776e65722063616e206578697400000000000000600082015250565b7f44656e69656420746f6b656e0000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f746f6b656e735b5d206973206f7574206f66206f72646572206f7220636f6e7460008201527f61696e732061206475706c696361746500000000000000000000000000000000602082015250565b600281106132cb576132ca612f4e565b5b50565b6132d781612d37565b81146132e257600080fd5b50565b6132ee81612d49565b81146132f957600080fd5b50565b61330581612d5b565b811461331057600080fd5b50565b61331c81612d71565b811461332757600080fd5b50565b61333381612dd0565b811461333e57600080fd5b5056fea2646970667358221220d5e82e831a1adfe28a55e80f4c9993d7eff326332c6d22ff05befb07b8a0165d64736f6c63430008060033", "constructorArgs": { - "types": [ - "address", - "address", - "address", - "address", - "address" - ], + "types": ["address", "address", "address", "address", "address"], "values": [ "0x0000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000001", @@ -1707,9 +1685,7 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { @@ -1727,13 +1703,7 @@ "address": "0xE0eCE32Eb4BE4E9224dcec6a4FcB335c1fe05CDe", "bytecode": "0x60806040523480156200001157600080fd5b5060405162004055380380620040558339818101604052810190620000379190620008c0565b6001606981905550600085858585856040516020016200005c95949392919062000a1c565b60405160208183030381529060405290506200007e816200008a60201b60201c565b50505050505062000cce565b600080600080600085806020019051810190620000a8919062000838565b94509450945094509450620000c26200031f60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012c9062000b01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019f9062000a9b565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002bd856200041e60201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b6e848bcb9ab7cb2c546075f85f11bb4e96cbcbcb49aab03e65f45c33c621360405160405180910390a3505050505050565b600060019054906101000a900460ff168062000346575060008054906101000a900460ff16155b62000388576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620003d9576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620003e96200053460201b60201c565b620003f96200061360201b60201c565b80156200041b5760008060016101000a81548160ff0219169083151502179055505b50565b6200042e6200071260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004546200071a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a49062000adf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005179062000a79565b60405180910390fd5b62000531816200074460201b60201c565b50565b600060019054906101000a900460ff16806200055b575060008054906101000a900460ff16155b6200059d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005949062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620005ee576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015620006105760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806200063a575060008054906101000a900460ff16155b6200067c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006739062000abd565b60405180910390fd5b60008060019054906101000a900460ff161590508015620006cd576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620006ed620006e16200071260201b60201c565b6200074460201b60201c565b80156200070f5760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200081b8162000c9a565b92915050565b600081519050620008328162000cb4565b92915050565b600080600080600060a0868803121562000857576200085662000b7c565b5b6000620008678882890162000821565b95505060206200087a8882890162000821565b94505060406200088d8882890162000821565b9350506060620008a08882890162000821565b9250506080620008b38882890162000821565b9150509295509295909350565b600080600080600060a08688031215620008df57620008de62000b7c565b5b6000620008ef888289016200080a565b955050602062000902888289016200080a565b945050604062000915888289016200080a565b935050606062000928888289016200080a565b92505060806200093b888289016200080a565b9150509295509295909350565b620009538162000b34565b82525050565b60006200096860268362000b23565b9150620009758262000b81565b604082019050919050565b60006200098f601e8362000b23565b91506200099c8262000bd0565b602082019050919050565b6000620009b6602e8362000b23565b9150620009c38262000bf9565b604082019050919050565b6000620009dd60208362000b23565b9150620009ea8262000c48565b602082019050919050565b600062000a04601e8362000b23565b915062000a118262000c71565b602082019050919050565b600060a08201905062000a33600083018862000948565b62000a42602083018762000948565b62000a51604083018662000948565b62000a60606083018562000948565b62000a6f608083018462000948565b9695505050505050565b6000602082019050818103600083015262000a948162000959565b9050919050565b6000602082019050818103600083015262000ab68162000980565b9050919050565b6000602082019050818103600083015262000ad881620009a7565b9050919050565b6000602082019050818103600083015262000afa81620009ce565b9050919050565b6000602082019050818103600083015262000b1c81620009f5565b9050919050565b600082825260208201905092915050565b600062000b418262000b5c565b9050919050565b600062000b558262000b5c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b62000ca58162000b34565b811462000cb157600080fd5b50565b62000cbf8162000b48565b811462000ccb57600080fd5b50565b6133778062000cde6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063b68877101161007c578063b6887710146102ee578063c91063891461031e578063d4b839921461033c578063e19a9dd91461035a578063ef96880414610376578063f2fde38b1461039257610137565b80638da5cb5b1461025e5780639358928b1461027c578063a4f9edbf1461029a578063ac346e89146102b6578063af20af8a146102d257610137565b8063768b5fd5116100ff578063768b5fd5146101ce578063776d1a01146101ea5780637ceab3b1146102065780637de1e53614610224578063826bec451461024257610137565b806301ffc9a71461013c578063086cfca81461016c5780632b112e49146101885780635aef7de6146101a6578063715018a6146101c4575b600080fd5b610156600480360381019061015191906124d7565b6103ae565b6040516101639190612a13565b60405180910390f35b61018660048036038101906101819190612388565b610410565b005b610190610552565b60405161019d9190612c68565b60405180910390f35b6101ae6105f9565b6040516101bb9190612893565b60405180910390f35b6101cc61061f565b005b6101e860048036038101906101e39190612388565b6106a7565b005b61020460048036038101906101ff9190612388565b610767565b005b61020e6108a9565b60405161021b9190612893565b60405180910390f35b61022c6108cf565b6040516102399190612a8d565b60405180910390f35b61025c6004803603810190610257919061245d565b6108f5565b005b610266610ad3565b6040516102739190612893565b60405180910390f35b610284610afd565b6040516102919190612a72565b60405180910390f35b6102b460048036038101906102af9190612504565b610b23565b005b6102d060048036038101906102cb919061245d565b610da0565b005b6102ec60048036038101906102e7919061257a565b610f7d565b005b61030860048036038101906103039190612388565b6112b2565b6040516103159190612a13565b60405180910390f35b6103266112d2565b6040516103339190612893565b60405180910390f35b6103446112fc565b6040516103519190612893565b60405180910390f35b610374600480360381019061036f9190612388565b611322565b005b610390600480360381019061038b9190612388565b611558565b005b6103ac60048036038101906103a79190612388565b611618565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610409575063af20af8a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610418611710565b73ffffffffffffffffffffffffffffffffffffffff16610436610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048390612b68565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b6000606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4ce63c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bc57600080fd5b505afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f4919061254d565b905090565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610627611710565b73ffffffffffffffffffffffffffffffffffffffff16610645610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461069b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069290612b68565b60405180910390fd5b6106a56000611718565b565b6106af611710565b73ffffffffffffffffffffffffffffffffffffffff166106cd610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a90612b68565b60405180910390fd5b80606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61076f611710565b73ffffffffffffffffffffffffffffffffffffffff1661078d610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146107e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da90612b68565b60405180910390fd5b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108fd611710565b73ffffffffffffffffffffffffffffffffffffffff1661091b610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890612b68565b60405180910390fd5b60005b828290508160ff161015610ace576068600084848460ff1681811061099c5761099b612f7d565b5b90506020020160208101906109b19190612388565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090612ba8565b60405180910390fd5b60016068600085858560ff16818110610a5557610a54612f7d565b5b9050602002016020810190610a6a9190612388565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ac690612ec6565b915050610974565b505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600085806020019051810190610b3f91906123e2565b94509450945094509450610b516117de565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890612b88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890612b08565b60405180910390fd5b83606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d3e85611618565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b6e848bcb9ab7cb2c546075f85f11bb4e96cbcbcb49aab03e65f45c33c621360405160405180910390a3505050505050565b610da8611710565b73ffffffffffffffffffffffffffffffffffffffff16610dc6610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390612b68565b60405180910390fd5b60005b828290508160ff161015610f78576068600084848460ff16818110610e4757610e46612f7d565b5b9050602002016020810190610e5c9190612388565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda90612aa8565b60405180910390fd5b60006068600085858560ff16818110610eff57610efe612f7d565b5b9050602002016020810190610f149190612388565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f7090612ec6565b915050610e1f565b505050565b60026069541415610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90612c28565b60405180910390fd5b60026069819055503373ffffffffffffffffffffffffffffffffffffffff16606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b815260040161103d9190612c68565b60206040518083038186803b15801561105557600080fd5b505afa158015611069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108d91906123b5565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90612be8565b60405180910390fd5b6000606b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4ce63c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561114d57600080fd5b505afa158015611161573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611185919061254d565b6040516020016111959190612c68565b6040516020818303038152906040529050606a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518463ffffffff1660e01b8152600401611227939291906128ae565b600060405180830381600087803b15801561124157600080fd5b505af1158015611255573d6000803e3d6000fd5b505050506112a4838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050826118c7565b506001606981905550505050565b60686020528060005260406000206000915054906101000a900460ff1681565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61132a611710565b73ffffffffffffffffffffffffffffffffffffffff16611348610ad3565b73ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139590612b68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114bb578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161142b9190612a57565b60206040518083038186803b15801561144357600080fd5b505afa158015611457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147b91906124aa565b6114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190612bc8565b60405180910390fd5b5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161154d9190612893565b60405180910390a150565b611560611710565b73ffffffffffffffffffffffffffffffffffffffff1661157e610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90612b68565b60405180910390fd5b80606b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611620611710565b73ffffffffffffffffffffffffffffffffffffffff1661163e610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b90612b68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90612ae8565b60405180910390fd5b61170d81611718565b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff1680611804575060008054906101000a900460ff16155b611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90612b28565b60405180910390fd5b60008060019054906101000a900460ff161590508015611893576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61189b611c15565b6118a3611cee565b80156118c45760008060016101000a81548160ff0219169083151502179055505b50565b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163111156119565761195533611950606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163184611dd7565b611e05565b5b60008060005b84518160ff161015611bcb5760686000868360ff168151811061198257611981612f7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990612c08565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611a3f57611a3e612f7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1611611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490612c48565b60405180910390fd5b848160ff1681518110611ab357611ab2612f7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a08231606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611b159190612893565b60206040518083038186803b158015611b2d57600080fd5b505afa158015611b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b65919061254d565b9150611b98858260ff1681518110611b8057611b7f612f7d565b5b602002602001015133611b938588611dd7565b611e8a565b848160ff1681518110611bae57611bad612f7d565b5b602002602001015192508080611bc390612ec6565b91505061195c565b503373ffffffffffffffffffffffffffffffffffffffff167f19713765ac35da5948240df5d5347716cd4dc3815a2890a3c94df4a1e745136a60405160405180910390a250505050565b600060019054906101000a900460ff1680611c3b575060008054906101000a900460ff16155b611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190612b28565b60405180910390fd5b60008060019054906101000a900460ff161590508015611cca576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611ceb5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611d14575060008054906101000a900460ff16155b611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a90612b28565b60405180910390fd5b60008060019054906101000a900460ff161590508015611da3576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611db3611dae611710565b611718565b8015611dd45760008060016101000a81548160ff0219169083151502179055505b50565b60008082806020019051810190611dee919061254d565b90508084611dfc9190612d06565b91505092915050565b611e4782826040518060400160405280600281526020017f30780000000000000000000000000000000000000000000000000000000000008152506000611f3a565b611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90612b48565b60405180910390fd5b5050565b600063a9059cbb8383604051602401611ea49291906128e5565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050611ef5846000836000611f3a565b611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90612ac8565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461206c57606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528686868660008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b81526004016120399b9a9998979695949392919061295a565b600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b81526004016120cd949392919061290e565b602060405180830381600087803b1580156120e757600080fd5b505af11580156120fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211f91906124aa565b9050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222757606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b81526004016121f4929190612a2e565b600060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b505050505b949350505050565b600061224261223d84612ca8565b612c83565b90508281526020810184848401111561225e5761225d612fea565b5b612269848285612e53565b509392505050565b600081359050612280816132ce565b92915050565b600081519050612295816132ce565b92915050565b6000815190506122aa816132e5565b92915050565b60008083601f8401126122c6576122c5612fe0565b5b8235905067ffffffffffffffff8111156122e3576122e2612fdb565b5b6020830191508360208202830111156122ff576122fe612fe5565b5b9250929050565b600081519050612315816132fc565b92915050565b60008135905061232a81613313565b92915050565b600082601f83011261234557612344612fe0565b5b813561235584826020860161222f565b91505092915050565b60008135905061236d8161332a565b92915050565b6000815190506123828161332a565b92915050565b60006020828403121561239e5761239d612ff4565b5b60006123ac84828501612271565b91505092915050565b6000602082840312156123cb576123ca612ff4565b5b60006123d984828501612286565b91505092915050565b600080600080600060a086880312156123fe576123fd612ff4565b5b600061240c8882890161229b565b955050602061241d8882890161229b565b945050604061242e8882890161229b565b935050606061243f8882890161229b565b92505060806124508882890161229b565b9150509295509295909350565b6000806020838503121561247457612473612ff4565b5b600083013567ffffffffffffffff81111561249257612491612fef565b5b61249e858286016122b0565b92509250509250929050565b6000602082840312156124c0576124bf612ff4565b5b60006124ce84828501612306565b91505092915050565b6000602082840312156124ed576124ec612ff4565b5b60006124fb8482850161231b565b91505092915050565b60006020828403121561251a57612519612ff4565b5b600082013567ffffffffffffffff81111561253857612537612fef565b5b61254484828501612330565b91505092915050565b60006020828403121561256357612562612ff4565b5b600061257184828501612373565b91505092915050565b60008060006040848603121561259357612592612ff4565b5b60006125a18682870161235e565b935050602084013567ffffffffffffffff8111156125c2576125c1612fef565b5b6125ce868287016122b0565b92509250509250925092565b6125e381612d49565b82525050565b6125f281612d37565b82525050565b61260181612d5b565b82525050565b61261081612d67565b82525050565b61261f81612d71565b82525050565b600061263082612cd9565b61263a8185612ce4565b935061264a818560208601612e62565b61265381612ff9565b840191505092915050565b61266781612de7565b82525050565b61267681612e0b565b82525050565b61268581612e2f565b82525050565b61269481612e41565b82525050565b60006126a7601083612cf5565b91506126b28261300a565b602082019050919050565b60006126ca601783612cf5565b91506126d582613033565b602082019050919050565b60006126ed602683612cf5565b91506126f88261305c565b604082019050919050565b6000612710601e83612cf5565b915061271b826130ab565b602082019050919050565b6000612733602e83612cf5565b915061273e826130d4565b604082019050919050565b6000612756601e83612cf5565b915061276182613123565b602082019050919050565b6000612779602083612cf5565b91506127848261314c565b602082019050919050565b600061279c601e83612cf5565b91506127a782613175565b602082019050919050565b60006127bf601483612cf5565b91506127ca8261319e565b602082019050919050565b60006127e2602083612cf5565b91506127ed826131c7565b602082019050919050565b6000612805601983612cf5565b9150612810826131f0565b602082019050919050565b6000612828600c83612cf5565b915061283382613219565b602082019050919050565b600061284b601f83612cf5565b915061285682613242565b602082019050919050565b600061286e603083612cf5565b91506128798261326b565b604082019050919050565b61288d81612dd0565b82525050565b60006020820190506128a860008301846125e9565b92915050565b60006060820190506128c360008301866125e9565b6128d060208301856125e9565b6128dd6040830184612884565b949350505050565b60006040820190506128fa60008301856125e9565b6129076020830184612884565b9392505050565b600060808201905061292360008301876125e9565b6129306020830186612884565b81810360408301526129428185612625565b9050612951606083018461267c565b95945050505050565b600061016082019050612970600083018e6125e9565b61297d602083018d612884565b818103604083015261298f818c612625565b905061299e606083018b61267c565b6129ab608083018a61268b565b6129b860a083018961268b565b6129c560c083018861268b565b6129d260e08301876125e9565b6129e06101008301866125da565b8181036101208301526129f38185612625565b9050612a036101408301846125e9565b9c9b505050505050505050505050565b6000602082019050612a2860008301846125f8565b92915050565b6000604082019050612a436000830185612607565b612a5060208301846125f8565b9392505050565b6000602082019050612a6c6000830184612616565b92915050565b6000602082019050612a87600083018461265e565b92915050565b6000602082019050612aa2600083018461266d565b92915050565b60006020820190508181036000830152612ac18161269a565b9050919050565b60006020820190508181036000830152612ae1816126bd565b9050919050565b60006020820190508181036000830152612b01816126e0565b9050919050565b60006020820190508181036000830152612b2181612703565b9050919050565b60006020820190508181036000830152612b4181612726565b9050919050565b60006020820190508181036000830152612b6181612749565b9050919050565b60006020820190508181036000830152612b818161276c565b9050919050565b60006020820190508181036000830152612ba18161278f565b9050919050565b60006020820190508181036000830152612bc1816127b2565b9050919050565b60006020820190508181036000830152612be1816127d5565b9050919050565b60006020820190508181036000830152612c01816127f8565b9050919050565b60006020820190508181036000830152612c218161281b565b9050919050565b60006020820190508181036000830152612c418161283e565b9050919050565b60006020820190508181036000830152612c6181612861565b9050919050565b6000602082019050612c7d6000830184612884565b92915050565b6000612c8d612c9e565b9050612c998282612e95565b919050565b6000604051905090565b600067ffffffffffffffff821115612cc357612cc2612fac565b5b612ccc82612ff9565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612d1182612dd0565b9150612d1c83612dd0565b925082612d2c57612d2b612f1f565b5b828204905092915050565b6000612d4282612db0565b9050919050565b6000612d5482612db0565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050612dab826132ba565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612df282612df9565b9050919050565b6000612e0482612db0565b9050919050565b6000612e1682612e1d565b9050919050565b6000612e2882612db0565b9050919050565b6000612e3a82612d9d565b9050919050565b6000612e4c82612dd0565b9050919050565b82818337600083830152505050565b60005b83811015612e80578082015181840152602081019050612e65565b83811115612e8f576000848401525b50505050565b612e9e82612ff9565b810181811067ffffffffffffffff82111715612ebd57612ebc612fac565b5b80604052505050565b6000612ed182612dda565b915060ff821415612ee557612ee4612ef0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f546f6b656e206e6f742064656e69656400000000000000000000000000000000600082015250565b7f4572726f72206f6e20746f6b656e207472616e73666572000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5461726765742063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4572726f72206f6e206e6174697665206173736574207472616e736665720000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4176617461722063616e206e6f74206265207a65726f20616464726573730000600082015250565b7f546f6b656e20616c72656164792064656e696564000000000000000000000000600082015250565b7f477561726420646f6573206e6f7420696d706c656d656e742049455243313635600082015250565b7f4f6e6c7920746f6b656e206f776e65722063616e206578697400000000000000600082015250565b7f44656e69656420746f6b656e0000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f746f6b656e735b5d206973206f7574206f66206f72646572206f7220636f6e7460008201527f61696e732061206475706c696361746500000000000000000000000000000000602082015250565b600281106132cb576132ca612f4e565b5b50565b6132d781612d37565b81146132e257600080fd5b50565b6132ee81612d49565b81146132f957600080fd5b50565b61330581612d5b565b811461331057600080fd5b50565b61331c81612d71565b811461332757600080fd5b50565b61333381612dd0565b811461333e57600080fd5b5056fea2646970667358221220d5e82e831a1adfe28a55e80f4c9993d7eff326332c6d22ff05befb07b8a0165d64736f6c63430008060033", "constructorArgs": { - "types": [ - "address", - "address", - "address", - "address", - "address" - ], + "types": ["address", "address", "address", "address", "address"], "values": [ "0x0000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000001", @@ -2277,9 +2247,7 @@ "storageLayout", "evm.gasEstimates" ], - "": [ - "ast" - ] + "": ["ast"] } }, "metadata": { @@ -2289,4 +2257,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/contracts/src/tasks/setup.ts b/packages/contracts/tasks/setup.ts similarity index 58% rename from packages/contracts/src/tasks/setup.ts rename to packages/contracts/tasks/setup.ts index 31fb2d7..f7a9cc1 100644 --- a/packages/contracts/src/tasks/setup.ts +++ b/packages/contracts/tasks/setup.ts @@ -1,5 +1,10 @@ - import { task, types } from "hardhat/config"; +import { task, types } from "hardhat/config"; import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { + predictProxyAddress, + readMastercopyArtifact, + encodeDeployProxy, +} from "zodiac-core"; interface FactoryTaskArgs { proxied: boolean; @@ -28,52 +33,60 @@ const deployCirculatingSupply = async ( taskArgs: CirculatingSupplyTaskArgs, hardhatRuntime: HardhatRuntimeEnvironment ) => { - const [caller] = await hardhatRuntime.ethers.getSigners(); - console.log("Using the account:", caller.address); + const [deployer] = await hardhatRuntime.ethers.getSigners(); + console.log("Using the account:", deployer.address); const exclusions = taskArgs.exclusions ? taskArgs.exclusions.split(",") : []; - if (taskArgs.proxied) { - const chainId = await hardhatRuntime.getChainId(); - const { transaction } = deployAndSetUpModule( - "circulatingSupply", - { - types: ["address", "address", "address[]"], - values: [taskArgs.owner, taskArgs.token, exclusions], - }, - hardhatRuntime.ethers.provider, - Number(chainId), - Date.now().toString() - ); - const deploymentTransaction = await caller.sendTransaction(transaction); - const receipt = await deploymentTransaction.wait(); - - console.log( - "Circulating supply contract deployed to", - receipt.logs[1].address - ); - return; - } - const contract = taskArgs.type === "ERC721" ? "CirculatingSupplyERC721" : "CirculatingSupply"; - const Supply = await hardhatRuntime.ethers.getContractFactory(contract); - const supply = await Supply.deploy( - taskArgs.owner, - taskArgs.token, - exclusions - ); - console.log("Circulating supply contract deployed to", supply.address); + if (taskArgs.proxied) { + const mastercopyArtifact = readMastercopyArtifact({ + contractName: contract, + }); - console.log("Wait 10s to verify contract..."); - wait(10); + const nonce = await deployer.getNonce(); - await hardhatRuntime.run("verify:verify", { - address: supply.address, - constructorArguments: [taskArgs.owner, taskArgs.token, exclusions], - }); + const mastercopy = mastercopyArtifact.address; + const setupArgs = { + types: ["address", "address", "address[]"], + values: [taskArgs.owner, taskArgs.token, exclusions], + }; + + const transaction = encodeDeployProxy({ + mastercopy, + setupArgs, + saltNonce: nonce, + }); + const deploymentTransaction = await deployer.sendTransaction(transaction); + await deploymentTransaction.wait(); + + console.log( + "Circulating supply contract deployed to", + predictProxyAddress({ mastercopy, setupArgs, saltNonce: nonce }) + ); + } else { + const Supply = await hardhatRuntime.ethers.getContractFactory(contract); + const supply = await Supply.deploy( + taskArgs.owner, + taskArgs.token, + exclusions + ); + console.log( + "Circulating supply contract deployed to", + await supply.getAddress() + ); + + console.log("Wait 10s to verify contract..."); + wait(10); + + await hardhatRuntime.run("verify:verify", { + address: supply.getAddress(), + constructorArguments: [taskArgs.owner, taskArgs.token, exclusions], + }); + } }; task("deployCirculatingSupply", "Deploy circulating supply contract") @@ -105,60 +118,68 @@ const setupModule = async ( taskArgs: ExitSetupArgs, hardhatRuntime: HardhatRuntimeEnvironment ) => { - const [caller] = await hardhatRuntime.ethers.getSigners(); - console.log("Using the account:", caller.address); + const [deployer] = await hardhatRuntime.ethers.getSigners(); + console.log("Using the account:", deployer.address); - if (taskArgs.proxied) { - const chainId = await hardhatRuntime.getChainId(); - const { transaction } = deployAndSetUpModule( - "exit", - { - types: ["address", "address", "address", "address", "address"], - values: [ - taskArgs.owner, - taskArgs.avatar, - taskArgs.target, - taskArgs.token, - taskArgs.supply, - ], - }, - hardhatRuntime.ethers.provider, - Number(chainId), - Date.now().toString() - ); + const contract = taskArgs.type === "ERC721" ? "ExitERC721" : "ExitERC20"; - const deploymentTransaction = await caller.sendTransaction(transaction); - const receipt = await deploymentTransaction.wait(); + if (taskArgs.proxied) { + const mastercopyArtifact = readMastercopyArtifact({ + contractName: contract, + }); - console.log("Module deployed to:", receipt.logs[1].address); - return; - } + const nonce = await deployer.getNonce(); - const contract = taskArgs.type === "ERC721" ? "ExitERC721" : "ExitERC20"; - const Module = await hardhatRuntime.ethers.getContractFactory(contract); + const mastercopy = mastercopyArtifact.address; + const setupArgs = { + types: ["address", "address", "address", "address", "address"], + values: [ + taskArgs.owner, + taskArgs.avatar, + taskArgs.target, + taskArgs.token, + taskArgs.supply, + ], + }; - const module = await Module.deploy( - taskArgs.owner, - taskArgs.avatar, - taskArgs.target, - taskArgs.token, - taskArgs.supply - ); - console.log("Module deployed to:", module.address); + const transaction = encodeDeployProxy({ + mastercopy, + setupArgs, + saltNonce: nonce, + }); + const deploymentTransaction = await deployer.sendTransaction(transaction); + await deploymentTransaction.wait(); - console.log("Wait 10s to verify contract..."); - wait(10); + console.log( + "Module deployed to: ", + predictProxyAddress({ mastercopy, setupArgs, saltNonce: nonce }) + ); + } else { + const Module = await hardhatRuntime.ethers.getContractFactory(contract); - await hardhatRuntime.run("verify:verify", { - address: module.address, - constructorArguments: [ + const module = await Module.deploy( taskArgs.owner, taskArgs.avatar, taskArgs.target, taskArgs.token, - taskArgs.supply, - ], - }); + taskArgs.supply + ); + console.log("Module deployed to: ", await module.getAddress()); + + console.log("Wait 10s to verify contract..."); + wait(10); + + await hardhatRuntime.run("verify:verify", { + address: await module.getAddress(), + constructorArguments: [ + taskArgs.owner, + taskArgs.avatar, + taskArgs.target, + taskArgs.token, + taskArgs.supply, + ], + }); + } }; task("setup", "deploy a Exit Module") @@ -226,18 +247,18 @@ const deployDesignatedToken = async ( const Token = await hardhatRuntime.ethers.getContractFactory("TestToken"); const token = await Token.deploy(18); - await token.deployTransaction.wait(3); - console.log("Token deployed to:", token.address); + await token.deploymentTransaction()?.wait(3); + console.log("Token deployed to:", token.getAddress()); const receiver = taskArgs.user || caller.address; - await token.mint(receiver, BigNumber.from(10).pow(18)); + await token.mint(receiver, BigInt(10) ** BigInt(18)); console.log("Token minted to:", receiver); console.log("Wait 10s to verify contract..."); wait(10); await hardhatRuntime.run("verify:verify", { - address: token.address, + address: await token.getAddress(), constructorArguments: [18], }); }; @@ -258,23 +279,22 @@ const deployTestTokenERC721 = async ( const [caller] = await hardhatRuntime.ethers.getSigners(); console.log("Using the account:", caller.address); - const Token = await hardhatRuntime.ethers.getContractFactory( - "TestTokenERC721" - ); + const Token = + await hardhatRuntime.ethers.getContractFactory("TestTokenERC721"); const token = await Token.deploy(); - await token.deployTransaction.wait(3); - console.log("Token deployed to:", token.address); + await token.deploymentTransaction()?.wait(3); + console.log("Token deployed to:", token.getAddress()); - const receiver = taskArgs.user || caller.address; - await token.mint(receiver); + const receiver = taskArgs.user || (await caller.getAddress()); + await token.mint(receiver as string); console.log("Token minted to:", receiver); console.log("Wait 10s to verify contract..."); wait(10); await hardhatRuntime.run("verify:verify", { - address: token.address, + address: await token.getAddress(), constructorArguments: [], }); };