0x608060405234801561001057600080fd5b50610c43806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806303ffa57a1461003b57806339a42ce114610064575b600080fd5b61004e610049366004610833565b610084565b60405161005b9190610a86565b60405180910390f35b610077610072366004610833565b6103de565b60405161005b91906109c6565b606060008267ffffffffffffffff8111156100a1576100a1610c20565b6040519080825280602002602001820160405280156100e757816020015b6040805180820190915260008152606060208201528152602001906001900390816100bf5790505b50905060005b838110156103d557600085858381811061010957610109610c0a565b905060200201602081019061011e9190610811565b9050604051806040016040528087878581811061013d5761013d610c0a565b90506020020160208101906101529190610811565b6001600160a01b039081168252604051635c0b16e960e11b81528a821660048201526020909201919084169063b8162dd29060240160206040518083038186803b15801561019f57600080fd5b505afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d791906109ad565b67ffffffffffffffff8111156101ef576101ef610c20565b60405190808252806020026020018201604052801561024157816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161020d5790505b5081525083838151811061025757610257610c0a565b6020908102919091010152604051634026ca1360e11b81526001600160a01b0388811660048301526000919083169063804d94269060240160006040518083038186803b1580156102a757600080fd5b505afa1580156102bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102e391908101906108b9565b905060005b8484815181106102fa576102fa610c0a565b602002602001015160200151518110156103bf57600082828151811061032257610322610c0a565b6020026020010151905060405180608001604052808260000151815260200182602001518152602001826040015167ffffffffffffffff168152602001826060015167ffffffffffffffff1681525086868151811061038357610383610c0a565b60200260200101516020015183815181106103a0576103a0610c0a565b60200260200101819052505080806103b790610bd9565b9150506102e8565b50505080806103cd90610bd9565b9150506100ed565b50949350505050565b606060008267ffffffffffffffff8111156103fb576103fb610c20565b60405190808252806020026020018201604052801561044157816020015b6040805180820190915260008152606060208201528152602001906001900390816104195790505b50905060005b838110156103d557600085858381811061046357610463610c0a565b90506020020160208101906104789190610811565b9050604051806040016040528087878581811061049757610497610c0a565b90506020020160208101906104ac9190610811565b6001600160a01b039081168252604051635c0b16e960e11b81528a821660048201526020909201919084169063b8162dd29060240160206040518083038186803b1580156104f957600080fd5b505afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053191906109ad565b67ffffffffffffffff81111561054957610549610c20565b60405190808252806020026020018201604052801561059b57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816105675790505b508152508383815181106105b1576105b1610c0a565b6020908102919091010152604051634026ca1360e11b81526001600160a01b0388811660048301526000919083169063804d94269060240160006040518083038186803b15801561060157600080fd5b505afa158015610615573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261063d91908101906108b9565b905060005b84848151811061065457610654610c0a565b602002602001015160200151518110156107c757600082828151811061067c5761067c610c0a565b60200260200101519050604051806080016040528082600001518152602001826040015167ffffffffffffffff168152602001826060015167ffffffffffffffff168152602001856001600160a01b031663adf8252d846040015185606001516106e69190610bb0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff909116600482015260240160206040518083038186803b15801561073e57600080fd5b505afa158015610752573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077691906109ad565b81525086868151811061078b5761078b610c0a565b60200260200101516020015183815181106107a8576107a8610c0a565b60200260200101819052505080806107bf90610bd9565b915050610642565b50505080806107d590610bd9565b915050610447565b80356001600160a01b03811681146107f457600080fd5b919050565b805167ffffffffffffffff811681146107f457600080fd5b60006020828403121561082357600080fd5b61082c826107dd565b9392505050565b60008060006040848603121561084857600080fd5b610851846107dd565b9250602084013567ffffffffffffffff8082111561086e57600080fd5b818601915086601f83011261088257600080fd5b81358181111561089157600080fd5b8760208260051b85010111156108a657600080fd5b6020830194508093505050509250925092565b600060208083850312156108cc57600080fd5b825167ffffffffffffffff808211156108e457600080fd5b818501915085601f8301126108f857600080fd5b81518181111561090a5761090a610c20565b610918848260051b01610b7f565b8181528481019250838501600783901b8501860189101561093857600080fd5b60009450845b8381101561099f57608080838c031215610956578687fd5b61095e610b56565b83518152888401518982015260406109778186016107f9565b9082015260606109888582016107f9565b90820152865294870194919091019060010161093e565b509098975050505050505050565b6000602082840312156109bf57600080fd5b5051919050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561099f57888303603f19018552815180516001600160a01b031684528701518784018790528051878501819052908801906060908186019060005b81811015610a70578451805184528c81015167ffffffffffffffff9081168e8601528c820151168c85015284015184840152938b0193608090920191600101610a2c565b50509689019694505050908601906001016109ed565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015610b4757898403603f19018652825180516001600160a01b0316855288015188850188905280518886018190529089019060609081870190855b81811015610b31578451805184528d8101518e8501528c81015167ffffffffffffffff9081168e860152908501511684840152938c0193608090920191600101610aec565b5050978a01979550505091870191600101610aae565b50919998505050505050505050565b6040516080810167ffffffffffffffff81118282101715610b7957610b79610c20565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ba857610ba8610c20565b604052919050565b600067ffffffffffffffff83811690831681811015610bd157610bd1610bf4565b039392505050565b6000600019821415610bed57610bed610bf4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea164736f6c6343000807000a