0x608060405234801561001057600080fd5b5061001a3361003e565b6001808055336000908152600960205260409020805460ff1916909117905561008e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6127988061009d6000396000f3fe6080604052600436106101ee5760003560e01c8063704802751161010d5780639a242657116100a0578063bafac6bd1161006f578063bafac6bd14610645578063cb67f94814610665578063d5506e0714610685578063db6b5246146106a5578063f2fde38b146106ad57600080fd5b80639a242657146105c55780639b9a0874146105e5578063ab36c17b14610605578063b505c6ef1461062557600080fd5b806384276d81116100dc57806384276d811461053d5780638705fcd41461055d5780638c5939aa1461057d5780638da5cb5b1461059d57600080fd5b8063704802751461048a578063715018a6146104aa57806376319190146104bf5780638018b968146104df57600080fd5b806342db157511610185578063648a0c9111610154578063648a0c911461040a57806365e6115c1461042a57806366168bd71461044a5780636d69fcaf1461046a57600080fd5b806342db15751461038a5780634ff21e58146103aa578063538c9511146103ca5780635dec745b146103ea57600080fd5b80631b6eb178116101c15780631b6eb178146102d257806320dcb8c2146102f257806321a41b88146103125780632745579d1461036a57600080fd5b806306b091f9146101f357806306fdde03146102155780630c0c91a2146102605780631785f53c146102b2575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612319565b6106cd565b005b34801561022157600080fd5b50604080518082018252601381527211105c1c14dbd8da585b141bdbdb135bd9195b606a1b602082015290516102579190612367565b60405180910390f35b34801561026c57600080fd5b506102a261027b36600461239a565b6001600160a01b03166000908152600660205260409020544265ffffffffffff9091161190565b6040519015158152602001610257565b3480156102be57600080fd5b506102136102cd36600461239a565b610800565b3480156102de57600080fd5b506102136102ed3660046123b5565b6108e8565b3480156102fe57600080fd5b5061021361030d366004612319565b610a8a565b34801561031e57600080fd5b5061035561032d36600461239a565b6001600160a01b03166000908152600260209081526040808320546003909252909120549091565b60408051928352602083019190915201610257565b34801561037657600080fd5b506102136103853660046123f7565b610b56565b34801561039657600080fd5b506102136103a5366004612319565b610cb9565b3480156103b657600080fd5b506102136103c5366004612440565b610e20565b3480156103d657600080fd5b506102136103e5366004612469565b610f38565b3480156103f657600080fd5b50610213610405366004612319565b611063565b34801561041657600080fd5b5061021361042536600461239a565b611123565b34801561043657600080fd5b506102136104453660046124cb565b6111a9565b34801561045657600080fd5b50610213610465366004612319565b6112a5565b34801561047657600080fd5b5061021361048536600461239a565b611389565b34801561049657600080fd5b506102136104a536600461239a565b61140f565b3480156104b657600080fd5b506102136114f9565b3480156104cb57600080fd5b506102136104da36600461239a565b61152f565b3480156104eb57600080fd5b506103556104fa3660046124fe565b6001600160a01b03918216600081815260046020908152604080832094909516808352938152848220549282526005815284822093825292909252919020549091565b34801561054957600080fd5b50610213610558366004612528565b6115ad565b34801561056957600080fd5b5061021361057836600461239a565b6116a9565b34801561058957600080fd5b506102136105983660046123b5565b61172f565b3480156105a957600080fd5b506000546040516001600160a01b039091168152602001610257565b3480156105d157600080fd5b506102136105e0366004612541565b6118ab565b3480156105f157600080fd5b506102136106003660046123b5565b611967565b34801561061157600080fd5b5061021361062036600461257d565b611a2c565b34801561063157600080fd5b50610213610640366004612541565b611b17565b34801561065157600080fd5b50610213610660366004612541565b611c02565b34801561067157600080fd5b5061021361068036600461239a565b611d54565b34801561069157600080fd5b506102136106a0366004612541565b611dfa565b610213611ee5565b3480156106b957600080fd5b506102136106c836600461239a565b611f5c565b336106d781611ff7565b81600081116107015760405162461bcd60e51b81526004016106f8906125c8565b60405180910390fd5b6001600160a01b03841660009081526004602090815260408083203384529091529020548390808211156107485760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b03861660009081526008602052604090205460ff1661078157604051633dd1b30560e01b815260040160405180910390fd5b6001600160a01b0386166000818152600460209081526040808320338085529252909120805488900390556107b791908761203a565b60405185815233906001600160a01b038816907f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e5620906020015b60405180910390a3505050505050565b6000546001600160a01b0316331461082a5760405162461bcd60e51b81526004016106f8906125ff565b6001600160a01b03811660009081526009602052604090205460ff166108925760405162461bcd60e51b815260206004820152601860248201527f5468652041646472657373206973206e6f742061646d696e000000000000000060448201526064016106f8565b6001600160a01b0381166000818152600960209081526040808320805460ff19169055519182527f1eed86672c9dc0b985e74ea7d22ba679ae6a4a43d0fc1e68f21af2baeb2b8f8291015b60405180910390a250565b3360009081526009602052604090205460ff166109175760405162461bcd60e51b81526004016106f890612634565b81600081116109385760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b038086166000908152600460209081526040808320938816835292905220548390808211156109815760405163569d45cf60e11b815260040160405180910390fd5b8385116109d05760405162461bcd60e51b815260206004820152601e60248201527f4665652069732067726561746572207468616e2074686520616d6f756e74000060448201526064016106f8565b6001600160a01b038088166000908152600460209081526040808320938a1683529290522080548690039055610a068486612675565b6001600160a01b038089166000908152600560209081526040808320938b1683529290529081208054909190610a3d908490612688565b90915550506001600160a01b038088166000908152600460209081526040808320600b5490941683529290529081208054869290610a7c908490612688565b909155505050505050505050565b600a546001600160a01b03163314610ab45760405162461bcd60e51b81526004016106f89061269b565b8060008111610ad55760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b038316600090815260036020526040902054829080821115610b115760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b038516600090815260036020908152604080832080548890039055600290915281208054869290610b4a908490612688565b90915550505050505050565b600a546001600160a01b03163314610b805760405162461bcd60e51b81526004016106f89061269b565b8160008111610ba15760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b038416600090815260026020526040902054839080821115610bdd5760405163569d45cf60e11b815260040160405180910390fd5b838511610c2c5760405162461bcd60e51b815260206004820152601e60248201527f4665652069732067726561746572207468616e2074686520616d6f756e74000060448201526064016106f8565b6001600160a01b038616600090815260026020526040902080548690039055610c558486612675565b6001600160a01b03871660009081526003602052604081208054909190610c7d908490612688565b9091555050600b546001600160a01b031660009081526002602052604081208054869290610cac908490612688565b9091555050505050505050565b610cc161209e565b8060008111610ce25760405162461bcd60e51b81526004016106f8906125c8565b33600090815260026020526040902054829080821115610d155760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b03858116600090815260076020526040902054163314610d4f57604051634014f1a560e01b815260040160405180910390fd5b6001600160a01b0385166000908152600260205260408082208054879003905551339086908381818185875af1925050503d8060008114610dac576040519150601f19603f3d011682016040523d82523d6000602084013e610db1565b606091505b505090508015610df65760405185815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a2610e0f565b60405163af3f219560e01b815260040160405180910390fd5b50505050610e1c60018055565b5050565b6312cc0300610e3262015180836126c9565b65ffffffffffff161115610e5957604051635b30744d60e11b815260040160405180910390fd5b3360009081526006602052604090205465ffffffffffff1642811015610e92576040516319aad37160e01b815260040160405180910390fd5b6000610e9e83426126fc565b90508065ffffffffffff168265ffffffffffff161115610ed157604051636badcecf60e01b815260040160405180910390fd5b33600081815260066020908152604091829020805465ffffffffffff191665ffffffffffff868116919091179091558251908716815291517ff41f2802a415c1770a298aadedf7cbb4931f1802c1f44e6402c4fd1725ee07089281900390910190a2505050565b3360009081526009602052604090205460ff16610f675760405162461bcd60e51b81526004016106f890612634565b8160008111610f885760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b03808716600090815260046020908152604080832093891683529290522054839080821115610fd15760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b038089166000908152600460209081526040808320938b1683529290522080548690039055831561101c576110176001600160a01b038916878761203a565b611059565b6001600160a01b038089166000908152600460209081526040808320938a1683529290529081208054879290611053908490612688565b90915550505b5050505050505050565b600a546001600160a01b0316331461108d5760405162461bcd60e51b81526004016106f89061269b565b80600081116110ae5760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b0383166000908152600260205260409020548290808211156110ea5760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b038516600090815260026020908152604080832080548890039055600390915281208054869290610b4a908490612688565b6000546001600160a01b0316331461114d5760405162461bcd60e51b81526004016106f8906125ff565b600a546040516001600160a01b038084169216907f4f43f4466b33f7d9fe18c87ee64040d201f12bee060a8f003ecf21ad3b8794ba90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b336111b381611ff7565b6001600160a01b0383166111da576040516366385fa360e01b815260040160405180910390fd5b6312cc03006111ec62015180846126c9565b65ffffffffffff16111561121357604051635b30744d60e11b815260040160405180910390fd5b61121d82426126fc565b336000818152600660209081526040808320805465ffffffffffff191665ffffffffffff968716179055600782529182902080546001600160a01b0319166001600160a01b0389169081179091559151938616845290927fde32d3cd40d5887ed867770cd7a34bab91daca8f238484b86d3068dfc066103391015b60405180910390a3505050565b80600081116112c65760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b03831660009081526008602052604090205460ff166112ff57604051633dd1b30560e01b815260040160405180910390fd5b6113146001600160a01b0384163330856120c8565b6001600160a01b038316600090815260046020908152604080832033845290915281208054849290611347908490612688565b909155505060405182815233906001600160a01b038516907ff1444b5cad7ce70cb018d1b8edc8618fe303f3c7f034d8d572a6e27facbf2bef90602001611298565b3360009081526009602052604090205460ff166113b85760405162461bcd60e51b81526004016106f890612634565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600190811790915591519182527f34ac012792c35155e23840f3aa5eac3d291082197efeacd6927e1c4c4c213da791016108dd565b6000546001600160a01b031633146114395760405162461bcd60e51b81526004016106f8906125ff565b6001600160a01b03811660009081526009602052604090205460ff16156114a25760405162461bcd60e51b815260206004820152601860248201527f4164647265737320697320616c72656164792041646d696e000000000000000060448201526064016106f8565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600190811790915591519182527f79842df409f607e159442094a5666f13290ffc7c29bd2eabe52cb5a11bd42dc391016108dd565b6000546001600160a01b031633146115235760405162461bcd60e51b81526004016106f8906125ff565b61152d6000612107565b565b3360009081526009602052604090205460ff1661155e5760405162461bcd60e51b81526004016106f890612634565b6001600160a01b0381166000818152600860209081526040808320805460ff19169055519182527f5c40f9d37b61552ea2b523376fa41fa9d5b383c9532aa40ed2e31d741b1ac9e791016108dd565b336115b781611ff7565b6115bf61209e565b81600081116115e05760405162461bcd60e51b81526004016106f8906125c8565b336000908152600260205260409020548390808211156116135760405163569d45cf60e11b815260040160405180910390fd5b33600081815260026020526040808220805489900390555190919087908381818185875af1925050503d8060008114611668576040519150601f19603f3d011682016040523d82523d6000602084013e61166d565b606091505b505090508015610df65760405186815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d590602001610de9565b6000546001600160a01b031633146116d35760405162461bcd60e51b81526004016106f8906125ff565b600b546040516001600160a01b038084169216907fca68aa7805c8a17c09111b6be74d77af7df8318186a2c8d6f2743d137c6d282890600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031633146117595760405162461bcd60e51b81526004016106f89061269b565b816000811161177a5760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b0385166000908152600360205260409020548390808211156117b65760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b03808816600090815260036020908152604080832080548a8a0190039055600b5490931682526002905290812080548692906117fa908490612688565b90915550506040516000906001600160a01b0388169087908381818185875af1925050503d806000811461184a576040519150601f19603f3d011682016040523d82523d6000602084013e61184f565b606091505b505090508015610df657866001600160a01b0316886001600160a01b03167fcc818ef07781d55912a0076b90123369c20eebe7d4de5e05c9b2c771224908168860405161189e91815260200190565b60405180910390a3611059565b3360009081526009602052604090205460ff166118da5760405162461bcd60e51b81526004016106f890612634565b80600081116118fb5760405162461bcd60e51b81526004016106f8906125c8565b3360009081526002602052604090205482908082111561192e5760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b038087166000908152600260205260408082208054889003905591871681529081208054869290610cac908490612688565b600a546001600160a01b031633146119915760405162461bcd60e51b81526004016106f89061269b565b81600081116119b25760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b0385166000908152600260205260409020548390808211156119ee5760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b03808816600090815260026020526040808220805489890190039055600b54909216815290812080548692906117fa908490612688565b3360009081526009602052604090205460ff16611a5b5760405162461bcd60e51b81526004016106f890612634565b8060008111611a7c5760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b03808616600090815260056020908152604080832093881683529290522054829080821115611ac55760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b0380881660008181526005602090815260408083208b86168452825280832080548a900390559282526004815282822093891682529290925281208054869290610a7c908490612688565b3360009081526009602052604090205460ff16611b465760405162461bcd60e51b81526004016106f890612634565b8060008111611b675760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b03808516600090815260056020908152604080832093871683529290522054829080821115611bb05760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b038087166000818152600560209081526040808320948a1680845294825280832080548a90039055928252600481528282209382529290925281208054869290610cac908490612688565b8060008111611c235760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b0384166000908152600460209081526040808320338452909152902054829080821115611c6a5760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b03861660009081526008602052604090205460ff16611ca357604051633dd1b30560e01b815260040160405180910390fd5b6001600160a01b03858116600090815260076020526040902054163314611cdd57604051634014f1a560e01b815260040160405180910390fd5b6001600160a01b038087166000818152600460209081526040808320948a1683529390529190912080548690039055611d1790338661203a565b60405184815233906001600160a01b038816907f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e5620906020016107f0565b6001600160a01b03818116600090815260076020526040902054163314611d8e57604051634014f1a560e01b815260040160405180910390fd5b6001600160a01b03811660009081526006602052604090205465ffffffffffff1642811015611dd0576040516319aad37160e01b815260040160405180910390fd5b506001600160a01b03166000908152600660205260409020805465ffffffffffff19166001179055565b3360009081526009602052604090205460ff16611e295760405162461bcd60e51b81526004016106f890612634565b8060008111611e4a5760405162461bcd60e51b81526004016106f8906125c8565b6001600160a01b03808516600090815260046020908152604080832093871683529290522054829080821115611e935760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b038087166000818152600460209081526040808320948a1680845294825280832080548a90039055928252600581528282209382529290925281208054869290610cac908490612688565b3460008111611f065760405162461bcd60e51b81526004016106f8906125c8565b3360009081526002602052604081208054349290611f25908490612688565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c906020016108dd565b6000546001600160a01b03163314611f865760405162461bcd60e51b81526004016106f8906125ff565b6001600160a01b038116611feb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106f8565b611ff481612107565b50565b6001600160a01b0381166000908152600660205260409020544265ffffffffffff9091161115611ff45760405163de1af48d60e01b815260040160405180910390fd5b6040516001600160a01b0383811660248301526044820183905261209991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612157565b505050565b6002600154036120c157604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6040516001600160a01b0384811660248301528381166044830152606482018390526121019186918216906323b872dd90608401612067565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061216c6001600160a01b038416836121ba565b9050805160001415801561219157508080602001905181019061218f9190612722565b155b1561209957604051635274afe760e01b81526001600160a01b03841660048201526024016106f8565b60606121cb838360006121d46121ed565b90505b92915050565b604051630a12f52160e11b815260040160405180910390fd5b6060824710156122125760405163cd78605960e01b81523060048201526024016106f8565b600080866001600160a01b0316858760405161222e9190612746565b60006040518083038185875af1925050503d806000811461226b576040519150601f19603f3d011682016040523d82523d6000602084013e612270565b606091505b50915091506122818783838761228e565b925050505b949350505050565b606083156122dc5782516000036122d557846001600160a01b03163b6000036122d557604051639996b31560e01b81526001600160a01b03861660048201526024016106f8565b5081612286565b61228683838151156122f15781518083602001fd5b6121d48163ffffffff16565b80356001600160a01b038116811461231457600080fd5b919050565b6000806040838503121561232c57600080fd5b612335836122fd565b946020939093013593505050565b60005b8381101561235e578181015183820152602001612346565b50506000910152565b6020815260008251806020840152612386816040850160208701612343565b601f01601f19169190910160400192915050565b6000602082840312156123ac57600080fd5b6121cb826122fd565b600080600080608085870312156123cb57600080fd5b6123d4856122fd565b93506123e2602086016122fd565b93969395505050506040820135916060013590565b60008060006060848603121561240c57600080fd5b612415846122fd565b95602085013595506040909401359392505050565b803565ffffffffffff8116811461231457600080fd5b60006020828403121561245257600080fd5b6121cb8261242a565b8015158114611ff457600080fd5b600080600080600060a0868803121561248157600080fd5b61248a866122fd565b9450612498602087016122fd565b93506124a6604087016122fd565b92506060860135915060808601356124bd8161245b565b809150509295509295909350565b600080604083850312156124de57600080fd5b6124e7836122fd565b91506124f56020840161242a565b90509250929050565b6000806040838503121561251157600080fd5b61251a836122fd565b91506124f5602084016122fd565b60006020828403121561253a57600080fd5b5035919050565b60008060006060848603121561255657600080fd5b61255f846122fd565b925061256d602085016122fd565b9150604084013590509250925092565b6000806000806080858703121561259357600080fd5b61259c856122fd565b93506125aa602086016122fd565b92506125b8604086016122fd565b9396929550929360600135925050565b6020808252601f908201527f416d6f756e742073686f756c642062652067726561746572207468616e203000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526011908201527037b7363c9020b236b4b71030b1ba34b7b760791b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156121ce576121ce61265f565b808201808211156121ce576121ce61265f565b60208082526014908201527337b7363c9022bc31b430b733b29030b1ba34b7b760611b604082015260600190565b600065ffffffffffff808416806126f057634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b65ffffffffffff81811683821601908082111561271b5761271b61265f565b5092915050565b60006020828403121561273457600080fd5b815161273f8161245b565b9392505050565b60008251612758818460208701612343565b919091019291505056fea2646970667358221220deb6650e01e4a7bc292bf3d6cde30e9a33f367ba8e2d5b0ee2a5e68de7033a4264736f6c63430008130033