From 7b67526515d6b62a2a8afe41bb3ff72c10b15d69 Mon Sep 17 00:00:00 2001 From: Ladd Hoffman Date: Tue, 26 Mar 2024 15:20:54 -0500 Subject: [PATCH] Now support quorum parameter --- client/src/App.jsx | 2 + client/src/assets/DAO.json | 32 ++++++++++++- client/src/assets/Onboarding.json | 4 +- client/src/assets/Work1.json | 4 +- client/src/contract-addresses.json | 12 ++--- ethereum/contract-addresses.json | 12 ++--- ethereum/contracts/DAO.sol | 27 +++++++++-- ethereum/contracts/Onboarding.sol | 4 +- ethereum/contracts/WorkContract.sol | 5 +- ethereum/test/DAO.js | 72 +++++++++++++++++++++++++++-- ethereum/test/Onboarding.js | 2 +- ethereum/test/Work1.js | 2 +- 12 files changed, 148 insertions(+), 30 deletions(-) diff --git a/client/src/App.jsx b/client/src/App.jsx index 8d21b7d..3b4ff59 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -218,6 +218,8 @@ function App() { await DAO.methods.initiateValidationPool( postIndex, poolDuration ?? 3600, + 1, + 3, false, web3.eth.abi.encodeParameter('bytes', '0x00'), ).send({ diff --git a/client/src/assets/DAO.json b/client/src/assets/DAO.json index 04270bf..413be8c 100644 --- a/client/src/assets/DAO.json +++ b/client/src/assets/DAO.json @@ -319,6 +319,16 @@ "name": "duration", "type": "uint256" }, + { + "internalType": "uint256", + "name": "quorumNumerator", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quorumDenominator", + "type": "uint256" + }, { "internalType": "bool", "name": "callbackOnValidate", @@ -418,6 +428,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "minQuorumPPB", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "name", @@ -657,6 +680,11 @@ "name": "fee", "type": "uint256" }, + { + "internalType": "uint256", + "name": "quorumPPB", + "type": "uint256" + }, { "internalType": "uint256", "name": "duration", @@ -692,8 +720,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f524550000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000324565b508060049081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b61305f806200041b6000396000f3fe6080604052600436106101405760003560e01c80635daf08ca116100b6578063a230c5241161006f578063a230c5241461049f578063a2336279146104dc578063a9059cbb14610523578063dd62ed3e14610560578063ee2e52301461059d578063ff869240146105cd57610140565b80635daf08ca14610367578063642b5bfb146103a45780636db5c8fd146103cf57806370a08231146103fa578063883802741461043757806395d89b411461047457610140565b806317c182171161010857806317c182171461024357806318160ddd1461028057806323b872dd146102ab578063313ce567146102e8578063561b246314610313578063567157611461033c57610140565b806306fdde0314610145578063095ea7b3146101705780630b1e7f83146101ad57806311aee380146101ed57806317906c2e14610218575b600080fd5b34801561015157600080fd5b5061015a61060a565b6040516101679190611ee7565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190611fa7565b61069c565b6040516101a49190612002565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf919061201d565b6106bf565b6040516101e49493929190612068565b60405180910390f35b3480156101f957600080fd5b506102026107b7565b60405161020f91906120b4565b60405180910390f35b34801561022457600080fd5b5061022d6107bd565b60405161023a91906120b4565b60405180910390f35b34801561024f57600080fd5b5061026a6004803603810190610265919061201d565b6107c3565b6040516102779190612002565b60405180910390f35b34801561028c57600080fd5b50610295610deb565b6040516102a291906120b4565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd91906120cf565b610df5565b6040516102df9190612002565b60405180910390f35b3480156102f457600080fd5b506102fd610e24565b60405161030a919061213e565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190612185565b610e2d565b005b34801561034857600080fd5b50610351610e56565b60405161035e91906120b4565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061201d565b610e5b565b60405161039b91906121d8565b60405180910390f35b3480156103b057600080fd5b506103b9610e8e565b6040516103c691906120b4565b60405180910390f35b3480156103db57600080fd5b506103e4610e94565b6040516103f191906120b4565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c91906121f3565b610e9b565b60405161042e91906120b4565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612220565b610ee3565b60405161046b9190612002565b60405180910390f35b34801561048057600080fd5b50610489610f6e565b6040516104969190611ee7565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906121f3565b611000565b6040516104d39190612002565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe919061201d565b611020565b60405161051a9b9a999897969594939291906122c8565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190611fa7565b611149565b6040516105579190612002565b60405180910390f35b34801561056c57600080fd5b506105876004803603810190610582919061237a565b61116c565b60405161059491906120b4565b60405180910390f35b6105b760048036038101906105b2919061241f565b6111f3565b6040516105c491906120b4565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef91906124fd565b611530565b60405161060191906120b4565b60405180910390f35b6060600380546106199061258c565b80601f01602080910402602001604051908101604052809291908181526020018280546106459061258c565b80156106925780601f1061066757610100808354040283529160200191610692565b820191906000526020600020905b81548152906001019060200180831161067557829003601f168201915b5050505050905090565b6000806106a7611644565b90506106b481858561164c565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546107349061258c565b80601f01602080910402602001604051908101604052809291908181526020018280546107609061258c565b80156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b5050505050905084565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a60008360010154815260200190815260200160002090508160070154421161083c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108339061262f565b60405180910390fd5b600015158260080160009054906101000a900460ff16151514610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b9061269b565b60405180910390fd5b600080600080600090505b85600401548110156109105785600301600082815260200190815260200160002091508160010160009054906101000a900460ff16156108f0578160020154846108e991906126ea565b9350610903565b81600201548361090091906126ea565b92505b808060010191505061089f565b508183101595508580156109925750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610aa0578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660056000600660008154809291906109d39061271e565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b610ac8604051806060016040528060308152602001612ffa603091398484886004015461165e565b60018560080160006101000a81548160ff021916908315150217905550858560080160016101000a81548160ff0219169083151502179055507f926ee3a021d24f18cfab444988fa0338bcaa0f1e0d7c2211c07d10cbad6772948787604051610b32929190612766565b60405180910390a1600086610b475782610b49565b835b9050600087610b585784610b5a565b835b9050600080600090505b8860040154811015610c1d5788600301600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151503610c1057600084866002015485610bb6919061278f565b610bc09190612800565b9050610c00308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838960020154610bfb91906126ea565b611700565b8083610c0c91906126ea565b9250505b8080600101915050610b64565b5060008183610c2c9190612831565b90506000811115610c6757610c66308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611700565b5b60005b600654811015610d305760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610cb6610deb565b610cbf83610e9b565b8d60050154610cce919061278f565b610cd89190612800565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d20573d6000803e3d6000fd5b5050508080600101915050610c6a565b508860080160029054906101000a900460ff1615610ddd578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1397c6e8b8b6009016040518363ffffffff1660e01b8152600401610daa9291906128fe565b600060405180830381600087803b158015610dc457600080fd5b505af1158015610dd8573d6000803e3d6000fd5b505050505b505050505050505050919050565b6000600254905090565b600080610e00611644565b9050610e0d8582856117f4565b610e18858585611700565b60019150509392505050565b60006012905090565b6000600860008581526020019081526020016000209050610e5081338585611888565b50505050565b603c81565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6201518081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610eef8484611149565b90508015610f67578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401610f349392919061292e565b600060405180830381600087803b158015610f4e57600080fd5b505af1158015610f62573d6000803e3d6000fd5b505050505b9392505050565b606060048054610f7d9061258c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa99061258c565b8015610ff65780601f10610fcb57610100808354040283529160200191610ff6565b820191906000526020600020905b815481529060010190602001808311610fd957829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff16908060080160019054906101000a900460ff16908060080160029054906101000a900460ff16908060090180546110c69061258c565b80601f01602080910402602001604051908101604052809291908181526020018280546110f29061258c565b801561113f5780601f106111145761010080835404028352916020019161113f565b820191906000526020600020905b81548152906001019060200180831161112257829003601f168201915b505050505090508b565b600080611154611644565b9050611161818585611700565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000803411611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e906129d7565b60405180910390fd5b603c85101561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290612a43565b60405180910390fd5b620151808511156112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890612aaf565b60405180910390fd5b6000600a60008881526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136290612b1b565b60405180910390fd5b6009600081548092919061137e9061271e565b9190505591506000600860008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878160010181905550348160050181905550868160060181905550864261140591906126ea565b8160070181905550828160000181905550858160080160026101000a81548160ff0219169083151502179055508484826009019182611445929190612d0c565b506114748260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634611989565b6114b1818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346114aa9190612800565b6001611888565b6114ee818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346114e79190612800565b6000611888565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161151d91906120b4565b60405180910390a1505095945050505050565b6000600b60008154809291906115459061271e565b9190505590506000600a60008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055508383826003019182611604929190612e42565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c8260405161163491906120b4565b60405180910390a1509392505050565b600033905090565b6116598383836001611a0b565b505050565b6116fa848484846040516024016116789493929190612f12565b6040516020818303038152906040527fa7a87853000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611be2565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117725760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161176991906121d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e45760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016117db91906121d8565b60405180910390fd5b6117ef838383611bfc565b505050565b6000611800848461116c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118825781811015611872578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016118699392919061292e565b60405180910390fd5b61188184848484036000611a0b565b5b50505050565b83600701544211156118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690612faa565b60405180910390fd5b6118da833084611700565b60008460040160008154809291906118f19061271e565b91905055905060008560030160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fb5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016119f291906121d8565b60405180910390fd5b611a0760008383611bfc565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a7d5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a7491906121d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aef5760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611ae691906121d8565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611bdc578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611bd391906120b4565b60405180910390a35b50505050565b611bf981611bf1611e21611e42565b63ffffffff16565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c4e578060026000828254611c4291906126ea565b92505081905550611d21565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cda578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611cd19392919061292e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d6a5780600260008282540392505081905550611db7565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e1491906120b4565b60405180910390a3505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b611e4d819050919050565b611e55612fca565b565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e91578082015181840152602081019050611e76565b60008484015250505050565b6000601f19601f8301169050919050565b6000611eb982611e57565b611ec38185611e62565b9350611ed3818560208601611e73565b611edc81611e9d565b840191505092915050565b60006020820190508181036000830152611f018184611eae565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f3e82611f13565b9050919050565b611f4e81611f33565b8114611f5957600080fd5b50565b600081359050611f6b81611f45565b92915050565b6000819050919050565b611f8481611f71565b8114611f8f57600080fd5b50565b600081359050611fa181611f7b565b92915050565b60008060408385031215611fbe57611fbd611f09565b5b6000611fcc85828601611f5c565b9250506020611fdd85828601611f92565b9150509250929050565b60008115159050919050565b611ffc81611fe7565b82525050565b60006020820190506120176000830184611ff3565b92915050565b60006020828403121561203357612032611f09565b5b600061204184828501611f92565b91505092915050565b61205381611f71565b82525050565b61206281611f33565b82525050565b600060808201905061207d600083018761204a565b61208a6020830186612059565b6120976040830185612059565b81810360608301526120a98184611eae565b905095945050505050565b60006020820190506120c9600083018461204a565b92915050565b6000806000606084860312156120e8576120e7611f09565b5b60006120f686828701611f5c565b935050602061210786828701611f5c565b925050604061211886828701611f92565b9150509250925092565b600060ff82169050919050565b61213881612122565b82525050565b6000602082019050612153600083018461212f565b92915050565b61216281611fe7565b811461216d57600080fd5b50565b60008135905061217f81612159565b92915050565b60008060006060848603121561219e5761219d611f09565b5b60006121ac86828701611f92565b93505060206121bd86828701611f92565b92505060406121ce86828701612170565b9150509250925092565b60006020820190506121ed6000830184612059565b92915050565b60006020828403121561220957612208611f09565b5b600061221784828501611f5c565b91505092915050565b60008060006060848603121561223957612238611f09565b5b600061224786828701611f5c565b935050602061225886828701611f92565b925050604061226986828701611f92565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b600061229a82612273565b6122a4818561227e565b93506122b4818560208601611e73565b6122bd81611e9d565b840191505092915050565b6000610160820190506122de600083018e61204a565b6122eb602083018d61204a565b6122f8604083018c612059565b612305606083018b61204a565b612312608083018a61204a565b61231f60a083018961204a565b61232c60c083018861204a565b61233960e0830187611ff3565b612347610100830186611ff3565b612355610120830185611ff3565b818103610140830152612368818461228f565b90509c9b505050505050505050505050565b6000806040838503121561239157612390611f09565b5b600061239f85828601611f5c565b92505060206123b085828601611f5c565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126123df576123de6123ba565b5b8235905067ffffffffffffffff8111156123fc576123fb6123bf565b5b602083019150836001820283011115612418576124176123c4565b5b9250929050565b60008060008060006080868803121561243b5761243a611f09565b5b600061244988828901611f92565b955050602061245a88828901611f92565b945050604061246b88828901612170565b935050606086013567ffffffffffffffff81111561248c5761248b611f0e565b5b612498888289016123c9565b92509250509295509295909350565b60008083601f8401126124bd576124bc6123ba565b5b8235905067ffffffffffffffff8111156124da576124d96123bf565b5b6020830191508360018202830111156124f6576124f56123c4565b5b9250929050565b60008060006040848603121561251657612515611f09565b5b600061252486828701611f5c565b935050602084013567ffffffffffffffff81111561254557612544611f0e565b5b612551868287016124a7565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806125a457607f821691505b6020821081036125b7576125b661255d565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612619602183611e62565b9150612624826125bd565b604082019050919050565b600060208201905081810360008301526126488161260c565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612685601883611e62565b91506126908261264f565b602082019050919050565b600060208201905081810360008301526126b481612678565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126f582611f71565b915061270083611f71565b9250828201905080821115612718576127176126bb565b5b92915050565b600061272982611f71565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361275b5761275a6126bb565b5b600182019050919050565b600060408201905061277b600083018561204a565b6127886020830184611ff3565b9392505050565b600061279a82611f71565b91506127a583611f71565b92508282026127b381611f71565b915082820484148315176127ca576127c96126bb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061280b82611f71565b915061281683611f71565b925082612826576128256127d1565b5b828204905092915050565b600061283c82611f71565b915061284783611f71565b925082820390508181111561285f5761285e6126bb565b5b92915050565b60008190508160005260206000209050919050565b600081546128878161258c565b612891818661227e565b945060018216600081146128ac57600181146128c2576128f5565b60ff1983168652811515602002860193506128f5565b6128cb85612865565b60005b838110156128ed578154818901526001820191506020810190506128ce565b808801955050505b50505092915050565b60006040820190506129136000830185611ff3565b8181036020830152612925818461287a565b90509392505050565b60006060820190506129436000830186612059565b612950602083018561204a565b61295d604083018461204a565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006129c1602b83611e62565b91506129cc82612965565b604082019050919050565b600060208201905081810360008301526129f0816129b4565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000612a2d601583611e62565b9150612a38826129f7565b602082019050919050565b60006020820190508181036000830152612a5c81612a20565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000612a99601483611e62565b9150612aa482612a63565b602082019050919050565b60006020820190508181036000830152612ac881612a8c565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000612b05601583611e62565b9150612b1082612acf565b602082019050919050565b60006020820190508181036000830152612b3481612af8565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b600060088302612bc27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612b85565b612bcc8683612b85565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612c09612c04612bff84611f71565b612be4565b611f71565b9050919050565b6000819050919050565b612c2383612bee565b612c37612c2f82612c10565b848454612b92565b825550505050565b600090565b612c4c612c3f565b612c57818484612c1a565b505050565b5b81811015612c7b57612c70600082612c44565b600181019050612c5d565b5050565b601f821115612cc057612c9181612865565b612c9a84612b75565b81016020851015612ca9578190505b612cbd612cb585612b75565b830182612c5c565b50505b505050565b600082821c905092915050565b6000612ce360001984600802612cc5565b1980831691505092915050565b6000612cfc8383612cd2565b9150826002028217905092915050565b612d168383612b3b565b67ffffffffffffffff811115612d2f57612d2e612b46565b5b612d39825461258c565b612d44828285612c7f565b6000601f831160018114612d735760008415612d61578287013590505b612d6b8582612cf0565b865550612dd3565b601f198416612d8186612865565b60005b82811015612da957848901358255600182019150602085019450602081019050612d84565b86831015612dc65784890135612dc2601f891682612cd2565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b60008190508160005260206000209050919050565b601f821115612e3d57612e0e81612de7565b612e1784612b75565b81016020851015612e26578190505b612e3a612e3285612b75565b830182612c5c565b50505b505050565b612e4c8383612ddc565b67ffffffffffffffff811115612e6557612e64612b46565b5b612e6f825461258c565b612e7a828285612dfc565b6000601f831160018114612ea95760008415612e97578287013590505b612ea18582612cf0565b865550612f09565b601f198416612eb786612de7565b60005b82811015612edf57848901358255600182019150602085019450602081019050612eba565b86831015612efc5784890135612ef8601f891682612cd2565b8355505b6001600288020188555050505b50505050505050565b60006080820190508181036000830152612f2c8187611eae565b9050612f3b602083018661204a565b612f48604083018561204a565b612f55606083018461204a565b95945050505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000612f94601883611e62565b9150612f9f82612f5e565b602082019050919050565b60006020820190508181036000830152612fc381612f87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfe7374616b6564466f723a2025642c207374616b6564416761696e73743a2025642c207374616b65436f756e743a202564a2646970667358221220e39687c4952d0b3ddd84b76f75b5808550d7c9e903a0739832bcdfc51bedad1b64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106101405760003560e01c80635daf08ca116100b6578063a230c5241161006f578063a230c5241461049f578063a2336279146104dc578063a9059cbb14610523578063dd62ed3e14610560578063ee2e52301461059d578063ff869240146105cd57610140565b80635daf08ca14610367578063642b5bfb146103a45780636db5c8fd146103cf57806370a08231146103fa578063883802741461043757806395d89b411461047457610140565b806317c182171161010857806317c182171461024357806318160ddd1461028057806323b872dd146102ab578063313ce567146102e8578063561b246314610313578063567157611461033c57610140565b806306fdde0314610145578063095ea7b3146101705780630b1e7f83146101ad57806311aee380146101ed57806317906c2e14610218575b600080fd5b34801561015157600080fd5b5061015a61060a565b6040516101679190611ee7565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190611fa7565b61069c565b6040516101a49190612002565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf919061201d565b6106bf565b6040516101e49493929190612068565b60405180910390f35b3480156101f957600080fd5b506102026107b7565b60405161020f91906120b4565b60405180910390f35b34801561022457600080fd5b5061022d6107bd565b60405161023a91906120b4565b60405180910390f35b34801561024f57600080fd5b5061026a6004803603810190610265919061201d565b6107c3565b6040516102779190612002565b60405180910390f35b34801561028c57600080fd5b50610295610deb565b6040516102a291906120b4565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd91906120cf565b610df5565b6040516102df9190612002565b60405180910390f35b3480156102f457600080fd5b506102fd610e24565b60405161030a919061213e565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190612185565b610e2d565b005b34801561034857600080fd5b50610351610e56565b60405161035e91906120b4565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061201d565b610e5b565b60405161039b91906121d8565b60405180910390f35b3480156103b057600080fd5b506103b9610e8e565b6040516103c691906120b4565b60405180910390f35b3480156103db57600080fd5b506103e4610e94565b6040516103f191906120b4565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c91906121f3565b610e9b565b60405161042e91906120b4565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612220565b610ee3565b60405161046b9190612002565b60405180910390f35b34801561048057600080fd5b50610489610f6e565b6040516104969190611ee7565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906121f3565b611000565b6040516104d39190612002565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe919061201d565b611020565b60405161051a9b9a999897969594939291906122c8565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190611fa7565b611149565b6040516105579190612002565b60405180910390f35b34801561056c57600080fd5b506105876004803603810190610582919061237a565b61116c565b60405161059491906120b4565b60405180910390f35b6105b760048036038101906105b2919061241f565b6111f3565b6040516105c491906120b4565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef91906124fd565b611530565b60405161060191906120b4565b60405180910390f35b6060600380546106199061258c565b80601f01602080910402602001604051908101604052809291908181526020018280546106459061258c565b80156106925780601f1061066757610100808354040283529160200191610692565b820191906000526020600020905b81548152906001019060200180831161067557829003601f168201915b5050505050905090565b6000806106a7611644565b90506106b481858561164c565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546107349061258c565b80601f01602080910402602001604051908101604052809291908181526020018280546107609061258c565b80156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b5050505050905084565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a60008360010154815260200190815260200160002090508160070154421161083c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108339061262f565b60405180910390fd5b600015158260080160009054906101000a900460ff16151514610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b9061269b565b60405180910390fd5b600080600080600090505b85600401548110156109105785600301600082815260200190815260200160002091508160010160009054906101000a900460ff16156108f0578160020154846108e991906126ea565b9350610903565b81600201548361090091906126ea565b92505b808060010191505061089f565b508183101595508580156109925750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610aa0578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660056000600660008154809291906109d39061271e565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b610ac8604051806060016040528060308152602001612ffa603091398484886004015461165e565b60018560080160006101000a81548160ff021916908315150217905550858560080160016101000a81548160ff0219169083151502179055507f926ee3a021d24f18cfab444988fa0338bcaa0f1e0d7c2211c07d10cbad6772948787604051610b32929190612766565b60405180910390a1600086610b475782610b49565b835b9050600087610b585784610b5a565b835b9050600080600090505b8860040154811015610c1d5788600301600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151503610c1057600084866002015485610bb6919061278f565b610bc09190612800565b9050610c00308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838960020154610bfb91906126ea565b611700565b8083610c0c91906126ea565b9250505b8080600101915050610b64565b5060008183610c2c9190612831565b90506000811115610c6757610c66308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611700565b5b60005b600654811015610d305760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610cb6610deb565b610cbf83610e9b565b8d60050154610cce919061278f565b610cd89190612800565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d20573d6000803e3d6000fd5b5050508080600101915050610c6a565b508860080160029054906101000a900460ff1615610ddd578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1397c6e8b8b6009016040518363ffffffff1660e01b8152600401610daa9291906128fe565b600060405180830381600087803b158015610dc457600080fd5b505af1158015610dd8573d6000803e3d6000fd5b505050505b505050505050505050919050565b6000600254905090565b600080610e00611644565b9050610e0d8582856117f4565b610e18858585611700565b60019150509392505050565b60006012905090565b6000600860008581526020019081526020016000209050610e5081338585611888565b50505050565b603c81565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6201518081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610eef8484611149565b90508015610f67578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401610f349392919061292e565b600060405180830381600087803b158015610f4e57600080fd5b505af1158015610f62573d6000803e3d6000fd5b505050505b9392505050565b606060048054610f7d9061258c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa99061258c565b8015610ff65780601f10610fcb57610100808354040283529160200191610ff6565b820191906000526020600020905b815481529060010190602001808311610fd957829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff16908060080160019054906101000a900460ff16908060080160029054906101000a900460ff16908060090180546110c69061258c565b80601f01602080910402602001604051908101604052809291908181526020018280546110f29061258c565b801561113f5780601f106111145761010080835404028352916020019161113f565b820191906000526020600020905b81548152906001019060200180831161112257829003601f168201915b505050505090508b565b600080611154611644565b9050611161818585611700565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000803411611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e906129d7565b60405180910390fd5b603c85101561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290612a43565b60405180910390fd5b620151808511156112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890612aaf565b60405180910390fd5b6000600a60008881526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136290612b1b565b60405180910390fd5b6009600081548092919061137e9061271e565b9190505591506000600860008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878160010181905550348160050181905550868160060181905550864261140591906126ea565b8160070181905550828160000181905550858160080160026101000a81548160ff0219169083151502179055508484826009019182611445929190612d0c565b506114748260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634611989565b6114b1818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346114aa9190612800565b6001611888565b6114ee818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002346114e79190612800565b6000611888565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161151d91906120b4565b60405180910390a1505095945050505050565b6000600b60008154809291906115459061271e565b9190505590506000600a60008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600001819055508383826003019182611604929190612e42565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c8260405161163491906120b4565b60405180910390a1509392505050565b600033905090565b6116598383836001611a0b565b505050565b6116fa848484846040516024016116789493929190612f12565b6040516020818303038152906040527fa7a87853000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611be2565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117725760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161176991906121d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e45760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016117db91906121d8565b60405180910390fd5b6117ef838383611bfc565b505050565b6000611800848461116c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118825781811015611872578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016118699392919061292e565b60405180910390fd5b61188184848484036000611a0b565b5b50505050565b83600701544211156118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690612faa565b60405180910390fd5b6118da833084611700565b60008460040160008154809291906118f19061271e565b91905055905060008560030160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fb5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016119f291906121d8565b60405180910390fd5b611a0760008383611bfc565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a7d5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a7491906121d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aef5760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611ae691906121d8565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611bdc578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611bd391906120b4565b60405180910390a35b50505050565b611bf981611bf1611e21611e42565b63ffffffff16565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c4e578060026000828254611c4291906126ea565b92505081905550611d21565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cda578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611cd19392919061292e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d6a5780600260008282540392505081905550611db7565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e1491906120b4565b60405180910390a3505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b611e4d819050919050565b611e55612fca565b565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e91578082015181840152602081019050611e76565b60008484015250505050565b6000601f19601f8301169050919050565b6000611eb982611e57565b611ec38185611e62565b9350611ed3818560208601611e73565b611edc81611e9d565b840191505092915050565b60006020820190508181036000830152611f018184611eae565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f3e82611f13565b9050919050565b611f4e81611f33565b8114611f5957600080fd5b50565b600081359050611f6b81611f45565b92915050565b6000819050919050565b611f8481611f71565b8114611f8f57600080fd5b50565b600081359050611fa181611f7b565b92915050565b60008060408385031215611fbe57611fbd611f09565b5b6000611fcc85828601611f5c565b9250506020611fdd85828601611f92565b9150509250929050565b60008115159050919050565b611ffc81611fe7565b82525050565b60006020820190506120176000830184611ff3565b92915050565b60006020828403121561203357612032611f09565b5b600061204184828501611f92565b91505092915050565b61205381611f71565b82525050565b61206281611f33565b82525050565b600060808201905061207d600083018761204a565b61208a6020830186612059565b6120976040830185612059565b81810360608301526120a98184611eae565b905095945050505050565b60006020820190506120c9600083018461204a565b92915050565b6000806000606084860312156120e8576120e7611f09565b5b60006120f686828701611f5c565b935050602061210786828701611f5c565b925050604061211886828701611f92565b9150509250925092565b600060ff82169050919050565b61213881612122565b82525050565b6000602082019050612153600083018461212f565b92915050565b61216281611fe7565b811461216d57600080fd5b50565b60008135905061217f81612159565b92915050565b60008060006060848603121561219e5761219d611f09565b5b60006121ac86828701611f92565b93505060206121bd86828701611f92565b92505060406121ce86828701612170565b9150509250925092565b60006020820190506121ed6000830184612059565b92915050565b60006020828403121561220957612208611f09565b5b600061221784828501611f5c565b91505092915050565b60008060006060848603121561223957612238611f09565b5b600061224786828701611f5c565b935050602061225886828701611f92565b925050604061226986828701611f92565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b600061229a82612273565b6122a4818561227e565b93506122b4818560208601611e73565b6122bd81611e9d565b840191505092915050565b6000610160820190506122de600083018e61204a565b6122eb602083018d61204a565b6122f8604083018c612059565b612305606083018b61204a565b612312608083018a61204a565b61231f60a083018961204a565b61232c60c083018861204a565b61233960e0830187611ff3565b612347610100830186611ff3565b612355610120830185611ff3565b818103610140830152612368818461228f565b90509c9b505050505050505050505050565b6000806040838503121561239157612390611f09565b5b600061239f85828601611f5c565b92505060206123b085828601611f5c565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126123df576123de6123ba565b5b8235905067ffffffffffffffff8111156123fc576123fb6123bf565b5b602083019150836001820283011115612418576124176123c4565b5b9250929050565b60008060008060006080868803121561243b5761243a611f09565b5b600061244988828901611f92565b955050602061245a88828901611f92565b945050604061246b88828901612170565b935050606086013567ffffffffffffffff81111561248c5761248b611f0e565b5b612498888289016123c9565b92509250509295509295909350565b60008083601f8401126124bd576124bc6123ba565b5b8235905067ffffffffffffffff8111156124da576124d96123bf565b5b6020830191508360018202830111156124f6576124f56123c4565b5b9250929050565b60008060006040848603121561251657612515611f09565b5b600061252486828701611f5c565b935050602084013567ffffffffffffffff81111561254557612544611f0e565b5b612551868287016124a7565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806125a457607f821691505b6020821081036125b7576125b661255d565b5b50919050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612619602183611e62565b9150612624826125bd565b604082019050919050565b600060208201905081810360008301526126488161260c565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612685601883611e62565b91506126908261264f565b602082019050919050565b600060208201905081810360008301526126b481612678565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126f582611f71565b915061270083611f71565b9250828201905080821115612718576127176126bb565b5b92915050565b600061272982611f71565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361275b5761275a6126bb565b5b600182019050919050565b600060408201905061277b600083018561204a565b6127886020830184611ff3565b9392505050565b600061279a82611f71565b91506127a583611f71565b92508282026127b381611f71565b915082820484148315176127ca576127c96126bb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061280b82611f71565b915061281683611f71565b925082612826576128256127d1565b5b828204905092915050565b600061283c82611f71565b915061284783611f71565b925082820390508181111561285f5761285e6126bb565b5b92915050565b60008190508160005260206000209050919050565b600081546128878161258c565b612891818661227e565b945060018216600081146128ac57600181146128c2576128f5565b60ff1983168652811515602002860193506128f5565b6128cb85612865565b60005b838110156128ed578154818901526001820191506020810190506128ce565b808801955050505b50505092915050565b60006040820190506129136000830185611ff3565b8181036020830152612925818461287a565b90509392505050565b60006060820190506129436000830186612059565b612950602083018561204a565b61295d604083018461204a565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006129c1602b83611e62565b91506129cc82612965565b604082019050919050565b600060208201905081810360008301526129f0816129b4565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000612a2d601583611e62565b9150612a38826129f7565b602082019050919050565b60006020820190508181036000830152612a5c81612a20565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000612a99601483611e62565b9150612aa482612a63565b602082019050919050565b60006020820190508181036000830152612ac881612a8c565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000612b05601583611e62565b9150612b1082612acf565b602082019050919050565b60006020820190508181036000830152612b3481612af8565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b600060088302612bc27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612b85565b612bcc8683612b85565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612c09612c04612bff84611f71565b612be4565b611f71565b9050919050565b6000819050919050565b612c2383612bee565b612c37612c2f82612c10565b848454612b92565b825550505050565b600090565b612c4c612c3f565b612c57818484612c1a565b505050565b5b81811015612c7b57612c70600082612c44565b600181019050612c5d565b5050565b601f821115612cc057612c9181612865565b612c9a84612b75565b81016020851015612ca9578190505b612cbd612cb585612b75565b830182612c5c565b50505b505050565b600082821c905092915050565b6000612ce360001984600802612cc5565b1980831691505092915050565b6000612cfc8383612cd2565b9150826002028217905092915050565b612d168383612b3b565b67ffffffffffffffff811115612d2f57612d2e612b46565b5b612d39825461258c565b612d44828285612c7f565b6000601f831160018114612d735760008415612d61578287013590505b612d6b8582612cf0565b865550612dd3565b601f198416612d8186612865565b60005b82811015612da957848901358255600182019150602085019450602081019050612d84565b86831015612dc65784890135612dc2601f891682612cd2565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b60008190508160005260206000209050919050565b601f821115612e3d57612e0e81612de7565b612e1784612b75565b81016020851015612e26578190505b612e3a612e3285612b75565b830182612c5c565b50505b505050565b612e4c8383612ddc565b67ffffffffffffffff811115612e6557612e64612b46565b5b612e6f825461258c565b612e7a828285612dfc565b6000601f831160018114612ea95760008415612e97578287013590505b612ea18582612cf0565b865550612f09565b601f198416612eb786612de7565b60005b82811015612edf57848901358255600182019150602085019450602081019050612eba565b86831015612efc5784890135612ef8601f891682612cd2565b8355505b6001600288020188555050505b50505050505050565b60006080820190508181036000830152612f2c8187611eae565b9050612f3b602083018661204a565b612f48604083018561204a565b612f55606083018461204a565b95945050505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000612f94601883611e62565b9150612f9f82612f5e565b602082019050919050565b60006020820190508181036000830152612fc381612f87565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfe7374616b6564466f723a2025642c207374616b6564416761696e73743a2025642c207374616b65436f756e743a202564a2646970667358221220e39687c4952d0b3ddd84b76f75b5808550d7c9e903a0739832bcdfc51bedad1b64736f6c63430008180033", + "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f524550000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000324565b508060049081620000a1919062000324565b5050506200040b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200012c57607f821691505b602082108103620001425762000141620000e4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200016d565b620001b886836200016d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000205620001ff620001f984620001d0565b620001da565b620001d0565b9050919050565b6000819050919050565b6200022183620001e4565b6200023962000230826200020c565b8484546200017a565b825550505050565b600090565b6200025062000241565b6200025d81848462000216565b505050565b5b8181101562000285576200027960008262000246565b60018101905062000263565b5050565b601f821115620002d4576200029e8162000148565b620002a9846200015d565b81016020851015620002b9578190505b620002d1620002c8856200015d565b83018262000262565b50505b505050565b600082821c905092915050565b6000620002f960001984600802620002d9565b1980831691505092915050565b6000620003148383620002e6565b9150826002028217905092915050565b6200032f82620000aa565b67ffffffffffffffff8111156200034b576200034a620000b5565b5b62000357825462000113565b6200036482828562000289565b600060209050601f8311600181146200039c576000841562000387578287015190505b62000393858262000306565b86555062000403565b601f198416620003ac8662000148565b60005b82811015620003d657848901518255600182019150602085019450602081019050620003af565b86831015620003f65784890151620003f2601f891682620002e6565b8355505b6001600288020188555050505b505050505050565b613360806200041b6000396000f3fe60806040526004361061014b5760003560e01c80635daf08ca116100b6578063a230c5241161006f578063a230c524146104da578063a233627914610517578063a9059cbb1461055f578063d6ba43841461059c578063dd62ed3e146105c7578063ff869240146106045761014b565b80635daf08ca146103a2578063642b5bfb146103df5780636db5c8fd1461040a57806370a0823114610435578063883802741461047257806395d89b41146104af5761014b565b806317c182171161010857806317c182171461027e57806318160ddd146102bb57806323b872dd146102e6578063313ce56714610323578063561b24631461034e57806356715761146103775761014b565b806306fdde0314610150578063095ea7b31461017b5780630b1e7f83146101b85780630ce7e299146101f857806311aee3801461022857806317906c2e14610253575b600080fd5b34801561015c57600080fd5b50610165610641565b604051610172919061206e565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d919061212e565b6106d3565b6040516101af9190612189565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da91906121a4565b6106f6565b6040516101ef94939291906121ef565b60405180910390f35b610212600480360381019061020d91906122cc565b6107ee565b60405161021f919061237b565b60405180910390f35b34801561023457600080fd5b5061023d610bf7565b60405161024a919061237b565b60405180910390f35b34801561025f57600080fd5b50610268610bfd565b604051610275919061237b565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a091906121a4565b610c03565b6040516102b29190612189565b60405180910390f35b3480156102c757600080fd5b506102d061129e565b6040516102dd919061237b565b60405180910390f35b3480156102f257600080fd5b5061030d60048036038101906103089190612396565b6112a8565b60405161031a9190612189565b60405180910390f35b34801561032f57600080fd5b506103386112d7565b6040516103459190612405565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612420565b6112e0565b005b34801561038357600080fd5b5061038c611309565b604051610399919061237b565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906121a4565b61130e565b6040516103d69190612473565b60405180910390f35b3480156103eb57600080fd5b506103f4611341565b604051610401919061237b565b60405180910390f35b34801561041657600080fd5b5061041f611347565b60405161042c919061237b565b60405180910390f35b34801561044157600080fd5b5061045c6004803603810190610457919061248e565b611351565b604051610469919061237b565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906124bb565b611399565b6040516104a69190612189565b60405180910390f35b3480156104bb57600080fd5b506104c4611424565b6040516104d1919061206e565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc919061248e565b6114b6565b60405161050e9190612189565b60405180910390f35b34801561052357600080fd5b5061053e600480360381019061053991906121a4565b6114d6565b6040516105569c9b9a99989796959493929190612563565b60405180910390f35b34801561056b57600080fd5b506105866004803603810190610581919061212e565b611605565b6040516105939190612189565b60405180910390f35b3480156105a857600080fd5b506105b1611628565b6040516105be919061237b565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190612624565b611630565b6040516105fb919061237b565b60405180910390f35b34801561061057600080fd5b5061062b600480360381019061062691906126ba565b6116b7565b604051610638919061237b565b60405180910390f35b60606003805461065090612749565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90612749565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b5050505050905090565b6000806106de6117cb565b90506106eb8185856117d3565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600301805461076b90612749565b80601f016020809104026020016040519081016040528092919081815260200182805461079790612749565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905084565b6000803411610832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610829906127ec565b60405180910390fd5b6001871015610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90612858565b60405180910390fd5b651cae8c13e0008711156108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b6906128c4565b60405180910390fd5b6313de43558587633b9aca006108d59190612913565b6108df9190612984565b1015610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790612a01565b60405180910390fd5b84861115610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612a6d565b60405180910390fd5b6000600a60008a81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0490612ad9565b60405180910390fd5b60096000815480929190610a2090612af9565b9190505591506000600860008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508981600101819055503481600501819055508688633b9aca00610aa39190612913565b610aad9190612984565b81600601819055508881600701819055508842610aca9190612b41565b8160080181905550828160000181905550858160090160026101000a81548160ff021916908315150217905550848482600a019182610b0a929190612d5b565b50610b398260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346117e5565b610b76818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600234610b6f9190612984565b6001611867565b610bb3818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600234610bac9190612984565b6000611867565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a83604051610be2919061237b565b60405180910390a15050979650505050505050565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a600083600101548152602001908152602001600020905081600801544211610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390612e9d565b60405180910390fd5b600015158260090160009054906101000a900460ff16151514610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb90612f09565b60405180910390fd5b600080600080600090505b8560040154811015610d505785600301600082815260200190815260200160002091508160010160009054906101000a900460ff1615610d3057816002015484610d299190612b41565b9350610d43565b816002015483610d409190612b41565b92505b8080600101915050610cdf565b508460060154610d5e61129e565b610d689190612913565b8284610d749190612b41565b633b9aca00610d839190612913565b1015610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90612f75565b60405180910390fd5b818310159550858015610e455750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610f53578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600060066000815480929190610e8690612af9565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b610f7b6040518060600160405280603081526020016132fb6030913984848860040154611968565b60018560090160006101000a81548160ff021916908315150217905550858560090160016101000a81548160ff0219169083151502179055507f926ee3a021d24f18cfab444988fa0338bcaa0f1e0d7c2211c07d10cbad6772948787604051610fe5929190612f95565b60405180910390a1600086610ffa5782610ffc565b835b905060008761100b578461100d565b835b9050600080600090505b88600401548110156110d05788600301600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a1515036110c3576000848660020154856110699190612913565b6110739190612984565b90506110b3308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168389600201546110ae9190612b41565b611a0a565b80836110bf9190612b41565b9250505b8080600101915050611017565b50600081836110df9190612fbe565b9050600081111561111a57611119308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611a0a565b5b60005b6006548110156111e35760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061116961129e565b61117283611351565b8d600501546111819190612913565b61118b9190612984565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d3573d6000803e3d6000fd5b505050808060010191505061111d565b508860090160029054906101000a900460ff1615611290578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1397c6e8b8b600a016040518363ffffffff1660e01b815260040161125d929190613076565b600060405180830381600087803b15801561127757600080fd5b505af115801561128b573d6000803e3d6000fd5b505050505b505050505050505050919050565b6000600254905090565b6000806112b36117cb565b90506112c0858285611afe565b6112cb858585611a0a565b60019150509392505050565b60006012905090565b600060086000858152602001908152602001600020905061130381338585611867565b50505050565b600181565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b651cae8c13e00081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006113a58484611605565b9050801561141d578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016113ea939291906130a6565b600060405180830381600087803b15801561140457600080fd5b505af1158015611418573d6000803e3d6000fd5b505050505b9392505050565b60606004805461143390612749565b80601f016020809104026020016040519081016040528092919081815260200182805461145f90612749565b80156114ac5780601f10611481576101008083540402835291602001916114ac565b820191906000526020600020905b81548152906001019060200180831161148f57829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050154908060060154908060070154908060080154908060090160009054906101000a900460ff16908060090160019054906101000a900460ff16908060090160029054906101000a900460ff169080600a01805461158290612749565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae90612749565b80156115fb5780601f106115d0576101008083540402835291602001916115fb565b820191906000526020600020905b8154815290600101906020018083116115de57829003601f168201915b505050505090508c565b6000806116106117cb565b905061161d818585611a0a565b600191505092915050565b6313de435581565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600b60008154809291906116cc90612af9565b9190505590506000600a60008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160000181905550838382600301918261178b929190613143565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c826040516117bb919061237b565b60405180910390a1509392505050565b600033905090565b6117e08383836001611b92565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118575760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161184e9190612473565b60405180910390fd5b61186360008383611d69565b5050565b83600801544211156118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a59061325f565b60405180910390fd5b6118b9833084611a0a565b60008460040160008154809291906118d090612af9565b91905055905060008560030160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b611a0484848484604051602401611982949392919061327f565b6040516020818303038152906040527fa7a87853000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f8e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a7c5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611a739190612473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aee5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611ae59190612473565b60405180910390fd5b611af9838383611d69565b505050565b6000611b0a8484611630565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b8c5781811015611b7c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611b73939291906130a6565b60405180910390fd5b611b8b84848484036000611b92565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c045760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611bfb9190612473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c765760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611c6d9190612473565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611d63578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d5a919061237b565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dbb578060026000828254611daf9190612b41565b92505081905550611e8e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e47578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611e3e939291906130a6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ed75780600260008282540392505081905550611f24565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f81919061237b565b60405180910390a3505050565b611fa581611f9d611fa8611fc9565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b611fd4819050919050565b611fdc6132cb565b565b600081519050919050565b600082825260208201905092915050565b60005b83811015612018578082015181840152602081019050611ffd565b60008484015250505050565b6000601f19601f8301169050919050565b600061204082611fde565b61204a8185611fe9565b935061205a818560208601611ffa565b61206381612024565b840191505092915050565b600060208201905081810360008301526120888184612035565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120c58261209a565b9050919050565b6120d5816120ba565b81146120e057600080fd5b50565b6000813590506120f2816120cc565b92915050565b6000819050919050565b61210b816120f8565b811461211657600080fd5b50565b60008135905061212881612102565b92915050565b6000806040838503121561214557612144612090565b5b6000612153858286016120e3565b925050602061216485828601612119565b9150509250929050565b60008115159050919050565b6121838161216e565b82525050565b600060208201905061219e600083018461217a565b92915050565b6000602082840312156121ba576121b9612090565b5b60006121c884828501612119565b91505092915050565b6121da816120f8565b82525050565b6121e9816120ba565b82525050565b600060808201905061220460008301876121d1565b61221160208301866121e0565b61221e60408301856121e0565b81810360608301526122308184612035565b905095945050505050565b6122448161216e565b811461224f57600080fd5b50565b6000813590506122618161223b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261228c5761228b612267565b5b8235905067ffffffffffffffff8111156122a9576122a861226c565b5b6020830191508360018202830111156122c5576122c4612271565b5b9250929050565b600080600080600080600060c0888a0312156122eb576122ea612090565b5b60006122f98a828b01612119565b975050602061230a8a828b01612119565b965050604061231b8a828b01612119565b955050606061232c8a828b01612119565b945050608061233d8a828b01612252565b93505060a088013567ffffffffffffffff81111561235e5761235d612095565b5b61236a8a828b01612276565b925092505092959891949750929550565b600060208201905061239060008301846121d1565b92915050565b6000806000606084860312156123af576123ae612090565b5b60006123bd868287016120e3565b93505060206123ce868287016120e3565b92505060406123df86828701612119565b9150509250925092565b600060ff82169050919050565b6123ff816123e9565b82525050565b600060208201905061241a60008301846123f6565b92915050565b60008060006060848603121561243957612438612090565b5b600061244786828701612119565b935050602061245886828701612119565b925050604061246986828701612252565b9150509250925092565b600060208201905061248860008301846121e0565b92915050565b6000602082840312156124a4576124a3612090565b5b60006124b2848285016120e3565b91505092915050565b6000806000606084860312156124d4576124d3612090565b5b60006124e2868287016120e3565b93505060206124f386828701612119565b925050604061250486828701612119565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60006125358261250e565b61253f8185612519565b935061254f818560208601611ffa565b61255881612024565b840191505092915050565b600061018082019050612579600083018f6121d1565b612586602083018e6121d1565b612593604083018d6121e0565b6125a0606083018c6121d1565b6125ad608083018b6121d1565b6125ba60a083018a6121d1565b6125c760c08301896121d1565b6125d460e08301886121d1565b6125e261010083018761217a565b6125f061012083018661217a565b6125fe61014083018561217a565b818103610160830152612611818461252a565b90509d9c50505050505050505050505050565b6000806040838503121561263b5761263a612090565b5b6000612649858286016120e3565b925050602061265a858286016120e3565b9150509250929050565b60008083601f84011261267a57612679612267565b5b8235905067ffffffffffffffff8111156126975761269661226c565b5b6020830191508360018202830111156126b3576126b2612271565b5b9250929050565b6000806000604084860312156126d3576126d2612090565b5b60006126e1868287016120e3565b935050602084013567ffffffffffffffff81111561270257612701612095565b5b61270e86828701612664565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061276157607f821691505b6020821081036127745761277361271a565b5b50919050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006127d6602b83611fe9565b91506127e18261277a565b604082019050919050565b60006020820190508181036000830152612805816127c9565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000612842601583611fe9565b915061284d8261280c565b602082019050919050565b6000602082019050818103600083015261287181612835565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b60006128ae601483611fe9565b91506128b982612878565b602082019050919050565b600060208201905081810360008301526128dd816128a1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061291e826120f8565b9150612929836120f8565b9250828202612937816120f8565b9150828204841483151761294e5761294d6128e4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061298f826120f8565b915061299a836120f8565b9250826129aa576129a9612955565b5b828204905092915050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b60006129eb601783611fe9565b91506129f6826129b5565b602082019050919050565b60006020820190508181036000830152612a1a816129de565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000612a57601a83611fe9565b9150612a6282612a21565b602082019050919050565b60006020820190508181036000830152612a8681612a4a565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000612ac3601583611fe9565b9150612ace82612a8d565b602082019050919050565b60006020820190508181036000830152612af281612ab6565b9050919050565b6000612b04826120f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3657612b356128e4565b5b600182019050919050565b6000612b4c826120f8565b9150612b57836120f8565b9250828201905080821115612b6f57612b6e6128e4565b5b92915050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612c117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612bd4565b612c1b8683612bd4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612c58612c53612c4e846120f8565b612c33565b6120f8565b9050919050565b6000819050919050565b612c7283612c3d565b612c86612c7e82612c5f565b848454612be1565b825550505050565b600090565b612c9b612c8e565b612ca6818484612c69565b505050565b5b81811015612cca57612cbf600082612c93565b600181019050612cac565b5050565b601f821115612d0f57612ce081612baf565b612ce984612bc4565b81016020851015612cf8578190505b612d0c612d0485612bc4565b830182612cab565b50505b505050565b600082821c905092915050565b6000612d3260001984600802612d14565b1980831691505092915050565b6000612d4b8383612d21565b9150826002028217905092915050565b612d658383612b75565b67ffffffffffffffff811115612d7e57612d7d612b80565b5b612d888254612749565b612d93828285612cce565b6000601f831160018114612dc25760008415612db0578287013590505b612dba8582612d3f565b865550612e22565b601f198416612dd086612baf565b60005b82811015612df857848901358255600182019150602085019450602081019050612dd3565b86831015612e155784890135612e11601f891682612d21565b8355505b6001600288020188555050505b50505050505050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e87602183611fe9565b9150612e9282612e2b565b604082019050919050565b60006020820190508181036000830152612eb681612e7a565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612ef3601883611fe9565b9150612efe82612ebd565b602082019050919050565b60006020820190508181036000830152612f2281612ee6565b9050919050565b7f51756f72756d20666f72207468697320706f6f6c20776173206e6f74206d6574600082015250565b6000612f5f602083611fe9565b9150612f6a82612f29565b602082019050919050565b60006020820190508181036000830152612f8e81612f52565b9050919050565b6000604082019050612faa60008301856121d1565b612fb7602083018461217a565b9392505050565b6000612fc9826120f8565b9150612fd4836120f8565b9250828203905081811115612fec57612feb6128e4565b5b92915050565b60008154612fff81612749565b6130098186612519565b94506001821660008114613024576001811461303a5761306d565b60ff19831686528115156020028601935061306d565b61304385612baf565b60005b8381101561306557815481890152600182019150602081019050613046565b808801955050505b50505092915050565b600060408201905061308b600083018561217a565b818103602083015261309d8184612ff2565b90509392505050565b60006060820190506130bb60008301866121e0565b6130c860208301856121d1565b6130d560408301846121d1565b949350505050565b600082905092915050565b60008190508160005260206000209050919050565b601f82111561313e5761310f816130e8565b61311884612bc4565b81016020851015613127578190505b61313b61313385612bc4565b830182612cab565b50505b505050565b61314d83836130dd565b67ffffffffffffffff81111561316657613165612b80565b5b6131708254612749565b61317b8282856130fd565b6000601f8311600181146131aa5760008415613198578287013590505b6131a28582612d3f565b86555061320a565b601f1984166131b8866130e8565b60005b828110156131e0578489013582556001820191506020850194506020810190506131bb565b868310156131fd57848901356131f9601f891682612d21565b8355505b6001600288020188555050505b50505050505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000613249601883611fe9565b915061325482613213565b602082019050919050565b600060208201905081810360008301526132788161323c565b9050919050565b600060808201905081810360008301526132998187612035565b90506132a860208301866121d1565b6132b560408301856121d1565b6132c260608301846121d1565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfe7374616b6564466f723a2025642c207374616b6564416761696e73743a2025642c207374616b65436f756e743a202564a26469706673582212204aed0732d16704c2940d3e42d7f895f3d9e744959416cb2c6c5dd7a729b3e22464736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061014b5760003560e01c80635daf08ca116100b6578063a230c5241161006f578063a230c524146104da578063a233627914610517578063a9059cbb1461055f578063d6ba43841461059c578063dd62ed3e146105c7578063ff869240146106045761014b565b80635daf08ca146103a2578063642b5bfb146103df5780636db5c8fd1461040a57806370a0823114610435578063883802741461047257806395d89b41146104af5761014b565b806317c182171161010857806317c182171461027e57806318160ddd146102bb57806323b872dd146102e6578063313ce56714610323578063561b24631461034e57806356715761146103775761014b565b806306fdde0314610150578063095ea7b31461017b5780630b1e7f83146101b85780630ce7e299146101f857806311aee3801461022857806317906c2e14610253575b600080fd5b34801561015c57600080fd5b50610165610641565b604051610172919061206e565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d919061212e565b6106d3565b6040516101af9190612189565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da91906121a4565b6106f6565b6040516101ef94939291906121ef565b60405180910390f35b610212600480360381019061020d91906122cc565b6107ee565b60405161021f919061237b565b60405180910390f35b34801561023457600080fd5b5061023d610bf7565b60405161024a919061237b565b60405180910390f35b34801561025f57600080fd5b50610268610bfd565b604051610275919061237b565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a091906121a4565b610c03565b6040516102b29190612189565b60405180910390f35b3480156102c757600080fd5b506102d061129e565b6040516102dd919061237b565b60405180910390f35b3480156102f257600080fd5b5061030d60048036038101906103089190612396565b6112a8565b60405161031a9190612189565b60405180910390f35b34801561032f57600080fd5b506103386112d7565b6040516103459190612405565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190612420565b6112e0565b005b34801561038357600080fd5b5061038c611309565b604051610399919061237b565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906121a4565b61130e565b6040516103d69190612473565b60405180910390f35b3480156103eb57600080fd5b506103f4611341565b604051610401919061237b565b60405180910390f35b34801561041657600080fd5b5061041f611347565b60405161042c919061237b565b60405180910390f35b34801561044157600080fd5b5061045c6004803603810190610457919061248e565b611351565b604051610469919061237b565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906124bb565b611399565b6040516104a69190612189565b60405180910390f35b3480156104bb57600080fd5b506104c4611424565b6040516104d1919061206e565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc919061248e565b6114b6565b60405161050e9190612189565b60405180910390f35b34801561052357600080fd5b5061053e600480360381019061053991906121a4565b6114d6565b6040516105569c9b9a99989796959493929190612563565b60405180910390f35b34801561056b57600080fd5b506105866004803603810190610581919061212e565b611605565b6040516105939190612189565b60405180910390f35b3480156105a857600080fd5b506105b1611628565b6040516105be919061237b565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190612624565b611630565b6040516105fb919061237b565b60405180910390f35b34801561061057600080fd5b5061062b600480360381019061062691906126ba565b6116b7565b604051610638919061237b565b60405180910390f35b60606003805461065090612749565b80601f016020809104026020016040519081016040528092919081815260200182805461067c90612749565b80156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b5050505050905090565b6000806106de6117cb565b90506106eb8185856117d3565b600191505092915050565b600a6020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600301805461076b90612749565b80601f016020809104026020016040519081016040528092919081815260200182805461079790612749565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905084565b6000803411610832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610829906127ec565b60405180910390fd5b6001871015610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90612858565b60405180910390fd5b651cae8c13e0008711156108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b6906128c4565b60405180910390fd5b6313de43558587633b9aca006108d59190612913565b6108df9190612984565b1015610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790612a01565b60405180910390fd5b84861115610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612a6d565b60405180910390fd5b6000600a60008a81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0490612ad9565b60405180910390fd5b60096000815480929190610a2090612af9565b9190505591506000600860008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508981600101819055503481600501819055508688633b9aca00610aa39190612913565b610aad9190612984565b81600601819055508881600701819055508842610aca9190612b41565b8160080181905550828160000181905550858160090160026101000a81548160ff021916908315150217905550848482600a019182610b0a929190612d5b565b50610b398260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346117e5565b610b76818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600234610b6f9190612984565b6001611867565b610bb3818360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600234610bac9190612984565b6000611867565b7f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a83604051610be2919061237b565b60405180910390a15050979650505050505050565b60065481565b600b5481565b6000806008600084815260200190815260200160002090506000600a600083600101548152602001908152602001600020905081600801544211610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390612e9d565b60405180910390fd5b600015158260090160009054906101000a900460ff16151514610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb90612f09565b60405180910390fd5b600080600080600090505b8560040154811015610d505785600301600082815260200190815260200160002091508160010160009054906101000a900460ff1615610d3057816002015484610d299190612b41565b9350610d43565b816002015483610d409190612b41565b92505b8080600101915050610cdf565b508460060154610d5e61129e565b610d689190612913565b8284610d749190612b41565b633b9aca00610d839190612913565b1015610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90612f75565b60405180910390fd5b818310159550858015610e455750600760008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610f53578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005600060066000815480929190610e8690612af9565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b610f7b6040518060600160405280603081526020016132fb6030913984848860040154611968565b60018560090160006101000a81548160ff021916908315150217905550858560090160016101000a81548160ff0219169083151502179055507f926ee3a021d24f18cfab444988fa0338bcaa0f1e0d7c2211c07d10cbad6772948787604051610fe5929190612f95565b60405180910390a1600086610ffa5782610ffc565b835b905060008761100b578461100d565b835b9050600080600090505b88600401548110156110d05788600301600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a1515036110c3576000848660020154856110699190612913565b6110739190612984565b90506110b3308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168389600201546110ae9190612b41565b611a0a565b80836110bf9190612b41565b9250505b8080600101915050611017565b50600081836110df9190612fbe565b9050600081111561111a57611119308960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611a0a565b5b60005b6006548110156111e35760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061116961129e565b61117283611351565b8d600501546111819190612913565b61118b9190612984565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d3573d6000803e3d6000fd5b505050808060010191505061111d565b508860090160029054906101000a900460ff1615611290578860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1397c6e8b8b600a016040518363ffffffff1660e01b815260040161125d929190613076565b600060405180830381600087803b15801561127757600080fd5b505af115801561128b573d6000803e3d6000fd5b505050505b505050505050505050919050565b6000600254905090565b6000806112b36117cb565b90506112c0858285611afe565b6112cb858585611a0a565b60019150509392505050565b60006012905090565b600060086000858152602001908152602001600020905061130381338585611867565b50505050565b600181565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b651cae8c13e00081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006113a58484611605565b9050801561141d578373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016113ea939291906130a6565b600060405180830381600087803b15801561140457600080fd5b505af1158015611418573d6000803e3d6000fd5b505050505b9392505050565b60606004805461143390612749565b80601f016020809104026020016040519081016040528092919081815260200182805461145f90612749565b80156114ac5780601f10611481576101008083540402835291602001916114ac565b820191906000526020600020905b81548152906001019060200180831161148f57829003601f168201915b5050505050905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050154908060060154908060070154908060080154908060090160009054906101000a900460ff16908060090160019054906101000a900460ff16908060090160029054906101000a900460ff169080600a01805461158290612749565b80601f01602080910402602001604051908101604052809291908181526020018280546115ae90612749565b80156115fb5780601f106115d0576101008083540402835291602001916115fb565b820191906000526020600020905b8154815290600101906020018083116115de57829003601f168201915b505050505090508c565b6000806116106117cb565b905061161d818585611a0a565b600191505092915050565b6313de435581565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600b60008154809291906116cc90612af9565b9190505590506000600a60008381526020019081526020016000209050848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160000181905550838382600301918261178b929190613143565b507f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c826040516117bb919061237b565b60405180910390a1509392505050565b600033905090565b6117e08383836001611b92565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118575760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161184e9190612473565b60405180910390fd5b61186360008383611d69565b5050565b83600801544211156118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a59061325f565b60405180910390fd5b6118b9833084611a0a565b60008460040160008154809291906118d090612af9565b91905055905060008560030160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b611a0484848484604051602401611982949392919061327f565b6040516020818303038152906040527fa7a87853000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f8e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a7c5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611a739190612473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aee5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611ae59190612473565b60405180910390fd5b611af9838383611d69565b505050565b6000611b0a8484611630565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b8c5781811015611b7c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611b73939291906130a6565b60405180910390fd5b611b8b84848484036000611b92565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c045760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611bfb9190612473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c765760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611c6d9190612473565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611d63578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d5a919061237b565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dbb578060026000828254611daf9190612b41565b92505081905550611e8e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e47578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611e3e939291906130a6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ed75780600260008282540392505081905550611f24565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f81919061237b565b60405180910390a3505050565b611fa581611f9d611fa8611fc9565b63ffffffff16565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b611fd4819050919050565b611fdc6132cb565b565b600081519050919050565b600082825260208201905092915050565b60005b83811015612018578082015181840152602081019050611ffd565b60008484015250505050565b6000601f19601f8301169050919050565b600061204082611fde565b61204a8185611fe9565b935061205a818560208601611ffa565b61206381612024565b840191505092915050565b600060208201905081810360008301526120888184612035565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120c58261209a565b9050919050565b6120d5816120ba565b81146120e057600080fd5b50565b6000813590506120f2816120cc565b92915050565b6000819050919050565b61210b816120f8565b811461211657600080fd5b50565b60008135905061212881612102565b92915050565b6000806040838503121561214557612144612090565b5b6000612153858286016120e3565b925050602061216485828601612119565b9150509250929050565b60008115159050919050565b6121838161216e565b82525050565b600060208201905061219e600083018461217a565b92915050565b6000602082840312156121ba576121b9612090565b5b60006121c884828501612119565b91505092915050565b6121da816120f8565b82525050565b6121e9816120ba565b82525050565b600060808201905061220460008301876121d1565b61221160208301866121e0565b61221e60408301856121e0565b81810360608301526122308184612035565b905095945050505050565b6122448161216e565b811461224f57600080fd5b50565b6000813590506122618161223b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261228c5761228b612267565b5b8235905067ffffffffffffffff8111156122a9576122a861226c565b5b6020830191508360018202830111156122c5576122c4612271565b5b9250929050565b600080600080600080600060c0888a0312156122eb576122ea612090565b5b60006122f98a828b01612119565b975050602061230a8a828b01612119565b965050604061231b8a828b01612119565b955050606061232c8a828b01612119565b945050608061233d8a828b01612252565b93505060a088013567ffffffffffffffff81111561235e5761235d612095565b5b61236a8a828b01612276565b925092505092959891949750929550565b600060208201905061239060008301846121d1565b92915050565b6000806000606084860312156123af576123ae612090565b5b60006123bd868287016120e3565b93505060206123ce868287016120e3565b92505060406123df86828701612119565b9150509250925092565b600060ff82169050919050565b6123ff816123e9565b82525050565b600060208201905061241a60008301846123f6565b92915050565b60008060006060848603121561243957612438612090565b5b600061244786828701612119565b935050602061245886828701612119565b925050604061246986828701612252565b9150509250925092565b600060208201905061248860008301846121e0565b92915050565b6000602082840312156124a4576124a3612090565b5b60006124b2848285016120e3565b91505092915050565b6000806000606084860312156124d4576124d3612090565b5b60006124e2868287016120e3565b93505060206124f386828701612119565b925050604061250486828701612119565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60006125358261250e565b61253f8185612519565b935061254f818560208601611ffa565b61255881612024565b840191505092915050565b600061018082019050612579600083018f6121d1565b612586602083018e6121d1565b612593604083018d6121e0565b6125a0606083018c6121d1565b6125ad608083018b6121d1565b6125ba60a083018a6121d1565b6125c760c08301896121d1565b6125d460e08301886121d1565b6125e261010083018761217a565b6125f061012083018661217a565b6125fe61014083018561217a565b818103610160830152612611818461252a565b90509d9c50505050505050505050505050565b6000806040838503121561263b5761263a612090565b5b6000612649858286016120e3565b925050602061265a858286016120e3565b9150509250929050565b60008083601f84011261267a57612679612267565b5b8235905067ffffffffffffffff8111156126975761269661226c565b5b6020830191508360018202830111156126b3576126b2612271565b5b9250929050565b6000806000604084860312156126d3576126d2612090565b5b60006126e1868287016120e3565b935050602084013567ffffffffffffffff81111561270257612701612095565b5b61270e86828701612664565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061276157607f821691505b6020821081036127745761277361271a565b5b50919050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006127d6602b83611fe9565b91506127e18261277a565b604082019050919050565b60006020820190508181036000830152612805816127c9565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000612842601583611fe9565b915061284d8261280c565b602082019050919050565b6000602082019050818103600083015261287181612835565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b60006128ae601483611fe9565b91506128b982612878565b602082019050919050565b600060208201905081810360008301526128dd816128a1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061291e826120f8565b9150612929836120f8565b9250828202612937816120f8565b9150828204841483151761294e5761294d6128e4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061298f826120f8565b915061299a836120f8565b9250826129aa576129a9612955565b5b828204905092915050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b60006129eb601783611fe9565b91506129f6826129b5565b602082019050919050565b60006020820190508181036000830152612a1a816129de565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000612a57601a83611fe9565b9150612a6282612a21565b602082019050919050565b60006020820190508181036000830152612a8681612a4a565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000612ac3601583611fe9565b9150612ace82612a8d565b602082019050919050565b60006020820190508181036000830152612af281612ab6565b9050919050565b6000612b04826120f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b3657612b356128e4565b5b600182019050919050565b6000612b4c826120f8565b9150612b57836120f8565b9250828201905080821115612b6f57612b6e6128e4565b5b92915050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612c117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612bd4565b612c1b8683612bd4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612c58612c53612c4e846120f8565b612c33565b6120f8565b9050919050565b6000819050919050565b612c7283612c3d565b612c86612c7e82612c5f565b848454612be1565b825550505050565b600090565b612c9b612c8e565b612ca6818484612c69565b505050565b5b81811015612cca57612cbf600082612c93565b600181019050612cac565b5050565b601f821115612d0f57612ce081612baf565b612ce984612bc4565b81016020851015612cf8578190505b612d0c612d0485612bc4565b830182612cab565b50505b505050565b600082821c905092915050565b6000612d3260001984600802612d14565b1980831691505092915050565b6000612d4b8383612d21565b9150826002028217905092915050565b612d658383612b75565b67ffffffffffffffff811115612d7e57612d7d612b80565b5b612d888254612749565b612d93828285612cce565b6000601f831160018114612dc25760008415612db0578287013590505b612dba8582612d3f565b865550612e22565b601f198416612dd086612baf565b60005b82811015612df857848901358255600182019150602085019450602081019050612dd3565b86831015612e155784890135612e11601f891682612d21565b8355505b6001600288020188555050505b50505050505050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e87602183611fe9565b9150612e9282612e2b565b604082019050919050565b60006020820190508181036000830152612eb681612e7a565b9050919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000612ef3601883611fe9565b9150612efe82612ebd565b602082019050919050565b60006020820190508181036000830152612f2281612ee6565b9050919050565b7f51756f72756d20666f72207468697320706f6f6c20776173206e6f74206d6574600082015250565b6000612f5f602083611fe9565b9150612f6a82612f29565b602082019050919050565b60006020820190508181036000830152612f8e81612f52565b9050919050565b6000604082019050612faa60008301856121d1565b612fb7602083018461217a565b9392505050565b6000612fc9826120f8565b9150612fd4836120f8565b9250828203905081811115612fec57612feb6128e4565b5b92915050565b60008154612fff81612749565b6130098186612519565b94506001821660008114613024576001811461303a5761306d565b60ff19831686528115156020028601935061306d565b61304385612baf565b60005b8381101561306557815481890152600182019150602081019050613046565b808801955050505b50505092915050565b600060408201905061308b600083018561217a565b818103602083015261309d8184612ff2565b90509392505050565b60006060820190506130bb60008301866121e0565b6130c860208301856121d1565b6130d560408301846121d1565b949350505050565b600082905092915050565b60008190508160005260206000209050919050565b601f82111561313e5761310f816130e8565b61311884612bc4565b81016020851015613127578190505b61313b61313385612bc4565b830182612cab565b50505b505050565b61314d83836130dd565b67ffffffffffffffff81111561316657613165612b80565b5b6131708254612749565b61317b8282856130fd565b6000601f8311600181146131aa5760008415613198578287013590505b6131a28582612d3f565b86555061320a565b601f1984166131b8866130e8565b60005b828110156131e0578489013582556001820191506020850194506020810190506131bb565b868310156131fd57848901356131f9601f891682612d21565b8355505b6001600288020188555050505b50505050505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000613249601883611fe9565b915061325482613213565b602082019050919050565b600060208201905081810360008301526132788161323c565b9050919050565b600060808201905081810360008301526132998187612035565b90506132a860208301866121d1565b6132b560408301856121d1565b6132c260608301846121d1565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfe7374616b6564466f723a2025642c207374616b6564416761696e73743a2025642c207374616b65436f756e743a202564a26469706673582212204aed0732d16704c2940d3e42d7f895f3d9e744959416cb2c6c5dd7a729b3e22464736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Onboarding.json b/client/src/assets/Onboarding.json index 76923fc..069d912 100644 --- a/client/src/assets/Onboarding.json +++ b/client/src/assets/Onboarding.json @@ -332,8 +332,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002a8738038062002a87833981810160405281019062000037919062000138565b81818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a08181525050505050506200017f565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b18262000084565b9050919050565b6000620000c582620000a4565b9050919050565b620000d781620000b8565b8114620000e357600080fd5b50565b600081519050620000f781620000cc565b92915050565b6000819050919050565b6200011281620000fd565b81146200011e57600080fd5b50565b600081519050620001328162000107565b92915050565b600080604083850312156200015257620001516200007f565b5b60006200016285828601620000e6565b9250506020620001758582860162000121565b9150509250929050565b60805160a0516128b1620001d6600039600081816102c50152610e3301526000818161085201528181610bb001528181610cb201528181610d9701528181611093015281816111d4015261129b01526128b16000f3fe6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b5b20c0014610205578063c4a9e1161461022e578063d5a44f8614610259578063e1397c6e1461029a576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c191906115b8565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190611699565b6103cf565b005b3480156100fd57600080fd5b50610118600480360381019061011391906116ec565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c919061175b565b60405180910390f35b34801561015157600080fd5b5061016c60048036038101906101679190611776565b6106a1565b005b34801561017a57600080fd5b5061019560048036038101906101909190611776565b61092e565b6040516101a897969594939291906118d4565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d3919061197d565b610aba565b005b3480156101e657600080fd5b506101ef610e31565b6040516101fc919061175b565b60405180910390f35b34801561021157600080fd5b5061022c600480360381019061022791906119bd565b610e55565b005b34801561023a57600080fd5b5061024361101b565b604051610250919061175b565b60405180910390f35b34801561026557600080fd5b50610280600480360381019061027b9190611776565b611021565b6040516102919594939291906119fd565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190611aa6565b611091565b005b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611b52565b60405180910390fd5b60006003600081548092919061033b90611ba1565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad82611356565b816003018190555083838260040191826103c8929190611e2f565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611f4b565b60405180910390fd5b60006001600081548092919061042790611ba1565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b9190611f6b565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d2919061175b565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b6117b2565b5b8160020160009054906101000a900460ff1660038111156105305761052f6117b2565b5b14610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611feb565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106139061207d565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610644576106436117b2565b5b0217905550838383600501918261065c929190611e2f565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c919061175b565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107409061210f565b60405180910390fd5b8060020154421161078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906121a1565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d89061220d565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a9061229f565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af9291906122bf565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f291906122fd565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610922919061175b565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611c52565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611c52565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611c52565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae46117b2565b5b8160020160009054906101000a900460ff166003811115610b0957610b086117b2565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090612376565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a6117b2565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c3092919061241a565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c73919061245f565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca692919061248c565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a8660010154610cfd91906124e4565b8660010154610d0c9190612515565b84603c60018b604051602001610d22919061175b565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610d50949392919061259e565b60206040518083038185885af1158015610d6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d93919061245f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610df7939291906125ea565b600060405180830381600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490612693565b60405180910390fd5b8060030160019054906101000a900460ff1615610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f469061220d565b60405180910390fd5b8060030160009054906101000a900460ff1615610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f989061229f565b60405180910390fd5b8060020154421115610fc6578142610fb99190611f6b565b8160020181905550610fdf565b818160020154610fd69190611f6b565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161100e919061175b565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690612725565b60405180910390fd5b600082828101906111309190611776565b90506000600260008381526020019081526020016000209050846111d0578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461119d91906124e4565b9081150290604051600060405180830381858888f193505050501580156111c8573d6000803e3d6000fd5b505050611351565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b815260040161125492919061241a565b6020604051808303816000875af1158015611273573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611297919061245f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a84600101546112e691906124e4565b83603c60006040518563ffffffff1660e01b81526004016113099392919061276b565b60206040518083038185885af1158015611327573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061134c919061245f565b505050505b505050565b60006113606113d4565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516113c69291906127b5565b60405180910390a150919050565b60008060005b6001548110156114585760008082815260200190815260200160002060030160009054906101000a900460ff1661144b5760008082815260200190815260200160002060020154421161144b5760008082815260200190815260200160002060010154826114489190611f6b565b91505b80806001019150506113da565b506000811161149c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114939061282a565b60405180910390fd5b600081446114aa919061284a565b9050600080600090505b6001548110156115425760008082815260200190815260200160002060030160009054906101000a900460ff16611535576000808281526020019081526020016000206002015442116115355760008082815260200190815260200160002060010154826115229190611f6b565b91508282111561153457809450611542565b5b80806001019150506114b4565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261157857611577611553565b5b8235905067ffffffffffffffff81111561159557611594611558565b5b6020830191508360018202830111156115b1576115b061155d565b5b9250929050565b600080602083850312156115cf576115ce611549565b5b600083013567ffffffffffffffff8111156115ed576115ec61154e565b5b6115f985828601611562565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061163082611605565b9050919050565b61164081611625565b811461164b57600080fd5b50565b60008135905061165d81611637565b92915050565b6000819050919050565b61167681611663565b811461168157600080fd5b50565b6000813590506116938161166d565b92915050565b6000806000606084860312156116b2576116b1611549565b5b60006116c08682870161164e565b93505060206116d186828701611684565b92505060406116e286828701611684565b9150509250925092565b60008060006040848603121561170557611704611549565b5b600061171386828701611684565b935050602084013567ffffffffffffffff8111156117345761173361154e565b5b61174086828701611562565b92509250509250925092565b61175581611663565b82525050565b6000602082019050611770600083018461174c565b92915050565b60006020828403121561178c5761178b611549565b5b600061179a84828501611684565b91505092915050565b6117ac81611625565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106117f2576117f16117b2565b5b50565b6000819050611803826117e1565b919050565b6000611813826117f5565b9050919050565b61182381611808565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611863578082015181840152602081019050611848565b60008484015250505050565b6000601f19601f8301169050919050565b600061188b82611829565b6118958185611834565b93506118a5818560208601611845565b6118ae8161186f565b840191505092915050565b60008115159050919050565b6118ce816118b9565b82525050565b600060e0820190506118e9600083018a6117a3565b6118f6602083018961174c565b611903604083018861181a565b611910606083018761174c565b81810360808301526119228186611880565b905081810360a08301526119368185611880565b905061194560c08301846118c5565b98975050505050505050565b61195a816118b9565b811461196557600080fd5b50565b60008135905061197781611951565b92915050565b6000806040838503121561199457611993611549565b5b60006119a285828601611684565b92505060206119b385828601611968565b9150509250929050565b600080604083850312156119d4576119d3611549565b5b60006119e285828601611684565b92505060206119f385828601611684565b9150509250929050565b600060a082019050611a1260008301886117a3565b611a1f602083018761174c565b611a2c604083018661174c565b611a3960608301856118c5565b611a4660808301846118c5565b9695505050505050565b60008083601f840112611a6657611a65611553565b5b8235905067ffffffffffffffff811115611a8357611a82611558565b5b602083019150836001820283011115611a9f57611a9e61155d565b5b9250929050565b600080600060408486031215611abf57611abe611549565b5b6000611acd86828701611968565b935050602084013567ffffffffffffffff811115611aee57611aed61154e565b5b611afa86828701611a50565b92509250509250925092565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b3c601083611834565b9150611b4782611b06565b602082019050919050565b60006020820190508181036000830152611b6b81611b2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bac82611663565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bde57611bdd611b72565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c6a57607f821691505b602082108103611c7d57611c7c611c23565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ce57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611ca8565b611cef8683611ca8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d2c611d27611d2284611663565b611d07565b611663565b9050919050565b6000819050919050565b611d4683611d11565b611d5a611d5282611d33565b848454611cb5565b825550505050565b600090565b611d6f611d62565b611d7a818484611d3d565b505050565b5b81811015611d9e57611d93600082611d67565b600181019050611d80565b5050565b601f821115611de357611db481611c83565b611dbd84611c98565b81016020851015611dcc578190505b611de0611dd885611c98565b830182611d7f565b50505b505050565b600082821c905092915050565b6000611e0660001984600802611de8565b1980831691505092915050565b6000611e1f8383611df5565b9150826002028217905092915050565b611e398383611be9565b67ffffffffffffffff811115611e5257611e51611bf4565b5b611e5c8254611c52565b611e67828285611da2565b6000601f831160018114611e965760008415611e84578287013590505b611e8e8582611e13565b865550611ef6565b601f198416611ea486611c83565b60005b82811015611ecc57848901358255600182019150602085019450602081019050611ea7565b86831015611ee95784890135611ee5601f891682611df5565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f35601183611834565b9150611f4082611eff565b602082019050919050565b60006020820190508181036000830152611f6481611f28565b9050919050565b6000611f7682611663565b9150611f8183611663565b9250828201905080821115611f9957611f98611b72565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611fd5601883611834565b9150611fe082611f9f565b602082019050919050565b6000602082019050818103600083015261200481611fc8565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612067603a83611834565b91506120728261200b565b604082019050919050565b600060208201905081810360008301526120968161205a565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006120f9603483611834565b91506121048261209d565b604082019050919050565b60006020820190508181036000830152612128816120ec565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061218b602283611834565b91506121968261212f565b604082019050919050565b600060208201905081810360008301526121ba8161217e565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006121f7602083611834565b9150612202826121c1565b602082019050919050565b60006020820190508181036000830152612226816121ea565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612289602483611834565b91506122948261222d565b604082019050919050565b600060208201905081810360008301526122b88161227c565b9050919050565b60006040820190506122d460008301856117a3565b6122e1602083018461174c565b9392505050565b6000815190506122f781611951565b92915050565b60006020828403121561231357612312611549565b5b6000612321848285016122e8565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612360602083611834565b915061236b8261232a565b602082019050919050565b6000602082019050818103600083015261238f81612353565b9050919050565b600081546123a381611c52565b6123ad8186611834565b945060018216600081146123c857600181146123de57612411565b60ff198316865281151560200286019350612411565b6123e785611c83565b60005b83811015612409578154818901526001820191506020810190506123ea565b808801955050505b50505092915050565b600060408201905061242f60008301856117a3565b81810360208301526124418184612396565b90509392505050565b6000815190506124598161166d565b92915050565b60006020828403121561247557612474611549565b5b60006124838482850161244a565b91505092915050565b60006040820190506124a1600083018561174c565b6124ae60208301846118c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124ef82611663565b91506124fa83611663565b92508261250a576125096124b5565b5b828204905092915050565b600061252082611663565b915061252b83611663565b925082820390508181111561254357612542611b72565b5b92915050565b600081519050919050565b600082825260208201905092915050565b600061257082612549565b61257a8185612554565b935061258a818560208601611845565b6125938161186f565b840191505092915050565b60006080820190506125b3600083018761174c565b6125c0602083018661174c565b6125cd60408301856118c5565b81810360608301526125df8184612565565b905095945050505050565b60006060820190506125ff600083018661174c565b61260c602083018561174c565b61261960408301846118c5565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061267d603383611834565b915061268882612621565b604082019050919050565b600060208201905081810360008301526126ac81612670565b9050919050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b600061270f603183611834565b915061271a826126b3565b604082019050919050565b6000602082019050818103600083015261273e81612702565b9050919050565b50565b6000612755600083612554565b915061276082612745565b600082019050919050565b6000608082019050612780600083018661174c565b61278d602083018561174c565b61279a60408301846118c5565b81810360608301526127ab81612748565b9050949350505050565b60006040820190506127ca600083018561174c565b6127d7602083018461174c565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612814601a83611834565b915061281f826127de565b602082019050919050565b6000602082019050818103600083015261284381612807565b9050919050565b600061285582611663565b915061286083611663565b9250826128705761286f6124b5565b5b82820690509291505056fea2646970667358221220ca033f077f2c2c4503313337828e15ec6eaeae3147b7bc42595de97c2c1a886e64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b5b20c0014610205578063c4a9e1161461022e578063d5a44f8614610259578063e1397c6e1461029a576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c191906115b8565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190611699565b6103cf565b005b3480156100fd57600080fd5b50610118600480360381019061011391906116ec565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c919061175b565b60405180910390f35b34801561015157600080fd5b5061016c60048036038101906101679190611776565b6106a1565b005b34801561017a57600080fd5b5061019560048036038101906101909190611776565b61092e565b6040516101a897969594939291906118d4565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d3919061197d565b610aba565b005b3480156101e657600080fd5b506101ef610e31565b6040516101fc919061175b565b60405180910390f35b34801561021157600080fd5b5061022c600480360381019061022791906119bd565b610e55565b005b34801561023a57600080fd5b5061024361101b565b604051610250919061175b565b60405180910390f35b34801561026557600080fd5b50610280600480360381019061027b9190611776565b611021565b6040516102919594939291906119fd565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190611aa6565b611091565b005b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611b52565b60405180910390fd5b60006003600081548092919061033b90611ba1565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad82611356565b816003018190555083838260040191826103c8929190611e2f565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611f4b565b60405180910390fd5b60006001600081548092919061042790611ba1565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b9190611f6b565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d2919061175b565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b6117b2565b5b8160020160009054906101000a900460ff1660038111156105305761052f6117b2565b5b14610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611feb565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106139061207d565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610644576106436117b2565b5b0217905550838383600501918261065c929190611e2f565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c919061175b565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107409061210f565b60405180910390fd5b8060020154421161078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906121a1565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d89061220d565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a9061229f565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af9291906122bf565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f291906122fd565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610922919061175b565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611c52565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611c52565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611c52565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae46117b2565b5b8160020160009054906101000a900460ff166003811115610b0957610b086117b2565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090612376565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a6117b2565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c3092919061241a565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c73919061245f565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca692919061248c565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a8660010154610cfd91906124e4565b8660010154610d0c9190612515565b84603c60018b604051602001610d22919061175b565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610d50949392919061259e565b60206040518083038185885af1158015610d6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d93919061245f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610df7939291906125ea565b600060405180830381600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490612693565b60405180910390fd5b8060030160019054906101000a900460ff1615610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f469061220d565b60405180910390fd5b8060030160009054906101000a900460ff1615610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f989061229f565b60405180910390fd5b8060020154421115610fc6578142610fb99190611f6b565b8160020181905550610fdf565b818160020154610fd69190611f6b565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161100e919061175b565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690612725565b60405180910390fd5b600082828101906111309190611776565b90506000600260008381526020019081526020016000209050846111d0578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461119d91906124e4565b9081150290604051600060405180830381858888f193505050501580156111c8573d6000803e3d6000fd5b505050611351565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b815260040161125492919061241a565b6020604051808303816000875af1158015611273573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611297919061245f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a84600101546112e691906124e4565b83603c60006040518563ffffffff1660e01b81526004016113099392919061276b565b60206040518083038185885af1158015611327573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061134c919061245f565b505050505b505050565b60006113606113d4565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516113c69291906127b5565b60405180910390a150919050565b60008060005b6001548110156114585760008082815260200190815260200160002060030160009054906101000a900460ff1661144b5760008082815260200190815260200160002060020154421161144b5760008082815260200190815260200160002060010154826114489190611f6b565b91505b80806001019150506113da565b506000811161149c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114939061282a565b60405180910390fd5b600081446114aa919061284a565b9050600080600090505b6001548110156115425760008082815260200190815260200160002060030160009054906101000a900460ff16611535576000808281526020019081526020016000206002015442116115355760008082815260200190815260200160002060010154826115229190611f6b565b91508282111561153457809450611542565b5b80806001019150506114b4565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261157857611577611553565b5b8235905067ffffffffffffffff81111561159557611594611558565b5b6020830191508360018202830111156115b1576115b061155d565b5b9250929050565b600080602083850312156115cf576115ce611549565b5b600083013567ffffffffffffffff8111156115ed576115ec61154e565b5b6115f985828601611562565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061163082611605565b9050919050565b61164081611625565b811461164b57600080fd5b50565b60008135905061165d81611637565b92915050565b6000819050919050565b61167681611663565b811461168157600080fd5b50565b6000813590506116938161166d565b92915050565b6000806000606084860312156116b2576116b1611549565b5b60006116c08682870161164e565b93505060206116d186828701611684565b92505060406116e286828701611684565b9150509250925092565b60008060006040848603121561170557611704611549565b5b600061171386828701611684565b935050602084013567ffffffffffffffff8111156117345761173361154e565b5b61174086828701611562565b92509250509250925092565b61175581611663565b82525050565b6000602082019050611770600083018461174c565b92915050565b60006020828403121561178c5761178b611549565b5b600061179a84828501611684565b91505092915050565b6117ac81611625565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106117f2576117f16117b2565b5b50565b6000819050611803826117e1565b919050565b6000611813826117f5565b9050919050565b61182381611808565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611863578082015181840152602081019050611848565b60008484015250505050565b6000601f19601f8301169050919050565b600061188b82611829565b6118958185611834565b93506118a5818560208601611845565b6118ae8161186f565b840191505092915050565b60008115159050919050565b6118ce816118b9565b82525050565b600060e0820190506118e9600083018a6117a3565b6118f6602083018961174c565b611903604083018861181a565b611910606083018761174c565b81810360808301526119228186611880565b905081810360a08301526119368185611880565b905061194560c08301846118c5565b98975050505050505050565b61195a816118b9565b811461196557600080fd5b50565b60008135905061197781611951565b92915050565b6000806040838503121561199457611993611549565b5b60006119a285828601611684565b92505060206119b385828601611968565b9150509250929050565b600080604083850312156119d4576119d3611549565b5b60006119e285828601611684565b92505060206119f385828601611684565b9150509250929050565b600060a082019050611a1260008301886117a3565b611a1f602083018761174c565b611a2c604083018661174c565b611a3960608301856118c5565b611a4660808301846118c5565b9695505050505050565b60008083601f840112611a6657611a65611553565b5b8235905067ffffffffffffffff811115611a8357611a82611558565b5b602083019150836001820283011115611a9f57611a9e61155d565b5b9250929050565b600080600060408486031215611abf57611abe611549565b5b6000611acd86828701611968565b935050602084013567ffffffffffffffff811115611aee57611aed61154e565b5b611afa86828701611a50565b92509250509250925092565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b3c601083611834565b9150611b4782611b06565b602082019050919050565b60006020820190508181036000830152611b6b81611b2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bac82611663565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bde57611bdd611b72565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c6a57607f821691505b602082108103611c7d57611c7c611c23565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ce57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611ca8565b611cef8683611ca8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d2c611d27611d2284611663565b611d07565b611663565b9050919050565b6000819050919050565b611d4683611d11565b611d5a611d5282611d33565b848454611cb5565b825550505050565b600090565b611d6f611d62565b611d7a818484611d3d565b505050565b5b81811015611d9e57611d93600082611d67565b600181019050611d80565b5050565b601f821115611de357611db481611c83565b611dbd84611c98565b81016020851015611dcc578190505b611de0611dd885611c98565b830182611d7f565b50505b505050565b600082821c905092915050565b6000611e0660001984600802611de8565b1980831691505092915050565b6000611e1f8383611df5565b9150826002028217905092915050565b611e398383611be9565b67ffffffffffffffff811115611e5257611e51611bf4565b5b611e5c8254611c52565b611e67828285611da2565b6000601f831160018114611e965760008415611e84578287013590505b611e8e8582611e13565b865550611ef6565b601f198416611ea486611c83565b60005b82811015611ecc57848901358255600182019150602085019450602081019050611ea7565b86831015611ee95784890135611ee5601f891682611df5565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f35601183611834565b9150611f4082611eff565b602082019050919050565b60006020820190508181036000830152611f6481611f28565b9050919050565b6000611f7682611663565b9150611f8183611663565b9250828201905080821115611f9957611f98611b72565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611fd5601883611834565b9150611fe082611f9f565b602082019050919050565b6000602082019050818103600083015261200481611fc8565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612067603a83611834565b91506120728261200b565b604082019050919050565b600060208201905081810360008301526120968161205a565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006120f9603483611834565b91506121048261209d565b604082019050919050565b60006020820190508181036000830152612128816120ec565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061218b602283611834565b91506121968261212f565b604082019050919050565b600060208201905081810360008301526121ba8161217e565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006121f7602083611834565b9150612202826121c1565b602082019050919050565b60006020820190508181036000830152612226816121ea565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612289602483611834565b91506122948261222d565b604082019050919050565b600060208201905081810360008301526122b88161227c565b9050919050565b60006040820190506122d460008301856117a3565b6122e1602083018461174c565b9392505050565b6000815190506122f781611951565b92915050565b60006020828403121561231357612312611549565b5b6000612321848285016122e8565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612360602083611834565b915061236b8261232a565b602082019050919050565b6000602082019050818103600083015261238f81612353565b9050919050565b600081546123a381611c52565b6123ad8186611834565b945060018216600081146123c857600181146123de57612411565b60ff198316865281151560200286019350612411565b6123e785611c83565b60005b83811015612409578154818901526001820191506020810190506123ea565b808801955050505b50505092915050565b600060408201905061242f60008301856117a3565b81810360208301526124418184612396565b90509392505050565b6000815190506124598161166d565b92915050565b60006020828403121561247557612474611549565b5b60006124838482850161244a565b91505092915050565b60006040820190506124a1600083018561174c565b6124ae60208301846118c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124ef82611663565b91506124fa83611663565b92508261250a576125096124b5565b5b828204905092915050565b600061252082611663565b915061252b83611663565b925082820390508181111561254357612542611b72565b5b92915050565b600081519050919050565b600082825260208201905092915050565b600061257082612549565b61257a8185612554565b935061258a818560208601611845565b6125938161186f565b840191505092915050565b60006080820190506125b3600083018761174c565b6125c0602083018661174c565b6125cd60408301856118c5565b81810360608301526125df8184612565565b905095945050505050565b60006060820190506125ff600083018661174c565b61260c602083018561174c565b61261960408301846118c5565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061267d603383611834565b915061268882612621565b604082019050919050565b600060208201905081810360008301526126ac81612670565b9050919050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b600061270f603183611834565b915061271a826126b3565b604082019050919050565b6000602082019050818103600083015261273e81612702565b9050919050565b50565b6000612755600083612554565b915061276082612745565b600082019050919050565b6000608082019050612780600083018661174c565b61278d602083018561174c565b61279a60408301846118c5565b81810360608301526127ab81612748565b9050949350505050565b60006040820190506127ca600083018561174c565b6127d7602083018461174c565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612814601a83611834565b915061281f826127de565b602082019050919050565b6000602082019050818103600083015261284381612807565b9050919050565b600061285582611663565b915061286083611663565b9250826128705761286f6124b5565b5b82820690509291505056fea2646970667358221220ca033f077f2c2c4503313337828e15ec6eaeae3147b7bc42595de97c2c1a886e64736f6c63430008180033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002b4138038062002b41833981810160405281019062000037919062000138565b81818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a08181525050505050506200017f565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b18262000084565b9050919050565b6000620000c582620000a4565b9050919050565b620000d781620000b8565b8114620000e357600080fd5b50565b600081519050620000f781620000cc565b92915050565b6000819050919050565b6200011281620000fd565b81146200011e57600080fd5b50565b600081519050620001328162000107565b92915050565b600080604083850312156200015257620001516200007f565b5b60006200016285828601620000e6565b9250506020620001758582860162000121565b9150509250929050565b60805160a05161296b620001d6600039600081816102c50152610e3901526000818161085201528181610bb001528181610cb201528181610d9d01528181611099015281816111da01526112a1015261296b6000f3fe6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b5b20c0014610205578063c4a9e1161461022e578063d5a44f8614610259578063e1397c6e1461029a576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c191906115c4565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea91906116a5565b6103cf565b005b3480156100fd57600080fd5b50610118600480360381019061011391906116f8565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c9190611767565b60405180910390f35b34801561015157600080fd5b5061016c60048036038101906101679190611782565b6106a1565b005b34801561017a57600080fd5b5061019560048036038101906101909190611782565b61092e565b6040516101a897969594939291906118e0565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d39190611989565b610aba565b005b3480156101e657600080fd5b506101ef610e37565b6040516101fc9190611767565b60405180910390f35b34801561021157600080fd5b5061022c600480360381019061022791906119c9565b610e5b565b005b34801561023a57600080fd5b50610243611021565b6040516102509190611767565b60405180910390f35b34801561026557600080fd5b50610280600480360381019061027b9190611782565b611027565b604051610291959493929190611a09565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190611ab2565b611097565b005b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611b5e565b60405180910390fd5b60006003600081548092919061033b90611bad565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad82611362565b816003018190555083838260040191826103c8929190611e3b565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611f57565b60405180910390fd5b60006001600081548092919061042790611bad565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b9190611f77565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d29190611767565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b6117be565b5b8160020160009054906101000a900460ff1660038111156105305761052f6117be565b5b14610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611ff7565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390612089565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610644576106436117be565b5b0217905550838383600501918261065c929190611e3b565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c9190611767565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107409061211b565b60405180910390fd5b8060020154421161078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906121ad565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d890612219565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a906122ab565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af9291906122cb565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190612309565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516109229190611767565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611c5e565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611c5e565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611c5e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611c5e565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae46117be565b5b8160020160009054906101000a900460ff166003811115610b0957610b086117be565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090612382565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a6117be565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c30929190612426565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c73919061246b565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca6929190612498565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630ce7e299600a8660010154610cfd91906124f0565b8660010154610d0c9190612521565b8460146001600360018d604051602001610d269190611767565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610d5696959493929190612620565b60206040518083038185885af1158015610d74573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d99919061246b565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610dfd93929190612688565b600060405180830381600087803b158015610e1757600080fd5b505af1158015610e2b573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90612731565b60405180910390fd5b8060030160019054906101000a900460ff1615610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90612219565b60405180910390fd5b8060030160009054906101000a900460ff1615610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e906122ab565b60405180910390fd5b8060020154421115610fcc578142610fbf9190611f77565b8160020181905550610fe5565b818160020154610fdc9190611f77565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516110149190611767565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c906127c3565b60405180910390fd5b600082828101906111369190611782565b90506000600260008381526020019081526020016000209050846111d6578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a83600101546111a391906124f0565b9081150290604051600060405180830381858888f193505050501580156111ce573d6000803e3d6000fd5b50505061135d565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b815260040161125a929190612426565b6020604051808303816000875af1158015611279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129d919061246b565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630ce7e299600a84600101546112ec91906124f0565b8360146001600360006040518763ffffffff1660e01b8152600401611315959493929190612809565b60206040518083038185885af1158015611333573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611358919061246b565b505050505b505050565b600061136c6113e0565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516113d292919061286f565b60405180910390a150919050565b60008060005b6001548110156114645760008082815260200190815260200160002060030160009054906101000a900460ff16611457576000808281526020019081526020016000206002015442116114575760008082815260200190815260200160002060010154826114549190611f77565b91505b80806001019150506113e6565b50600081116114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f906128e4565b60405180910390fd5b600081446114b69190612904565b9050600080600090505b60015481101561154e5760008082815260200190815260200160002060030160009054906101000a900460ff166115415760008082815260200190815260200160002060020154421161154157600080828152602001908152602001600020600101548261152e9190611f77565b9150828211156115405780945061154e565b5b80806001019150506114c0565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126115845761158361155f565b5b8235905067ffffffffffffffff8111156115a1576115a0611564565b5b6020830191508360018202830111156115bd576115bc611569565b5b9250929050565b600080602083850312156115db576115da611555565b5b600083013567ffffffffffffffff8111156115f9576115f861155a565b5b6116058582860161156e565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061163c82611611565b9050919050565b61164c81611631565b811461165757600080fd5b50565b60008135905061166981611643565b92915050565b6000819050919050565b6116828161166f565b811461168d57600080fd5b50565b60008135905061169f81611679565b92915050565b6000806000606084860312156116be576116bd611555565b5b60006116cc8682870161165a565b93505060206116dd86828701611690565b92505060406116ee86828701611690565b9150509250925092565b60008060006040848603121561171157611710611555565b5b600061171f86828701611690565b935050602084013567ffffffffffffffff8111156117405761173f61155a565b5b61174c8682870161156e565b92509250509250925092565b6117618161166f565b82525050565b600060208201905061177c6000830184611758565b92915050565b60006020828403121561179857611797611555565b5b60006117a684828501611690565b91505092915050565b6117b881611631565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106117fe576117fd6117be565b5b50565b600081905061180f826117ed565b919050565b600061181f82611801565b9050919050565b61182f81611814565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561186f578082015181840152602081019050611854565b60008484015250505050565b6000601f19601f8301169050919050565b600061189782611835565b6118a18185611840565b93506118b1818560208601611851565b6118ba8161187b565b840191505092915050565b60008115159050919050565b6118da816118c5565b82525050565b600060e0820190506118f5600083018a6117af565b6119026020830189611758565b61190f6040830188611826565b61191c6060830187611758565b818103608083015261192e818661188c565b905081810360a0830152611942818561188c565b905061195160c08301846118d1565b98975050505050505050565b611966816118c5565b811461197157600080fd5b50565b6000813590506119838161195d565b92915050565b600080604083850312156119a05761199f611555565b5b60006119ae85828601611690565b92505060206119bf85828601611974565b9150509250929050565b600080604083850312156119e0576119df611555565b5b60006119ee85828601611690565b92505060206119ff85828601611690565b9150509250929050565b600060a082019050611a1e60008301886117af565b611a2b6020830187611758565b611a386040830186611758565b611a4560608301856118d1565b611a5260808301846118d1565b9695505050505050565b60008083601f840112611a7257611a7161155f565b5b8235905067ffffffffffffffff811115611a8f57611a8e611564565b5b602083019150836001820283011115611aab57611aaa611569565b5b9250929050565b600080600060408486031215611acb57611aca611555565b5b6000611ad986828701611974565b935050602084013567ffffffffffffffff811115611afa57611af961155a565b5b611b0686828701611a5c565b92509250509250925092565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b48601083611840565b9150611b5382611b12565b602082019050919050565b60006020820190508181036000830152611b7781611b3b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bb88261166f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bea57611be9611b7e565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c7657607f821691505b602082108103611c8957611c88611c2f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611cf17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611cb4565b611cfb8683611cb4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d38611d33611d2e8461166f565b611d13565b61166f565b9050919050565b6000819050919050565b611d5283611d1d565b611d66611d5e82611d3f565b848454611cc1565b825550505050565b600090565b611d7b611d6e565b611d86818484611d49565b505050565b5b81811015611daa57611d9f600082611d73565b600181019050611d8c565b5050565b601f821115611def57611dc081611c8f565b611dc984611ca4565b81016020851015611dd8578190505b611dec611de485611ca4565b830182611d8b565b50505b505050565b600082821c905092915050565b6000611e1260001984600802611df4565b1980831691505092915050565b6000611e2b8383611e01565b9150826002028217905092915050565b611e458383611bf5565b67ffffffffffffffff811115611e5e57611e5d611c00565b5b611e688254611c5e565b611e73828285611dae565b6000601f831160018114611ea25760008415611e90578287013590505b611e9a8582611e1f565b865550611f02565b601f198416611eb086611c8f565b60005b82811015611ed857848901358255600182019150602085019450602081019050611eb3565b86831015611ef55784890135611ef1601f891682611e01565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f41601183611840565b9150611f4c82611f0b565b602082019050919050565b60006020820190508181036000830152611f7081611f34565b9050919050565b6000611f828261166f565b9150611f8d8361166f565b9250828201905080821115611fa557611fa4611b7e565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611fe1601883611840565b9150611fec82611fab565b602082019050919050565b6000602082019050818103600083015261201081611fd4565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612073603a83611840565b915061207e82612017565b604082019050919050565b600060208201905081810360008301526120a281612066565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000612105603483611840565b9150612110826120a9565b604082019050919050565b60006020820190508181036000830152612134816120f8565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000612197602283611840565b91506121a28261213b565b604082019050919050565b600060208201905081810360008301526121c68161218a565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000612203602083611840565b915061220e826121cd565b602082019050919050565b60006020820190508181036000830152612232816121f6565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612295602483611840565b91506122a082612239565b604082019050919050565b600060208201905081810360008301526122c481612288565b9050919050565b60006040820190506122e060008301856117af565b6122ed6020830184611758565b9392505050565b6000815190506123038161195d565b92915050565b60006020828403121561231f5761231e611555565b5b600061232d848285016122f4565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061236c602083611840565b915061237782612336565b602082019050919050565b6000602082019050818103600083015261239b8161235f565b9050919050565b600081546123af81611c5e565b6123b98186611840565b945060018216600081146123d457600181146123ea5761241d565b60ff19831686528115156020028601935061241d565b6123f385611c8f565b60005b83811015612415578154818901526001820191506020810190506123f6565b808801955050505b50505092915050565b600060408201905061243b60008301856117af565b818103602083015261244d81846123a2565b90509392505050565b60008151905061246581611679565b92915050565b60006020828403121561248157612480611555565b5b600061248f84828501612456565b91505092915050565b60006040820190506124ad6000830185611758565b6124ba60208301846118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124fb8261166f565b91506125068361166f565b925082612516576125156124c1565b5b828204905092915050565b600061252c8261166f565b91506125378361166f565b925082820390508181111561254f5761254e611b7e565b5b92915050565b6000819050919050565b600061257a61257561257084612555565b611d13565b61166f565b9050919050565b61258a8161255f565b82525050565b6000819050919050565b60006125b56125b06125ab84612590565b611d13565b61166f565b9050919050565b6125c58161259a565b82525050565b600081519050919050565b600082825260208201905092915050565b60006125f2826125cb565b6125fc81856125d6565b935061260c818560208601611851565b6126158161187b565b840191505092915050565b600060c0820190506126356000830189611758565b6126426020830188611758565b61264f6040830187612581565b61265c60608301866125bc565b61266960808301856118d1565b81810360a083015261267b81846125e7565b9050979650505050505050565b600060608201905061269d6000830186611758565b6126aa6020830185611758565b6126b760408301846118d1565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061271b603383611840565b9150612726826126bf565b604082019050919050565b6000602082019050818103600083015261274a8161270e565b9050919050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006127ad603183611840565b91506127b882612751565b604082019050919050565b600060208201905081810360008301526127dc816127a0565b9050919050565b50565b60006127f36000836125d6565b91506127fe826127e3565b600082019050919050565b600060c08201905061281e6000830188611758565b61282b6020830187611758565b6128386040830186612581565b61284560608301856125bc565b61285260808301846118d1565b81810360a0830152612863816127e6565b90509695505050505050565b60006040820190506128846000830185611758565b6128916020830184611758565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006128ce601a83611840565b91506128d982612898565b602082019050919050565b600060208201905081810360008301526128fd816128c1565b9050919050565b600061290f8261166f565b915061291a8361166f565b92508261292a576129296124c1565b5b82820690509291505056fea26469706673582212204794876e5e939ea992894db28eb05c2eb4709b45cc7c385e65df0cfb0a3100a864736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b5b20c0014610205578063c4a9e1161461022e578063d5a44f8614610259578063e1397c6e1461029a576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c191906115c4565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea91906116a5565b6103cf565b005b3480156100fd57600080fd5b50610118600480360381019061011391906116f8565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c9190611767565b60405180910390f35b34801561015157600080fd5b5061016c60048036038101906101679190611782565b6106a1565b005b34801561017a57600080fd5b5061019560048036038101906101909190611782565b61092e565b6040516101a897969594939291906118e0565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d39190611989565b610aba565b005b3480156101e657600080fd5b506101ef610e37565b6040516101fc9190611767565b60405180910390f35b34801561021157600080fd5b5061022c600480360381019061022791906119c9565b610e5b565b005b34801561023a57600080fd5b50610243611021565b6040516102509190611767565b60405180910390f35b34801561026557600080fd5b50610280600480360381019061027b9190611782565b611027565b604051610291959493929190611a09565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190611ab2565b611097565b005b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611b5e565b60405180910390fd5b60006003600081548092919061033b90611bad565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad82611362565b816003018190555083838260040191826103c8929190611e3b565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611f57565b60405180910390fd5b60006001600081548092919061042790611bad565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b9190611f77565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d29190611767565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b6117be565b5b8160020160009054906101000a900460ff1660038111156105305761052f6117be565b5b14610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611ff7565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390612089565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610644576106436117be565b5b0217905550838383600501918261065c929190611e3b565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c9190611767565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107409061211b565b60405180910390fd5b8060020154421161078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906121ad565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d890612219565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a906122ab565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af9291906122cb565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190612309565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516109229190611767565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611c5e565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611c5e565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611c5e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611c5e565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae46117be565b5b8160020160009054906101000a900460ff166003811115610b0957610b086117be565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090612382565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a6117be565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c30929190612426565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c73919061246b565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca6929190612498565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630ce7e299600a8660010154610cfd91906124f0565b8660010154610d0c9190612521565b8460146001600360018d604051602001610d269190611767565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610d5696959493929190612620565b60206040518083038185885af1158015610d74573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d99919061246b565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610dfd93929190612688565b600060405180830381600087803b158015610e1757600080fd5b505af1158015610e2b573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90612731565b60405180910390fd5b8060030160019054906101000a900460ff1615610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90612219565b60405180910390fd5b8060030160009054906101000a900460ff1615610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e906122ab565b60405180910390fd5b8060020154421115610fcc578142610fbf9190611f77565b8160020181905550610fe5565b818160020154610fdc9190611f77565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516110149190611767565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c906127c3565b60405180910390fd5b600082828101906111369190611782565b90506000600260008381526020019081526020016000209050846111d6578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a83600101546111a391906124f0565b9081150290604051600060405180830381858888f193505050501580156111ce573d6000803e3d6000fd5b50505061135d565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b815260040161125a929190612426565b6020604051808303816000875af1158015611279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129d919061246b565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630ce7e299600a84600101546112ec91906124f0565b8360146001600360006040518763ffffffff1660e01b8152600401611315959493929190612809565b60206040518083038185885af1158015611333573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611358919061246b565b505050505b505050565b600061136c6113e0565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516113d292919061286f565b60405180910390a150919050565b60008060005b6001548110156114645760008082815260200190815260200160002060030160009054906101000a900460ff16611457576000808281526020019081526020016000206002015442116114575760008082815260200190815260200160002060010154826114549190611f77565b91505b80806001019150506113e6565b50600081116114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f906128e4565b60405180910390fd5b600081446114b69190612904565b9050600080600090505b60015481101561154e5760008082815260200190815260200160002060030160009054906101000a900460ff166115415760008082815260200190815260200160002060020154421161154157600080828152602001908152602001600020600101548261152e9190611f77565b9150828211156115405780945061154e565b5b80806001019150506114c0565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126115845761158361155f565b5b8235905067ffffffffffffffff8111156115a1576115a0611564565b5b6020830191508360018202830111156115bd576115bc611569565b5b9250929050565b600080602083850312156115db576115da611555565b5b600083013567ffffffffffffffff8111156115f9576115f861155a565b5b6116058582860161156e565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061163c82611611565b9050919050565b61164c81611631565b811461165757600080fd5b50565b60008135905061166981611643565b92915050565b6000819050919050565b6116828161166f565b811461168d57600080fd5b50565b60008135905061169f81611679565b92915050565b6000806000606084860312156116be576116bd611555565b5b60006116cc8682870161165a565b93505060206116dd86828701611690565b92505060406116ee86828701611690565b9150509250925092565b60008060006040848603121561171157611710611555565b5b600061171f86828701611690565b935050602084013567ffffffffffffffff8111156117405761173f61155a565b5b61174c8682870161156e565b92509250509250925092565b6117618161166f565b82525050565b600060208201905061177c6000830184611758565b92915050565b60006020828403121561179857611797611555565b5b60006117a684828501611690565b91505092915050565b6117b881611631565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106117fe576117fd6117be565b5b50565b600081905061180f826117ed565b919050565b600061181f82611801565b9050919050565b61182f81611814565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561186f578082015181840152602081019050611854565b60008484015250505050565b6000601f19601f8301169050919050565b600061189782611835565b6118a18185611840565b93506118b1818560208601611851565b6118ba8161187b565b840191505092915050565b60008115159050919050565b6118da816118c5565b82525050565b600060e0820190506118f5600083018a6117af565b6119026020830189611758565b61190f6040830188611826565b61191c6060830187611758565b818103608083015261192e818661188c565b905081810360a0830152611942818561188c565b905061195160c08301846118d1565b98975050505050505050565b611966816118c5565b811461197157600080fd5b50565b6000813590506119838161195d565b92915050565b600080604083850312156119a05761199f611555565b5b60006119ae85828601611690565b92505060206119bf85828601611974565b9150509250929050565b600080604083850312156119e0576119df611555565b5b60006119ee85828601611690565b92505060206119ff85828601611690565b9150509250929050565b600060a082019050611a1e60008301886117af565b611a2b6020830187611758565b611a386040830186611758565b611a4560608301856118d1565b611a5260808301846118d1565b9695505050505050565b60008083601f840112611a7257611a7161155f565b5b8235905067ffffffffffffffff811115611a8f57611a8e611564565b5b602083019150836001820283011115611aab57611aaa611569565b5b9250929050565b600080600060408486031215611acb57611aca611555565b5b6000611ad986828701611974565b935050602084013567ffffffffffffffff811115611afa57611af961155a565b5b611b0686828701611a5c565b92509250509250925092565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b48601083611840565b9150611b5382611b12565b602082019050919050565b60006020820190508181036000830152611b7781611b3b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bb88261166f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bea57611be9611b7e565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c7657607f821691505b602082108103611c8957611c88611c2f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611cf17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611cb4565b611cfb8683611cb4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d38611d33611d2e8461166f565b611d13565b61166f565b9050919050565b6000819050919050565b611d5283611d1d565b611d66611d5e82611d3f565b848454611cc1565b825550505050565b600090565b611d7b611d6e565b611d86818484611d49565b505050565b5b81811015611daa57611d9f600082611d73565b600181019050611d8c565b5050565b601f821115611def57611dc081611c8f565b611dc984611ca4565b81016020851015611dd8578190505b611dec611de485611ca4565b830182611d8b565b50505b505050565b600082821c905092915050565b6000611e1260001984600802611df4565b1980831691505092915050565b6000611e2b8383611e01565b9150826002028217905092915050565b611e458383611bf5565b67ffffffffffffffff811115611e5e57611e5d611c00565b5b611e688254611c5e565b611e73828285611dae565b6000601f831160018114611ea25760008415611e90578287013590505b611e9a8582611e1f565b865550611f02565b601f198416611eb086611c8f565b60005b82811015611ed857848901358255600182019150602085019450602081019050611eb3565b86831015611ef55784890135611ef1601f891682611e01565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f41601183611840565b9150611f4c82611f0b565b602082019050919050565b60006020820190508181036000830152611f7081611f34565b9050919050565b6000611f828261166f565b9150611f8d8361166f565b9250828201905080821115611fa557611fa4611b7e565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611fe1601883611840565b9150611fec82611fab565b602082019050919050565b6000602082019050818103600083015261201081611fd4565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612073603a83611840565b915061207e82612017565b604082019050919050565b600060208201905081810360008301526120a281612066565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000612105603483611840565b9150612110826120a9565b604082019050919050565b60006020820190508181036000830152612134816120f8565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000612197602283611840565b91506121a28261213b565b604082019050919050565b600060208201905081810360008301526121c68161218a565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000612203602083611840565b915061220e826121cd565b602082019050919050565b60006020820190508181036000830152612232816121f6565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612295602483611840565b91506122a082612239565b604082019050919050565b600060208201905081810360008301526122c481612288565b9050919050565b60006040820190506122e060008301856117af565b6122ed6020830184611758565b9392505050565b6000815190506123038161195d565b92915050565b60006020828403121561231f5761231e611555565b5b600061232d848285016122f4565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061236c602083611840565b915061237782612336565b602082019050919050565b6000602082019050818103600083015261239b8161235f565b9050919050565b600081546123af81611c5e565b6123b98186611840565b945060018216600081146123d457600181146123ea5761241d565b60ff19831686528115156020028601935061241d565b6123f385611c8f565b60005b83811015612415578154818901526001820191506020810190506123f6565b808801955050505b50505092915050565b600060408201905061243b60008301856117af565b818103602083015261244d81846123a2565b90509392505050565b60008151905061246581611679565b92915050565b60006020828403121561248157612480611555565b5b600061248f84828501612456565b91505092915050565b60006040820190506124ad6000830185611758565b6124ba60208301846118d1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124fb8261166f565b91506125068361166f565b925082612516576125156124c1565b5b828204905092915050565b600061252c8261166f565b91506125378361166f565b925082820390508181111561254f5761254e611b7e565b5b92915050565b6000819050919050565b600061257a61257561257084612555565b611d13565b61166f565b9050919050565b61258a8161255f565b82525050565b6000819050919050565b60006125b56125b06125ab84612590565b611d13565b61166f565b9050919050565b6125c58161259a565b82525050565b600081519050919050565b600082825260208201905092915050565b60006125f2826125cb565b6125fc81856125d6565b935061260c818560208601611851565b6126158161187b565b840191505092915050565b600060c0820190506126356000830189611758565b6126426020830188611758565b61264f6040830187612581565b61265c60608301866125bc565b61266960808301856118d1565b81810360a083015261267b81846125e7565b9050979650505050505050565b600060608201905061269d6000830186611758565b6126aa6020830185611758565b6126b760408301846118d1565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061271b603383611840565b9150612726826126bf565b604082019050919050565b6000602082019050818103600083015261274a8161270e565b9050919050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006127ad603183611840565b91506127b882612751565b604082019050919050565b600060208201905081810360008301526127dc816127a0565b9050919050565b50565b60006127f36000836125d6565b91506127fe826127e3565b600082019050919050565b600060c08201905061281e6000830188611758565b61282b6020830187611758565b6128386040830186612581565b61284560608301856125bc565b61285260808301846118d1565b81810360a0830152612863816127e6565b90509695505050505050565b60006040820190506128846000830185611758565b6128916020830184611758565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006128ce601a83611840565b91506128d982612898565b602082019050919050565b600060208201905081810360008301526128fd816128c1565b9050919050565b600061290f8261166f565b915061291a8361166f565b92508261292a576129296124c1565b5b82820690509291505056fea26469706673582212204794876e5e939ea992894db28eb05c2eb4709b45cc7c385e65df0cfb0a3100a864736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Work1.json b/client/src/assets/Work1.json index a1d87c7..38fdea5 100644 --- a/client/src/assets/Work1.json +++ b/client/src/assets/Work1.json @@ -314,8 +314,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b506040516200250038038062002500833981810160405281019062000037919062000138565b81818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a08181525050505050506200017f565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b18262000084565b9050919050565b6000620000c582620000a4565b9050919050565b620000d781620000b8565b8114620000e357600080fd5b50565b600081519050620000f781620000cc565b92915050565b6000819050919050565b6200011281620000fd565b81146200011e57600080fd5b50565b600081519050620001328162000107565b92915050565b600080604083850312156200015257620001516200007f565b5b60006200016285828601620000e6565b9250506020620001758582860162000121565b9150509250929050565b60805160a05161233f620001c1600039600081816102910152610dc301526000818161081e01528181610b7c01528181610c7e0152610d27015261233f6000f3fe60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b69190611283565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df9190611364565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113b7565b6104ad565b005b34801561011b57600080fd5b50610124610667565b6040516101319190611426565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611441565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611441565b6108fa565b60405161019d979695949392919061159f565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c89190611648565b610a86565b005b3480156101db57600080fd5b506101e4610dc1565b6040516101f19190611426565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c9190611688565b610de5565b005b34801561022f57600080fd5b50610238610fab565b6040516102459190611426565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611441565b610fb1565b6040516102869594939291906116c8565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611767565b60405180910390fd5b600060036000815480929190610307906117b6565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611021565b81600301819055508383826004019182610394929190611a44565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b60565b60405180910390fd5b6000600160008154809291906103f3906117b6565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611b80565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e9190611426565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d761147d565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb61147d565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c00565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611c92565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f61147d565b5b02179055508383836005019182610628929190611a44565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc856040516106589190611426565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d24565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611db6565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e22565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eb4565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611ed4565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f12565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee9190611426565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461096290611867565b80601f016020809104026020016040519081016040528092919081815260200182805461098e90611867565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f090611867565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c90611867565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab061147d565b5b8160020160009054906101000a900460ff166003811115610ad557610ad461147d565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611f8b565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b5661147d565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc92919061202f565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612074565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120a1565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230856001015484603c60006040518563ffffffff1660e01b8152600401610ce093929190612101565b60206040518083038185885af1158015610cfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d239190612074565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610d879392919061214b565b600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906121f4565b60405180910390fd5b8060030160019054906101000a900460ff1615610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690611e22565b60405180910390fd5b8060030160009054906101000a900460ff1615610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890611eb4565b60405180910390fd5b8060020154421115610f56578142610f499190611b80565b8160020181905550610f6f565b818160020154610f669190611b80565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f9e9190611426565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b600061102b61109f565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611091929190612214565b60405180910390a150919050565b60008060005b6001548110156111235760008082815260200190815260200160002060030160009054906101000a900460ff16611116576000808281526020019081526020016000206002015442116111165760008082815260200190815260200160002060010154826111139190611b80565b91505b80806001019150506110a5565b5060008111611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90612289565b60405180910390fd5b6000814461117591906122d8565b9050600080600090505b60015481101561120d5760008082815260200190815260200160002060030160009054906101000a900460ff16611200576000808281526020019081526020016000206002015442116112005760008082815260200190815260200160002060010154826111ed9190611b80565b9150828211156111ff5780945061120d565b5b808060010191505061117f565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112435761124261121e565b5b8235905067ffffffffffffffff8111156112605761125f611223565b5b60208301915083600182028301111561127c5761127b611228565b5b9250929050565b6000806020838503121561129a57611299611214565b5b600083013567ffffffffffffffff8111156112b8576112b7611219565b5b6112c48582860161122d565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112fb826112d0565b9050919050565b61130b816112f0565b811461131657600080fd5b50565b60008135905061132881611302565b92915050565b6000819050919050565b6113418161132e565b811461134c57600080fd5b50565b60008135905061135e81611338565b92915050565b60008060006060848603121561137d5761137c611214565b5b600061138b86828701611319565b935050602061139c8682870161134f565b92505060406113ad8682870161134f565b9150509250925092565b6000806000604084860312156113d0576113cf611214565b5b60006113de8682870161134f565b935050602084013567ffffffffffffffff8111156113ff576113fe611219565b5b61140b8682870161122d565b92509250509250925092565b6114208161132e565b82525050565b600060208201905061143b6000830184611417565b92915050565b60006020828403121561145757611456611214565b5b60006114658482850161134f565b91505092915050565b611477816112f0565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114bd576114bc61147d565b5b50565b60008190506114ce826114ac565b919050565b60006114de826114c0565b9050919050565b6114ee816114d3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561152e578082015181840152602081019050611513565b60008484015250505050565b6000601f19601f8301169050919050565b6000611556826114f4565b61156081856114ff565b9350611570818560208601611510565b6115798161153a565b840191505092915050565b60008115159050919050565b61159981611584565b82525050565b600060e0820190506115b4600083018a61146e565b6115c16020830189611417565b6115ce60408301886114e5565b6115db6060830187611417565b81810360808301526115ed818661154b565b905081810360a0830152611601818561154b565b905061161060c0830184611590565b98975050505050505050565b61162581611584565b811461163057600080fd5b50565b6000813590506116428161161c565b92915050565b6000806040838503121561165f5761165e611214565b5b600061166d8582860161134f565b925050602061167e85828601611633565b9150509250929050565b6000806040838503121561169f5761169e611214565b5b60006116ad8582860161134f565b92505060206116be8582860161134f565b9150509250929050565b600060a0820190506116dd600083018861146e565b6116ea6020830187611417565b6116f76040830186611417565b6117046060830185611590565b6117116080830184611590565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006117516010836114ff565b915061175c8261171b565b602082019050919050565b6000602082019050818103600083015261178081611744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117c18261132e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117f3576117f2611787565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061187f57607f821691505b60208210810361189257611891611838565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026118fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118bd565b61190486836118bd565b95508019841693508086168417925050509392505050565b6000819050919050565b600061194161193c6119378461132e565b61191c565b61132e565b9050919050565b6000819050919050565b61195b83611926565b61196f61196782611948565b8484546118ca565b825550505050565b600090565b611984611977565b61198f818484611952565b505050565b5b818110156119b3576119a860008261197c565b600181019050611995565b5050565b601f8211156119f8576119c981611898565b6119d2846118ad565b810160208510156119e1578190505b6119f56119ed856118ad565b830182611994565b50505b505050565b600082821c905092915050565b6000611a1b600019846008026119fd565b1980831691505092915050565b6000611a348383611a0a565b9150826002028217905092915050565b611a4e83836117fe565b67ffffffffffffffff811115611a6757611a66611809565b5b611a718254611867565b611a7c8282856119b7565b6000601f831160018114611aab5760008415611a99578287013590505b611aa38582611a28565b865550611b0b565b601f198416611ab986611898565b60005b82811015611ae157848901358255600182019150602085019450602081019050611abc565b86831015611afe5784890135611afa601f891682611a0a565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b4a6011836114ff565b9150611b5582611b14565b602082019050919050565b60006020820190508181036000830152611b7981611b3d565b9050919050565b6000611b8b8261132e565b9150611b968361132e565b9250828201905080821115611bae57611bad611787565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611bea6018836114ff565b9150611bf582611bb4565b602082019050919050565b60006020820190508181036000830152611c1981611bdd565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611c7c603a836114ff565b9150611c8782611c20565b604082019050919050565b60006020820190508181036000830152611cab81611c6f565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d0e6034836114ff565b9150611d1982611cb2565b604082019050919050565b60006020820190508181036000830152611d3d81611d01565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611da06022836114ff565b9150611dab82611d44565b604082019050919050565b60006020820190508181036000830152611dcf81611d93565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e0c6020836114ff565b9150611e1782611dd6565b602082019050919050565b60006020820190508181036000830152611e3b81611dff565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611e9e6024836114ff565b9150611ea982611e42565b604082019050919050565b60006020820190508181036000830152611ecd81611e91565b9050919050565b6000604082019050611ee9600083018561146e565b611ef66020830184611417565b9392505050565b600081519050611f0c8161161c565b92915050565b600060208284031215611f2857611f27611214565b5b6000611f3684828501611efd565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f756020836114ff565b9150611f8082611f3f565b602082019050919050565b60006020820190508181036000830152611fa481611f68565b9050919050565b60008154611fb881611867565b611fc281866114ff565b94506001821660008114611fdd5760018114611ff357612026565b60ff198316865281151560200286019350612026565b611ffc85611898565b60005b8381101561201e57815481890152600182019150602081019050611fff565b808801955050505b50505092915050565b6000604082019050612044600083018561146e565b81810360208301526120568184611fab565b90509392505050565b60008151905061206e81611338565b92915050565b60006020828403121561208a57612089611214565b5b60006120988482850161205f565b91505092915050565b60006040820190506120b66000830185611417565b6120c36020830184611590565b9392505050565b600082825260208201905092915050565b50565b60006120eb6000836120ca565b91506120f6826120db565b600082019050919050565b60006080820190506121166000830186611417565b6121236020830185611417565b6121306040830184611590565b8181036060830152612141816120de565b9050949350505050565b60006060820190506121606000830186611417565b61216d6020830185611417565b61217a6040830184611590565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006121de6033836114ff565b91506121e982612182565b604082019050919050565b6000602082019050818103600083015261220d816121d1565b9050919050565b60006040820190506122296000830185611417565b6122366020830184611417565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612273601a836114ff565b915061227e8261223d565b602082019050919050565b600060208201905081810360008301526122a281612266565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e38261132e565b91506122ee8361132e565b9250826122fe576122fd6122a9565b5b82820690509291505056fea2646970667358221220ccef70a4740c0ce61b640775d3b02203dffc0f23849fad430c5f5f66783a2b5164736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b69190611283565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df9190611364565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113b7565b6104ad565b005b34801561011b57600080fd5b50610124610667565b6040516101319190611426565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611441565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611441565b6108fa565b60405161019d979695949392919061159f565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c89190611648565b610a86565b005b3480156101db57600080fd5b506101e4610dc1565b6040516101f19190611426565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c9190611688565b610de5565b005b34801561022f57600080fd5b50610238610fab565b6040516102459190611426565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611441565b610fb1565b6040516102869594939291906116c8565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611767565b60405180910390fd5b600060036000815480929190610307906117b6565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611021565b81600301819055508383826004019182610394929190611a44565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b60565b60405180910390fd5b6000600160008154809291906103f3906117b6565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611b80565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e9190611426565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d761147d565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb61147d565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c00565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611c92565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f61147d565b5b02179055508383836005019182610628929190611a44565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc856040516106589190611426565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d24565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611db6565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e22565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eb4565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611ed4565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f12565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee9190611426565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461096290611867565b80601f016020809104026020016040519081016040528092919081815260200182805461098e90611867565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f090611867565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c90611867565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab061147d565b5b8160020160009054906101000a900460ff166003811115610ad557610ad461147d565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611f8b565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b5661147d565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc92919061202f565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612074565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120a1565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230856001015484603c60006040518563ffffffff1660e01b8152600401610ce093929190612101565b60206040518083038185885af1158015610cfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d239190612074565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610d879392919061214b565b600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906121f4565b60405180910390fd5b8060030160019054906101000a900460ff1615610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690611e22565b60405180910390fd5b8060030160009054906101000a900460ff1615610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890611eb4565b60405180910390fd5b8060020154421115610f56578142610f499190611b80565b8160020181905550610f6f565b818160020154610f669190611b80565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f9e9190611426565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b600061102b61109f565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611091929190612214565b60405180910390a150919050565b60008060005b6001548110156111235760008082815260200190815260200160002060030160009054906101000a900460ff16611116576000808281526020019081526020016000206002015442116111165760008082815260200190815260200160002060010154826111139190611b80565b91505b80806001019150506110a5565b5060008111611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90612289565b60405180910390fd5b6000814461117591906122d8565b9050600080600090505b60015481101561120d5760008082815260200190815260200160002060030160009054906101000a900460ff16611200576000808281526020019081526020016000206002015442116112005760008082815260200190815260200160002060010154826111ed9190611b80565b9150828211156111ff5780945061120d565b5b808060010191505061117f565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112435761124261121e565b5b8235905067ffffffffffffffff8111156112605761125f611223565b5b60208301915083600182028301111561127c5761127b611228565b5b9250929050565b6000806020838503121561129a57611299611214565b5b600083013567ffffffffffffffff8111156112b8576112b7611219565b5b6112c48582860161122d565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112fb826112d0565b9050919050565b61130b816112f0565b811461131657600080fd5b50565b60008135905061132881611302565b92915050565b6000819050919050565b6113418161132e565b811461134c57600080fd5b50565b60008135905061135e81611338565b92915050565b60008060006060848603121561137d5761137c611214565b5b600061138b86828701611319565b935050602061139c8682870161134f565b92505060406113ad8682870161134f565b9150509250925092565b6000806000604084860312156113d0576113cf611214565b5b60006113de8682870161134f565b935050602084013567ffffffffffffffff8111156113ff576113fe611219565b5b61140b8682870161122d565b92509250509250925092565b6114208161132e565b82525050565b600060208201905061143b6000830184611417565b92915050565b60006020828403121561145757611456611214565b5b60006114658482850161134f565b91505092915050565b611477816112f0565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114bd576114bc61147d565b5b50565b60008190506114ce826114ac565b919050565b60006114de826114c0565b9050919050565b6114ee816114d3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561152e578082015181840152602081019050611513565b60008484015250505050565b6000601f19601f8301169050919050565b6000611556826114f4565b61156081856114ff565b9350611570818560208601611510565b6115798161153a565b840191505092915050565b60008115159050919050565b61159981611584565b82525050565b600060e0820190506115b4600083018a61146e565b6115c16020830189611417565b6115ce60408301886114e5565b6115db6060830187611417565b81810360808301526115ed818661154b565b905081810360a0830152611601818561154b565b905061161060c0830184611590565b98975050505050505050565b61162581611584565b811461163057600080fd5b50565b6000813590506116428161161c565b92915050565b6000806040838503121561165f5761165e611214565b5b600061166d8582860161134f565b925050602061167e85828601611633565b9150509250929050565b6000806040838503121561169f5761169e611214565b5b60006116ad8582860161134f565b92505060206116be8582860161134f565b9150509250929050565b600060a0820190506116dd600083018861146e565b6116ea6020830187611417565b6116f76040830186611417565b6117046060830185611590565b6117116080830184611590565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006117516010836114ff565b915061175c8261171b565b602082019050919050565b6000602082019050818103600083015261178081611744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117c18261132e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117f3576117f2611787565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061187f57607f821691505b60208210810361189257611891611838565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026118fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118bd565b61190486836118bd565b95508019841693508086168417925050509392505050565b6000819050919050565b600061194161193c6119378461132e565b61191c565b61132e565b9050919050565b6000819050919050565b61195b83611926565b61196f61196782611948565b8484546118ca565b825550505050565b600090565b611984611977565b61198f818484611952565b505050565b5b818110156119b3576119a860008261197c565b600181019050611995565b5050565b601f8211156119f8576119c981611898565b6119d2846118ad565b810160208510156119e1578190505b6119f56119ed856118ad565b830182611994565b50505b505050565b600082821c905092915050565b6000611a1b600019846008026119fd565b1980831691505092915050565b6000611a348383611a0a565b9150826002028217905092915050565b611a4e83836117fe565b67ffffffffffffffff811115611a6757611a66611809565b5b611a718254611867565b611a7c8282856119b7565b6000601f831160018114611aab5760008415611a99578287013590505b611aa38582611a28565b865550611b0b565b601f198416611ab986611898565b60005b82811015611ae157848901358255600182019150602085019450602081019050611abc565b86831015611afe5784890135611afa601f891682611a0a565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b4a6011836114ff565b9150611b5582611b14565b602082019050919050565b60006020820190508181036000830152611b7981611b3d565b9050919050565b6000611b8b8261132e565b9150611b968361132e565b9250828201905080821115611bae57611bad611787565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611bea6018836114ff565b9150611bf582611bb4565b602082019050919050565b60006020820190508181036000830152611c1981611bdd565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611c7c603a836114ff565b9150611c8782611c20565b604082019050919050565b60006020820190508181036000830152611cab81611c6f565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d0e6034836114ff565b9150611d1982611cb2565b604082019050919050565b60006020820190508181036000830152611d3d81611d01565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611da06022836114ff565b9150611dab82611d44565b604082019050919050565b60006020820190508181036000830152611dcf81611d93565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e0c6020836114ff565b9150611e1782611dd6565b602082019050919050565b60006020820190508181036000830152611e3b81611dff565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611e9e6024836114ff565b9150611ea982611e42565b604082019050919050565b60006020820190508181036000830152611ecd81611e91565b9050919050565b6000604082019050611ee9600083018561146e565b611ef66020830184611417565b9392505050565b600081519050611f0c8161161c565b92915050565b600060208284031215611f2857611f27611214565b5b6000611f3684828501611efd565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f756020836114ff565b9150611f8082611f3f565b602082019050919050565b60006020820190508181036000830152611fa481611f68565b9050919050565b60008154611fb881611867565b611fc281866114ff565b94506001821660008114611fdd5760018114611ff357612026565b60ff198316865281151560200286019350612026565b611ffc85611898565b60005b8381101561201e57815481890152600182019150602081019050611fff565b808801955050505b50505092915050565b6000604082019050612044600083018561146e565b81810360208301526120568184611fab565b90509392505050565b60008151905061206e81611338565b92915050565b60006020828403121561208a57612089611214565b5b60006120988482850161205f565b91505092915050565b60006040820190506120b66000830185611417565b6120c36020830184611590565b9392505050565b600082825260208201905092915050565b50565b60006120eb6000836120ca565b91506120f6826120db565b600082019050919050565b60006080820190506121166000830186611417565b6121236020830185611417565b6121306040830184611590565b8181036060830152612141816120de565b9050949350505050565b60006060820190506121606000830186611417565b61216d6020830185611417565b61217a6040830184611590565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006121de6033836114ff565b91506121e982612182565b604082019050919050565b6000602082019050818103600083015261220d816121d1565b9050919050565b60006040820190506122296000830185611417565b6122366020830184611417565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612273601a836114ff565b915061227e8261223d565b602082019050919050565b600060208201905081810360008301526122a281612266565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e38261132e565b91506122ee8361132e565b9250826122fe576122fd6122a9565b5b82820690509291505056fea2646970667358221220ccef70a4740c0ce61b640775d3b02203dffc0f23849fad430c5f5f66783a2b5164736f6c63430008180033", + "bytecode": "0x60c06040523480156200001157600080fd5b506040516200259838038062002598833981810160405281019062000037919062000138565b81818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a08181525050505050506200017f565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b18262000084565b9050919050565b6000620000c582620000a4565b9050919050565b620000d781620000b8565b8114620000e357600080fd5b50565b600081519050620000f781620000cc565b92915050565b6000819050919050565b6200011281620000fd565b81146200011e57600080fd5b50565b600081519050620001328162000107565b92915050565b600080604083850312156200015257620001516200007f565b5b60006200016285828601620000e6565b9250506020620001758582860162000121565b9150509250929050565b60805160a0516123d7620001c1600039600081816102910152610dc901526000818161081e01528181610b7c01528181610c7e0152610d2d01526123d76000f3fe60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b69190611289565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df919061136a565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113bd565b6104ad565b005b34801561011b57600080fd5b50610124610667565b604051610131919061142c565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611447565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611447565b6108fa565b60405161019d97969594939291906115a5565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c8919061164e565b610a86565b005b3480156101db57600080fd5b506101e4610dc7565b6040516101f1919061142c565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c919061168e565b610deb565b005b34801561022f57600080fd5b50610238610fb1565b604051610245919061142c565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611447565b610fb7565b6040516102869594939291906116ce565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e99061176d565b60405180910390fd5b600060036000815480929190610307906117bc565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611027565b81600301819055508383826004019182610394929190611a4a565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b66565b60405180910390fd5b6000600160008154809291906103f3906117bc565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611b86565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e919061142c565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d7611483565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb611483565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c06565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611c98565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f611483565b5b02179055508383836005019182610628929190611a4a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc85604051610658919061142c565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d2a565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611dbc565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e28565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eba565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611eda565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f18565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee919061142c565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154908060040180546109629061186d565b80601f016020809104026020016040519081016040528092919081815260200182805461098e9061186d565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f09061186d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c9061186d565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab0611483565b5b8160020160009054906101000a900460ff166003811115610ad557610ad4611483565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611f91565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b56611483565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc929190612035565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f919061207a565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120a7565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630ce7e29985600101548460146001600360006040518763ffffffff1660e01b8152600401610ce695949392919061217d565b60206040518083038185885af1158015610d04573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d29919061207a565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610d8d939291906121e3565b600060405180830381600087803b158015610da757600080fd5b505af1158015610dbb573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a9061228c565b60405180910390fd5b8060030160019054906101000a900460ff1615610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90611e28565b60405180910390fd5b8060030160009054906101000a900460ff1615610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611eba565b60405180910390fd5b8060020154421115610f5c578142610f4f9190611b86565b8160020181905550610f75565b818160020154610f6c9190611b86565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610fa4919061142c565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60006110316110a5565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516110979291906122ac565b60405180910390a150919050565b60008060005b6001548110156111295760008082815260200190815260200160002060030160009054906101000a900460ff1661111c5760008082815260200190815260200160002060020154421161111c5760008082815260200190815260200160002060010154826111199190611b86565b91505b80806001019150506110ab565b506000811161116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490612321565b60405180910390fd5b6000814461117b9190612370565b9050600080600090505b6001548110156112135760008082815260200190815260200160002060030160009054906101000a900460ff16611206576000808281526020019081526020016000206002015442116112065760008082815260200190815260200160002060010154826111f39190611b86565b91508282111561120557809450611213565b5b8080600101915050611185565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261124957611248611224565b5b8235905067ffffffffffffffff81111561126657611265611229565b5b6020830191508360018202830111156112825761128161122e565b5b9250929050565b600080602083850312156112a05761129f61121a565b5b600083013567ffffffffffffffff8111156112be576112bd61121f565b5b6112ca85828601611233565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611301826112d6565b9050919050565b611311816112f6565b811461131c57600080fd5b50565b60008135905061132e81611308565b92915050565b6000819050919050565b61134781611334565b811461135257600080fd5b50565b6000813590506113648161133e565b92915050565b6000806000606084860312156113835761138261121a565b5b60006113918682870161131f565b93505060206113a286828701611355565b92505060406113b386828701611355565b9150509250925092565b6000806000604084860312156113d6576113d561121a565b5b60006113e486828701611355565b935050602084013567ffffffffffffffff8111156114055761140461121f565b5b61141186828701611233565b92509250509250925092565b61142681611334565b82525050565b6000602082019050611441600083018461141d565b92915050565b60006020828403121561145d5761145c61121a565b5b600061146b84828501611355565b91505092915050565b61147d816112f6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114c3576114c2611483565b5b50565b60008190506114d4826114b2565b919050565b60006114e4826114c6565b9050919050565b6114f4816114d9565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611534578082015181840152602081019050611519565b60008484015250505050565b6000601f19601f8301169050919050565b600061155c826114fa565b6115668185611505565b9350611576818560208601611516565b61157f81611540565b840191505092915050565b60008115159050919050565b61159f8161158a565b82525050565b600060e0820190506115ba600083018a611474565b6115c7602083018961141d565b6115d460408301886114eb565b6115e1606083018761141d565b81810360808301526115f38186611551565b905081810360a08301526116078185611551565b905061161660c0830184611596565b98975050505050505050565b61162b8161158a565b811461163657600080fd5b50565b60008135905061164881611622565b92915050565b600080604083850312156116655761166461121a565b5b600061167385828601611355565b925050602061168485828601611639565b9150509250929050565b600080604083850312156116a5576116a461121a565b5b60006116b385828601611355565b92505060206116c485828601611355565b9150509250929050565b600060a0820190506116e36000830188611474565b6116f0602083018761141d565b6116fd604083018661141d565b61170a6060830185611596565b6117176080830184611596565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611757601083611505565b915061176282611721565b602082019050919050565b600060208201905081810360008301526117868161174a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117c782611334565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117f9576117f861178d565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061188557607f821691505b6020821081036118985761189761183e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026119007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118c3565b61190a86836118c3565b95508019841693508086168417925050509392505050565b6000819050919050565b600061194761194261193d84611334565b611922565b611334565b9050919050565b6000819050919050565b6119618361192c565b61197561196d8261194e565b8484546118d0565b825550505050565b600090565b61198a61197d565b611995818484611958565b505050565b5b818110156119b9576119ae600082611982565b60018101905061199b565b5050565b601f8211156119fe576119cf8161189e565b6119d8846118b3565b810160208510156119e7578190505b6119fb6119f3856118b3565b83018261199a565b50505b505050565b600082821c905092915050565b6000611a2160001984600802611a03565b1980831691505092915050565b6000611a3a8383611a10565b9150826002028217905092915050565b611a548383611804565b67ffffffffffffffff811115611a6d57611a6c61180f565b5b611a77825461186d565b611a828282856119bd565b6000601f831160018114611ab15760008415611a9f578287013590505b611aa98582611a2e565b865550611b11565b601f198416611abf8661189e565b60005b82811015611ae757848901358255600182019150602085019450602081019050611ac2565b86831015611b045784890135611b00601f891682611a10565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b50601183611505565b9150611b5b82611b1a565b602082019050919050565b60006020820190508181036000830152611b7f81611b43565b9050919050565b6000611b9182611334565b9150611b9c83611334565b9250828201905080821115611bb457611bb361178d565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611bf0601883611505565b9150611bfb82611bba565b602082019050919050565b60006020820190508181036000830152611c1f81611be3565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611c82603a83611505565b9150611c8d82611c26565b604082019050919050565b60006020820190508181036000830152611cb181611c75565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d14603483611505565b9150611d1f82611cb8565b604082019050919050565b60006020820190508181036000830152611d4381611d07565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611da6602283611505565b9150611db182611d4a565b604082019050919050565b60006020820190508181036000830152611dd581611d99565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e12602083611505565b9150611e1d82611ddc565b602082019050919050565b60006020820190508181036000830152611e4181611e05565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611ea4602483611505565b9150611eaf82611e48565b604082019050919050565b60006020820190508181036000830152611ed381611e97565b9050919050565b6000604082019050611eef6000830185611474565b611efc602083018461141d565b9392505050565b600081519050611f1281611622565b92915050565b600060208284031215611f2e57611f2d61121a565b5b6000611f3c84828501611f03565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f7b602083611505565b9150611f8682611f45565b602082019050919050565b60006020820190508181036000830152611faa81611f6e565b9050919050565b60008154611fbe8161186d565b611fc88186611505565b94506001821660008114611fe35760018114611ff95761202c565b60ff19831686528115156020028601935061202c565b6120028561189e565b60005b8381101561202457815481890152600182019150602081019050612005565b808801955050505b50505092915050565b600060408201905061204a6000830185611474565b818103602083015261205c8184611fb1565b90509392505050565b6000815190506120748161133e565b92915050565b6000602082840312156120905761208f61121a565b5b600061209e84828501612065565b91505092915050565b60006040820190506120bc600083018561141d565b6120c96020830184611596565b9392505050565b6000819050919050565b60006120f56120f06120eb846120d0565b611922565b611334565b9050919050565b612105816120da565b82525050565b6000819050919050565b600061213061212b6121268461210b565b611922565b611334565b9050919050565b61214081612115565b82525050565b600082825260208201905092915050565b50565b6000612167600083612146565b915061217282612157565b600082019050919050565b600060c082019050612192600083018861141d565b61219f602083018761141d565b6121ac60408301866120fc565b6121b96060830185612137565b6121c66080830184611596565b81810360a08301526121d78161215a565b90509695505050505050565b60006060820190506121f8600083018661141d565b612205602083018561141d565b6122126040830184611596565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612276603383611505565b91506122818261221a565b604082019050919050565b600060208201905081810360008301526122a581612269565b9050919050565b60006040820190506122c1600083018561141d565b6122ce602083018461141d565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b600061230b601a83611505565b9150612316826122d5565b602082019050919050565b6000602082019050818103600083015261233a816122fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061237b82611334565b915061238683611334565b92508261239657612395612341565b5b82820690509291505056fea264697066735822122007b3397627cc60f1bdbe1c89373f9aae2944d982f1e086ee64b326fce7c8e0cf64736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b69190611289565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df919061136a565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113bd565b6104ad565b005b34801561011b57600080fd5b50610124610667565b604051610131919061142c565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611447565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611447565b6108fa565b60405161019d97969594939291906115a5565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c8919061164e565b610a86565b005b3480156101db57600080fd5b506101e4610dc7565b6040516101f1919061142c565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c919061168e565b610deb565b005b34801561022f57600080fd5b50610238610fb1565b604051610245919061142c565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611447565b610fb7565b6040516102869594939291906116ce565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e99061176d565b60405180910390fd5b600060036000815480929190610307906117bc565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611027565b81600301819055508383826004019182610394929190611a4a565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b66565b60405180910390fd5b6000600160008154809291906103f3906117bc565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611b86565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e919061142c565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d7611483565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb611483565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c06565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611c98565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f611483565b5b02179055508383836005019182610628929190611a4a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc85604051610658919061142c565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d2a565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611dbc565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e28565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eba565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611eda565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f18565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee919061142c565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154908060040180546109629061186d565b80601f016020809104026020016040519081016040528092919081815260200182805461098e9061186d565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f09061186d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c9061186d565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab0611483565b5b8160020160009054906101000a900460ff166003811115610ad557610ad4611483565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611f91565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b56611483565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc929190612035565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f919061207a565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120a7565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630ce7e29985600101548460146001600360006040518763ffffffff1660e01b8152600401610ce695949392919061217d565b60206040518083038185885af1158015610d04573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d29919061207a565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610d8d939291906121e3565b600060405180830381600087803b158015610da757600080fd5b505af1158015610dbb573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a9061228c565b60405180910390fd5b8060030160019054906101000a900460ff1615610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90611e28565b60405180910390fd5b8060030160009054906101000a900460ff1615610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611eba565b60405180910390fd5b8060020154421115610f5c578142610f4f9190611b86565b8160020181905550610f75565b818160020154610f6c9190611b86565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610fa4919061142c565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b60006110316110a5565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516110979291906122ac565b60405180910390a150919050565b60008060005b6001548110156111295760008082815260200190815260200160002060030160009054906101000a900460ff1661111c5760008082815260200190815260200160002060020154421161111c5760008082815260200190815260200160002060010154826111199190611b86565b91505b80806001019150506110ab565b506000811161116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490612321565b60405180910390fd5b6000814461117b9190612370565b9050600080600090505b6001548110156112135760008082815260200190815260200160002060030160009054906101000a900460ff16611206576000808281526020019081526020016000206002015442116112065760008082815260200190815260200160002060010154826111f39190611b86565b91508282111561120557809450611213565b5b8080600101915050611185565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261124957611248611224565b5b8235905067ffffffffffffffff81111561126657611265611229565b5b6020830191508360018202830111156112825761128161122e565b5b9250929050565b600080602083850312156112a05761129f61121a565b5b600083013567ffffffffffffffff8111156112be576112bd61121f565b5b6112ca85828601611233565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611301826112d6565b9050919050565b611311816112f6565b811461131c57600080fd5b50565b60008135905061132e81611308565b92915050565b6000819050919050565b61134781611334565b811461135257600080fd5b50565b6000813590506113648161133e565b92915050565b6000806000606084860312156113835761138261121a565b5b60006113918682870161131f565b93505060206113a286828701611355565b92505060406113b386828701611355565b9150509250925092565b6000806000604084860312156113d6576113d561121a565b5b60006113e486828701611355565b935050602084013567ffffffffffffffff8111156114055761140461121f565b5b61141186828701611233565b92509250509250925092565b61142681611334565b82525050565b6000602082019050611441600083018461141d565b92915050565b60006020828403121561145d5761145c61121a565b5b600061146b84828501611355565b91505092915050565b61147d816112f6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114c3576114c2611483565b5b50565b60008190506114d4826114b2565b919050565b60006114e4826114c6565b9050919050565b6114f4816114d9565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611534578082015181840152602081019050611519565b60008484015250505050565b6000601f19601f8301169050919050565b600061155c826114fa565b6115668185611505565b9350611576818560208601611516565b61157f81611540565b840191505092915050565b60008115159050919050565b61159f8161158a565b82525050565b600060e0820190506115ba600083018a611474565b6115c7602083018961141d565b6115d460408301886114eb565b6115e1606083018761141d565b81810360808301526115f38186611551565b905081810360a08301526116078185611551565b905061161660c0830184611596565b98975050505050505050565b61162b8161158a565b811461163657600080fd5b50565b60008135905061164881611622565b92915050565b600080604083850312156116655761166461121a565b5b600061167385828601611355565b925050602061168485828601611639565b9150509250929050565b600080604083850312156116a5576116a461121a565b5b60006116b385828601611355565b92505060206116c485828601611355565b9150509250929050565b600060a0820190506116e36000830188611474565b6116f0602083018761141d565b6116fd604083018661141d565b61170a6060830185611596565b6117176080830184611596565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611757601083611505565b915061176282611721565b602082019050919050565b600060208201905081810360008301526117868161174a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117c782611334565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117f9576117f861178d565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061188557607f821691505b6020821081036118985761189761183e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026119007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118c3565b61190a86836118c3565b95508019841693508086168417925050509392505050565b6000819050919050565b600061194761194261193d84611334565b611922565b611334565b9050919050565b6000819050919050565b6119618361192c565b61197561196d8261194e565b8484546118d0565b825550505050565b600090565b61198a61197d565b611995818484611958565b505050565b5b818110156119b9576119ae600082611982565b60018101905061199b565b5050565b601f8211156119fe576119cf8161189e565b6119d8846118b3565b810160208510156119e7578190505b6119fb6119f3856118b3565b83018261199a565b50505b505050565b600082821c905092915050565b6000611a2160001984600802611a03565b1980831691505092915050565b6000611a3a8383611a10565b9150826002028217905092915050565b611a548383611804565b67ffffffffffffffff811115611a6d57611a6c61180f565b5b611a77825461186d565b611a828282856119bd565b6000601f831160018114611ab15760008415611a9f578287013590505b611aa98582611a2e565b865550611b11565b601f198416611abf8661189e565b60005b82811015611ae757848901358255600182019150602085019450602081019050611ac2565b86831015611b045784890135611b00601f891682611a10565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b50601183611505565b9150611b5b82611b1a565b602082019050919050565b60006020820190508181036000830152611b7f81611b43565b9050919050565b6000611b9182611334565b9150611b9c83611334565b9250828201905080821115611bb457611bb361178d565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611bf0601883611505565b9150611bfb82611bba565b602082019050919050565b60006020820190508181036000830152611c1f81611be3565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611c82603a83611505565b9150611c8d82611c26565b604082019050919050565b60006020820190508181036000830152611cb181611c75565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d14603483611505565b9150611d1f82611cb8565b604082019050919050565b60006020820190508181036000830152611d4381611d07565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611da6602283611505565b9150611db182611d4a565b604082019050919050565b60006020820190508181036000830152611dd581611d99565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e12602083611505565b9150611e1d82611ddc565b602082019050919050565b60006020820190508181036000830152611e4181611e05565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611ea4602483611505565b9150611eaf82611e48565b604082019050919050565b60006020820190508181036000830152611ed381611e97565b9050919050565b6000604082019050611eef6000830185611474565b611efc602083018461141d565b9392505050565b600081519050611f1281611622565b92915050565b600060208284031215611f2e57611f2d61121a565b5b6000611f3c84828501611f03565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f7b602083611505565b9150611f8682611f45565b602082019050919050565b60006020820190508181036000830152611faa81611f6e565b9050919050565b60008154611fbe8161186d565b611fc88186611505565b94506001821660008114611fe35760018114611ff95761202c565b60ff19831686528115156020028601935061202c565b6120028561189e565b60005b8381101561202457815481890152600182019150602081019050612005565b808801955050505b50505092915050565b600060408201905061204a6000830185611474565b818103602083015261205c8184611fb1565b90509392505050565b6000815190506120748161133e565b92915050565b6000602082840312156120905761208f61121a565b5b600061209e84828501612065565b91505092915050565b60006040820190506120bc600083018561141d565b6120c96020830184611596565b9392505050565b6000819050919050565b60006120f56120f06120eb846120d0565b611922565b611334565b9050919050565b612105816120da565b82525050565b6000819050919050565b600061213061212b6121268461210b565b611922565b611334565b9050919050565b61214081612115565b82525050565b600082825260208201905092915050565b50565b6000612167600083612146565b915061217282612157565b600082019050919050565b600060c082019050612192600083018861141d565b61219f602083018761141d565b6121ac60408301866120fc565b6121b96060830185612137565b6121c66080830184611596565b81810360a08301526121d78161215a565b90509695505050505050565b60006060820190506121f8600083018661141d565b612205602083018561141d565b6122126040830184611596565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612276603383611505565b91506122818261221a565b604082019050919050565b600060208201905081810360008301526122a581612269565b9050919050565b60006040820190506122c1600083018561141d565b6122ce602083018461141d565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b600061230b601a83611505565b9150612316826122d5565b602082019050919050565b6000602082019050818103600083015261233a816122fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061237b82611334565b915061238683611334565b92508261239657612395612341565b5b82820690509291505056fea264697066735822122007b3397627cc60f1bdbe1c89373f9aae2944d982f1e086ee64b326fce7c8e0cf64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/contract-addresses.json b/client/src/contract-addresses.json index 6cc29fa..5714bc4 100644 --- a/client/src/contract-addresses.json +++ b/client/src/contract-addresses.json @@ -1,12 +1,12 @@ { "localhost": { - "DAO": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", - "Work1": "0x6c18eb38b7450F8DaE5A5928A40fcA3952493Ee4", - "Onboarding": "0xB8f0cd092979F273b752FDa060F82BF2745f192e" + "DAO": "0x9151C9bA7b159B13C9ae51042eac73115D898657", + "Work1": "0xef57508e07F8b6460f7a3aD14ceE0Be23Bb93055", + "Onboarding": "0x5865349932DDf62D7593061bB5463E9D72Fd6b7d" }, "sepolia": { - "DAO": "0xc6b3b8A641c52F7bC13a9D444e1f0759CA3b87b4", - "Work1": "0xd2845aE812Ee42cF024fB4C55c052365792aBd78", - "Onboarding": "0xf15aCe29E5e3e4bb31FCddF2C65DF7C440449a57" + "DAO": "0x8Cb4ab513A863ac29e855c85064ea53dec7dA24C", + "Work1": "0xa9d632F689e5bB49A23c055ffFb520702E102C72", + "Onboarding": "0xc79C51c18194228C90ee3a68041d8Eb5cc4730F7" } } \ No newline at end of file diff --git a/ethereum/contract-addresses.json b/ethereum/contract-addresses.json index 6cc29fa..5714bc4 100644 --- a/ethereum/contract-addresses.json +++ b/ethereum/contract-addresses.json @@ -1,12 +1,12 @@ { "localhost": { - "DAO": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", - "Work1": "0x6c18eb38b7450F8DaE5A5928A40fcA3952493Ee4", - "Onboarding": "0xB8f0cd092979F273b752FDa060F82BF2745f192e" + "DAO": "0x9151C9bA7b159B13C9ae51042eac73115D898657", + "Work1": "0xef57508e07F8b6460f7a3aD14ceE0Be23Bb93055", + "Onboarding": "0x5865349932DDf62D7593061bB5463E9D72Fd6b7d" }, "sepolia": { - "DAO": "0xc6b3b8A641c52F7bC13a9D444e1f0759CA3b87b4", - "Work1": "0xd2845aE812Ee42cF024fB4C55c052365792aBd78", - "Onboarding": "0xf15aCe29E5e3e4bb31FCddF2C65DF7C440449a57" + "DAO": "0x8Cb4ab513A863ac29e855c85064ea53dec7dA24C", + "Work1": "0xa9d632F689e5bB49A23c055ffFb520702E102C72", + "Onboarding": "0xc79C51c18194228C90ee3a68041d8Eb5cc4730F7" } } \ No newline at end of file diff --git a/ethereum/contracts/DAO.sol b/ethereum/contracts/DAO.sol index 63cec70..261cdb6 100644 --- a/ethereum/contracts/DAO.sol +++ b/ethereum/contracts/DAO.sol @@ -28,6 +28,7 @@ struct ValidationPool { mapping(uint => Stake) stakes; uint stakeCount; uint256 fee; + uint quorumPPB; uint duration; uint endTime; bool resolved; @@ -55,8 +56,10 @@ contract DAO is ERC20("Reputation", "REP") { // TODO: Make parameters adjustable // TODO: Add forum parameters - uint public constant minDuration = 60; // 1 minute - uint public constant maxDuration = 86400; // 1 day + uint public constant minDuration = 1; // 1 second + uint public constant maxDuration = 365_000_000 days; // 1 million years + + uint public constant minQuorumPPB = 333_333_333; // Parts per billion event PostAdded(uint postIndex); event ValidationPoolInitiated(uint poolIndex); @@ -81,12 +84,23 @@ contract DAO is ERC20("Reputation", "REP") { function initiateValidationPool( uint postIndex, uint duration, + uint quorumNumerator, + uint quorumDenominator, bool callbackOnValidate, bytes calldata callbackData ) external payable returns (uint poolIndex) { require(msg.value > 0, "Fee is required to initiate validation pool"); require(duration >= minDuration, "Duration is too short"); require(duration <= maxDuration, "Duration is too long"); + require( + (1_000_000_000 * quorumNumerator) / quorumDenominator >= + minQuorumPPB, + "Quorum is below minimum" + ); + require( + quorumNumerator <= quorumDenominator, + "Quorum is greater than one" + ); Post storage post = posts[postIndex]; require(post.author != address(0), "Target post not found"); poolIndex = validationPoolCount++; @@ -94,6 +108,7 @@ contract DAO is ERC20("Reputation", "REP") { pool.sender = msg.sender; pool.postIndex = postIndex; pool.fee = msg.value; + pool.quorumPPB = (1_000_000_000 * quorumNumerator) / quorumDenominator; pool.duration = duration; pool.endTime = block.timestamp + duration; pool.id = poolIndex; @@ -156,8 +171,12 @@ contract DAO is ERC20("Reputation", "REP") { stakedAgainst += s.amount; } } - // Here we assume a quorum of 0 - // TODO: Make quorum an adjustable parameter + // Check that quorum is met + require( + 1_000_000_000 * (stakedFor + stakedAgainst) >= + totalSupply() * pool.quorumPPB, + "Quorum for this pool was not met" + ); // A tie is resolved in favor of the validation pool. // This is especially important so that the DAO's first pool can pass, // when no reputation has yet been minted. diff --git a/ethereum/contracts/Onboarding.sol b/ethereum/contracts/Onboarding.sol index 2785e20..049f19f 100644 --- a/ethereum/contracts/Onboarding.sol +++ b/ethereum/contracts/Onboarding.sol @@ -27,7 +27,7 @@ contract Onboarding is WorkContract, IOnValidate { // Initiate validation pool uint poolIndex = dao.initiateValidationPool{ value: request.fee - request.fee / 10 - }(postIndex, POOL_DURATION, true, abi.encode(requestIndex)); + }(postIndex, POOL_DURATION, 1, 3, true, abi.encode(requestIndex)); dao.stake(poolIndex, stake.amount, true); } @@ -51,6 +51,8 @@ contract Onboarding is WorkContract, IOnValidate { dao.initiateValidationPool{value: request.fee / 10}( postIndex, POOL_DURATION, + 1, + 3, false, "" ); diff --git a/ethereum/contracts/WorkContract.sol b/ethereum/contracts/WorkContract.sol index 167b728..2c6b468 100644 --- a/ethereum/contracts/WorkContract.sol +++ b/ethereum/contracts/WorkContract.sol @@ -37,8 +37,7 @@ abstract contract WorkContract is IAcceptAvailability { mapping(uint => WorkRequest) public requests; uint public requestCount; - // TODO: Make parameters configurable - uint constant POOL_DURATION = 60; + uint constant POOL_DURATION = 20; event AvailabilityStaked(uint stakeIndex); event WorkAssigned(uint requestIndex, uint stakeIndex); @@ -179,6 +178,8 @@ abstract contract WorkContract is IAcceptAvailability { uint poolIndex = dao.initiateValidationPool{value: request.fee}( postIndex, POOL_DURATION, + 1, + 3, false, "" ); diff --git a/ethereum/test/DAO.js b/ethereum/test/DAO.js index 31f477a..b6a5dda 100644 --- a/ethereum/test/DAO.js +++ b/ethereum/test/DAO.js @@ -54,6 +54,8 @@ describe('DAO', () => { const init = () => dao.initiateValidationPool( 0, POOL_DURATION, + 1, + 3, false, callbackData, { value: POOL_FEE }, @@ -68,15 +70,52 @@ describe('DAO', () => { describe('Initiate', () => { it('should not be able to initiate a validation pool without a fee', async () => { const setup = await loadFixture(deploy); - const init = () => setup.dao.initiateValidationPool(0, POOL_DURATION, false, callbackData); + const init = () => setup.dao.initiateValidationPool( + 0, + POOL_DURATION, + 1, + 3, + false, + callbackData, + ); await expect(init()).to.be.revertedWith('Fee is required to initiate validation pool'); }); + it('should not be able to initiate a validation pool with a quorum below the minimum', async () => { + const setup = await loadFixture(deploy); + const init = () => setup.dao.initiateValidationPool( + 0, + POOL_DURATION, + 1, + 4, + false, + callbackData, + { value: POOL_FEE }, + ); + await expect(init()).to.be.revertedWith('Quorum is below minimum'); + }); + + it('should not be able to initiate a validation pool with a quorum greater than 1', async () => { + const setup = await loadFixture(deploy); + const init = () => setup.dao.initiateValidationPool( + 0, + POOL_DURATION, + 11, + 10, + false, + callbackData, + { value: POOL_FEE }, + ); + await expect(init()).to.be.revertedWith('Quorum is greater than one'); + }); + it('should not be able to initiate a validation pool with duration below minimum', async () => { const setup = await loadFixture(deploy); const init = () => setup.dao.initiateValidationPool( 0, - 59, + 0, + 1, + 3, false, callbackData, { value: POOL_FEE }, @@ -88,7 +127,9 @@ describe('DAO', () => { const setup = await loadFixture(deploy); const init = () => setup.dao.initiateValidationPool( 0, - 86401, + 40000000000000, + 1, + 3, false, callbackData, { value: POOL_FEE }, @@ -100,6 +141,8 @@ describe('DAO', () => { const init = () => dao.initiateValidationPool( 0, POOL_DURATION, + 1, + 3, false, callbackData, { value: POOL_FEE }, @@ -143,6 +186,8 @@ describe('DAO', () => { const init = () => dao.initiateValidationPool( 0, POOL_DURATION, + 1, + 3, false, callbackData, { value: POOL_FEE }, @@ -155,6 +200,25 @@ describe('DAO', () => { await expect(dao.evaluateOutcome(1)).to.emit(dao, 'ValidationPoolResolved').withArgs(1, true); expect(await dao.balanceOf(account1)).to.equal(200); }); + + it('should not be able to evaluate outcome if quorum is not met', async () => { + time.increase(POOL_DURATION + 1); + await expect(dao.evaluateOutcome(0)).to.emit(dao, 'ValidationPoolResolved').withArgs(0, true); + + const init = () => dao.initiateValidationPool( + 0, + POOL_DURATION, + 1, + 1, + false, + callbackData, + { value: POOL_FEE }, + ); + await expect(init()).to.emit(dao, 'ValidationPoolInitiated').withArgs(1); + expect(await dao.validationPoolCount()).to.equal(2); + time.increase(POOL_DURATION + 1); + await expect(dao.evaluateOutcome(1)).to.be.revertedWith('Quorum for this pool was not met'); + }); }); describe('Stake', async () => { @@ -166,6 +230,8 @@ describe('DAO', () => { await dao.initiateValidationPool( 0, POOL_DURATION, + 1, + 3, false, callbackData, { value: POOL_FEE }, diff --git a/ethereum/test/Onboarding.js b/ethereum/test/Onboarding.js index 4fe6165..82576a7 100644 --- a/ethereum/test/Onboarding.js +++ b/ethereum/test/Onboarding.js @@ -19,7 +19,7 @@ describe('Onboarding', () => { await dao.addPost(account1, 'content-id'); const callbackData = ethers.AbiCoder.defaultAbiCoder().encode([], []); - await dao.initiateValidationPool(0, 60, false, callbackData, { value: 100 }); + await dao.initiateValidationPool(0, 60, 1, 3, false, callbackData, { value: 100 }); await time.increase(61); await dao.evaluateOutcome(0); expect(await dao.balanceOf(account1)).to.equal(100); diff --git a/ethereum/test/Work1.js b/ethereum/test/Work1.js index 794c323..25c896c 100644 --- a/ethereum/test/Work1.js +++ b/ethereum/test/Work1.js @@ -19,7 +19,7 @@ describe('Work1', () => { await dao.addPost(account1, 'some-content-id'); const callbackData = ethers.AbiCoder.defaultAbiCoder().encode([], []); - await dao.initiateValidationPool(0, 60, false, callbackData, { value: 100 }); + await dao.initiateValidationPool(0, 60, 1, 3, false, callbackData, { value: 100 }); await time.increase(61); await dao.evaluateOutcome(0);