60806040526000600555600060065562ab630060075562278d00600a556000600b5534801561002d57600080fd5b50604051611ca7380380611ca78339818101604052606081101561005057600080fd5b508051602082015160409092015160018055909190600061006f610102565b600280546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600380546001600160a01b039384166001600160a01b031991821617909155600480549284169282169290921790915560008054939092169216919091179055610106565b3390565b611b92806101156000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c806380faa57d1161010f578063c8f33c91116100a2578063df136d6511610071578063df136d6514610414578063e9fad8ee1461041c578063ebe2b12b14610424578063f2fde38b1461042c576101e4565b8063c8f33c91146103df578063cc1a378f146103e7578063cd3daf9d14610404578063d1af0c7d1461040c576101e4565b80638cda0202116100de5780638cda02021461038c5780638da5cb5b14610394578063a694fc3a1461039c578063c57a202c146103b9576101e4565b806380faa57d1461032a57806386989038146103325780638980f11f1461033a5780638b87634714610366576101e4565b80633d18b9121161018757806370a082311161015657806370a08231146102ec578063715018a61461031257806372f702f31461031a5780637b0a47ee14610322576101e4565b80633d18b9121461029b5780633fc6df6e146102a35780633fd8b02f146102c757806354f3163e146102cf576101e4565b80631c1f78eb116101c35780631c1f78eb1461024f5780632e1a7d4d14610257578063386a9525146102765780633c6b16ab1461027e576101e4565b80628cc262146101e95780630700037d1461022157806318160ddd14610247575b600080fd5b61020f600480360360208110156101ff57600080fd5b50356001600160a01b0316610452565b60408051918252519081900360200190f35b61020f6004803603602081101561023757600080fd5b50356001600160a01b03166104d0565b61020f6104e2565b61020f6104e9565b6102746004803603602081101561026d57600080fd5b5035610507565b005b61020f610716565b6102746004803603602081101561029457600080fd5b503561071c565b610274610968565b6102ab610a9e565b604080516001600160a01b039092168252519081900360200190f35b61020f610aad565b610274600480360360208110156102e557600080fd5b5035610ab3565b61020f6004803603602081101561030257600080fd5b50356001600160a01b0316610d7d565b610274610d98565b6102ab610e6e565b61020f610e7d565b61020f610e83565b61020f610e91565b6102746004803603604081101561035057600080fd5b506001600160a01b038135169060200135610e97565b61020f6004803603602081101561037c57600080fd5b50356001600160a01b0316610fec565b610274610ffe565b6102ab611021565b610274600480360360208110156103b257600080fd5b5035611030565b61020f600480360360208110156103cf57600080fd5b50356001600160a01b0316611209565b61020f61121b565b610274600480360360208110156103fd57600080fd5b5035611221565b61020f611331565b6102ab61137f565b61020f61138e565b610274611394565b61020f6113ad565b6102746004803603602081101561044257600080fd5b50356001600160a01b03166113b3565b6001600160a01b0381166000908152600d6020908152604080832054600c9092528220546104ca91906104c490670de0b6b3a7640000906104be9061049f90610499611331565b906114e0565b6001600160a01b0388166000908152601060205260409020549061153d565b9061159d565b90611604565b92915050565b600d6020526000908152604090205481565b600f545b90565b600061050260075460065461153d90919063ffffffff16565b905090565b6002600154141561055f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001553361056d611331565b600955610578610e83565b6008556001600160a01b038116156105bf5761059381610452565b6001600160a01b0382166000908152600d6020908152604080832093909355600954600c909152919020555b60008211610614576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b600a54336000908152600e602052604090205442916106339190611604565b1061066f5760405162461bcd60e51b8152600401808060200182810382526024815260200180611b396024913960400191505060405180910390fd5b600f5461067c90836114e0565b600f553360009081526010602052604090205461069990836114e0565b3360009081526010602052604090208190556106c157600b546106bd9060016114e0565b600b555b6004546106d8906001600160a01b0316338461165e565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a2505060018055565b60075481565b6000546001600160a01b031633146107655760405162461bcd60e51b815260040180806020018281038252602a815260200180611ae5602a913960400191505060405180910390fd5b600061076f611331565b60095561077a610e83565b6008556001600160a01b038116156107c15761079581610452565b6001600160a01b0382166000908152600d6020908152604080832093909355600954600c909152919020555b60055442106107e0576007546107d890839061159d565b600655610823565b6005546000906107f090426114e0565b905060006108096006548361153d90919063ffffffff16565b60075490915061081d906104be8684611604565b60065550505b600354604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561088757600080fd5b505afa15801561089b573d6000803e3d6000fd5b505050506040513d60208110156108b157600080fd5b50516007549091506108c490829061159d565b600654111561091a576040805162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f20686967680000000000000000604482015290519081900360640190fd5b42600881905560075461092d9190611604565b6005556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1505050565b600260015414156109c0576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155336109ce611331565b6009556109d9610e83565b6008556001600160a01b03811615610a20576109f481610452565b6001600160a01b0382166000908152600d6020908152604080832093909355600954600c909152919020555b336000908152600d60205260409020548015610a9657336000818152600d6020526040812055600354610a5f916001600160a01b03909116908361165e565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b505060018055565b6000546001600160a01b031681565b600a5481565b60026001541415610b0b576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015533610b19611331565b600955610b24610e83565b6008556001600160a01b03811615610b6b57610b3f81610452565b6001600160a01b0382166000908152600d6020908152604080832093909355600954600c909152919020555b60008211610bc0576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b600a54336000908152600e60205260409020544291610bdf9190611604565b11610c1b5760405162461bcd60e51b8152600401808060200182810382526024815260200180611b396024913960400191505060405180910390fd5b600f54610c2890836114e0565b600f556000610c3d60646104be85602861153d565b33600090815260106020526040902054909150610c5a90846114e0565b336000908152601060205260409020819055610c8257600b54610c7e9060016114e0565b600b555b600454610c99906001600160a01b0316338361165e565b6004546000906001600160a01b031663a9059cbb61dead610cba87866114e0565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610d0057600080fd5b505af1158015610d14573d6000803e3d6000fd5b505050506040513d6020811015610d2a57600080fd5b50519050600181151514610d3d57600080fd5b60408051858152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050600180555050565b6001600160a01b031660009081526010602052604090205490565b610da06116e3565b6001600160a01b0316610db1611021565b6001600160a01b031614610e0c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6004546001600160a01b031681565b60065481565b6000610502426005546116e7565b600b5481565b610e9f6116e3565b6001600160a01b0316610eb0611021565b6001600160a01b031614610f0b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6004546001600160a01b03838116911614801590610f3757506003546001600160a01b03838116911614155b610f88576040805162461bcd60e51b815260206004820152600c60248201527f746f6b656e416464726573730000000000000000000000000000000000000000604482015290519081900360640190fd5b610fa4610f93611021565b6001600160a01b038416908361165e565b604080516001600160a01b03841681526020810183905281517f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28929181900390910190a15050565b600c6020526000908152604090205481565b3360009081526010602052604090205461101790610ab3565b61101f610968565b565b6002546001600160a01b031690565b60026001541415611088576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015533611096611331565b6009556110a1610e83565b6008556001600160a01b038116156110e8576110bc81610452565b6001600160a01b0382166000908152600d6020908152604080832093909355600954600c909152919020555b6000821161113d576040805162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b600f5461114a9083611604565b600f553360009081526010602052604090205461117357600b5461116f906001611604565b600b555b3360009081526010602052604090205461118d9083611604565b336000818152601060205260409020919091556004546111ba916001600160a01b039091169030856116fd565b336000818152600e6020908152604091829020429055815185815291517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9281900390910190a2505060018055565b600e6020526000908152604090205481565b60085481565b6112296116e3565b6001600160a01b031661123a611021565b6001600160a01b031614611295576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60055415806112a5575060055442115b6112f6576040805162461bcd60e51b815260206004820152600660248201527f706572696f640000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60078190556040805182815290517ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39181900360200190a150565b6000600f546000141561134757506009546104e6565b610502611376600f546104be670de0b6b3a7640000611370600654611370600854610499610e83565b9061153d565b60095490611604565b6003546001600160a01b031681565b60095481565b3360009081526010602052604090205461101790610507565b60055481565b6113bb6116e3565b6001600160a01b03166113cc611021565b6001600160a01b031614611427576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661146c5760405162461bcd60e51b8152600401808060200182810382526026815260200180611a786026913960400191505060405180910390fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600082821115611537576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261154c575060006104ca565b8282028284828161155957fe5b04146115965760405162461bcd60e51b8152600401808060200182810382526021815260200180611ac46021913960400191505060405180910390fd5b9392505050565b60008082116115f3576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816115fc57fe5b049392505050565b600082820183811015611596576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526116de90849061178b565b505050565b3390565b60008183106116f65781611596565b5090919050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261178590859061178b565b50505050565b60606117e0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661183c9092919063ffffffff16565b8051909150156116de578080602001905160208110156117ff57600080fd5b50516116de5760405162461bcd60e51b815260040180806020018281038252602a815260200180611b0f602a913960400191505060405180910390fd5b606061184b8484600085611853565b949350505050565b6060824710156118945760405162461bcd60e51b8152600401808060200182810382526026815260200180611a9e6026913960400191505060405180910390fd5b61189d856119cd565b6118ee576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061194b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161190e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146119ad576040519150601f19603f3d011682016040523d82523d6000602084013e6119b2565b606091505b50915091506119c28282866119d3565b979650505050505050565b3b151590565b606083156119e2575081611596565b8251156119f25782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a3c578181015183820152602001611a24565b50505050905090810190601f168015611a695780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742052657761726473446973747269627574696f6e20636f6e74726163745361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645769746864726177206e6f7420706f737369626c6520696e206c6f636b20706572696f64a2646970667358221220e095ecd7e95d323a1d52f554f4d545f9e300f67f97315eb46aa3b0d9818a95d564736f6c63430007000033000000000000000000000000df11c9bbd8a0956ad881f50d0901987fa157c5c60000000000000000000000007659ce147d0e714454073a5dd7003544234b6aa00000000000000000000000003fa5db0910afc2a1e6de45039ea217410fb8641d