0x608060405234801561001057600080fd5b50612430806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063034dc6771461003b5780632b85ba381461006a575b600080fd5b61004e6100493660046101e9565b61007d565b6040516001600160a01b03909116815260200160405180910390f35b61004e6100783660046101e9565b61014d565b60008060ff60f81b308460405180602001610097906101dc565b601f1982820381018352601f9091011660408181523360208301520160408051601f19818403018152908290526100d1929160200161023d565b6040516020818303038152906040528051906020012060405160200161012e94939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f1981840301815291905280516020909101209392505050565b600080823360405161015e906101dc565b6001600160a01b0390911681526020018190604051809103906000f590508015801561018e573d6000803e3d6000fd5b50604080516001600160a01b03831681526020810186905291925033917ff036d4c5e052ff6c7eeb9b4d087529798b7a447bdea04392be841320844cb108910160405180910390a292915050565b6121a08061025b83390190565b6000602082840312156101fb57600080fd5b5035919050565b6000815160005b818110156102235760208185018101518683015201610209565b81811115610232576000828601525b509290920192915050565b600061025261024c8386610202565b84610202565b94935050505056fe60806040523480156200001157600080fd5b50604051620021a0380380620021a08339810160408190526200003491620001b0565b6001600055620000443362000089565b6001600160a01b0381166200006c57604051633649397d60e21b815260040160405180910390fd5b6200008281620000db60201b62000fd11760201c565b50620001e2565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001546001600160a01b031633146200013b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620001a25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000132565b620001ad8162000089565b50565b600060208284031215620001c357600080fd5b81516001600160a01b0381168114620001db57600080fd5b9392505050565b611fae80620001f26000396000f3fe6080604052600436106101185760003560e01c806381342457116100a0578063a6afeb4211610064578063a6afeb4214610343578063d9caed1214610363578063de86b45b14610383578063e3ed4173146103a3578063f2fde38b146103c357600080fd5b8063813424571461029b578063887268de146102bb57806388c344fa146102db5780638da5cb5b146102fb578063904a205a1461032357600080fd5b80634782f779116100e75780634782f779146101c457806347e7ef24146101e45780635358fbda14610204578063715018a61461021757806379502c551461022c57600080fd5b806306948316146101245780631626ba7e146101465780632d2dcc4814610184578063355007f9146101a457600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b5061014461013f3660046118c2565b6103e3565b005b34801561015257600080fd5b50610166610161366004611908565b61051e565b6040516001600160e01b031990911681526020015b60405180910390f35b34801561019057600080fd5b5061014461019f366004611984565b6105fd565b3480156101b057600080fd5b506101446101bf3660046119a1565b61067e565b3480156101d057600080fd5b506101446101df3660046119e2565b6107c0565b3480156101f057600080fd5b506101446101ff3660046119e2565b61088d565b610144610212366004611a0e565b610928565b34801561022357600080fd5b506101446109a5565b34801561023857600080fd5b50600254600354600454610266926001600160a01b039081169281169190811690600160a01b900460ff1684565b60405161017b94939291906001600160a01b039485168152928416602084015292166040820152901515606082015260800190565b3480156102a757600080fd5b506101446102b6366004611bed565b6109db565b3480156102c757600080fd5b506101446102d6366004611ce1565b610b06565b3480156102e757600080fd5b506101446102f63660046119e2565b610b7f565b34801561030757600080fd5b506001546040516001600160a01b03909116815260200161017b565b34801561032f57600080fd5b5061014461033e366004611984565b610c74565b34801561034f57600080fd5b5061014461035e366004611cfe565b610cee565b34801561036f57600080fd5b5061014461037e3660046119a1565b610d7e565b34801561038f57600080fd5b5061014461039e366004611d4d565b610e51565b3480156103af57600080fd5b506101446103be366004611984565b610f57565b3480156103cf57600080fd5b506101446103de366004611984565b610fd1565b60026000540361040e5760405162461bcd60e51b815260040161040590611d82565b60405180910390fd5b60026000556003546001600160a01b0316331461043e576040516314d6478d60e11b815260040160405180910390fd5b6001600160a01b0384166104655760405163226ccff560e11b815260040160405180910390fd5b604051637921219560e11b81526001600160a01b0384169063f242432a90610497903090889087908790600401611db9565b600060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b505060408051858152602081018590526001600160a01b0380881694508816925033917fc4d86acceb93756cc872680b8326307ac5727a6afe973f1bbb473d2fde51e678910160405180910390a4505060016000555050565b60008060006105638686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061106c92505050565b9092509050600081600481111561057c5761057c611df1565b1461059457506001600160e01b031991506105f69050565b6001546001600160a01b03838116911614806105d15750600454600160a01b900460ff1680156105d157506004546001600160a01b038381169116145b156105e85750630b135d3f60e11b91506105f69050565b506001600160e01b03199150505b9392505050565b6001546001600160a01b031633146106275760405162461bcd60e51b815260040161040590611e07565b600480546001600160a01b0319166001600160a01b03831690811790915560405190815233907f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a4350906020015b60405180910390a250565b6002600054036106a05760405162461bcd60e51b815260040161040590611d82565b60026000556003546001600160a01b031633146106d0576040516314d6478d60e11b815260040160405180910390fd5b6001600160a01b0383166106f75760405163226ccff560e11b815260040160405180910390fd5b604051632142170760e11b81523060048201526001600160a01b038481166024830152604482018390528316906342842e0e90606401600060405180830381600087803b15801561074757600080fd5b505af115801561075b573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b0316336001600160a01b03167f54789674de495cad7d8be412a7be3020d5655b17b0e9a6d5760beaca3486714d846040516107ae91815260200190565b60405180910390a45050600160005550565b6002600054036107e25760405162461bcd60e51b815260040161040590611d82565b60026000556003546001600160a01b03163314610812576040516314d6478d60e11b815260040160405180910390fd5b6001600160a01b0382166108395760405163226ccff560e11b815260040160405180910390fd5b61084382826110da565b6040518181526001600160a01b0383169033907f68f3f01094d76436d2b40073d16523c89b1033e2d5af5c9210fbc8cf8c8b222c906020015b60405180910390a350506001600055565b6002600054036108af5760405162461bcd60e51b815260040161040590611d82565b60026000556003546001600160a01b031633146108df576040516314d6478d60e11b815260040160405180910390fd5b6108eb823330846111f8565b6040518181526001600160a01b0383169033907ff1444b5cad7ce70cb018d1b8edc8618fe303f3c7f034d8d572a6e27facbf2bef9060200161087c565b6003546001600160a01b03163314610953576040516314d6478d60e11b815260040160405180910390fd5b80341461097357604051636956f2ab60e11b815260040160405180910390fd5b60405181815233907f6c703791f399558807424f489ccd811c72b4ff0b74af547264fad7c646776df090602001610673565b6001546001600160a01b031633146109cf5760405162461bcd60e51b815260040161040590611e07565b6109d96000611269565b565b6002600054036109fd5760405162461bcd60e51b815260040161040590611d82565b60026000556004546001600160a01b03163314610a2d57604051630190a5dd60e21b815260040160405180910390fd5b6002546001600160a01b0316610a565760405163350f527b60e11b815260040160405180910390fd5b81518351141580610a6957508051835114155b15610a87576040516306889ba960e41b815260040160405180910390fd5b60005b8351811015610afb57610ae9848281518110610aa857610aa8611e3c565b6020026020010151848381518110610ac257610ac2611e3c565b6020026020010151848481518110610adc57610adc611e3c565b60200260200101516112bb565b80610af381611e68565b915050610a8a565b505060016000555050565b6001546001600160a01b03163314610b305760405162461bcd60e51b815260040161040590611e07565b60048054821515600160a01b0260ff60a01b1990911617905560405133907f5162fedc53e4434f721903247a4c636028aeaea5d7f233a08d10e4819ae168de9061067390841515815260200190565b600260005403610ba15760405162461bcd60e51b815260040161040590611d82565b60026000556003546001600160a01b03163314610bd1576040516314d6478d60e11b815260040160405180910390fd5b604051632142170760e11b8152336004820152306024820152604481018290526001600160a01b038316906342842e0e90606401600060405180830381600087803b158015610c1f57600080fd5b505af1158015610c33573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f7b0968491e6388dede5df5611efde9e7b0795034130e23853ddc87b8dffbe4529060200161087c565b6001546001600160a01b03163314610c9e5760405162461bcd60e51b815260040161040590611e07565b600380546001600160a01b0319166001600160a01b03831690811790915560405190815233907fc204b28865760f18aa0ef147ee25573d2dba9f208385c8aa65fb79150978fb6d90602001610673565b600260005403610d105760405162461bcd60e51b815260040161040590611d82565b60026000556004546001600160a01b03163314610d4057604051630190a5dd60e21b815260040160405180910390fd5b6002546001600160a01b0316610d695760405163350f527b60e11b815260040160405180910390fd5b610d748383836112bb565b5050600160005550565b600260005403610da05760405162461bcd60e51b815260040161040590611d82565b60026000556003546001600160a01b03163314610dd0576040516314d6478d60e11b815260040160405180910390fd5b6001600160a01b038316610df75760405163226ccff560e11b815260040160405180910390fd5b610e028284836114ee565b816001600160a01b0316836001600160a01b0316336001600160a01b03167f83833173372af3b4075d05abbc2b4aea97ebb6ba867413337693d672a92bc43e846040516107ae91815260200190565b600260005403610e735760405162461bcd60e51b815260040161040590611d82565b60026000556003546001600160a01b03163314610ea3576040516314d6478d60e11b815260040160405180910390fd5b604051637921219560e11b81526001600160a01b0384169063f242432a90610ed5903390309087908790600401611db9565b600060405180830381600087803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505060408051858152602081018590526001600160a01b03871693503392507f400235142db830a227212d23698fc49d9ac2a809e058be21792a7fd2f82dd8d2910160405180910390a35050600160005550565b6001546001600160a01b03163314610f815760405162461bcd60e51b815260040161040590611e07565b600280546001600160a01b0319166001600160a01b03831690811790915560405190815233907f14d590dc20062c9c8cf8005e532197986310804b0b6108e3b7b68321b8ac49d190602001610673565b6001546001600160a01b03163314610ffb5760405162461bcd60e51b815260040161040590611e07565b6001600160a01b0381166110605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610405565b61106981611269565b50565b60008082516041036110a25760208301516040840151606085015160001a6110968782858561151e565b945094505050506110d3565b82516040036110cb57602083015160408401516110c086838361160b565b9350935050506110d3565b506000905060025b9250929050565b8047101561112a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610405565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611177576040519150601f19603f3d011682016040523d82523d6000602084013e61117c565b606091505b50509050806111f35760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610405565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526112639085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611644565b50505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002546040516361f7cd6960e01b81526001600160a01b03858116600483015260009216906361f7cd6990602401602060405180830381865afa158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a9190611e81565b90506001600160a01b038116611353576040516347352fe960e11b815260040160405180910390fd5b6001600160a01b0381163b61137b5760405163c0968fab60e01b815260040160405180910390fd5b600080826001600160a01b0316846040516113969190611eca565b600060405180830381855afa9150503d80600081146113d1576040519150601f19603f3d011682016040523d82523d6000602084013e6113d6565b606091505b5091509150816113e9576113e981611716565b805160000361140b57604051632fd4746d60e21b815260040160405180910390fd5b8080602001905181019061141f9190611ee6565b6001600160e01b0319166359faaa0360e01b1461144f57604051632fd4746d60e21b815260040160405180910390fd5b6001600160a01b0386163b6114775760405163a710429d60e01b815260040160405180910390fd5b856001600160a01b031685856040516114909190611eca565b60006040518083038185875af1925050503d80600081146114cd576040519150601f19603f3d011682016040523d82523d6000602084013e6114d2565b606091505b509092509050816114e6576114e681611716565b505050505050565b6040516001600160a01b0383166024820152604481018290526111f390849063a9059cbb60e01b9060640161122c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156115555750600090506003611602565b8460ff16601b1415801561156d57508460ff16601c14155b1561157e5750600090506004611602565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156115d2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166115fb57600060019250925050611602565b9150600090505b94509492505050565b6000806001600160ff1b0383168161162860ff86901c601b611f10565b90506116368782888561151e565b935093505050935093915050565b6000611699826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661172c9092919063ffffffff16565b8051909150156111f357808060200190518101906116b79190611f28565b6111f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610405565b805160000361172457600080fd5b805181602001fd5b606061173b8484600085611743565b949350505050565b6060824710156117a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610405565b6001600160a01b0385163b6117fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610405565b600080866001600160a01b031685876040516118179190611eca565b60006040518083038185875af1925050503d8060008114611854576040519150601f19603f3d011682016040523d82523d6000602084013e611859565b606091505b5091509150611869828286611874565b979650505050505050565b606083156118835750816105f6565b8251156118935782518084602001fd5b8160405162461bcd60e51b81526004016104059190611f45565b6001600160a01b038116811461106957600080fd5b600080600080608085870312156118d857600080fd5b84356118e3816118ad565b935060208501356118f3816118ad565b93969395505050506040820135916060013590565b60008060006040848603121561191d57600080fd5b83359250602084013567ffffffffffffffff8082111561193c57600080fd5b818601915086601f83011261195057600080fd5b81358181111561195f57600080fd5b87602082850101111561197157600080fd5b6020830194508093505050509250925092565b60006020828403121561199657600080fd5b81356105f6816118ad565b6000806000606084860312156119b657600080fd5b83356119c1816118ad565b925060208401356119d1816118ad565b929592945050506040919091013590565b600080604083850312156119f557600080fd5b8235611a00816118ad565b946020939093013593505050565b600060208284031215611a2057600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a6657611a66611a27565b604052919050565b600067ffffffffffffffff821115611a8857611a88611a27565b5060051b60200190565b600082601f830112611aa357600080fd5b81356020611ab8611ab383611a6e565b611a3d565b82815260059290921b84018101918181019086841115611ad757600080fd5b8286015b84811015611af25780358352918301918301611adb565b509695505050505050565b600082601f830112611b0e57600080fd5b813567ffffffffffffffff811115611b2857611b28611a27565b611b3b601f8201601f1916602001611a3d565b818152846020838601011115611b5057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112611b7e57600080fd5b81356020611b8e611ab383611a6e565b82815260059290921b84018101918181019086841115611bad57600080fd5b8286015b84811015611af257803567ffffffffffffffff811115611bd15760008081fd5b611bdf8986838b0101611afd565b845250918301918301611bb1565b600080600060608486031215611c0257600080fd5b833567ffffffffffffffff80821115611c1a57600080fd5b818601915086601f830112611c2e57600080fd5b81356020611c3e611ab383611a6e565b82815260059290921b8401810191818101908a841115611c5d57600080fd5b948201945b83861015611c84578535611c75816118ad565b82529482019490820190611c62565b97505087013592505080821115611c9a57600080fd5b611ca687838801611a92565b93506040860135915080821115611cbc57600080fd5b50611cc986828701611b6d565b9150509250925092565b801515811461106957600080fd5b600060208284031215611cf357600080fd5b81356105f681611cd3565b600080600060608486031215611d1357600080fd5b8335611d1e816118ad565b925060208401359150604084013567ffffffffffffffff811115611d4157600080fd5b611cc986828701611afd565b600080600060608486031215611d6257600080fd5b8335611d6d816118ad565b95602085013595506040909401359392505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b634e487b7160e01b600052602160045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611e7a57611e7a611e52565b5060010190565b600060208284031215611e9357600080fd5b81516105f6816118ad565b60005b83811015611eb9578181015183820152602001611ea1565b838111156112635750506000910152565b60008251611edc818460208701611e9e565b9190910192915050565b600060208284031215611ef857600080fd5b81516001600160e01b0319811681146105f657600080fd5b60008219821115611f2357611f23611e52565b500190565b600060208284031215611f3a57600080fd5b81516105f681611cd3565b6020815260008251806020840152611f64816040850160208701611e9e565b601f01601f1916919091016040019291505056fea26469706673582212200a472bbb0b00d88f1f1a80e2780dfee0c6b0fb7762e560522855958fc7d6828064736f6c634300080f0033a26469706673582212209d3bf4235b93b705726f60e2a5818e810424d6068b38f1775ef1f9a828da8bf564736f6c634300080f0033