//
0x608060405234801561001057600080fd5b506123da806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102bd578063a457c2d7146102db578063a9059cbb1461030b578063dd62ed3e1461033b578063f2fde38b1461036b57610116565b806370a082311461025b578063715018a61461028b5780638129fc1c146102955780638da5cb5b1461029f57610116565b8063313ce567116100e9578063313ce567146101b757806332cb6b0c146101d557806339509351146101f357806340c10f191461022357806342966c681461023f57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd1461016957806323b872dd14610187575b600080fd5b610123610387565b604051610130919061153f565b60405180910390f35b610153600480360381019061014e91906115fa565b610419565b6040516101609190611655565b60405180910390f35b61017161043c565b60405161017e919061167f565b60405180910390f35b6101a1600480360381019061019c919061169a565b610446565b6040516101ae9190611655565b60405180910390f35b6101bf610475565b6040516101cc9190611709565b60405180910390f35b6101dd61047e565b6040516101ea919061167f565b60405180910390f35b61020d600480360381019061020891906115fa565b61048e565b60405161021a9190611655565b60405180910390f35b61023d600480360381019061023891906115fa565b6104c5565b005b61025960048036038101906102549190611724565b61053c565b005b61027560048036038101906102709190611751565b610549565b604051610282919061167f565b60405180910390f35b610293610592565b005b61029d6105a6565b005b6102a7610758565b6040516102b4919061178d565b60405180910390f35b6102c5610782565b6040516102d2919061153f565b60405180910390f35b6102f560048036038101906102f091906115fa565b610814565b6040516103029190611655565b60405180910390f35b610325600480360381019061032091906115fa565b61088b565b6040516103329190611655565b60405180910390f35b610355600480360381019061035091906117a8565b6108ae565b604051610362919061167f565b60405180910390f35b61038560048036038101906103809190611751565b610935565b005b60606036805461039690611817565b80601f01602080910402602001604051908101604052809291908181526020018280546103c290611817565b801561040f5780601f106103e45761010080835404028352916020019161040f565b820191906000526020600020905b8154815290600101906020018083116103f257829003601f168201915b5050505050905090565b6000806104246109b8565b90506104318185856109c0565b600191505092915050565b6000603554905090565b6000806104516109b8565b905061045e858285610b89565b610469858585610c15565b60019150509392505050565b60006012905090565b6b204fce5e3e2502611000000081565b6000806104996109b8565b90506104ba8185856104ab85896108ae565b6104b59190611877565b6109c0565b600191505092915050565b6104cd610e8e565b6b204fce5e3e25026110000000816104e361043c565b6104ed9190611877565b111561052e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610525906118f7565b60405180910390fd5b6105388282610f0c565b5050565b6105463382611063565b50565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61059a610e8e565b6105a46000611232565b565b60008060019054906101000a900460ff161590508080156105d75750600160008054906101000a900460ff1660ff16105b8061060457506105e6306112f8565b1580156106035750600160008054906101000a900460ff1660ff16145b5b610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a90611989565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610680576001600060016101000a81548160ff0219169083151502179055505b6106f46040518060400160405280600581526020017f5452554d500000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5452554d5000000000000000000000000000000000000000000000000000000081525061131b565b6106fc611378565b80156107555760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161074c91906119ee565b60405180910390a15b50565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606037805461079190611817565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd90611817565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b60008061081f6109b8565b9050600061082d82866108ae565b905083811015610872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086990611a7b565b60405180910390fd5b61087f82868684036109c0565b60019250505092915050565b6000806108966109b8565b90506108a3818585610c15565b600191505092915050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61093d610e8e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a390611b0d565b60405180910390fd5b6109b581611232565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690611b9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9590611c31565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b7c919061167f565b60405180910390a3505050565b6000610b9584846108ae565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c0f5781811015610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890611c9d565b60405180910390fd5b610c0e84848484036109c0565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90611d2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea90611dc1565b60405180910390fd5b610cfe8383836113d1565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90611e53565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e75919061167f565b60405180910390a3610e888484846113d6565b50505050565b610e966109b8565b73ffffffffffffffffffffffffffffffffffffffff16610eb4610758565b73ffffffffffffffffffffffffffffffffffffffff1614610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190611ebf565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290611f2b565b60405180910390fd5b610f87600083836113d1565b8060356000828254610f999190611877565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161104b919061167f565b60405180910390a361105f600083836113d6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990611fbd565b60405180910390fd5b6110de826000836113d1565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c9061204f565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611219919061167f565b60405180910390a361122d836000846113d6565b505050565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661136a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611361906120e1565b60405180910390fd5b61137482826113db565b5050565b600060019054906101000a900460ff166113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be906120e1565b60405180910390fd5b6113cf61144e565b565b505050565b505050565b600060019054906101000a900460ff1661142a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611421906120e1565b60405180910390fd5b816036908161143991906122d2565b50806037908161144991906122d2565b505050565b600060019054906101000a900460ff1661149d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611494906120e1565b60405180910390fd5b6114ad6114a86109b8565b611232565b565b600081519050919050565b600082825260208201905092915050565b60005b838110156114e95780820151818401526020810190506114ce565b60008484015250505050565b6000601f19601f8301169050919050565b6000611511826114af565b61151b81856114ba565b935061152b8185602086016114cb565b611534816114f5565b840191505092915050565b600060208201905081810360008301526115598184611506565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061159182611566565b9050919050565b6115a181611586565b81146115ac57600080fd5b50565b6000813590506115be81611598565b92915050565b6000819050919050565b6115d7816115c4565b81146115e257600080fd5b50565b6000813590506115f4816115ce565b92915050565b6000806040838503121561161157611610611561565b5b600061161f858286016115af565b9250506020611630858286016115e5565b9150509250929050565b60008115159050919050565b61164f8161163a565b82525050565b600060208201905061166a6000830184611646565b92915050565b611679816115c4565b82525050565b60006020820190506116946000830184611670565b92915050565b6000806000606084860312156116b3576116b2611561565b5b60006116c1868287016115af565b93505060206116d2868287016115af565b92505060406116e3868287016115e5565b9150509250925092565b600060ff82169050919050565b611703816116ed565b82525050565b600060208201905061171e60008301846116fa565b92915050565b60006020828403121561173a57611739611561565b5b6000611748848285016115e5565b91505092915050565b60006020828403121561176757611766611561565b5b6000611775848285016115af565b91505092915050565b61178781611586565b82525050565b60006020820190506117a2600083018461177e565b92915050565b600080604083850312156117bf576117be611561565b5b60006117cd858286016115af565b92505060206117de858286016115af565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061182f57607f821691505b602082108103611842576118416117e8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611882826115c4565b915061188d836115c4565b92508282019050808211156118a5576118a4611848565b5b92915050565b7f4d696e74696e672065786365656473206d6178696d756d20737570706c790000600082015250565b60006118e1601e836114ba565b91506118ec826118ab565b602082019050919050565b60006020820190508181036000830152611910816118d4565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000611973602e836114ba565b915061197e82611917565b604082019050919050565b600060208201905081810360008301526119a281611966565b9050919050565b6000819050919050565b6000819050919050565b60006119d86119d36119ce846119a9565b6119b3565b6116ed565b9050919050565b6119e8816119bd565b82525050565b6000602082019050611a0360008301846119df565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611a656025836114ba565b9150611a7082611a09565b604082019050919050565b60006020820190508181036000830152611a9481611a58565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611af76026836114ba565b9150611b0282611a9b565b604082019050919050565b60006020820190508181036000830152611b2681611aea565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611b896024836114ba565b9150611b9482611b2d565b604082019050919050565b60006020820190508181036000830152611bb881611b7c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c1b6022836114ba565b9150611c2682611bbf565b604082019050919050565b60006020820190508181036000830152611c4a81611c0e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611c87601d836114ba565b9150611c9282611c51565b602082019050919050565b60006020820190508181036000830152611cb681611c7a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611d196025836114ba565b9150611d2482611cbd565b604082019050919050565b60006020820190508181036000830152611d4881611d0c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611dab6023836114ba565b9150611db682611d4f565b604082019050919050565b60006020820190508181036000830152611dda81611d9e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611e3d6026836114ba565b9150611e4882611de1565b604082019050919050565b60006020820190508181036000830152611e6c81611e30565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ea96020836114ba565b9150611eb482611e73565b602082019050919050565b60006020820190508181036000830152611ed881611e9c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611f15601f836114ba565b9150611f2082611edf565b602082019050919050565b60006020820190508181036000830152611f4481611f08565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611fa76021836114ba565b9150611fb282611f4b565b604082019050919050565b60006020820190508181036000830152611fd681611f9a565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006120396022836114ba565b915061204482611fdd565b604082019050919050565b600060208201905081810360008301526120688161202c565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006120cb602b836114ba565b91506120d68261206f565b604082019050919050565b600060208201905081810360008301526120fa816120be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612155565b61219c8683612155565b95508019841693508086168417925050509392505050565b60006121cf6121ca6121c5846115c4565b6119b3565b6115c4565b9050919050565b6000819050919050565b6121e9836121b4565b6121fd6121f5826121d6565b848454612162565b825550505050565b600090565b612212612205565b61221d8184846121e0565b505050565b5b818110156122415761223660008261220a565b600181019050612223565b5050565b601f8211156122865761225781612130565b61226084612145565b8101602085101561226f578190505b61228361227b85612145565b830182612222565b50505b505050565b600082821c905092915050565b60006122a96000198460080261228b565b1980831691505092915050565b60006122c28383612298565b9150826002028217905092915050565b6122db826114af565b67ffffffffffffffff8111156122f4576122f3612101565b5b6122fe8254611817565b612309828285612245565b600060209050601f83116001811461233c576000841561232a578287015190505b61233485826122b6565b86555061239c565b601f19841661234a86612130565b60005b828110156123725784890151825560018201915060208501945060208101905061234d565b8683101561238f578489015161238b601f891682612298565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220d5f51a3e22fc2e25eda7bfa1e7953c25e29457e9c4089ddf355403e4947d40fb64736f6c63430008130033