0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80638da5cb5b116100715780638da5cb5b1461010c578063ba6abace14610131578063bc61e73314610144578063cdab73b514610177578063dd3957021461019e578063f2fde38b146101a657600080fd5b80630b7e286c146100ae5780632e3d134a146100b85780632f5846e7146100de5780635ecb16cd146100f1578063715018a614610104575b600080fd5b6100b66101b9565b005b6100cb6100c6366004611a19565b6102ec565b6040519081526020015b60405180910390f35b6100b66100ec366004611a5a565b61074d565b6100b66100ff366004611aa0565b610a14565b6100b6610b64565b6001546001600160a01b03165b6040516001600160a01b0390911681526020016100d5565b600054610119906001600160a01b031681565b610167610152366004611b15565b60036020526000908152604090205460ff1681565b60405190151581526020016100d5565b6101197f000000000000000000000000624cf2f0ecb26265bc00d5a34a52d33806bccbcf81565b6100b6610b78565b6100b66101b4366004611b36565b610cdb565b60005460405163d6afe33f60e01b81523060048201523360248201819052916001600160a01b03169063d6afe33f90604401602060405180830381865afa158015610208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061022c9190611b53565b6102515760405162461bcd60e51b815260040161024890611b75565b60405180910390fd5b600160008190526003602052600080516020611f5f8339815191525460ff161561028d5760405162461bcd60e51b815260040161024890611bd9565b600160008190526003602052600080516020611f5f833981519152805460ff1916821790556040517fe96388dbf7070ab0d582ba6e50d51f7851577c6d61df03bda680ad5e57e1bf68916102e091611c23565b60405180910390a15050565b6000808490506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610332573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103569190611c4b565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610398573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bc9190611c4b565b9050816001600160a01b0316866001600160a01b031614806103ef5750806001600160a01b0316866001600160a01b0316145b61043b5760405162461bcd60e51b815260206004820152601f60248201527f506c6179537761705a61704f75743a3a696e76616c696420746f546f6b656e006044820152606401610248565b6040516370a0823160e01b81526001600160a01b038881166004830152600091908416906370a0823190602401602060405180830381865afa158015610485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a99190611c68565b6040516370a0823160e01b81526001600160a01b038a811660048301529192506000918416906370a0823190602401602060405180830381865afa1580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105199190611c68565b90506000896001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611c68565b905060008161058e858b611c97565b6105989190611cb6565b90506000826105a7858c611c97565b6105b19190611cb6565b905060006105bf8387611cd8565b905060006105cd8387611cd8565b90506000896001600160a01b03168e6001600160a01b0316141561069557604051630153543560e21b81526004810185905260248101839052604481018490527f000000000000000000000000d8d14f18d7103c72ffa0c16a2e2555b0f5f4baa66001600160a01b03169063054d50d490606401602060405180830381865afa15801561065e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106829190611c68565b905061068e8186611cef565b9b5061073b565b604051630153543560e21b81526004810186905260248101849052604481018390527f000000000000000000000000d8d14f18d7103c72ffa0c16a2e2555b0f5f4baa66001600160a01b03169063054d50d490606401602060405180830381865afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c9190611c68565b90506107388185611cef565b9b505b50505050505050505050509392505050565b600054604051631cf3c04f60e21b81523060048201523360248201819052916001600160a01b0316906373cf013c90604401602060405180830381865afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c09190611b53565b156108205760405162461bcd60e51b815260206004820152602a60248201527f426c61636b6c697374436865636b6572203a2041646472657373206973206f6e60448201526908189b1858dadb1a5cdd60b21b6064820152608401610248565b60405163d6afe33f60e01b81523060048201523360248201526001907f000000000000000000000000624cf2f0ecb26265bc00d5a34a52d33806bccbcf6001600160a01b03169063d6afe33f90604401602060405180830381865afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190611b53565b806108f45750600360008260028111156108cd576108cd611bc3565b60028111156108de576108de611bc3565b815260208101919091526040016000205460ff16155b6109105760405162461bcd60e51b815260040161024890611bd9565b610918610d54565b6000806109258787610dac565b91509150600080600061093a8a86868e6110a7565b925092509250878310156109905760405162461bcd60e51b815260206004820152601d60248201527f506c6179537761705a61704f75743a3a4869676820536c6970706167650000006044820152606401610248565b6109a46001600160a01b038c163385611221565b604080516001600160a01b038d8116825260208201869052848116828401526060820184905291518b928d169133917fd0f6a3478e56cd775276b3a55c37526e460e19ea69e2e9cde770a0c5b8184abb9181900360800190a45050505050610a0c6001600255565b505050505050565b610a1c611289565b610a24610d54565b8060005b81811015610b14576000848483818110610a4457610a44611d07565b9050602002016020810190610a599190611b36565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190611c68565b9050610b013382878786818110610adc57610adc611d07565b9050602002016020810190610af19190611b36565b6001600160a01b03169190611221565b5080610b0c81611d1d565b915050610a28565b508282604051610b25929190611d38565b604051908190038120907f37439500a58a63a1d39cfde16fd0e9806f4ea94a9750b916e229c4915993610390600090a250610b606001600255565b5050565b610b6c611289565b610b7660006112e3565b565b60005460405163d6afe33f60e01b81523060048201523360248201819052916001600160a01b03169063d6afe33f90604401602060405180830381865afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190611b53565b610c075760405162461bcd60e51b815260040161024890611b75565b600160008190526003602052600080516020611f5f8339815191525460ff16610c8a5760405162461bcd60e51b815260206004820152602f60248201527f506c6179537761705a6170426173653a3a20546869732066756e6374696f6e2060448201526e3bb0b9903737ba103830bab9b2b21760891b6064820152608401610248565b600160008190526003602052600080516020611f5f833981519152805460ff191690556040517f05ac6ba5be9ae6dd1e890249c54c157249072fe432d02a272ecfa899ad3262ad916102e091611c23565b610ce3611289565b6001600160a01b038116610d485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610248565b610d51816112e3565b50565b600280541415610da65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610248565b60028055565b600080836001600160a01b038116610e065760405162461bcd60e51b815260206004820152601c60248201527f506c6179537761705a61704f75743a3a706f6f6c206973207a65726f000000006044820152606401610248565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190611c4b565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed09190611c4b565b905060008611610f2e5760405162461bcd60e51b8152602060048201526024808201527f506c6179537761705a61704f75743a3a696e76616c696420746f6b656e20616d6044820152631bdd5b9d60e21b6064820152608401610248565b610f436001600160a01b038816333089611335565b610f6e877f000000000000000000000000d8d14f18d7103c72ffa0c16a2e2555b0f5f4baa688611373565b604051635d5155ef60e11b81526001600160a01b03838116600483015282811660248301526044820188905260016064830181905260848301523060a4830152600f60fc1b60c48301527f000000000000000000000000d8d14f18d7103c72ffa0c16a2e2555b0f5f4baa6169063baa2abde9060e40160408051808303816000875af1158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190611d7a565b9095509350841580159061103a5750600084115b61109d5760405162461bcd60e51b815260206004820152602e60248201527f506c6179537761705a61704f75743a3a72656d6f76656420696e73756666696360448201526d69656e74206c697175696469747960901b6064820152608401610248565b5050509250929050565b600080600080876001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f9190611c4b565b90506000886001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190611c4b565b9050856001600160a01b0316826001600160a01b031614156111a85761119b8886611cef565b94508093508692506111c6565b6111b382878a61139c565b6111bd9086611cef565b94508193508792505b856001600160a01b0316816001600160a01b031614156111f7576111ea8786611cef565b9450819350879250611215565b61120281878961139c565b61120c9086611cef565b94508093508692505b50509450945094915050565b6040516001600160a01b03831660248201526044810182905261128490849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611690565b505050565b6001546001600160a01b03163314610b765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610248565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038085166024830152831660448201526064810182905261136d9085906323b872dd60e01b9060840161124d565b50505050565b6113886001600160a01b038416836000611762565b6112846001600160a01b0384168383611762565b6000826001600160a01b0316846001600160a01b031614156113bf575080611689565b6113ea847f000000000000000000000000d8d14f18d7103c72ffa0c16a2e2555b0f5f4baa684611373565b60405163e6a4390560e01b81526001600160a01b03858116600483015284811660248301526000917f00000000000000000000000082d5ac1584e474b09d80b488867e7320d4f917669091169063e6a4390590604401602060405180830381865afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114819190611c4b565b90506001600160a01b0381166114e45760405162461bcd60e51b815260206004820152602260248201527f506c6179537761705a6170426173653a3a6e6f207377617020617661696c61626044820152616c6560f01b6064820152608401610248565b604080516002808252606082018352600092602083019080368337019050509050858160008151811061151957611519611d07565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061154d5761154d611d07565b6001600160a01b0392831660209182029290920101526040516338ed173960e01b81527f000000000000000000000000d8d14f18d7103c72ffa0c16a2e2555b0f5f4baa6909116906338ed1739906115b690879060019086903090600f60fc1b90600401611db4565b6000604051808303816000875af11580156115d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115fd9190810190611e25565b6001825161160b9190611cd8565b8151811061161b5761161b611d07565b60200260200101519250600083116116865760405162461bcd60e51b815260206004820152602860248201527f506c6179537761705a6170426173653a3a6572726f72207377617070696e67206044820152673a37b5b2b739901960c11b6064820152608401610248565b50505b9392505050565b60006116e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118779092919063ffffffff16565b80519091501561128457808060200190518101906117039190611b53565b6112845760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610248565b8015806117dc5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156117b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117da9190611c68565b155b6118475760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610248565b6040516001600160a01b03831660248201526044810182905261128490849063095ea7b360e01b9060640161124d565b6060611886848460008561188e565b949350505050565b6060824710156118ef5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610248565b600080866001600160a01b0316858760405161190b9190611f0f565b60006040518083038185875af1925050503d8060008114611948576040519150601f19603f3d011682016040523d82523d6000602084013e61194d565b606091505b509150915061195e87838387611969565b979650505050505050565b606083156119d55782516119ce576001600160a01b0385163b6119ce5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610248565b5081611886565b61188683838151156119ea5781518083602001fd5b8060405162461bcd60e51b81526004016102489190611f2b565b6001600160a01b0381168114610d5157600080fd5b600080600060608486031215611a2e57600080fd5b8335611a3981611a04565b92506020840135611a4981611a04565b929592945050506040919091013590565b60008060008060808587031215611a7057600080fd5b8435611a7b81611a04565b93506020850135611a8b81611a04565b93969395505050506040820135916060013590565b60008060208385031215611ab357600080fd5b823567ffffffffffffffff80821115611acb57600080fd5b818501915085601f830112611adf57600080fd5b813581811115611aee57600080fd5b8660208260051b8501011115611b0357600080fd5b60209290920196919550909350505050565b600060208284031215611b2757600080fd5b81356003811061168957600080fd5b600060208284031215611b4857600080fd5b813561168981611a04565b600060208284031215611b6557600080fd5b8151801515811461168957600080fd5b6020808252602e908201527f57686974656c697374436865636b6572203a2041646472657373206973206e6f60408201526d1d081bdb881dda1a5d195b1a5cdd60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6020808252602a908201527f506c6179537761705a6170426173653a3a20546869732066756e6374696f6e2060408201526934b9903830bab9b2b21760b11b606082015260800190565b6020810160038310611c4557634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215611c5d57600080fd5b815161168981611a04565b600060208284031215611c7a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611cb157611cb1611c81565b500290565b600082611cd357634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611cea57611cea611c81565b500390565b60008219821115611d0257611d02611c81565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611d3157611d31611c81565b5060010190565b60008184825b85811015611d6f578135611d5181611a04565b6001600160a01b031683526020928301929190910190600101611d3e565b509095945050505050565b60008060408385031215611d8d57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611e045784516001600160a01b031683529383019391830191600101611ddf565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020808385031215611e3857600080fd5b825167ffffffffffffffff80821115611e5057600080fd5b818501915085601f830112611e6457600080fd5b815181811115611e7657611e76611d9e565b8060051b604051601f19603f83011681018181108582111715611e9b57611e9b611d9e565b604052918252848201925083810185019188831115611eb957600080fd5b938501935b82851015611ed757845184529385019392850192611ebe565b98975050505050505050565b60005b83811015611efe578181015183820152602001611ee6565b8381111561136d5750506000910152565b60008251611f21818460208701611ee3565b9190910192915050565b6020815260008251806020840152611f4a816040850160208701611ee3565b601f01601f1916919091016040019291505056fea15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054ca2646970667358221220f50531c9299b4967deedce6d34df9798a2aa61ec429f05bc7a17f996bc29dd4064736f6c634300080a0033