0x60806040523480156200001157600080fd5b50620000226200035060201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36009600a620000ec9190620004f2565b62bebc20620000fc919062000543565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009600a620001ae9190620004f2565b62bebc20620001be919062000543565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009600a620002709190620004f2565b62bebc2062000280919062000543565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a620003239190620004f2565b62bebc2062000333919062000543565b6040516200034291906200059f565b60405180910390a3620005bc565b600033905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620003e657808604811115620003be57620003bd62000358565b5b6001851615620003ce5780820291505b8081029050620003de8562000387565b94506200039e565b94509492505050565b600082620004015760019050620004d4565b81620004115760009050620004d4565b81600181146200042a576002811462000435576200046b565b6001915050620004d4565b60ff8411156200044a576200044962000358565b5b8360020a91508482111562000464576200046362000358565b5b50620004d4565b5060208310610133831016604e8410600b8410161715620004a55782820a9050838111156200049f576200049e62000358565b5b620004d4565b620004b4848484600162000394565b92509050818404811115620004ce57620004cd62000358565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620004ff82620004db565b91506200050c83620004e5565b92506200053b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620003ef565b905092915050565b60006200055082620004db565b91506200055d83620004db565b92508282026200056d81620004db565b9150828204841483151762000587576200058662000358565b5b5092915050565b6200059981620004db565b82525050565b6000602082019050620005b660008301846200058e565b92915050565b61211880620005cc6000396000f3fe6080604052600436106101185760003560e01c8063893c9f2b116100a0578063a9059cbb11610064578063a9059cbb1461038d578063dd62ed3e146103ca578063ec44acf214610407578063f2fde38b14610432578063f887ea401461045b5761011f565b8063893c9f2b146102cc5780638a8c523c146102f55780638da5cb5b1461030c57806395d89b4114610337578063a8aa1b31146103625761011f565b806323b872dd116100e757806323b872dd146101d3578063313ce56714610210578063571ac8b01461023b57806370a0823114610278578063715018a6146102b55761011f565b806306f200031461012457806306fdde0314610140578063095ea7b31461016b57806318160ddd146101a85761011f565b3661011f57005b600080fd5b61013e600480360381019061013991906117a8565b610486565b005b34801561014c57600080fd5b5061015561099a565b6040516101629190611865565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d91906118bd565b6109d7565b60405161019f9190611918565b60405180910390f35b3480156101b457600080fd5b506101bd610ac9565b6040516101ca9190611942565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f5919061195d565b610aec565b6040516102079190611918565b60405180910390f35b34801561021c57600080fd5b50610225610ce7565b60405161023291906119cc565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d91906117a8565b610cf0565b60405161026f9190611918565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a91906117a8565b610d1e565b6040516102ac9190611942565b60405180910390f35b3480156102c157600080fd5b506102ca610d67565b005b3480156102d857600080fd5b506102f360048036038101906102ee91906119e7565b610eba565b005b34801561030157600080fd5b5061030a610fa0565b005b34801561031857600080fd5b506103216110a2565b60405161032e9190611a23565b60405180910390f35b34801561034357600080fd5b5061034c6110cb565b6040516103599190611865565b60405180910390f35b34801561036e57600080fd5b50610377611108565b6040516103849190611a23565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af91906118bd565b61112e565b6040516103c19190611918565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190611a3e565b611143565b6040516103fe9190611942565b60405180910390f35b34801561041357600080fd5b5061041c6111ca565b6040516104299190611918565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906117a8565b6111dd565b005b34801561046757600080fd5b5061047061139e565b60405161047d9190611add565b60405180910390f35b61048e6113c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461051b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611b44565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190611b79565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190611b79565b6040518363ffffffff1660e01b81526004016106b7929190611ba6565b6020604051808303816000875af11580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa9190611b79565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a6107489190611d31565b62bebc206107569190611d7c565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343061084130610d1e565b60008061084c6110a2565b426040518863ffffffff1660e01b815260040161086e96959493929190611df9565b60606040518083038185885af115801561088c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108b19190611e6f565b505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610953929190611ec2565b6020604051808303816000875af1158015610972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109969190611f17565b5050565b60606040518060400160405280600d81526020017f4e6f6c6c61727320546f6b656e00000000000000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ab79190611942565b60405180910390a36001905092915050565b60006009600a610ad99190611d31565b62bebc20610ae79190611d7c565b905090565b60006009600a610afc9190611d31565b62bebc20610b0a9190611d7c565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610cd357610c52826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113cc9092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610cde848484611421565b90509392505050565b60006009905090565b6000610d17826009600a610d049190611d31565b62bebc20610d129190611d7c565b6109d7565b9050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d6f6113c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390611b44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ec26113c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690611b44565b60405180910390fd5b610f576110a2565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f9c573d6000803e3d6000fd5b5050565b610fa86113c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90611b44565b60405180910390fd5b600560009054906101000a900460ff1615611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c90611f90565b60405180910390fd5b6001600560006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f4e4f4c4c41525300000000000000000000000000000000000000000000000000815250905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061113b338484611421565b905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900460ff1681565b6111e56113c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990611b44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890612022565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b6000838311158290611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b9190611865565b60405180910390fd5b5082840390509392505050565b600061142b6110a2565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461155e57600560009054906101000a900460ff1661155d578373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561151d57508273ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61155c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115539061208e565b60405180910390fd5b5b5b6115e7826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113cc9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061167c82600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172f90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161171c9190611942565b60405180910390a3600190509392505050565b6000818361173d91906120ae565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117758261174a565b9050919050565b6117858161176a565b811461179057600080fd5b50565b6000813590506117a28161177c565b92915050565b6000602082840312156117be576117bd611745565b5b60006117cc84828501611793565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561180f5780820151818401526020810190506117f4565b60008484015250505050565b6000601f19601f8301169050919050565b6000611837826117d5565b61184181856117e0565b93506118518185602086016117f1565b61185a8161181b565b840191505092915050565b6000602082019050818103600083015261187f818461182c565b905092915050565b6000819050919050565b61189a81611887565b81146118a557600080fd5b50565b6000813590506118b781611891565b92915050565b600080604083850312156118d4576118d3611745565b5b60006118e285828601611793565b92505060206118f3858286016118a8565b9150509250929050565b60008115159050919050565b611912816118fd565b82525050565b600060208201905061192d6000830184611909565b92915050565b61193c81611887565b82525050565b60006020820190506119576000830184611933565b92915050565b60008060006060848603121561197657611975611745565b5b600061198486828701611793565b935050602061199586828701611793565b92505060406119a6868287016118a8565b9150509250925092565b600060ff82169050919050565b6119c6816119b0565b82525050565b60006020820190506119e160008301846119bd565b92915050565b6000602082840312156119fd576119fc611745565b5b6000611a0b848285016118a8565b91505092915050565b611a1d8161176a565b82525050565b6000602082019050611a386000830184611a14565b92915050565b60008060408385031215611a5557611a54611745565b5b6000611a6385828601611793565b9250506020611a7485828601611793565b9150509250929050565b6000819050919050565b6000611aa3611a9e611a998461174a565b611a7e565b61174a565b9050919050565b6000611ab582611a88565b9050919050565b6000611ac782611aaa565b9050919050565b611ad781611abc565b82525050565b6000602082019050611af26000830184611ace565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611b2e6020836117e0565b9150611b3982611af8565b602082019050919050565b60006020820190508181036000830152611b5d81611b21565b9050919050565b600081519050611b738161177c565b92915050565b600060208284031215611b8f57611b8e611745565b5b6000611b9d84828501611b64565b91505092915050565b6000604082019050611bbb6000830185611a14565b611bc86020830184611a14565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115611c5557808604811115611c3157611c30611bcf565b5b6001851615611c405780820291505b8081029050611c4e85611bfe565b9450611c15565b94509492505050565b600082611c6e5760019050611d2a565b81611c7c5760009050611d2a565b8160018114611c925760028114611c9c57611ccb565b6001915050611d2a565b60ff841115611cae57611cad611bcf565b5b8360020a915084821115611cc557611cc4611bcf565b5b50611d2a565b5060208310610133831016604e8410600b8410161715611d005782820a905083811115611cfb57611cfa611bcf565b5b611d2a565b611d0d8484846001611c0b565b92509050818404811115611d2457611d23611bcf565b5b81810290505b9392505050565b6000611d3c82611887565b9150611d47836119b0565b9250611d747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611c5e565b905092915050565b6000611d8782611887565b9150611d9283611887565b9250828202611da081611887565b91508282048414831517611db757611db6611bcf565b5b5092915050565b6000819050919050565b6000611de3611dde611dd984611dbe565b611a7e565b611887565b9050919050565b611df381611dc8565b82525050565b600060c082019050611e0e6000830189611a14565b611e1b6020830188611933565b611e286040830187611dea565b611e356060830186611dea565b611e426080830185611a14565b611e4f60a0830184611933565b979650505050505050565b600081519050611e6981611891565b92915050565b600080600060608486031215611e8857611e87611745565b5b6000611e9686828701611e5a565b9350506020611ea786828701611e5a565b9250506040611eb886828701611e5a565b9150509250925092565b6000604082019050611ed76000830185611a14565b611ee46020830184611933565b9392505050565b611ef4816118fd565b8114611eff57600080fd5b50565b600081519050611f1181611eeb565b92915050565b600060208284031215611f2d57611f2c611745565b5b6000611f3b84828501611f02565b91505092915050565b7f416c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000611f7a600f836117e0565b9150611f8582611f44565b602082019050919050565b60006020820190508181036000830152611fa981611f6d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061200c6026836117e0565b915061201782611fb0565b604082019050919050565b6000602082019050818103600083015261203b81611fff565b9050919050565b7f54726164696e672069732064697361626c650000000000000000000000000000600082015250565b60006120786012836117e0565b915061208382612042565b602082019050919050565b600060208201905081810360008301526120a78161206b565b9050919050565b60006120b982611887565b91506120c483611887565b92508282019050808211156120dc576120db611bcf565b5b9291505056fea2646970667358221220cf401cd48ef777d321b7f559d6f19f49647ed99f35cebf9bb05987e12ea7509464736f6c63430008110033