[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "uint256", "name": "eventLength", "type": "uint256" }, { "internalType": "uint256", "name": "currentDay", "type": "uint256" } ], "name": "ATMEventIsOver", "type": "error" }, { "inputs": [], "name": "ATMNotActive", "type": "error" }, { "inputs": [], "name": "ATMPointsToSmall", "type": "error" }, { "inputs": [], "name": "AsicMinerToLarge", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "eventLength", "type": "uint256" }, { "internalType": "uint256", "name": "currentDay", "type": "uint256" } ], "name": "CannotEndATMWithinEventPeriod", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "servedDays", "type": "uint256" }, { "internalType": "uint256", "name": "requiredDays", "type": "uint256" } ], "name": "CannotEndMinerEarly", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "available", "type": "uint256" }, { "internalType": "uint256", "name": "required", "type": "uint256" } ], "name": "InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "sent", "type": "uint256" }, { "internalType": "uint256", "name": "minRequired", "type": "uint256" } ], "name": "InvalidAmount", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "sentId", "type": "uint256" }, { "internalType": "uint256", "name": "expectedId", "type": "uint256" } ], "name": "InvalidMinerId", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "sentIndex", "type": "uint256" }, { "internalType": "uint256", "name": "lastIndex", "type": "uint256" } ], "name": "InvalidMinerIndex", "type": "error" }, { "inputs": [], "name": "InvalidToken", "type": "error" }, { "inputs": [], "name": "MinerListEmpty", "type": "error" }, { "inputs": [], "name": "NotOwnerOfATM", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "data0", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "uint40", "name": "atmId", "type": "uint40" } ], "name": "ATMEnd", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "data0", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "uint40", "name": "atmId", "type": "uint40" }, { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" } ], "name": "ATMStart", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "data0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "data1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "accountant", "type": "address" }, { "indexed": true, "internalType": "uint40", "name": "minerId", "type": "uint40" } ], "name": "MinerEnd", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "data0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "data1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "uint40", "name": "minerId", "type": "uint40" } ], "name": "MinerStart", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asic", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "atm", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "atmId", "type": "uint256" } ], "name": "atmCurrentPayout", "outputs": [ { "internalType": "uint256", "name": "payout", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "atmId", "type": "uint256" } ], "name": "atmEnd", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "atmList", "outputs": [ { "internalType": "uint248", "name": "points", "type": "uint248" }, { "internalType": "bool", "name": "isActive", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "atmMultiplier", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "tokenAddress", "type": "address" } ], "name": "atmStart", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "bitoshis", "type": "uint256" } ], "name": "calcPayoutAndFee", "outputs": [ { "internalType": "uint256", "name": "pSatoshisMine", "type": "uint256" }, { "internalType": "uint256", "name": "bitoshisBurn", "type": "uint256" }, { "internalType": "uint256", "name": "bitoshisReturn", "type": "uint256" }, { "internalType": "bool", "name": "isHalving", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentDay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentHalvingThreshold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minerAddress", "type": "address" } ], "name": "minerCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minerIndex", "type": "uint256" }, { "internalType": "uint256", "name": "minerId", "type": "uint256" }, { "internalType": "address", "name": "minerAddr", "type": "address" } ], "name": "minerEnd", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "minerList", "outputs": [ { "internalType": "uint128", "name": "bitoshisMiner", "type": "uint128" }, { "internalType": "uint128", "name": "bitoshisReturned", "type": "uint128" }, { "internalType": "uint96", "name": "pSatoshisMined", "type": "uint96" }, { "internalType": "uint96", "name": "bitoshisBurned", "type": "uint96" }, { "internalType": "uint40", "name": "minerId", "type": "uint40" }, { "internalType": "uint24", "name": "day", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "bitoshisMiner", "type": "uint256" } ], "name": "minerStart", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "miningFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "miningRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numOfHalvings", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "previousHalvingThresold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalpSatoshisMined", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
60e06040523480156200001157600080fd5b506040518060400160405280600c81526020016b283ab639b2a134ba31b7b4b760a11b81525060405180604001604052806004815260200163282629a160e11b8152508160039081620000659190620003ae565b506004620000748282620003ae565b50506001600555506040516200008a90620002ed565b604051809103906000f080158015620000a7573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b03929092169182179055608052604051620000d890620002fb565b604051809103906000f080158015620000f5573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b0392909216918217905560a0524260c0526000600c556200013760026801236efcbcbb3400006200047a565b600d556001600f556103e862000157670de0b6b3a7640000604b6200049d565b6200016391906200047a565b6009556127106200017e670de0b6b3a764000060196200049d565b6200018a91906200047a565b600a5560126020527fdff4779843ee82a314bdb617300dfa7ec1ba3ae22697fa68aa45f88d113b396b80546001600160a01b0319908116733416cf6c708da44db2624d63ea0aaef7113527c6179091557fd0591cba1ff2238860912f8564a4314013bb66936961d8b22688e091849fa11280548216735777d92f208679db4b9778590fa3cab3ac9e21681790557f77671afb7cfec5dad42bb82d54c0f65aa9aa8eccd07e6a9d88ed99b66e400da5805482167388e6a0c2ddd26feeb64f039a2c41296fcb3f56401790557f28ffa45c56f1254117222adbe46f20505312242dd998a3e062e6e667730d97fa805482167369d91b94f0aaf8e8a2586909fa77a5c2c89818d5179055733819f64f282bf135d62168c1e513280daf905e066000527fc72ce3c3cadbcd5be1e2a91c3b5d7e34023f08a617caf93d1014e848ba9e6431805490911673e859041c9c6d70177f83de991b9d757e13cea26e179055620004cb565b611280806200337983390190565b61219580620045f983390190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200033457607f821691505b6020821081036200035557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003a957600081815260208120601f850160051c81016020861015620003845750805b601f850160051c820191505b81811015620003a55782815560010162000390565b5050505b505050565b81516001600160401b03811115620003ca57620003ca62000309565b620003e281620003db84546200031f565b846200035b565b602080601f8311600181146200041a5760008415620004015750858301515b600019600386901b1c1916600185901b178555620003a5565b600085815260208120601f198616915b828110156200044b578886015182559484019460019091019084016200042a565b50858210156200046a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826200049857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620004c657634e487b7160e01b600052601160045260246000fd5b500290565b60805160a05160c051612e46620005336000396000611d120152600081816112ef0152818161146f01526118520152600081816108a30152818161093201528181610a0601528181610f2701528181610fc6015281816110a401526113f40152612e466000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80639397cd7511610104578063a457c2d7116100a2578063c22ccc5e11610071578063c22ccc5e1461048b578063c87015801461049e578063dd62ed3e146104a7578063ff09b1ef146104ba57600080fd5b8063a457c2d7146103f8578063a9059cbb1461040b578063b7af876b1461041e578063ba0324631461048257600080fd5b80639aff309f116100de5780639aff309f146103885780639e8674dc146103915780639f24f9c4146103bc578063a327f4d1146103cf57600080fd5b80639397cd751461036457806395d89b411461036d5780639ae445aa1461037557600080fd5b8063313ce5671161017c5780636b7d3b491161014b5780636b7d3b49146102bf57806370a08231146102d4578063753c49e6146102fd578063781137fa1461035157600080fd5b8063313ce5671461028c578063395093511461029b5780635c9302c9146102ae5780635d536354146102b657600080fd5b806318160ddd116101b857806318160ddd1461025557806323b872dd1461026757806327959ea41461027a5780632c3678cc1461028357600080fd5b806306fdde03146101df578063095ea7b3146101fd5780630b5302c414610220575b600080fd5b6101e76104cd565b6040516101f4919061282a565b60405180910390f35b61021061020b366004612875565b61055f565b60405190151581526020016101f4565b61023361022e3660046128a1565b610579565b60408051948552602085019390935291830152151560608201526080016101f4565b6002545b6040519081526020016101f4565b6102106102753660046128ba565b6107d3565b610259600f5481565b61025960095481565b604051600c81526020016101f4565b6102106102a9366004612875565b6107f9565b61025961081b565b610259600b5481565b6102d26102cd3660046128a1565b61082a565b005b6102596102e23660046128fb565b6001600160a01b031660009081526020819052604090205490565b61033261030b3660046128a1565b6011602052600090815260409020546001600160f81b03811690600160f81b900460ff1682565b604080516001600160f81b0390931683529015156020830152016101f4565b6102d261035f366004612918565b610cd6565b610259600e5481565b6101e76111d7565b6102596103833660046128a1565b6111e6565b610259600a5481565b6007546103a4906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b6102596103ca3660046128a1565b61120c565b6102596103dd3660046128fb565b6001600160a01b031660009081526010602052604090205490565b610210610406366004612875565b611540565b610210610419366004612875565b6115c6565b61043161042c366004612875565b6115d4565b604080516001600160801b0397881681529690951660208701526001600160601b03938416948601949094529116606084015264ffffffffff16608083015262ffffff1660a082015260c0016101f4565b610259600c5481565b6006546103a4906001600160a01b031681565b610259600d5481565b6102596104b5366004612951565b611657565b6102596104c836600461298a565b611682565b6060600380546104dc906129af565b80601f0160208091040260200160405190810160405280929190818152602001828054610508906129af565b80156105555780601f1061052a57610100808354040283529160200191610555565b820191906000526020600020905b81548152906001019060200180831161053857829003601f168201915b5050505050905090565b60003361056d81858561199b565b60019150505b92915050565b600080600080680796e3ea3f8ab000008511156105a957604051637df9280560e01b815260040160405180910390fd5b670de0b6b3a7640000600954866105c091906129ff565b6105ca9190612a34565b9350600d5484600b546105dd9190612a48565b111561079c5760019050670de0b6b3a764000060026009546105ff9190612a34565b8587600d5488600b546106129190612a48565b61061c9190612a5b565b6106269089612a5b565b61063091906129ff565b61063a9190612a34565b6106449088612a5b565b61064e91906129ff565b6106589190612a34565b670de0b6b3a76400006009548688600d5489600b546106779190612a48565b6106819190612a5b565b61068b908a612a5b565b61069591906129ff565b61069f9190612a34565b6106a991906129ff565b6106b39190612a34565b6106bd9190612a48565b9350670de0b6b3a76400006002600a546106d79190612a34565b8587600d5488600b546106ea9190612a48565b6106f49190612a5b565b6106fe9089612a5b565b61070891906129ff565b6107129190612a34565b61071c9088612a5b565b61072691906129ff565b6107309190612a34565b670de0b6b3a7640000600a548688600d5489600b5461074f9190612a48565b6107599190612a5b565b610763908a612a5b565b61076d91906129ff565b6107779190612a34565b61078191906129ff565b61078b9190612a34565b6107959190612a48565b92506107c0565b670de0b6b3a7640000600a54866107b391906129ff565b6107bd9190612a34565b92505b6107ca8386612a5b565b91509193509193565b6000336107e1858285611abf565b6107ec858585611b39565b60019150505b9392505050565b60003361056d81858561080c8383611657565b6108169190612a48565b61199b565b6000610825611d07565b905090565b6002600554036108555760405162461bcd60e51b815260040161084c90612a6e565b60405180910390fd5b600260055564e8d4a5100081101561088e576040516307c83fcf60e41b81526004810182905264e8d4a51000602482015260440161084c565b6040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109169190612aa5565b8111156109c9576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a59190612aa5565b60405163cf47918160e01b815260048101919091526024810182905260440161084c565b6000806000806109d885610579565b604051632770a7eb60e21b8152336004820152602481018a9052939750919550935091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b5050505083600b6000828254610a749190612a48565b90915550508015610aff57600d54600c54600290610a929083612a5b565b610a9c9190612a34565b600d54610aa99190612a48565b600d55600c819055600954610ac090600290612a34565b600955600a54610ad290600290612a34565b600a55600e8054600090610ae590612abe565b90915550600f8054600090610af990612abe565b90915550505b6000610b09611d07565b9050610b19600880546001019055565b6000610b2460085490565b336000908152601060205260409020909150610c2f908886898986886040805160c0810182526001600160801b03978816815295871660208088019182526001600160601b039687169288019283529486166060880190815264ffffffffff9485166080890190815262ffffff94851660a08a019081528b5460018181018e5560009d8e5298909c20995193518b16600160801b0293909a16929092176002909a029097019889559051979093018054955193519651909116600160e81b026001600160e81b0396909216600160c01b02959095166001600160c01b03928416600160601b026001600160c01b03199095169690931695909517929092179190911617919091179055565b604080514264ffffffffff90811667ffffff0000000000602887901b161773ffffffffffffffffffffffff00000000000000008a851b16176001600160a01b031960a08a901b161782526001600160801b038a166001600160801b0319608089901b1617602083015283169133917fb835eb6eed5c55377b86134b41c9354047e0fc6c7582efe59648572fff81b364910160405180910390a3505060016005555050505050565b600260055403610cf85760405162461bcd60e51b815260040161084c90612a6e565b60026005556001600160a01b03811660009081526010602052604081208054909103610d3757604051639d941f7960e01b815260040160405180910390fd5b80548410610d745780548490610d4f90600190612a5b565b604051600162cd44db60e01b031981526004810192909252602482015260440161084c565b808481548110610d8657610d86612ad7565b6000918252602090912060029091020160010154600160c01b900464ffffffffff168314610e055782818581548110610dc157610dc1612ad7565b6000918252602090912060029091020160010154604051631fe7473560e01b81526004810192909252600160c01b900464ffffffffff16602482015260440161084c565b610e3e6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610ecc828681548110610e5357610e53612ad7565b906000526020600020906002020182600182015464ffffffffff600160c01b820416608083015291546001600160801b0380821683526001600160601b038085166040850152600160601b8504166060840152600160801b90910416602082015262ffffff600160e81b9092049190911660a090910152565b60008160a00151610edb611d07565b610ee59190612a5b565b9050601e811015610f135760405163de50ebd960e01b815260048101829052601e602482015260440161084c565b610f1e601e80612a48565b811115611078577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f193360028560200151610f669190612a34565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610fac57600080fd5b505af1158015610fc0573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1985600285602001516110059190612a34565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561104b57600080fd5b505af115801561105f573d6000803e3d6000fd5b5050505061107361dead8360400151611d41565b611110565b60208201516040516340c10f1960e01b81526001600160a01b03868116600483015260248201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b1580156110ea57600080fd5b505af11580156110fe573d6000803e3d6000fd5b50505050611110848360400151611d41565b61111a8387611e20565b816080015164ffffffffff16336001600160a01b03167fd3fd340b2f03159ddf95049eedb22400dec3358e9293504346f648c55108652060a085606001516001600160601b0316901b604086604001516001600160601b0316901b60288662ffffff16901b4264ffffffffff16171717608086602001516001600160801b0316901b86600001516001600160801b0316176040516111c2929190918252602082015260400190565b60405180910390a35050600160055550505050565b6060600480546104dc906129af565b600f546000828152601160205260408120549091610573916001600160f81b03166129ff565b60006002600554036112305760405162461bcd60e51b815260040161084c90612a6e565b6002600555601e61123f611d07565b1161127057601e61124e611d07565b604051636077e05960e01b81526004810192909252602482015260440161084c565b604080518082018252600080825260208083018281528683526011909152929020546001600160f81b0381168252600160f81b900460ff16151591829052906001146112cf5760405163a9dbd6bd60e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810184905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135a9190612aed565b6001600160a01b031614611381576040516332181adb60e01b815260040160405180910390fd5b600f548151600091611392916129ff565b6000808452602080850182905286825260119052604090209091506113d2908380516020909101511515600160f81b026001600160601b03909116179055565b8015611459576040516340c10f1960e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561144057600080fd5b505af1158015611454573d6000803e3d6000fd5b505050505b604051630852cd8d60e31b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b1580156114bb57600080fd5b505af11580156114cf573d6000803e3d6000fd5b505050508364ffffffffff16336001600160a01b03167f4ceede7ab397298db4e08659a00eb98042f4db567612eedce6c678c34fe175af6028846001600160d81b0316901b4264ffffffffff161760405161152c91815260200190565b60405180910390a360016005559392505050565b6000338161154e8286611657565b9050838110156115ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161084c565b6115bb828686840361199b565b506001949350505050565b60003361056d818585611b39565b601060205281600052604060002081815481106115f057600080fd5b6000918252602090912060029091020180546001909101546001600160801b038083169450600160801b90920490911691506001600160601b0380821691600160601b810490911690600160c01b810464ffffffffff1690600160e81b900462ffffff1686565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006002600554036116a65760405162461bcd60e51b815260040161084c90612a6e565b6002600555601e6116b5611d07565b11156116e757601e6116c5611d07565b60405163d9183b0160e01b81526004810192909252602482015260440161084c565b6001600160a01b038083166000818152601260205260408120549092839286929091169073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481480159061173557506001600160a01b038116155b156117535760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b03861673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48146117ec5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b038716016117cf576117ad6117a882611f86565b6120dd565b9350836117be88600160601b6129ff565b6117c89190612a34565b92506117f0565b6117db6117a882611f86565b9350600160601b6117be85896129ff565b8692505b6118196001600160a01b03831633737686640f09123394cd8dc3032e9927767ad893448a6120f7565b8260000361183a57604051636faf039560e01b815260040160405180910390fd5b6040516335313c2160e11b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636a627842906024016020604051808303816000875af11580156118a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c79190612aa5565b90506118d6620f4240856129ff565b935061192084826040805180820182526001600160f81b0393841681526001602080830191825260009485526011905291909220915190511515600160f81b029216919091179055565b866001600160a01b03168164ffffffffff16336001600160a01b03167f6efc06e415fa1e063ad1c9dfd9892adca242295da00df79181cdcb42518464ff6028886001600160d81b0316901b4264ffffffffff161760405161198391815260200190565b60405180910390a45050600160055550949350505050565b6001600160a01b0383166119fd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161084c565b6001600160a01b038216611a5e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161084c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611acb8484611657565b90506000198114611b335781811015611b265760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161084c565b611b33848484840361199b565b50505050565b6001600160a01b038316611b9d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161084c565b6001600160a01b038216611bff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161084c565b6001600160a01b03831660009081526020819052604090205481811015611c775760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161084c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611cae908490612a48565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cfa91815260200190565b60405180910390a3611b33565b600062015180611d377f000000000000000000000000000000000000000000000000000000000000000042612a5b565b6108259190612a34565b6001600160a01b038216611d975760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161084c565b8060026000828254611da99190612a48565b90915550506001600160a01b03821660009081526020819052604081208054839290611dd6908490612a48565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8154600090611e3190600190612a5b565b9050808214611f5357828181548110611e4c57611e4c612ad7565b9060005260206000209060020201838381548110611e6c57611e6c612ad7565b60009182526020909120825460029092020180546001600160801b0319166001600160801b0392831690811782558354600160801b908190049093169092029091178155600191820180549290910180546bffffffffffffffffffffffff1981166001600160601b0394851690811783558354600160601b908190049095169094026001600160c01b031990911690931792909217808355815464ffffffffff600160c01b91829004160264ffffffffff60c01b19821681178455915462ffffff600160e81b9182900416026001600160e81b039092166001600160c01b03909116171790555b82805480611f6357611f63612b0a565b600082815260208120600260001990930192830201818155600101559055505050565b60408051600280825260608201835260009283929190602083019080368337019050509050600f60ff1681600081518110611fc357611fc3612ad7565b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110611ff257611ff2612ad7565b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0385169063883bdbfd90612036908590600401612b36565b600060405180830381865afa158015612053573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261207b9190810190612c49565b5090506120d5600f60000b8260008151811061209957612099612ad7565b6020026020010151836001815181106120b4576120b4612ad7565b60200260200101516120c69190612d15565b6120d09190612d42565b612156565b949350505050565b60006105736001600160a01b03831680600160601b61256e565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611b33908590612620565b505050565b60008060008360020b1261216d578260020b61217a565b8260020b61217a90612d80565b9050612189620d89e719612d9c565b60020b8111156121bf5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640161084c565b6000816001166000036121d657600160801b6121e8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612227576080612222826ffff97272373d413259a46990580e213a6129ff565b901c90505b600482161561225157608061224c826ffff2e50f5f656932ef12357cf3c7fdcc6129ff565b901c90505b600882161561227b576080612276826fffe5caca7e10e4e61c3624eaa0941cd06129ff565b901c90505b60108216156122a55760806122a0826fffcb9843d60f6159c9db58835c9266446129ff565b901c90505b60208216156122cf5760806122ca826fff973b41fa98c081472e6896dfb254c06129ff565b901c90505b60408216156122f95760806122f4826fff2ea16466c96a3843ec78b326b528616129ff565b901c90505b608082161561232357608061231e826ffe5dee046a99a2a811c461f1969c30536129ff565b901c90505b61010082161561234e576080612349826ffcbe86c7900a88aedcffc83b479aa3a46129ff565b901c90505b610200821615612379576080612374826ff987a7253ac413176f2b074cf7815e546129ff565b901c90505b6104008216156123a457608061239f826ff3392b0822b70005940c7a398e4b70f36129ff565b901c90505b6108008216156123cf5760806123ca826fe7159475a2c29b7443b29c7fa6e889d96129ff565b901c90505b6110008216156123fa5760806123f5826fd097f3bdfd2022b8845ad8f792aa58256129ff565b901c90505b612000821615612425576080612420826fa9f746462d870fdf8a65dc1f90e061e56129ff565b901c90505b61400082161561245057608061244b826f70d869a156d2a1b890bb3df62baf32f76129ff565b901c90505b61800082161561247b576080612476826f31be135f97d08fd981231505542fcfa66129ff565b901c90505b620100008216156124a75760806124a2826f09aa508b5b7a84e1c677de54f3e99bc96129ff565b901c90505b620200008216156124d25760806124cd826e5d6af8dedb81196699c329225ee6046129ff565b901c90505b620400008216156124fc5760806124f7826d2216e584f5fa1ea926041bedfe986129ff565b901c90505b6208000082161561252457608061251f826b048a170391f7dc42444e8fa26129ff565b901c90505b60008460020b131561253f5761253c81600019612a34565b90505b61254e64010000000082612dbe565b1561255a57600161255d565b60005b6120d59060ff16602083901c612a48565b60008080600019858709858702925082811083820303915050806000036125a7576000841161259c57600080fd5b5082900490506107f2565b8084116125b357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000612675826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126f29092919063ffffffff16565b80519091501561215157808060200190518101906126939190612dd2565b6121515760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161084c565b60606120d58484600085856001600160a01b0385163b6127545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161084c565b600080866001600160a01b031685876040516127709190612df4565b60006040518083038185875af1925050503d80600081146127ad576040519150601f19603f3d011682016040523d82523d6000602084013e6127b2565b606091505b50915091506127c28282866127cd565b979650505050505050565b606083156127dc5750816107f2565b8251156127ec5782518084602001fd5b8160405162461bcd60e51b815260040161084c919061282a565b60005b83811015612821578181015183820152602001612809565b50506000910152565b6020815260008251806020840152612849816040850160208701612806565b601f01601f19169190910160400192915050565b6001600160a01b038116811461287257600080fd5b50565b6000806040838503121561288857600080fd5b82356128938161285d565b946020939093013593505050565b6000602082840312156128b357600080fd5b5035919050565b6000806000606084860312156128cf57600080fd5b83356128da8161285d565b925060208401356128ea8161285d565b929592945050506040919091013590565b60006020828403121561290d57600080fd5b81356107f28161285d565b60008060006060848603121561292d57600080fd5b833592506020840135915060408401356129468161285d565b809150509250925092565b6000806040838503121561296457600080fd5b823561296f8161285d565b9150602083013561297f8161285d565b809150509250929050565b6000806040838503121561299d57600080fd5b82359150602083013561297f8161285d565b600181811c908216806129c357607f821691505b6020821081036129e357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612a1957612a196129e9565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612a4357612a43612a1e565b500490565b80820180821115610573576105736129e9565b81810381811115610573576105736129e9565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215612ab757600080fd5b5051919050565b600060018201612ad057612ad06129e9565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612aff57600080fd5b81516107f28161285d565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015612b7457835163ffffffff1683529284019291840191600101612b52565b50909695505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ba957612ba9612b20565b604052919050565b600067ffffffffffffffff821115612bcb57612bcb612b20565b5060051b60200190565b600082601f830112612be657600080fd5b81516020612bfb612bf683612bb1565b612b80565b82815260059290921b84018101918181019086841115612c1a57600080fd5b8286015b84811015612c3e578051612c318161285d565b8352918301918301612c1e565b509695505050505050565b60008060408385031215612c5c57600080fd5b825167ffffffffffffffff80821115612c7457600080fd5b818501915085601f830112612c8857600080fd5b81516020612c98612bf683612bb1565b82815260059290921b84018101918181019089841115612cb757600080fd5b948201945b83861015612ce55785518060060b8114612cd65760008081fd5b82529482019490820190612cbc565b91880151919650909350505080821115612cfe57600080fd5b50612d0b85828601612bd5565b9150509250929050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff82131715610573576105736129e9565b60008160060b8360060b80612d5957612d59612a1e565b667fffffffffffff19821460001982141615612d7757612d776129e9565b90059392505050565b6000600160ff1b8201612d9557612d956129e9565b5060000390565b60008160020b627fffff198103612db557612db56129e9565b60000392915050565b600082612dcd57612dcd612a1e565b500690565b600060208284031215612de457600080fd5b815180151581146107f257600080fd5b60008251612e06818460208701612806565b919091019291505056fea2646970667358221220636e7704a1b8842575ae604fed9357e9378f41456b8f89f9e47474ac78372ee664736f6c6343000810003360c06040523480156200001157600080fd5b506040518060600160405280602281526020016200125e602291396040805180820190915260048152634153494360e01b6020820152600362000055838262000145565b50600462000064828262000145565b5050600160055550426080523360a052600680546001600160a01b0319167334f0915a5f15a66eba86f6a58be1a471fb7836a717905562000211565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000cb57607f821691505b602082108103620000ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200014057600081815260208120601f850160051c810160208610156200011b5750805b601f850160051c820191505b818110156200013c5782815560010162000127565b5050505b505050565b81516001600160401b03811115620001615762000161620000a0565b6200017981620001728454620000b6565b84620000f2565b602080601f831160018114620001b15760008415620001985750858301515b600019600386901b1c1916600185901b1785556200013c565b600085815260208120601f198616915b82811015620001e257888601518255948401946001909101908401620001c1565b5085821015620002015787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161101962000245600039600081816101d80152818161036f01526103d501526000610d7f01526110196000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063a9059cbb11610066578063a9059cbb14610230578063d0e5c4ef14610243578063dd62ed3e1461024c578063eb9047bb1461025f57600080fd5b80638da5cb5b146101cb57806395d89b41146102025780639dc29fac1461020a578063a457c2d71461021d57600080fd5b8063313ce567116100d3578063313ce5671461016b578063395093511461017a57806340c10f191461018d57806370a08231146101a257600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d610272565b60405161011a9190610db3565b60405180910390f35b610136610131366004610e1d565b610304565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004610e47565b61031e565b604051600c815260200161011a565b610136610188366004610e1d565b610342565b6101a061019b366004610e1d565b610364565b005b61014a6101b0366004610e83565b6001600160a01b031660009081526020819052604090205490565b6040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161011a565b61010d6103bb565b6101a0610218366004610e1d565b6103ca565b61013661022b366004610e1d565b61041d565b61013661023e366004610e1d565b61049d565b61014a60075481565b61014a61025a366004610ea5565b6104ab565b61014a61026d366004610ed8565b6104d6565b60606003805461028190610ef1565b80601f01602080910402602001604051908101604052809291908181526020018280546102ad90610ef1565b80156102fa5780601f106102cf576101008083540402835291602001916102fa565b820191906000526020600020905b8154815290600101906020018083116102dd57829003601f168201915b5050505050905090565b6000336103128185856107e2565b60019150505b92915050565b60003361032c858285610907565b610337858585610981565b506001949350505050565b60003361031281858561035583836104ab565b61035f9190610f41565b6107e2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103ad576040516330cd747160e01b815260040160405180910390fd5b6103b78282610b4f565b5050565b60606004805461028190610ef1565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610413576040516330cd747160e01b815260040160405180910390fd5b6103b78282610c2e565b6000338161042b82866104ab565b9050838110156104905760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61033782868684036107e2565b600033610312818585610981565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600060026005540361052a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610487565b6002600555603c610539610d74565b111561056b57603c610549610d74565b604051636472787160e01b815260048101929092526024820152604401610487565b81600003610596576040516307c83fcf60e41b81526004810183905260016024820152604401610487565b6006546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156105de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106029190610f54565b821115610699576006546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610651573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106759190610f54565b60405163cf47918160e01b8152600481019190915260248101839052604401610487565b6006546040516323b872dd60e01b815233600482015261dead6024820152604481018490526000916001600160a01b0316906323b872dd906064016020604051808303816000875af11580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190610f6d565b156107be57826007600082825461072e9190610f41565b9091555061073f9050600584610f8f565b905061074b3382610b4f565b60405164ffffffffff421671ffffffffffffffffffffffffff0000000000602886901b16176cffffffffffffffffffffffffff60901b609084901b1617815233907f967b882e4e8219ffcb8bbde76da5df9eff97785aff7ad76a81964472ae9296d79060200160405180910390a26107d7565b6040516352e5bd8f60e01b815260040160405180910390fd5b600160055592915050565b6001600160a01b0383166108445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610487565b6001600160a01b0382166108a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610487565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061091384846104ab565b9050600019811461097b578181101561096e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610487565b61097b84848484036107e2565b50505050565b6001600160a01b0383166109e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610487565b6001600160a01b038216610a475760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610487565b6001600160a01b03831660009081526020819052604090205481811015610abf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610487565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610af6908490610f41565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b4291815260200190565b60405180910390a361097b565b6001600160a01b038216610ba55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610487565b8060026000828254610bb79190610f41565b90915550506001600160a01b03821660009081526020819052604081208054839290610be4908490610f41565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610c8e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610487565b6001600160a01b03821660009081526020819052604090205481811015610d025760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610487565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610d31908490610fae565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016108fa565b600062015180610da47f000000000000000000000000000000000000000000000000000000000000000042610fae565b610dae9190610fc1565b905090565b600060208083528351808285015260005b81811015610de057858101830151858201604001528201610dc4565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610e1857600080fd5b919050565b60008060408385031215610e3057600080fd5b610e3983610e01565b946020939093013593505050565b600080600060608486031215610e5c57600080fd5b610e6584610e01565b9250610e7360208501610e01565b9150604084013590509250925092565b600060208284031215610e9557600080fd5b610e9e82610e01565b9392505050565b60008060408385031215610eb857600080fd5b610ec183610e01565b9150610ecf60208401610e01565b90509250929050565b600060208284031215610eea57600080fd5b5035919050565b600181811c90821680610f0557607f821691505b602082108103610f2557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561031857610318610f2b565b600060208284031215610f6657600080fd5b5051919050565b600060208284031215610f7f57600080fd5b81518015158114610e9e57600080fd5b6000816000190483118215151615610fa957610fa9610f2b565b500290565b8181038181111561031857610318610f2b565b600082610fde57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122059839d6e0c79d626eb5788ceffb94c439f5b8240027d97a479a8d760897e0c7e64736f6c634300081000334170706c69636174696f6e20537065636966696320496e7465726e657420436f696e60a06040523480156200001157600080fd5b506040518060400160405280601081526020016f20a9a4a1902a37b5b2b71026b4b732b960811b8152506040518060400160405280600381526020016241544d60e81b815250816000908162000068919062000129565b50600162000077828262000129565b50503360805250620001f5565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000af57607f821691505b602082108103620000d057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200012457600081815260208120601f850160051c81016020861015620000ff5750805b601f850160051c820191505b8181101562000120578281556001016200010b565b5050505b505050565b81516001600160401b0381111562000145576200014562000084565b6200015d816200015684546200009a565b84620000d6565b602080601f8311600181146200019557600084156200017c5750858301515b600019600386901b1c1916600185901b17855562000120565b600085815260208120601f198616915b82811015620001c657888601518255948401946001909101908401620001a5565b5085821015620001e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051611f766200021f600039600081816102ef015281816107d701526109210152611f766000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80634f6ccce7116100c357806395d89b411161007c57806395d89b4114610313578063a22cb4651461031b578063b88d4fde1461032e578063c87b56dd14610341578063cad96cca14610354578063e985e9c51461037457600080fd5b80634f6ccce7146102675780636352211e1461027a5780636a6278421461028d57806370a08231146102a05780638924af74146102b35780638da5cb5b146102ed57600080fd5b806323b872dd1161011557806323b872dd146101e157806325d112a9146101f45780632a55205a146101fc5780632f745c591461022e57806342842e0e1461024157806342966c681461025457600080fd5b806301ffc9a71461015257806306fdde031461017a578063081812fc1461018f578063095ea7b3146101ba57806318160ddd146101cf575b600080fd5b610165610160366004611984565b6103b0565b60405190151581526020015b60405180910390f35b610182610401565b60405161017191906119f1565b6101a261019d366004611a04565b610493565b6040516001600160a01b039091168152602001610171565b6101cd6101c8366004611a34565b6104ba565b005b6008545b604051908152602001610171565b6101cd6101ef366004611a5e565b6105d4565b6101d3610605565b61020f61020a366004611a9a565b610615565b604080516001600160a01b039093168352602083019190915201610171565b6101d361023c366004611a34565b61071b565b6101cd61024f366004611a5e565b6107b1565b6101cd610262366004611a04565b6107cc565b6101d3610275366004611a04565b610821565b6101a2610288366004611a04565b6108b4565b6101d361029b366004611abc565b610914565b6101d36102ae366004611abc565b610992565b6102c66102c1366004611a9a565b610a18565b604080516001600160a01b0390931683526001600160601b03909116602083015201610171565b7f00000000000000000000000000000000000000000000000000000000000000006101a2565b610182610a61565b6101cd610329366004611ad7565b610a70565b6101cd61033c366004611b29565b610a7f565b61018261034f366004611a04565b610ab7565b610367610362366004611a04565b610b1e565b6040516101719190611c5d565b610165610382366004611c70565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000632ece2d0d60e21b6001600160e01b03198316016103d257506001919050565b636ad56fd360e11b6001600160e01b03198316016103f257506001919050565b6103fb82610bad565b92915050565b60606000805461041090611ca3565b80601f016020809104026020016040519081016040528092919081815260200182805461043c90611ca3565b80156104895780601f1061045e57610100808354040283529160200191610489565b820191906000526020600020905b81548152906001019060200180831161046c57829003601f168201915b5050505050905090565b600061049e82610bd2565b506000908152600460205260409020546001600160a01b031690565b60006104c5826108b4565b9050806001600160a01b0316836001600160a01b0316036105375760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061055357506105538133610382565b6105c55760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161052e565b6105cf8383610c31565b505050565b6105de3382610c9f565b6105fa5760405162461bcd60e51b815260040161052e90611cdd565b6105cf838383610d1e565b6000610610600b5490565b905090565b6000828152600a60209081526040808320805482518185028101850190935280835284938493929190849084015b8282101561069257600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610643565b50505050905060008151111561070b57806000815181106106b5576106b5611d2b565b602002602001015160000151612710826000815181106106d7576106d7611d2b565b6020026020010151602001516001600160601b0316866106f79190611d57565b6107019190611d8c565b9250925050610714565b60008092509250505b9250929050565b600061072683610992565b82106107885760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161052e565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6105cf83838360405180602001604052806000815250610a7f565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610815576040516330cd747160e01b815260040160405180910390fd5b61081e81610ec5565b50565b600061082c60085490565b821061088f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161052e565b600882815481106108a2576108a2611d2b565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806103fb5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161052e565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461095f576040516330cd747160e01b815260040160405180910390fd5b61096d600b80546001019055565b6000610978600b5490565b905061098381610f6c565b6103fb8382611030565b919050565b60006001600160a01b0382166109fc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161052e565b506001600160a01b031660009081526003602052604090205490565b600a6020528160005260406000208181548110610a3457600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60606001805461041090611ca3565b610a7b33838361117e565b5050565b610a893383610c9f565b610aa55760405162461bcd60e51b815260040161052e90611cdd565b610ab18484848461124c565b50505050565b6060610ac282610bd2565b6000610acc61127f565b90506000815111610aec5760405180602001604052806000815250610b17565b80610af68461130a565b604051602001610b07929190611da0565b6040516020818303038152906040525b9392505050565b6060600a6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610ba257600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610b53565b505050509050919050565b60006001600160e01b0319821663780e9d6360e01b14806103fb57506103fb8261140b565b6000818152600260205260409020546001600160a01b031661081e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161052e565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610c66826108b4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610cab836108b4565b9050806001600160a01b0316846001600160a01b03161480610cf257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610d165750836001600160a01b0316610d0b84610493565b6001600160a01b0316145b949350505050565b826001600160a01b0316610d31826108b4565b6001600160a01b031614610d955760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161052e565b6001600160a01b038216610df75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161052e565b610e0283838361145b565b610e0d600082610c31565b6001600160a01b0383166000908152600360205260408120805460019290610e36908490611dcf565b90915550506001600160a01b0382166000908152600360205260408120805460019290610e64908490611de2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000610ed0826108b4565b9050610ede8160008461145b565b610ee9600083610c31565b6001600160a01b0381166000908152600360205260408120805460019290610f12908490611dcf565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610f835790505090506101a481600081518110610fc257610fc2611d2b565b6020026020010151602001906001600160601b031690816001600160601b031681525050737686640f09123394cd8dc3032e9927767ad893448160008151811061100e5761100e611d2b565b60209081029190910101516001600160a01b039091169052610a7b8282611466565b6001600160a01b0382166110865760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161052e565b6000818152600260205260409020546001600160a01b0316156110eb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161052e565b6110f76000838361145b565b6001600160a01b0382166000908152600360205260408120805460019290611120908490611de2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b0316036111df5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161052e565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611257848484610d1e565b611263848484846115e8565b610ab15760405162461bcd60e51b815260040161052e90611df5565b6060600061128c4661130a565b90506040518060400160405280601d81526020017f68747470733a2f2f6170692e70756c7365626974636f696e2e6170702f00000081525081604051806040016040528060058152602001642f61746d2f60d81b8152506040516020016112f593929190611e47565b60405160208183030381529060405291505090565b6060816000036113315750506040805180820190915260018152600360fc1b602082015290565b8160005b811561135b578061134581611e8a565b91506113549050600a83611d8c565b9150611335565b60008167ffffffffffffffff81111561137657611376611b13565b6040519080825280601f01601f1916602001820160405280156113a0576020820181803683370190505b5090505b8415610d16576113b5600183611dcf565b91506113c2600a86611ea3565b6113cd906030611de2565b60f81b8183815181106113e2576113e2611d2b565b60200101906001600160f81b031916908160001a905350611404600a86611d8c565b94506113a4565b60006001600160e01b031982166380ac58cd60e01b148061143c57506001600160e01b03198216635b5e139f60e01b145b806103fb57506301ffc9a760e01b6001600160e01b03198316146103fb565b6105cf8383836116e9565b60005b81518110156115dd5760006001600160a01b031682828151811061148f5761148f611d2b565b6020026020010151600001516001600160a01b0316036114f15760405162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015260640161052e565b81818151811061150357611503611d2b565b6020026020010151602001516001600160601b03166000036115675760405162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015260640161052e565b6000838152600a60205260409020825183908390811061158957611589611d2b565b6020908102919091018101518254600181018455600093845292829020815191909201516001600160601b0316600160a01b026001600160a01b0390911617910155806115d581611e8a565b915050611469565b50610a7b82826117a1565b60006001600160a01b0384163b156116de57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061162c903390899088908890600401611eb7565b6020604051808303816000875af1925050508015611667575060408051601f3d908101601f1916820190925261166491810190611ef4565b60015b6116c4573d808015611695576040519150601f19603f3d011682016040523d82523d6000602084013e61169a565b606091505b5080516000036116bc5760405162461bcd60e51b815260040161052e90611df5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610d16565b506001949350505050565b6001600160a01b0383166117445761173f81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611767565b816001600160a01b0316836001600160a01b0316146117675761176783826117de565b6001600160a01b03821661177e576105cf8161187b565b826001600160a01b0316826001600160a01b0316146105cf576105cf828261192a565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df82826040516117d2929190611f11565b60405180910390a15050565b600060016117eb84610992565b6117f59190611dcf565b600083815260076020526040902054909150808214611848576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061188d90600190611dcf565b600083815260096020526040812054600880549394509092849081106118b5576118b5611d2b565b9060005260206000200154905080600883815481106118d6576118d6611d2b565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061190e5761190e611f2a565b6001900381819060005260206000200160009055905550505050565b600061193583610992565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b03198116811461081e57600080fd5b60006020828403121561199657600080fd5b8135610b178161196e565b60005b838110156119bc5781810151838201526020016119a4565b50506000910152565b600081518084526119dd8160208601602086016119a1565b601f01601f19169290920160200192915050565b602081526000610b1760208301846119c5565b600060208284031215611a1657600080fd5b5035919050565b80356001600160a01b038116811461098d57600080fd5b60008060408385031215611a4757600080fd5b611a5083611a1d565b946020939093013593505050565b600080600060608486031215611a7357600080fd5b611a7c84611a1d565b9250611a8a60208501611a1d565b9150604084013590509250925092565b60008060408385031215611aad57600080fd5b50508035926020909101359150565b600060208284031215611ace57600080fd5b610b1782611a1d565b60008060408385031215611aea57600080fd5b611af383611a1d565b915060208301358015158114611b0857600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611b3f57600080fd5b611b4885611a1d565b9350611b5660208601611a1d565b925060408501359150606085013567ffffffffffffffff80821115611b7a57600080fd5b818701915087601f830112611b8e57600080fd5b813581811115611ba057611ba0611b13565b604051601f8201601f19908116603f01168101908382118183101715611bc857611bc8611b13565b816040528281528a6020848701011115611be157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600081518084526020808501945080840160005b83811015611c5257815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101611c19565b509495945050505050565b602081526000610b176020830184611c05565b60008060408385031215611c8357600080fd5b611c8c83611a1d565b9150611c9a60208401611a1d565b90509250929050565b600181811c90821680611cb757607f821691505b602082108103611cd757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611d7157611d71611d41565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611d9b57611d9b611d76565b500490565b60008351611db28184602088016119a1565b835190830190611dc68183602088016119a1565b01949350505050565b818103818111156103fb576103fb611d41565b808201808211156103fb576103fb611d41565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008451611e598184602089016119a1565b845190830190611e6d8183602089016119a1565b8451910190611e808183602088016119a1565b0195945050505050565b600060018201611e9c57611e9c611d41565b5060010190565b600082611eb257611eb2611d76565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611eea908301846119c5565b9695505050505050565b600060208284031215611f0657600080fd5b8151610b178161196e565b828152604060208201526000610d166040830184611c05565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220454c67d16cd4de13438d53177aa6af4c22d529fee4157747a33d79d5ddd32ec764736f6c63430008100033