//
0x60a060405234801561001057600080fd5b506000608052608051614bd961002e60003960005050614bd96000f3fe608060405234801561001057600080fd5b50600436106104b75760003560e01c80637d42938511610278578063aa77fd551161015c578063d673de46116100ce578063f2888dbb11610092578063f2888dbb14610c1a578063f3aea65014610c2d578063f4350c2414610c40578063f4408e4b14610c53578063fc0c546a14610c5b578063ffff59a614610c6f576104b7565b8063d673de4614610baa578063dd62ed3e14610bcb578063e364215314610bde578063e58378bb14610bf2578063e8e658b414610c07576104b7565b8063bc697ec511610120578063bc697ec514610b43578063bc9b30c814610b56578063bed6ff0914610b69578063c229918e14610b7c578063d1b6861114610b84578063d547741f14610b97576104b7565b8063aa77fd5514610a93578063adc9772e14610a9d578063b07f3c4714610ab0578063b72cd7a814610b0f578063ba2bfc0a14610b22576104b7565b80639fa6dd35116101f5578063a63ed2c8116101b9578063a63ed2c814610a2c578063a74194af14610a3f578063a9059cbb14610a52578063a93a019f14610a65578063a99fa31a14610a78578063aa5703ad14610a8b576104b7565b80639fa6dd35146109d7578063a217fddf146109ea578063a457c2d7146109f2578063a48dca1814610a05578063a4c0ed3614610a19576104b7565b8063918b5be11161023c578063918b5be11461098b57806391d148541461099e5780639413462c146109b157806395d89b41146109bb57806398833130146109c3576104b7565b80637d429385146109255780637e82fd6f14610946578063870ffde21461095b57806387396e3b146109645780638da5cb5b14610977576104b7565b8063313ce5671161039f578063558a15681161031c57806363d1ecf2116102e057806363d1ecf2146108b257806364f1abb7146108c65780636c68c0e1146108d957806370a08231146108ec578063799e2590146108ff5780637bf713b614610912576104b7565b8063558a156814610853578063572b6c051461085d57806358fc614a146108705780635dff6e9f146108915780635e61bb87146108a4576104b7565b80634a178fe4116103635780634a178fe4146108025780634a45d2e6146108155780634b095c031461082657806350d3ba9e1461083957806354fd4d501461084c576104b7565b8063313ce567146107a457806336568abe146107b3578063392f37e9146107c657806339509351146107ce578063430457e1146107e1576104b7565b80631c53c2801161043857806323b872dd116103fc57806323b872dd1461071c578063248a9ca31461072f57806325c33549146107525780632e949824146107655780632ebd89d11461077a5780632f2ff15d14610791576104b7565b80631c53c280146106af57806320fed94f146106cf57806321194bd7146106e2578063217fb33b146106f557806321a7690714610708576104b7565b80630fd6ff491161047f5780630fd6ff491461066457806311606010146106795780631401f70b1461068157806314797daa1461069457806318160ddd146106a7576104b7565b806301ffc9a7146105d757806304cbab8b1461061057806306fdde0314610627578063092c5b3b1461063c578063095ea7b314610651575b60003660603330146104dc57604051634ca8886760e01b815260040160405180910390fd5b81600084826104ec601482613de3565b6104f892859290613dfa565b61050191613e24565b60601c90506000858186610516602087613de3565b9261052393929190613dfa565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b038716925061057591508590613e85565b600060405180830381855af49150503d80600081146105b0576040519150601f19603f3d011682016040523d82523d6000602084013e6105b5565b606091505b5091509150816105c757805181602001fd5b8051975060200195505050505050f35b6105fb6105e5366004613ea1565b6001600160e01b031916636b3a61dd60e01b1490565b60405190151581526020015b60405180910390f35b61061960fb5481565b604051908152602001610607565b61062f610c82565b6040516106079190613ef7565b610619600080516020614b2483398151915281565b6105fb61065f366004613f1f565b610d14565b610677610672366004613f93565b610d36565b005b6105fb610dd2565b61067761068f366004613fd4565b610e1e565b6106776106a2366004614035565b610ebc565b60cb54610619565b6106c26106bd3660046140a0565b610f2c565b60405161060791906140b9565b6106776106dd3660046140cd565b610f57565b6106776106f0366004613f93565b610ffa565b610677610703366004613fd4565b61109e565b610102546106c2906001600160a01b031681565b6105fb61072a3660046140ef565b61119d565b61061961073d3660046140a0565b60009081526097602052604090206001015490565b610677610760366004614130565b6111cb565b61076d611234565b60405161060791906141a9565b610782611296565b604051610607939291906141bc565b61067761079f36600461421c565b6114ca565b60405160128152602001610607565b6106776107c136600461421c565b6114ef565b61062f611579565b6105fb6107dc366004613f1f565b611608565b6106196107ef366004613fd4565b61010b6020526000908152604090205481565b610677610810366004614337565b611634565b6106776108233660046140a0565b50565b610677610834366004613f1f565b6116e7565b610619610847366004614420565b61174c565b6003610619565b6106196101065481565b6105fb61086b366004613fd4565b611782565b61061961087e366004613fd4565b6101086020526000908152604090205481565b61067761089f3660046140a0565b611816565b61010d5461010e54146105fb565b610100546106c2906001600160a01b031681565b6106776108d4366004613fd4565b611856565b6106776108e73660046140a0565b611b25565b6106196108fa366004613fd4565b611b68565b60fd546106c2906001600160a01b031681565b6106776109203660046140a0565b611b83565b610619610933366004613fd4565b6101096020526000908152604090205481565b61094e611d13565b604051610607919061445c565b61061960fc5481565b6106776109723660046140a0565b611e36565b610104546106c2906001600160a01b031681565b610677610999366004613f93565b611e63565b6105fb6109ac36600461421c565b611efa565b61061961010d5481565b61062f611f25565b610103546106c2906001600160a01b031681565b6106776109e53660046140a0565b611f34565b610619600081565b6105fb610a00366004613f1f565b611fe1565b610101546106c2906001600160a01b031681565b610677610a273660046144be565b612067565b610619610a3a366004613fd4565b6120f0565b6106c2610a4d3660046140a0565b612174565b6105fb610a60366004613f1f565b612185565b610677610a73366004613f1f565b61219d565b610677610a8636600461450d565b6122ba565b61062f612528565b61061961010e5481565b610677610aab366004613f1f565b6125a6565b610aea610abe3660046140a0565b61010c602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b039094168452602084019290925290820152606001610607565b60fe546106c2906001600160a01b031681565b610619610b30366004613fd4565b61010a6020526000908152604090205481565b610677610b51366004613f1f565b61260b565b60ff546106c2906001600160a01b031681565b610677610b773660046140ef565b612654565b6106196126d0565b610677610b92366004613f1f565b61275f565b610677610ba536600461421c565b6127aa565b610619610bb8366004613fd4565b6101106020526000908152604090205481565b610619610bd936600461460d565b6127cf565b610112546106c2906001600160a01b031681565b610619600080516020614b0483398151915281565b610677610c15366004614420565b6127fa565b610677610c28366004613fd4565b612ad1565b610677610c3b366004613f1f565b612b11565b610677610c4e36600461463b565b612b5a565b61062f612b88565b610105546106c2906001600160a01b031681565b610677610c7d366004613f1f565b612b96565b606060cc8054610c919061468a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbd9061468a565b8015610d0a5780601f10610cdf57610100808354040283529160200191610d0a565b820191906000526020600020905b815481529060010190602001808311610ced57829003601f168201915b5050505050905090565b600080610d1f612bdf565b9050610d2c818585612be9565b5060019392505050565b6101106000610d43612bdf565b6001600160a01b03166001600160a01b0316815260200190815260200160002054600003610d8457604051634f1cec5f60e11b815260040160405180910390fd5b610d8c612bdf565b6001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610dc69291906146ed565b60405180910390a25050565b610101546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610e17916001600160a01b0390911690612d0d565b1515919050565b610e38600080516020614b248339815191526109ac612bdf565b610e5557604051631a76708960e21b815260040160405180910390fd5b61010254604051610eb8916001600160a01b03169063af9ee81d60e01b90610e819085906024016140b9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612d0d565b5050565b610ed6600080516020614b248339815191526109ac612bdf565b610ef357604051631a76708960e21b815260040160405180910390fd5b61010054604051610f25916001600160a01b031690635e2cb23f60e11b90610e8190889088908890889060240161473f565b5050505050565b61010f8181548110610f3d57600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815261010860205260408120549003610f875760405163012d886f60e51b815260040160405180910390fd5b8215610fc6578160fc6000828254610f9f9190614766565b90915550610fae905083612dae565b8160fc6000828254610fc09190613de3565b90915550505b61010254604051610ff4916001600160a01b031690631644f38560e31b90610e81908590879060240161477e565b50505050565b611014600080516020614b248339815191526109ac612bdf565b61103157604051631a76708960e21b815260040160405180910390fd5b610112546040516342617fe760e01b81526001600160a01b03909116906342617fe790611068906101119086908690600401614836565b600060405180830381600087803b15801561108257600080fd5b505af1158015611096573d6000803e3d6000fd5b505050505050565b61010360009054906101000a90046001600160a01b03166001600160a01b0316637b94dead6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190614866565b60cb54611123919061487f565b61010454611139906001600160a01b0316611b68565b61114b90670de0b6b3a764000061487f565b116108235760405162461bcd60e51b815260206004820152601a60248201527f6572726f725f73656c6644656c65676174696f6e546f6f4c6f7700000000000060448201526064015b60405180910390fd5b6000806111a8612bdf565b90506111b5858285612ec3565b6111c0858585612f37565b506001949350505050565b6111e5600080516020614b248339815191526109ac612bdf565b61120257604051631a76708960e21b815260040160405180910390fd5b6101005460405161122f916001600160a01b03169062b08f2560e61b90610e81908690869060240161489e565b505050565b606061010f805480602002602001604051908101604052809291908181526020018280548015610d0a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161126f575050505050905090565b6060806000610107805490506001600160401b038111156112b9576112b961424c565b6040519080825280602002602001820160405280156112e2578160200160208202803683370190505b50610107549093506001600160401b038111156113015761130161424c565b60405190808252806020026020018201604052801561132a578160200160208202803683370190505b50915060005b610107548110156114305760006101078281548110611351576113516148b2565b9060005260206000200160009054906101000a90046001600160a01b0316905080858381518110611384576113846148b2565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c04906113bf9030906004016140b9565b602060405180830381865afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190614866565b848381518110611412576114126148b2565b60209081029190910101525080611428816148c8565b915050611330565b5061010354604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190614866565b6114af6126d0565b6114b9919061487f565b6114c391906148e1565b9050909192565b6000828152609760205260409020600101546114e581613153565b61122f8383613164565b6114f7612bdf565b6001600160a01b0316816001600160a01b03161461156f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401611194565b610eb882826131eb565b61011380546115879061468a565b80601f01602080910402602001604051908101604052809291908181526020018280546115b39061468a565b80156116005780601f106115d557610100808354040283529160200191611600565b820191906000526020600020905b8154815290600101906020018083116115e357829003601f168201915b505050505081565b600080611613612bdf565b9050610d2c81858561162585896127cf565b61162f9190614766565b612be9565b6101106000611641612bdf565b6001600160a01b03166001600160a01b031681526020019081526020016000205460000361168257604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c6906116b09085908590600401614903565b600060405180830381600087803b1580156116ca57600080fd5b505af11580156116de573d6000803e3d6000fd5b50505050505050565b611701600080516020614b248339815191526109ac612bdf565b61171e57604051631a76708960e21b815260040160405180910390fd5b6101025460405161122f916001600160a01b03169063d572a9cd60e01b90610e81908690869060240161477e565b6101025460405160009161177c916001600160a01b039091169062d8aad560e51b90610e819086906024016141a9565b92915050565b6000816001600160a01b031661010360009054906101000a90046001600160a01b03166001600160a01b0316637da0a8776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118069190614927565b6001600160a01b03161492915050565b611830600080516020614b248339815191526109ac612bdf565b61184d57604051631a76708960e21b815260040160405180910390fd5b61082381613270565b61010360009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ce9190614927565b6001600160a01b0316634703e001336040518263ffffffff1660e01b81526004016118f991906140b9565b602060405180830381865afa158015611916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193a9190614866565b60000361195a576040516359e9fbbf60e11b815260040160405180910390fd5b61010354604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa1580156119aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ce9190614866565b6119d89042614766565b9050600061010360009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a549190614866565b611a5e9083614766565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b8152600401611ac391906140b9565b600060405180830381865afa158015611ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b089190810190614944565b604051611b17939291906149ba565b60405180910390a350505050565b61010154610eb8906001600160a01b0316630744132360e21b83611b47612bdf565b60405160248101929092526001600160a01b03166044820152606401610e81565b6001600160a01b0316600090815260c9602052604090205490565b33600081815261010860205260408120549003611bb35760405163012d886f60e51b815260040160405180910390fd5b611bbc82612dae565b6001600160a01b038116600090815261010a602052604081208054849290611be5908490614766565b925050819055508160fc6000828254611bfe9190614766565b90915550506001600160a01b038116600081815261010a6020908152604080832054610109909252909120547f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd7891611c5591613de3565b60405190815260200160405180910390a2600080516020614b8483398151915260fc5460fb54611c859190613de3565b610105546040516370a0823160e01b81526001600160a01b03909116906370a0823190611cb69030906004016140b9565b602060405180830381865afa158015611cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf79190614866565b6040805192835260208301919091520160405180910390a15050565b6060600061010e5461010d54611d299190613de3565b9050806001600160401b03811115611d4357611d4361424c565b604051908082528060200260200182016040528015611da157816020015b611d8e604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611d615790505b50915060005b81811015611e315761010c60008261010e54611dc39190614766565b81526020808201929092526040908101600020815160608101835281546001600160a01b0316815260018201549381019390935260020154908201528351849083908110611e1357611e136148b2565b60200260200101819052508080611e29906148c8565b915050611da7565b505090565b6101015460405160248101839052610eb8916001600160a01b03169063211cccd160e21b90604401610e81565b611e7d600080516020614b248339815191526109ac612bdf565b611e9a57604051631a76708960e21b815260040160405180910390fd5b611ea76101138383613cc0565b5061010654610104546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d090611eee90869086906146ed565b60405180910390a35050565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060cd8054610c919061468a565b610105546001600160a01b03166323b872dd611f4e612bdf565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af1158015611fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc591906149d9565b50611fd7611fd1612bdf565b82613310565b6108236000611e36565b600080611fec612bdf565b90506000611ffa82866127cf565b90508381101561205a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611194565b6111c08286868403612be9565b610105546001600160a01b031633146120935760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815261010860205260409020548490156120ba5750610ff4565b8460148390036120cf5750823560601c6120dc565b60208390036120dc575082355b6120e68186613310565b6110966000611e36565b60006120fb82611b68565b60000361210a57506000919050565b61177c630de731f360e31b61211e84611b68565b60fe5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613583565b6101078181548110610f3d57600080fd5b600080612190612bdf565b9050610d2c818585612f37565b61010d5461010e541480612248575061010360009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122249190614866565b61010e54600090815261010c60205260409020600201546122459190614766565b42105b1561228457612267600080516020614b248339815191526109ac612bdf565b61228457604051631a76708960e21b815260040160405180910390fd5b610102546040516122b0916001600160a01b031690633d16f42d60e01b90610e819086906024016140b9565b50610eb881611e36565b600054610100900460ff16158080156122da5750600054600160ff909116105b806122f45750303b1580156122f4575060005460ff166001145b6123575760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611194565b6000805460ff19166001179055801561237a576000805461ff0019166101001790555b61010380546001600160a01b0319166001600160a01b03891617905561239e613619565b6123b6600080516020614b0483398151915287613642565b6123ce600080516020614b2483398151915287613642565b6123f4600080516020614b24833981519152600080516020614b0483398151915261364c565b61010580546001600160a01b03199081166001600160a01b038b811691909117909255835161010080548316918416919091179055602084015161010180548316918416919091179055604084015161010280548316918416919091179055610104805490911691881691909117905561246e8580613697565b612479600033613642565b835161248d90610113906020870190613d44565b5061249783613270565b610100546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b1790526124d7916001600160a01b031690612d0d565b50801561251e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b610112546040516331ca7de960e11b81526060916001600160a01b031690636394fbd29061255c90610111906004016149fb565b600060405180830381865afa158015612579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125a19190810190614944565b905090565b6125c0600080516020614b248339815191526109ac612bdf565b6125dd57604051631a76708960e21b815260040160405180910390fd5b6101025460405161122f916001600160a01b03169063aa0d97b360e01b90610e81908690869060240161477e565b600061261681613153565b60fe80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610ff49190632522e97360e11b90604401610e81565b6101106000612661612bdf565b6001600160a01b03166001600160a01b03168152602001908152602001600020546000036126a257604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce4906116b0908590859060040161477e565b60fc5460fb54610105546040516370a0823160e01b815260009392916001600160a01b0316906370a082319061270a9030906004016140b9565b602060405180830381865afa158015612727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274b9190614866565b6127559190614766565b6125a19190613de3565b612779600080516020614b248339815191526109ac612bdf565b61279657604051631a76708960e21b815260040160405180910390fd5b6127a082826116e7565b610eb86000611e36565b6000828152609760205260409020600101546127c581613153565b61122f83836131eb565b6001600160a01b03918216600090815260ca6020908152604080832093909416825291909152205490565b60006128046126d0565b905060006128118361174c565b9050600061281d612bdf565b9050612837600080516020614b2483398151915282611efa565b15801561285b57506001600160a01b03811660009081526101106020526040902054155b15612ac7576000670de0b6b3a764000061010360009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e39190614866565b6128ed908661487f565b6128f791906148e1565b905080831115612ac5576000670de0b6b3a764000061010360009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129849190614866565b61298e908661487f565b61299891906148e1565b90506129a381612dae565b6101055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906129d6908690859060040161477e565b6020604051808303816000875af11580156129f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1991906149d9565b50600080516020614b8483398151915260fc5460fb54612a399190613de3565b610105546040516370a0823160e01b81526001600160a01b03909116906370a0823190612a6a9030906004016140b9565b602060405180830381865afa158015612a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aab9190614866565b6040805192835260208301919091520160405180910390a1505b505b610ff46000611e36565b612aeb600080516020614b248339815191526109ac612bdf565b612b0857604051631a76708960e21b815260040160405180910390fd5b611fd781610e1e565b6000612b1c81613153565b60fd80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610ff49190632522e97360e11b90604401610e81565b6101015460405161122f916001600160a01b031690637a227c9f60e01b90610e819086908690602401614a0e565b61011180546115879061468a565b6000612ba181613153565b60ff80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610ff49190632522e97360e11b90604401610e81565b60006125a16136c8565b6001600160a01b038316612c4b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611194565b6001600160a01b038216612cac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611194565b6001600160a01b03838116600081815260ca602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000846001600160a01b031684604051612d2a9190613e85565b600060405180830381855af49150503d8060008114612d65576040519150601f19603f3d011682016040523d82523d6000602084013e612d6a565b606091505b509150915081612da2578051600003612d9a57848460405163918623b760e01b8152600401611194929190614903565b805181602001fd5b60200151949350505050565b61010454600090612dc7906001600160a01b0316611b68565b905080600003612dd5575050565b60fe5460405160248101849052600091612e06916001600160a01b0390911690632b911c0960e21b90604401610e81565b90506000612e1483836136ea565b61010454909150612e2e906001600160a01b031682613702565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a1610104546001600160a01b0316600080516020614b44833981519152612e9482611b68565b60cb54612e9f6126d0565b6040805193845260208401929092529082015260600160405180910390a250505050565b6000612ecf84846127cf565b90506000198114610ff45781811015612f2a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611194565b610ff48484848403612be9565b6000612f4283611b68565b159050612f50848484613824565b6101035460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015612f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fbf9190614866565b905080612fcb86611b68565b108015612fe057506000612fde86611b68565b115b1561301257612fee85611b68565b6040516324c6940760e01b8152600481019190915260248101829052604401611194565b8061301c85611b68565b101561302b57612fee84611b68565b811561306f5760fd546001600160a01b03161561306f5760fd5460405161306d916001600160a01b03169063217fb33b60e01b90610e819088906024016140b9565b505b60ff546001600160a01b0316156130b65760ff546040516001600160a01b038781166024830152600060448301526130b4921690633608993560e21b90606401610e81565b505b846001600160a01b0316600080516020614b448339815191526130d887611b68565b60cb546130e36126d0565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b0316600080516020614b4483398151915261312386611b68565b60cb5461312e6126d0565b6040805193845260208401929092529082015260600160405180910390a25050505050565b6108238161315f612bdf565b6139bd565b61316e8282611efa565b610eb85760008281526097602090815260408083206001600160a01b03851684529091529020805460ff191660011790556131a7612bdf565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6131f58282611efa565b15610eb85760008281526097602090815260408083206001600160a01b03851684529091529020805460ff1916905561322c612bdf565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60fb5415613291576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a76400008111156132bd57604051631e6f460160e31b815260048101829052602401611194565b6101068190556101045460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d09061330590610113906149fb565b60405180910390a350565b60fe546040516024810183905260448101839052600091613348916001600160a01b0390911690633a49b55760e21b90606401610e81565b90506133548382613a16565b610104546001600160a01b03848116911614613434576101035460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156133b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d99190614866565b9050806133e585611b68565b10156133f457612fee84611b68565b60fd546001600160a01b0316156134325760fd54604051613430916001600160a01b03169063217fb33b60e01b90610e819088906024016140b9565b505b505b6001600160a01b038316600081815261010b602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab906134829085815260200190565b60405180910390a2826001600160a01b0316600080516020614b448339815191526134ac85611b68565b60cb546134b76126d0565b6040805193845260208401929092529082015260600160405180910390a2600080516020614b8483398151915260fc5460fb546134f49190613de3565b610105546040516370a0823160e01b81526001600160a01b03909116906370a08231906135259030906004016140b9565b602060405180830381865afa158015613542573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135669190614866565b6040805192835260208301919091520160405180910390a1505050565b6000806000306001600160a01b0316846040516135a09190613e85565b600060405180830381855afa9150503d80600081146135db576040519150601f19603f3d011682016040523d82523d6000602084013e6135e0565b606091505b50915091508161360e578051600003612d9a578360405163029801d760e41b81526004016111949190613ef7565b602001519392505050565b600054610100900460ff166136405760405162461bcd60e51b815260040161119490614a32565b565b610eb88282613164565b600082815260976020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff166136be5760405162461bcd60e51b815260040161119490614a32565b610eb88282613ac5565b60006136d333611782565b156136e5575060131936013560601c90565b503390565b60008183106136f957816136fb565b825b9392505050565b6001600160a01b0382166137625760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611194565b6001600160a01b038216600090815260c96020526040902054818110156137d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611194565b6001600160a01b038316600081815260c960209081526040808320868603905560cb8054879003905551858152919291600080516020614b64833981519152910160405180910390a3505050565b6001600160a01b0383166138885760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611194565b6001600160a01b0382166138ea5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611194565b6001600160a01b038316600090815260c96020526040902054818110156139625760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611194565b6001600160a01b03808516600081815260c960205260408082208686039055928616808252908390208054860190559151600080516020614b64833981519152906139b09086815260200190565b60405180910390a3610ff4565b6139c78282611efa565b610eb8576139d481613b13565b6139df836020613b25565b6040516020016139f0929190614a7d565b60408051601f198184030181529082905262461bcd60e51b825261119491600401613ef7565b6001600160a01b038216613a6c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611194565b8060cb6000828254613a7e9190614766565b90915550506001600160a01b038216600081815260c96020908152604080832080548601905551848152600080516020614b64833981519152910160405180910390a35050565b600054610100900460ff16613aec5760405162461bcd60e51b815260040161119490614a32565b8151613aff9060cc906020850190613d44565b50805161122f9060cd906020840190613d44565b606061177c6001600160a01b03831660145b60606000613b3483600261487f565b613b3f906002614766565b6001600160401b03811115613b5657613b5661424c565b6040519080825280601f01601f191660200182016040528015613b80576020820181803683370190505b509050600360fc1b81600081518110613b9b57613b9b6148b2565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613bca57613bca6148b2565b60200101906001600160f81b031916908160001a9053506000613bee84600261487f565b613bf9906001614766565b90505b6001811115613c71576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613c2d57613c2d6148b2565b1a60f81b828281518110613c4357613c436148b2565b60200101906001600160f81b031916908160001a90535060049490941c93613c6a81614aec565b9050613bfc565b5083156136fb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611194565b828054613ccc9061468a565b90600052602060002090601f016020900481019282613cee5760008555613d34565b82601f10613d075782800160ff19823516178555613d34565b82800160010185558215613d34579182015b82811115613d34578235825591602001919060010190613d19565b50613d40929150613db8565b5090565b828054613d509061468a565b90600052602060002090601f016020900481019282613d725760008555613d34565b82601f10613d8b57805160ff1916838001178555613d34565b82800160010185558215613d34579182015b82811115613d34578251825591602001919060010190613d9d565b5b80821115613d405760008155600101613db9565b634e487b7160e01b600052601160045260246000fd5b600082821015613df557613df5613dcd565b500390565b60008085851115613e0a57600080fd5b83861115613e1757600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015613e515780818660140360031b1b83161692505b505092915050565b60005b83811015613e74578181015183820152602001613e5c565b83811115610ff45750506000910152565b60008251613e97818460208701613e59565b9190910192915050565b600060208284031215613eb357600080fd5b81356001600160e01b0319811681146136fb57600080fd5b60008151808452613ee3816020860160208601613e59565b601f01601f19169290920160200192915050565b6020815260006136fb6020830184613ecb565b6001600160a01b038116811461082357600080fd5b60008060408385031215613f3257600080fd5b8235613f3d81613f0a565b946020939093013593505050565b60008083601f840112613f5d57600080fd5b5081356001600160401b03811115613f7457600080fd5b602083019150836020828501011115613f8c57600080fd5b9250929050565b60008060208385031215613fa657600080fd5b82356001600160401b03811115613fbc57600080fd5b613fc885828601613f4b565b90969095509350505050565b600060208284031215613fe657600080fd5b81356136fb81613f0a565b60008083601f84011261400357600080fd5b5081356001600160401b0381111561401a57600080fd5b6020830191508360208260051b8501011115613f8c57600080fd5b6000806000806040858703121561404b57600080fd5b84356001600160401b038082111561406257600080fd5b61406e88838901613ff1565b9096509450602087013591508082111561408757600080fd5b5061409487828801613ff1565b95989497509550505050565b6000602082840312156140b257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600080604083850312156140e057600080fd5b50508035926020909101359150565b60008060006060848603121561410457600080fd5b833561410f81613f0a565b9250602084013561411f81613f0a565b929592945050506040919091013590565b6000806020838503121561414357600080fd5b82356001600160401b0381111561415957600080fd5b613fc885828601613ff1565b600081518084526020808501945080840160005b8381101561419e5781516001600160a01b031687529582019590820190600101614179565b509495945050505050565b6020815260006136fb6020830184614165565b6060815260006141cf6060830186614165565b82810360208481019190915285518083528682019282019060005b81811015614206578451835293830193918301916001016141ea565b5050809350505050826040830152949350505050565b6000806040838503121561422f57600080fd5b82359150602083013561424181613f0a565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156142845761428461424c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156142b2576142b261424c565b604052919050565b60006001600160401b038211156142d3576142d361424c565b50601f01601f191660200190565b600082601f8301126142f257600080fd5b8135614305614300826142ba565b61428a565b81815284602083860101111561431a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561434c57600080fd5b833561435781613f0a565b9250602084013561436781613f0a565b915060408401356001600160401b0381111561438257600080fd5b61438e868287016142e1565b9150509250925092565b600082601f8301126143a957600080fd5b813560206001600160401b038211156143c4576143c461424c565b8160051b6143d382820161428a565b92835284810182019282810190878511156143ed57600080fd5b83870192505b8483101561441557823561440681613f0a565b825291830191908301906143f3565b979650505050505050565b60006020828403121561443257600080fd5b81356001600160401b0381111561444857600080fd5b61445484828501614398565b949350505050565b602080825282518282018190526000919060409081850190868401855b828110156144b157815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101614479565b5091979650505050505050565b600080600080606085870312156144d457600080fd5b84356144df81613f0a565b93506020850135925060408501356001600160401b0381111561450157600080fd5b61409487828801613f4b565b600080600080600080600061012080898b03121561452a57600080fd5b883561453581613f0a565b975060208981013561454681613f0a565b975060408a013561455681613f0a565b965060608a01356001600160401b038082111561457257600080fd5b61457e8d838e016142e1565b975060808c013591508082111561459457600080fd5b506145a18c828d016142e1565b95505060a08a013593508a60df8b01126145ba57600080fd5b6145c2614262565b918a0191808c8411156145d457600080fd5b60c08c015b848110156145f95780356145ec81613f0a565b83529183019183016145d9565b508094505050505092959891949750929550565b6000806040838503121561462057600080fd5b823561462b81613f0a565b9150602083013561424181613f0a565b6000806040838503121561464e57600080fd5b823561465981613f0a565b915060208301356001600160401b0381111561467457600080fd5b61468085828601614398565b9150509250929050565b600181811c9082168061469e57607f821691505b6020821081036146be57634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006144546020830184866146c4565b8183526000602080850194508260005b8581101561419e57813561472481613f0a565b6001600160a01b031687529582019590820190600101614711565b604081526000614753604083018688614701565b8281036020840152614415818587614701565b6000821982111561477957614779613dcd565b500190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c90808316806147b157607f831692505b602080841082036147d257634e487b7160e01b600052602260045260246000fd5b838852602088018280156147ed57600181146147fe57614829565b60ff19871682528282019750614829565b60008981526020902060005b878110156148235781548482015290860190840161480a565b83019850505b5050505050505092915050565b6040815260006148496040830186614797565b828103602084015261485c8185876146c4565b9695505050505050565b60006020828403121561487857600080fd5b5051919050565b600081600019048311821515161561489957614899613dcd565b500290565b602081526000614454602083018486614701565b634e487b7160e01b600052603260045260246000fd5b6000600182016148da576148da613dcd565b5060010190565b6000826148fe57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b038316815260406020820181905260009061445490830184613ecb565b60006020828403121561493957600080fd5b81516136fb81613f0a565b60006020828403121561495657600080fd5b81516001600160401b0381111561496c57600080fd5b8201601f8101841361497d57600080fd5b805161498b614300826142ba565b8181528560208385010111156149a057600080fd5b6149b1826020830160208601613e59565b95945050505050565b8381528260208201526060604082015260006149b16060830184613ecb565b6000602082840312156149eb57600080fd5b815180151581146136fb57600080fd5b6020815260006136fb6020830184614797565b6001600160a01b038316815260406020820181905260009061445490830184614165565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614aaf816017850160208801613e59565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614ae0816028840160208801613e59565b01602801949350505050565b600081614afb57614afb613dcd565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef51839ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a26469706673582212202281c6947230549c6ab14ff472a5e07bd610e1409c611b01f6a8c63a1f41ad8264736f6c634300080d0033