0x608060405234801561001057600080fd5b50600436106101415760003560e01c80638da5cb5b116100b8578063b33ddcef1161007c578063b33ddcef146102ac578063befe0aaa146102bf578063c92fb947146102d2578063f1d588c5146102eb578063f2fde38b146102fe578063f971fac61461031157600080fd5b80638da5cb5b14610254578063a8a2675d14610265578063a91ee0dc14610278578063aba407f91461028b578063abf410e51461029957600080fd5b80633e805be31161010a5780633e805be3146101d057806342f7022e146101e35780634f13d9fd146101ff578063715018a6146102125780637b1152f81461021a5780638cbca8c81461024157600080fd5b8062435da5146101465780630a530d0e146101765780630b93381b1461018b578063130822bf146101aa57806329c1f716146101bd575b600080fd5b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101896101843660046119be565b610324565b005b61019c667375636365737360c81b81565b60405190815260200161016d565b6101896101b8366004611a1d565b610425565b6101596101cb366004611a98565b610446565b6101896101de366004611ab1565b610531565b61019c712734b3b43a21b937bbab30b634b230ba37b960711b81565b61019c61020d366004611aee565b6105a5565b6101896105df565b61022863130822bf60e01b81565b6040516001600160e01b0319909116815260200161016d565b61018961024f3660046119be565b6105f3565b6000546001600160a01b0316610159565b610189610273366004611b56565b6106df565b6101896102863660046119be565b6106ff565b61022863a8a2675d60e01b81565b600554610159906001600160a01b031681565b600654610159906001600160a01b031681565b600454610159906001600160a01b031681565b61019c6e2734b3b43a21b937bba9b2ba3a32b960891b81565b6101896102f93660046119be565b610729565b61018961030c3660046119be565b610821565b61019c61031f366004611bca565b61089a565b6e2734b3b43a21b937bba9b2ba3a32b960891b6103496000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316148061036d575061036d81336108be565b6103925760405162461bcd60e51b815260040161038990611bf6565b60405180910390fd5b816001600160a01b038116158015906103b557506000816001600160a01b03163b115b6104015760405162461bcd60e51b815260206004820152601c60248201527f4e6967687443726f773a2061646472657373206973206e6f74204341000000006044820152606401610389565b5050600480546001600160a01b0319166001600160a01b0392909216919091179055565b61043c8888888888888863130822bf60e01b610934565b5050505050505050565b60055460405163ec25982f60e01b81526004810183905260009182916001600160a01b039091169063ec25982f90602401602060405180830381865afa158015610494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b89190611c38565b90506001600160a01b03811661052b5760405162461bcd60e51b815260206004820152603260248201527f416363657373436f6e74726163745265676973747279203a205f6164647220696044820152717320746865207a65726f206164647265737360701b6064820152608401610389565b92915050565b6e2734b3b43a21b937bba9b2ba3a32b960891b6105566000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316148061057a575061057a81336108be565b6105965760405162461bcd60e51b815260040161038990611bf6565b6105a08383610e87565b505050565b6000848484846040516020016105be9493929190611c55565b6040516020818303038152906040528051906020012090505b949350505050565b6105e7610f1e565b6105f16000610f78565b565b6e2734b3b43a21b937bba9b2ba3a32b960891b6106186000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316148061063c575061063c81336108be565b6106585760405162461bcd60e51b815260040161038990611bf6565b6001600160a01b0382166106bc5760405162461bcd60e51b815260206004820152602560248201527f4e6967687443726f77465445786368616e6765723a20696e76616c6964206164604482015264647265737360d81b6064820152608401610389565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6106f68787878787878763a8a2675d60e01b610934565b50505050505050565b610707610f1e565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6e2734b3b43a21b937bba9b2ba3a32b960891b61074e6000546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610772575061077281336108be565b61078e5760405162461bcd60e51b815260040161038990611bf6565b816001600160a01b038116158015906107b157506000816001600160a01b03163b115b6107fd5760405162461bcd60e51b815260206004820152601c60248201527f4e6967687443726f773a2061646472657373206973206e6f74204341000000006044820152606401610389565b5050600180546001600160a01b0319166001600160a01b0392909216919091179055565b610829610f1e565b6001600160a01b03811661088e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610389565b61089781610f78565b50565b6000818152600260205260408120546108b790849060e01b610fc8565b9392505050565b600154604051632474521560e21b8152600481018490526001600160a01b03838116602483015260009216906391d1485490604401602060405180830381865afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b79190611c91565b60006040518060e00160405280336001600160a01b031681526020018881526020018a815260200189815260200187815260200186815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506060830151929350916109b99150610446565b9050606060006109cc30600036336105a5565b90506000806109db8688611046565b915091508115610e59576001600160e01b0319871663130822bf60e01b1415610b4d57610a078661115b565b60208701516040516340c10f1960e01b815230600482015260248101919091529094506001600160a01b038616906340c10f1990604401600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b50508751602089015160405163a9059cbb60e01b81526001600160a01b0392831660048201526024810191909152908816925063a9059cbb91506044016020604051808303816000875af1158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aec9190611c91565b507f86d4ef4ebb2ecf1a006a0d0867047691925aa066e75ae4152c7280afb3d05a38866040015187606001518789600001518a602001518b608001518c60a00151604051610b409796959493929190611cb3565b60405180910390a1610e59565b6006546040808801519051633596b5a560e21b81526000926001600160a01b03169163d65ad69491610b97918a916004016001600160a01b03929092168252602082015260400190565b602060405180830381865afa158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd89190611c91565b90508015610d18576020870151610bfd906001600160a01b03881690339030906111ce565b600654602088015160405163095ea7b360e01b81526001600160a01b03928316600482015260248101919091529087169063095ea7b3906044016020604051808303816000875af1158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a9190611c91565b5060065460408881015160808a015160208b01519251639f812d6560e01b81526001600160a01b038b8116600483015260248201939093526044810191909152606481019290925290911690639f812d65906084016020604051808303816000875af1158015610cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d129190611c91565b50610dfc565b865160208801516040516323b872dd60e01b81526001600160a01b0392831660048201523060248201526044810191909152908716906323b872dd906064016020604051808303816000875af1158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9a9190611c91565b506020870151604051630852cd8d60e31b815260048101919091526001600160a01b038716906342966c6890602401600060405180830381600087803b158015610de357600080fd5b505af1158015610df7573d6000803e3d6000fd5b505050505b7f2c3343431ef164b8fbb79750dcbe6d2f51f51c6ce5e6ce3834693c9abf1a13e587604001518860600151888a600001518b602001518c608001518d60a00151604051610e4f9796959493929190611cb3565b60405180910390a1505b610e77838760400151886060015160008b87878d60a001518c61122e565b5050505050505050505050505050565b81610eac8160009081526002602052604090205460e01b6001600160e01b0319161590565b610ef85760405162461bcd60e51b815260206004820152601d60248201527f5665726966794b65793a20616c726561647920726567697374657265640000006044820152606401610389565b6000908152600260205260409020805463ffffffff191660e09290921c91909117905550565b6000546001600160a01b031633146105f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610389565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03821660009081526003602090815260409182902054825130606090811b6bffffffffffffffffffffffff199081168386015246603484015296901b90951660548601526001600160e01b03199093166068850152606c8085019390935281518085039093018352608c9093019052805191012090565b6000806000611059856000015185610fc8565b85516001600160a01b031660009081526003602052604090208054600101905590506110888560a001516112b3565b9093509150826110985750611154565b60408086015160608088015188516020808b015160808c015160a08d015197516bffffffffffffffffffffffff1930881b811694820194909452603481019790975260548701949094529190931b9092166074840152608883019190915260a882015260c881019190915260e8810182905261114290712734b3b43a21b937bbab30b634b230ba37b960711b90610108016040516020818303038152906040528760c001516112ff565b9093509150826111525750611154565b505b9250929050565b604080820151606083810151845160208601519451929461119e949360240193845260208401929092526001600160a01b03166040830152606082015260800190565b60408051601f198184030181529190526020810180516001600160e01b031663b95e141560e01b17905292915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261122890859061135f565b50505050565b6004546001600160a01b031663aaad6deb8a8a8a8a8a8a8a61124f46611431565b8b8b6040518b63ffffffff1660e01b81526004016112769a99989796959493929190611d5d565b600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b50505050505050505050505050565b6000806112bf46611431565b831015806112cb575082155b6112e75760006c6f76657220646561646c696e6560981b6112f5565b6001667375636365737360c81b5b9094909350915050565b600080600061131e8486805190602001206114b290919063ffffffff16565b905061132a86826108be565b6113445760006a696e76616c69642073696760a81b611352565b6001667375636365737360c81b5b9097909650945050505050565b60006113b4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114d69092919063ffffffff16565b8051909150156105a057808060200190518101906113d29190611c91565b6105a05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610389565b60008162066eee148061144557508161a4b1145b61144f574361052b565b60646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561148e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b9190611de3565b60008060006114c185856114e5565b915091506114ce81611552565b509392505050565b60606105d7848460008561170d565b60008082516041141561151c5760208301516040840151606085015160001a611510878285856117e8565b94509450505050611154565b825160401415611546576020830151604084015161153b8683836118d5565b935093505050611154565b50600090506002611154565b600081600481111561156657611566611cef565b141561156f5750565b600181600481111561158357611583611cef565b14156115d15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610389565b60028160048111156115e5576115e5611cef565b14156116335760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610389565b600381600481111561164757611647611cef565b14156116a05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610389565b60048160048111156116b4576116b4611cef565b14156108975760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610389565b60608247101561176e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610389565b600080866001600160a01b0316858760405161178a9190611dfc565b60006040518083038185875af1925050503d80600081146117c7576040519150601f19603f3d011682016040523d82523d6000602084013e6117cc565b606091505b50915091506117dd8783838761190e565b979650505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561181f57506000905060036118cc565b8460ff16601b1415801561183757508460ff16601c14155b1561184857506000905060046118cc565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561189c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118c5576000600192509250506118cc565b9150600090505b94509492505050565b6000806001600160ff1b038316816118f260ff86901c601b611e18565b9050611900878288856117e8565b935093505050935093915050565b6060831561197a578251611973576001600160a01b0385163b6119735760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610389565b50816105d7565b6105d7838381511561198f5781518083602001fd5b8060405162461bcd60e51b81526004016103899190611e3e565b6001600160a01b038116811461089757600080fd5b6000602082840312156119d057600080fd5b81356108b7816119a9565b60008083601f8401126119ed57600080fd5b50813567ffffffffffffffff811115611a0557600080fd5b60208301915083602082850101111561115457600080fd5b60008060008060008060008060e0898b031215611a3957600080fd5b883597506020890135965060408901359550606089013594506080890135935060a089013567ffffffffffffffff811115611a7357600080fd5b611a7f8b828c016119db565b999c989b50969995989497949560c00135949350505050565b600060208284031215611aaa57600080fd5b5035919050565b60008060408385031215611ac457600080fd5b8235915060208301356001600160e01b031981168114611ae357600080fd5b809150509250929050565b60008060008060608587031215611b0457600080fd5b8435611b0f816119a9565b9350602085013567ffffffffffffffff811115611b2b57600080fd5b611b37878288016119db565b9094509250506040850135611b4b816119a9565b939692955090935050565b600080600080600080600060c0888a031215611b7157600080fd5b873596506020880135955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611bab57600080fd5b611bb78a828b016119db565b989b979a50959850939692959293505050565b60008060408385031215611bdd57600080fd5b8235611be8816119a9565b946020939093013593505050565b60208082526022908201527f4e6967687443726f773a2073656e64657220686173206e6f742074686520726f6040820152616c6560f01b606082015260800190565b600060208284031215611c4a57600080fd5b81516108b7816119a9565b60006bffffffffffffffffffffffff19808760601b1683528486601485013760609390931b909216920160148101929092525060280192915050565b600060208284031215611ca357600080fd5b815180151581146108b757600080fd5b96875260208701959095526001600160a01b039384166040870152919092166060850152608084019190915260a083015260c082015260e00190565b634e487b7160e01b600052602160045260246000fd5b60005b83811015611d20578181015183820152602001611d08565b838111156112285750506000910152565b60008151808452611d49816020860160208601611d05565b601f01601f19169290920160200192915050565b60006101408c83528b60208401528a604084015260038a10611d8f57634e487b7160e01b600052602160045260246000fd5b89606084015263ffffffff60e01b8916608084015287151560a08401528660c08401528560e08401528461010084015280610120840152611dd281840185611d31565b9d9c50505050505050505050505050565b600060208284031215611df557600080fd5b5051919050565b60008251611e0e818460208701611d05565b9190910192915050565b60008219821115611e3957634e487b7160e01b600052601160045260246000fd5b500190565b6020815260006108b76020830184611d3156fea2646970667358221220a296281c7a104d5e951126c2edde5c09fa4f43b1ad36071d090d83392e9b877064736f6c634300080a0033