0x60a060405234801561001057600080fd5b506040516112ab3803806112ab83398101604081905261002f91610099565b61003833610049565b6001600160a01b03166080526100c9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100ab57600080fd5b81516001600160a01b03811681146100c257600080fd5b9392505050565b6080516111c06100eb6000396000818161017b01526105f001526111c06000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80637b2d9b2c11610081578063e70eb3921161005b578063e70eb3921461019d578063f2fde38b146101b0578063fced4a51146101c357600080fd5b80637b2d9b2c1461013a5780638da5cb5b14610165578063bc6b74ab1461017657600080fd5b80631d3b7b15116100b25780631d3b7b15146100fd57806342dcdc8d14610112578063715018a61461013257600080fd5b80630e24338c146100ce5780631b0875a6146100f4575b600080fd5b6100e16100dc366004610d67565b6101d6565b6040519081526020015b60405180910390f35b6100e160035481565b61011061010b366004610dcc565b6101f7565b005b610125610120366004610d67565b610428565b6040516100eb9190610e66565b6101106105b0565b61014d610148366004610d67565b6105c4565b6040516001600160a01b0390911681526020016100eb565b6000546001600160a01b031661014d565b61014d7f000000000000000000000000000000000000000000000000000000000000000081565b6101106101ab366004610ec6565b6105ee565b6101106101be366004610ef2565b610770565b6101106101d1366004610f23565b610800565b600281815481106101e657600080fd5b600091825260209091200154905081565b6101ff610869565b84811461020b57600080fd5b84831461021757600080fd5b60ff85111561022557600080fd5b60005b60015460ff8216101561032357600060018260ff168154811061024d5761024d610fe1565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561029957600080fd5b505afa1580156102ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d19190610ff7565b9050801561031057610310338260018560ff16815481106102f4576102f4610fe1565b6000918252602090912001546001600160a01b031691906108c3565b508061031b81611026565b915050610228565b5060005b60ff81168611156103c457600085858360ff1681811061034957610349610fe1565b9050602002013511156103b2576103b2333087878560ff1681811061037057610370610fe1565b905060200201358a8a8660ff1681811061038c5761038c610fe1565b90506020020160208101906103a19190610ef2565b6001600160a01b0316929190610958565b806103bc81611026565b915050610327565b506103d160018787610c6c565b506103de60028383610cdc565b5060038590556040517f54da18071110e33251999c0ba6b1ffe59f9d18774ef622ef5ecfb8235523111c9061041890600190600290611046565b60405180910390a1505050505050565b60015460609060009067ffffffffffffffff81111561044957610449610f0d565b604051908082528060200260200182016040528015610472578160200160208202803683370190505b50905060005b60015460ff821610156105a9576000670de0b6b3a764000060028360ff16815481106104a6576104a6610fe1565b9060005260206000200154866104bc91906110d5565b6104c691906110f4565b9050600060018360ff16815481106104e0576104e0610fe1565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561052c57600080fd5b505afa158015610540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105649190610ff7565b905080821115610572578091505b81848460ff168151811061058857610588610fe1565b602002602001018181525050505080806105a190611026565b915050610478565b5092915050565b6105b8610869565b6105c26000610990565b565b600181815481106105d457600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146106775760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520737472617460448201526265677960e81b60648201526084015b60405180910390fd5b600061068283610428565b905060005b60015460ff8216101561076a576000828260ff16815181106106ab576106ab610fe1565b60200260200101511115610758576106f083838360ff16815181106106d2576106d2610fe1565b602002602001015160018460ff16815481106102f4576102f4610fe1565b336001600160a01b03167fda71d66f7d6458815341057f19159e8dea719ad40dc75f124a3d7aefe7dbb9d460018360ff168154811061073157610731610fe1565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a25b8061076281611026565b915050610687565b50505050565b610778610869565b6001600160a01b0381166107f45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161066e565b6107fd81610990565b50565b610808610869565b60025481511461081757600080fd5b805161082a906002906020840190610d17565b507f54da18071110e33251999c0ba6b1ffe59f9d18774ef622ef5ecfb8235523111c6001600260405161085e929190611046565b60405180910390a150565b6000546001600160a01b031633146105c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161066e565b6040516001600160a01b03831660248201526044810182905261095390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526109ed565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261076a9085906323b872dd60e01b906084016108ef565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610a42826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610ad29092919063ffffffff16565b8051909150156109535780806020019051810190610a609190611116565b6109535760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161066e565b6060610ae18484600085610aeb565b90505b9392505050565b606082471015610b635760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161066e565b6001600160a01b0385163b610bba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161066e565b600080866001600160a01b03168587604051610bd69190611164565b60006040518083038185875af1925050503d8060008114610c13576040519150601f19603f3d011682016040523d82523d6000602084013e610c18565b606091505b5091509150610c28828286610c33565b979650505050505050565b60608315610c42575081610ae4565b825115610c525782518084602001fd5b8160405162461bcd60e51b815260040161066e9190611180565b828054828255906000526020600020908101928215610ccc579160200282015b82811115610ccc57815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03843516178255602090920191600190910190610c8c565b50610cd8929150610d52565b5090565b828054828255906000526020600020908101928215610ccc579160200282015b82811115610ccc578235825591602001919060010190610cfc565b828054828255906000526020600020908101928215610ccc579160200282015b82811115610ccc578251825591602001919060010190610d37565b5b80821115610cd85760008155600101610d53565b600060208284031215610d7957600080fd5b5035919050565b60008083601f840112610d9257600080fd5b50813567ffffffffffffffff811115610daa57600080fd5b6020830191508360208260051b8501011115610dc557600080fd5b9250929050565b60008060008060008060608789031215610de557600080fd5b863567ffffffffffffffff80821115610dfd57600080fd5b610e098a838b01610d80565b90985096506020890135915080821115610e2257600080fd5b610e2e8a838b01610d80565b90965094506040890135915080821115610e4757600080fd5b50610e5489828a01610d80565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b81811015610e9e57835183529284019291840191600101610e82565b50909695505050505050565b80356001600160a01b0381168114610ec157600080fd5b919050565b60008060408385031215610ed957600080fd5b82359150610ee960208401610eaa565b90509250929050565b600060208284031215610f0457600080fd5b610ae482610eaa565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215610f3657600080fd5b823567ffffffffffffffff80821115610f4e57600080fd5b818501915085601f830112610f6257600080fd5b813581811115610f7457610f74610f0d565b8060051b604051601f19603f83011681018181108582111715610f9957610f99610f0d565b604052918252848201925083810185019188831115610fb757600080fd5b938501935b82851015610fd557843584529385019392850192610fbc565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561100957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81141561103d5761103d611010565b60010192915050565b60006040820160408352808554808352606085019150600092508683526020808420845b8381101561108f5781546001600160a01b03168552938201936001918201910161106a565b505085830381870152865480845287855281852093820192505b808510156110c8578354835260019485019490930192918101916110a9565b5090979650505050505050565b60008160001904831182151516156110ef576110ef611010565b500290565b60008261111157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561112857600080fd5b81518015158114610ae457600080fd5b60005b8381101561115357818101518382015260200161113b565b8381111561076a5750506000910152565b60008251611176818460208701611138565b9190910192915050565b602081526000825180602084015261119f816040850160208701611138565b601f01601f1916919091016040019291505056fea164736f6c6343000809000a0000000000000000000000008373dd2efcaea8174136e9d5f729219e47ee94ca