Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
7107709 | 8 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
Huego
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.5.7
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// there are 2 gameSessions played per session // first 4 turns are placing 4x1 blocks flat // next 24 turns are placing 2x1 blocks any rotation // at this point game starts another game // first 4 turns are placing 4x1 blocks flat // next 24 turns are placing 2x1 blocks any rotation // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract Huego { using SafeERC20 for IERC20; uint8 constant GRID_SIZE = 8; uint256 public timeLimit = 600; // 10 minutes per player address public owner; uint256 public feePercentage = 500; // 5% modifier onlyOwner() { require(msg.sender == owner, "Not the owner"); _; } event BlockPlaced(uint256 indexed sessionId, uint8 indexed game, uint8 turn, uint8 pieceType, uint8 x, uint8 z, uint8 y, Rotation rotation); struct WagerInfo { uint256 amount; bool processed; // To prevent double-processing } struct WagerProposal { uint256 sessionId; uint256 amount; } struct GameSession { address player1; address player2; WagerInfo wager; uint8 turn; uint8 game; // either 0 or 1 uint256 gameStartTime; uint256 lastMoveTime; uint256 timeRemainingP1; uint256 timeRemainingP2; bool gameEnded; topStack[][] initialStacks; // basically [2][16] } struct topStack { uint8 x; uint8 z; uint8 y; uint8 color; } // wager proposals maps address and sessionId to the wager proposal mapping(address => mapping(uint256 => WagerProposal)) public wagerProposals; // lets map user to their gameSession mapping(address => uint256) public userGameSession; struct GameGrid { topStack[8][8] grid; } // GameSession ID -> [game0, game1] -> 8x8 grid mapping(uint256 => GameGrid[2]) private stacksGrid; GameSession[] public gameSessions; // List of gameSessions // Colors: 0 = empty, 1 = yellow, 2 = purple, 3 = orange, 4 = green enum Rotation {X, Z, Y} constructor() { owner = msg.sender; // lets create a dummy gameSession to start from 1 gameSessions.push(); } function getInitialStacks(uint256 sessionId, uint8 game) external view returns (topStack[] memory) { return gameSessions[sessionId].initialStacks[game]; } function getStacksGrid(uint256 sessionId, uint8 game) external view returns (topStack[8][8] memory) { return stacksGrid[sessionId][game].grid; } function proposeWager(uint256 sessionId, uint256 _amount) public payable { _proposeWager(sessionId, _amount, msg.sender); } function acceptWagerProposal(uint256 sessionId, uint256 _amount) public payable { _acceptWager(sessionId, _amount, msg.sender); } function acceptAndProposeWager(uint256 sessionId, uint256 _amount) external payable { _acceptWager(sessionId, _amount, msg.sender); _proposeWager(sessionId, _amount, msg.sender); } // Internal helper functions to reduce redundancy function _proposeWager(uint256 sessionId, uint256 _amount, address sender) internal { require(sender == gameSessions[sessionId].player1 || sender == gameSessions[sessionId].player2, "Not a player of this game"); require(msg.value == _amount, "Wager amount mismatch"); uint currentWagerAmount = wagerProposals[sender][sessionId].amount; wagerProposals[sender][sessionId] = WagerProposal({ sessionId: sessionId, amount: _amount }); if (currentWagerAmount != 0) { (bool success,) = payable(sender).call{value: currentWagerAmount}(""); require(success, "Refund failed"); } } function _acceptWager(uint256 sessionId, uint256 _amount, address sender) internal { address proposer = (sender == gameSessions[sessionId].player1) ? gameSessions[sessionId].player2 : gameSessions[sessionId].player1; require(wagerProposals[proposer][sessionId].amount != 0, "No wager proposal"); require(!gameSessions[sessionId].wager.processed, "Wager already processed"); require(msg.value == wagerProposals[proposer][sessionId].amount, "Wager amount mismatch"); require(_amount == wagerProposals[proposer][sessionId].amount, "Wager amount mismatch"); gameSessions[sessionId].wager.amount += wagerProposals[proposer][sessionId].amount; delete wagerProposals[proposer][sessionId]; // Refund any previous proposal from the sender if (wagerProposals[sender][sessionId].amount != 0) { (bool success,) = payable(sender).call{value: wagerProposals[sender][sessionId].amount}(""); require(success, "Refund failed"); delete wagerProposals[sender][sessionId]; } } function cancelWagerProposal(uint256 sessionId) external { require(wagerProposals[msg.sender][sessionId].amount != 0, "No wager proposal exists"); // refund the player (bool success,) = payable(msg.sender).call{value: wagerProposals[msg.sender][sessionId].amount}(""); require(success, "Transfer failed"); delete wagerProposals[msg.sender][sessionId]; } function placeInitial4x1Stack(uint256 sessionId, uint8 game, uint8 x, uint8 z, uint8 color) internal { require(game < 2, "Invalid game index"); require(x + 1 < GRID_SIZE && z + 1 < GRID_SIZE, "Invalid coordinates"); require(stacksGrid[sessionId][game].grid[x][z].color == 0, "Grid has a stack"); require(stacksGrid[sessionId][game].grid[x + 1][z].color == 0, "Grid has a stack"); require(stacksGrid[sessionId][game].grid[x][z + 1].color == 0, "Grid has a stack"); require(stacksGrid[sessionId][game].grid[x + 1][z + 1].color == 0, "Grid has a stack"); topStack memory stack1 = topStack(x, z, 0, color); topStack memory stack2 = topStack(x + 1, z, 0, color); topStack memory stack3 = topStack(x, z + 1, 0, color); topStack memory stack4 = topStack(x + 1, z + 1, 0, color); // If it's not the first placement, check for a valid neighbor if (gameSessions[sessionId].turn > 1) { // Predefined offsets for the 8 unique neighboring positions int8[8] memory dx = [ int8(-1), int8(-1), int8(0), int8(0), int8(2), int8(2), int8(0), int8(1)]; int8[8] memory dz = [ int8(0), int8(1), int8(2), int8(2), int8(0), int8(1), int8(-1), int8(-1)]; bool found = false; for (uint8 i = 0; i < 8; i++) { int8 nx = int8(x) + dx[i]; int8 nz = int8(z) + dz[i]; // Ensure within grid bounds before checking if (nx >= 0 && nx < int8(GRID_SIZE) && nz >= 0 && nz < int8(GRID_SIZE)) { if (stacksGrid[sessionId][game].grid[uint8(nx)][uint8(nz)].color != 0) { found = true; break; } } } require(found, "No adjacent stack"); } stacksGrid[sessionId][game].grid[x][z] = stack1; stacksGrid[sessionId][game].grid[x + 1][z] = stack2; stacksGrid[sessionId][game].grid[x][z + 1] = stack3; stacksGrid[sessionId][game].grid[x + 1][z + 1] = stack4; // Calculate the correct index in initialStacks based on turn // uint8 turnIndex = (gameSessions[sessionId].turn - 1) * 4; // Each turn places 4 blocks gameSessions[sessionId].initialStacks[game].push(stack1); gameSessions[sessionId].initialStacks[game].push(stack2); gameSessions[sessionId].initialStacks[game].push(stack3); gameSessions[sessionId].initialStacks[game].push(stack4); emit BlockPlaced(sessionId, game, gameSessions[sessionId].turn, 1, x, z, 0, Rotation.X); } function createSession(address player1, address player2) external { // only player 1 can create a session require(msg.sender == player2, "Not player 2"); // player 1 and 2 must not have an active game require(userGameSession[player1] == 0, "Player 1 has an active session"); require(userGameSession[player2] == 0, "Player 2 has an active game"); uint256 sessionId = gameSessions.length; GameSession storage session = gameSessions.push(); session.player1 = player1; session.player2 = player2; session.wager = WagerInfo(0, false); session.game = 0; session.gameStartTime = block.timestamp; session.lastMoveTime = block.timestamp; session.timeRemainingP1 = timeLimit; session.timeRemainingP2 = timeLimit; session.gameEnded = false; // **Fix:** Initialize `initialStacks` before adding elements session.initialStacks.push(); // First game session session.initialStacks.push(); // Second game session userGameSession[player1] = sessionId; userGameSession[player2] = sessionId; session.turn = 1; } function play(uint256 sessionId, uint8 x, uint8 z, Rotation rotation) external { GameSession storage session = gameSessions[sessionId]; // game must not have ended require(!session.gameEnded, "GameSession has ended"); // only player on turn can play address starter = session.game == 0 ? session.player1 : session.player2; address nonStarter = session.game == 0 ? session.player2 : session.player1; address onTurn = session.turn % 2 == 1 ? starter : nonStarter; require(msg.sender == onTurn, "Not your turn"); uint8 currentColor = ((session.turn - 1) % 4) + 1; // requirement that the player still has time if (onTurn == session.player1) { require(block.timestamp - session.lastMoveTime < session.timeRemainingP1, "Player 1 ran out of time"); session.timeRemainingP1 -= block.timestamp - session.lastMoveTime; } else { require(block.timestamp - session.lastMoveTime < session.timeRemainingP2, "Player 2 ran out of time"); session.timeRemainingP2 -= block.timestamp - session.lastMoveTime; } // we are placing initial stacks if(session.turn <= 4) { placeInitial4x1Stack(sessionId, session.game, x, z, currentColor); } else { placeBlock(sessionId, session.game, x, z, currentColor); if (rotation == Rotation.X) { require(checkStackWithColorExists(sessionId, session.game, currentColor), "No stack with color exists"); placeBlock(sessionId, session.game, x + 1, z, currentColor); } else if (rotation == Rotation.Z) { require(checkStackWithColorExists(sessionId, session.game, currentColor), "No stack with color exists"); placeBlock(sessionId, session.game, x, z + 1, currentColor); } else { placeBlock(sessionId, session.game, x, z, currentColor); } // game ends on turn 28 if (session.turn == 28) { if(session.game == 0) { session.game = 1; session.turn = 0; } else { session.gameEnded = true; } } emit BlockPlaced(sessionId, session.game, session.turn, 2, x, z, stacksGrid[sessionId][session.game].grid[x][z].y, rotation); } session.lastMoveTime = block.timestamp; session.turn += 1; } function checkStackWithColorExists(uint256 sessionId, uint8 game, uint8 color) internal view returns (bool) { for (uint8 i = 0; i < 16; i++) { if (stacksGrid[sessionId][game].grid[gameSessions[sessionId].initialStacks[game][i].x][gameSessions[sessionId].initialStacks[game][i].z].color == color) { return true; } } return false; } function placeBlock(uint256 sessionId, uint8 game, uint8 x, uint8 z, uint8 currentColor) internal { require(stacksGrid[sessionId][game].grid[x][z].color != 0, "Stack does not exist"); stacksGrid[sessionId][game].grid[x][z].y += 1; stacksGrid[sessionId][game].grid[x][z].color = currentColor; } // SCORING // • Base Points: 1 point for each cube on top of any stack // • Bonus Points: +1 point for cubes on the highest and lowest VISIBLE stacks // • GameSession ends when all cubes are placed or when a player runs out of time function calculateGamePoints(uint256 sessionId, uint8 game) public view returns (uint256, uint256) { uint256 starterPoints = 0; uint256 nonStarterPoints = 0; uint8 highestStack = 0; // first lets loop to find the highest stack for (uint8 i = 0; i < 16; i++) { uint x = gameSessions[sessionId].initialStacks[game][i].x; uint z = gameSessions[sessionId].initialStacks[game][i].z; topStack memory stack = stacksGrid[sessionId][game].grid[x][z]; if (stack.y > highestStack) { highestStack = stack.y; } } uint lowestStack = highestStack; // now lets loop to find the lowest stack for (uint8 i = 0; i < 16; i++) { uint x = gameSessions[sessionId].initialStacks[game][i].x; uint z = gameSessions[sessionId].initialStacks[game][i].z; topStack memory stack = stacksGrid[sessionId][game].grid[x][z]; if (stack.y < lowestStack) { lowestStack = stack.y; } } for (uint8 i = 0; i < 16; i++) { uint x = gameSessions[sessionId].initialStacks[game][i].x; uint z = gameSessions[sessionId].initialStacks[game][i].z; topStack memory stack = stacksGrid[sessionId][game].grid[x][z]; if (stack.y == highestStack || stack.y == lowestStack) { // color 1 and color 3 belong to player 1 if (stack.color == 1 || stack.color == 3) { starterPoints += 2; } else { nonStarterPoints += 2; } } else { if (stack.color == 1 || stack.color == 3) { starterPoints += 1; } else { nonStarterPoints += 1; } } } return (starterPoints, nonStarterPoints); } // receive reward function acceptRewards(uint256 sessionId) external { GameSession storage session = gameSessions[sessionId]; require(!session.wager.processed, "Wager already processed"); session.wager.processed = true; address winner; if(session.game == 1 && session.turn == 29 && session.gameEnded) { uint256 totalPlayer1Points = 0; uint256 totalPlayer2Points = 0; (uint256 starterPoints0, uint256 nonStarterPoints0) = calculateGamePoints(sessionId, 0); (uint256 starterPoints1, uint256 nonStarterPoints1) = calculateGamePoints(sessionId, 1); totalPlayer1Points += starterPoints0; totalPlayer2Points += nonStarterPoints0; totalPlayer1Points += nonStarterPoints1; totalPlayer2Points += starterPoints1; if (totalPlayer1Points > totalPlayer2Points) { winner = session.player1; } else if (totalPlayer2Points > totalPlayer1Points) { winner = session.player2; } else { // require either player1, player2 require(msg.sender == session.player1 || msg.sender == session.player2, "Not a player of this game"); // Tie case, refund wager to both players uint256 feeEach = session.wager.amount * feePercentage / 10000; uint256 rewardSplit = session.wager.amount - feeEach; (bool success1,) = payable(session.player1).call{value: rewardSplit}(""); require(success1, "Transfer failed"); (bool success2,) = payable(session.player2).call{value: rewardSplit}(""); require(success2, "Transfer failed"); (bool success3,) = payable(owner).call{value: 2 * feeEach}(""); require(success3, "Transfer failed"); return; } } else { // lets throw require current turn is 29 address starter = session.game == 0 ? session.player1 : session.player2; address nonStarter = session.game == 0 ? session.player2 : session.player1; address onTurn = session.turn % 2 == 1 ? starter : nonStarter; // if not turn 28, game has not ended, we can calculate the winner one player runs out of time if (onTurn == session.player1) { require(block.timestamp - session.lastMoveTime > session.timeRemainingP1, "Player 1 still has time"); winner = session.player2; } else { require(block.timestamp - session.lastMoveTime > session.timeRemainingP2, "Player 2 still has time"); winner = session.player1; } } // caller has to be the winner require(msg.sender == winner, "Not the winner"); uint256 pot = session.wager.amount * 2; uint256 fee = pot * feePercentage / 10000; uint256 reward = pot - fee; (bool success4,) = payable(winner).call{value: reward}(""); require(success4, "Transfer failed"); (bool success5,) = payable(owner).call{value: fee}(""); require(success5, "Transfer failed"); } function setFeePercentage(uint256 _feePercentage) external onlyOwner { require(_feePercentage <= 1000, "Fee too high"); // Max 10% feePercentage = _feePercentage; } function setGameTimeLimit(uint256 _timeLimit) external onlyOwner { timeLimit = _timeLimit; } function withdrawERC20(IERC20 erc20Token) external onlyOwner { uint256 erc20Balance = erc20Token.balanceOf(address(this)); erc20Token.safeTransfer(msg.sender, erc20Balance); } // if funds are stuck on contract for some reason function withdraw(uint256 amount) external onlyOwner { (bool success,) = payable(msg.sender).call{value: amount}(""); require(success, "Transfer failed"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "../IERC20.sol"; import {IERC20Permit} from "../extensions/IERC20Permit.sol"; import {Address} from "../../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; /** * @dev An operation with an ERC20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. * * ==== Security Considerations * * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be * considered as an intention to spend the allowance in any specific way. The second is that because permits have * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be * generally recommended is: * * ```solidity * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} * doThing(..., value); * } * * function doThing(..., uint256 value) public { * token.safeTransferFrom(msg.sender, address(this), value); * ... * } * ``` * * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also * {SafeERC20-safeTransferFrom}). * * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so * contracts should have entry points that don't rely on permit. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. * * CAUTION: See Security Considerations above. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } }
{ "optimizer": { "enabled": true, "mode": "3" }, "viaIR": true, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "abi", "metadata" ], "": [ "ast" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"sessionId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"game","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"turn","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"pieceType","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"x","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"z","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"y","type":"uint8"},{"indexed":false,"internalType":"enum Huego.Rotation","name":"rotation","type":"uint8"}],"name":"BlockPlaced","type":"event"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"acceptAndProposeWager","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"}],"name":"acceptRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"acceptWagerProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint8","name":"game","type":"uint8"}],"name":"calculateGamePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"}],"name":"cancelWagerProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"player1","type":"address"},{"internalType":"address","name":"player2","type":"address"}],"name":"createSession","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"gameSessions","outputs":[{"internalType":"address","name":"player1","type":"address"},{"internalType":"address","name":"player2","type":"address"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"processed","type":"bool"}],"internalType":"struct Huego.WagerInfo","name":"wager","type":"tuple"},{"internalType":"uint8","name":"turn","type":"uint8"},{"internalType":"uint8","name":"game","type":"uint8"},{"internalType":"uint256","name":"gameStartTime","type":"uint256"},{"internalType":"uint256","name":"lastMoveTime","type":"uint256"},{"internalType":"uint256","name":"timeRemainingP1","type":"uint256"},{"internalType":"uint256","name":"timeRemainingP2","type":"uint256"},{"internalType":"bool","name":"gameEnded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint8","name":"game","type":"uint8"}],"name":"getInitialStacks","outputs":[{"components":[{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"z","type":"uint8"},{"internalType":"uint8","name":"y","type":"uint8"},{"internalType":"uint8","name":"color","type":"uint8"}],"internalType":"struct Huego.topStack[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint8","name":"game","type":"uint8"}],"name":"getStacksGrid","outputs":[{"components":[{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"z","type":"uint8"},{"internalType":"uint8","name":"y","type":"uint8"},{"internalType":"uint8","name":"color","type":"uint8"}],"internalType":"struct Huego.topStack[8][8]","name":"","type":"tuple[8][8]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"z","type":"uint8"},{"internalType":"enum Huego.Rotation","name":"rotation","type":"uint8"}],"name":"play","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"proposeWager","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercentage","type":"uint256"}],"name":"setFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeLimit","type":"uint256"}],"name":"setGameTimeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userGameSession","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"wagerProposals","outputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"erc20Token","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010005b998812d1fcb1e35777a257f7b6828c252ce8179802e0f985980b5c45700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0003000000000002001f000000000002000000000601034f0000006001100270000005490110019700020000001603550001000000060355000000010020019000000080020000390000003a0000c13d000000400020043f000000040010008c000005d90000413d000000000206043b000000e0022002700000054d0020009c000000530000213d0000055b0020009c0000006c0000213d000005620020009c0000009c0000a13d000005630020009c0000024a0000613d000005640020009c000000f60000613d000005650020009c000005d90000c13d000000440010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000401600370000000000101043b000005680010009c000005d90000213d000000000010043f0000000301000039000000200010043f00000040020000390000000001000019001c000000060353151f14e90000040f0000001c0200035f0000002402200370000000000202043b000000000020043f000000200010043f00000000010000190000004002000039151f14e90000040f0000000102100039000000000202041a000000000101041a000000800010043f000000a00020043f0000059e01000041000015200001042e000000400020043f0000000001000416000000000001004b000005d90000c13d0000025801000039000000000010041b000001f4010000390000000202000039000000000012041b0000000101000039000000000201041a0000054a022001970000000003000411000000000232019f000000000021041b0000000601000039000000000201041a0000054b0020009c000000640000413d000005a801000041000000000010043f0000004101000039000000040010043f000005720100004100001521000104300000054e0020009c000000760000213d000005550020009c000000c30000a13d000005560020009c000002a10000613d000005570020009c000001820000613d000005580020009c000005d90000c13d0000000001000416000000000001004b000005d90000c13d000000000100041a000000800010043f0000059a01000041000015200001042e0000000102200039000000000021041b000000000010043f0000002001000039000001000010044300000120000004430000054c01000041000015200001042e0000055c0020009c000000e00000a13d0000055d0020009c0000046a0000613d0000055e0020009c000001950000613d0000055f0020009c000005d90000c13d151f10ef0000040f000005080000013d0000054f0020009c000000ed0000a13d000005500020009c0000047a0000613d000005510020009c0000021c0000613d000005520020009c000005d90000c13d000000240010008c000005d90000413d0000000002000416000000000002004b000005d90000c13d0000000402600370000000000202043b000005680020009c000005d90000213d0000000103000039000000000303041a00000568033001970000000004000411000000000034004b000005620000c13d00000568022001970000056903000041000000800030043f0000000003000410000000840030043f0000000003000414000000040020008c001c00000002001d000005ae0000c13d000000000116034f0000000003000031000000200030008c00000020040000390000000004034019000005d30000013d000005660020009c000004a60000613d000005670020009c000005d90000c13d000000240010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000102000039000000000102041a00000568011001970000000004000411000000000014004b000005620000c13d0000000401600370000000000301043b0000000001000414000000040040008c000000bc0000613d000005490010009c0000054901008041000000c001100210000000000003004b000005770110c1c7000080090200003900000000020460190000000005000019151f15150000040f0000006003100270000005490030019d0002000000010355001c00000002001d151f10fb0000040f0000001c01000029000000010110018f151f112a0000040f0000000001000019000015200001042e000005590020009c000004f90000613d0000055a0020009c000005d90000c13d000000240010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000401600370000000000101043b0000000102000039000000000202041a00000568022001970000000003000411000000000023004b000005620000c13d000003e90010008c0000057d0000413d0000057901000041000000800010043f0000002001000039000000840010043f0000000c01000039000000a40010043f0000059c01000041000000c40010043f00000582010000410000152100010430000005600020009c000005010000613d000005610020009c000005d90000c13d0000000001000416000000000001004b000005d90000c13d0000000101000039000000000101041a0000056801100197000000800010043f0000059a01000041000015200001042e000005530020009c0000050c0000613d000005540020009c000005d90000c13d151f10ef0000040f0000000003000411151f11750000040f0000000001000019000015200001042e000000440010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000401600370000000000101043b001c00000001001d000005680010009c000005d90000213d0000002401600370000000000101043b000005680010009c000005d90000213d0000000002000411000000000012004b000005810000c13d0000001c01000029000000000010043f0000000401000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b000000000101041a000000000001004b0000082d0000c13d0000000001000411000000000010043f0000000401000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b000000000101041a000000000001004b000008b80000c13d0000000604000039000000000304041a0000056d0030009c0000004d0000213d00000000020300190000000001030019001b00000002001d0000000102200039000000000024041b151f10d60000040f001a00000001001d000000000201041a0000054a032001970000001c023001af000000000021041b0000000104100039000000000204041a0000054a022001970000000003000411000000000232019f000000000024041b000000400100043d001900000001001d151f10e40000040f00000019020000290000002001200039000000000001043500000000000204350000001a040000290000000201400039000000000001041b0000000301400039000000000201041a000005ad02200197000000000021041b0000000403400039001900000003001d000000000203041a000005ae01200197000000000013041b0000800b0100003900000000040004150000001f0440008a000000050440021000000587020000410000000403000039151f14fe0000040f0000001a040000290000000502400039000000000012041b0000000602400039000000000012041b0000000701400039000000000200041a000000000021041b0000000801400039000000000021041b0000000901400039000000000201041a000005ad02200197000000000021041b0000000a01400039001a00000001001d151f11520000040f0000001a01000029151f11520000040f0000001c01000029000000000010043f0000000401000039000000200010043f00000040020000390000000001000019151f14e90000040f0000001b02000029000000000021041b0000000001000411000000000010043f00000000010000190000004002000039151f14e90000040f0000001b02000029000000000021041b0000001903000029000000000103041a000005ad0110019700000001011001bf000000000013041b0000000001000019000015200001042e000000240010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000101000039000000000101041a00000568011001970000000002000411000000000012004b00000000010000390000000101006039151f113e0000040f00000004010000390000000101100367000000000101043b000000000010041b0000000001000019000015200001042e000000440010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000002401600370000000000101043b001c00000001001d000000ff0010008c000005d90000213d0000000401600370000000000101043b0000000602000039000000000202041a000000000012004b000008a30000a13d0000000b011000c9000005920110009a000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000401041a0000056d0040009c0000004d0000213d00000005024002100000003f022000390000059d02200197000000400500043d0000000002250019000000000052004b000000000300003900000001030040390000056d0020009c0000004d0000213d00000001003001900000004d0000c13d000000400020043f001c00000004001d001b00000005001d0000000002450436001a00000002001d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001c08000029000000000008004b0000001b09000029000001f40000613d000000000101043b00000000020000190000001a03000029000000400400043d0000057e0040009c0000004d0000213d0000008005400039000000400050043f000000000501041a0000001806500270000000ff0660018f000000600740003900000000006704350000001006500270000000ff0660018f000000400740003900000000006704350000000806500270000000ff0660018f00000020074000390000000000670435000000ff0550018f0000000000540435000000000343043600000001011000390000000102200039000000000082004b000001db0000413d000000400100043d00000020020000390000000002210436000000000309043300000000003204350000004002100039000000000003004b000002130000613d00000000040000190000001a0800002900000000850804340000000076050434000000ff0660018f00000000066204360000000007070433000000ff0770018f000000000076043500000040065000390000000006060433000000ff0660018f0000004007200039000000000067043500000060055000390000000005050433000000ff0550018f0000006006200039000000000056043500000080022000390000000104400039000000000034004b000001fe0000413d0000000002120049000005490020009c00000549020080410000006002200210000005490010009c00000549010080410000004001100210000000000112019f000015200001042e000000240010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000401600370000000000101043b001c00000001001d0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c02000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000101100039000000000101041a000000000001004b0000058b0000c13d000000400100043d00000044021000390000057803000041000000000032043500000024021000390000001803000039000005720000013d000000240010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000401600370000000000101043b0000000602000039000000000202041a000000000021004b000005d90000813d151f10d60000040f0000000002010019001a00000001001d0000000101100039000000000101041a001b00000001001d000000000102041a001c00000001001d000000400100043d001900000001001d151f10e40000040f0000001a020000290000000201200039000000000101041a000000190b00002900000000031b04360000000301200039000000000101041a000000ff001001900000000001000039000000010100c03900000000001304350000001b010000290000056804100197000000090120003900000008052000390000000706200039000000060720003900000005082000390000000402200039000000000202041a000000000808041a000000000707041a000000000606041a000000000505041a000000000901041a000000400100043d000000200a10003900000000004a04350000001c040000290000056804400197000000000041043500000000040b0433000000400a10003900000000004a04350000000003030433000000ff009001900000000004000039000000010400c039000001400910003900000000004904350000012004100039000000000054043500000100041000390000000000640435000000e0041000390000000000740435000000c00410003900000000008404350000000804200270000000ff0440018f000000a0051000390000000000450435000000ff0220018f00000080041000390000000000240435000000000003004b0000000002000039000000010200c03900000060031000390000000000230435000005490010009c00000549010080410000004001100210000005a2011001c7000015200001042e000000440010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000401600370000000000101043b001900000001001d0000002401600370000000000101043b001b00000001001d000000ff0010008c000005d90000213d0000001b01000029001500060010021800000019010000290000000b011000c9001a0592001000a2001c00000000001d0000000002000019001800000002001d0000000601000039000000000101041a000000190010006c000008a30000a13d0000001a01000029000000000101041a0000001b0010006c000008a30000a13d0000001a01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000602000039000000000202041a000000190020006c000008a30000a13d0000001a02000029000000000202041a0000001b0020006c000008a30000a13d0000001c01100029000000000101041a001700000001001d0000001a01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000101041a001600000001001d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001b02000029000000010020008c000008a30000213d0000001702000029000000ff0320018f000000070030008c000008a30000213d00000016020000290000000802200270000000ff0420018f000000070040008c000008a30000213d000000400200043d0000057e0020009c0000004d0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000150330002900000000034300190000000001130019000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0110018f000000400220003900000000001204350000001803000029000000ff0230018f000000000021004b000000000103a0190000001c020000290000000e0020008c001c00010020003d0000000002010019000002b50000a13d000000ff0110018f001c00000000001d001400000001001d001800000001001d0000000601000039000000000101041a000000190010006c000008a30000a13d0000001a01000029000000000101041a0000001b0010006c000008a30000a13d0000001a01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000602000039000000000202041a000000190020006c000008a30000a13d0000001a02000029000000000202041a0000001b0020006c000008a30000a13d0000001c01100029000000000101041a001700000001001d0000001a01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000101041a001600000001001d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001702000029000000ff0320018f000000070030008c000008a30000213d00000016020000290000000802200270000000ff0420018f000000070040008c000008a30000213d000000400200043d0000057e0020009c0000004d0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000150330002900000000034300190000000001130019000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0310018f00000040012000390000000000310435000000180030006c00000018030080290000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c001800000003001d000003410000413d001200000003001d001c00000000001d001600000000001d001300000000001d000003d30000013d0000001301000029001300010010003e000005e80000613d0000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c00000a0a0000813d0000000601000039000000000101041a000000190010006c000008a30000a13d0000001a01000029000000000101041a0000001b0010006c000008a30000a13d0000001a01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000602000039000000000202041a000000190020006c000008a30000a13d0000001a02000029000000000202041a0000001b0020006c000008a30000a13d0000001c01100029000000000101041a001800000001001d0000001a01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000101041a001700000001001d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001802000029000000ff0320018f000000070030008c000008a30000213d00000017020000290000000802200270000000ff0420018f000000070040008c000008a30000213d000000400200043d0000057e0020009c0000004d0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000150330002900000000034300190000000001130019000000000301041a0000001801300270000000ff0410018f000000600520003900000000004504350000000804300270000000ff0440018f00000020052000390000000000450435000000ff0430018f00000000004204350000001003300270000000ff0330018f00000040022000390000000000320435000000140030006c0000045a0000613d000000120030006c0000045a0000613d00000002011001bf000000ff0110018f000000030010008c000003ca0000c13d0000001601000029001600010010003e000003cd0000c13d000005e80000013d00000002011001bf000000ff0110018f000000030010008c000004640000c13d000000030200008a000000160020006b000005e80000213d0000001601000029001600020010003d000003cd0000013d000000030200008a000000130020006b000005e80000213d0000001301000029001300020010003d000003cd0000013d000000240010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000401600370000000000101043b000005680010009c000005d90000213d000000000010043f0000000401000039000000200010043f00000040020000390000000001000019151f14e90000040f000004fd0000013d000000440010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000002401600370000000000101043b001c00000001001d000000ff0010008c000005d90000213d000001800200003900000000010000190000010003200039000000400030043f0000057b0020009c0000004d0000213d00000000040000190000008005300039000000400050043f000000600530003900000000000504350000004005300039000000000005043500000020053000390000000000050435000000000003043500000000052400190000000000350435000000e00040008c0000049d0000813d0000002004400039000000400300043d0000057e0030009c0000048b0000a13d0000004d0000013d00000080031000390000000000230435000000df0010008c000008920000213d0000002001100039000000400200043d0000057c0020009c000004860000a13d0000004d0000013d000000240010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000000401600370000000000201043b0000000001000415001300000001001d0000000601000039000000000101041a001a00000002001d000000000021004b000008a30000a13d0000000601000039000000000010043f0000001a010000290000000b041000c9000005a50140009a000000000201041a000000ff002001900000056c0000c13d001105a4004000a20000057f0540009a000005ad0220019700000001022001bf000000000021041b000005840140009a000000000101041a0000000802100270000000ff0220018f000000ff0310018f0000001d0030008c001200000004001d000004cf0000c13d000000010020008c000004cf0000c13d000005800340009a000000000303041a000000ff00300190000006410000c13d000005830640009a000000000002004b00000000020600190000000002056019000000000202041a00000000030500190000000003066019000000000303041a0000000100100190000000000302c019000005860140009a000000000101041a001c00000001001d000000000105041a0000058702000041000000000020044300000568023001970000056801100197000000000012004b000005db0000c13d001b00000006001d0000000001000414000005490010009c0000054901008041000000c00110021000000588011001c70000800b02000039151f151a0000040f0000000100200190000009270000613d000000000101043b0000001c0110006c000005e80000413d00000012020000290000058b0220009a000000000202041a000000000021004b000008b00000a13d0000001b01000029000000000101041a001b05680010019b000008430000013d0000000001000416000000000001004b000005d90000c13d0000000201000039000000000101041a000000800010043f0000059a01000041000015200001042e151f10ef0000040f001c00000001001d001b00000002001d0000000003000411151f11750000040f0000001c010000290000001b020000290000000003000411151f13100000040f0000000001000019000015200001042e000000840010008c000005d90000413d0000000001000416000000000001004b000005d90000c13d0000002401600370000000000101043b001c00000001001d000000ff0010008c000005d90000213d0000004401600370000000000101043b000000ff0010008c000005d90000213d0000006401600370000000000101043b000000020010008c000005d90000213d0000000401600370000000000101043b0000000602000039000000000202041a000000000012004b000008a30000a13d0000000602000039000000000020043f0000000b071000c9000005800670009a000000000106041a000000ff00100190000008340000c13d0000057f0170009a000005830370009a000005840570009a000000000205041a0000ff0000200190000000000401001900000000040360190000000003016019000000000303041a000000000404041a0000000100200190000000000403c01900000568044001970000000003000411000000000043004b000008880000c13d001900000006001d001b00000005001d000000ff0220018f000000010220008a001a00000002001d000000ff0020008c000005e80000213d000000000101041a001800000007001d000005860270009a001600000002001d000000000202041a001700000002001d00000587020000410000000000200443000000000131013f0000056800100198000008e60000c13d0000000001000414000005490010009c0000054901008041000000c00110021000000588011001c70000800b02000039151f151a0000040f0000000100200190000009270000613d000000000101043b000000170210006c0000001801000029000005e80000413d0000058b0110009a000000000301041a000000000223004b000008f70000213d000000400100043d00000044021000390000058c03000041000002460000013d0000057901000041000000800010043f0000002001000039000000840010043f0000000d01000039000000a40010043f000005a301000041000000c40010043f00000582010000410000152100010430000000400100043d0000004402100039000005a603000041000000000032043500000024021000390000001703000039000000000032043500000579020000410000000000210435000000040210003900000020030000390000000000320435000005490010009c000005490100804100000040011002100000057a011001c700001521000104300000000202000039000000000012041b0000000001000019000015200001042e0000057901000041000000800010043f0000002001000039000000840010043f0000000c01000039000000a40010043f0000059f01000041000000c40010043f000005820100004100001521000104300000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c02000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000101100039000000000301041a00000000010004140000000002000411000000040020008c000008640000c13d001b00010000003d000008720000013d000005490030009c0000054903008041000000c0013002100000056a011001c7151f151a0000040f000000800a00003900000060031002700000054903300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000005c20000613d000000000801034f000000008908043c000000000a9a043600000000005a004b000005be0000c13d000000000006004b000005cf0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000006230000613d0000001f02400039000000600520018f00000080025001bf000000400020043f000000200040008c000005ee0000813d00000000010000190000152100010430001b00000001001d0000000001000414000005490010009c0000054901008041000000c00110021000000588011001c70000800b02000039151f151a0000040f0000000100200190000009270000613d000000000101043b0000001c0110006c0000083e0000813d000005a801000041000000000010043f0000001101000039000000040010043f00000572010000410000152100010430000000c404500039000000800600043d0000000000640435000000a0045000390000056c060000410000000000640435000000a406500039000000000700041100000000007604350000004406000039000000000062043500000100055001bf000000400050043f000000000502043300000000020004140000001c08000029000000040080008c0000000109000039000006120000613d0000004001400210000005490050009c00000549050080410000006003500210000000000113019f000005490020009c0000054902008041000000c002200210000000000112019f0000000002080019151f15150000040f0000001c08000029000000010920018f00020000000103550000006002100270000005490020019d0000054903200197000000000003004b000007ec0000c13d000000600b000039000000800a00003900000000010b0433000000000009004b000008130000c13d000000000001004b0000085c0000c13d000000400100043d00000574020000410000000000210435000005490010009c0000054901008041000000400110021000000575011001c700001521000104300000001f0530018f0000056b06300198000000400200043d00000000046200190000062e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000062a0000c13d000000000005004b0000063b0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000005490020009c00000549020080410000004002200210000000000112019f0000152100010430001000000005001d001b0592004000a2001c00000000001d001900000000001d0000000601000039000000000101041a0000001a0010006c000008a30000a13d0000001b01000029000000000101041a000000000001004b000008a30000613d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008a30000a13d0000001b02000029000000000202041a000000000002004b000008a30000613d0000001c01100029000000000101041a001800000001001d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000101041a001700000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001802000029000000ff0320018f000000070030008c000008a30000213d00000017020000290000000802200270000000ff0420018f000000070040008c000008a30000213d000000400200043d0000057e0020009c0000004d0000213d000000000101043b0000008005200039000000400050043f000000030330021000000000033400190000000001130019000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0110018f000000400220003900000000001204350000001903000029000000ff0230018f000000000021004b000000000103a0190000001c020000290000000f0020008c001c00010020003d001900000001001d000006450000413d000000ff0110018f001c00000000001d001600000001001d001900000001001d0000000601000039000000000101041a0000001a0010006c000008a30000a13d0000001b01000029000000000101041a000000000001004b000008a30000613d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008a30000a13d0000001b02000029000000000202041a000000000002004b000008a30000613d0000001c01100029000000000101041a001800000001001d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000101041a001700000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001802000029000000ff0320018f000000070030008c000008a30000213d00000017020000290000000802200270000000ff0420018f000000070040008c000008a30000213d000000400200043d0000057e0020009c0000004d0000213d000000000101043b0000008005200039000000400050043f000000030330021000000000033400190000000001130019000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0310018f00000040012000390000000000310435000000190030006c00000019030080290000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c001900000003001d000006ca0000413d001400000003001d001c00000000001d001700000000001d001500000000001d000007590000013d0000001501000029001500010010003e000005e80000613d0000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c00000ac90000813d0000000601000039000000000101041a0000001a0010006c000008a30000a13d0000001b01000029000000000101041a000000000001004b000008a30000613d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008a30000a13d0000001b02000029000000000202041a000000000002004b000008a30000613d0000001c01100029000000000101041a001900000001001d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000101041a001800000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001902000029000000ff0320018f000000070030008c000008a30000213d00000018020000290000000802200270000000ff0420018f000000070040008c000008a30000213d000000400200043d0000057e0020009c0000004d0000213d000000000101043b0000008005200039000000400050043f000000030330021000000000033400190000000001130019000000000101041a0000001804100270000000ff0340018f000000600520003900000000003504350000000803100270000000ff0330018f00000020052000390000000000350435000000ff0310018f00000000003204350000001001100270000000ff0310018f00000040012000390000000000310435000000160030006c00000002014001bf000007dd0000613d000000140030006c000007dd0000613d000000ff0110018f000000030010008c000007500000c13d0000001701000029001700010010003e000007530000c13d000005e80000013d000000ff0110018f000000030010008c000007e60000c13d000000030200008a000000170020006b000005e80000213d0000001701000029001700020010003d000007530000013d000000030200008a000000150020006b000005e80000213d0000001501000029001500020010003d000007530000013d0000001f04300039000005af044001970000003f04400039000005af04400197000000400b00043d00000000044b00190000000000b4004b000000000500003900000001050040390000056d0040009c0000004d0000213d00000001005001900000004d0000c13d000000400040043f000000000a3b0436000005af043001980000001f0330018f00000000024a0019000008050000613d000000000501034f00000000060a0019000000005705043c0000000006760436000000000026004b000008010000c13d000000000003004b000006160000613d000000000141034f0000000303300210000000000402043300000000043401cf000000000434022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000141019f0000000000120435000006160000013d001a0000000b001d001b0000000a001d000000000001004b000008d70000c13d0000056e01000041000000000010044300000004008004430000000001000414000005490010009c0000054901008041000000c0011002100000056f011001c70000800202000039151f151a0000040f0000000100200190000009270000613d000000000101043b000000000001004b000008d20000c13d000000400100043d0000057302000041000000000021043500000004021000390000001c030000290000000000320435000009620000013d000000400100043d0000004402100039000005a003000041000000000032043500000024021000390000001e03000039000005720000013d0000057901000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000058101000041000000c40010043f000005820100004100001521000104300000001202000029000005890220009a000000000202041a000000000021004b000008b40000a13d00000000040004110000001b0040006c000008a90000c13d00000000010004150000001e0110008a00000005011002100000001102000029000000000302041a0000000102300210000000000003004b0000000006000019000008bf0000c13d000027100360011a0000000501100270000000000103001f001c00000003001d000000000332004b000005e80000413d001b00000006001d0000000001000414000000040040008c000009670000c13d00000001020000390000000001000031000009760000013d0000054900a0009c000005490a0080410000004002a00210000005490010009c00000549010080410000006001100210000000000121019f0000152100010430000005490010009c0000054901008041000000c001100210000000000003004b000005770110c1c70000000004000411000080090200003900000000020460190000000005000019151f15150000040f001b00000002001d0000006002100270000005490020019d0002000000010355151f10fb0000040f0000001b01000029000000010110018f151f112a0000040f0000000001000411000000000010043f0000000301000039000000200010043f00000040020000390000000001000019151f14e90000040f0000001c02000029000000000020043f000000200010043f00000000010000190000004002000039151f14e90000040f000000000001041b0000000101100039000000000001041b0000000001000019000015200001042e0000057901000041000000800010043f0000002001000039000000840010043f0000000d01000039000000a40010043f0000058501000041000000c40010043f000005820100004100001521000104300000000401600370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001c02000029000000010020008c000009280000a13d000005a801000041000000000010043f0000003201000039000000040010043f00000572010000410000152100010430000000400100043d0000004402100039000005ab03000041000000000032043500000024021000390000000e03000039000005720000013d000000400100043d0000004402100039000005aa030000410000056f0000013d000000400100043d0000004402100039000005a9030000410000056f0000013d000000400100043d0000004402100039000005a103000041000000000032043500000024021000390000001b03000039000005720000013d00000000013200d9000000020010008c000005e80000c13d00000000010004150000001d0110008a0000000501100210000000000002004b00000000060000190000084f0000613d00000000010004150000001d0110008a00000005011002100000000203000039000000000303041a00000000062300a900000000052600d9000000000035004b000005e80000c13d0000084f0000013d0000001a010000290000000001010433000000000001004b0000001c08000029000008e40000613d000005700010009c000005d90000213d000000200010008c000005d90000413d0000001b010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000005d90000c13d000000000001004b0000095d0000613d0000000001000019000015200001042e0000000001000414000005490010009c0000054901008041000000c00110021000000588011001c70000800b02000039151f151a0000040f0000000100200190000009270000613d000000000101043b000000170210006c0000001801000029000005e80000413d000005890110009a000000000301041a000000000223004b000009af0000a13d000000000021041b0000001a01000029000000030110018f001a00010010003d0000001b01000029000000000101041a0000000802100270001800ff00200193000000ff0110018f000000040010008c000009b30000a13d00000001020003670000000401200370000000000101043b0000004402200370000000000402043b00000018020000290000001c030000290000001a05000029151f13e20000040f00000001020003670000000401200370000000000101043b0000001b03000029000000000303041a0000000803300270001800ff003001930000006403200370000000000303043b000000000003004b00000a150000613d000000010030008c00000a210000c13d00000018020000290000001a03000029151f14560000040f000000000001004b00000a1a0000613d00000001010003670000004402100370000000000202043b000000ff0220018f000000ff0020008c000005e80000613d0000000401100370000000000101043b000000010420003900000a230000013d000000000001042f000000400200043d0000057c0020009c0000004d0000213d0000001c030000290000000603300210000000000101043b00000000033100190000010001200039000000400010043f000000000400001900000000050200190000093a0000013d0000000005150436000000070040008c00000001044000390000000803300039000000400100043d00000aa60000813d0000057c0010009c0000004d0000213d0000010007100039000000400070043f0000057b0010009c0000004d0000213d000000000601001900000000080300190000000009000019000000800a7000390000004000a0043f000000000a08041a000000180ba00270000000ff0bb0018f000000600c7000390000000000bc0435000000100ba00270000000ff0bb0018f000000400c7000390000000000bc0435000000080ba00270000000ff0bb0018f000000200c7000390000000000bc0435000000ff0aa0018f0000000000a704350000000006760436000000070090008c000009340000813d00000001088000390000000109900039000000400700043d0000057e0070009c000009430000a13d0000004d0000013d000000400100043d0000057102000041000000000021043500000004021000390000000000820435000005490010009c0000054901008041000000400110021000000572011001c70000152100010430000005490010009c0000054901008041000000c0011002100000001c0020006c0000096e0000c13d0000000002040019000009710000013d00000577011001c700008009020000390000000005000019151f15150000040f00020000000103550000006001100270000005490010019d0000054901100197000000000001004b000009880000c13d000000010020019000000fee0000613d0000000102000039000000000402041a00000000030004140000056804400197000000040040008c000009c60000613d000005490030009c0000054903008041000000c0013002100000001b02000029000027100020008c000009bd0000813d0000000002040019000009c10000013d0000001f04100039000005af044001970000003f04400039000005af05400197000000400400043d0000000005540019000000000045004b000000000600003900000001060040390000056d0050009c0000004d0000213d00000001006001900000004d0000c13d000000400050043f0000000007140436000005af041001980000001f0510018f00000000034700190000000206000367000009a10000613d000000000806034f000000008908043c0000000007970436000000000037004b0000099d0000c13d000000000005004b000009780000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000009780000013d000000400100043d00000044021000390000058a03000041000002460000013d0000001801000029000000020010008c000009f50000413d000000400100043d00000044021000390000059703000041000000000032043500000024021000390000001203000039000005720000013d00000577011001c700008009020000390000001c030000290000000005000019151f15150000040f00020000000103550000006001100270000005490010019d0000054901100197000000000001004b000009ee0000613d0000001f04100039000005af044001970000003f04400039000005af05400197000000400400043d0000000005540019000000000045004b000000000600003900000001060040390000056d0050009c0000004d0000213d00000001006001900000004d0000c13d000000400050043f0000000006140436000005af031001980000001f0410018f00000000013600190000000205000367000009e10000613d000000000705034f000000007807043c0000000006860436000000000016004b000009dd0000c13d000000000004004b000009ee0000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000010020019000000fee0000613d0000000001000415000000130110006900000000010000020000000001000019000015200001042e0000001c01000029000000ff0010008c000005e80000613d0000001c01000029000000060010008c00000a030000213d00000001010003670000004402100370000000000202043b000000ff0220018f000000ff0020008c000005e80000613d000000070020008c00000c7c0000413d000000400100043d00000044021000390000059603000041000000000032043500000024021000390000001303000039000005720000013d000000400100043d00000020021000390000001303000029000000000032043500000016020000290000000000210435000005490010009c000005490100804100000040011002100000059b011001c7000015200001042e00000018020000290000001a03000029151f14560000040f000000000001004b00000a390000c13d000000400100043d00000044021000390000059803000041000000000032043500000024021000390000001a03000039000005720000013d0000004402200370000000000402043b00000018020000290000001c030000290000001a05000029151f13e20000040f0000001b01000029000000000101041a001a00000001001d000000ff0110018f001800000001001d0000001c0010008c00000a4a0000c13d0000001a010000290000ff000010019000000a450000c13d0000001a01000029000005990110019700000100021001bf0000001b01000029001a00000002001d000000000021041b001800000000001d00000a4a0000013d0000001c01000029000000ff0010008c000005e80000613d00000001020003670000000401200370000000000101043b0000004402200370000000000402043b0000001c020000290000000103200039000000180200002900000a250000013d0000001903000029000000000103041a000005ad0110019700000001011001bf000000000013041b00000004010000390000000101100367000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001c02000029000000070020008c000008a30000213d0000001a020000290000000802200270000000ff0620018f000000010060008c000008a30000213d00000001020003670000004403200370000000000303043b000000070030008c000008a30000213d0000001c070000290000000304700210000000060560021000000000044500190000000004340019000000000101043b0000000001140019000000000101041a000000400400043d00000060054000390000000000350435000000400340003900000000007304350000002003400039000000020500003900000000005304350000001001100270000000ff0110018f00000080034000390000000000130435000000180100002900000000001404350000006401200370000000000101043b000000a0034000390000000000130435000005490040009c000005490400804100000040014002100000000402200370000000000502043b0000000002000414000005490020009c0000054902008041000000c002200210000000000112019f00000594011001c70000800d0200003900000003030000390000059504000041151f15150000040f0000000100200190000005d90000613d0000800b01000039000000040300003900000000040004150000001f0440008a00000005044002100000058702000041151f14fe0000040f0000001602000029000000000012041b0000001b01000029000000000101041a001c00000001001d000000ff0110018f151f116a0000040f000001000200008a0000001c0220017f000000000112019f0000001b02000029000000000012041b0000000001000019000015200001042e00000000030000190000000004010019000000002502043400000000060000190000000007040019000000005805043400000000a9080434000000ff0990018f0000000009970436000000000a0a0433000000ff0aa0018f0000000000a9043500000040098000390000000009090433000000ff0990018f000000400a70003900000000009a043500000060088000390000000008080433000000ff0880018f00000060097000390000000000890435000000070060008c0000000106600039000000800770003900000aab0000413d000000060030008c0000000103300039000004000440003900000aa80000a13d000005490010009c000005490100804100000040011002100000057d011001c7000015200001042e001c00000000001d001900000000001d0000000601000039000000000101041a0000001a0010006c000008a30000a13d0000001b01000029000000000101041a000000020010008c000008a30000413d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008a30000a13d0000001b02000029000000000202041a000000020020008c000008a30000413d0000001c01100029000000000101041a001800000001001d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000101041a001600000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001802000029000000ff0320018f000000070030008c000008a30000213d00000016020000290000000802200270000000ff0420018f000000070040008c000008a30000213d000000400200043d0000057e0020009c0000004d0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000000343001900000000011300190000004001100039000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0110018f000000400220003900000000001204350000001903000029000000ff0230018f000000000021004b000000000103a0190000001c020000290000000f0020008c001c00010020003d001900000001001d00000acb0000413d000000ff0110018f001c00000000001d001400000001001d001900000001001d0000000601000039000000000101041a0000001a0010006c000008a30000a13d0000001b01000029000000000101041a000000020010008c000008a30000413d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008a30000a13d0000001b02000029000000000202041a000000020020008c000008a30000413d0000001c01100029000000000101041a001800000001001d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000101041a001600000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001802000029000000ff0320018f000000070030008c000008a30000213d00000016020000290000000802200270000000ff0420018f000000070040008c000008a30000213d000000400200043d0000057e0020009c0000004d0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000000343001900000000011300190000004001100039000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0310018f00000040012000390000000000310435000000190030006c00000019030080290000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c001900000003001d00000b530000413d000e00000003001d001c00000000001d001600000000001d000f00000000001d00000be50000013d0000000f01000029000f00010010003e000005e80000613d0000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c00000f480000813d0000000601000039000000000101041a0000001a0010006c000008a30000a13d0000001b01000029000000000101041a000000020010008c000008a30000413d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008a30000a13d0000001b02000029000000000202041a000000020020008c000008a30000413d0000001c01100029000000000101041a001900000001001d0000001b01000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001c01100029000000000101041a001800000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001902000029000000ff0320018f000000070030008c000008a30000213d00000018020000290000000802200270000000ff0420018f000000070040008c000008a30000213d000000400200043d0000057e0020009c0000004d0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000000343001900000000011300190000004001100039000000000301041a0000001801300270000000ff0410018f000000600520003900000000004504350000000804300270000000ff0440018f00000020052000390000000000450435000000ff0430018f00000000004204350000001003300270000000ff0330018f00000040022000390000000000320435000000140030006c00000c6c0000613d0000000e0030006c00000c6c0000613d00000002011001bf000000ff0110018f000000030010008c00000bdc0000c13d0000001601000029001600010010003e00000bdf0000c13d000005e80000013d00000002011001bf000000ff0110018f000000030010008c00000c760000c13d000000030100008a000000160010006b000005e80000213d0000001601000029001600020010003d00000bdf0000013d000000030100008a0000000f0010006b000005e80000213d0000000f01000029000f00020010003d00000bdf0000013d0000000401100370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d00000001020003670000004403200370000000000303043b000000070030008c000008a30000213d0000001c04000029000000030540021000000018040000290000000604400210001500000005001d001900000004001d001700000054001d0000001703300029000000000101043b0000000001130019000000000101041a0000058d0010019800000f410000c13d0000000401200370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d00000001020003670000004403200370000000000303043b000000070030008c000008a30000213d0000001c040000290000000104400039001300000004001d0000000304400210001400190040002d0000001403300029000000000101043b0000000001130019000000000101041a0000058d0010019800000f410000c13d0000000401200370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000201043b00000001010003670000004403100370000000000303043b000000ff0330018f000000ff0030008c000005e80000613d000000060030008c000008a30000213d000000170400002900000001044001bf00000000022400190000000002320019000000000202041a0000058d0020019800000f410000c13d0000000401100370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000401043b00000001010003670000004402100370000000000202043b000000ff0320018f000000ff0030008c000005e80000613d000000060030008c000008a30000213d000000010230003900000014044000290000000004240019000000000404041a0000058d0040019800000f410000c13d000000400400043d001000000004001d0000057e0040009c0000004d0000213d00000010050000290000008004500039000000400040043f0000006004500039000e00000004001d0000001a0600002900000000006404350000002004500039000c00000004001d00000000003404350000001c0400002900000000004504350000004004500039000d00000004001d0000000000040435000000400400043d000f00000004001d0000057e0040009c0000004d0000213d0000000f050000290000008004500039000000400040043f0000006004500039000a00000004001d0000001a0600002900000000006404350000002004500039000800000004001d0000000000340435000000130300002900000000003504350000004003500039000900000003001d0000000000030435000000400300043d000b00000003001d0000057e0030009c0000004d0000213d0000000b040000290000008003400039000000400030043f0000006003400039000600000003001d0000001a0500002900000000005304350000002003400039000400000003001d00000000002304350000001c0300002900000000003404350000004003400039000500000003001d0000000000030435000000400300043d000700000003001d0000057e0030009c0000004d0000213d00000007040000290000008003400039000000400030043f0000006003400039000300000003001d0000001a0500002900000000005304350000002003400039000100000003001d0000000000230435000000130200002900000000002404350000004002400039000200000002001d00000000000204350000000401100370000000000101043b0000000602000039000000000202041a000000000012004b000008a30000a13d0000000602000039000000000020043f0000000b021000c9000005840220009a000000000202041a000000fe00200190000010420000c13d000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d00000001020003670000004403200370000000000303043b000000070030008c000008a30000213d0000001703300029000000000101043b0000000001130019000000000301041a000005900330019700000010040000290000000004040433000000ff0440018f000000000343019f0000000c04000029000000000404043300000008044002100000ff000440018f000000000343019f0000000d04000029000000000404043300000010044002100000059104400197000000000343019f0000000e04000029000000000404043300000018044002100000058d04400197000000000343019f000000000031041b0000000401200370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001c02000029000000060020008c000008a30000213d00000001020003670000004403200370000000000303043b000000070030008c000008a30000213d00000015040000290000000805400039001a00000005001d00000019045000290000000003340019000000000101043b0000000001130019000000000301041a00000590033001970000000f040000290000000004040433000000ff0440018f000000000343019f0000000804000029000000000404043300000008044002100000ff000440018f000000000343019f0000000904000029000000000404043300000010044002100000059104400197000000000343019f0000000a04000029000000000404043300000018044002100000058d04400197000000000343019f000000000031041b0000000401200370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000201043b00000001010003670000004403100370000000000303043b000000ff0330018f000000ff0030008c000005e80000613d000000060030008c000008a30000213d000000190400002900000001054001bf001900000005001d000000150450002900000000022400190000000002320019000000000302041a00000590033001970000000b040000290000000004040433000000ff0440018f000000000343019f0000000404000029000000000404043300000008044002100000ff000440018f000000000343019f0000000504000029000000000404043300000010044002100000059104400197000000000343019f0000000604000029000000000404043300000018044002100000058d04400197000000000343019f000000000032041b0000000401100370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000201043b00000001010003670000004403100370000000000303043b000000ff0330018f000000ff0030008c000005e80000613d000000060030008c000008a30000213d00000019050000290000001a0450002900000000022400190000000002320019000000000302041a000005900330019700000007040000290000000004040433000000ff0440018f000000000343019f0000000104000029000000000404043300000008044002100000ff000440018f000000000343019f0000000204000029000000000404043300000010044002100000059104400197000000000343019f0000000304000029000000000404043300000018044002100000058d04400197000000000343019f000000000032041b0000000401100370000000000101043b0000000602000039000000000202041a000000000012004b000008a30000a13d0000000b011000c9000005920110009a000000000201041a000000180020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001801100029000000000201041a001a00000002001d0000056d0020009c0000004d0000213d0000001a020000290000000102200039000000000021041b000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001a01100029000000000201041a000005900220019700000010030000290000000003030433000000ff0330018f000000000232019f0000000c03000029000000000303043300000008033002100000ff000330018f000000000232019f0000000d03000029000000000303043300000010033002100000059103300197000000000232019f0000000e03000029000000000303043300000018033002100000058d03300197000000000232019f000000000021041b00000004010000390000000101100367000000000101043b0000000602000039000000000202041a000000000012004b000008a30000a13d0000000b011000c9000005920110009a000000000201041a000000180020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001801100029000000000201041a001a00000002001d0000056d0020009c0000004d0000213d0000001a020000290000000102200039000000000021041b000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001a01100029000000000201041a00000590022001970000000f030000290000000003030433000000ff0330018f000000000232019f0000000803000029000000000303043300000008033002100000ff000330018f000000000232019f0000000903000029000000000303043300000010033002100000059103300197000000000232019f0000000a03000029000000000303043300000018033002100000058d03300197000000000232019f000000000021041b00000004010000390000000101100367000000000101043b0000000602000039000000000202041a000000000012004b000008a30000a13d0000000b011000c9000005920110009a000000000201041a000000180020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001801100029000000000201041a001a00000002001d0000056d0020009c0000004d0000213d0000001a020000290000000102200039000000000021041b000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001a01100029000000000201041a00000590022001970000000b030000290000000003030433000000ff0330018f000000000232019f0000000403000029000000000303043300000008033002100000ff000330018f000000000232019f0000000503000029000000000303043300000010033002100000059103300197000000000232019f0000000603000029000000000303043300000018033002100000058d03300197000000000232019f000000000021041b00000004010000390000000101100367000000000101043b0000000602000039000000000202041a000000000012004b000008a30000a13d0000000b011000c9000005920110009a000000000201041a000000180020006c000008a30000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001801100029000000000201041a001a00000002001d0000056d0020009c0000004d0000213d0000001a020000290000000102200039000000000021041b000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d000000000101043b0000001a01100029000000000201041a000005900220019700000007030000290000000003030433000000ff0330018f000000000232019f0000000103000029000000000303043300000008033002100000ff000330018f000000000232019f0000000203000029000000000303043300000010033002100000059103300197000000000232019f0000000303000029000000000303043300000018033002100000058d03300197000000000232019f000000000021041b00000001010003670000000402100370000000000502043b0000000602000039000000000202041a000000000052004b000008a30000a13d0000000602000039000000000020043f0000000b025000c9000005840220009a000000000202041a000000400300043d00000040043000390000001c060000290000000000640435000000200430003900000001060000390000000000640435000000ff0220018f00000000002304350000004401100370000000000101043b000000ff0110018f00000060023000390000000000120435000000a001300039000000000001043500000080013000390000000000010435000005490030009c000005490300804100000040013002100000000002000414000005490020009c0000054902008041000000c002200210000000000112019f00000594011001c70000800d02000039000000030300003900000595040000410000001806000029151f15150000040f0000000100200190000005d90000613d00000a910000013d000000400100043d00000044021000390000058e03000041000000000032043500000024021000390000001003000039000005720000013d0000000f02000029000000170020002a000005e80000413d0000001602000029000000150020002a000005e80000413d0000000f02000029000000170120002900000016030000290000001502300029000000000021004b00000f560000a13d000000100100002900000f5a0000013d000000000012004b00000f5c0000a13d0000001201000029000005830110009a001b00000001001d000004f50000013d0000001001000029000000000101041a00000568041001970000000001000411000000000041004b00000f680000613d0000001202000029000005830220009a000000000202041a0000056802200197000000000021004b00000f7f0000c13d0000000201000039000000000101041a0000001102000029000000000302041a001b0000003100ad001c00000003001d000000000003004b00000f740000613d0000001c030000290000001b023000f9000000000012004b000005e80000c13d0000001b01000029000027100110011a001a00000001001d0019001c00100073000005e80000413d0000000001000414000000040040008c00000f860000c13d0000000102000039000000000100003100000f970000013d000000400100043d0000004402100039000005a703000041000000000032043500000024021000390000001903000039000005720000013d000005490010009c0000054901008041000000c0011002100000001c030000290000001a0030006c00000f8e0000c13d000000000204001900000f920000013d00000577011001c7000080090200003900000019030000290000000005000019151f15150000040f00020000000103550000006001100270000005490010019d0000054901100197000000000001004b00000fa40000c13d000000010020019000000fee0000613d0000001202000029000005830220009a000000000302041a00000000020004140000056804300197000000040040008c00000fcb0000c13d000000010200003900000fdc0000013d0000001f04100039000005af044001970000003f04400039000005af05400197000000400400043d0000000005540019000000000045004b000000000600003900000001060040390000056d0050009c0000004d0000213d00000001006001900000004d0000c13d000000400050043f0000000007140436000005af041001980000001f0510018f0000000003470019000000020600036700000fbd0000613d000000000806034f000000008908043c0000000007970436000000000037004b00000fb90000c13d000000000005004b00000f990000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000f990000013d000005490020009c0000054902008041000000c0012002100000001c030000290000001a0030006c00000fd30000c13d000000000204001900000fd70000013d00000577011001c7000080090200003900000019030000290000000005000019151f15150000040f00020000000103550000006001100270000005490010019d0000054901100197000000000001004b00000ff50000c13d000000010020019000000fee0000613d0000000102000039000000000402041a00000000030004140000056804400197000000040040008c000010260000613d000005490030009c0000054903008041000000c0013002100000001b02000029000027100020008c0000101c0000813d0000000002040019000010210000013d000000400100043d0000004402100039000005ac03000041000000000032043500000024021000390000000f03000039000005720000013d0000001f04100039000005af044001970000003f04400039000005af05400197000000400400043d0000000005540019000000000045004b000000000600003900000001060040390000056d0050009c0000004d0000213d00000001006001900000004d0000c13d000000400050043f0000000007140436000005af041001980000001f0510018f000000000347001900000002060003670000100e0000613d000000000806034f000000008908043c0000000007970436000000000037004b0000100a0000c13d000000000005004b00000fde0000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000fde0000013d0000001a02000029000000010320021000000577011001c700008009020000390000000005000019151f15150000040f00020000000103550000006001100270000005490010019d0000054901100197000000000001004b000009ee0000613d0000001f04100039000005af044001970000003f04400039000005af05400197000000400400043d0000000005540019000000000045004b000000000600003900000001060040390000056d0050009c0000004d0000213d00000001006001900000004d0000c13d000000400050043f0000000006140436000005af031001980000001f0410018f00000000013600190000000205000367000009e10000613d000000000705034f000000007807043c0000000006860436000000000016004b0000103d0000c13d000009e10000013d000000400100043d001200000001001d0000057c0010009c0000004d0000213d00000012050000290000010001500039000000400010043f000000e00250003900000001010000390000000000120435000000a00350003900000002020000390000000000230435000000800350003900000000002304350000002004500039000000010300008a00000000003404350000000000350435000000c00450003900000000000404350000006004500039000000000004043500000040045000390000000000040435000000400400043d001100000004001d0000057c0040009c0000004d0000213d00000011050000290000010004500039000000400040043f000000e0045000390000000000340435000000c00450003900000000003404350000006003500039000000000023043500000040035000390000000000230435000000a002500039000000000012043500000020025000390000000000120435000000800150003900000000000104350000000000050435001a00000000001d000010770000013d0000001a01000029000000070010008c001a00010010003d000010cf0000813d0000001a010000290000000501100210000000120210002900000000020204330000008000200190000000800300008a00000000030060190000007f0220018f000000000223019f0000001c02200029001300000002001d000000800220008a000005ad0020009c000005e80000413d000000110110002900000000010104330000008000100190000000800400008a000000000204001900000000020060190000007f0110018f000000000212019f00000001010003670000004403100370000000000303043b000000800030019000000000040060190000007f0330018f000000000334019f0000000002230019001400000002001d000000800220008a000005ad0020009c000005e80000413d00000013030000290000008000300190000000800200008a0000000002006019000000780330018f000000000332019f0000001402000029000000800220018f00000000002301a0000010730000c13d000000000002004b000000800200008a000000000200601900000014030000290000007f0330018f000000000232019f000005700020009c000010ad0000213d000000070020008c000010730000213d0000000401100370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000005d90000613d0000001302000029000000ff0220018f000000070020008c000008a30000213d0000001403000029000000ff0330018f000000070030008c000008a30000213d000000030220021000000019022000290000000002320019000000000101043b0000000001120019000000000101041a0000058d00100198000010730000613d00000004010000390000000101100367000000000101043b00000d4e0000013d000000400100043d00000044021000390000058f03000041000000000032043500000024021000390000001103000039000005720000013d0000000602000039000000000302041a000000000013004b000010de0000a13d000000000020043f0000000b011000c90000057f0110009a000000000001042d000005a801000041000000000010043f0000003201000039000000040010043f00000572010000410000152100010430000005b00010009c000010e90000813d0000004001100039000000400010043f000000000001042d000005a801000041000000000010043f0000004101000039000000040010043f00000572010000410000152100010430000005700010009c000010f90000213d000000430010008c000010f90000a13d00000001020003670000000401200370000000000101043b0000002402200370000000000202043b000000000001042d000000000100001900001521000104300000000001000032000011230000613d0000001f03100039000005af033001970000003f03300039000005af04300197000000400300043d0000000004430019000000000034004b000000000500003900000001050040390000056d0040009c000011240000213d0000000100500190000011240000c13d000000400040043f0000000005130436000005af021001980000001f0310018f00000000012500190000000204000367000011160000613d000000000604034f000000006706043c0000000005750436000000000015004b000011120000c13d000000000003004b000011230000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000000000001042d000005a801000041000000000010043f0000004101000039000000040010043f00000572010000410000152100010430000000000001004b0000112d0000613d000000000001042d000000400100043d0000004402100039000005ac03000041000000000032043500000024021000390000000f03000039000000000032043500000579020000410000000000210435000000040210003900000020030000390000000000320435000005490010009c000005490100804100000040011002100000057a011001c70000152100010430000000000001004b000011410000613d000000000001042d000000400100043d0000004402100039000005a303000041000000000032043500000024021000390000000d03000039000000000032043500000579020000410000000000210435000000040210003900000020030000390000000000320435000005490010009c000005490100804100000040011002100000057a011001c70000152100010430000000000201041a0000054b0020009c000011620000813d0000000102200039000000000021041b000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000011680000613d000000000001042d000005a801000041000000000010043f0000004101000039000000040010043f0000057201000041000015210001043000000000010000190000152100010430000000ff0110018f000000ff0010008c0000116f0000613d0000000101100039000000000001042d000005a801000041000000000010043f0000001101000039000000040010043f000005720100004100001521000104300005000000000002000100000002001d0000000602000039000000000202041a000500000001001d000000000012004b000012d80000a13d000005680230019700000005010000290000000b011000c9000200000001001d0000057f0110009a000000000101041a0000056801100197000300000002001d000000000012004b0000118a0000c13d0000000201000029000005830110009a000000000101041a0000056801100197000400000001001d000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000502000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000101100039000000000101041a000000000001004b000012e50000613d0000000603000039000000000103041a000000050010006c000012d80000a13d000000000030043f0000000201000029000005a50110009a000000000101041a000000ff00100190000012ec0000c13d0000000401000029000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000502000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000101100039000000000101041a0000000002000416000000000012004b000012de0000c13d0000000401000029000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000502000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000101100039000000000101041a000000010010006c000012de0000c13d0000000401000029000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000502000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d0000000602000039000000000202041a000000050020006c000012d80000a13d0000000202000029000005a40220009a000000000302041a000000000101043b0000000101100039000000000101041a000000000013001a0000130a0000413d0000000001130019000000000012041b0000000401000029000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000502000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b000000000001041b0000000101100039000000000001041b0000000301000029000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000502000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000101100039000000000101041a000000000001004b000012d50000613d0000000301000029000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000502000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000101100039000000000301041a00000000010004140000000302000029000000040020008c0000127d0000c13d00000001020000390000000001000031000000000001004b0000128f0000c13d000012b50000013d000005490010009c0000054901008041000000c001100210000000000003004b000012870000613d00000577011001c7000080090200003900000003040000290000000005000019000012880000013d0000000302000029151f15150000040f00020000000103550000006001100270000005490010019d0000054901100197000000000001004b000012b50000613d0000001f04100039000005af044001970000003f04400039000005af05400197000000400400043d0000000005540019000000000045004b000000000600003900000001060040390000056d0050009c000013040000213d0000000100600190000013040000c13d000000400050043f0000000006140436000005af031001980000001f0410018f00000000013600190000000205000367000012a80000613d000000000705034f000000007807043c0000000006860436000000000016004b000012a40000c13d000000000004004b000012b50000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000000100200190000012f30000613d0000000301000029000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b0000000502000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000012d60000613d000000000101043b000000000001041b0000000101100039000000000001041b000000000001042d00000000010000190000152100010430000005a801000041000000000010043f0000003201000039000000040010043f00000572010000410000152100010430000000400100043d0000004402100039000005b103000041000000000032043500000024021000390000001503000039000012f90000013d000000400100043d0000004402100039000005b303000041000000000032043500000024021000390000001103000039000012f90000013d000000400100043d0000004402100039000005a603000041000000000032043500000024021000390000001703000039000012f90000013d000000400100043d0000004402100039000005b203000041000000000032043500000024021000390000000d03000039000000000032043500000579020000410000000000210435000000040210003900000020030000390000000000320435000005490010009c000005490100804100000040011002100000057a011001c70000152100010430000005a801000041000000000010043f0000004101000039000000040010043f00000572010000410000152100010430000005a801000041000000000010043f0000001101000039000000040010043f0000057201000041000015210001043000060000000000020000000604000039000000000504041a000000000015004b000013bd0000a13d000000000040043f00000568033001970000000b041000c90000057f0540009a000000000505041a0000056805500197000000000053004b000013220000613d000005830440009a000000000404041a0000056804400197000000000043004b000013d10000c13d000600000001001d0000000001000416000400000002001d000000000021004b000013c30000c13d000500000003001d000000000030043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000013b50000613d000000000101043b0000000602000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000013b50000613d000000000101043b000000400400043d000005b00040009c00000006020000290000000403000029000013b70000813d0000000101100039000000000101041a000300000001001d0000004001400039000000400010043f000200000004001d0000000001240436000100000001001d00000000003104350000000501000029000000000010043f0000000301000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000013b50000613d000000000101043b0000000602000029000000000020043f000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000013b50000613d00000002020000290000000002020433000000000101043b000000000021041b000000010110003900000001020000290000000002020433000000000021041b0000000303000029000000000003004b000013b40000613d00000000010004140000000504000029000000040040008c0000137e0000c13d00000001020000390000000001000031000000000001004b0000138c0000c13d000013b20000013d000005490010009c0000054901008041000000c00110021000000577011001c700008009020000390000000005000019151f15150000040f000000010220018f00020000000103550000006001100270000005490010019d0000054901100197000000000001004b000013b20000613d0000001f04100039000005af044001970000003f04400039000005af05400197000000400400043d0000000005540019000000000045004b000000000600003900000001060040390000056d0050009c000013b70000213d0000000100600190000013b70000c13d000000400050043f0000000006140436000005af031001980000001f0410018f00000000013600190000000205000367000013a50000613d000000000705034f000000007807043c0000000006860436000000000016004b000013a10000c13d000000000004004b000013b20000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000000002004b000013ca0000613d000000000001042d00000000010000190000152100010430000005a801000041000000000010043f0000004101000039000000040010043f00000572010000410000152100010430000005a801000041000000000010043f0000003201000039000000040010043f00000572010000410000152100010430000000400100043d0000004402100039000005b103000041000000000032043500000024021000390000001503000039000013d70000013d000000400100043d0000004402100039000005b203000041000000000032043500000024021000390000000d03000039000013d70000013d000000400100043d0000004402100039000005a703000041000000000032043500000024021000390000001903000039000000000032043500000579020000410000000000210435000000040210003900000020030000390000000000320435000005490010009c000005490100804100000040011002100000057a011001c700001521000104300005000000000002000100000005001d000400000004001d000300000003001d000200000002001d000500000001001d000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000014370000613d0000000202000029000000020020008c00000004040000290000000303000029000014390000813d000000070030008c000014390000213d000000070040008c000014390000213d000000060220021000000003033002100000000002230019000400000042001d000000000101043b0000000401100029000000000101041a0000058d001001980000143f0000613d0000000501000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000014370000613d000000000101043b0000000401100029000000000201041a0000001003200270000000ff0330018f000000ff0030008c000014500000613d000005b4022001970000001003300210000005990330009a0000059103300197000000000223019f000000000021041b0000000501000029000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000014370000613d000000000101043b0000000401100029000000000201041a000005b502200197000000010300002900000018033002100000058d03300197000000000232019f000000000021041b000000000001042d00000000010000190000152100010430000005a801000041000000000010043f0000003201000039000000040010043f00000572010000410000152100010430000000400100043d0000004402100039000005b603000041000000000032043500000024021000390000001403000039000000000032043500000579020000410000000000210435000000040210003900000020030000390000000000320435000005490010009c000005490100804100000040011002100000057a011001c70000152100010430000005a801000041000000000010043f0000001101000039000000040010043f000005720100004100001521000104300008000000000002000200000003001d000000010020008c000014d40000213d0000000b031000c900070592003000a2000600000002001d0001000600200218000800000000001d000500000001001d000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000014e60000613d000000000101043b000400000001001d0000000601000039000000000101041a000000050010006c000014e00000a13d0000000701000029000000000101041a000000060010006c000014e00000a13d0000000701000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000014e60000613d000000000101043b0000000601100029000000000201041a000000080020006c000014e00000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000014e60000613d000000000101043b0000000801100029000000000101041a000000ff0110018f000300000001001d000000070010008c000014e00000213d0000000601000039000000000101041a000000050010006c000014e00000a13d0000000701000029000000000101041a000000060010006c000014e00000a13d0000000701000029000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000014e60000613d000000000101043b0000000601100029000000000201041a000000080020006c000014e00000a13d000000000010043f0000000001000414000005490010009c0000054901008041000000c00110021000000593011001c70000801002000039151f151a0000040f0000000100200190000014e60000613d000000000101043b0000000801100029000000000101041a0000000801100270000000ff0110018f000000070010008c000014e00000213d000000040300002900000001023000290000000303000029000000030330021000000000023200190000000001120019000000000101041a0000001801100270000000020110014f000000ff00100190000014d20000613d00000008010000290000000e0010008c000800010010003d0000000501000029000014600000a13d0000000001000019000000000001042d0000000101000039000000000001042d000000000010043f0000000501000039000000200010043f0000000001000414000005490010009c0000054901008041000000c00110021000000576011001c70000801002000039151f151a0000040f0000000100200190000014e60000613d000005a801000041000000000010043f0000003201000039000000040010043f0000057201000041000015210001043000000000010000190000152100010430000000000001042f000005490010009c00000549010080410000004001100210000005490020009c00000549020080410000006002200210000000000112019f0000000002000414000005490020009c0000054902008041000000c002200210000000000112019f00000577011001c70000801002000039151f151a0000040f0000000100200190000014fc0000613d000000000101043b000000000001042d0000000001000019000015210001043000000000050100190000000000200443000000040030008c000015050000a13d000000050140027000000000010100310000000400100443000005490030009c000005490300804100000060013002100000000002000414000005490020009c0000054902008041000000c002200210000000000112019f000005b7011001c70000000002050019151f151a0000040f0000000100200190000015140000613d000000000101043b000000000001042d000000000001042f00001518002104210000000102000039000000000001042d0000000002000019000000000001042d0000151d002104230000000102000039000000000001042d0000000002000019000000000001042d0000151f00000432000015200001042e00001521000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000a001ecdc00000000000000000000000000000000000000000000000000000000cd00cb8900000000000000000000000000000000000000000000000000000000e80053f900000000000000000000000000000000000000000000000000000000e80053fa00000000000000000000000000000000000000000000000000000000f0e301a500000000000000000000000000000000000000000000000000000000f4f3b20000000000000000000000000000000000000000000000000000000000cd00cb8a00000000000000000000000000000000000000000000000000000000cf453a2e00000000000000000000000000000000000000000000000000000000b86ae7d200000000000000000000000000000000000000000000000000000000b86ae7d300000000000000000000000000000000000000000000000000000000bbbcd3c400000000000000000000000000000000000000000000000000000000c08d1fe500000000000000000000000000000000000000000000000000000000a001ecdd00000000000000000000000000000000000000000000000000000000ae06c1b70000000000000000000000000000000000000000000000000000000080b010fa0000000000000000000000000000000000000000000000000000000093653c130000000000000000000000000000000000000000000000000000000093653c1400000000000000000000000000000000000000000000000000000000953a7381000000000000000000000000000000000000000000000000000000009a56ab7f0000000000000000000000000000000000000000000000000000000080b010fb000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000034a8014a0000000000000000000000000000000000000000000000000000000034a8014b000000000000000000000000000000000000000000000000000000006e888d8a00000000000000000000000000000000000000000000000000000000728772f4000000000000000000000000000000000000000000000000000000000d022043000000000000000000000000000000000000000000000000000000002e1a7d4d000000000000000000000000ffffffffffffffffffffffffffffffffffffffff70a0823100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000080000000000000000000000000000000000000000000000000000000000000000000000000ffffffe0a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5274afe70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000009996b315000000000000000000000000000000000000000000000000000000001425ea42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e6f2077616765722070726f706f73616c20657869737473000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe7f000000000000000000000000000000000000000000000000fffffffffffffeff0000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f09addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2c109addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2b847616d6553657373696f6e2068617320656e6465640000000000000000000000000000000000000000000000000000000000006400000080000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2c009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2bd4e6f7420796f7572207475726e0000000000000000000000000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2bb796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d95539132020000020000000000000000000000000000000400000000000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2b9506c6179657220322072616e206f7574206f662074696d65000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2ba506c6179657220312072616e206f7574206f662074696d65000000000000000000000000000000000000000000000000000000000000000000000000ff0000004772696420686173206120737461636b000000000000000000000000000000004e6f2061646a6163656e7420737461636b000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000ff000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2b7020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000c00000000000000000000000000105be8a55914fe98f3e45e26997b7279e726a2a8282aa42bfeedd0b5d383f51496e76616c696420636f6f7264696e6174657300000000000000000000000000496e76616c69642067616d6520696e64657800000000000000000000000000004e6f20737461636b207769746820636f6c6f7220657869737473000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000004000000000000000000000000046656520746f6f206869676800000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000400000008000000000000000004e6f7420706c6179657220320000000000000000000000000000000000000000506c6179657220312068617320616e206163746976652073657373696f6e0000506c6179657220322068617320616e206163746976652067616d65000000000000000000000000000000000000000000000001600000000000000000000000004e6f7420746865206f776e65720000000000000000000000000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2bf09addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2be576167657220616c72656164792070726f6365737365640000000000000000004e6f74206120706c61796572206f6620746869732067616d65000000000000004e487b7100000000000000000000000000000000000000000000000000000000506c617965722032207374696c6c206861732074696d65000000000000000000506c617965722031207374696c6c206861732074696d650000000000000000004e6f74207468652077696e6e65720000000000000000000000000000000000005472616e73666572206661696c65640000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffc0576167657220616d6f756e74206d69736d617463680000000000000000000000526566756e64206661696c6564000000000000000000000000000000000000004e6f2077616765722070726f706f73616c000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff537461636b20646f6573206e6f7420657869737400000000000000000000000002000002000000000000000000000000000000000000000000000000000000000464db4259af436a4efe248feb891dca5bd9de6ce1c4dc92bce2e3d274673627
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.