60806040523480156200001157600080fd5b50604080518082018252601481527f436c656172696e67486f7572736520546f6b656e00000000000000000000000060208083019190915282518084018452600381526208698960eb1b8183015283516000815291820190935290919062000079336200024c565b6003620000878482620003c2565b506004620000968382620003c2565b508051620000ac9060059060208401906200029c565b5060005b81518110156200011c57600160066000848481518110620000d557620000d56200048e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806200011381620004a4565b915050620000b0565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156200019757600080fd5b505af1158015620001ac573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b1580156200022a57600080fd5b505af11580156200023f573d6000803e3d6000fd5b50505050505050620004cc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215620002f4579160200282015b82811115620002f457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620002bd565b506200030292915062000306565b5090565b5b8082111562000302576000815560010162000307565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200034857607f821691505b6020821081036200036957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bd57600081815260208120601f850160051c81016020861015620003985750805b601f850160051c820191505b81811015620003b957828155600101620003a4565b5050505b505050565b81516001600160401b03811115620003de57620003de6200031d565b620003f681620003ef845462000333565b846200036f565b602080601f8311600181146200042e5760008415620004155750858301515b600019600386901b1c1916600185901b178555620003b9565b600085815260208120601f198616915b828110156200045f578886015182559484019460019091019084016200043e565b50858210156200047e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600060018201620004c557634e487b7160e01b600052601160045260246000fd5b5060010190565b611b9380620004dc6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063d95b63711161007c578063d95b6371146102ab578063dd62ed3e146102be578063f2fde38b146102f7578063fad8b32a1461030a578063fc673c4f1461031d578063fe9d93031461033057600080fd5b8063715018a6146102475780638da5cb5b1461024f578063959b8c3f1461026a57806395d89b411461027d5780639bd9bbc614610285578063a9059cbb1461029857600080fd5b8063313ce56711610115578063313ce567146101cd57806340c10f19146101dc57806342966c68146101f1578063556f0dc71461020457806362ad1b831461020b57806370a082311461021e57600080fd5b806306e485381461015257806306fdde0314610170578063095ea7b31461018557806318160ddd146101a857806323b872dd146101ba575b600080fd5b61015a610343565b6040516101679190611589565b60405180910390f35b6101786103a5565b604051610167919061161c565b610198610193366004611644565b61042e565b6040519015158152602001610167565b6002545b604051908152602001610167565b6101986101c8366004611670565b610448565b60405160128152602001610167565b6101ef6101ea366004611644565b610611565b005b6101ef6101ff3660046116b1565b610669565b60016101ac565b6101ef61021936600461176d565b6106c0565b6101ac61022c366004611800565b6001600160a01b031660009081526001602052604090205490565b6101ef6106fc565b6000546040516001600160a01b039091168152602001610167565b6101ef610278366004611800565b610732565b61017861084f565b6101ef61029336600461181d565b61085e565b6101986102a6366004611644565b610881565b6101986102b9366004611876565b610934565b6101ac6102cc366004611876565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b6101ef610305366004611800565b6109d6565b6101ef610318366004611800565b610a6e565b6101ef61032b3660046118af565b610b89565b6101ef61033e36600461192f565b610bc1565b6060600580548060200260200160405190810160405280929190818152602001828054801561039b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161037d575b5050505050905090565b6060600380546103b490611976565b80601f01602080910402602001604051908101604052809291908181526020018280546103e090611976565b801561039b5780601f106104025761010080835404028352916020019161039b565b820191906000526020600020905b81548152906001019060200180831161041057509395945050505050565b60003361043c818585610bdc565b60019150505b92915050565b60006001600160a01b0383166104795760405162461bcd60e51b8152600401610470906119b0565b60405180910390fd5b6001600160a01b0384166104de5760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610470565b600033905061050f818686866040518060200160405280600081525060405180602001604052806000815250610d03565b61053b818686866040518060200160405280600081525060405180602001604052806000815250610e2b565b6001600160a01b03808616600090815260096020908152604080832093851683529290522054838110156105c35760405162461bcd60e51b815260206004820152602960248201527f4552433737373a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b6064820152608401610470565b6105d786836105d28785611a0a565b610bdc565b6106058287878760405180602001604052806000815250604051806020016040528060008152506000610f91565b50600195945050505050565b6000546001600160a01b0316331461063b5760405162461bcd60e51b815260040161047090611a1d565b61066582826040518060200160405280600081525060405180602001604052806000815250611156565b5050565b6000546001600160a01b031633146106935760405162461bcd60e51b815260040161047090611a1d565b6106bd33826040518060200160405280600081525060405180602001604052806000815250611164565b50565b6106ca3386610934565b6106e65760405162461bcd60e51b815260040161047090611a52565b6106f585858585856001611319565b5050505050565b6000546001600160a01b031633146107265760405162461bcd60e51b815260040161047090611a1d565b61073060006113fc565b565b6001600160a01b03811633036107965760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b6064820152608401610470565b6001600160a01b03811660009081526006602052604090205460ff16156107e7573360009081526008602090815260408083206001600160a01b03851684529091529020805460ff19169055610816565b3360009081526007602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b6060600480546103b490611976565b61087c33848484604051806020016040528060008152506001611319565b505050565b60006001600160a01b0383166108a95760405162461bcd60e51b8152600401610470906119b0565b60003390506108da818286866040518060200160405280600081525060405180602001604052806000815250610d03565b610906818286866040518060200160405280600081525060405180602001604052806000815250610e2b565b61043c8182868660405180602001604052806000815250604051806020016040528060008152506000610f91565b6000816001600160a01b0316836001600160a01b0316148061099f57506001600160a01b03831660009081526006602052604090205460ff16801561099f57506001600160a01b0380831660009081526008602090815260408083209387168352929052205460ff16155b806109cf57506001600160a01b0380831660009081526007602090815260408083209387168352929052205460ff165b9392505050565b6000546001600160a01b03163314610a005760405162461bcd60e51b815260040161047090611a1d565b6001600160a01b038116610a655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610470565b6106bd816113fc565b336001600160a01b03821603610ad05760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b6064820152608401610470565b6001600160a01b03811660009081526006602052604090205460ff1615610b24573360009081526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610b50565b3360009081526007602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b610b933385610934565b610baf5760405162461bcd60e51b815260040161047090611a52565b610bbb84848484611164565b50505050565b61066533838360405180602001604052806000815250611164565b6001600160a01b038316610c405760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610470565b6001600160a01b038216610ca25760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610470565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da89190611a9e565b90506001600160a01b03811615610e2257604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610def908a908a908a908a908a908a90600401611abb565b600060405180830381600087803b158015610e0957600080fd5b505af1158015610e1d573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b03851660009081526001602052604090205483811015610ea45760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b6064820152608401610470565b6001600160a01b03808716600090815260016020526040808220878503905591871681529081208054869290610edb908490611b15565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610f3393929190611b28565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610f8091815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015611012573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110369190611a9e565b90506001600160a01b038116156110b2576040516223de2960e01b81526001600160a01b038216906223de299061107b908b908b908b908b908b908b90600401611abb565b600060405180830381600087803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b5050505061114c565b811561114c576001600160a01b0386163b1561114c5760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a401610470565b5050505050505050565b610bbb84848484600161144c565b6001600160a01b0384166111c55760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610470565b336111d581866000878787610d03565b6001600160a01b0385166000908152600160205260409020548481101561124a5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b6064820152608401610470565b6001600160a01b0386166000908152600160205260408120868303905560028054879290611279908490611a0a565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516112c793929190611b28565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050505050565b6001600160a01b03861661137a5760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610470565b6001600160a01b0385166113d05760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f20616464726573736044820152606401610470565b336113df818888888888610d03565b6113ed818888888888610e2b565b610e2281888888888888610f91565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0385166114a25760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f20616464726573736044820152606401610470565b600033905084600260008282546114b99190611b15565b90915550506001600160a01b038616600090815260016020526040812080548792906114e6908490611b15565b909155506114fc90508160008888888888610f91565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d87878760405161154393929190611b28565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611309565b6020808252825182820181905260009190848201906040850190845b818110156115ca5783516001600160a01b0316835292840192918401916001016115a5565b50909695505050505050565b6000815180845260005b818110156115fc576020818501810151868301820152016115e0565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109cf60208301846115d6565b6001600160a01b03811681146106bd57600080fd5b6000806040838503121561165757600080fd5b82356116628161162f565b946020939093013593505050565b60008060006060848603121561168557600080fd5b83356116908161162f565b925060208401356116a08161162f565b929592945050506040919091013590565b6000602082840312156116c357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126116f157600080fd5b813567ffffffffffffffff8082111561170c5761170c6116ca565b604051601f8301601f19908116603f01168101908282118183101715611734576117346116ca565b8160405283815286602085880101111561174d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a0868803121561178557600080fd5b85356117908161162f565b945060208601356117a08161162f565b935060408601359250606086013567ffffffffffffffff808211156117c457600080fd5b6117d089838a016116e0565b935060808801359150808211156117e657600080fd5b506117f3888289016116e0565b9150509295509295909350565b60006020828403121561181257600080fd5b81356109cf8161162f565b60008060006060848603121561183257600080fd5b833561183d8161162f565b925060208401359150604084013567ffffffffffffffff81111561186057600080fd5b61186c868287016116e0565b9150509250925092565b6000806040838503121561188957600080fd5b82356118948161162f565b915060208301356118a48161162f565b809150509250929050565b600080600080608085870312156118c557600080fd5b84356118d08161162f565b935060208501359250604085013567ffffffffffffffff808211156118f457600080fd5b611900888389016116e0565b9350606087013591508082111561191657600080fd5b50611923878288016116e0565b91505092959194509250565b6000806040838503121561194257600080fd5b82359150602083013567ffffffffffffffff81111561196057600080fd5b61196c858286016116e0565b9150509250929050565b600181811c9082168061198a57607f821691505b6020821081036119aa57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610442576104426119f4565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b600060208284031215611ab057600080fd5b81516109cf8161162f565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090611af6908301856115d6565b82810360a0840152611b0881856115d6565b9998505050505050505050565b80820180821115610442576104426119f4565b838152606060208201526000611b4160608301856115d6565b8281036040840152611b5381856115d6565b969550505050505056fea2646970667358221220f85aa596cfa2e1d6f89a8d133b26b7bc01aa695310417786bfbdbf9e8e24d88964736f6c63430008130033