60806040526000805460ff191690556005805460ff60a01b191690553480156200002857600080fd5b506200003c6001600160e01b036200005516565b6200004f6001600160e01b036200010e16565b62000262565b60005460ff1615620000c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60048054336001600160a01b031991821681179092556005805482169055600680548216905560006002819055600880549092169092179055805460ff19166001179055565b6004546001600160a01b031633146200018857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6f6e6c794f776e65720000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff16156200021357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f616c7265616479205f7061757365640000000000000000000000000000000000604482015290519081900360640190fd5b6005805460ff60a01b1916740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b611dde80620002726000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063a0712d68116100a2578063d051665011610071578063d051665014610580578063d153b60c146105a6578063dd62ed3e146105ae578063e2f72f03146105dc576101f0565b8063a0712d68146104e5578063a457c2d714610502578063a9059cbb1461052e578063b5ed298a1461055a576101f0565b80638456cb59116100de5780638456cb59146104af5780638d1fdf2f146104b75780638da5cb5b146104dd57806395d89b41146101ff576101f0565b806370a082311461042f57806379cc6790146104555780638129fc1c1461048157806382ac5a0d14610489576101f0565b80633f4ba83a116101875780634e71e0c8116101565780634e71e0c8146103f1578063519dd153146103f957806355cc4e57146104015780635c975abb14610427576101f0565b80633f4ba83a1461037a57806342966c6814610382578063449a52f81461039f57806345c8b1a6146103cb576101f0565b80631d143848116101c35780631d143848146102d657806323b872dd146102fa578063313ce56714610330578063395093511461034e576101f0565b806303acb448146101f557806306fdde03146101ff578063095ea7b31461027c57806318160ddd146102bc575b600080fd5b6101fd610602565b005b610207610709565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610241578181015183820152602001610229565b50505050905090810190601f16801561026e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a86004803603604081101561029257600080fd5b506001600160a01b038135169060200135610727565b604080519115158252519081900360200190f35b6102c461078d565b60408051918252519081900360200190f35b6102de610793565b604080516001600160a01b039092168252519081900360200190f35b6102a86004803603606081101561031057600080fd5b506001600160a01b038135811691602081013590911690604001356107a2565b6103386108d2565b6040805160ff9092168252519081900360200190f35b6102a86004803603604081101561036457600080fd5b506001600160a01b0381351690602001356108d7565b6101fd610918565b6102a86004803603602081101561039857600080fd5b50356109ed565b6102a8600480360360408110156103b557600080fd5b506001600160a01b038135169060200135610aae565b6101fd600480360360208110156103e157600080fd5b50356001600160a01b0316610b07565b6101fd610c11565b6102de610cc4565b6101fd6004803603602081101561041757600080fd5b50356001600160a01b0316610cd3565b6102a8610dbf565b6102c46004803603602081101561044557600080fd5b50356001600160a01b0316610dcf565b6102a86004803603604081101561046b57600080fd5b506001600160a01b038135169060200135610dea565b6101fd610fa3565b6101fd6004803603602081101561049f57600080fd5b50356001600160a01b0316611037565b6101fd611107565b6101fd600480360360208110156104cd57600080fd5b50356001600160a01b03166111e1565b6102de6112e8565b6102a8600480360360208110156104fb57600080fd5b50356112f7565b6102a86004803603604081101561051857600080fd5b506001600160a01b03813516906020013561135c565b6102a86004803603604081101561054457600080fd5b506001600160a01b038135169060200135611398565b6101fd6004803603602081101561057057600080fd5b50356001600160a01b03166113f5565b6102a86004803603602081101561059657600080fd5b50356001600160a01b031661153a565b6102de611558565b6102c4600480360360408110156105c457600080fd5b506001600160a01b0381358116916020013516611567565b6101fd600480360360208110156105f257600080fd5b50356001600160a01b0316611592565b6005546001600160a01b031633148061062557506004546001600160a01b031633145b610676576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792070726f706f7365644f776e6572206f72206f776e65720000000000604482015290519081900360640190fd5b6005546001600160a01b03166106bd5760405162461bcd60e51b815260040180806020018281038252603b815260200180611d6f603b913960400191505060405180910390fd5b600580546001600160a01b031981169091556040516001600160a01b039091169081907f24f4590b0077912a4db89e7430de7986175c27bede1b47ee039e3b421c2e798e90600090a250565b6040805180820190915260048152630868288b60e31b602082015290565b600554600090600160a01b900460ff1615610779576040805162461bcd60e51b815260206004820152600d60248201526c1dda195b939bdd14185d5cd959609a1b604482015290519081900360640190fd5b6107843384846116a6565b50600192915050565b60025490565b6008546001600160a01b031690565b600554600090600160a01b900460ff16156107f4576040805162461bcd60e51b815260206004820152600d60248201526c1dda195b939bdd14185d5cd959609a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600360209081526040808320338452909152902054821115610865576040805162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e7420616c6c6f77616e636560501b604482015290519081900360640190fd5b6001600160a01b0384166000908152600360209081526040808320338452909152902054610899908363ffffffff6117d116565b6001600160a01b03851660009081526003602090815260408083203384529091529020556108c88484846117e6565b5060019392505050565b600690565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610784918590610913908663ffffffff6119e116565b6116a6565b6004546001600160a01b03163314610963576040805162461bcd60e51b815260206004820152600960248201526837b7363ca7bbb732b960b91b604482015290519081900360640190fd5b600554600160a01b900460ff166109b5576040805162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481d5b97dc185d5cd959607a1b604482015290519081900360640190fd5b6005805460ff60a01b191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b3360009081526007602052604081205460ff1615610a43576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b33600090815260016020526040902054821115610a9c576040805162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b610aa633836119fa565b506001919050565b6008546000906001600160a01b03163314610afd576040805162461bcd60e51b815260206004820152600a60248201526937b7363ca4b9b9bab2b960b11b604482015290519081900360640190fd5b6107848383611ad0565b6006546001600160a01b03163314610b5b576040805162461bcd60e51b81526020600482015260126024820152716f6e6c79436f6d706c69616e6365526f6c6560701b604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610bc8576040805162461bcd60e51b815260206004820152601860248201527f6164647265737320616c726561647920756e66726f7a656e0000000000000000604482015290519081900360640190fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055517f150465b020dfc06a59269da94ed66db9b65a516cf4fdd5f583b0f12752339bbe9190a250565b6005546001600160a01b03163314610c64576040805162461bcd60e51b815260206004820152601160248201527037b7363ca83937b837b9b2b227bbb732b960791b604482015290519081900360640190fd5b60048054600580546001600160a01b03198084166001600160a01b038381169190911795869055911690915560405191811692169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6006546001600160a01b031690565b6004546001600160a01b03163314610d1e576040805162461bcd60e51b815260206004820152600960248201526837b7363ca7bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038116610d635760405162461bcd60e51b8152600401808060200182810382526021815260200180611d256021913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907ff7189b85d7899f5a32d733e6584c4f1dcdff0274f09d969d186c1797673ede1190600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b600554600160a01b900460ff1690565b6001600160a01b031660009081526001602052604090205490565b6001600160a01b03821660009081526007602052604081205460ff16158015610e2357503360009081526007602052604090205460ff16155b610e65576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054821115610ec7576040805162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b6001600160a01b0383166000908152600360209081526040808320338452909152902054821115610f38576040805162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e7420616c6c6f77616e636560501b604482015290519081900360640190fd5b610f4283836119fa565b6001600160a01b0383166000908152600360209081526040808320338452909152902054610f76908363ffffffff6117d116565b6001600160a01b038416600090815260036020908152604080832033845290915290205550600192915050565b60005460ff1615610ff1576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60048054336001600160a01b031991821681179092556005805482169055600680548216905560006002819055600880549092169092179055805460ff19166001179055565b6006546001600160a01b031633148061105a57506004546001600160a01b031633145b6110ab576040805162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920636f6d706c69616e6365526f6c65206f72204f776e657200000000604482015290519081900360640190fd5b6006546040516001600160a01b038084169216907f31b58ff3d01f61690b2faab8df1864d6eee3f4d17434dbcdb436136d8deb2d2f90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314611152576040805162461bcd60e51b815260206004820152600960248201526837b7363ca7bbb732b960b91b604482015290519081900360640190fd5b600554600160a01b900460ff16156111a3576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4817dc185d5cd959608a1b604482015290519081900360640190fd5b6005805460ff60a01b1916600160a01b1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6006546001600160a01b03163314611235576040805162461bcd60e51b81526020600482015260126024820152716f6e6c79436f6d706c69616e6365526f6c6560701b604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff161561129c576040805162461bcd60e51b815260206004820152601660248201527530b2323932b9b99030b63932b0b23c90333937bd32b760511b604482015290519081900360640190fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055517f1aa660498c83ea285bc55e4cfc00afcaa7120798db87b74f3c0d7c6e001bc3929190a250565b6004546001600160a01b031690565b6008546000906001600160a01b03163314611346576040805162461bcd60e51b815260206004820152600a60248201526937b7363ca4b9b9bab2b960b11b604482015290519081900360640190fd5b600854610aa6906001600160a01b031683611ad0565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610784918590610913908663ffffffff6117d116565b600554600090600160a01b900460ff16156113ea576040805162461bcd60e51b815260206004820152600d60248201526c1dda195b939bdd14185d5cd959609a1b604482015290519081900360640190fd5b6107843384846117e6565b6004546001600160a01b03163314611440576040805162461bcd60e51b815260206004820152600960248201526837b7363ca7bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166114855760405162461bcd60e51b8152600401808060200182810382526029815260200180611cfc6029913960400191505060405180910390fd5b336001600160a01b03821614156114e3576040805162461bcd60e51b815260206004820152601760248201527f63616c6c657220616c7265616479206973206f776e6572000000000000000000604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b038381169190911791829055600454604051928216929116907ff4e75b79500ab730f8a026ed3cba6d55331bcb64c9e9f60c548e371356e5e3c090600090a350565b6001600160a01b031660009081526007602052604090205460ff1690565b6005546001600160a01b031690565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6006546001600160a01b031633146115e6576040805162461bcd60e51b81526020600482015260126024820152716f6e6c79436f6d706c69616e6365526f6c6560701b604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff1661164b576040805162461bcd60e51b815260206004820152601560248201527430b2323932b9b99034b9903737ba10333937bd32b760591b604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205461166e82826119fa565b6040516001600160a01b038316907f71e13dfaf69fe3a65acef6b6eff085b0d60c7b3ebf229bda2e2fd3e8c5d1839690600090a25050565b6001600160a01b03831660009081526007602052604090205460ff161580156116e857506001600160a01b03821660009081526007602052604090205460ff16155b61172a576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b6001600160a01b03821661176f5760405162461bcd60e51b8152600401808060200182810382526029815260200180611d466029913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000828211156117e057600080fd5b50900390565b6001600160a01b038216611841576040805162461bcd60e51b815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205460ff1615801561188357506001600160a01b03821660009081526007602052604090205460ff16155b6118c5576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054811115611927576040805162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054611950908263ffffffff6117d116565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611985908263ffffffff6119e116565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000828201838110156119f357600080fd5b9392505050565b600254611a0d908263ffffffff6117d116565b6002556001600160a01b038216600090815260016020526040902054611a39908263ffffffff6117d116565b6001600160a01b038316600081815260016020908152604091829020939093558051848152905191927fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca592918290030190a26040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6008546001600160a01b03163314611b1c576040805162461bcd60e51b815260206004820152600a60248201526937b7363ca4b9b9bab2b960b11b604482015290519081900360640190fd5b600554600160a01b900460ff1615611b6b576040805162461bcd60e51b815260206004820152600d60248201526c1dda195b939bdd14185d5cd959609a1b604482015290519081900360640190fd5b6001600160a01b038216611bc6576040805162461bcd60e51b815260206004820152601b60248201527f63616e6e6f74206d696e7420746f2061646472657373207a65726f0000000000604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604090205460ff1615611c25576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b600254611c38908263ffffffff6119e116565b6002556001600160a01b038216600090815260016020526040902054611c64908263ffffffff6119e116565b6001600160a01b038316600081815260016020908152604091829020939093558051848152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe63616e6e6f74207472616e73666572206f776e65727368697020746f2061646472657373207a65726f63616e6e6f74207365742069737375657220746f2061646472657373207a65726f63616e6e6f7420617070726f766520616c6c6f77616e636520666f72207a65726f206164647265737363616e206f6e6c792064697372656761726420612070726f706f736564206f776e65722074686174207761732070726576696f75736c7920736574a265627a7a72315820994ca15c5553f37d27e0760d5760ef0dec21988414328573ccec24f07ddffc9264736f6c634300050b0032