60806040523480156200001157600080fd5b5060405162002304380380620023048339810160408190526200003491620001ba565b8383600262000044838262000302565b50600362000053828262000302565b505060008055506200006533620000a3565b60016009556002600b55610457600a55612710600c55600e62000089838262000302565b50600f62000098828262000302565b5050505050620003ce565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200011d57600080fd5b81516001600160401b03808211156200013a576200013a620000f5565b604051601f8301601f19908116603f01168101908282118183101715620001655762000165620000f5565b816040528381526020925086838588010111156200018257600080fd5b600091505b83821015620001a6578582018301518183018401529082019062000187565b600093810190920192909252949350505050565b60008060008060808587031215620001d157600080fd5b84516001600160401b0380821115620001e957600080fd5b620001f7888389016200010b565b955060208701519150808211156200020e57600080fd5b6200021c888389016200010b565b945060408701519150808211156200023357600080fd5b62000241888389016200010b565b935060608701519150808211156200025857600080fd5b5062000267878288016200010b565b91505092959194509250565b600181811c908216806200028857607f821691505b602082108103620002a957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002fd57600081815260208120601f850160051c81016020861015620002d85750805b601f850160051c820191505b81811015620002f957828155600101620002e4565b5050505b505050565b81516001600160401b038111156200031e576200031e620000f5565b62000336816200032f845462000273565b84620002af565b602080601f8311600181146200036e5760008415620003555750858301515b600019600386901b1c1916600185901b178555620002f9565b600085815260208120601f198616915b828110156200039f578886015182559484019460019091019084016200037e565b5085821015620003be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611f2680620003de6000396000f3fe6080604052600436106101a15760003560e01c8063715018a6116100e1578063a0bcfc7f1161008a578063c87b56dd11610064578063c87b56dd14610481578063e985e9c5146104a1578063f103b433146104ea578063f2fde38b1461050a57600080fd5b8063a0bcfc7f1461042e578063a22cb4651461044e578063b88d4fde1461046e57600080fd5b806395d89b41116100bb57806395d89b41146103d9578063968a9e5d146103ee578063a0712d681461040e57600080fd5b8063715018a61461036357806382b7a622146103785780638da5cb5b146103bb57600080fd5b80632ce9413c1161014e578063466a18de11610128578063466a18de146102e35780636352211e146103035780636e864c921461032357806370a082311461034357600080fd5b80632ce9413c146102805780633575597d146102a357806342842e0e146102d057600080fd5b8063095ea7b31161017f578063095ea7b31461023557806318160ddd1461024a57806323b872dd1461026d57600080fd5b806301ffc9a7146101a657806306fdde03146101db578063081812fc146101fd575b600080fd5b3480156101b257600080fd5b506101c66101c1366004611909565b61052a565b60405190151581526020015b60405180910390f35b3480156101e757600080fd5b506101f061053b565b6040516101d29190611976565b34801561020957600080fd5b5061021d610218366004611989565b6105cd565b6040516001600160a01b0390911681526020016101d2565b6102486102433660046119be565b61062a565b005b34801561025657600080fd5b50600154600054035b6040519081526020016101d2565b61024861027b3660046119e8565b61070d565b34801561028c57600080fd5b5061029561090f565b6040516101d2929190611a24565b3480156102af57600080fd5b5061025f6102be366004611a52565b60106020526000908152604090205481565b6102486102de3660046119e8565b610a2f565b3480156102ef57600080fd5b506102486102fe366004611a6d565b610a4f565b34801561030f57600080fd5b5061021d61031e366004611989565b610a64565b34801561032f57600080fd5b5061024861033e3660046119be565b610a6f565b34801561034f57600080fd5b5061025f61035e366004611a52565b610af8565b34801561036f57600080fd5b50610248610b60565b34801561038457600080fd5b50600a54600b54600c54600d5461039b9392919084565b6040805194855260208501939093529183015260608201526080016101d2565b3480156103c757600080fd5b506008546001600160a01b031661021d565b3480156103e557600080fd5b506101f0610b74565b3480156103fa57600080fd5b506102486104093660046119be565b610b83565b34801561041a57600080fd5b50610248610429366004611989565b610c0c565b34801561043a57600080fd5b50610248610449366004611a6d565b610ffb565b34801561045a57600080fd5b50610248610469366004611aed565b611010565b61024861047c366004611b3a565b61107c565b34801561048d57600080fd5b506101f061049c366004611989565b6110c0565b3480156104ad57600080fd5b506101c66104bc366004611c16565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156104f657600080fd5b50610248610505366004611989565b611214565b34801561051657600080fd5b50610248610525366004611a52565b611299565b600061053582611329565b92915050565b60606002805461054a90611c49565b80601f016020809104026020016040519081016040528092919081815260200182805461057690611c49565b80156105c35780601f10610598576101008083540402835291602001916105c3565b820191906000526020600020905b8154815290600101906020018083116105a657829003601f168201915b5050505050905090565b60006105d8826113c2565b61060e576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061063582610a64565b9050336001600160a01b038216146106a4576001600160a01b038116600090815260076020908152604080832033845290915290205460ff166106a4576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610718826113e9565b9050836001600160a01b0316816001600160a01b031614610765576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b038816909114176107e8576001600160a01b038616600090815260076020908152604080832033845290915290205460ff166107e8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610828576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801561083357600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b841690036108c5576001840160008181526004602052604081205490036108c35760005481146108c35760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600e8054819061091e90611c49565b80601f016020809104026020016040519081016040528092919081815260200182805461094a90611c49565b80156109975780601f1061096c57610100808354040283529160200191610997565b820191906000526020600020905b81548152906001019060200180831161097a57829003601f168201915b5050505050908060010180546109ac90611c49565b80601f01602080910402602001604051908101604052809291908181526020018280546109d890611c49565b8015610a255780601f106109fa57610100808354040283529160200191610a25565b820191906000526020600020905b815481529060010190602001808311610a0857829003601f168201915b5050505050905082565b610a4a8383836040518060200160405280600081525061107c565b505050565b610a57611469565b600f610a4a828483611cc9565b6000610535826113e9565b610a77611469565b604080517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201523360248201526044810183905290516001600160a01b038416916342842e0e91606480830192600092919082900301818387803b158015610ae457600080fd5b505af1158015610907573d6000803e3d6000fd5b60006001600160a01b038216610b3a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b610b68611469565b610b7260006114c3565b565b60606003805461054a90611c49565b610b8b611469565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4a9190611d89565b60408051608081018252600a548152600b546020820152600c5491810191909152600d5460608201526000829003610cb15760405162461bcd60e51b815260206004820152602660248201527f6d696e743a20616d6f756e74206d757374206265206c6172676572207468616e60448201527f207a65726f2e000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b80516060820151610cc3908490611dbc565b1115610d5d5760405162461bcd60e51b815260206004820152604260248201527f6d696e743a20746d702e206d61782e20737570706c7920776f756c642062652060448201527f726561636865642077697468207468652072657175657374656420616d6f756e60648201527f742e000000000000000000000000000000000000000000000000000000000000608482015260a401610ca8565b8060400151828260600151610d729190611dbc565b1115610e0c5760405162461bcd60e51b815260206004820152604360248201527f6d696e743a20746f74616c206d61782e20737570706c7920776f756c6420626560448201527f20726561636865642077697468207468652072657175657374656420616d6f7560648201527f6e742e0000000000000000000000000000000000000000000000000000000000608482015260a401610ca8565b7313fd344e39c30187d627e68075d6e9201163df336000816370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e929190611dcf565b90508015610f1b57336000908152601060205260409020548190610eb7908690611dbc565b1115610f165760405162461bcd60e51b815260206004820152602860248201527f6d696e743a20657863656564696e67206d61782e20616c6c6f77656420706572604482015267103bb0b63632ba1760c11b6064820152608401610ca8565b610f9c565b6020838101513360009081526010909252604090912054610f3d908690611dbc565b1115610f9c5760405162461bcd60e51b815260206004820152602860248201527f6d696e743a20657863656564696e67206d61782e20616c6c6f77656420706572604482015267103bb0b63632ba1760c11b6064820152608401610ca8565b83600a6003016000828254610fb19190611dbc565b90915550503360009081526010602052604081208054869290610fd5908490611dbc565b90915550610ff59050338560405180602001604052806000815250611522565b50505050565b611003611469565b600e610a4a828483611cc9565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61108784848461070d565b6001600160a01b0383163b15610ff5576110a38484848461158f565b610ff5576040516368d2bf6b60e11b815260040160405180910390fd5b60606110cb826113c2565b61113d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610ca8565b600061114761167b565b905060008151116111e257600f805461115f90611c49565b80601f016020809104026020016040519081016040528092919081815260200182805461118b90611c49565b80156111d85780601f106111ad576101008083540402835291602001916111d8565b820191906000526020600020905b8154815290600101906020018083116111bb57829003601f168201915b505050505061120d565b806111ec8461168d565b6040516020016111fd929190611de8565b6040516020818303038152906040525b9392505050565b61121c611469565b600c548111156112945760405162461bcd60e51b815260206004820152603960248201527f7570646174654d6178537570706c793a206e657720737570706c79206578636560448201527f6564696f6e67206d61782e20746f74616c20737570706c792e000000000000006064820152608401610ca8565b600a55565b6112a1611469565b6001600160a01b03811661131d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ca8565b611326816114c3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061138c57507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806105355750506001600160e01b0319167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b6000805482108015610535575050600090815260046020526040902054600160e01b161590565b6000816000548110156114375760008181526004602052604081205490600160e01b82169003611435575b8060000361120d575060001901600081815260046020526040902054611414565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008546001600160a01b03163314610b725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ca8565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61152c83836117c2565b6001600160a01b0383163b15610a4a576000548281035b611556600086838060010194508661158f565b611573576040516368d2bf6b60e11b815260040160405180910390fd5b81811061154357816000541461158857600080fd5b5050505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906115c4903390899088908890600401611e17565b6020604051808303816000875af19250505080156115ff575060408051601f3d908101601f191682019092526115fc91810190611e53565b60015b61165d573d80801561162d576040519150601f19603f3d011682016040523d82523d6000602084013e611632565b606091505b508051600003611655576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600e600001805461054a90611c49565b6060816000036116d057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156116fa57806116e481611e70565b91506116f39050600a83611e9f565b91506116d4565b60008167ffffffffffffffff81111561171557611715611b24565b6040519080825280601f01601f19166020018201604052801561173f576020820181803683370190505b5090505b841561167357611754600183611eb3565b9150611761600a86611ec6565b61176c906030611dbc565b60f81b81838151811061178157611781611eda565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506117bb600a86611e9f565b9450611743565b6000805490829003611800576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146118af57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611877565b50816000036118ea576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b6001600160e01b03198116811461132657600080fd5b60006020828403121561191b57600080fd5b813561120d816118f3565b60005b83811015611941578181015183820152602001611929565b50506000910152565b60008151808452611962816020860160208601611926565b601f01601f19169290920160200192915050565b60208152600061120d602083018461194a565b60006020828403121561199b57600080fd5b5035919050565b80356001600160a01b03811681146119b957600080fd5b919050565b600080604083850312156119d157600080fd5b6119da836119a2565b946020939093013593505050565b6000806000606084860312156119fd57600080fd5b611a06846119a2565b9250611a14602085016119a2565b9150604084013590509250925092565b604081526000611a37604083018561194a565b8281036020840152611a49818561194a565b95945050505050565b600060208284031215611a6457600080fd5b61120d826119a2565b60008060208385031215611a8057600080fd5b823567ffffffffffffffff80821115611a9857600080fd5b818501915085601f830112611aac57600080fd5b813581811115611abb57600080fd5b866020828501011115611acd57600080fd5b60209290920196919550909350505050565b801515811461132657600080fd5b60008060408385031215611b0057600080fd5b611b09836119a2565b91506020830135611b1981611adf565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611b5057600080fd5b611b59856119a2565b9350611b67602086016119a2565b925060408501359150606085013567ffffffffffffffff80821115611b8b57600080fd5b818701915087601f830112611b9f57600080fd5b813581811115611bb157611bb1611b24565b604051601f8201601f19908116603f01168101908382118183101715611bd957611bd9611b24565b816040528281528a6020848701011115611bf257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611c2957600080fd5b611c32836119a2565b9150611c40602084016119a2565b90509250929050565b600181811c90821680611c5d57607f821691505b602082108103611c7d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a4a57600081815260208120601f850160051c81016020861015611caa5750805b601f850160051c820191505b8181101561090757828155600101611cb6565b67ffffffffffffffff831115611ce157611ce1611b24565b611cf583611cef8354611c49565b83611c83565b6000601f841160018114611d295760008515611d115750838201355b600019600387901b1c1916600186901b178355611588565b600083815260209020601f19861690835b82811015611d5a5786850135825560209485019460019092019101611d3a565b5086821015611d775760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600060208284031215611d9b57600080fd5b815161120d81611adf565b634e487b7160e01b600052601160045260246000fd5b8082018082111561053557610535611da6565b600060208284031215611de157600080fd5b5051919050565b60008351611dfa818460208801611926565b835190830190611e0e818360208801611926565b01949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611e49608083018461194a565b9695505050505050565b600060208284031215611e6557600080fd5b815161120d816118f3565b600060018201611e8257611e82611da6565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611eae57611eae611e89565b500490565b8181038181111561053557610535611da6565b600082611ed557611ed5611e89565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220b723fa9ead2e37963f5015defa55b734b3facfb0ee1ad208813b8e9a2e90c45864736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001c546865204e4654204d757365756d206f662041726368656f6c6f67790000000000000000000000000000000000000000000000000000000000000000000000074e46544152434800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f7261726974792e67617264656e2f3f636f6d706f6e656e74733d636f6d5f7261726974796e667473696e7465726661636526766965773d72616e646f6d6e667426666f726d61743d6a736f6e266469675f69643d000000000000000000000000000000000000000000000000000000000000000000000000