60806040523480156200001157600080fd5b506040518060400160405280600b81526020016a021b630b9b9b4b334b2b2160ad1b81525060405180604001604052806003815260200162434c5360e81b8152508160039081620000639190620003ff565b506004620000728282620003ff565b5050506200008f620000896200011260201b60201c565b62000116565b73a601e403b1d37b24f69d135755b1b90e1b05613d600081905260066020527fb31fbda0abcecbeefec7efa1b71eebe3aa62185dcc8db351e55c3e58b86bf48c805460ff191660011790556200010c90620000e8600990565b620000f590600a620005e0565b620001069064174876e800620005f8565b62000168565b62000642565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001c45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b620001d2600083836200025f565b8060026000828254620001e6919062000612565b90915550506001600160a01b038216600090815260208190526040812080548392906200021590849062000612565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620002778383836200035660201b6200112a1760201c565b6001600160a01b038316158015906200029857506001600160a01b03821615155b8015620002bd57506001600160a01b03831660009081526008602052604090205460ff165b1562000356576001600160a01b0383166000908152600760205260409020546200032a5760405162461bcd60e51b815260206004820152601c60248201527f4e6f207472616e73666572207269676874732072656d61696e696e67000000006044820152606401620001bb565b6001600160a01b0383166000908152600760205260408120805491620003508362000628565b91905055505b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200038657607f821691505b602082108103620003a757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035657600081815260208120601f850160051c81016020861015620003d65750805b601f850160051c820191505b81811015620003f757828155600101620003e2565b505050505050565b81516001600160401b038111156200041b576200041b6200035b565b62000433816200042c845462000371565b84620003ad565b602080601f8311600181146200046b5760008415620004525750858301515b600019600386901b1c1916600185901b178555620003f7565b600085815260208120601f198616915b828110156200049c578886015182559484019460019091019084016200047b565b5085821015620004bb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000522578160001904821115620005065762000506620004cb565b808516156200051457918102915b93841c9390800290620004e6565b509250929050565b6000826200053b57506001620005da565b816200054a57506000620005da565b81600181146200056357600281146200056e576200058e565b6001915050620005da565b60ff841115620005825762000582620004cb565b50506001821b620005da565b5060208310610133831016604e8410600b8410161715620005b3575081810a620005da565b620005bf8383620004e1565b8060001904821115620005d657620005d6620004cb565b0290505b92915050565b6000620005f160ff8416836200052a565b9392505050565b8082028115828204841417620005da57620005da620004cb565b80820180821115620005da57620005da620004cb565b6000816200063a576200063a620004cb565b506000190190565b611bf380620006526000396000f3fe6080604052600436106101f25760003560e01c8063715018a61161010d578063a77a243d116100a0578063c53f77821161006f578063c53f77821461062b578063dd62ed3e1461064b578063f2fde38b14610691578063fa3c4e12146106b1578063fb8f0fa9146106d157600080fd5b8063a77a243d14610564578063a9059cbb146105a6578063b7e04c11146105c6578063c2c0bfea146105fc57600080fd5b806395d89b41116100dc57806395d89b41146104df578063973fbc7f146104f4578063987b58c814610514578063a457c2d71461054457600080fd5b8063715018a61461045457806375d5e02c146104695780638a8c523c146104a25780638da5cb5b146104b757600080fd5b80633520a3b4116101855780634ada218b116101545780634ada218b146103b45780634de4cd99146103ce5780635b758d21146103fe57806370a082311461041e57600080fd5b80633520a3b414610326578063395093511461035f578063433db6831461037f578063484d993f1461039457600080fd5b806318160ddd116101c157806318160ddd146102a9578063234ea877146102c857806323b872dd146102ea578063313ce5671461030a57600080fd5b806306fdde03146101fe57806308a4bbda14610229578063095ea7b3146102495780630a9a30501461027957600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b506102136106f1565b604051610220919061162a565b60405180910390f35b34801561023557600080fd5b50610213610244366004611660565b610783565b34801561025557600080fd5b5061026961026436600461167b565b61081d565b6040519015158152602001610220565b34801561028557600080fd5b50610269610294366004611660565b600e6020526000908152604090205460ff1681565b3480156102b557600080fd5b506002545b604051908152602001610220565b3480156102d457600080fd5b506102e86102e3366004611761565b610834565b005b3480156102f657600080fd5b50610269610305366004611802565b6108ef565b34801561031657600080fd5b5060405160098152602001610220565b34801561033257600080fd5b50610269610341366004611660565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561036b57600080fd5b5061026961037a36600461167b565b6109a5565b34801561038b57600080fd5b50600a546102ba565b3480156103a057600080fd5b506102e86103af36600461183e565b6109e1565b3480156103c057600080fd5b506009546102699060ff1681565b3480156103da57600080fd5b506103ee6103e9366004611871565b610ab9565b604051610220949392919061188a565b34801561040a57600080fd5b50610213610419366004611660565b610c75565b34801561042a57600080fd5b506102ba610439366004611660565b6001600160a01b031660009081526020819052604090205490565b34801561046057600080fd5b506102e8610c8e565b34801561047557600080fd5b50610269610484366004611660565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104ae57600080fd5b506102e8610cc4565b3480156104c357600080fd5b506005546040516001600160a01b039091168152602001610220565b3480156104eb57600080fd5b50610213610d50565b34801561050057600080fd5b506102e861050f3660046118cc565b610d5f565b34801561052057600080fd5b5061026961052f366004611660565b600b6020526000908152604090205460ff1681565b34801561055057600080fd5b5061026961055f36600461167b565b610dc8565b34801561057057600080fd5b5061059361057f366004611660565b600d60205260009081526040812054900b81565b60405160009190910b8152602001610220565b3480156105b257600080fd5b506102696105c136600461167b565b610e61565b3480156105d257600080fd5b506102ba6105e1366004611660565b6001600160a01b031660009081526007602052604090205490565b34801561060857600080fd5b50610593610617366004611660565b601060205260009081526040812054900b81565b34801561063757600080fd5b506103ee610646366004611871565b610e6e565b34801561065757600080fd5b506102ba610666366004611938565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561069d57600080fd5b506102e86106ac366004611660565b610fca565b3480156106bd57600080fd5b506102e86106cc3660046118cc565b611065565b3480156106dd57600080fd5b506102e86106ec36600461167b565b6110ce565b60606003805461070090611962565b80601f016020809104026020016040519081016040528092919081815260200182805461072c90611962565b80156107795780601f1061074e57610100808354040283529160200191610779565b820191906000526020600020905b81548152906001019060200180831161075c57829003601f168201915b5050505050905090565b600f602052600090815260409020805461079c90611962565b80601f01602080910402602001604051908101604052809291908181526020018280546107c890611962565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505081565b600061082a33848461112f565b5060015b92915050565b60408051608081018252858152841515602082015290810183905260ff82166060820152600a8054600181018255600091909152815160049091027fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80190819061089e90826119ea565b50602082015160018201805460ff1916911515919091179055604082015160028201906108cb90826119ea565b50606091909101516003909101805460ff191660ff90921691909117905550505050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019811461098f57828110156109825760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61098f853385840361112f565b61099a858585611253565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161082a9185906109dc908690611ac0565b61112f565b6005546001600160a01b03163314610a0b5760405162461bcd60e51b815260040161097990611ad3565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503610a8e5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610979565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6060600060606000600a805490508510610b0b5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606401610979565b6000600a8681548110610b2057610b20611b08565b60009182526020909120600490910201600181015460038201548254929350839260ff92831692600285019216908490610b5990611962565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8590611962565b8015610bd25780601f10610ba757610100808354040283529160200191610bd2565b820191906000526020600020905b815481529060010190602001808311610bb557829003601f168201915b50505050509350818054610be590611962565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1190611962565b8015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b505050505091509450945094509450509193509193565b600c602052600090815260409020805461079c90611962565b6005546001600160a01b03163314610cb85760405162461bcd60e51b815260040161097990611ad3565b610cc26000611356565b565b6005546001600160a01b03163314610cee5760405162461bcd60e51b815260040161097990611ad3565b60095460ff1615610d415760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e00000000000000006044820152606401610979565b6009805460ff19166001179055565b60606004805461070090611962565b6001600160a01b0384166000908152600b60209081526040808320805460ff1916871515179055600c9091529020610d9783826119ea565b506001600160a01b03939093166000908152600d60205260409020805460ff191660ff909416939093179092555050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610e4a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610979565b610e57338585840361112f565b5060019392505050565b600061082a338484611253565b600a8181548110610e7e57600080fd5b9060005260206000209060040201600091509050806000018054610ea190611962565b80601f0160208091040260200160405190810160405280929190818152602001828054610ecd90611962565b8015610f1a5780601f10610eef57610100808354040283529160200191610f1a565b820191906000526020600020905b815481529060010190602001808311610efd57829003601f168201915b5050506001840154600285018054949560ff909216949193509150610f3e90611962565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6a90611962565b8015610fb75780601f10610f8c57610100808354040283529160200191610fb7565b820191906000526020600020905b815481529060010190602001808311610f9a57829003601f168201915b5050506003909301549192505060ff1684565b6005546001600160a01b03163314610ff45760405162461bcd60e51b815260040161097990611ad3565b6001600160a01b0381166110595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610979565b61106281611356565b50565b6001600160a01b0384166000908152600e60209081526040808320805460ff1916871515179055600f909152902061109d83826119ea565b506001600160a01b03939093166000908152601060205260409020805460ff191660ff909416939093179092555050565b6005546001600160a01b031633146110f85760405162461bcd60e51b815260040161097990611ad3565b6001600160a01b039091166000908152600760209081526040808320939093556008905220805460ff19166001179055565b505050565b6001600160a01b0383166111915760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610979565b6001600160a01b0382166111f25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610979565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112795760405162461bcd60e51b815260040161097990611b1e565b6001600160a01b03821661129f5760405162461bcd60e51b815260040161097990611b63565b60095460ff16806112c857506001600160a01b03831660009081526006602052604090205460ff165b806112eb57506001600160a01b03821660009081526006602052604090205460ff165b6113375760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610979565b8060000361134b5761112a838360006113a8565b61112a8383836113a8565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166113ce5760405162461bcd60e51b815260040161097990611b1e565b6001600160a01b0382166113f45760405162461bcd60e51b815260040161097990611b63565b6113ff838383611508565b6001600160a01b038316600090815260208190526040902054818110156114775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610979565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906114ae908490611ac0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114fa91815260200190565b60405180910390a350505050565b6001600160a01b0383161580159061152857506001600160a01b03821615155b801561154c57506001600160a01b03831660009081526008602052604090205460ff165b1561112a576001600160a01b0383166000908152600760205260409020546115b65760405162461bcd60e51b815260206004820152601c60248201527f4e6f207472616e73666572207269676874732072656d61696e696e67000000006044820152606401610979565b6001600160a01b03831660009081526007602052604081208054916115da83611ba6565b9190505550505050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061163d60208301846115e4565b9392505050565b80356001600160a01b038116811461165b57600080fd5b919050565b60006020828403121561167257600080fd5b61163d82611644565b6000806040838503121561168e57600080fd5b61169783611644565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156116d6576116d66116a5565b604051601f8501601f19908116603f011681019082821181831017156116fe576116fe6116a5565b8160405280935085815286868601111561171757600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261174257600080fd5b61163d838335602085016116bb565b8035801515811461165b57600080fd5b6000806000806080858703121561177757600080fd5b843567ffffffffffffffff8082111561178f57600080fd5b61179b88838901611731565b95506117a960208801611751565b945060408701359150808211156117bf57600080fd5b508501601f810187136117d157600080fd5b6117e0878235602084016116bb565b925050606085013560ff811681146117f757600080fd5b939692955090935050565b60008060006060848603121561181757600080fd5b61182084611644565b925061182e60208501611644565b9150604084013590509250925092565b6000806040838503121561185157600080fd5b61185a83611644565b915061186860208401611751565b90509250929050565b60006020828403121561188357600080fd5b5035919050565b60808152600061189d60808301876115e4565b851515602084015282810360408401526118b781866115e4565b91505060ff8316606083015295945050505050565b600080600080608085870312156118e257600080fd5b6118eb85611644565b93506118f960208601611751565b9250604085013567ffffffffffffffff81111561191557600080fd5b61192187828801611731565b92505060608501358060000b81146117f757600080fd5b6000806040838503121561194b57600080fd5b61195483611644565b915061186860208401611644565b600181811c9082168061197657607f821691505b60208210810361199657634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561112a57600081815260208120601f850160051c810160208610156119c35750805b601f850160051c820191505b818110156119e2578281556001016119cf565b505050505050565b815167ffffffffffffffff811115611a0457611a046116a5565b611a1881611a128454611962565b8461199c565b602080601f831160018114611a4d5760008415611a355750858301515b600019600386901b1c1916600185901b1785556119e2565b600085815260208120601f198616915b82811015611a7c57888601518255948401946001909101908401611a5d565b5085821015611a9a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561082e5761082e611aaa565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600081611bb557611bb5611aaa565b50600019019056fea264697066735822122079b0cb66f2a2e2edab5968e8fb60a2d1f77673a8d396a82e42ab78bca8365eae64736f6c63430008110033