60a060405267016345785d8a000060055534801561001b575f80fd5b50604051611ada380380611ada83398101604081905261003a9161010a565b6040805180820182526005808252640ccd88aa8960db1b602080840182905284518086019095529184529083015290600361007583826101da565b50600461008282826101da565b5050506001600160a01b03828116608052600780546001600160a01b0319169183169190911790556100b3336100ba565b5050610294565b6001600160a01b0316638b78c6d819819055805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a35b50565b6001600160a01b03811681146100f3575f80fd5b5f806040838503121561011b575f80fd5b8251610126816100f6565b6020840151909250610137816100f6565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061016a57607f821691505b60208210810361018857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101d557805f5260205f20601f840160051c810160208510156101b35750805b601f840160051c820191505b818110156101d2575f81556001016101bf565b50505b505050565b81516001600160401b038111156101f3576101f3610142565b610207816102018454610156565b8461018e565b6020601f821160018114610239575f83156102225750848201515b5f19600385901b1c1916600184901b1784556101d2565b5f84815260208120601f198516915b828110156102685787850151825560209485019460019092019101610248565b508482101561028557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6080516118206102ba5f395f818161032201528181610cc30152610d6501526118205ff3fe6080604052600436106101f8575f3560e01c80637b2c907011610117578063a9059cbb116100ac578063ed6efec81161007c578063f2fde38b11610062578063f2fde38b14610570578063f8d2066514610583578063fee81cf4146105a2575f80fd5b8063ed6efec81461053e578063f04e283e1461055d575f80fd5b8063a9059cbb146104b4578063b6b55f25146104d3578063be390e8c146104e6578063dd62ed3e146104fa575f80fd5b806395d89b41116100e757806395d89b411461044e57806397cecc8614610462578063a457c2d714610476578063a8c62e7614610495575f80fd5b80637b2c9070146103f25780637d7c2a1c146104075780638da5cb5b1461041b5780638f8b65151461042f575f80fd5b80633dfe9f6a1161018d578063672634be1161015d578063672634be1461037857806370a0823114610397578063715018a6146103cb5780637a9024bd146103d3575f80fd5b80633dfe9f6a146102fc5780633fc8cef3146103115780634641257d1461035c57806354d1f13d14610370575f80fd5b806325692962116101c857806325692962146102995780632e1a7d4d146102a3578063313ce567146102c257806339509351146102dd575f80fd5b806306fdde0314610203578063095ea7b31461022d57806318160ddd1461025c57806323b872dd1461027a575f80fd5b366101ff57005b5f80fd5b34801561020e575f80fd5b506102176105d3565b6040516102249190611614565b60405180910390f35b348015610238575f80fd5b5061024c61024736600461165d565b610663565b6040519015158152602001610224565b348015610267575f80fd5b506002545b604051908152602001610224565b348015610285575f80fd5b5061024c610294366004611687565b61067c565b6102a161069f565b005b3480156102ae575f80fd5b506102a16102bd3660046116c5565b6106ec565b3480156102cd575f80fd5b5060405160128152602001610224565b3480156102e8575f80fd5b5061024c6102f736600461165d565b610852565b348015610307575f80fd5b5061026c60055481565b34801561031c575f80fd5b506103447f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610224565b348015610367575f80fd5b506102a1610890565b6102a1610901565b348015610383575f80fd5b50600754610344906001600160a01b031681565b3480156103a2575f80fd5b5061026c6103b13660046116dc565b6001600160a01b03165f9081526020819052604090205490565b6102a161093a565b3480156103de575f80fd5b506102a16103ed3660046116dc565b61094d565b3480156103fd575f80fd5b5061026c60085481565b348015610412575f80fd5b506102a1610a47565b348015610426575f80fd5b50610344610b81565b34801561043a575f80fd5b506102a16104493660046116c5565b610b94565b348015610459575f80fd5b50610217610ba1565b34801561046d575f80fd5b5061026c610bb0565b348015610481575f80fd5b5061024c61049036600461165d565b610bc6565b3480156104a0575f80fd5b50600654610344906001600160a01b031681565b3480156104bf575f80fd5b5061024c6104ce36600461165d565b610c74565b6102a16104e13660046116c5565b610c81565b3480156104f1575f80fd5b5061026c610ddd565b348015610505575f80fd5b5061026c6105143660046116fe565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610549575f80fd5b506102a16105583660046116dc565b610e6b565b6102a161056b3660046116dc565b610ea2565b6102a161057e3660046116dc565b610edf565b34801561058e575f80fd5b506102a161059d3660046116c5565b610f05565b3480156105ad575f80fd5b5061026c6105bc3660046116dc565b63389a75e1600c9081525f91909152602090205490565b6060600380546105e290611735565b80601f016020809104026020016040519081016040528092919081815260200182805461060e90611735565b80156106595780601f1061063057610100808354040283529160200191610659565b820191905f5260205f20905b81548152906001019060200180831161063c57829003601f168201915b5050505050905090565b5f33610670818585610f17565b60019150505b92915050565b5f3361068985828561106f565b6106948585856110ff565b506001949350505050565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b6106f633826112ea565b478082111561082e576006546001600160a01b0316610741576040517fbd42298500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61074b60025490565b90505f670de0b6b3a7640000826005546107659190611781565b61076f9190611798565b90505f61077c82856117b7565b90505f61078982876117b7565b90505f8561079788876117ca565b6107a191906117b7565b9050818110156107bb579050806107b881886117b7565b92505b6107c5338461144e565b600654604051631b08c5a960e11b8152600481018490523360248201526001600160a01b03909116906336118b52906044015f604051808303815f87803b15801561080e575f80fd5b505af1158015610820573d5f803e3d5ffd5b505050505050505050610838565b610838338361144e565b8160085f82825461084991906117b7565b90915550505050565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909190610670908290869061088b9087906117ca565b610f17565b5f610899610bb0565b600654600754604051631b08c5a960e11b8152600481018490526001600160a01b03918216602482015292935016906336118b52906044015f604051808303815f87803b1580156108e8575f80fd5b505af11580156108fa573d5f803e3d5ffd5b5050505050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b6109426114d7565b61094b5f6114f1565b565b6109556114d7565b6006546001600160a01b0316158015906109e1575060065f9054906101000a90046001600160a01b03166001600160a01b031663a303b72d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109de91906117dd565b15155b15610a18576040517f5ae6ea7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6006546001600160a01b03161580610ace575060065f9054906101000a90046001600160a01b03166001600160a01b0316639a9168ab6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aaa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ace91906117f4565b15610ad557565b475f670de0b6b3a7640000610ae960025490565b600554610af69190611781565b610b009190611798565b905080821115610b7d575f610b1582846117b7565b905060065f9054906101000a90046001600160a01b03166001600160a01b031663d2fd9940826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610b64575f80fd5b505af1158015610b76573d5f803e3d5ffd5b5050505050505b5050565b5f610b8f638b78c6d8195490565b905090565b610b9c6114d7565b600555565b6060600480546105e290611735565b5f600854610bbc610ddd565b610b8f91906117b7565b335f8181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c675760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6106948286868403610f17565b5f336106708185856110ff565b348115610dd3576040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af1158015610d11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3591906117f4565b506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015610dae575f80fd5b505af1158015610dc0573d5f803e3d5ffd5b505050508181610dd091906117ca565b90505b610b7d338261152e565b600654604080517fa303b72d00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b03169163a303b72d9160048083019260209291908290030181865afa158015610e3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6191906117dd565b610b8f90476117ca565b610e736114d7565b6007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b610eaa6114d7565b63389a75e1600c52805f526020600c208054421115610ed057636f5e88185f526004601cfd5b5f9055610edc816114f1565b50565b610ee76114d7565b8060601b610efc57637448fbae5f526004601cfd5b610edc816114f1565b610f0d6114d7565b610edc338261144e565b6001600160a01b038316610f925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610c5e565b6001600160a01b03821661100e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610c5e565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146110f957818110156110ec5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c5e565b6110f98484848403610f17565b50505050565b6001600160a01b03831661117b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c5e565b6001600160a01b0382166111f75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c5e565b6001600160a01b0383165f90815260208190526040902054818110156112855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610c5e565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36110f9565b6001600160a01b0382166113665760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610c5e565b6001600160a01b0382165f90815260208190526040902054818110156113f45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610c5e565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611062565b505050565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611497576040519150601f19603f3d011682016040523d82523d5f602084013e61149c565b606091505b5050905080611449576040517f4c1cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b638b78c6d81954331461094b576382b429005f526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b6115388282611557565b8060085f82825461154991906117ca565b90915550610b7d9050610a47565b6001600160a01b0382166115ad5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c5e565b8060025f8282546115be91906117ca565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610edc575f80fd5b5f806040838503121561166e575f80fd5b823561167981611649565b946020939093013593505050565b5f805f60608486031215611699575f80fd5b83356116a481611649565b925060208401356116b481611649565b929592945050506040919091013590565b5f602082840312156116d5575f80fd5b5035919050565b5f602082840312156116ec575f80fd5b81356116f781611649565b9392505050565b5f806040838503121561170f575f80fd5b823561171a81611649565b9150602083013561172a81611649565b809150509250929050565b600181811c9082168061174957607f821691505b60208210810361176757634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106765761067661176d565b5f826117b257634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156106765761067661176d565b808201808211156106765761067661176d565b5f602082840312156117ed575f80fd5b5051919050565b5f60208284031215611804575f80fd5b815180151581146116f7575f80fdfea164736f6c634300081a000a0000000000000000000000004200000000000000000000000000000000000006000000000000000000000000b06a64615842cba9b3bdb7e6f726f3a5bd20dac2