608060405234801561000f575f5ffd5b50604051612069380380612069833981810160405281019061003191906103bb565b835f908161003f919061065e565b50826001908161004f919061065e565b508160025f6101000a81548160ff021916908360ff1602179055503360045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506100ba33826100c360201b60201c565b5050505061082d565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012890610787565b60405180910390fd5b8060035f82825461014291906107d2565b925050819055508060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461019591906107d2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101f99190610814565b60405180910390a35050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102648261021e565b810181811067ffffffffffffffff821117156102835761028261022e565b5b80604052505050565b5f610295610205565b90506102a1828261025b565b919050565b5f67ffffffffffffffff8211156102c0576102bf61022e565b5b6102c98261021e565b9050602081019050919050565b8281835e5f83830152505050565b5f6102f66102f1846102a6565b61028c565b9050828152602081018484840111156103125761031161021a565b5b61031d8482856102d6565b509392505050565b5f82601f83011261033957610338610216565b5b81516103498482602086016102e4565b91505092915050565b5f60ff82169050919050565b61036781610352565b8114610371575f5ffd5b50565b5f815190506103828161035e565b92915050565b5f819050919050565b61039a81610388565b81146103a4575f5ffd5b50565b5f815190506103b581610391565b92915050565b5f5f5f5f608085870312156103d3576103d261020e565b5b5f85015167ffffffffffffffff8111156103f0576103ef610212565b5b6103fc87828801610325565b945050602085015167ffffffffffffffff81111561041d5761041c610212565b5b61042987828801610325565b935050604061043a87828801610374565b925050606061044b878288016103a7565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806104a557607f821691505b6020821081036104b8576104b7610461565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261051a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826104df565b61052486836104df565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61055f61055a61055584610388565b61053c565b610388565b9050919050565b5f819050919050565b61057883610545565b61058c61058482610566565b8484546104eb565b825550505050565b5f5f905090565b6105a3610594565b6105ae81848461056f565b505050565b5b818110156105d1576105c65f8261059b565b6001810190506105b4565b5050565b601f821115610616576105e7816104be565b6105f0846104d0565b810160208510156105ff578190505b61061361060b856104d0565b8301826105b3565b50505b505050565b5f82821c905092915050565b5f6106365f198460080261061b565b1980831691505092915050565b5f61064e8383610627565b9150826002028217905092915050565b61066782610457565b67ffffffffffffffff8111156106805761067f61022e565b5b61068a825461048e565b6106958282856105d5565b5f60209050601f8311600181146106c6575f84156106b4578287015190505b6106be8582610643565b865550610725565b601f1984166106d4866104be565b5f5b828110156106fb578489015182556001820191506020850194506020810190506106d6565b868310156107185784890151610714601f891682610627565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f4d696e7420746f20746865207a65726f206164647265737300000000000000005f82015250565b5f61077160188361072d565b915061077c8261073d565b602082019050919050565b5f6020820190508181035f83015261079e81610765565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6107dc82610388565b91506107e783610388565b92508282019050808211156107ff576107fe6107a5565b5b92915050565b61080e81610388565b82525050565b5f6020820190506108275f830184610805565b92915050565b61182f8061083a5f395ff3fe608060405234801561000f575f5ffd5b50600436106100cd575f3560e01c806370a082311161008a578063a0712d6811610064578063a0712d6814610213578063a9059cbb1461022f578063dd62ed3e1461025f578063f2fde38b1461028f576100cd565b806370a08231146101a75780638da5cb5b146101d757806395d89b41146101f5576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d578063313ce5671461016d57806342966c681461018b575b5f5ffd5b6100d96102ab565b6040516100e6919061106f565b60405180910390f35b61010960048036038101906101049190611120565b610336565b6040516101169190611178565b60405180910390f35b61012761034c565b60405161013491906111a0565b60405180910390f35b610157600480360381019061015291906111b9565b610355565b6040516101649190611178565b60405180910390f35b610175610535565b6040516101829190611224565b60405180910390f35b6101a560048036038101906101a0919061123d565b610547565b005b6101c160048036038101906101bc9190611268565b610554565b6040516101ce91906111a0565b60405180910390f35b6101df61059a565b6040516101ec91906112a2565b60405180910390f35b6101fd6105bf565b60405161020a919061106f565b60405180910390f35b61022d6004803603810190610228919061123d565b61064b565b005b61024960048036038101906102449190611120565b6106e7565b6040516102569190611178565b60405180910390f35b610279600480360381019061027491906112bb565b61077d565b60405161028691906111a0565b60405180910390f35b6102a960048036038101906102a49190611268565b6107ff565b005b5f80546102b790611326565b80601f01602080910402602001604051908101604052809291908181526020018280546102e390611326565b801561032e5780601f106103055761010080835404028352916020019161032e565b820191905f5260205f20905b81548152906001019060200180831161031157829003601f168201915b505050505081565b5f6103423384846109ba565b6001905092915050565b5f600354905090565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156103d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103cd906113a0565b60405180910390fd5b8160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048890611408565b60405180910390fd5b61049c848484610b7d565b61052a84338460065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546105259190611453565b6109ba565b600190509392505050565b60025f9054906101000a900460ff1681565b6105513382610cfb565b50565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600180546105cc90611326565b80601f01602080910402602001604051908101604052809291908181526020018280546105f890611326565b80156106435780601f1061061a57610100808354040283529160200191610643565b820191905f5260205f20905b81548152906001019060200180831161062657829003601f168201915b505050505081565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d1906114d0565b60405180910390fd5b6106e43382610ebd565b50565b5f8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075f906113a0565b60405180910390fd5b610773338484610b7d565b6001905092915050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461088e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610885906114d0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f390611538565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f906115a0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90611608565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b7091906111a0565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290611670565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c379190611453565b925050819055508060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c8a919061168e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cee91906111a0565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d609061170b565b60405180910390fd5b8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090611773565b60405180910390fd5b8060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e359190611453565b925050819055508060035f828254610e4d9190611453565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610eb191906111a0565b60405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906117db565b60405180910390fd5b8060035f828254610f3c919061168e565b925050819055508060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610f8f919061168e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ff391906111a0565b60405180910390a35050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61104182610fff565b61104b8185611009565b935061105b818560208601611019565b61106481611027565b840191505092915050565b5f6020820190508181035f8301526110878184611037565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110bc82611093565b9050919050565b6110cc816110b2565b81146110d6575f5ffd5b50565b5f813590506110e7816110c3565b92915050565b5f819050919050565b6110ff816110ed565b8114611109575f5ffd5b50565b5f8135905061111a816110f6565b92915050565b5f5f604083850312156111365761113561108f565b5b5f611143858286016110d9565b92505060206111548582860161110c565b9150509250929050565b5f8115159050919050565b6111728161115e565b82525050565b5f60208201905061118b5f830184611169565b92915050565b61119a816110ed565b82525050565b5f6020820190506111b35f830184611191565b92915050565b5f5f5f606084860312156111d0576111cf61108f565b5b5f6111dd868287016110d9565b93505060206111ee868287016110d9565b92505060406111ff8682870161110c565b9150509250925092565b5f60ff82169050919050565b61121e81611209565b82525050565b5f6020820190506112375f830184611215565b92915050565b5f602082840312156112525761125161108f565b5b5f61125f8482850161110c565b91505092915050565b5f6020828403121561127d5761127c61108f565b5b5f61128a848285016110d9565b91505092915050565b61129c816110b2565b82525050565b5f6020820190506112b55f830184611293565b92915050565b5f5f604083850312156112d1576112d061108f565b5b5f6112de858286016110d9565b92505060206112ef858286016110d9565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061133d57607f821691505b6020821081036113505761134f6112f9565b5b50919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61138a601483611009565b915061139582611356565b602082019050919050565b5f6020820190508181035f8301526113b78161137e565b9050919050565b7f416c6c6f77616e636520657863656564656400000000000000000000000000005f82015250565b5f6113f2601283611009565b91506113fd826113be565b602082019050919050565b5f6020820190508181035f83015261141f816113e6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61145d826110ed565b9150611468836110ed565b92508282039050818111156114805761147f611426565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f776e65720000000000000000005f82015250565b5f6114ba601783611009565b91506114c582611486565b602082019050919050565b5f6020820190508181035f8301526114e7816114ae565b9050919050565b7f4e6577206f776e657220697320746865207a65726f20616464726573730000005f82015250565b5f611522601d83611009565b915061152d826114ee565b602082019050919050565b5f6020820190508181035f83015261154f81611516565b9050919050565b7f417070726f76652066726f6d20746865207a65726f20616464726573730000005f82015250565b5f61158a601d83611009565b915061159582611556565b602082019050919050565b5f6020820190508181035f8301526115b78161157e565b9050919050565b7f417070726f766520746f20746865207a65726f206164647265737300000000005f82015250565b5f6115f2601b83611009565b91506115fd826115be565b602082019050919050565b5f6020820190508181035f83015261161f816115e6565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373000000005f82015250565b5f61165a601c83611009565b915061166582611626565b602082019050919050565b5f6020820190508181035f8301526116878161164e565b9050919050565b5f611698826110ed565b91506116a3836110ed565b92508282019050808211156116bb576116ba611426565b5b92915050565b7f4275726e2066726f6d20746865207a65726f20616464726573730000000000005f82015250565b5f6116f5601a83611009565b9150611700826116c1565b602082019050919050565b5f6020820190508181035f830152611722816116e9565b9050919050565b7f4275726e20616d6f756e7420657863656564732062616c616e636500000000005f82015250565b5f61175d601b83611009565b915061176882611729565b602082019050919050565b5f6020820190508181035f83015261178a81611751565b9050919050565b7f4d696e7420746f20746865207a65726f206164647265737300000000000000005f82015250565b5f6117c5601883611009565b91506117d082611791565b602082019050919050565b5f6020820190508181035f8301526117f2816117b9565b905091905056fea264697066735822122076378ddbf47d240b51eb777048cdb322c218d403cf71463618d6d8df938644aa64736f6c634300081b0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000001d6329f1c35ca4bfabb9f56100000000000000000000000000000000000000000000000000000000000000000000000006514f434f494e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004514f434f00000000000000000000000000000000000000000000000000000000