6080604052736b175474e89094c44da98b954eedeac495271d0f6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a279dab6ec190ee4efce7da72896eb58ad533262600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060065560006007556100c561018760201b60201c565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361018f565b600033905090565b6120808061019e6000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c806380faa57d116100c3578063cd3daf9d1161007c578063cd3daf9d146104ea578063df136d6514610508578063e9fad8ee14610526578063ebe2b12b14610530578063f2fde38b1461054e578063f4b9fa751461059257610157565b806380faa57d146103bc5780638b876347146103da5780638da5cb5b146104325780638f32d59b1461047c578063a694fc3a1461049e578063c8f33c91146104cc57610157565b80632e1a7d4d116101155780632e1a7d4d146102d65780633c6b16ab146103045780633d18b9121461033257806370a082311461033c578063715018a6146103945780637b0a47ee1461039e57610157565b80628cc2621461015c5780630700037d146101b45780630c417c3b1461020c5780630d68b7611461025657806318160ddd1461029a5780631be05289146102b8575b600080fd5b61019e6004803603602081101561017257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105dc565b6040518082815260200191505060405180910390f35b6101f6600480360360208110156101ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c3565b6040518082815260200191505060405180910390f35b6102146106db565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102986004803603602081101561026c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610701565b005b6102a26107bf565b6040518082815260200191505060405180910390f35b6102c06107c9565b6040518082815260200191505060405180910390f35b610302600480360360208110156102ec57600080fd5b81019080803590602001909291905050506107d0565b005b6103306004803603602081101561031a57600080fd5b8101908080359060200190929190505050610985565b005b61033a610c02565b005b61037e6004803603602081101561035257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610de1565b6040518082815260200191505060405180910390f35b61039c610e2a565b005b6103a6610f65565b6040518082815260200191505060405180910390f35b6103c4610f6b565b6040518082815260200191505060405180910390f35b61041c600480360360208110156103f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f7e565b6040518082815260200191505060405180910390f35b61043a610f96565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610484610fc0565b604051808215151515815260200191505060405180910390f35b6104ca600480360360208110156104b457600080fd5b810190808035906020019092919050505061101f565b005b6104d46111d4565b6040518082815260200191505060405180910390f35b6104f26111da565b6040518082815260200191505060405180910390f35b610510611272565b6040518082815260200191505060405180910390f35b61052e611278565b005b610538611293565b6040518082815260200191505060405180910390f35b6105906004803603602081101561056457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611299565b005b61059a61131f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006106bc600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106ae670de0b6b3a76400006106a0610689600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461067b6111da565b61134490919063ffffffff16565b61069288610de1565b61138e90919063ffffffff16565b61141490919063ffffffff16565b61145e90919063ffffffff16565b9050919050565b600b6020528060005260406000206000915090505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610709610fc0565b61077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600154905090565b62093a8081565b336107d96111da565b6009819055506107e7610f6b565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b45761082a816105dc565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000821161092a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b610933826114e6565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109c66115e5565b73ffffffffffffffffffffffffffffffffffffffff1614610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611fb06021913960400191505060405180910390fd5b6000610a3c6111da565b600981905550610a4a610f6b565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b1757610a8d816105dc565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6006544210610b4157610b3662093a808361141490919063ffffffff16565b600781905550610ba4565b6000610b584260065461134490919063ffffffff16565b90506000610b716007548361138e90919063ffffffff16565b9050610b9b62093a80610b8d838761145e90919063ffffffff16565b61141490919063ffffffff16565b60078190555050505b42600881905550610bc162093a804261145e90919063ffffffff16565b6006819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d826040518082815260200191505060405180910390a15050565b33610c0b6111da565b600981905550610c19610f6b565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ce657610c5c816105dc565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000610cf1336105dc565b90506000811115610ddd576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d8e3382600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115ed9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040518082815260200191505060405180910390a25b5050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e32610fc0565b610ea4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075481565b6000610f79426006546116be565b905090565b600a6020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110036115e5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b336110286111da565b600981905550611036610f6b565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461110357611079816105dc565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008211611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b611182826116d7565b3373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040518082815260200191505060405180910390a25050565b60085481565b6000806111e56107bf565b14156111f557600954905061126f565b61126c61125b6112036107bf565b61124d670de0b6b3a764000061123f600754611231600854611223610f6b565b61134490919063ffffffff16565b61138e90919063ffffffff16565b61138e90919063ffffffff16565b61141490919063ffffffff16565b60095461145e90919063ffffffff16565b90505b90565b60095481565b61128961128433610de1565b6107d0565b611291610c02565b565b60065481565b6112a1610fc0565b611313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61131c816118d7565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061138683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a1d565b905092915050565b6000808314156113a1576000905061140e565b60008284029050828482816113b257fe5b0414611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611f8f6021913960400191505060405180910390fd5b809150505b92915050565b600061145683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611add565b905092915050565b6000808284019050838110156114dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6114fb8160015461134490919063ffffffff16565b60018190555061155381600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461134490919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115e233826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115ed9092919063ffffffff16565b50565b600033905090565b6116b9838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611ba3565b505050565b60008183106116cd57816116cf565b825b905092915050565b60003390506116fb8173ffffffffffffffffffffffffffffffffffffffff16611dee565b15611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526051815260200180611fd16051913960600191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611f666029913960400191505060405180910390fd5b6117ea8260015461145e90919063ffffffff16565b60018190555061184282600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145e90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118d33330846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e39909392919063ffffffff16565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561195d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611f406026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290611aca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a8f578082015181840152602081019050611a74565b50505050905090810190601f168015611abc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611b89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b4e578082015181840152602081019050611b33565b50505050905090810190601f168015611b7b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611b9557fe5b049050809150509392505050565b611bc28273ffffffffffffffffffffffffffffffffffffffff16611dee565b611c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310611c835780518252602082019150602081019050602083039250611c60565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ce5576040519150601f19603f3d011682016040523d82523d6000602084013e611cea565b606091505b509150915081611d62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115611de857808060200190516020811015611d8157600080fd5b8101908080519060200190929190505050611de7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612022602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015611e305750808214155b92505050919050565b611f39848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611ba3565b5050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416e6472652c207765206a7573742077616e7420746f20626520796f7572206e657720776169667521536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6e416e6472652c2077652061726520706561636566756c20776169667573206661726d696e6720746865206c616e642c20676f206861727665737420656c7365776865726520706c6561736565652121212e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820e9a1e543a5974f5b109b1b8e815f4e14f71c9ce4fa377443d531efbf510c6cd464736f6c63430005110032