0x6080604052348015600f57600080fd5b506122028061001f6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063975636211161011a578063ccec3716116100ad578063f1a640f81161007c578063f1a640f81461043c578063f620732614610447578063f743e3d814610450578063f89e63141461047e578063ffd9eedb1461049157600080fd5b8063ccec3716146103f0578063d8a2b7f014610403578063dbceb00514610416578063e88fbc741461042957600080fd5b8063aaf10f42116100e9578063aaf10f42146103b9578063ade6e2aa146103c1578063b2016bd4146103ca578063c45a0155146103dd57600080fd5b80639756362114610358578063a31bf91f1461036b578063a7fb2dce14610391578063a86099ce146103a657600080fd5b8063525550ea116101925780637ca0a5ed116101615780637ca0a5ed1461031657806392d09ceb14610329578063942129ee1461033257806394c3d2b71461034557600080fd5b8063525550ea146102d557806363bd1d4a146102e85780637150d8ae146102f0578063792417b11461030357600080fd5b806336c05ff3116101ce57806336c05ff31461029b5780633bb91c77146102af57806343d726d6146102c2578063524d81d3146102cc57600080fd5b806305ecd0031461020057806308551a531461021b5780631b72df0d146102465780632e53c60214610260575b600080fd5b610208610498565b6040519081526020015b60405180910390f35b600b5461022e906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b604080516020810182526000815290516102129190611aaa565b61028b61026e366004611ae4565b600060208181529281526040808220909352908152205460ff1681565b6040519015158152602001610212565b600d5461028b90600160a01b900460ff1681565b6102086102bd366004611b1d565b610529565b6102ca61053f565b005b61020860085481565b600d5461022e906001600160a01b031681565b6102ca6106d4565b600a5461022e906001600160a01b031681565b610208610311366004611b1d565b61099e565b600c5461022e906001600160a01b031681565b61020860095481565b6102ca610340366004611b44565b6109bf565b6102ca610353366004611cc6565b610c3d565b610208610366366004611e0b565b610c56565b604080516000808252602082018190529181018290526060810191909152608001610212565b610399610c7f565b6040516102129190611e8c565b6102ca6103b4366004611e9f565b610cd7565b61022e610cf8565b61020860065481565b60035461022e906001600160a01b031681565b60025461022e906001600160a01b031681565b6102ca6103fe366004611ed4565b610d0d565b60045461022e906001600160a01b031681565b61022e610424366004611b1d565b610ebd565b6102ca610437366004611ef1565b61126c565b6102086305f5e10081565b61020860075481565b61028b61045e366004611ae4565b600160209081526000928352604080842090915290825290205460ff1681565b61020861048c366004611f3c565b61131a565b6000610208565b600c5460048054600654600754604051636153e98360e01b81526001600160a01b0393841694810194909452602484019190915260448301526000928392911690636153e98390606401602060405180830381865afa1580156104ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105239190611f8d565b92915050565b600061052382610537610c7f565b60085461131a565b600b54600a546001600160a01b039081169116146105b75760405162461bcd60e51b815260206004820152602a60248201527f427579657220616e642073656c6c6572206d757374206265207468652073616d6044820152696520746f20636c6f736560b01b60648201526084015b60405180910390fd5b600019600654106105fa5760405162461bcd60e51b815260206004820152600d60248201526c13dc1d1a5bdb8818db1bdcd959609a1b60448201526064016105ae565b6000196006556003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066d9190611f8d565b600a5460035491925061068d916001600160a01b03908116911683611390565b600a546040518281526001600160a01b039091169030907ff6b70e7b963f6035e2f7f31cb25d86edbfb11d3006c4ad20bd93923a056e828c9060200160405180910390a350565b6003546001600160a01b031661071e5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b9a5d1a585b1a5e9959608a1b60448201526064016105ae565b600019600654036107615760405162461bcd60e51b815260206004820152600d60248201526c13dc1d1a5bdb8818db1bdcd959609a1b60448201526064016105ae565b6006544210156107ac5760405162461bcd60e51b815260206004820152601660248201527513dc1d1a5bdb881b9bdd08195e1c1a5c9959081e595d60521b60448201526064016105ae565b600d54600160a01b900460ff16156107f75760405162461bcd60e51b815260206004820152600e60248201526d13dc1d1a5bdb881cd95d1d1b195960921b60448201526064016105ae565b6000610801610498565b9050600061080e82610529565b60405183815290915030907fc549d3d80332dee29de8f13591cac9d525bb5fe89a6dd90f44f0f659c61333249060200160405180910390a2600d805460ff60a01b1916600160a01b17905580156108c157600a5460035461087c916001600160a01b03918216911683611390565b600a546040518281526001600160a01b039091169030907f3a945388fe0a73ff7616714347533e2f1713377f609ad9e8b365949cbee1ff6e9060200160405180910390a35b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190611f8d565b9050801561099957600b54600354610953916001600160a01b03918216911683611390565b600b546040518281526001600160a01b039091169030907fedd9aae2554e64d4211870eb367de98af64539d1cb8f93ac941752a1f5c8d16d906020015b60405180910390a35b505050565b600581815481106109ae57600080fd5b600091825260209091200154905081565b6001600160a01b038116610a0e5760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420746172676574206164647265737360501b60448201526064016105ae565b8115610b0457600a546001600160a01b0316331480610a505750600a546001600160a01b031660009081526020818152604080832033845290915290205460ff165b80610a6557506002546001600160a01b031633145b610abf5760405162461bcd60e51b815260206004820152602560248201527f4e6f7420617574686f72697a656420746f207472616e7366657220627579657260448201526420726f6c6560d81b60648201526084016105ae565b600a80546001600160a01b039081166000908152602081815260408083203384529091529020805460ff1916905581546001600160a01b031916908316179055610bf5565b600b546001600160a01b0316331480610b425750600b546001600160a01b0316600090815260016020908152604080832033845290915290205460ff165b80610b5757506002546001600160a01b031633145b610bb25760405162461bcd60e51b815260206004820152602660248201527f4e6f7420617574686f72697a656420746f207472616e736665722073656c6c656044820152657220726f6c6560d01b60648201526084016105ae565b600b80546001600160a01b0390811660009081526001602090815260408083203384529091529020805460ff1916905581546001600160a01b0319169083161790555b60405182151581526001600160a01b03821690339030907f83a50732194629dbdc1b6553381c106fd007ecfa402a02558dbfb039dda69fb79060200160405180910390a45050565b610c46816113f3565b610c538160a00151610cd7565b50565b60008251600114610c795760405162461bcd60e51b81526004016105ae90611fa6565b50919050565b60606005805480602002602001604051908101604052809291908181526020018280548015610ccd57602002820191906000526020600020905b815481526020019060010190808311610cb9575b5050505050905090565b8051600114610c535760405162461bcd60e51b81526004016105ae90611fa6565b60006040516020600082303c5160101c919050565b600d546001600160a01b03163314610d735760405162461bcd60e51b8152602060048201526024808201527f4f6e6c792072657363756520616464726573732063616e207265736375652066604482015263756e647360e01b60648201526084016105ae565b6000196006541480610d945750600654610d909062015180612004565b4210155b610dd95760405162461bcd60e51b815260206004820152601660248201527514995cd8dd59481b9bdd08185b1b1bddd959081e595d60521b60448201526064016105ae565b610de28161162b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4d9190611f8d565b90508015610e6f57600d54610e6f906001600160a01b03848116911683611390565b600d54604080516001600160a01b03858116825260208201859052909216917f8bbfbb5d7fcacf6fc74005cdede0635561638507f576c95f7f294c22141be2e5910160405180910390a25050565b600a546000906001600160a01b0316331480610ee35750600b546001600160a01b031633145b610f435760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c79206275796572206f722073656c6c65722063616e2063616c6c20746860448201526a34b990333ab731ba34b7b760a91b60648201526084016105ae565b600082118015610f54575060095482105b610f975760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081cdc1b1a5d08185b5bdd5b9d60621b60448201526064016105ae565b600060095460085484610faa9190612017565b610fb4919061202e565b9050600081116110105760405162461bcd60e51b815260206004820152602160248201527f53706c697420776f756c6420726573756c7420696e203020636f6e74726163746044820152607360f81b60648201526084016105ae565b82600960008282546110229190612050565b92505081905550806008600082825461103b9190612050565b909155506000905061104b610cf8565b90506000611061826001600160a01b03166116bd565b60035460405163095ea7b360e01b81526001600160a01b0380841660048301526024820189905292935091169063095ea7b3906044016020604051808303816000875af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da9190612063565b50604080516101a0810182526003546001600160a01b0390811682526004548116602080840191909152600c54821683850152600a5482166060840152600b548216608084015260058054855181840281018401909652808652928616946394c3d2b7949360a085019391929183018282801561117657602002820191906000526020600020905b815481526020019060010190808311611162575b5050509183525050600654602082015260075460408201526060810187905260808101899052600d546001600160a01b0390811660a08301526002541660c082015260e0016111d060408051602081019091526000815290565b8152506040518263ffffffff1660e01b81526004016111ef9190612080565b600060405180830381600087803b15801561120957600080fd5b505af115801561121d573d6000803e3d6000fd5b50505050806001600160a01b03167f4ba7101b6ba84855348b94f0e88606a14b7ff364028705c3d880a0741385355c8660405161125c91815260200190565b60405180910390a2949350505050565b82156112a457336000908152602081815260408083206001600160a01b03861684529091529020805460ff19168215151790556112d4565b3360009081526001602090815260408083206001600160a01b03861684529091529020805460ff19168215151790555b604080518415158152821515602082015233916001600160a01b038516917f3a83a33b3eb57b7b5f50d8542ccfe48a3e35aae9984934b603c8fdfd1f73450d9101610990565b6000825160011461133d5760405162461bcd60e51b81526004016105ae90611fa6565b600080846000815181106113535761135361219a565b602002602001015190508086111561138757856113708282612050565b61137a9086612017565b611384919061202e565b91505b50949350505050565b6040516001600160a01b03831660248201526044810182905261099990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611757565b6003546001600160a01b0316156114425760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016105ae565b80516001600160a01b03166114995760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420636f6c6c61746572616c20746f6b656e000000000000000060448201526064016105ae565b6060810151600a80546001600160a01b03199081166001600160a01b03938416179091556080830151600b80548316918416919091179055825160038054831691841691909117905560208301516004805483169184169190911790556040830151600c8054909216921691909117905560a08101515167ffffffffffffffff81111561152857611528611b62565b604051908082528060200260200182016040528015611551578160200160208202803683370190505b508051611566916005916020909101906119fa565b5060005b8160a00151518110156115bc578160a00151818151811061158d5761158d61219a565b6020026020010151600582815481106115a8576115a861219a565b60009182526020909120015560010161156a565b5060c081015160065560e0810151600755610100810151600855610140810151600d80546001600160a01b03199081166001600160a01b0393841617909155610160830151600280549092169083161790556101208201516009819055600354610c539216903390309061182c565b6003546001600160a01b0390811690821603610c5357306001600160a01b03166363bd1d4a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561167c57600080fd5b505af192505050801561168d575060015b610c53576040517fa4547bf89b2684b8ca4db9444ced28607710c030232e995d4b41a2812d1248e990600090a150565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166117525760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016105ae565b919050565b60006117ac826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661186a9092919063ffffffff16565b90508051600014806117cd5750808060200190518101906117cd9190612063565b6109995760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105ae565b6040516001600160a01b03808516602483015283166044820152606481018290526118649085906323b872dd60e01b906084016113bc565b50505050565b60606118798484600085611881565b949350505050565b6060824710156118e25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105ae565b600080866001600160a01b031685876040516118fe91906121b0565b60006040518083038185875af1925050503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b50915091506119518783838761195c565b979650505050505050565b606083156119cb5782516000036119c4576001600160a01b0385163b6119c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105ae565b5081611879565b61187983838151156119e05781518083602001fd5b8060405162461bcd60e51b81526004016105ae9190611aaa565b828054828255906000526020600020908101928215611a35579160200282015b82811115611a35578251825591602001919060010190611a1a565b50611a41929150611a45565b5090565b5b80821115611a415760008155600101611a46565b60005b83811015611a75578181015183820152602001611a5d565b50506000910152565b60008151808452611a96816020860160208601611a5a565b601f01601f19169290920160200192915050565b602081526000611abd6020830184611a7e565b9392505050565b6001600160a01b0381168114610c5357600080fd5b803561175281611ac4565b60008060408385031215611af757600080fd5b8235611b0281611ac4565b91506020830135611b1281611ac4565b809150509250929050565b600060208284031215611b2f57600080fd5b5035919050565b8015158114610c5357600080fd5b60008060408385031215611b5757600080fd5b8235611b0281611b36565b634e487b7160e01b600052604160045260246000fd5b6040516101a0810167ffffffffffffffff81118282101715611b9c57611b9c611b62565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611bcb57611bcb611b62565b604052919050565b600082601f830112611be457600080fd5b813567ffffffffffffffff811115611bfe57611bfe611b62565b8060051b611c0e60208201611ba2565b91825260208185018101929081019086841115611c2a57600080fd5b6020860192505b83831015611c4c578235825260209283019290910190611c31565b9695505050505050565b600082601f830112611c6757600080fd5b813567ffffffffffffffff811115611c8157611c81611b62565b611c94601f8201601f1916602001611ba2565b818152846020838601011115611ca957600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611cd857600080fd5b813567ffffffffffffffff811115611cef57600080fd5b82016101a08185031215611d0257600080fd5b611d0a611b78565b611d1382611ad9565b8152611d2160208301611ad9565b6020820152611d3260408301611ad9565b6040820152611d4360608301611ad9565b6060820152611d5460808301611ad9565b608082015260a082013567ffffffffffffffff811115611d7357600080fd5b611d7f86828501611bd3565b60a08301525060c0828101359082015260e0808301359082015261010080830135908201526101208083013590820152611dbc6101408301611ad9565b610140820152611dcf6101608301611ad9565b61016082015261018082013567ffffffffffffffff811115611df057600080fd5b611dfc86828501611c56565b61018083015250949350505050565b60008060408385031215611e1e57600080fd5b823567ffffffffffffffff811115611e3557600080fd5b611e4185828601611bd3565b95602094909401359450505050565b600081518084526020840193506020830160005b82811015611e82578151865260209586019590910190600101611e64565b5093949350505050565b602081526000611abd6020830184611e50565b600060208284031215611eb157600080fd5b813567ffffffffffffffff811115611ec857600080fd5b61187984828501611bd3565b600060208284031215611ee657600080fd5b8135611abd81611ac4565b600080600060608486031215611f0657600080fd5b8335611f1181611b36565b92506020840135611f2181611ac4565b91506040840135611f3181611b36565b809150509250925092565b600080600060608486031215611f5157600080fd5b83359250602084013567ffffffffffffffff811115611f6f57600080fd5b611f7b86828701611bd3565b93969395505050506040919091013590565b600060208284031215611f9f57600080fd5b5051919050565b60208082526028908201527f56616e696c6c612063616c6c2072657175697265732065786163746c79206f6e6040820152676520737472696b6560c01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561052357610523611fee565b808202811582820484141761052357610523611fee565b60008261204b57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561052357610523611fee565b60006020828403121561207557600080fd5b8151611abd81611b36565b6020815261209a6020820183516001600160a01b03169052565b600060208301516120b660408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516101a060c08401526121116101c0840182611e50565b905060c084015160e084015260e084015161010084015261010084015161012084015261012084015161014084015261014084015161215c6101608501826001600160a01b03169052565b506101608401516001600160a01b03811661018085015250610180840151838203601f19016101a08501526121918282611a7e565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b600082516121c2818460208701611a5a565b919091019291505056fea26469706673582212207ab1157f59a3f66c0e845ee4c9b67c98111e8d68287a9264531a8546612ee97f64736f6c634300081b0033