6080604052348015600e575f80fd5b503360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f998061005c5f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c806370a082311161006f57806370a082311461016557806395d89b4114610195578063a0712d68146101b3578063a9059cbb146101e3578063dd62ed3e14610213578063f2fde38b14610243576100a7565b806306fdde03146100ab578063095ea7b3146100c957806318160ddd146100f957806323b872dd14610117578063313ce56714610147575b5f80fd5b6100b3610273565b6040516100c09190610b52565b60405180910390f35b6100e360048036038101906100de9190610c03565b6102ac565b6040516100f09190610c5b565b60405180910390f35b610101610399565b60405161010e9190610c83565b60405180910390f35b610131600480360381019061012c9190610c9c565b61039e565b60405161013e9190610c5b565b60405180910390f35b61014f61058b565b60405161015c9190610d07565b60405180910390f35b61017f600480360381019061017a9190610d20565b610590565b60405161018c9190610c83565b60405180910390f35b61019d6105d6565b6040516101aa9190610b52565b60405180910390f35b6101cd60048036038101906101c89190610d4b565b61060f565b6040516101da9190610c5b565b60405180910390f35b6101fd60048036038101906101f89190610c03565b61067b565b60405161020a9190610c5b565b60405180910390f35b61022d60048036038101906102289190610d76565b610691565b60405161023a9190610c83565b60405180910390f35b61025d60048036038101906102589190610d20565b610713565b60405161026a9190610c5b565b60405180910390f35b6040518060400160405280600c81526020017f437543752054686520436174000000000000000000000000000000000000000081525081565b5f8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103879190610c83565b60405180910390a36001905092915050565b5f5481565b5f803390505f60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561047b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b15610573575f848261048d9190610de1565b90508060015f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516105699190610c83565b60405180910390a3505b61057e8686866107b5565b6001925050509392505050565b601281565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6040518060400160405280600481526020017f435543550000000000000000000000000000000000000000000000000000000081525081565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610668575f80fd5b6106723383610a0f565b60019050919050565b5f6106873384846107b5565b6001905092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461076c575f80fd5b8160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a90610e84565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088890610f12565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108da9190610de1565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109649190610f30565b60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a029190610c83565b60405180910390a3505050565b805f80828254610a1f9190610f30565b925050819055508060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a729190610f30565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ad69190610c83565b60405180910390a35050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610b2482610ae2565b610b2e8185610aec565b9350610b3e818560208601610afc565b610b4781610b0a565b840191505092915050565b5f6020820190508181035f830152610b6a8184610b1a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b9f82610b76565b9050919050565b610baf81610b95565b8114610bb9575f80fd5b50565b5f81359050610bca81610ba6565b92915050565b5f819050919050565b610be281610bd0565b8114610bec575f80fd5b50565b5f81359050610bfd81610bd9565b92915050565b5f8060408385031215610c1957610c18610b72565b5b5f610c2685828601610bbc565b9250506020610c3785828601610bef565b9150509250929050565b5f8115159050919050565b610c5581610c41565b82525050565b5f602082019050610c6e5f830184610c4c565b92915050565b610c7d81610bd0565b82525050565b5f602082019050610c965f830184610c74565b92915050565b5f805f60608486031215610cb357610cb2610b72565b5b5f610cc086828701610bbc565b9350506020610cd186828701610bbc565b9250506040610ce286828701610bef565b9150509250925092565b5f60ff82169050919050565b610d0181610cec565b82525050565b5f602082019050610d1a5f830184610cf8565b92915050565b5f60208284031215610d3557610d34610b72565b5b5f610d4284828501610bbc565b91505092915050565b5f60208284031215610d6057610d5f610b72565b5b5f610d6d84828501610bef565b91505092915050565b5f8060408385031215610d8c57610d8b610b72565b5b5f610d9985828601610bbc565b9250506020610daa85828601610bbc565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610deb82610bd0565b9150610df683610bd0565b9250828203905081811115610e0e57610e0d610db4565b5b92915050565b7f556e693a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472615f8201527f6e736665722066726f6d20746865207a65726f20616464726573730000000000602082015250565b5f610e6e603b83610aec565b9150610e7982610e14565b604082019050919050565b5f6020820190508181035f830152610e9b81610e62565b9050919050565b7f556e693a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472615f8201527f6e7366657220746f20746865207a65726f206164647265737300000000000000602082015250565b5f610efc603983610aec565b9150610f0782610ea2565b604082019050919050565b5f6020820190508181035f830152610f2981610ef0565b9050919050565b5f610f3a82610bd0565b9150610f4583610bd0565b9250828201905080821115610f5d57610f5c610db4565b5b9291505056fea2646970667358221220c01b10044b082c3f41e16563acc7ba323ba0bdc47402f0b2da069e70aeace28b64736f6c634300081a0033